1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0 */ 2*4882a593Smuzhiyun #ifndef __ASM_SH_IRQ_H 3*4882a593Smuzhiyun #define __ASM_SH_IRQ_H 4*4882a593Smuzhiyun 5*4882a593Smuzhiyun #include <linux/cpumask.h> 6*4882a593Smuzhiyun #include <asm/machvec.h> 7*4882a593Smuzhiyun 8*4882a593Smuzhiyun /* 9*4882a593Smuzhiyun * Only legacy non-sparseirq platforms have to set a reasonably sane 10*4882a593Smuzhiyun * value here. sparseirq platforms allocate their irq_descs on the fly, 11*4882a593Smuzhiyun * so will expand automatically based on the number of registered IRQs. 12*4882a593Smuzhiyun */ 13*4882a593Smuzhiyun #ifdef CONFIG_SPARSE_IRQ 14*4882a593Smuzhiyun # define NR_IRQS 8 15*4882a593Smuzhiyun #else 16*4882a593Smuzhiyun # define NR_IRQS 512 17*4882a593Smuzhiyun #endif 18*4882a593Smuzhiyun 19*4882a593Smuzhiyun /* 20*4882a593Smuzhiyun * This is a special IRQ number for indicating that no IRQ has been 21*4882a593Smuzhiyun * triggered and to simply ignore the IRQ dispatch. This is a special 22*4882a593Smuzhiyun * case that can happen with IRQ auto-distribution when multiple CPUs 23*4882a593Smuzhiyun * are woken up and signalled in parallel. 24*4882a593Smuzhiyun */ 25*4882a593Smuzhiyun #define NO_IRQ_IGNORE ((unsigned int)-1) 26*4882a593Smuzhiyun 27*4882a593Smuzhiyun /* 28*4882a593Smuzhiyun * Simple Mask Register Support 29*4882a593Smuzhiyun */ 30*4882a593Smuzhiyun extern void make_maskreg_irq(unsigned int irq); 31*4882a593Smuzhiyun extern unsigned short *irq_mask_register; 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun /* 34*4882a593Smuzhiyun * PINT IRQs 35*4882a593Smuzhiyun */ 36*4882a593Smuzhiyun void init_IRQ_pint(void); 37*4882a593Smuzhiyun void make_imask_irq(unsigned int irq); 38*4882a593Smuzhiyun generic_irq_demux(int irq)39*4882a593Smuzhiyunstatic inline int generic_irq_demux(int irq) 40*4882a593Smuzhiyun { 41*4882a593Smuzhiyun return irq; 42*4882a593Smuzhiyun } 43*4882a593Smuzhiyun 44*4882a593Smuzhiyun #define irq_demux(irq) sh_mv.mv_irq_demux(irq) 45*4882a593Smuzhiyun 46*4882a593Smuzhiyun void init_IRQ(void); 47*4882a593Smuzhiyun void migrate_irqs(void); 48*4882a593Smuzhiyun 49*4882a593Smuzhiyun asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs); 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun #ifdef CONFIG_IRQSTACKS 52*4882a593Smuzhiyun extern void irq_ctx_init(int cpu); 53*4882a593Smuzhiyun extern void irq_ctx_exit(int cpu); 54*4882a593Smuzhiyun # define __ARCH_HAS_DO_SOFTIRQ 55*4882a593Smuzhiyun #else 56*4882a593Smuzhiyun # define irq_ctx_init(cpu) do { } while (0) 57*4882a593Smuzhiyun # define irq_ctx_exit(cpu) do { } while (0) 58*4882a593Smuzhiyun #endif 59*4882a593Smuzhiyun 60*4882a593Smuzhiyun #ifdef CONFIG_INTC_BALANCING 61*4882a593Smuzhiyun extern unsigned int irq_lookup(unsigned int irq); 62*4882a593Smuzhiyun extern void irq_finish(unsigned int irq); 63*4882a593Smuzhiyun #else 64*4882a593Smuzhiyun #define irq_lookup(irq) (irq) 65*4882a593Smuzhiyun #define irq_finish(irq) do { } while (0) 66*4882a593Smuzhiyun #endif 67*4882a593Smuzhiyun 68*4882a593Smuzhiyun #include <asm-generic/irq.h> 69*4882a593Smuzhiyun 70*4882a593Smuzhiyun #endif /* __ASM_SH_IRQ_H */ 71