📄 readme.porting
字号:
## $Id: README.porting,v 1.1.2.1 2003/02/20 21:37:34 joel Exp $#The vmeUniverse driver needs some support from the BSP fora) PCI configuration space accessb) PCI interrupt acknowledgementc) PCI interrupt handler installationThe driver was developed using the powerpc/shared/ BSP(it also supports vxWorks) and by default uses that BSP'sa) PCI access APIb,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 aquestion 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 wantto try to do the port (should be easy).For the sake of ease of maintenance, I just added a few hooks making itpossible 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/mustbe 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
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -