xref: /OK3568_Linux_fs/kernel/arch/powerpc/include/asm/irq.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun #ifdef __KERNEL__
3*4882a593Smuzhiyun #ifndef _ASM_POWERPC_IRQ_H
4*4882a593Smuzhiyun #define _ASM_POWERPC_IRQ_H
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun /*
7*4882a593Smuzhiyun  */
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/irqdomain.h>
10*4882a593Smuzhiyun #include <linux/threads.h>
11*4882a593Smuzhiyun #include <linux/list.h>
12*4882a593Smuzhiyun #include <linux/radix-tree.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include <asm/types.h>
15*4882a593Smuzhiyun #include <linux/atomic.h>
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun extern atomic_t ppc_n_lost_interrupts;
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun /* This number is used when no interrupt has been assigned */
21*4882a593Smuzhiyun #define NO_IRQ			(0)
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /* Total number of virq in the platform */
24*4882a593Smuzhiyun #define NR_IRQS		CONFIG_NR_IRQS
25*4882a593Smuzhiyun 
26*4882a593Smuzhiyun /* Same thing, used by the generic IRQ code */
27*4882a593Smuzhiyun #define NR_IRQS_LEGACY		NUM_ISA_INTERRUPTS
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun extern irq_hw_number_t virq_to_hw(unsigned int virq);
30*4882a593Smuzhiyun 
irq_canonicalize(int irq)31*4882a593Smuzhiyun static __inline__ int irq_canonicalize(int irq)
32*4882a593Smuzhiyun {
33*4882a593Smuzhiyun 	return irq;
34*4882a593Smuzhiyun }
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun extern int distribute_irqs;
37*4882a593Smuzhiyun 
38*4882a593Smuzhiyun struct pt_regs;
39*4882a593Smuzhiyun 
40*4882a593Smuzhiyun #define __ARCH_HAS_DO_SOFTIRQ
41*4882a593Smuzhiyun 
42*4882a593Smuzhiyun #if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
43*4882a593Smuzhiyun /*
44*4882a593Smuzhiyun  * Per-cpu stacks for handling critical, debug and machine check
45*4882a593Smuzhiyun  * level interrupts.
46*4882a593Smuzhiyun  */
47*4882a593Smuzhiyun extern void *critirq_ctx[NR_CPUS];
48*4882a593Smuzhiyun extern void *dbgirq_ctx[NR_CPUS];
49*4882a593Smuzhiyun extern void *mcheckirq_ctx[NR_CPUS];
50*4882a593Smuzhiyun #endif
51*4882a593Smuzhiyun 
52*4882a593Smuzhiyun /*
53*4882a593Smuzhiyun  * Per-cpu stacks for handling hard and soft interrupts.
54*4882a593Smuzhiyun  */
55*4882a593Smuzhiyun extern void *hardirq_ctx[NR_CPUS];
56*4882a593Smuzhiyun extern void *softirq_ctx[NR_CPUS];
57*4882a593Smuzhiyun 
58*4882a593Smuzhiyun void call_do_softirq(void *sp);
59*4882a593Smuzhiyun void call_do_irq(struct pt_regs *regs, void *sp);
60*4882a593Smuzhiyun extern void do_IRQ(struct pt_regs *regs);
61*4882a593Smuzhiyun extern void __init init_IRQ(void);
62*4882a593Smuzhiyun extern void __do_irq(struct pt_regs *regs);
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun int irq_choose_cpu(const struct cpumask *mask);
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun #endif /* _ASM_IRQ_H */
67*4882a593Smuzhiyun #endif /* __KERNEL__ */
68