1 #ifndef _ASMX86_PCI_H_ 2 #define _ASMX86_PCI_H_ 3 /* 4 * Copyright (C) 2013, Red Hat Inc, Michael S. Tsirkin <mst@redhat.com> 5 * 6 * This work is licensed under the terms of the GNU LGPL, version 2. 7 */ 8 #include "libcflat.h" 9 #include "pci.h" 10 #include "x86/asm/io.h" 11 12 #define PCI_CONF1_ADDRESS(dev, reg) ((0x1 << 31) | (dev << 8) | reg) 13 14 static inline uint8_t pci_config_readb(pcidevaddr_t dev, uint8_t reg) 15 { 16 outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); 17 return inb(0xCFC); 18 } 19 20 static inline uint16_t pci_config_readw(pcidevaddr_t dev, uint8_t reg) 21 { 22 outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); 23 return inw(0xCFC); 24 } 25 26 static inline uint32_t pci_config_readl(pcidevaddr_t dev, uint8_t reg) 27 { 28 outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); 29 return inl(0xCFC); 30 } 31 32 static inline void pci_config_writeb(pcidevaddr_t dev, uint8_t reg, 33 uint8_t val) 34 { 35 outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); 36 outb(val, 0xCFC); 37 } 38 39 static inline void pci_config_writew(pcidevaddr_t dev, uint8_t reg, 40 uint16_t val) 41 { 42 outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); 43 outw(val, 0xCFC); 44 } 45 46 static inline void pci_config_writel(pcidevaddr_t dev, uint8_t reg, 47 uint32_t val) 48 { 49 outl(PCI_CONF1_ADDRESS(dev, reg), 0xCF8); 50 outl(val, 0xCFC); 51 } 52 53 static inline 54 phys_addr_t pci_translate_addr(pcidevaddr_t dev __unused, uint64_t addr) 55 { 56 return addr; 57 } 58 59 #endif 60