3 * - By John Hodge (thePowersGang)
8 #include <virtual_pci.h>
11 Uint32 VPCI_Read(tVPCI_Device *Dev, Uint8 Offset, Uint8 Size)
15 if( Size > 4 || Size == 3 || Size == 0 )
17 if( Offset & (Size - 1) )
22 case 0: // Vendor[0:15], Device[16:31]
23 tmp_dword = (Dev->Vendor) | (Dev->Device << 16);
26 tmp_dword = Dev->Class;
28 // 1: Command[0:15], Status[16:31]
29 // 3: Cache Line Size, Latency Timer, Header Type, BIST
31 // 10: Unused (Cardbus CIS Pointer)
32 // 11: Subsystem Vendor ID, Subsystem ID
33 // 12: Expansion ROM Address
34 // 13: Capabilities[0:8], Reserved[9:31]
36 // 15: Interrupt Line, Interrupt Pin, Min Grant, Max Latency
38 tmp_dword = Dev->Read(Dev->Ptr, Offset >> 2);
42 tmp_dword >>= 8*(Offset & 3);
46 case 2: tmp_dword &= 0xFFFF; break;
47 case 1: tmp_dword &= 0xFF;
53 void VPCI_Write(tVPCI_Device *Dev, Uint8 Offset, Uint8 Size, Uint32 Data)
56 if( Size > 4 || Size == 3 || Size == 0 )
58 if( Offset & (Size - 1) )
63 case 0: // Vendor / Device IDs
69 tmp_dword = Dev->Read(Dev->Ptr, Offset>>2);
72 case 4: tmp_dword = 0; break;
74 tmp_dword &= ~(0xFFFF << ((Offset&2)*16));
78 tmp_dword &= ~(0xFF << ((Offset&3)*8));
82 tmp_dword |= Data << ((Offset&3)*8);
83 Dev->Write(Dev->Ptr, Offset>>2, tmp_dword);