Lines Matching full:xhci
2 * USB xHCI controller with PCI bus emulation
9 * SPDX-sourceInfo: Moved the pci specific content for hcd-xhci.c to
10 * hcd-xhci-pci.c
31 #include "hcd-xhci-pci.h"
38 static void xhci_pci_intr_update(XHCIState *xhci, int n, bool enable) in xhci_pci_intr_update() argument
40 XHCIPciState *s = container_of(xhci, XHCIPciState, xhci); in xhci_pci_intr_update()
46 if (enable == !!xhci->intr[n].msix_used) { in xhci_pci_intr_update()
52 xhci->intr[n].msix_used = true; in xhci_pci_intr_update()
56 xhci->intr[n].msix_used = false; in xhci_pci_intr_update()
60 static bool xhci_pci_intr_raise(XHCIState *xhci, int n, bool level) in xhci_pci_intr_raise() argument
62 XHCIPciState *s = container_of(xhci, XHCIPciState, xhci); in xhci_pci_intr_raise()
85 static bool xhci_pci_intr_mapping_conditional(XHCIState *xhci) in xhci_pci_intr_mapping_conditional() argument
87 XHCIPciState *s = container_of(xhci, XHCIPciState, xhci); in xhci_pci_intr_mapping_conditional()
104 device_cold_reset(DEVICE(&s->xhci)); in xhci_pci_reset()
113 for (intr = 0; intr < s->xhci.numintrs; intr++) { in xhci_pci_vmstate_post_load()
114 if (s->xhci.intr[intr].msix_used) { in xhci_pci_vmstate_post_load()
129 dev->config[PCI_CLASS_PROG] = 0x30; /* xHCI */ in usb_xhci_pci_realize()
134 object_property_set_link(OBJECT(&s->xhci), "host", OBJECT(s), NULL); in usb_xhci_pci_realize()
135 s->xhci.intr_update = xhci_pci_intr_update; in usb_xhci_pci_realize()
136 s->xhci.intr_raise = xhci_pci_intr_raise; in usb_xhci_pci_realize()
138 s->xhci.intr_mapping_supported = xhci_pci_intr_mapping_conditional; in usb_xhci_pci_realize()
140 if (!qdev_realize(DEVICE(&s->xhci), NULL, errp)) { in usb_xhci_pci_realize()
144 s->xhci.nec_quirks = true; in usb_xhci_pci_realize()
148 ret = msi_init(dev, 0x70, s->xhci.numintrs, true, false, &err); in usb_xhci_pci_realize()
168 &s->xhci.mem); in usb_xhci_pci_realize()
177 msix_init(dev, s->xhci.numintrs, in usb_xhci_pci_realize()
178 &s->xhci.mem, 0, OFF_MSIX_TABLE, in usb_xhci_pci_realize()
179 &s->xhci.mem, 0, OFF_MSIX_PBA, in usb_xhci_pci_realize()
182 s->xhci.as = pci_get_address_space(dev); in usb_xhci_pci_realize()
191 msix_uninit(dev, &s->xhci.mem, &s->xhci.mem); in usb_xhci_pci_exit()
196 .name = "xhci",
202 VMSTATE_STRUCT(xhci, XHCIPciState, 1, vmstate_xhci, XHCIState),
215 object_initialize_child(obj, "xhci-core", &s->xhci, TYPE_XHCI); in xhci_instance_init()
216 qdev_alias_all_properties(DEVICE(&s->xhci), obj); in xhci_instance_init()
270 XHCIState *xhci = &s->xhci; in qemu_xhci_instance_init() local
274 xhci->numintrs = XHCI_MAXINTRS; in qemu_xhci_instance_init()
275 xhci->numslots = XHCI_MAXSLOTS; in qemu_xhci_instance_init()