Changeset dd7db0f in rtems


Ignore:
Timestamp:
Sep 27, 2004, 9:49:18 PM (15 years ago)
Author:
Joel Sherrill <joel.sherrill@…>
Children:
993b7d1
Parents:
5ef84356
Message:

2003-11-01 Greg Menke <gregory.menke@…>

PR 608/bsps

  • pci/pcibios.c: BusCountPCI().
Location:
c/src/lib/libbsp/i386/shared
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • c/src/lib/libbsp/i386/shared/ChangeLog

    r5ef84356 rdd7db0f  
     12003-11-01      Greg Menke <gregory.menke@gsfc.nasa.gov>
     2
     3        PR 608/bsps
     4        * pci/pcibios.c: BusCountPCI().
     5
    162003-12-29      Ralf Corsepius <corsepiu@faw.uni-ulm.de>
    27
  • c/src/lib/libbsp/i386/shared/pci/pcibios.c

    r5ef84356 rdd7db0f  
    219219#define PCI_MAX_FUNCTIONS        8
    220220
     221#define PCI_VENDOR_ID           0x00    /* 16 bits */
     222#define PCI_DEVICE_ID           0x02    /* 16 bits */
     223#define PCI_CLASS_REVISION      0x08
     224#define PCI_HEADER_TYPE         0x0e 
     225#define PCI_SUBORDINATE_BUS     0x1a
     226
     227#define  PCI_CLASS_BRIDGE_PCI           0x0604
     228
     229static unsigned8 ucBusCount = 0xff;
     230
     231int
     232BusCountPCI()
     233{
     234   if( ucBusCount == 0xff )
     235   {
     236      unsigned char bus,dev,hd;
     237      unsigned int d;
     238      int sig;
     239
     240      ucBusCount = 0;
     241
     242      for(bus=0; bus< 0xff; bus++)
     243      { 
     244         for(dev=0; dev<PCI_MAX_DEVICES; dev++)
     245         {
     246            sig = PCIB_DEVSIG_MAKE(bus,dev,0);
     247            pcib_conf_read32(sig, PCI_VENDOR_ID, &d);
     248
     249            if( d != -1 )
     250            {
     251               pcib_conf_read32(sig, PCI_CLASS_REVISION, &d);
     252               
     253               if( (d >> 16) == PCI_CLASS_BRIDGE_PCI )
     254               {
     255                  pcib_conf_read8(sig, PCI_SUBORDINATE_BUS, &hd);
     256
     257                  if( hd > ucBusCount )
     258                     ucBusCount = hd;
     259               }
     260            }
     261         }
     262         
     263      }
     264
     265      if( ucBusCount == 0 )
     266      {
     267         printk("BusCountPCI() found 0 busses, assuming 1\n");
     268         ucBusCount = 1;
     269      }
     270      else if( ucBusCount == 0xff )
     271      {
     272         printk("BusCountPCI() found 0xff busses, assuming 1\n");
     273         ucBusCount = 1;
     274      }
     275   }                       
     276
     277   return ucBusCount;
     278}
    221279
    222280int
Note: See TracChangeset for help on using the changeset viewer.