From 3817cc6fdd69aa344ce78cb59d7d872dc1cf6eee Mon Sep 17 00:00:00 2001 From: Alberto Escolar Piedras Date: Thu, 15 Aug 2019 18:14:45 +0200 Subject: [PATCH] native_posix & nrf52_bsim: Add z_arch_irq_connect_dynamic() Add support for CONFIG_DYNAMIC_INTERRUPTS in both native_posix and the nrf52_bsim Signed-off-by: Alberto Escolar Piedras --- boards/posix/native_posix/irq_handler.c | 24 ++++++++++++++++++++++++ boards/posix/nrf52_bsim/irq_handler.c | 24 ++++++++++++++++++++++++ 2 files changed, 48 insertions(+) diff --git a/boards/posix/native_posix/irq_handler.c b/boards/posix/native_posix/irq_handler.c index d7b65789056..b79bac7622a 100644 --- a/boards/posix/native_posix/irq_handler.c +++ b/boards/posix/native_posix/irq_handler.c @@ -263,6 +263,30 @@ void z_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags) hw_irq_ctrl_prio_set(irq, prio); } +#ifdef CONFIG_DYNAMIC_INTERRUPTS +/** + * Configure a dynamic interrupt. + * + * Use this instead of IRQ_CONNECT() if arguments cannot be known at build time. + * + * @param irq IRQ line number + * @param priority Interrupt priority + * @param routine Interrupt service routine + * @param parameter ISR parameter + * @param flags Arch-specific IRQ configuration flags + * + * @return The vector assigned to this interrupt + */ +int z_arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, + void (*routine)(void *parameter), void *parameter, + u32_t flags) +{ + z_isr_declare(irq, (int)flags, routine, parameter); + z_irq_priority_set(irq, priority, flags); + return irq; +} +#endif /* CONFIG_DYNAMIC_INTERRUPTS */ + /** * Similar to ARM's NVIC_SetPendingIRQ * set a pending IRQ from SW diff --git a/boards/posix/nrf52_bsim/irq_handler.c b/boards/posix/nrf52_bsim/irq_handler.c index 7bdd2a403a9..37fe2ce7782 100644 --- a/boards/posix/nrf52_bsim/irq_handler.c +++ b/boards/posix/nrf52_bsim/irq_handler.c @@ -327,6 +327,30 @@ void z_irq_priority_set(unsigned int irq, unsigned int prio, uint32_t flags) hw_irq_ctrl_prio_set(irq, prio); } +#ifdef CONFIG_DYNAMIC_INTERRUPTS +/** + * Configure a dynamic interrupt. + * + * Use this instead of IRQ_CONNECT() if arguments cannot be known at build time. + * + * @param irq IRQ line number + * @param priority Interrupt priority + * @param routine Interrupt service routine + * @param parameter ISR parameter + * @param flags Arch-specific IRQ configuration flags + * + * @return The vector assigned to this interrupt + */ +int z_arch_irq_connect_dynamic(unsigned int irq, unsigned int priority, + void (*routine)(void *parameter), void *parameter, + u32_t flags) +{ + z_isr_declare(irq, (int)flags, routine, parameter); + z_irq_priority_set(irq, priority, flags); + return irq; +} +#endif /* CONFIG_DYNAMIC_INTERRUPTS */ + /** * Similar to ARM's NVIC_SetPendingIRQ * set a pending IRQ from SW