diff --git a/lib/drivers/include/plic.h b/lib/drivers/include/plic.h index 2cc42fb..ec56ee2 100644 --- a/lib/drivers/include/plic.h +++ b/lib/drivers/include/plic.h @@ -358,6 +358,15 @@ extern volatile plic_t *const plic; */ typedef int (*plic_irq_callback_t)(void *ctx); +/** + * @brief Definitions for IRQ table instance + */ +typedef struct _plic_instance_t +{ + plic_irq_callback_t callback; + void *ctx; +} plic_instance_t; + /** * @brief Initialize PLIC external interrupt * @@ -467,11 +476,13 @@ void plic_irq_deregister(plic_irq_t irq); void plic_irq_unregister(plic_irq_t irq); /** - * @brief Get IRQ table + * @brief Get IRQ table, Usage: + * plic_instance_t (*plic_instance)[IRQN_MAX] = plic_get_instance(); + * ... plic_instance[x][y] ...; * * @return the point of IRQ table */ -plic_instance_t * plic_get_instance(void); +plic_instance_t (*plic_get_instance(void))[IRQN_MAX]; /* For c++ compatibility */ #ifdef __cplusplus diff --git a/lib/drivers/plic.c b/lib/drivers/plic.c index e436ce6..5fc1231 100644 --- a/lib/drivers/plic.c +++ b/lib/drivers/plic.c @@ -21,12 +21,6 @@ volatile plic_t* const plic = (volatile plic_t*)PLIC_BASE_ADDR; -typedef struct _plic_instance_t -{ - plic_irq_callback_t callback; - void *ctx; -} plic_instance_t; - static plic_instance_t plic_instance[PLIC_NUM_CORES][IRQN_MAX]; void plic_init(void) @@ -161,7 +155,7 @@ void plic_irq_unregister(plic_irq_t irq) void __attribute__((weak, alias("plic_irq_unregister"))) plic_irq_deregister(plic_irq_t irq); -plic_instance_t * plic_get_instance(void) +plic_instance_t (*plic_get_instance(void))[IRQN_MAX] { return plic_instance; }