/* pcifinddevice.c * * Copyright 2001, Till Straumann * * find a particular PCI device * (we assume, the firmware configured the PCI bus[es] for us) * * * Kate Feng , modified it to support the mvme5500 board. * */ #define PCI_INVALID_VENDORDEVICEID 0xffffffff #define PCI_MULTI_FUNCTION 0x80 #include #include #include static 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 pci_find_device( unsigned short vendorid, unsigned short deviceid, int instance, int *pbus, int *pdev, int *pfun ) { uint32_t d; unsigned short s; unsigned char bus,dev,fun,hd; for (bus=0; 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)pci_read_config_word(bus,dev,fun,PCI_DEVICE_ID,&s); if (deviceid == s) { if (instance--) continue; *pbus=bus; *pdev=dev; *pfun=fun; return 0; } } } } /* end for bus */ return -1; } /* eof */