summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Huber <sebastian.huber@embedded-brains.de>2021-12-20 10:05:39 +0100
committerChristian Mauderer <christian.mauderer@embedded-brains.de>2024-01-31 09:55:59 +0100
commit0e2d6b8819d31e55d5e0276986ab0d7a4295d5c3 (patch)
tree86a61c6f29bfdba69ebab4e8d96b99d80b62384f
parentInclude missing header file (diff)
downloadrtems-libbsd-0e2d6b8819d31e55d5e0276986ab0d7a4295d5c3.tar.bz2
Enable NEW_PCIB
-rw-r--r--rtemsbsd/include/machine/resource.h1
-rw-r--r--rtemsbsd/include/machine/rtems-bsd-kernel-space.h8
-rw-r--r--rtemsbsd/rtems/rtems-kernel-nexus.c21
3 files changed, 30 insertions, 0 deletions
diff --git a/rtemsbsd/include/machine/resource.h b/rtemsbsd/include/machine/resource.h
index ad4f0f29..babc1ae6 100644
--- a/rtemsbsd/include/machine/resource.h
+++ b/rtemsbsd/include/machine/resource.h
@@ -45,5 +45,6 @@
#define SYS_RES_MEMORY 3
#define SYS_RES_IOPORT 4
#define SYS_RES_GPIO 5
+#define PCI_RES_BUS 6
#endif /* _RTEMS_BSD_MACHINE_RESOURCE_H_ */
diff --git a/rtemsbsd/include/machine/rtems-bsd-kernel-space.h b/rtemsbsd/include/machine/rtems-bsd-kernel-space.h
index 09f3c64d..2b45c2db 100644
--- a/rtemsbsd/include/machine/rtems-bsd-kernel-space.h
+++ b/rtemsbsd/include/machine/rtems-bsd-kernel-space.h
@@ -247,6 +247,14 @@ dev_t rtems_bsd__makedev(int _M, int _m);
struct dirent;
void dirent_terminate(struct dirent *dp);
+/*
+ * Enable the "new" PCI-PCI bridge driver, since this is going to be the future
+ * FreeBSD driver:
+ *
+ * https://reviews.freebsd.org/D32954
+ */
+#define NEW_PCIB 1
+
#ifdef __cplusplus
}
#endif /* __cplusplus */
diff --git a/rtemsbsd/rtems/rtems-kernel-nexus.c b/rtemsbsd/rtems/rtems-kernel-nexus.c
index 8fc879fe..c5ee33d8 100644
--- a/rtemsbsd/rtems/rtems-kernel-nexus.c
+++ b/rtemsbsd/rtems/rtems-kernel-nexus.c
@@ -57,6 +57,7 @@
#endif
#include <rtems/bsd/bsd.h>
+#include <rtems/bsd/modules.h>
#include <rtems/irq-extension.h>
#include <bsp.h>
@@ -103,6 +104,10 @@ static struct rman mem_rman;
static struct rman irq_rman;
+#ifdef RTEMS_BSD_MODULE_PCI
+static struct rman pci_rman;
+#endif
+
#if defined(RTEMS_BSP_PCI_IO_REGION_BASE)
static struct rman port_rman;
#endif
@@ -137,6 +142,17 @@ nexus_probe(device_t dev)
err = rman_manage_region(&irq_rman, irq_rman.rm_start, irq_rman.rm_end);
BSD_ASSERT(err == 0);
+#ifdef RTEMS_BSD_MODULE_PCI
+ pci_rman.rm_start = 0;
+ pci_rman.rm_end = ~0UL;
+ pci_rman.rm_type = RMAN_ARRAY;
+ pci_rman.rm_descr = "PCI bus";
+ err = rman_init(&pci_rman) != 0;
+ BSD_ASSERT(err == 0);
+ err = rman_manage_region(&pci_rman, pci_rman.rm_start, pci_rman.rm_end);
+ BSD_ASSERT(err == 0);
+#endif
+
#if defined(RTEMS_BSP_PCI_IO_REGION_BASE)
port_rman.rm_start = 0;
port_rman.rm_end = ~0UL;
@@ -191,6 +207,11 @@ nexus_alloc_resource(device_t bus, device_t child, int type, int *rid,
case SYS_RES_IRQ:
rm = &irq_rman;
break;
+#ifdef RTEMS_BSD_MODULE_PCI
+ case PCI_RES_BUS:
+ rm = &pci_rman;
+ break;
+#endif
#if defined(RTEMS_BSP_PCI_IO_REGION_BASE)
case SYS_RES_IOPORT:
rm = &port_rman;