-#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