diff options
author | thompsa <thompsa@FreeBSD.org> | 2009-04-22 17:08:16 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2009-04-22 17:08:16 +0000 |
commit | d07d36e872344cbf63c8ed718e8c1201fe879fb9 (patch) | |
tree | 5467fd04839124e57ba2eecd2dcb6736316ed6f9 /sys/dev/usb/controller/at91dci.c | |
parent | 7fc43d9a769b211f3caad87ea1751e8ba13c4d51 (diff) | |
download | FreeBSD-src-d07d36e872344cbf63c8ed718e8c1201fe879fb9.zip FreeBSD-src-d07d36e872344cbf63c8ed718e8c1201fe879fb9.tar.gz |
MFp4 //depot/projects/usb@160930
Change the roothub exec functions to take the usb request and data pointers
directly rather than placing them on the parent bus struct.
Submitted by: Hans Petter Selasky
Diffstat (limited to 'sys/dev/usb/controller/at91dci.c')
-rw-r--r-- | sys/dev/usb/controller/at91dci.c | 90 |
1 files changed, 48 insertions, 42 deletions
diff --git a/sys/dev/usb/controller/at91dci.c b/sys/dev/usb/controller/at91dci.c index ade0c2a..0dfb4fe 100644 --- a/sys/dev/usb/controller/at91dci.c +++ b/sys/dev/usb/controller/at91dci.c @@ -1744,28 +1744,32 @@ USB_MAKE_STRING_DESC(STRING_LANG, at91dci_langtab); USB_MAKE_STRING_DESC(STRING_VENDOR, at91dci_vendor); USB_MAKE_STRING_DESC(STRING_PRODUCT, at91dci_product); -static void -at91dci_roothub_exec(struct usb2_bus *bus) +static usb2_error_t +at91dci_roothub_exec(struct usb2_device *udev, + struct usb2_device_request *req, const void **pptr, uint16_t *plength) { - struct at91dci_softc *sc = AT9100_DCI_BUS2SC(bus); - struct usb2_sw_transfer *std = &sc->sc_bus.roothub_req; + struct at91dci_softc *sc = AT9100_DCI_BUS2SC(udev->bus); + const void *ptr; + uint16_t len; uint16_t value; uint16_t index; + usb2_error_t err; USB_BUS_LOCK_ASSERT(&sc->sc_bus, MA_OWNED); /* buffer reset */ - std->ptr = USB_ADD_BYTES(&sc->sc_hub_temp, 0); - std->len = 0; + ptr = (const void *)&sc->sc_hub_temp; + len = 0; + err = 0; - value = UGETW(std->req.wValue); - index = UGETW(std->req.wIndex); + value = UGETW(req->wValue); + index = UGETW(req->wIndex); /* demultiplex the control request */ - switch (std->req.bmRequestType) { + switch (req->bmRequestType) { case UT_READ_DEVICE: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_GET_DESCRIPTOR: goto tr_handle_get_descriptor; case UR_GET_CONFIG: @@ -1778,7 +1782,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_WRITE_DEVICE: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_SET_ADDRESS: goto tr_handle_set_address; case UR_SET_CONFIG: @@ -1794,9 +1798,9 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_WRITE_ENDPOINT: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_CLEAR_FEATURE: - switch (UGETW(std->req.wValue)) { + switch (UGETW(req->wValue)) { case UF_ENDPOINT_HALT: goto tr_handle_clear_halt; case UF_DEVICE_REMOTE_WAKEUP: @@ -1806,7 +1810,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) } break; case UR_SET_FEATURE: - switch (UGETW(std->req.wValue)) { + switch (UGETW(req->wValue)) { case UF_ENDPOINT_HALT: goto tr_handle_set_halt; case UF_DEVICE_REMOTE_WAKEUP: @@ -1823,7 +1827,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_READ_ENDPOINT: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_GET_STATUS: goto tr_handle_get_ep_status; default: @@ -1832,7 +1836,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_WRITE_INTERFACE: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_SET_INTERFACE: goto tr_handle_set_interface; case UR_CLEAR_FEATURE: @@ -1844,7 +1848,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_READ_INTERFACE: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_GET_INTERFACE: goto tr_handle_get_interface; case UR_GET_STATUS: @@ -1865,7 +1869,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_WRITE_CLASS_DEVICE: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_CLEAR_FEATURE: goto tr_valid; case UR_SET_DESCRIPTOR: @@ -1877,7 +1881,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_WRITE_CLASS_OTHER: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_CLEAR_FEATURE: goto tr_handle_clear_port_feature; case UR_SET_FEATURE: @@ -1893,7 +1897,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_READ_CLASS_OTHER: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_GET_TT_STATE: goto tr_handle_get_tt_state; case UR_GET_STATUS: @@ -1904,7 +1908,7 @@ at91dci_roothub_exec(struct usb2_bus *bus) break; case UT_READ_CLASS_DEVICE: - switch (std->req.bRequest) { + switch (req->bRequest) { case UR_GET_DESCRIPTOR: goto tr_handle_get_class_descriptor; case UR_GET_STATUS: @@ -1925,31 +1929,31 @@ tr_handle_get_descriptor: if (value & 0xff) { goto tr_stalled; } - std->len = sizeof(at91dci_devd); - std->ptr = USB_ADD_BYTES(&at91dci_devd, 0); + len = sizeof(at91dci_devd); + ptr = (const void *)&at91dci_devd; goto tr_valid; case UDESC_CONFIG: if (value & 0xff) { goto tr_stalled; } - std->len = sizeof(at91dci_confd); - std->ptr = USB_ADD_BYTES(&at91dci_confd, 0); + len = sizeof(at91dci_confd); + ptr = (const void *)&at91dci_confd; goto tr_valid; case UDESC_STRING: switch (value & 0xff) { case 0: /* Language table */ - std->len = sizeof(at91dci_langtab); - std->ptr = USB_ADD_BYTES(&at91dci_langtab, 0); + len = sizeof(at91dci_langtab); + ptr = (const void *)&at91dci_langtab; goto tr_valid; case 1: /* Vendor */ - std->len = sizeof(at91dci_vendor); - std->ptr = USB_ADD_BYTES(&at91dci_vendor, 0); + len = sizeof(at91dci_vendor); + ptr = (const void *)&at91dci_vendor; goto tr_valid; case 2: /* Product */ - std->len = sizeof(at91dci_product); - std->ptr = USB_ADD_BYTES(&at91dci_product, 0); + len = sizeof(at91dci_product); + ptr = (const void *)&at91dci_product; goto tr_valid; default: break; @@ -1961,12 +1965,12 @@ tr_handle_get_descriptor: goto tr_stalled; tr_handle_get_config: - std->len = 1; + len = 1; sc->sc_hub_temp.wValue[0] = sc->sc_conf; goto tr_valid; tr_handle_get_status: - std->len = 2; + len = 2; USETW(sc->sc_hub_temp.wValue, UDS_SELF_POWERED); goto tr_valid; @@ -1985,7 +1989,7 @@ tr_handle_set_config: goto tr_valid; tr_handle_get_interface: - std->len = 1; + len = 1; sc->sc_hub_temp.wValue[0] = 0; goto tr_valid; @@ -1993,7 +1997,7 @@ tr_handle_get_tt_state: tr_handle_get_class_status: tr_handle_get_iface_status: tr_handle_get_ep_status: - std->len = 2; + len = 2; USETW(sc->sc_hub_temp.wValue, 0); goto tr_valid; @@ -2038,7 +2042,7 @@ tr_handle_clear_port_feature: sc->sc_flags.change_suspend = 0; break; default: - std->err = USB_ERR_IOERROR; + err = USB_ERR_IOERROR; goto done; } goto tr_valid; @@ -2063,7 +2067,7 @@ tr_handle_set_port_feature: sc->sc_flags.port_powered = 1; break; default: - std->err = USB_ERR_IOERROR; + err = USB_ERR_IOERROR; goto done; } goto tr_valid; @@ -2117,22 +2121,24 @@ tr_handle_get_port_status: value |= UPS_C_SUSPEND; } USETW(sc->sc_hub_temp.ps.wPortChange, value); - std->len = sizeof(sc->sc_hub_temp.ps); + len = sizeof(sc->sc_hub_temp.ps); goto tr_valid; tr_handle_get_class_descriptor: if (value & 0xFF) { goto tr_stalled; } - std->ptr = USB_ADD_BYTES(&at91dci_hubd, 0); - std->len = sizeof(at91dci_hubd); + ptr = (const void *)&at91dci_hubd; + len = sizeof(at91dci_hubd); goto tr_valid; tr_stalled: - std->err = USB_ERR_STALLED; + err = USB_ERR_STALLED; tr_valid: done: - return; + *plength = len; + *pptr = ptr; + return (err); } static void |