VOID WritePCICfg( UINT8 bus, UINT8 dev, UINT8 fun, UINT8 off, UINT8 len, // 1, 2, 4 bytes UINT32 val ) { UINT32 pci_addr = (0x80000000 | (bus << 16) | (dev << 11) | (fun << 8) | (off & ~3)); UINT16 cfg_data_port = (UINT16)(0xCFC + ( off & 0x3 )); if ( 1 == len ) WritePCIByte ( pci_addr, cfg_data_port, (UINT8)(val&0xFF) ); else if( 2 == len ) WritePCIWord ( pci_addr, cfg_data_port, (UINT16)(val&0xFFFF) ); else if( 4 == len ) WritePCIDword( pci_addr, cfg_data_port, val ); }
void WritePCICfg(uint8_t bus, uint8_t dev, uint8_t fun, uint8_t off, uint8_t len, uint32_t val) { uint32_t pci_addr = (0x80000000 | (bus << 16) | (dev << 11) | (fun << 8) | (off & ~3)); uint16_t cfg_data_port = (uint16_t)(0xCFC + (off & 0x3)); switch(len) { case 1: WritePCIByte(pci_addr, cfg_data_port, (uint8_t)(val & 0xFF)); break; case 2: WritePCIWord(pci_addr, cfg_data_port, (uint16_t)(val & 0xFFFF)); break; case 4: WritePCIDword(pci_addr, cfg_data_port, val); break; } }