X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=Kernel%2Fdrv%2Fpci.c;h=72342964439125bf1a1f3a0f149b72ba009a6b1f;hb=f4e3c3d24ca880fe72396b2b0fc1ca3ce506b6ff;hp=41233367c22901e240899118e12e58449218767f;hpb=986359336a3d117cddbf33023aefdf585f6500f7;p=tpg%2Facess2.git diff --git a/Kernel/drv/pci.c b/Kernel/drv/pci.c index 41233367..72342964 100644 --- a/Kernel/drv/pci.c +++ b/Kernel/drv/pci.c @@ -17,13 +17,8 @@ typedef struct sPCIDevice { Uint16 bus, slot, fcn; Uint16 vendor, device; - union { - struct { - Uint8 class, subclass; - }; - Uint16 oc; - }; - Uint8 revision, progif; + Uint32 class; // Class:Subclass:ProgIf + Uint8 revision; Uint32 ConfigCache[256/4]; char Name[8]; tVFS_Node Node; @@ -143,7 +138,7 @@ int PCI_ScanBus(int BusID, int bFill) if(!PCI_int_EnumDevice(BusID, dev, fcn, &devInfo)) continue; - if(devInfo.oc == PCI_OC_PCIBRIDGE) + if(devInfo.class == PCI_OC_PCIBRIDGE) { #if LIST_DEVICES if( !bFill ) @@ -158,8 +153,8 @@ int PCI_ScanBus(int BusID, int bFill) { #if LIST_DEVICES if( !bFill ) - Log_Log("PCI", "Device %i,%i:%i %04x => 0x%04x:0x%04x", - BusID, dev, fcn, devInfo.oc, devInfo.vendor, devInfo.device); + Log_Log("PCI", "Device %i,%i:%i %06x => 0x%04x:0x%04x", + BusID, dev, fcn, devInfo.class, devInfo.vendor, devInfo.device); #endif } @@ -272,7 +267,7 @@ int PCI_CountDevices(Uint16 vendor, Uint16 device) tPCIDev PCI_GetDevice(Uint16 vendor, Uint16 device, int idx) { int i, j=0; - for(i=0;i= giPCI_DeviceCount) return 1; if(Vendor) *Vendor = dev->vendor; if(Device) *Device = dev->device; - if(Class) *Class = dev->oc; + if(Class) *Class = dev->class; return 0; } -int PCI_GetDeviceVersion(tPCIDev ID, Uint8 *Revision, Uint8 *ProgIF) +int PCI_GetDeviceVersion(tPCIDev ID, Uint8 *Revision) { tPCIDevice *dev = &gPCI_Devices[ID]; if(ID < 0 || ID >= giPCI_DeviceCount) return 1; if(Revision) *Revision = dev->revision; - if(ProgIF) *ProgIF = dev->progif; return 0; } @@ -442,7 +436,7 @@ int PCI_int_EnumDevice(Uint16 bus, Uint16 slot, Uint16 fcn, tPCIDevice *info) return 0; info->ConfigCache[0] = vendor_dev; - for( i = 1; i < 256/4; i ++, addr += 4 ) + for( i = 1, addr += 4; i < 256/4; i ++, addr += 4 ) { info->ConfigCache[i] = PCI_CfgReadDWord(addr); } @@ -453,14 +447,14 @@ int PCI_int_EnumDevice(Uint16 bus, Uint16 slot, Uint16 fcn, tPCIDevice *info) info->vendor = vendor_dev & 0xFFFF; info->device = vendor_dev >> 16; tmp = info->ConfigCache[2]; - info->revision = tmp & 0xFFFF; - info->oc = tmp >> 16; + info->revision = tmp & 0xFF; + info->class = tmp >> 8; - //#if LIST_DEVICES - //Log("BAR0 0x%08x BAR1 0x%08x BAR2 0x%08x", info->ConfigCache[4], info->ConfigCache[5], info->ConfigCache[6]); - //Log("BAR3 0x%08x BAR4 0x%08x BAR5 0x%08x", info->ConfigCache[7], info->ConfigCache[8], info->ConfigCache[9]); - //Log("Class: 0x%04x", info->oc); - //#endif +// #if LIST_DEVICES +// Log("BAR0 0x%08x BAR1 0x%08x BAR2 0x%08x", info->ConfigCache[4], info->ConfigCache[5], info->ConfigCache[6]); +// Log("BAR3 0x%08x BAR4 0x%08x BAR5 0x%08x", info->ConfigCache[7], info->ConfigCache[8], info->ConfigCache[9]); +// Log("Class: 0x%06x", info->class); +// #endif // Make node name info->Name[0] = '0' + bus/10;