/* Step 5 */
        ep0_ctx->ep_info2 = EP_TYPE(CTRL_EP);
        /*
-        * See section 4.3 bullet 6:
-        * The default Max Packet size for ep0 is "8 bytes for a USB2
-        * LS/FS/HS device or 512 bytes for a USB3 SS device"
         * XXX: Not sure about wireless USB devices.
         */
-       if (udev->speed == USB_SPEED_SUPER)
+       switch (udev->speed) {
+       case USB_SPEED_SUPER:
                ep0_ctx->ep_info2 |= MAX_PACKET(512);
-       else
+               break;
+       case USB_SPEED_HIGH:
+       /* USB core guesses at a 64-byte max packet first for FS devices */
+       case USB_SPEED_FULL:
+               ep0_ctx->ep_info2 |= MAX_PACKET(64);
+               break;
+       case USB_SPEED_LOW:
                ep0_ctx->ep_info2 |= MAX_PACKET(8);
+               break;
+       case USB_SPEED_VARIABLE:
+               xhci_dbg(xhci, "FIXME xHCI doesn't support wireless speeds\n");
+               return -EINVAL;
+               break;
+       default:
+               /* New speed? */
+               BUG();
+       }
        /* EP 0 can handle "burst" sizes of 1, so Max Burst Size field is 0 */
        ep0_ctx->ep_info2 |= MAX_BURST(0);
        ep0_ctx->ep_info2 |= ERROR_COUNT(3);