X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/34f6af4f61e0eec9c96113e07f140b609b4113c8..6123a1b5c5c97d90224ffa0dc6706dd7af2ebb9e:/lunaix-os/arch/generic/includes/asm-generic/isrm.h?ds=inline diff --git a/lunaix-os/arch/generic/includes/asm-generic/isrm.h b/lunaix-os/arch/generic/includes/asm-generic/isrm.h index 7e319b5..88c1db0 100644 --- a/lunaix-os/arch/generic/includes/asm-generic/isrm.h +++ b/lunaix-os/arch/generic/includes/asm-generic/isrm.h @@ -14,8 +14,21 @@ #include #include +#include + typedef void (*isr_cb)(const struct hart_state*); +typedef struct { + ptr_t msi_addr; + reg_t msi_data; + int mapped_iv; +} msi_vector_t; +#define msi_addr(msiv) ((msiv).msi_addr) +#define msi_data(msiv) ((msiv).msi_data) +#define msi_vect(msiv) ((msiv).mapped_iv) +#define check_msiv_invalid(msiv) (msi_vect(msiv) == -1) +#define invalid_msi_vector ((msi_vector_t) { (ptr_t)-1, (reg_t)-1, -1 }); + void isrm_init(); @@ -44,21 +57,20 @@ int isrm_ivexalloc(isr_cb handler); /** - * @brief Bind a given irq and associated handler to an iv + * @brief Allocate an iv resource for MSI use * - * @param iv iv allocated by system + * @param iv */ -int -isrm_bindirq(int irq, isr_cb irq_handler); +msi_vector_t +isrm_msialloc(isr_cb handler); /** - * @brief Bind given iv with it's associated handler + * @brief Bind the iv according to given device tree node * - * @param iv - * @param handler + * @param node */ -void -isrm_bindiv(int iv, isr_cb handler); +int +isrm_bind_dtnode(struct dt_intr_node* node, isr_cb handler); /** * @brief Get the handler associated with the given iv @@ -75,9 +87,6 @@ isrm_get_payload(const struct hart_state*); void isrm_set_payload(int iv, ptr_t); -void -isrm_irq_attach(int irq, int iv, cpu_t dest, u32_t flags); - /** * @brief Notify end of interrupt event *