From dd7db0f74e4e373f2d5d2d1e18a1d64c7b651fd2 Mon Sep 17 00:00:00 2001 From: Joel Sherrill Date: Mon, 27 Sep 2004 21:49:18 +0000 Subject: [PATCH] 2003-11-01 Greg Menke PR 608/bsps * pci/pcibios.c: BusCountPCI(). --- c/src/lib/libbsp/i386/shared/ChangeLog | 5 ++ c/src/lib/libbsp/i386/shared/pci/pcibios.c | 58 ++++++++++++++++++++++ 2 files changed, 63 insertions(+) diff --git a/c/src/lib/libbsp/i386/shared/ChangeLog b/c/src/lib/libbsp/i386/shared/ChangeLog index 13eed9e4ee..eac03ca49f 100644 --- a/c/src/lib/libbsp/i386/shared/ChangeLog +++ b/c/src/lib/libbsp/i386/shared/ChangeLog @@ -1,3 +1,8 @@ +2003-11-01 Greg Menke + + PR 608/bsps + * pci/pcibios.c: BusCountPCI(). + 2003-12-29 Ralf Corsepius * shared/io/Makefile.am: Remove (Unused). diff --git a/c/src/lib/libbsp/i386/shared/pci/pcibios.c b/c/src/lib/libbsp/i386/shared/pci/pcibios.c index 88736480ea..bcf3cb7eaf 100644 --- a/c/src/lib/libbsp/i386/shared/pci/pcibios.c +++ b/c/src/lib/libbsp/i386/shared/pci/pcibios.c @@ -218,6 +218,64 @@ pcib_find_by_class(int classCode, int idx, int *sig) #define PCI_MAX_DEVICES 16 #define PCI_MAX_FUNCTIONS 8 +#define PCI_VENDOR_ID 0x00 /* 16 bits */ +#define PCI_DEVICE_ID 0x02 /* 16 bits */ +#define PCI_CLASS_REVISION 0x08 +#define PCI_HEADER_TYPE 0x0e +#define PCI_SUBORDINATE_BUS 0x1a + +#define PCI_CLASS_BRIDGE_PCI 0x0604 + +static unsigned8 ucBusCount = 0xff; + +int +BusCountPCI() +{ + if( ucBusCount == 0xff ) + { + unsigned char bus,dev,hd; + unsigned int d; + int sig; + + ucBusCount = 0; + + for(bus=0; bus< 0xff; bus++) + { + for(dev=0; dev> 16) == PCI_CLASS_BRIDGE_PCI ) + { + pcib_conf_read8(sig, PCI_SUBORDINATE_BUS, &hd); + + if( hd > ucBusCount ) + ucBusCount = hd; + } + } + } + + } + + if( ucBusCount == 0 ) + { + printk("BusCountPCI() found 0 busses, assuming 1\n"); + ucBusCount = 1; + } + else if( ucBusCount == 0xff ) + { + printk("BusCountPCI() found 0xff busses, assuming 1\n"); + ucBusCount = 1; + } + } + + return ucBusCount; +} int BSP_pciFindDevice( unsigned short vendorid, unsigned short deviceid,