Lines Matching refs:dev

38 #define PCIE_DEV_PRINTF(dev, fmt, ...)                                  \  argument
39 PCIE_DPRINTF("%s:%x "fmt, (dev)->name, (dev)->devfn, ## __VA_ARGS__)
97 int pcie_aer_init(PCIDevice *dev, uint8_t cap_ver, uint16_t offset, in pcie_aer_init() argument
100 pcie_add_capability(dev, PCI_EXT_CAP_ID_ERR, cap_ver, in pcie_aer_init()
102 dev->exp.aer_cap = offset; in pcie_aer_init()
105 if (dev->exp.aer_log.log_max > PCIE_AER_LOG_MAX_LIMIT) { in pcie_aer_init()
107 "is %d", dev->exp.aer_log.log_max, PCIE_AER_LOG_MAX_LIMIT); in pcie_aer_init()
110 dev->exp.aer_log.log = g_malloc0(sizeof dev->exp.aer_log.log[0] * in pcie_aer_init()
111 dev->exp.aer_log.log_max); in pcie_aer_init()
113 pci_set_long(dev->w1cmask + offset + PCI_ERR_UNCOR_STATUS, in pcie_aer_init()
116 if (dev->cap_present & QEMU_PCIE_ERR_UNC_MASK) { in pcie_aer_init()
117 pci_set_long(dev->config + offset + PCI_ERR_UNCOR_MASK, in pcie_aer_init()
119 pci_set_long(dev->wmask + offset + PCI_ERR_UNCOR_MASK, in pcie_aer_init()
123 pci_set_long(dev->config + offset + PCI_ERR_UNCOR_SEVER, in pcie_aer_init()
125 pci_set_long(dev->wmask + offset + PCI_ERR_UNCOR_SEVER, in pcie_aer_init()
128 pci_long_test_and_set_mask(dev->w1cmask + offset + PCI_ERR_COR_STATUS, in pcie_aer_init()
131 pci_set_long(dev->config + offset + PCI_ERR_COR_MASK, in pcie_aer_init()
133 pci_set_long(dev->wmask + offset + PCI_ERR_COR_MASK, in pcie_aer_init()
137 if (dev->exp.aer_log.log_max > 0) { in pcie_aer_init()
138 pci_set_long(dev->config + offset + PCI_ERR_CAP, in pcie_aer_init()
141 pci_set_long(dev->wmask + offset + PCI_ERR_CAP, in pcie_aer_init()
145 pci_set_long(dev->config + offset + PCI_ERR_CAP, in pcie_aer_init()
147 pci_set_long(dev->wmask + offset + PCI_ERR_CAP, in pcie_aer_init()
151 switch (pcie_cap_get_type(dev)) { in pcie_aer_init()
157 pci_word_test_and_set_mask(dev->wmask + PCI_BRIDGE_CONTROL, in pcie_aer_init()
159 pci_long_test_and_set_mask(dev->w1cmask + PCI_STATUS, in pcie_aer_init()
169 void pcie_aer_exit(PCIDevice *dev) in pcie_aer_exit() argument
171 g_free(dev->exp.aer_log.log); in pcie_aer_exit()
174 static void pcie_aer_update_uncor_status(PCIDevice *dev) in pcie_aer_update_uncor_status() argument
176 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_update_uncor_status()
177 PCIEAERLog *aer_log = &dev->exp.aer_log; in pcie_aer_update_uncor_status()
182 dev->exp.aer_log.log[i].status); in pcie_aer_update_uncor_status()
196 pcie_aer_msg_alldev(PCIDevice *dev, const PCIEAERMsg *msg) in pcie_aer_msg_alldev() argument
198 uint16_t devctl = pci_get_word(dev->config + dev->exp.exp_cap + in pcie_aer_msg_alldev()
201 (pci_get_word(dev->config + PCI_COMMAND) & PCI_COMMAND_SERR)) && in pcie_aer_msg_alldev()
222 pci_word_test_and_set_mask(dev->config + PCI_STATUS, in pcie_aer_msg_alldev()
226 pci_get_word(dev->config + dev->exp.exp_cap + PCI_EXP_DEVCTL))) { in pcie_aer_msg_alldev()
243 static bool pcie_aer_msg_vbridge(PCIDevice *dev, const PCIEAERMsg *msg) in pcie_aer_msg_vbridge() argument
245 uint16_t bridge_control = pci_get_word(dev->config + PCI_BRIDGE_CONTROL); in pcie_aer_msg_vbridge()
249 pci_word_test_and_set_mask(dev->config + PCI_SEC_STATUS, in pcie_aer_msg_vbridge()
259 void pcie_aer_root_set_vector(PCIDevice *dev, unsigned int vector) in pcie_aer_root_set_vector() argument
261 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_root_set_vector()
269 static unsigned int pcie_aer_root_get_vector(PCIDevice *dev) in pcie_aer_root_get_vector() argument
271 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_root_get_vector()
292 static void pcie_aer_root_notify(PCIDevice *dev) in pcie_aer_root_notify() argument
294 if (msix_enabled(dev)) { in pcie_aer_root_notify()
295 msix_notify(dev, pcie_aer_root_get_vector(dev)); in pcie_aer_root_notify()
296 } else if (msi_enabled(dev)) { in pcie_aer_root_notify()
297 msi_notify(dev, pcie_aer_root_get_vector(dev)); in pcie_aer_root_notify()
298 } else if (pci_intx(dev) != -1) { in pcie_aer_root_notify()
299 pci_irq_assert(dev); in pcie_aer_root_notify()
308 static void pcie_aer_msg_root_port(PCIDevice *dev, const PCIEAERMsg *msg) in pcie_aer_msg_root_port() argument
315 cmd = pci_get_word(dev->config + PCI_COMMAND); in pcie_aer_msg_root_port()
316 aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_msg_root_port()
376 pcie_aer_root_notify(dev); in pcie_aer_msg_root_port()
384 static void pcie_aer_msg(PCIDevice *dev, const PCIEAERMsg *msg) in pcie_aer_msg() argument
388 while (dev) { in pcie_aer_msg()
389 if (!pci_is_express(dev)) { in pcie_aer_msg()
396 type = pcie_cap_get_type(dev); in pcie_aer_msg()
400 !pcie_aer_msg_vbridge(dev, msg)) { in pcie_aer_msg()
403 if (!pcie_aer_msg_alldev(dev, msg)) { in pcie_aer_msg()
407 pcie_aer_msg_root_port(dev, msg); in pcie_aer_msg()
417 dev = pci_bridge_get_device(pci_get_bus(dev)); in pcie_aer_msg()
421 static void pcie_aer_update_log(PCIDevice *dev, const PCIEAERErr *err) in pcie_aer_update_log() argument
423 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_update_log()
447 (pci_get_long(dev->config + dev->exp.exp_cap + PCI_EXP_DEVCAP2) & in pcie_aer_update_log()
463 static void pcie_aer_clear_log(PCIDevice *dev) in pcie_aer_clear_log() argument
465 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_clear_log()
474 static void pcie_aer_clear_error(PCIDevice *dev) in pcie_aer_clear_error() argument
476 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_clear_error()
478 PCIEAERLog *aer_log = &dev->exp.aer_log; in pcie_aer_clear_error()
482 pcie_aer_clear_log(dev); in pcie_aer_clear_error()
495 pcie_aer_update_uncor_status(dev); in pcie_aer_clear_error()
498 pcie_aer_update_log(dev, &err); in pcie_aer_clear_error()
501 static int pcie_aer_record_error(PCIDevice *dev, in pcie_aer_record_error() argument
504 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_record_error()
514 if (aer_log_add_err(&dev->exp.aer_log, err) < 0) { in pcie_aer_record_error()
521 pcie_aer_update_log(dev, err); in pcie_aer_record_error()
526 PCIDevice *dev; member
541 PCIDevice *dev = inj->dev; in pcie_aer_inject_cor_error() local
547 pci_set_word(dev->config + dev->exp.exp_cap + PCI_EXP_DEVSTA, inj->devsta); in pcie_aer_inject_cor_error()
561 inj->log_overflow = !!pcie_aer_record_error(dev, inj->err); in pcie_aer_inject_cor_error()
581 PCIDevice *dev = inj->dev; in pcie_aer_inject_uncor_error() local
592 pci_set_long(dev->config + dev->exp.exp_cap + PCI_EXP_DEVSTA, inj->devsta); in pcie_aer_inject_uncor_error()
602 inj->log_overflow = !!pcie_aer_record_error(dev, inj->err); in pcie_aer_inject_uncor_error()
607 cmd = pci_get_word(dev->config + PCI_COMMAND); in pcie_aer_inject_uncor_error()
639 int pcie_aer_inject_error(PCIDevice *dev, const PCIEAERErr *err) in pcie_aer_inject_error() argument
647 if (!pci_is_express(dev)) { in pcie_aer_inject_error()
662 if (dev->exp.aer_cap) { in pcie_aer_inject_error()
663 uint8_t *exp_cap = dev->config + dev->exp.exp_cap; in pcie_aer_inject_error()
664 aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_inject_error()
669 inj.dev = dev; in pcie_aer_inject_error()
705 pcie_aer_msg(dev, &inj.msg); in pcie_aer_inject_error()
712 int ret = pcie_aer_inject_error(dev, &header_log_overflow); in pcie_aer_inject_error()
718 void pcie_aer_write_config(PCIDevice *dev, in pcie_aer_write_config() argument
721 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_write_config()
729 pcie_aer_clear_error(dev); in pcie_aer_write_config()
735 pcie_aer_update_uncor_status(dev); in pcie_aer_write_config()
740 aer_log_clear_all_err(&dev->exp.aer_log); in pcie_aer_write_config()
744 void pcie_aer_root_init(PCIDevice *dev) in pcie_aer_root_init() argument
746 uint16_t pos = dev->exp.aer_cap; in pcie_aer_root_init()
748 pci_set_long(dev->wmask + pos + PCI_ERR_ROOT_COMMAND, in pcie_aer_root_init()
750 pci_set_long(dev->w1cmask + pos + PCI_ERR_ROOT_STATUS, in pcie_aer_root_init()
755 pci_set_long(dev->cmask + pos + PCI_ERR_ROOT_STATUS, in pcie_aer_root_init()
759 void pcie_aer_root_reset(PCIDevice *dev) in pcie_aer_root_reset() argument
761 uint8_t* aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_root_reset()
772 void pcie_aer_root_write_config(PCIDevice *dev, in pcie_aer_root_write_config() argument
776 uint8_t *aer_cap = dev->config + dev->exp.aer_cap; in pcie_aer_root_write_config()
781 if (!msix_enabled(dev) && !msi_enabled(dev)) { in pcie_aer_root_write_config()
782 if (pci_intx(dev) != -1) { in pcie_aer_root_write_config()
783 pci_set_irq(dev, !!(root_cmd & enabled_cmd)); in pcie_aer_root_write_config()
793 pcie_aer_root_notify(dev); in pcie_aer_root_write_config()