Kernel/PCI - Updated PCI API to take the protocol field into account
[tpg/acess2.git] / Kernel / drv / pci.c
index c176f47..7234296 100644 (file)
@@ -17,13 +17,8 @@ typedef struct sPCIDevice
 {\r
        Uint16  bus, slot, fcn;\r
        Uint16  vendor, device;\r
-       union {\r
-               struct {\r
-                       Uint8 class, subclass;\r
-               };\r
-               Uint16  oc;\r
-       };\r
-       Uint8   revision, progif;\r
+       Uint32  class;  // Class:Subclass:ProgIf\r
+       Uint8   revision;\r
        Uint32  ConfigCache[256/4];\r
        char    Name[8];\r
        tVFS_Node       Node;\r
@@ -143,7 +138,7 @@ int PCI_ScanBus(int BusID, int bFill)
                        if(!PCI_int_EnumDevice(BusID, dev, fcn, &devInfo))\r
                                continue;\r
                        \r
-                       if(devInfo.oc == PCI_OC_PCIBRIDGE)\r
+                       if(devInfo.class == PCI_OC_PCIBRIDGE)\r
                        {\r
                                #if LIST_DEVICES\r
                                if( !bFill )\r
@@ -158,8 +153,8 @@ int PCI_ScanBus(int BusID, int bFill)
                        {\r
                                #if LIST_DEVICES\r
                                if( !bFill )\r
-                                       Log_Log("PCI", "Device %i,%i:%i %04x => 0x%04x:0x%04x",\r
-                                               BusID, dev, fcn, devInfo.oc, devInfo.vendor, devInfo.device);\r
+                                       Log_Log("PCI", "Device %i,%i:%i %06x => 0x%04x:0x%04x",\r
+                                               BusID, dev, fcn, devInfo.class, devInfo.vendor, devInfo.device);\r
                                #endif\r
                        }\r
                        \r
@@ -288,7 +283,7 @@ tPCIDev PCI_GetDevice(Uint16 vendor, Uint16 device, int idx)
  * \param mask Mask for class comparison\r
  * \param prev ID of previous device (-1 for no previous)\r
  */\r
-tPCIDev PCI_GetDeviceByClass(Uint16 class, Uint16 mask, tPCIDev prev)\r
+tPCIDev PCI_GetDeviceByClass(Uint32 class, Uint32 mask, tPCIDev prev)\r
 {\r
         int    i;\r
        // Check if prev is negative (meaning get first)\r
@@ -297,30 +292,29 @@ tPCIDev PCI_GetDeviceByClass(Uint16 class, Uint16 mask, tPCIDev prev)
        \r
        for( ; i < giPCI_DeviceCount; i++ )\r
        {\r
-               if((gPCI_Devices[i].oc & mask) == class)\r
+               if((gPCI_Devices[i].class & mask) == class)\r
                        return i;\r
        }\r
        return -1;\r
 }\r
 \r
-int PCI_GetDeviceInfo(tPCIDev ID, Uint16 *Vendor, Uint16 *Device, Uint16 *Class)\r
+int PCI_GetDeviceInfo(tPCIDev ID, Uint16 *Vendor, Uint16 *Device, Uint32 *Class)\r
 {\r
        tPCIDevice      *dev = &gPCI_Devices[ID];\r
        if(ID < 0 || ID >= giPCI_DeviceCount)   return 1;\r
        \r
        if(Vendor)      *Vendor = dev->vendor;\r
        if(Device)      *Device = dev->device;\r
-       if(Class)       *Class = dev->oc;\r
+       if(Class)       *Class = dev->class;\r
        return 0;\r
 }\r
 \r
-int PCI_GetDeviceVersion(tPCIDev ID, Uint8 *Revision, Uint8 *ProgIF)\r
+int PCI_GetDeviceVersion(tPCIDev ID, Uint8 *Revision)\r
 {\r
        tPCIDevice      *dev = &gPCI_Devices[ID];\r
        if(ID < 0 || ID >= giPCI_DeviceCount)   return 1;\r
        \r
        if(Revision)    *Revision = dev->revision;\r
-       if(ProgIF)      *ProgIF = dev->progif;\r
        return 0;\r
 }\r
 \r
@@ -453,13 +447,13 @@ int PCI_int_EnumDevice(Uint16 bus, Uint16 slot, Uint16 fcn, tPCIDevice *info)
        info->vendor = vendor_dev & 0xFFFF;\r
        info->device = vendor_dev >> 16;\r
        tmp = info->ConfigCache[2];\r
-       info->revision = tmp & 0xFFFF;\r
-       info->oc = tmp >> 16;\r
+       info->revision = tmp & 0xFF;\r
+       info->class = tmp >> 8;\r
        \r
 //     #if LIST_DEVICES\r
 //     Log("BAR0 0x%08x BAR1 0x%08x BAR2 0x%08x", info->ConfigCache[4], info->ConfigCache[5], info->ConfigCache[6]);\r
 //     Log("BAR3 0x%08x BAR4 0x%08x BAR5 0x%08x", info->ConfigCache[7], info->ConfigCache[8], info->ConfigCache[9]);\r
-//     Log("Class: 0x%04x", info->oc);\r
+//     Log("Class: 0x%06x", info->class);\r
 //     #endif\r
        \r
        // Make node name\r

UCC git Repository :: git.ucc.asn.au