diff options
author | Ian Moffett <ian@osmora.org> | 2025-05-17 21:54:24 -0400 |
---|---|---|
committer | Ian Moffett <ian@osmora.org> | 2025-05-17 21:54:24 -0400 |
commit | 9c64c3e69fa60b3657d33e829a411cb37064a169 (patch) | |
tree | b5c0aa0bf5d59eaecc534e00e166a6a8ca90e77e /sys | |
parent | 26eba38bd53cc8ab83e96518085509c7d8ec39a2 (diff) |
kernel: pci: Add pci_add_device()
Signed-off-by: Ian Moffett <ian@osmora.org>
Diffstat (limited to 'sys')
-rw-r--r-- | sys/dev/pci/pci.c | 11 | ||||
-rw-r--r-- | sys/include/dev/pci/pci.h | 2 |
2 files changed, 13 insertions, 0 deletions
diff --git a/sys/dev/pci/pci.c b/sys/dev/pci/pci.c index 8328ffc..d59f68f 100644 --- a/sys/dev/pci/pci.c +++ b/sys/dev/pci/pci.c @@ -31,6 +31,7 @@ #include <sys/queue.h> #include <sys/syslog.h> #include <sys/errno.h> +#include <sys/spinlock.h> #include <dev/pci/pci.h> #include <dev/pci/pciregs.h> #include <vm/dynalloc.h> @@ -39,6 +40,7 @@ #define pr_trace(fmt, ...) kprintf("pci: " fmt, ##__VA_ARGS__) static TAILQ_HEAD(, pci_device) device_list; +static struct spinlock devlist_lock = {0}; static bool pci_dev_exists(uint8_t bus, uint8_t slot, uint8_t func) @@ -262,6 +264,15 @@ pci_get_device(struct pci_lookup lookup, uint16_t lookup_type) return NULL; } + +void +pci_add_device(struct pci_device *dev) +{ + spinlock_acquire(&devlist_lock); + TAILQ_INSERT_TAIL(&device_list, dev, link); + spinlock_release(&devlist_lock); +} + int pci_init(void) { diff --git a/sys/include/dev/pci/pci.h b/sys/include/dev/pci/pci.h index 1d8b3a6..de6d8fb 100644 --- a/sys/include/dev/pci/pci.h +++ b/sys/include/dev/pci/pci.h @@ -85,6 +85,8 @@ int pci_map_bar(struct pci_device *dev, uint8_t barno, void **vap); void pci_writel(struct pci_device *dev, uint32_t offset, pcireg_t val); int pci_enable_msix(struct pci_device *dev, const struct msi_intr *intr); +void pci_add_device(struct pci_device *dev); + void pci_msix_eoi(void); int pci_init(void); |