| Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | #ifndef _ALPHA_IRQ_H | 
|  | 2 | #define _ALPHA_IRQ_H | 
|  | 3 |  | 
|  | 4 | /* | 
|  | 5 | *	linux/include/alpha/irq.h | 
|  | 6 | * | 
|  | 7 | *	(C) 1994 Linus Torvalds | 
|  | 8 | */ | 
|  | 9 |  | 
|  | 10 | #include <linux/linkage.h> | 
|  | 11 | #include <linux/config.h> | 
|  | 12 |  | 
|  | 13 | #if   defined(CONFIG_ALPHA_GENERIC) | 
|  | 14 |  | 
|  | 15 | /* Here NR_IRQS is not exact, but rather an upper bound.  This is used | 
|  | 16 | many places throughout the kernel to size static arrays.  That's ok, | 
|  | 17 | we'll use alpha_mv.nr_irqs when we want the real thing.  */ | 
|  | 18 |  | 
|  | 19 | /* When LEGACY_START_ADDRESS is selected, we leave out: | 
|  | 20 | TITAN | 
|  | 21 | WILDFIRE | 
|  | 22 | MARVEL | 
|  | 23 |  | 
|  | 24 | This helps keep the kernel object size reasonable for the majority | 
|  | 25 | of machines. | 
|  | 26 | */ | 
|  | 27 |  | 
|  | 28 | # if defined(CONFIG_ALPHA_LEGACY_START_ADDRESS) | 
|  | 29 | #  define NR_IRQS      (128)           /* max is RAWHIDE/TAKARA */ | 
|  | 30 | # else | 
|  | 31 | #  define NR_IRQS      (32768 + 16)    /* marvel - 32 pids */ | 
|  | 32 | # endif | 
|  | 33 |  | 
|  | 34 | #elif defined(CONFIG_ALPHA_CABRIOLET) || \ | 
|  | 35 | defined(CONFIG_ALPHA_EB66P)     || \ | 
|  | 36 | defined(CONFIG_ALPHA_EB164)     || \ | 
|  | 37 | defined(CONFIG_ALPHA_PC164)     || \ | 
|  | 38 | defined(CONFIG_ALPHA_LX164) | 
|  | 39 | # define NR_IRQS	35 | 
|  | 40 |  | 
|  | 41 | #elif defined(CONFIG_ALPHA_EB66)      || \ | 
|  | 42 | defined(CONFIG_ALPHA_EB64P)     || \ | 
|  | 43 | defined(CONFIG_ALPHA_MIKASA) | 
|  | 44 | # define NR_IRQS	32 | 
|  | 45 |  | 
|  | 46 | #elif defined(CONFIG_ALPHA_ALCOR)     || \ | 
|  | 47 | defined(CONFIG_ALPHA_MIATA)     || \ | 
|  | 48 | defined(CONFIG_ALPHA_RUFFIAN)   || \ | 
|  | 49 | defined(CONFIG_ALPHA_RX164)     || \ | 
|  | 50 | defined(CONFIG_ALPHA_NORITAKE) | 
|  | 51 | # define NR_IRQS	48 | 
|  | 52 |  | 
|  | 53 | #elif defined(CONFIG_ALPHA_SABLE)     || \ | 
|  | 54 | defined(CONFIG_ALPHA_SX164) | 
|  | 55 | # define NR_IRQS	40 | 
|  | 56 |  | 
|  | 57 | #elif defined(CONFIG_ALPHA_DP264) || \ | 
|  | 58 | defined(CONFIG_ALPHA_LYNX)  || \ | 
|  | 59 | defined(CONFIG_ALPHA_SHARK) || \ | 
|  | 60 | defined(CONFIG_ALPHA_EIGER) | 
|  | 61 | # define NR_IRQS	64 | 
|  | 62 |  | 
|  | 63 | #elif defined(CONFIG_ALPHA_TITAN) | 
|  | 64 | #define NR_IRQS		80 | 
|  | 65 |  | 
|  | 66 | #elif defined(CONFIG_ALPHA_RAWHIDE) || \ | 
|  | 67 | defined(CONFIG_ALPHA_TAKARA) | 
|  | 68 | # define NR_IRQS	128 | 
|  | 69 |  | 
|  | 70 | #elif defined(CONFIG_ALPHA_WILDFIRE) | 
|  | 71 | # define NR_IRQS	2048 /* enuff for 8 QBBs */ | 
|  | 72 |  | 
|  | 73 | #elif defined(CONFIG_ALPHA_MARVEL) | 
|  | 74 | # define NR_IRQS	(32768 + 16) 	/* marvel - 32 pids*/ | 
|  | 75 |  | 
|  | 76 | #else /* everyone else */ | 
|  | 77 | # define NR_IRQS	16 | 
|  | 78 | #endif | 
|  | 79 |  | 
|  | 80 | static __inline__ int irq_canonicalize(int irq) | 
|  | 81 | { | 
|  | 82 | /* | 
|  | 83 | * XXX is this true for all Alpha's?  The old serial driver | 
|  | 84 | * did it this way for years without any complaints, so.... | 
|  | 85 | */ | 
|  | 86 | return ((irq == 2) ? 9 : irq); | 
|  | 87 | } | 
|  | 88 |  | 
|  | 89 | extern void disable_irq(unsigned int); | 
|  | 90 | extern void disable_irq_nosync(unsigned int); | 
|  | 91 | extern void enable_irq(unsigned int); | 
|  | 92 |  | 
|  | 93 | struct pt_regs; | 
|  | 94 | extern void (*perf_irq)(unsigned long, struct pt_regs *); | 
|  | 95 |  | 
|  | 96 | struct irqaction; | 
|  | 97 | int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); | 
|  | 98 |  | 
|  | 99 |  | 
|  | 100 | #endif /* _ALPHA_IRQ_H */ |