1 #ifndef __ASM_HARDIRQ_H 2 #define __ASM_HARDIRQ_H 3 4 #include <linux/cache.h> 5 #include <linux/threads.h> 6 #include <asm/irq.h> 7 8 #define NR_IPI 5 9 10 typedef struct { 11 unsigned int __softirq_pending; 12 #ifdef CONFIG_LOCAL_TIMERS 13 unsigned int local_timer_irqs; 14 #endif 15 #ifdef CONFIG_SMP 16 unsigned int ipi_irqs[NR_IPI]; 17 #endif 18 } ____cacheline_aligned irq_cpustat_t; 19 20 #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ 21 22 #define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++ 23 #define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member) 24 25 #if NR_IRQS > 512 26 #define HARDIRQ_BITS 10 27 #elif NR_IRQS > 256 28 #define HARDIRQ_BITS 9 29 #else 30 #define HARDIRQ_BITS 8 31 #endif 32 33 /* 34 * The hardirq mask has to be large enough to have space 35 * for potentially all IRQ sources in the system nesting 36 * on a single CPU: 37 */ 38 #if (1 << HARDIRQ_BITS) < NR_IRQS 39 # error HARDIRQ_BITS is too low! 40 #endif 41 42 #define __ARCH_IRQ_EXIT_IRQS_DISABLED 1 43 44 #endif /* __ASM_HARDIRQ_H */ 45