12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- /* irq-routing.h: multiplexed IRQ routing
- *
- * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
- * Written by David Howells (dhowells@redhat.com)
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version
- * 2 of the License, or (at your option) any later version.
- */
- #ifndef _ASM_IRQ_ROUTING_H
- #define _ASM_IRQ_ROUTING_H
- #ifndef __ASSEMBLY__
- #include <linux/spinlock.h>
- #include <asm/irq.h>
- struct irq_source;
- struct irq_level;
- /*
- * IRQ action distribution sets
- */
- struct irq_group {
- int first_irq; /* first IRQ distributed here */
- void (*control)(struct irq_group *group, int index, int on);
- struct irqaction *actions[NR_IRQ_ACTIONS_PER_GROUP]; /* IRQ action chains */
- struct irq_source *sources[NR_IRQ_ACTIONS_PER_GROUP]; /* IRQ sources */
- int disable_cnt[NR_IRQ_ACTIONS_PER_GROUP]; /* disable counts */
- };
- /*
- * IRQ source manager
- */
- struct irq_source {
- struct irq_source *next;
- struct irq_level *level;
- const char *muxname;
- volatile void __iomem *muxdata;
- unsigned long irqmask;
- void (*doirq)(struct irq_source *source);
- };
- /*
- * IRQ level management (per CPU IRQ priority / entry vector)
- */
- struct irq_level {
- int usage;
- int disable_count;
- unsigned long flags; /* current SA_INTERRUPT and SA_SHIRQ settings */
- spinlock_t lock;
- struct irq_source *sources;
- };
- extern struct irq_level frv_irq_levels[16];
- extern struct irq_group *irq_groups[NR_IRQ_GROUPS];
- extern void frv_irq_route(struct irq_source *source, int irqlevel);
- extern void frv_irq_route_external(struct irq_source *source, int irq);
- extern void frv_irq_set_group(struct irq_group *group);
- extern void distribute_irqs(struct irq_group *group, unsigned long irqmask);
- extern void route_cpu_irqs(void);
- #endif /* !__ASSEMBLY__ */
- #endif /* _ASM_IRQ_ROUTING_H */
|