示例#1
0
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 );
}
示例#2
0
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;
    }
}