diff options
author | Anup Patel <apatel@ventanamicro.com> | 2022-02-18 20:48:41 +0300 |
---|---|---|
committer | Anup Patel <anup@brainfault.org> | 2022-02-28 07:13:12 +0300 |
commit | f3f4604c196dea70b0bb64aba747aa6d7a9e244f (patch) | |
tree | fb57357531b34399cb0b5e2a77f280ebee781c44 /include | |
parent | f2ccf2f783b43e8ca2b42cdeade7663599284a86 (diff) | |
download | opensbi-f3f4604c196dea70b0bb64aba747aa6d7a9e244f.tar.xz |
lib: sbi: Add a simple external interrupt handling framework
Currently, the external interrupt handling is scattered between
sbi_init and sbi_trap. This patch moves all external interrupt
handling into a simple framework called sbi_irqchip.
Signed-off-by: Anup Patel <apatel@ventanamicro.com>
Reviewed-by: Xiang W <wxjstz@126.com>
Reviewed-by: Atish Patra <atishp@rivosinc.com>
Diffstat (limited to 'include')
-rw-r--r-- | include/sbi/sbi_irqchip.h | 44 | ||||
-rw-r--r-- | include/sbi/sbi_trap.h | 2 |
2 files changed, 44 insertions, 2 deletions
diff --git a/include/sbi/sbi_irqchip.h b/include/sbi/sbi_irqchip.h new file mode 100644 index 0000000..6acc6e3 --- /dev/null +++ b/include/sbi/sbi_irqchip.h @@ -0,0 +1,44 @@ +/* + * SPDX-License-Identifier: BSD-2-Clause + * + * Copyright (c) 2022 Ventana Micro Systems Inc. + * + * Authors: + * Anup Patel <apatel@ventanamicro.com> + */ + +#ifndef __SBI_IRQCHIP_H__ +#define __SBI_IRQCHIP_H__ + +#include <sbi/sbi_types.h> + +struct sbi_scratch; +struct sbi_trap_regs; + +/** + * Set external interrupt handling function + * + * This function is called by OpenSBI platform code to set a handler for + * external interrupts + * + * @param fn function pointer for handling external irqs + */ +void sbi_irqchip_set_irqfn(int (*fn)(struct sbi_trap_regs *regs)); + +/** + * Process external interrupts + * + * This function is called by sbi_trap_handler() to handle external + * interrupts. + * + * @param regs pointer for trap registers + */ +int sbi_irqchip_process(struct sbi_trap_regs *regs); + +/** Initialize interrupt controllers */ +int sbi_irqchip_init(struct sbi_scratch *scratch, bool cold_boot); + +/** Exit interrupt controllers */ +void sbi_irqchip_exit(struct sbi_scratch *scratch); + +#endif diff --git a/include/sbi/sbi_trap.h b/include/sbi/sbi_trap.h index 4f611fa..d205056 100644 --- a/include/sbi/sbi_trap.h +++ b/include/sbi/sbi_trap.h @@ -205,8 +205,6 @@ struct sbi_trap_info { int sbi_trap_redirect(struct sbi_trap_regs *regs, struct sbi_trap_info *trap); -void sbi_trap_set_external_irqfn(int (*fn)(struct sbi_trap_regs *regs)); - struct sbi_trap_regs *sbi_trap_handler(struct sbi_trap_regs *regs); void __noreturn sbi_trap_exit(const struct sbi_trap_regs *regs); |