summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/shared/vmeUniverse/README.porting
diff options
context:
space:
mode:
Diffstat (limited to 'c/src/lib/libbsp/shared/vmeUniverse/README.porting')
-rw-r--r--c/src/lib/libbsp/shared/vmeUniverse/README.porting88
1 files changed, 88 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/shared/vmeUniverse/README.porting b/c/src/lib/libbsp/shared/vmeUniverse/README.porting
new file mode 100644
index 0000000000..b72a673356
--- /dev/null
+++ b/c/src/lib/libbsp/shared/vmeUniverse/README.porting
@@ -0,0 +1,88 @@
+#
+# $Id$
+#
+
+The vmeUniverse driver needs some support from the BSP for
+
+a) PCI configuration space access
+b) PCI interrupt acknowledgement
+c) PCI interrupt handler installation
+
+The driver was developed using the powerpc/shared/ BSP
+(it also supports vxWorks) and by default uses that BSP's
+a) PCI access API
+b,c) irq handling API (AKA 'new' style BSP_install_rtems_irq_handler()
+ API).
+
+Some hooks exist in the driver to ease porting to other BSPs.
+The following information has been assembled when answering a
+question regarding a ppcn_60x BSP port:
+
+I looked through the ppcn_60x BSP. Here's what I found:
+
+ - this BSP does NOT adhere to neither the 'old' nor the 'new' API
+ but provides its own (startup/setvec.c: set_vector()).
+ - the BSP has a 'driver' for vmeUniverse although mine is far more
+ complete (including support for VME interrupts, DMA etc.).
+ - Porting my driver to your BSP should not be too hard:
+
+ 1) vmeUniverse needs PCI configuration space support from the
+ BSP:
+ a) a routine 'pciFindDevice' (need to be macro-aliased
+ to the proper routine/wrapper of your BSP) who scans
+ PCI config space for the universe bridge.
+ You could add 'libbsp/powerpc/shared/pci/pcifinddevice.c'
+ to your BSP substituting the pci_read_config_xxx calls
+ by the ones present on your BSP (see step 2))
+ b) routines to read PCI config registers (byte and longword)
+ [on your BSP these are PCIConfigRead32/PCIConfigRead8;
+ hence you could replace the macros on top with
+ #define pciConfigInLong PCIConfigRead32
+ 2) vmeUniverse needs to know how to acknowledge a PCI interrupt
+ In your case, nothing needs to be done
+ #define BSP_PIC_DO_EOI do {} while (0)
+ 3) Install the VME ISR dispatcher: replace the 'new' style
+ interrupt installer (BSP_install_rtems_irq_handler()) by
+ a proper call to 'set_vector()'
+ 4) I might have missed something...
+
+I attach the latest version of the vmeUniverse driver in case you want
+to try to do the port (should be easy).
+
+For the sake of ease of maintenance, I just added a few hooks making it
+possible to override some things without having to modify the driver code.
+
+ 1,2) PCI config space access macros may be overriden via CFLAGS
+ when compiling vmeUniverse.c, hence:
+ CFLAGS += -DBSP_PIC_DO_EOI=do{}while(0)
+ CFLAGS += -DBSP_PCI_CONFIG_IN_LONG=PCIConfigRead32
+ CFLAGS += -DBSP_PCI_CONFIG_IN_BYTE=PCIConfigRead8
+ (you still need to supply BSP_pciFindDevice)
+ 3) create your own version of vmeUniverseInstallIrqMgr():
+ copy to a separate file and replace
+ BSP_rtems_install_irq_handler() by a proper call to set_vector.
+
+ 4) Send me email :-)
+
+USAGE NOTE: To fully initialize the driver, the following steps can/must
+be performed:
+
+ vmeUniverseInit(); /* MANDATORY: Driver Initialization */
+ vmeUniverseReset(); /* OPTIONAL: Reset most registers to a known state;
+ * if this step is omitted, firmware setup is
+ * preserved
+ */
+ vmeUniverseMasterPortCfg(...); /* OPTIONAL: setup the master windows
+ * (current setup preserved if omitted)
+ */
+ vmeUniverseSlavePortCfg(...); /* OPTIONAL: setup the slave windows
+ * (current setup preserved if omitted)
+ */
+ vmeUniverseInstallIrqMgr(); /* NEEDED FOR VME INTERRUPT SUPPRORT
+ * initialize the interrupt manager.
+ * NOTE: you need to call your own
+ * version of this routine here
+ */
+
+For an example of init/setup, consult libbsp/powerpc/shared/vme/vmeconfig.c
+