1 /* irq-routing.h: multiplexed IRQ routing
3 * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
4 * Written by David Howells (dhowells@redhat.com)
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version
9 * 2 of the License, or (at your option) any later version.
12 #ifndef _ASM_IRQ_ROUTING_H
13 #define _ASM_IRQ_ROUTING_H
17 #include <linux/spinlock.h>
24 * IRQ action distribution sets
27 int first_irq
; /* first IRQ distributed here */
28 void (*control
)(struct irq_group
*group
, int index
, int on
);
30 struct irqaction
*actions
[NR_IRQ_ACTIONS_PER_GROUP
]; /* IRQ action chains */
31 struct irq_source
*sources
[NR_IRQ_ACTIONS_PER_GROUP
]; /* IRQ sources */
32 int disable_cnt
[NR_IRQ_ACTIONS_PER_GROUP
]; /* disable counts */
39 struct irq_source
*next
;
40 struct irq_level
*level
;
42 volatile void __iomem
*muxdata
;
43 unsigned long irqmask
;
45 void (*doirq
)(struct irq_source
*source
);
49 * IRQ level management (per CPU IRQ priority / entry vector)
54 unsigned long flags
; /* current SA_INTERRUPT and SA_SHIRQ settings */
56 struct irq_source
*sources
;
59 extern struct irq_level frv_irq_levels
[16];
60 extern struct irq_group
*irq_groups
[NR_IRQ_GROUPS
];
62 extern void frv_irq_route(struct irq_source
*source
, int irqlevel
);
63 extern void frv_irq_route_external(struct irq_source
*source
, int irq
);
64 extern void frv_irq_set_group(struct irq_group
*group
);
65 extern void distribute_irqs(struct irq_group
*group
, unsigned long irqmask
);
66 extern void route_cpu_irqs(void);
68 #endif /* !__ASSEMBLY__ */
70 #endif /* _ASM_IRQ_ROUTING_H */