X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=KernelLand%2FKernel%2Fdrv%2Fvpci.c;h=e4288b6f7b633841afe5a3fb52c5645deb96fbba;hb=5cab4c07bc13888dc7956194ef9595508072a4eb;hp=4fccdb85be3501bb3911926f78082a1079d73b24;hpb=04a050f42807686dc119838c82372409246d55bb;p=tpg%2Facess2.git diff --git a/KernelLand/Kernel/drv/vpci.c b/KernelLand/Kernel/drv/vpci.c index 4fccdb85..e4288b6f 100644 --- a/KernelLand/Kernel/drv/vpci.c +++ b/KernelLand/Kernel/drv/vpci.c @@ -22,12 +22,14 @@ Uint32 VPCI_Read(tVPCI_Device *Dev, Uint8 Offset, Uint8 Size) case 0: // Vendor[0:15], Device[16:31] tmp_dword = (Dev->Vendor) | (Dev->Device << 16); break; + // 1: Command[0:15], Status[16:31] case 2: // Class Code tmp_dword = Dev->Class; break; - // 1: Command[0:15], Status[16:31] // 3: Cache Line Size, Latency Timer, Header Type, BIST - // 4-9: BARs + case 4 ... 9: // 4-9: BARs + tmp_dword = Dev->BARs[ (Offset>>2) - 4 ]; + break; // 10: Unused (Cardbus CIS Pointer) // 11: Subsystem Vendor ID, Subsystem ID // 12: Expansion ROM Address @@ -35,7 +37,8 @@ Uint32 VPCI_Read(tVPCI_Device *Dev, Uint8 Offset, Uint8 Size) // 14: Reserved // 15: Interrupt Line, Interrupt Pin, Min Grant, Max Latency default: - tmp_dword = Dev->Read(Dev->Ptr, Offset >> 2); + if( Dev->Read ) + tmp_dword = Dev->Read(Dev->Ptr, Offset >> 2); break; } @@ -66,7 +69,10 @@ void VPCI_Write(tVPCI_Device *Dev, Uint8 Offset, Uint8 Size, Uint32 Data) return ; } - tmp_dword = Dev->Read(Dev->Ptr, Offset>>2); + if( Size != 4 && Dev->Read ) + tmp_dword = Dev->Read(Dev->Ptr, Offset>>2); + else + tmp_dword = 0; switch(Size) { case 4: tmp_dword = 0; break; @@ -80,5 +86,6 @@ void VPCI_Write(tVPCI_Device *Dev, Uint8 Offset, Uint8 Size, Uint32 Data) break; } tmp_dword |= Data << ((Offset&3)*8); - Dev->Write(Dev->Ptr, Offset>>2, tmp_dword); + if( Dev->Write ) + Dev->Write(Dev->Ptr, Offset>>2, tmp_dword); }