Lines Matching refs:dev

23                          void (*func)(QPCIDevice *dev, int devfn, void *data),  in qpci_device_foreach()  argument
32 QPCIDevice *dev; in qpci_device_foreach() local
34 dev = qpci_device_find(bus, QPCI_DEVFN(slot, fn)); in qpci_device_foreach()
35 if (!dev) { in qpci_device_foreach()
40 qpci_config_readw(dev, PCI_VENDOR_ID) != vendor_id) { in qpci_device_foreach()
41 g_free(dev); in qpci_device_foreach()
46 qpci_config_readw(dev, PCI_DEVICE_ID) != device_id) { in qpci_device_foreach()
47 g_free(dev); in qpci_device_foreach()
51 func(dev, QPCI_DEVFN(slot, fn), data); in qpci_device_foreach()
56 bool qpci_has_buggy_msi(QPCIDevice *dev) in qpci_has_buggy_msi() argument
58 return dev->bus->has_buggy_msi; in qpci_has_buggy_msi()
61 bool qpci_check_buggy_msi(QPCIDevice *dev) in qpci_check_buggy_msi() argument
63 if (qpci_has_buggy_msi(dev)) { in qpci_check_buggy_msi()
70 static void qpci_device_set(QPCIDevice *dev, QPCIBus *bus, int devfn) in qpci_device_set() argument
72 g_assert(dev); in qpci_device_set()
74 dev->bus = bus; in qpci_device_set()
75 dev->devfn = devfn; in qpci_device_set()
80 QPCIDevice *dev; in qpci_device_find() local
82 dev = g_malloc0(sizeof(*dev)); in qpci_device_find()
83 qpci_device_set(dev, bus, devfn); in qpci_device_find()
85 if (qpci_config_readw(dev, PCI_VENDOR_ID) == 0xFFFF) { in qpci_device_find()
86 g_free(dev); in qpci_device_find()
90 return dev; in qpci_device_find()
93 void qpci_device_init(QPCIDevice *dev, QPCIBus *bus, QPCIAddress *addr) in qpci_device_init() argument
97 qpci_device_set(dev, bus, addr->devfn); in qpci_device_init()
98 vendor_id = qpci_config_readw(dev, PCI_VENDOR_ID); in qpci_device_init()
99 device_id = qpci_config_readw(dev, PCI_DEVICE_ID); in qpci_device_init()
104 static uint8_t qpci_find_resource_reserve_capability(QPCIDevice *dev) in qpci_find_resource_reserve_capability() argument
109 if (qpci_config_readw(dev, PCI_VENDOR_ID) != PCI_VENDOR_ID_REDHAT) { in qpci_find_resource_reserve_capability()
113 device_id = qpci_config_readw(dev, PCI_DEVICE_ID); in qpci_find_resource_reserve_capability()
121 cap = qpci_find_capability(dev, PCI_CAP_ID_VNDR, cap); in qpci_find_resource_reserve_capability()
123 qpci_config_readb(dev, cap + REDHAT_PCI_CAP_TYPE_OFFSET) != in qpci_find_resource_reserve_capability()
126 uint8_t cap_len = qpci_config_readb(dev, cap + PCI_CAP_FLAGS); in qpci_find_resource_reserve_capability()
136 QPCIDevice *dev; in qpci_secondary_buses_rec() local
142 dev = qpci_device_find(qbus, QPCI_DEVFN(bus + index, 0)); in qpci_secondary_buses_rec()
143 if (dev == NULL) { in qpci_secondary_buses_rec()
146 class = qpci_config_readw(dev, PCI_CLASS_DEVICE); in qpci_secondary_buses_rec()
148 qpci_config_writeb(dev, PCI_SECONDARY_BUS, 255); in qpci_secondary_buses_rec()
149 qpci_config_writeb(dev, PCI_SUBORDINATE_BUS, 0); in qpci_secondary_buses_rec()
151 g_free(dev); in qpci_secondary_buses_rec()
155 dev = qpci_device_find(qbus, QPCI_DEVFN(bus + index, 0)); in qpci_secondary_buses_rec()
156 if (dev == NULL) { in qpci_secondary_buses_rec()
159 class = qpci_config_readw(dev, PCI_CLASS_DEVICE); in qpci_secondary_buses_rec()
161 g_free(dev); in qpci_secondary_buses_rec()
165 pribus = qpci_config_readb(dev, PCI_PRIMARY_BUS); in qpci_secondary_buses_rec()
167 qpci_config_writeb(dev, PCI_PRIMARY_BUS, bus); in qpci_secondary_buses_rec()
170 secbus = qpci_config_readb(dev, PCI_SECONDARY_BUS); in qpci_secondary_buses_rec()
174 qpci_config_writeb(dev, PCI_SECONDARY_BUS, secbus); in qpci_secondary_buses_rec()
177 subbus = qpci_config_readb(dev, PCI_SUBORDINATE_BUS); in qpci_secondary_buses_rec()
178 qpci_config_writeb(dev, PCI_SUBORDINATE_BUS, 255); in qpci_secondary_buses_rec()
184 uint8_t cap = qpci_find_resource_reserve_capability(dev); in qpci_secondary_buses_rec()
189 tmp_res_bus = qpci_config_readl(dev, cap + in qpci_secondary_buses_rec()
206 qpci_config_writeb(dev, PCI_SUBORDINATE_BUS, subbus); in qpci_secondary_buses_rec()
207 g_free(dev); in qpci_secondary_buses_rec()
221 void qpci_device_enable(QPCIDevice *dev) in qpci_device_enable() argument
226 cmd = qpci_config_readw(dev, PCI_COMMAND); in qpci_device_enable()
228 qpci_config_writew(dev, PCI_COMMAND, cmd); in qpci_device_enable()
231 cmd = qpci_config_readw(dev, PCI_COMMAND); in qpci_device_enable()
249 uint8_t qpci_find_capability(QPCIDevice *dev, uint8_t id, uint8_t start_addr) in qpci_find_capability() argument
255 addr = qpci_config_readb(dev, start_addr + PCI_CAP_LIST_NEXT); in qpci_find_capability()
257 addr = qpci_config_readb(dev, PCI_CAPABILITY_LIST); in qpci_find_capability()
261 cap = qpci_config_readb(dev, addr); in qpci_find_capability()
263 addr = qpci_config_readb(dev, addr + PCI_CAP_LIST_NEXT); in qpci_find_capability()
270 void qpci_msix_enable(QPCIDevice *dev) in qpci_msix_enable() argument
278 addr = qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); in qpci_msix_enable()
281 val = qpci_config_readw(dev, addr + PCI_MSIX_FLAGS); in qpci_msix_enable()
282 qpci_config_writew(dev, addr + PCI_MSIX_FLAGS, val | PCI_MSIX_FLAGS_ENABLE); in qpci_msix_enable()
284 table = qpci_config_readl(dev, addr + PCI_MSIX_TABLE); in qpci_msix_enable()
286 dev->msix_table_bar = qpci_iomap(dev, bir_table, NULL); in qpci_msix_enable()
287 dev->msix_table_off = table & ~PCI_MSIX_FLAGS_BIRMASK; in qpci_msix_enable()
289 table = qpci_config_readl(dev, addr + PCI_MSIX_PBA); in qpci_msix_enable()
292 dev->msix_pba_bar = qpci_iomap(dev, bir_pba, NULL); in qpci_msix_enable()
294 dev->msix_pba_bar = dev->msix_table_bar; in qpci_msix_enable()
296 dev->msix_pba_off = table & ~PCI_MSIX_FLAGS_BIRMASK; in qpci_msix_enable()
298 dev->msix_enabled = true; in qpci_msix_enable()
301 void qpci_msix_disable(QPCIDevice *dev) in qpci_msix_disable() argument
306 g_assert(dev->msix_enabled); in qpci_msix_disable()
307 addr = qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); in qpci_msix_disable()
309 val = qpci_config_readw(dev, addr + PCI_MSIX_FLAGS); in qpci_msix_disable()
310 qpci_config_writew(dev, addr + PCI_MSIX_FLAGS, in qpci_msix_disable()
313 if (dev->msix_pba_bar.addr != dev->msix_table_bar.addr) { in qpci_msix_disable()
314 qpci_iounmap(dev, dev->msix_pba_bar); in qpci_msix_disable()
316 qpci_iounmap(dev, dev->msix_table_bar); in qpci_msix_disable()
318 dev->msix_enabled = 0; in qpci_msix_disable()
319 dev->msix_table_off = 0; in qpci_msix_disable()
320 dev->msix_pba_off = 0; in qpci_msix_disable()
323 bool qpci_msix_pending(QPCIDevice *dev, uint16_t entry) in qpci_msix_pending() argument
329 g_assert(dev->msix_enabled); in qpci_msix_pending()
330 pba_entry = qpci_io_readl(dev, dev->msix_pba_bar, dev->msix_pba_off + off); in qpci_msix_pending()
331 qpci_io_writel(dev, dev->msix_pba_bar, dev->msix_pba_off + off, in qpci_msix_pending()
336 bool qpci_msix_masked(QPCIDevice *dev, uint16_t entry) in qpci_msix_masked() argument
340 uint64_t vector_off = dev->msix_table_off + entry * PCI_MSIX_ENTRY_SIZE; in qpci_msix_masked()
342 g_assert(dev->msix_enabled); in qpci_msix_masked()
343 addr = qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); in qpci_msix_masked()
345 val = qpci_config_readw(dev, addr + PCI_MSIX_FLAGS); in qpci_msix_masked()
350 return (qpci_io_readl(dev, dev->msix_table_bar, in qpci_msix_masked()
356 uint16_t qpci_msix_table_size(QPCIDevice *dev) in qpci_msix_table_size() argument
361 addr = qpci_find_capability(dev, PCI_CAP_ID_MSIX, 0); in qpci_msix_table_size()
364 control = qpci_config_readw(dev, addr + PCI_MSIX_FLAGS); in qpci_msix_table_size()
368 uint8_t qpci_config_readb(QPCIDevice *dev, uint8_t offset) in qpci_config_readb() argument
370 return dev->bus->config_readb(dev->bus, dev->devfn, offset); in qpci_config_readb()
373 uint16_t qpci_config_readw(QPCIDevice *dev, uint8_t offset) in qpci_config_readw() argument
375 return dev->bus->config_readw(dev->bus, dev->devfn, offset); in qpci_config_readw()
378 uint32_t qpci_config_readl(QPCIDevice *dev, uint8_t offset) in qpci_config_readl() argument
380 return dev->bus->config_readl(dev->bus, dev->devfn, offset); in qpci_config_readl()
384 void qpci_config_writeb(QPCIDevice *dev, uint8_t offset, uint8_t value) in qpci_config_writeb() argument
386 dev->bus->config_writeb(dev->bus, dev->devfn, offset, value); in qpci_config_writeb()
389 void qpci_config_writew(QPCIDevice *dev, uint8_t offset, uint16_t value) in qpci_config_writew() argument
391 dev->bus->config_writew(dev->bus, dev->devfn, offset, value); in qpci_config_writew()
394 void qpci_config_writel(QPCIDevice *dev, uint8_t offset, uint32_t value) in qpci_config_writel() argument
396 dev->bus->config_writel(dev->bus, dev->devfn, offset, value); in qpci_config_writel()
399 uint8_t qpci_io_readb(QPCIDevice *dev, QPCIBar token, uint64_t off) in qpci_io_readb() argument
401 QPCIBus *bus = dev->bus; in qpci_io_readb()
408 bus->memread(dev->bus, token.addr + off, &val, sizeof(val)); in qpci_io_readb()
413 uint16_t qpci_io_readw(QPCIDevice *dev, QPCIBar token, uint64_t off) in qpci_io_readw() argument
415 QPCIBus *bus = dev->bus; in qpci_io_readw()
427 uint32_t qpci_io_readl(QPCIDevice *dev, QPCIBar token, uint64_t off) in qpci_io_readl() argument
429 QPCIBus *bus = dev->bus; in qpci_io_readl()
436 bus->memread(dev->bus, token.addr + off, &val, sizeof(val)); in qpci_io_readl()
441 uint64_t qpci_io_readq(QPCIDevice *dev, QPCIBar token, uint64_t off) in qpci_io_readq() argument
443 QPCIBus *bus = dev->bus; in qpci_io_readq()
455 void qpci_io_writeb(QPCIDevice *dev, QPCIBar token, uint64_t off, in qpci_io_writeb() argument
458 QPCIBus *bus = dev->bus; in qpci_io_writeb()
467 void qpci_io_writew(QPCIDevice *dev, QPCIBar token, uint64_t off, in qpci_io_writew() argument
470 QPCIBus *bus = dev->bus; in qpci_io_writew()
480 void qpci_io_writel(QPCIDevice *dev, QPCIBar token, uint64_t off, in qpci_io_writel() argument
483 QPCIBus *bus = dev->bus; in qpci_io_writel()
493 void qpci_io_writeq(QPCIDevice *dev, QPCIBar token, uint64_t off, in qpci_io_writeq() argument
496 QPCIBus *bus = dev->bus; in qpci_io_writeq()
506 void qpci_memread(QPCIDevice *dev, QPCIBar token, uint64_t off, in qpci_memread() argument
510 dev->bus->memread(dev->bus, token.addr + off, buf, len); in qpci_memread()
513 void qpci_memwrite(QPCIDevice *dev, QPCIBar token, uint64_t off, in qpci_memwrite() argument
517 dev->bus->memwrite(dev->bus, token.addr + off, buf, len); in qpci_memwrite()
520 QPCIBar qpci_iomap(QPCIDevice *dev, int barno, uint64_t *sizeptr) in qpci_iomap() argument
522 QPCIBus *bus = dev->bus; in qpci_iomap()
536 qpci_config_writel(dev, bar_reg, 0xFFFFFFFF); in qpci_iomap()
537 addr = qpci_config_readl(dev, bar_reg); in qpci_iomap()
562 qpci_config_writel(dev, bar_reg, loc | PCI_BASE_ADDRESS_SPACE_IO); in qpci_iomap()
573 qpci_config_writel(dev, bar_reg, loc); in qpci_iomap()
580 void qpci_iounmap(QPCIDevice *dev, QPCIBar bar) in qpci_iounmap() argument
585 QPCIBar qpci_legacy_iomap(QPCIDevice *dev, uint16_t addr) in qpci_legacy_iomap() argument