X-Git-Url: https://scm.lunaixsky.com/lunaix-os.git/blobdiff_plain/ec98d05af80e6e68c889dac10b8478ce92bd5161..43487eff262637a59a4c2c0272d7c4a824af3944:/lunaix-os/includes/hal/pci.h diff --git a/lunaix-os/includes/hal/pci.h b/lunaix-os/includes/hal/pci.h index 37815fe..22b3dd9 100644 --- a/lunaix-os/includes/hal/pci.h +++ b/lunaix-os/includes/hal/pci.h @@ -8,7 +8,7 @@ #include #include -#include +#include "irq.h" #define PCI_VENDOR_INVLD 0xffff @@ -86,6 +86,7 @@ struct pci_probe struct pci_base_addr bar[6]; struct device* bind; + struct irq_domain* irq_domain; }; #define pci_probe_morpher morphable_attrs(pci_probe, mobj) @@ -115,6 +116,12 @@ pci_register_driver(struct device_def* def, pci_id_checker_t checker); size_t pci_bar_sizing(struct pci_probe* probe, u32_t* bar_out, u32_t bar_num); +irq_t +pci_declare_msi_irq(irq_servant callback, struct pci_probe* probe); + +int +pci_assign_msi(struct pci_probe* probe, irq_t irq, void* irq_spec); + /** * @brief Bind an abstract device instance to the pci device * @@ -128,32 +135,6 @@ pci_bind_instance(struct pci_probe* probe, struct device* dev) } -msienv_t -pci_msi_start(struct pci_probe* probe); - -msi_vector_t -pci_msi_setup_at(msienv_t msienv, struct pci_probe* probe, - int i, isr_cb handler); - -static inline void -pci_msi_done(msienv_t env) -{ - isrm_msi_done(env); -} - -static inline msi_vector_t -pci_msi_setup_simple(struct pci_probe* probe, isr_cb handler) -{ - msienv_t env; - msi_vector_t msiv; - - env = pci_msi_start(probe); - msiv = pci_msi_setup_at(env, probe, 0, handler); - pci_msi_done(env); - - return msiv; -} - int pci_bind_driver(struct pci_registry* reg);