diff options
Diffstat (limited to 'c/src/lib/libbsp/powerpc/mvme5500/pci/pcifinddevice.c')
-rw-r--r-- | c/src/lib/libbsp/powerpc/mvme5500/pci/pcifinddevice.c | 52 |
1 files changed, 32 insertions, 20 deletions
diff --git a/c/src/lib/libbsp/powerpc/mvme5500/pci/pcifinddevice.c b/c/src/lib/libbsp/powerpc/mvme5500/pci/pcifinddevice.c index 67160781a3..c3b677d015 100644 --- a/c/src/lib/libbsp/powerpc/mvme5500/pci/pcifinddevice.c +++ b/c/src/lib/libbsp/powerpc/mvme5500/pci/pcifinddevice.c @@ -6,29 +6,42 @@ * (we assume, the firmware configured the PCI bus[es] for us) * * - * Kate Feng <feng1@bnl.gov>, modified it to support - * the mvme5500 board and provided glues to Till's vmeUniverse.c. - * + * Kate Feng <feng1@bnl.gov>, modified it to support the mvme5500 board. + * */ #define PCI_INVALID_VENDORDEVICEID 0xffffffff #define PCI_MULTI_FUNCTION 0x80 -/*#define PCI_DEBUG*/ #include <bsp/pci.h> #include <rtems/bspIo.h> +#include <bsp.h> + +int BSP_pciDebug=0; + +int BSP_pciFindDevicePrint(unsigned short vendorid, unsigned short deviceid, + int instance, int *pbus, int *pdev, int *pfun ) +{ + int x; + + BSP_pciDebug = 1; + x=pci_find_device(vendorid, deviceid, instance, pbus, pdev, pfun ); + BSP_pciDebug = 0; + + return 0; +} -int BSP_PCIxFindDevice(unsigned short vendorid, unsigned short deviceid, - int instance, int pciNum, int *pbus, int *pdev, int *pfun ) +int pci_find_device( unsigned short vendorid, unsigned short deviceid, + int instance, int *pbus, int *pdev, int *pfun ) { unsigned int d; unsigned short s; unsigned char bus,dev,fun,hd; - for (bus=0; bus<2; bus++) { + for (bus=0; bus<BSP_MAX_PCI_BUS; bus++) { for (dev=0; dev<PCI_MAX_DEVICES; dev++) { - PCIx_read_config_byte(pciNum, bus, dev, 0, PCI0_HEADER_TYPE, &hd); + pci_read_config_byte(bus, dev, 0, PCI_HEADER_TYPE, &hd); hd = (hd & PCI_MULTI_FUNCTION ? PCI_MAX_FUNCTIONS : 1); for (fun=0; fun<hd; fun++) { /* @@ -36,16 +49,21 @@ int BSP_PCIxFindDevice(unsigned short vendorid, unsigned short deviceid, */ if (PCI_MAX_DEVICES-1==dev && PCI_MAX_FUNCTIONS-1 == fun) break; - (void)PCIx_read_config_dword(pciNum, bus,dev,fun,PCI0_VENDOR_ID,&d); + (void)pci_read_config_dword(bus,dev,fun,PCI_VENDOR_ID,&d); if (PCI_INVALID_VENDORDEVICEID == d) continue; -#ifdef PCI_DEBUG - printk("pci_find_device: found 0x%08x at %d/%d/%d\n",d,bus,dev,fun); -#endif - (void)PCIx_read_config_word(pciNum, bus,dev,fun,PCI0_VENDOR_ID,&s); + if (BSP_pciDebug) { + printk("pci_find_device: found 0x%08x at %2d/%2d/%2d ",d,bus,dev,fun); + printk("(Physically: PCI%d %2d/%2d/%2d)\n", + (bus>= BSP_MAX_PCI_BUS_ON_PCI0)? 1:0, + (bus>= BSP_MAX_PCI_BUS_ON_PCI0)? bus-BSP_MAX_PCI_BUS_ON_PCI0:bus, + dev, fun); + } + + (void)pci_read_config_word(bus,dev,fun,PCI_VENDOR_ID,&s); if (vendorid != s) continue; - (void)PCIx_read_config_word(pciNum, bus,dev,fun,PCI0_DEVICE_ID,&s); + (void)pci_read_config_word(bus,dev,fun,PCI_DEVICE_ID,&s); if (deviceid == s) { if (instance--) continue; *pbus=bus; *pdev=dev; *pfun=fun; @@ -57,10 +75,4 @@ int BSP_PCIxFindDevice(unsigned short vendorid, unsigned short deviceid, return -1; } -int pci_find_device( unsigned short vendorid, unsigned short deviceid, - int instance, int *pbus, int *pdev, int *pfun ) -{ - return(BSP_PCIxFindDevice(vendorid,deviceid,instance,0,pbus,pdev,pfun)); -} - /* eof */ |