aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Moffett <ian@osmora.org>2025-05-17 21:54:24 -0400
committerIan Moffett <ian@osmora.org>2025-05-17 21:54:24 -0400
commit9c64c3e69fa60b3657d33e829a411cb37064a169 (patch)
treeb5c0aa0bf5d59eaecc534e00e166a6a8ca90e77e
parent26eba38bd53cc8ab83e96518085509c7d8ec39a2 (diff)
kernel: pci: Add pci_add_device()
Signed-off-by: Ian Moffett <ian@osmora.org>
-rw-r--r--sys/dev/pci/pci.c11
-rw-r--r--sys/include/dev/pci/pci.h2
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);