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 <[email protected]>.
@@ -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 *);