Lines Matching +full:bus +full:- +full:addr

1 // SPDX-License-Identifier: GPL-2.0
11 * This interrupt-safe spinlock protects all accesses to PCI
19 * alignment, do locking and call the low-level functions pointed to
20 * by pci_dev->ops.
37 (struct pci_bus *bus, unsigned int devfn, int pos, type *value) \
44 res = bus->ops->read(bus, devfn, pos, len, &data); \
52 (struct pci_bus *bus, unsigned int devfn, int pos, type value) \
58 res = bus->ops->write(bus, devfn, pos, len, value); \
77 int pci_generic_config_read(struct pci_bus *bus, unsigned int devfn, in pci_generic_config_read() argument
80 void __iomem *addr; in pci_generic_config_read() local
82 addr = bus->ops->map_bus(bus, devfn, where); in pci_generic_config_read()
83 if (!addr) { in pci_generic_config_read()
89 *val = readb(addr); in pci_generic_config_read()
91 *val = readw(addr); in pci_generic_config_read()
93 *val = readl(addr); in pci_generic_config_read()
99 int pci_generic_config_write(struct pci_bus *bus, unsigned int devfn, in pci_generic_config_write() argument
102 void __iomem *addr; in pci_generic_config_write() local
104 addr = bus->ops->map_bus(bus, devfn, where); in pci_generic_config_write()
105 if (!addr) in pci_generic_config_write()
109 writeb(val, addr); in pci_generic_config_write()
111 writew(val, addr); in pci_generic_config_write()
113 writel(val, addr); in pci_generic_config_write()
119 int pci_generic_config_read32(struct pci_bus *bus, unsigned int devfn, in pci_generic_config_read32() argument
122 void __iomem *addr; in pci_generic_config_read32() local
124 addr = bus->ops->map_bus(bus, devfn, where & ~0x3); in pci_generic_config_read32()
125 if (!addr) { in pci_generic_config_read32()
130 *val = readl(addr); in pci_generic_config_read32()
133 *val = (*val >> (8 * (where & 3))) & ((1 << (size * 8)) - 1); in pci_generic_config_read32()
139 int pci_generic_config_write32(struct pci_bus *bus, unsigned int devfn, in pci_generic_config_write32() argument
142 void __iomem *addr; in pci_generic_config_write32() local
145 addr = bus->ops->map_bus(bus, devfn, where & ~0x3); in pci_generic_config_write32()
146 if (!addr) in pci_generic_config_write32()
150 writel(val, addr); in pci_generic_config_write32()
155 * In general, hardware that supports only 32-bit writes on PCI is in pci_generic_config_write32()
156 * not spec-compliant. For example, software may perform a 16-bit in pci_generic_config_write32()
157 * write. If the hardware only supports 32-bit accesses, we must in pci_generic_config_write32()
158 * do a 32-bit read, merge in the 16 bits we intend to write, in pci_generic_config_write32()
159 * followed by a 32-bit write. If the 16 bits we *don't* intend to in pci_generic_config_write32()
160 * write happen to have any RW1C (write-one-to-clear) bits set, we in pci_generic_config_write32()
163 …dev_warn_ratelimited(&bus->dev, "%d-byte config write to %04x:%02x:%02x.%d offset %#x may corrupt … in pci_generic_config_write32()
164 size, pci_domain_nr(bus), bus->number, in pci_generic_config_write32()
167 mask = ~(((1 << (size * 8)) - 1) << ((where & 0x3) * 8)); in pci_generic_config_write32()
168 tmp = readl(addr) & mask; in pci_generic_config_write32()
170 writel(tmp, addr); in pci_generic_config_write32()
177 * pci_bus_set_ops - Set raw operations of pci bus
178 * @bus: pci bus struct
183 struct pci_ops *pci_bus_set_ops(struct pci_bus *bus, struct pci_ops *ops) in pci_bus_set_ops() argument
189 old_ops = bus->ops; in pci_bus_set_ops()
190 bus->ops = ops; in pci_bus_set_ops()
199 * we're required to prevent it during D-state transitions.
211 wait_event(pci_cfg_wait, !dev->block_cfg_access); in pci_wait_cfg()
213 } while (dev->block_cfg_access); in pci_wait_cfg()
222 u32 data = -1; \
224 return -EINVAL; \
226 if (unlikely(dev->block_cfg_access)) \
228 ret = dev->bus->ops->read(dev->bus, dev->devfn, \
243 return -EINVAL; \
245 if (unlikely(dev->block_cfg_access)) \
247 ret = dev->bus->ops->write(dev->bus, dev->devfn, \
262 * pci_cfg_access_lock - Lock PCI config reads/writes in PCI_USER_READ_CONFIG()
274 if (dev->block_cfg_access) in PCI_USER_READ_CONFIG()
276 dev->block_cfg_access = 1; in PCI_USER_READ_CONFIG()
282 * pci_cfg_access_trylock - try to lock PCI config reads/writes
295 if (dev->block_cfg_access) in pci_cfg_access_trylock()
298 dev->block_cfg_access = 1; in pci_cfg_access_trylock()
306 * pci_cfg_access_unlock - Unlock PCI config reads/writes
319 * to kill them, unlike a double-block above. in pci_cfg_access_unlock()
321 WARN_ON(!dev->block_cfg_access); in pci_cfg_access_unlock()
323 dev->block_cfg_access = 0; in pci_cfg_access_unlock()
529 return pci_bus_read_config_byte(dev->bus, dev->devfn, where, val); in pci_read_config_byte()
539 return pci_bus_read_config_word(dev->bus, dev->devfn, where, val); in pci_read_config_word()
550 return pci_bus_read_config_dword(dev->bus, dev->devfn, where, val); in pci_read_config_dword()
558 return pci_bus_write_config_byte(dev->bus, dev->devfn, where, val); in pci_write_config_byte()
566 return pci_bus_write_config_word(dev->bus, dev->devfn, where, val); in pci_write_config_word()
575 return pci_bus_write_config_dword(dev->bus, dev->devfn, where, val); in pci_write_config_dword()