Index: usbroothub.c =================================================================== RCS file: /cvsroot/src/sys/dev/usb/usbroothub.c,v retrieving revision 1.9 diff -p -u -r1.9 usbroothub.c --- usbroothub.c 21 Aug 2019 10:48:37 -0000 1.9 +++ usbroothub.c 28 Aug 2019 07:11:40 -0000 @@ -388,6 +388,7 @@ roothub_ctrl_start(struct usbd_xfer *xfe case C(UR_CLEAR_FEATURE, UT_WRITE_DEVICE): case C(UR_CLEAR_FEATURE, UT_WRITE_INTERFACE): case C(UR_CLEAR_FEATURE, UT_WRITE_ENDPOINT): + case C(UR_CLEAR_FEATURE, UT_WRITE_CLASS_OTHER): /* * DEVICE_REMOTE_WAKEUP and ENDPOINT_HALT are no-ops * for the integrated root hub. @@ -481,10 +482,13 @@ roothub_ctrl_start(struct usbd_xfer *xfe #undef sd default: /* Default to error */ + USBHIST_LOG(usbdebug, "bad read device descriptor", + 0, 0, 0, 0); buflen = -1; } break; case C(UR_GET_DESCRIPTOR, UT_READ_CLASS_DEVICE): + USBHIST_LOG(usbdebug, "returning HUB desc", 0, 0, 0, 0); buflen = uimin(len, sizeof(usbroothub_hubd)); memcpy(buf, &usbroothub_hubd, buflen); break; @@ -516,6 +520,42 @@ roothub_ctrl_start(struct usbd_xfer *xfe buflen = sizeof(*out); } break; + case C(UR_GET_STATUS, UT_READ_CLASS_OTHER): + /* Get Status from Port?, ?.?.? */ + if (value == 0) { + if (len != sizeof(usb_port_status_t)) + goto fail; + usb_port_status_t *out = buf; + + USETW(out->wPortStatus, 0); + USETW(out->wPortChange, 0); + buflen = sizeof(*out); + break; + } + if (value == UR_PST_EXT_PORT_STATUS) { + if (len != sizeof(usb_port_status_ext_t)) + goto fail; + usb_port_status_ext_t *out = buf; + + USETW(out->wPortStatus, 0); + USETW(out->wPortChange, 0); + USETW(out->dwExtPortStatus, 0); + buflen = sizeof(*out); + break; + } + goto fail; + case C(UR_GET_STATUS, UT_READ_CLASS_DEVICE): + /* Get Status from Device?, ?.?.? */ + if (len == 4) { + usb_hub_status_t *out = buf; + + USETW(out->wHubStatus, 0); + USETW(out->wHubChange, 0); + buflen = sizeof(*out); + } else { + goto fail; + } + break; case C(UR_SET_ADDRESS, UT_WRITE_DEVICE): /* Set Address, 9.4.6 */ USBHIST_LOG(usbdebug, "UR_SET_ADDRESS, UT_WRITE_DEVICE: " @@ -540,6 +580,8 @@ roothub_ctrl_start(struct usbd_xfer *xfe case C(UR_SET_FEATURE, UT_WRITE_ENDPOINT): /* Set Feature, 9.4.9, not supported */ goto fail; + case C(UR_SET_FEATURE, UT_WRITE_CLASS_OTHER): + break; case C(UR_SET_INTERFACE, UT_WRITE_INTERFACE): /* Set Interface, 9.4.10, not supported */ break; @@ -548,6 +590,8 @@ roothub_ctrl_start(struct usbd_xfer *xfe break; default: /* Default to error */ + USBHIST_LOG(usbdebug, "unknown req/reqtype", + 0, 0, 0, 0); buflen = -1; break; }