xref: /kvm-unit-tests/lib/x86/asm/pci.h (revision c865f654ffe4c5955038aaf74f702ba62f3eb014)
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 
pci_config_readb(pcidevaddr_t dev,uint8_t reg)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 
pci_config_readw(pcidevaddr_t dev,uint8_t reg)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 
pci_config_readl(pcidevaddr_t dev,uint8_t reg)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 
pci_config_writeb(pcidevaddr_t dev,uint8_t reg,uint8_t val)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 
pci_config_writew(pcidevaddr_t dev,uint8_t reg,uint16_t val)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 
pci_config_writel(pcidevaddr_t dev,uint8_t reg,uint32_t val)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
pci_translate_addr(pcidevaddr_t dev __unused,uint64_t addr)54 phys_addr_t pci_translate_addr(pcidevaddr_t dev __unused, uint64_t addr)
55 {
56     return addr;
57 }
58 
59 #endif
60