Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
dn_ints.c
Go to the documentation of this file.
1 #include <linux/interrupt.h>
2 #include <linux/irq.h>
3 
4 #include <asm/traps.h>
5 #include <asm/apollohw.h>
6 
7 unsigned int apollo_irq_startup(struct irq_data *data)
8 {
9  unsigned int irq = data->irq;
10 
11  if (irq < 8)
12  *(volatile unsigned char *)(pica+1) &= ~(1 << irq);
13  else
14  *(volatile unsigned char *)(picb+1) &= ~(1 << (irq - 8));
15  return 0;
16 }
17 
19 {
20  unsigned int irq = data->irq;
21 
22  if (irq < 8)
23  *(volatile unsigned char *)(pica+1) |= (1 << irq);
24  else
25  *(volatile unsigned char *)(picb+1) |= (1 << (irq - 8));
26 }
27 
29 {
30  *(volatile unsigned char *)(pica) = 0x20;
31  *(volatile unsigned char *)(picb) = 0x20;
32 }
33 
34 static struct irq_chip apollo_irq_chip = {
35  .name = "apollo",
36  .irq_startup = apollo_irq_startup,
37  .irq_shutdown = apollo_irq_shutdown,
38  .irq_eoi = apollo_irq_eoi,
39 };
40 
41 
42 void __init dn_init_IRQ(void)
43 {
46  IRQ_APOLLO, 16);
47 }