4 * @brief ISR Manager, managing the interrupt service routine allocations
8 * @copyright Copyright (c) 2022
11 #ifndef __LUNAIX_ISRM_H
12 #define __LUNAIX_ISRM_H
14 #include <lunaix/types.h>
15 #include <lunaix/hart_state.h>
17 #include <hal/devtree.h>
19 typedef void (*isr_cb)(const struct hart_state*);
26 #define msi_addr(msiv) ((msiv).msi_addr)
27 #define msi_data(msiv) ((msiv).msi_data)
28 #define msi_vect(msiv) ((msiv).mapped_iv)
29 #define check_msiv_invalid(msiv) (msi_vect(msiv) == -1)
30 #define invalid_msi_vector ((msi_vector_t) { (ptr_t)-1, (reg_t)-1, -1 });
36 * @brief Release a iv resource
44 * @brief Allocate an iv resource for os services
49 isrm_ivosalloc(isr_cb handler);
52 * @brief Allocate an iv resource for external events
57 isrm_ivexalloc(isr_cb handler);
60 * @brief Allocate an iv resource for MSI use
65 isrm_msialloc(isr_cb handler);
68 * @brief Bind the iv according to given device tree node
73 isrm_bind_dtnode(struct dt_intr_node* node);
76 * @brief Get the handler associated with the given iv
85 isrm_get_payload(const struct hart_state*);
88 isrm_set_payload(int iv, ptr_t);
91 * @brief Notify end of interrupt event
96 isrm_notify_eoi(cpu_t id, int iv);
99 * @brief Notify end of scheduling event
104 isrm_notify_eos(cpu_t id);
106 #endif /* __LUNAIX_ISRM_H */