Kernel/x86_64 - Unbroke user stack creation
[tpg/acess2.git] / Kernel / drv / pci.c
index 1a555d7..f75b5ac 100644 (file)
@@ -150,8 +150,9 @@ int PCI_ScanBus(int BusID, int bFill)
                        if(devInfo.oc == PCI_OC_PCIBRIDGE)\r
                        {\r
                                #if LIST_DEVICES\r
-                               Log_Log("PCI", "Bridge @ %i,%i:%i (0x%x:0x%x)",\r
-                                       BusID, dev, fcn, devInfo.vendor, devInfo.device);\r
+                               if( !bFill )\r
+                                       Log_Log("PCI", "Bridge @ %i,%i:%i (0x%x:0x%x)",\r
+                                               BusID, dev, fcn, devInfo.vendor, devInfo.device);\r
                                #endif\r
                                //TODO: Handle PCI-PCI Bridges\r
                                //PCI_ScanBus(devInfo.???, bFill);\r
@@ -160,8 +161,9 @@ int PCI_ScanBus(int BusID, int bFill)
                        else\r
                        {\r
                                #if LIST_DEVICES\r
-                               Log_Log("PCI", "Device %i,%i:%i %04x => 0x%04x:0x%04x",\r
-                                       BusID, dev, fcn, devInfo.oc, devInfo.vendor, devInfo.device);\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
                                #endif\r
                        }\r
                        \r
@@ -371,7 +373,8 @@ void PCI_ConfigWrite(tPCIDev ID, int Offset, int Size, Uint32 Value)
        \r
        dev = &gPCI_Devices[ID];\r
 \r
-       dword = PCI_CfgReadDWord(dev->bus, dev->slot, dev->fcn, Offset/4);\r
+       if(Size != 4)\r
+               dword = PCI_CfgReadDWord(dev->bus, dev->slot, dev->fcn, Offset/4);\r
        switch(Size)\r
        {\r
        case 1:\r
@@ -416,91 +419,6 @@ Uint32 PCI_GetBAR(tPCIDev id, int BARNum)
        return gPCI_Devices[id].ConfigCache[4+BARNum];\r
 }\r
 \r
-#if 0\r
-/**\r
- * \brief Assign a port to a BAR\r
- */\r
-Uint16 PCI_AssignPort(tPCIDev ID, int bar, int Count)\r
-{\r
-       #if 1\r
-       Uint16  rv;\r
-       tPCIDevice      *dev;\r
-       \r
-       if(id < 0 || id >= giPCI_DeviceCount)   return 0;\r
-       if(bar < 0 || bar >= 6) return 0;\r
-       dev = &gPCI_Devices[id];\r
-       \r
-       rv = PCI_CfgReadDWord( dev->bus, dev->slot, dev->fcn, 0x10+bar*4 );\r
-       if(rv & 1)      return rv & ~1;\r
-       return 0;\r
-       #else\r
-       Uint16  portVals;\r
-        int    gran=0;\r
-        int    i, j;\r
-       tPCIDevice      *dev;\r
-       \r
-       //LogF("PCI_AssignPort: (id=%i,bar=%i,count=%i)\n", id, bar, count);\r
-       \r
-       if(id < 0 || id >= giPCI_DeviceCount)   return 0;\r
-       if(bar < 0 || bar > 5)  return 0;\r
-       \r
-       dev = &gPCI_Devices[id];\r
-       \r
-       PCI_CfgWriteDWord( dev->bus, dev->slot, dev->fcn, 0x10+bar*4, -1 );\r
-       portVals = PCI_CfgReadDWord( dev->bus, dev->slot, dev->fcn, 0x10+bar*4 );\r
-       dev->ConfigCache[4+bar] = portVals;\r
-       //LogF(" PCI_AssignPort: portVals = 0x%x\n", portVals);\r
-       \r
-       // Check for IO port\r
-       if( !(portVals & 1) )   return 0;\r
-       \r
-       // Mask out final bit\r
-       portVals &= ~1;\r
-       \r
-       // Get Granuality\r
-       #if ARCHDIR_IS_x86 || ARCHDIR_IS_x86_64\r
-       __asm__ __volatile__ ("bsf %%eax, %%ecx" : "=c" (gran) : "a" (portVals) );\r
-       gran = 1 << gran;\r
-       #else\r
-       {\r
-               for(gran = 1; gran && !(portVals & gran); gran <<= 1);\r
-       }\r
-       #endif\r
-       //LogF(" PCI_AssignPort: gran = 0x%x\n", gran);\r
-       \r
-       // Find free space\r
-       portVals = 0;\r
-       for( i = 0; i < 1<<16; i += gran )\r
-       {\r
-               for( j = 0; j < count; j ++ )\r
-               {\r
-                       if( gaPCI_PortBitmap[ (i+j)>>5 ] & 1 << ((i+j)&0x1F) )\r
-                               break;\r
-               }\r
-               if(j == count) {\r
-                       portVals = i;\r
-                       break;\r
-               }\r
-       }\r
-       \r
-       if(portVals)\r
-       {\r
-               for( j = 0; j < count; j ++ )\r
-               {\r
-                       if( gaPCI_PortBitmap[ (portVals+j)>>5 ] |= 1 << ((portVals+j)&0x1F) )\r
-                               break;\r
-               }\r
-               PCI_CfgWriteDWord( dev->bus, dev->slot, dev->fcn, 0x10+bar*4, portVals|1 );\r
-               dev->ConfigCache[4+bar] = portVals|1;\r
-       }\r
-       \r
-       // Return\r
-       //LogF("PCI_AssignPort: RETURN 0x%x\n", portVals);\r
-       return portVals;\r
-       #endif\r
-}\r
-#endif\r
-\r
 /**\r
  * \brief Get device information for a slot/function\r
  */\r

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