xref: /aosp_15_r20/external/coreboot/payloads/libpayload/drivers/pci_map_bus_ops.c (revision b9411a12aaaa7e1e6a6fb7c5e057f44ee179a49c)
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