X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/6123a1b5c5c97d90224ffa0dc6706dd7af2ebb9e..6942ebae59c3904674dce6b67cd07c43a3bbe00d:/lunaix-os/arch/generic/includes/asm-generic/isrm.h diff --git a/lunaix-os/arch/generic/includes/asm-generic/isrm.h b/lunaix-os/arch/generic/includes/asm-generic/isrm.h index 88c1db0..b766afb 100644 --- a/lunaix-os/arch/generic/includes/asm-generic/isrm.h +++ b/lunaix-os/arch/generic/includes/asm-generic/isrm.h @@ -13,6 +13,7 @@ #include #include +#include #include @@ -29,6 +30,8 @@ typedef struct { #define check_msiv_invalid(msiv) (msi_vect(msiv) == -1) #define invalid_msi_vector ((msi_vector_t) { (ptr_t)-1, (reg_t)-1, -1 }); +typedef void* msienv_t; + void isrm_init(); @@ -41,28 +44,51 @@ void isrm_ivfree(int iv); /** - * @brief Allocate an iv resource for os services + * @brief Begin MSI allocation for given device * * @param iv */ -int -isrm_ivosalloc(isr_cb handler); +msienv_t +isrm_msi_start(struct device* dev); /** - * @brief Allocate an iv resource for external events - * - * @param iv + * @brief Query number of msi avaliable for the device */ int -isrm_ivexalloc(isr_cb handler); +isrm_msi_avaliable(msienv_t msienv); /** - * @brief Allocate an iv resource for MSI use - * - * @param iv + * @brief Allocate a msi resource within defined msi resource list + * for the device, indexed by `index` */ msi_vector_t -isrm_msialloc(isr_cb handler); +isrm_msi_alloc(msienv_t msienv, cpu_t cpu, int index, isr_cb handler); + +/** + * @brief Set the sideband information will be used for upcoming + * allocations + */ +void +isrm_msi_set_sideband(msienv_t msienv, ptr_t sideband); + +/** + * @brief Done MSI allocation + */ +void +isrm_msi_done(msienv_t msienv); + +static inline must_inline msi_vector_t +isrm_msi_alloc_simple(struct device* dev, cpu_t cpu, isr_cb handler) +{ + msi_vector_t v; + msienv_t env; + + env = isrm_msi_start(dev); + v = isrm_msi_alloc(env, cpu, 0, handler); + isrm_msi_done(env); + + return v; +} /** * @brief Bind the iv according to given device tree node @@ -70,7 +96,7 @@ isrm_msialloc(isr_cb handler); * @param node */ int -isrm_bind_dtnode(struct dt_intr_node* node, isr_cb handler); +isrm_bind_dtn(struct dt_intr_node* node); /** * @brief Get the handler associated with the given iv