Module Name: src Committed By: maxv Date: Sat Feb 8 07:53:24 UTC 2020
Modified Files: src/sys/dev/usb: u3g.c uhmodem.c usbdi.c usbdi_util.c usbdi_util.h Log Message: Introduce usbd_clear_endpoint_feature(), and dedup. To generate a diff of this commit: cvs rdiff -u -r1.38 -r1.39 src/sys/dev/usb/u3g.c cvs rdiff -u -r1.20 -r1.21 src/sys/dev/usb/uhmodem.c cvs rdiff -u -r1.187 -r1.188 src/sys/dev/usb/usbdi.c cvs rdiff -u -r1.75 -r1.76 src/sys/dev/usb/usbdi_util.c cvs rdiff -u -r1.49 -r1.50 src/sys/dev/usb/usbdi_util.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/usb/u3g.c diff -u src/sys/dev/usb/u3g.c:1.38 src/sys/dev/usb/u3g.c:1.39 --- src/sys/dev/usb/u3g.c:1.38 Tue Jan 7 06:42:26 2020 +++ src/sys/dev/usb/u3g.c Sat Feb 8 07:53:23 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: u3g.c,v 1.38 2020/01/07 06:42:26 maxv Exp $ */ +/* $NetBSD: u3g.c,v 1.39 2020/02/08 07:53:23 maxv Exp $ */ /*- * Copyright (c) 2009 The NetBSD Foundation, Inc. @@ -50,7 +50,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: u3g.c,v 1.38 2020/01/07 06:42:26 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: u3g.c,v 1.39 2020/02/08 07:53:23 maxv Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -571,7 +571,6 @@ static int u3g_open(void *arg, int portno) { struct u3g_softc *sc = arg; - usb_device_request_t req; usb_endpoint_descriptor_t *ed; usb_interface_descriptor_t *id; struct usbd_interface *ih; @@ -596,13 +595,8 @@ u3g_open(void *arg, int portno) if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_IN && UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK && nin++ == portno) { - /* Issue ENDPOINT_HALT request */ - req.bmRequestType = UT_WRITE_ENDPOINT; - req.bRequest = UR_CLEAR_FEATURE; - USETW(req.wValue, UF_ENDPOINT_HALT); - USETW(req.wIndex, ed->bEndpointAddress); - USETW(req.wLength, 0); - err = usbd_do_request(sc->sc_udev, &req, 0); + err = usbd_clear_endpoint_feature(sc->sc_udev, + ed->bEndpointAddress, UF_ENDPOINT_HALT); if (err) return EIO; } Index: src/sys/dev/usb/uhmodem.c diff -u src/sys/dev/usb/uhmodem.c:1.20 src/sys/dev/usb/uhmodem.c:1.21 --- src/sys/dev/usb/uhmodem.c:1.20 Mon May 27 03:08:13 2019 +++ src/sys/dev/usb/uhmodem.c Sat Feb 8 07:53:23 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: uhmodem.c,v 1.20 2019/05/27 03:08:13 maya Exp $ */ +/* $NetBSD: uhmodem.c,v 1.21 2020/02/08 07:53:23 maxv Exp $ */ /* * Copyright (c) 2008 Yojiro UO <y...@nui.org>. @@ -71,7 +71,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: uhmodem.c,v 1.20 2019/05/27 03:08:13 maya Exp $"); +__KERNEL_RCSID(0, "$NetBSD: uhmodem.c,v 1.21 2020/02/08 07:53:23 maxv Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -506,7 +506,6 @@ e220_modechange_request(struct usbd_devi static usbd_status uhmodem_endpointhalt(struct ubsa_softc *sc, int iface) { - usb_device_request_t req; usb_endpoint_descriptor_t *ed; usb_interface_descriptor_t *id; usbd_status err; @@ -521,13 +520,8 @@ uhmodem_endpointhalt(struct ubsa_softc * return EIO; if (UE_GET_XFERTYPE(ed->bmAttributes) == UE_BULK) { - /* issue ENDPOINT_HALT request */ - req.bmRequestType = UT_WRITE_ENDPOINT; - req.bRequest = UR_CLEAR_FEATURE; - USETW(req.wValue, UF_ENDPOINT_HALT); - USETW(req.wIndex, ed->bEndpointAddress); - USETW(req.wLength, 0); - err = usbd_do_request(sc->sc_udev, &req, 0); + err = usbd_clear_endpoint_feature(sc->sc_udev, + ed->bEndpointAddress, UF_ENDPOINT_HALT); if (err) { DPRINTF(("%s: ENDPOINT_HALT to EP:%d fail\n", __func__, ed->bEndpointAddress)); Index: src/sys/dev/usb/usbdi.c diff -u src/sys/dev/usb/usbdi.c:1.187 src/sys/dev/usb/usbdi.c:1.188 --- src/sys/dev/usb/usbdi.c:1.187 Sat Feb 8 07:38:17 2020 +++ src/sys/dev/usb/usbdi.c Sat Feb 8 07:53:23 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi.c,v 1.187 2020/02/08 07:38:17 maxv Exp $ */ +/* $NetBSD: usbdi.c,v 1.188 2020/02/08 07:53:23 maxv Exp $ */ /* * Copyright (c) 1998, 2012, 2015 The NetBSD Foundation, Inc. @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.187 2020/02/08 07:38:17 maxv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usbdi.c,v 1.188 2020/02/08 07:53:23 maxv Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -677,7 +677,6 @@ usbd_status usbd_clear_endpoint_stall(struct usbd_pipe *pipe) { struct usbd_device *dev = pipe->up_dev; - usb_device_request_t req; usbd_status err; USBHIST_FUNC(); USBHIST_CALLED(usbdebug); @@ -688,12 +687,8 @@ usbd_clear_endpoint_stall(struct usbd_pi */ pipe->up_methods->upm_cleartoggle(pipe); - req.bmRequestType = UT_WRITE_ENDPOINT; - req.bRequest = UR_CLEAR_FEATURE; - USETW(req.wValue, UF_ENDPOINT_HALT); - USETW(req.wIndex, pipe->up_endpoint->ue_edesc->bEndpointAddress); - USETW(req.wLength, 0); - err = usbd_do_request(dev, &req, 0); + err = usbd_clear_endpoint_feature(dev, + pipe->up_endpoint->ue_edesc->bEndpointAddress, UF_ENDPOINT_HALT); #if 0 XXX should we do this? if (!err) { @@ -709,16 +704,11 @@ usbd_clear_endpoint_stall_task(void *arg { struct usbd_pipe *pipe = arg; struct usbd_device *dev = pipe->up_dev; - usb_device_request_t req; pipe->up_methods->upm_cleartoggle(pipe); - req.bmRequestType = UT_WRITE_ENDPOINT; - req.bRequest = UR_CLEAR_FEATURE; - USETW(req.wValue, UF_ENDPOINT_HALT); - USETW(req.wIndex, pipe->up_endpoint->ue_edesc->bEndpointAddress); - USETW(req.wLength, 0); - (void)usbd_do_request(dev, &req, 0); + (void)usbd_clear_endpoint_feature(dev, + pipe->up_endpoint->ue_edesc->bEndpointAddress, UF_ENDPOINT_HALT); } void Index: src/sys/dev/usb/usbdi_util.c diff -u src/sys/dev/usb/usbdi_util.c:1.75 src/sys/dev/usb/usbdi_util.c:1.76 --- src/sys/dev/usb/usbdi_util.c:1.75 Wed Aug 21 10:48:37 2019 +++ src/sys/dev/usb/usbdi_util.c Sat Feb 8 07:53:23 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi_util.c,v 1.75 2019/08/21 10:48:37 mrg Exp $ */ +/* $NetBSD: usbdi_util.c,v 1.76 2020/02/08 07:53:23 maxv Exp $ */ /* * Copyright (c) 1998, 2012 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.75 2019/08/21 10:48:37 mrg Exp $"); +__KERNEL_RCSID(0, "$NetBSD: usbdi_util.c,v 1.76 2020/02/08 07:53:23 maxv Exp $"); #ifdef _KERNEL_OPT #include "opt_usb.h" @@ -330,6 +330,20 @@ usbd_set_port_u2_timeout(struct usbd_dev } usbd_status +usbd_clear_endpoint_feature(struct usbd_device *dev, int epaddr, int sel) +{ + USBHIST_FUNC(); + usb_device_request_t req; + + req.bmRequestType = UT_WRITE_ENDPOINT; + req.bRequest = UR_CLEAR_FEATURE; + USETW(req.wValue, sel); + USETW(req.wIndex, epaddr); + USETW(req.wLength, 0); + return usbd_do_request(dev, &req, 0); +} + +usbd_status usbd_get_protocol(struct usbd_interface *iface, uint8_t *report) { usb_interface_descriptor_t *id = usbd_get_interface_descriptor(iface); Index: src/sys/dev/usb/usbdi_util.h diff -u src/sys/dev/usb/usbdi_util.h:1.49 src/sys/dev/usb/usbdi_util.h:1.50 --- src/sys/dev/usb/usbdi_util.h:1.49 Thu Feb 7 13:20:41 2019 +++ src/sys/dev/usb/usbdi_util.h Sat Feb 8 07:53:23 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: usbdi_util.h,v 1.49 2019/02/07 13:20:41 skrll Exp $ */ +/* $NetBSD: usbdi_util.h,v 1.50 2020/02/08 07:53:23 maxv Exp $ */ /* * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc. @@ -58,6 +58,7 @@ usbd_status usbd_set_port_feature(struct usbd_status usbd_clear_port_feature(struct usbd_device *, int, int); usbd_status usbd_set_port_u1_timeout(struct usbd_device *, int, int); usbd_status usbd_set_port_u2_timeout(struct usbd_device *, int, int); +usbd_status usbd_clear_endpoint_feature(struct usbd_device *, int, int); usbd_status usbd_get_device_status(struct usbd_device *, usb_status_t *); usbd_status usbd_get_hub_status(struct usbd_device *, usb_hub_status_t *); usbd_status usbd_get_protocol(struct usbd_interface *, uint8_t *);