[PATCH] Add conditional support for RTEMS PCI to the waf build.

Chris Johns chrisj at rtems.org
Wed May 27 00:47:09 UTC 2015


Check for the "rtems/pci.h" header and provide conditional build support
with waf to build for BSPs that do not have PCI support. The Makefile build
always defines HAVE_RTEMS_PCI_H which is the same state with this change.

The PCI calls still exist however they do nothing and return a constant.
Any PCI based driver that makes these calls on a BSP that does not have
PCI support will not work which is understandable. Either change the
driver or add PCI support the BSP.
---
 Makefile                              |  1 +
 makefile.py                           |  1 +
 rtemsbsd/rtems/rtems-bsd-pci_bus.c    |  8 +++++++-
 rtemsbsd/rtems/rtems-bsd-pci_cfgreg.c | 19 +++++++++++++------
 waf_generator.py                      |  1 +
 wscript                               |  1 +
 6 files changed, 24 insertions(+), 7 deletions(-)

diff --git a/Makefile b/Makefile
index fcf31e7..1b0cd4f 100644
--- a/Makefile
+++ b/Makefile
@@ -27,6 +27,7 @@ COMMON_FLAGS += -ImDNSResponder/mDNSCore
 COMMON_FLAGS += -ImDNSResponder/mDNSShared
 COMMON_FLAGS += -ImDNSResponder/mDNSPosix
 COMMON_FLAGS += -Itestsuite/include
+COMMON_FLAGS += -DHAVE_RTEMS_PCI_H=1
 COMMON_FLAGS += -Wall
 COMMON_FLAGS += -Wno-format
 COMMON_FLAGS += -MT $@ -MD -MP -MF $(basename $@).d
diff --git a/makefile.py b/makefile.py
index ea041bd..122650f 100755
--- a/makefile.py
+++ b/makefile.py
@@ -191,6 +191,7 @@ class ModuleManager(builder.ModuleManager):
                'COMMON_FLAGS += -ImDNSResponder/mDNSShared\n' \
                'COMMON_FLAGS += -ImDNSResponder/mDNSPosix\n' \
                'COMMON_FLAGS += -Itestsuite/include\n' \
+               'COMMON_FLAGS += -DHAVE_RTEMS_PCI_H=1\n' \
                'COMMON_FLAGS += -Wall\n' \
                'COMMON_FLAGS += -Wno-format\n' \
                'COMMON_FLAGS += -MT $@ -MD -MP -MF $(basename $@).d\n' \
diff --git a/rtemsbsd/rtems/rtems-bsd-pci_bus.c b/rtemsbsd/rtems/rtems-bsd-pci_bus.c
index f673083..f687e0f 100644
--- a/rtemsbsd/rtems/rtems-bsd-pci_bus.c
+++ b/rtemsbsd/rtems/rtems-bsd-pci_bus.c
@@ -52,21 +52,27 @@ __FBSDID("$FreeBSD$");
 
 #include <rtems/bsd/local/pcib_if.h>
 #define pci_find_device rtems_pci_find_device
+#if HAVE_RTEMS_PCI_H
 #include <rtems/pci.h>
+#endif
 #include <machine/bus.h>
 
 int
 pcibios_pcib_route_interrupt(device_t pcib, device_t dev, int pin)
 {
+#if HAVE_RTEMS_PCI_H
   int     bus;
   int     slot;
   int     func;
   uint8_t irq;
- 
+
   bus  = pci_get_bus(dev);
   slot = pci_get_slot(dev);
   func = pci_get_function(dev);
 
   pci_read_config_byte(bus, slot, func, PCI_INTERRUPT_LINE, &irq);
   return irq;
+#else
+  return 0;
+#endif
 }
diff --git a/rtemsbsd/rtems/rtems-bsd-pci_cfgreg.c b/rtemsbsd/rtems/rtems-bsd-pci_cfgreg.c
index f126c31..b9bdd31 100644
--- a/rtemsbsd/rtems/rtems-bsd-pci_cfgreg.c
+++ b/rtemsbsd/rtems/rtems-bsd-pci_cfgreg.c
@@ -49,11 +49,12 @@ __FBSDID("$FreeBSD$");
 #include <dev/pci/pcivar.h>
 #include <dev/pci/pcireg.h>
 #define pci_find_device rtems_pci_find_device
+#if HAVE_RTEMS_PCI_H
 #include <rtems/pci.h>
+#endif
 
-
-/* 
- * Initialise access to PCI configuration space 
+/*
+ * Initialise access to PCI configuration space
  */
 int
 pci_cfgregopen(void)
@@ -61,12 +62,13 @@ pci_cfgregopen(void)
   return(1);
 }
 
-/* 
+/*
  * Read configuration space register
  */
 u_int32_t
 pci_cfgregread(int bus, int slot, int func, int reg, int bytes)
 {
+#if HAVE_RTEMS_PCI_H
   u_int32_t value;
   uint8_t   v8;
   uint16_t  v16;
@@ -89,14 +91,18 @@ pci_cfgregread(int bus, int slot, int func, int reg, int bytes)
   }
 
   return value;
+#else
+  return 0;
+#endif
 }
 
-/* 
- * Write configuration space register 
+/*
+ * Write configuration space register
  */
 void
 pci_cfgregwrite(int bus, int slot, int func, int reg, u_int32_t data, int bytes)
 {
+#if HAVE_RTEMS_PCI_H
   uint8_t   v8  = data & 0xff;
   uint16_t  v16 = data & 0xffff;
   uint32_t  v32 = data;
@@ -112,4 +118,5 @@ pci_cfgregwrite(int bus, int slot, int func, int reg, u_int32_t data, int bytes)
       pci_write_config_dword( bus, slot, func, reg, v32 );
       break;
   }
+#endif
 }
diff --git a/waf_generator.py b/waf_generator.py
index b3c8055..4c9be07 100755
--- a/waf_generator.py
+++ b/waf_generator.py
@@ -242,6 +242,7 @@ class ModuleManager(builder.ModuleManager):
         self.add('')
         self.add('def bsp_configure(conf, arch_bsp):')
         self.add('    conf.check(header_name = "dlfcn.h", features = "c")')
+        self.add('    conf.check(header_name = "rtems/pci.h", features = "c", mandatory = False)')
         self.add('')
         self.add('def configure(conf):')
         self.add('    if conf.options.auto_regen:')
diff --git a/wscript b/wscript
index d1438ee..d02d368 100644
--- a/wscript
+++ b/wscript
@@ -37,6 +37,7 @@ def options(opt):
 
 def bsp_configure(conf, arch_bsp):
     conf.check(header_name = "dlfcn.h", features = "c")
+    conf.check(header_name = "rtems/pci.h", features = "c", mandatory = False)
 
 def configure(conf):
     if conf.options.auto_regen:
-- 
2.2.2



More information about the devel mailing list