| #include "pci.h" // PCIDevice |
| #include "ioport.h" // outl |
| |
| void pci_config_writel(PCIDevice *d, u32 addr, u32 val) |
| { |
| outl(0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc), 0xcf8); |
| outl(val, 0xcfc); |
| } |
| |
| void pci_config_writew(PCIDevice *d, u32 addr, u16 val) |
| { |
| outl(0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc), 0xcf8); |
| outw(val, 0xcfc + (addr & 2)); |
| } |
| |
| void pci_config_writeb(PCIDevice *d, u32 addr, u8 val) |
| { |
| outl(0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc), 0xcf8); |
| outb(val, 0xcfc + (addr & 3)); |
| } |
| |
| u32 pci_config_readl(PCIDevice *d, u32 addr) |
| { |
| outl(0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc), 0xcf8); |
| return inl(0xcfc); |
| } |
| |
| u16 pci_config_readw(PCIDevice *d, u32 addr) |
| { |
| outl(0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc), 0xcf8); |
| return inw(0xcfc + (addr & 2)); |
| } |
| |
| u8 pci_config_readb(PCIDevice *d, u32 addr) |
| { |
| outl(0x80000000 | (d->bus << 16) | (d->devfn << 8) | (addr & 0xfc), 0xcf8); |
| return inb(0xcfc + (addr & 3)); |
| } |