1 /* SPDX-License-Identifier: GPL-2.0-only */
2
3 #include <libpayload.h>
4 #include <pci.h>
5
pci_read_config8(pcidev_t dev,u16 reg)6 u8 pci_read_config8(pcidev_t dev, u16 reg)
7 {
8 uintptr_t cfg_base = pci_map_bus(dev);
9
10 return read8((void *)(cfg_base | reg));
11 }
12
pci_read_config16(pcidev_t dev,u16 reg)13 u16 pci_read_config16(pcidev_t dev, u16 reg)
14 {
15 uintptr_t cfg_base = pci_map_bus(dev);
16
17 return read16((void *)(cfg_base | (reg & ~1)));
18 }
19
pci_read_config32(pcidev_t dev,u16 reg)20 u32 pci_read_config32(pcidev_t dev, u16 reg)
21 {
22 uintptr_t cfg_base = pci_map_bus(dev);
23
24 return read32((void *)(cfg_base | (reg & ~3)));
25 }
26
pci_write_config8(pcidev_t dev,u16 reg,u8 val)27 void pci_write_config8(pcidev_t dev, u16 reg, u8 val)
28 {
29 uintptr_t cfg_base = pci_map_bus(dev);
30
31 write8((void *)(cfg_base | reg), val);
32 }
33
pci_write_config16(pcidev_t dev,u16 reg,u16 val)34 void pci_write_config16(pcidev_t dev, u16 reg, u16 val)
35 {
36 uintptr_t cfg_base = pci_map_bus(dev);
37
38 write16((void *)(cfg_base | (reg & ~1)), val);
39 }
40
pci_write_config32(pcidev_t dev,u16 reg,u32 val)41 void pci_write_config32(pcidev_t dev, u16 reg, u32 val)
42 {
43 uintptr_t cfg_base = pci_map_bus(dev);
44
45 write32((void *)(cfg_base | (reg & ~3)), val);
46 }
47