162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-or-later */
262306a36Sopenharmony_ci#ifdef __KERNEL__
362306a36Sopenharmony_ci#ifndef _ASM_POWERPC_IRQ_H
462306a36Sopenharmony_ci#define _ASM_POWERPC_IRQ_H
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci/*
762306a36Sopenharmony_ci */
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/threads.h>
1062306a36Sopenharmony_ci#include <linux/list.h>
1162306a36Sopenharmony_ci#include <linux/radix-tree.h>
1262306a36Sopenharmony_ci
1362306a36Sopenharmony_ci#include <asm/types.h>
1462306a36Sopenharmony_ci#include <linux/atomic.h>
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciextern atomic_t ppc_n_lost_interrupts;
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci/* Total number of virq in the platform */
2062306a36Sopenharmony_ci#define NR_IRQS		CONFIG_NR_IRQS
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_ci/* Number of irqs reserved for a legacy isa controller */
2362306a36Sopenharmony_ci#define NR_IRQS_LEGACY		16
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ciextern irq_hw_number_t virq_to_hw(unsigned int virq);
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_cistatic __inline__ int irq_canonicalize(int irq)
2862306a36Sopenharmony_ci{
2962306a36Sopenharmony_ci	return irq;
3062306a36Sopenharmony_ci}
3162306a36Sopenharmony_ci
3262306a36Sopenharmony_ciextern int distribute_irqs;
3362306a36Sopenharmony_ci
3462306a36Sopenharmony_cistruct pt_regs;
3562306a36Sopenharmony_ci
3662306a36Sopenharmony_ci#ifdef CONFIG_BOOKE_OR_40x
3762306a36Sopenharmony_ci/*
3862306a36Sopenharmony_ci * Per-cpu stacks for handling critical, debug and machine check
3962306a36Sopenharmony_ci * level interrupts.
4062306a36Sopenharmony_ci */
4162306a36Sopenharmony_ciextern void *critirq_ctx[NR_CPUS];
4262306a36Sopenharmony_ciextern void *dbgirq_ctx[NR_CPUS];
4362306a36Sopenharmony_ciextern void *mcheckirq_ctx[NR_CPUS];
4462306a36Sopenharmony_ci#endif
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci/*
4762306a36Sopenharmony_ci * Per-cpu stacks for handling hard and soft interrupts.
4862306a36Sopenharmony_ci */
4962306a36Sopenharmony_ciextern void *hardirq_ctx[NR_CPUS];
5062306a36Sopenharmony_ciextern void *softirq_ctx[NR_CPUS];
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_civoid __do_IRQ(struct pt_regs *regs);
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciint irq_choose_cpu(const struct cpumask *mask);
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_ci#if defined(CONFIG_PPC_BOOK3S_64) && defined(CONFIG_NMI_IPI)
5762306a36Sopenharmony_ciextern void arch_trigger_cpumask_backtrace(const cpumask_t *mask,
5862306a36Sopenharmony_ci					   int exclude_cpu);
5962306a36Sopenharmony_ci#define arch_trigger_cpumask_backtrace arch_trigger_cpumask_backtrace
6062306a36Sopenharmony_ci#endif
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci#endif /* _ASM_IRQ_H */
6362306a36Sopenharmony_ci#endif /* __KERNEL__ */
64