From: Sebastian Huber <sebastian.hu...@embedded-brains.de> --- rtemsbsd/include/machine/resource.h | 1 + .../include/machine/rtems-bsd-kernel-space.h | 8 +++++++ rtemsbsd/rtems/rtems-kernel-nexus.c | 21 +++++++++++++++++++ 3 files changed, 30 insertions(+)
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; -- 2.35.3 _______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel