And some cleanup on the file. Signed-off-by: Peter Xu <peterx@xxxxxxxxxx> --- lib/x86/asm/pci.h | 37 ++++++++++++++++++++++++++++++++++--- 1 file changed, 34 insertions(+), 3 deletions(-) diff --git a/lib/x86/asm/pci.h b/lib/x86/asm/pci.h index cddde41..ce970e4 100644 --- a/lib/x86/asm/pci.h +++ b/lib/x86/asm/pci.h @@ -9,11 +9,42 @@ #include "pci.h" #include "x86/asm/io.h" +#define PCI_HOST_CONFIG_PORT (0xcf8) +#define PCI_HOST_DATA_PORT (0xcfc) + +#define PCI_HOST_INDEX(dev, reg) (reg | (dev << 8) | (0x1 << 31)) + +#define pci_config_readb(dev, reg) (pci_config_read(dev, reg) & 0xff) +#define pci_config_readw(dev, reg) (pci_config_read(dev, reg) & 0xffff) + static inline uint32_t pci_config_read(pcidevaddr_t dev, uint8_t reg) { - uint32_t index = reg | (dev << 8) | (0x1 << 31); - outl(index, 0xCF8); - return inl(0xCFC); + uint32_t index = PCI_HOST_INDEX(dev, reg); + outl(index, PCI_HOST_CONFIG_PORT); + return inl(PCI_HOST_DATA_PORT); +} + +static inline void pci_config_write(pcidevaddr_t dev, uint8_t reg, + uint32_t val) +{ + uint32_t index = PCI_HOST_INDEX(dev, reg); + outl(index, PCI_HOST_CONFIG_PORT); + outl(val, PCI_HOST_DATA_PORT); } +static inline void pci_config_writeb(pcidevaddr_t dev, uint8_t reg, + uint8_t val) +{ + uint32_t index = PCI_HOST_INDEX(dev, reg); + outl(index, PCI_HOST_CONFIG_PORT); + outb(val, PCI_HOST_DATA_PORT); +} + +static inline void pci_config_writew(pcidevaddr_t dev, uint8_t reg, + uint16_t val) +{ + uint32_t index = PCI_HOST_INDEX(dev, reg); + outl(index, PCI_HOST_CONFIG_PORT); + outw(val, PCI_HOST_DATA_PORT); +} #endif -- 2.7.4 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html