Dear Gerd,
On 07/18/17 13:36, Gerd Hoffmann wrote:
xhci controllers have two virtual ports per (usb3 capable) physical port, one for usb2 and one for usb3 devices. Add a hub portmap callback to map the virtual ports to physical ports. For now assume we simply have the same number of usb2 and usb3 ports.
How can the change be tested? Do you have some QEMU command?
Signed-off-by: Gerd Hoffmann kraxel@redhat.com
src/hw/usb-xhci.c | 11 +++++++++++ 1 file changed, 11 insertions(+)
diff --git a/src/hw/usb-xhci.c b/src/hw/usb-xhci.c index 69954b9d8d..803822aece 100644 --- a/src/hw/usb-xhci.c +++ b/src/hw/usb-xhci.c @@ -374,6 +374,16 @@ xhci_hub_reset(struct usbhub_s *hub, u32 port) return rc; }
+static int +xhci_hub_portmap(struct usbhub_s *hub, u32 port) +{
- struct usb_xhci_s *xhci = container_of(hub->cntl, struct usb_xhci_s, usb);
- // we don't parse the extended capabilities, so we take a shortcut
- // here and assumes we have the same number of usb2 and usb3 ports
*assume* without the 3rd person singular s?
- return port % (xhci->ports/2) + 1;
+}
- static void xhci_hub_disconnect(struct usbhub_s *hub, u32 port) {
@@ -383,6 +393,7 @@ xhci_hub_disconnect(struct usbhub_s *hub, u32 port) static struct usbhub_op_s xhci_hub_ops = { .detect = xhci_hub_detect, .reset = xhci_hub_reset,
- .portmap = xhci_hub_portmap, .disconnect = xhci_hub_disconnect, };
Kind regards,
Paul