home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / src / linux-headers-2.6.17-6 / include / asm-frv / irq-routing.h < prev    next >
Encoding:
C/C++ Source or Header  |  2006-08-11  |  1.9 KB  |  71 lines

  1. /* irq-routing.h: multiplexed IRQ routing
  2.  *
  3.  * Copyright (C) 2004 Red Hat, Inc. All Rights Reserved.
  4.  * Written by David Howells (dhowells@redhat.com)
  5.  *
  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.
  10.  */
  11.  
  12. #ifndef _ASM_IRQ_ROUTING_H
  13. #define _ASM_IRQ_ROUTING_H
  14.  
  15. #ifndef __ASSEMBLY__
  16.  
  17. #include <linux/spinlock.h>
  18. #include <asm/irq.h>
  19.  
  20. struct irq_source;
  21. struct irq_level;
  22.  
  23. /*
  24.  * IRQ action distribution sets
  25.  */
  26. struct irq_group {
  27.     int            first_irq;    /* first IRQ distributed here */
  28.     void (*control)(struct irq_group *group, int index, int on);
  29.  
  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 */
  33. };
  34.  
  35. /*
  36.  * IRQ source manager
  37.  */
  38. struct irq_source {
  39.     struct irq_source    *next;
  40.     struct irq_level    *level;
  41.     const char        *muxname;
  42.     volatile void __iomem    *muxdata;
  43.     unsigned long        irqmask;
  44.  
  45.     void (*doirq)(struct irq_source *source);
  46. };
  47.  
  48. /*
  49.  * IRQ level management (per CPU IRQ priority / entry vector)
  50.  */
  51. struct irq_level {
  52.     int            usage;
  53.     int            disable_count;
  54.     unsigned long        flags;        /* current SA_INTERRUPT and SA_SHIRQ settings */
  55.     spinlock_t        lock;
  56.     struct irq_source    *sources;
  57. };
  58.  
  59. extern struct irq_level frv_irq_levels[16];
  60. extern struct irq_group *irq_groups[NR_IRQ_GROUPS];
  61.  
  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);
  67.  
  68. #endif /* !__ASSEMBLY__ */
  69.  
  70. #endif /* _ASM_IRQ_ROUTING_H */
  71.