[coreboot] New patch to review for coreboot: aad56a1 libpayload: Add clear_feature() function to USB framework

Nico Huber (nico.huber@secunet.com) gerrit at coreboot.org
Thu May 31 15:41:36 CEST 2012


Nico Huber (nico.huber at secunet.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1079

-gerrit

commit aad56a1666c97ec6c78e4e191b134c0ac4216361
Author: Nico Huber <nico.huber at secunet.com>
Date:   Mon May 21 16:19:05 2012 +0200

    libpayload: Add clear_feature() function to USB framework
    
    This function will be used by the USB hub driver.
    
    Change-Id: I4d1d2e94f4442cbb636ae989e8ffd543181c4357
    Signed-off-by: Nico Huber <nico.huber at secunet.com>
---
 payloads/libpayload/drivers/usb/usb.c |   25 ++++++++++++++++---------
 payloads/libpayload/include/usb/usb.h |    1 +
 2 files changed, 17 insertions(+), 9 deletions(-)

diff --git a/payloads/libpayload/drivers/usb/usb.c b/payloads/libpayload/drivers/usb/usb.c
index 1f21e6a..1e8f248 100644
--- a/payloads/libpayload/drivers/usb/usb.c
+++ b/payloads/libpayload/drivers/usb/usb.c
@@ -205,22 +205,29 @@ set_configuration (usbdev_t *dev)
 	dev->controller->control (dev, OUT, sizeof (dr), &dr, 0, 0);
 }
 
-int
-clear_stall (endpoint_t *ep)
+void
+clear_feature (usbdev_t *dev, int endp, int feature, int rtype)
 {
-	usbdev_t *dev = ep->dev;
-	int endp = ep->endpoint;
 	dev_req_t dr;
 
-	dr.bmRequestType = 0;
-	if (endp != 0) {
-		dr.req_recp = endp_recp;
-	}
+	dr.bmRequestType = rtype;
+	dr.data_dir = host_to_device;
 	dr.bRequest = CLEAR_FEATURE;
-	dr.wValue = ENDPOINT_HALT;
+	dr.wValue = feature;
 	dr.wIndex = endp;
 	dr.wLength = 0;
 	dev->controller->control (dev, OUT, sizeof (dr), &dr, 0, 0);
+}
+
+int
+clear_stall (endpoint_t *ep)
+{
+	usbdev_t *dev = ep->dev;
+	int endp = ep->endpoint;
+	int rtype = gen_bmRequestType (host_to_device, standard_type,
+					endp ? endp_recp : dev_recp);
+
+	clear_feature (dev, endp, ENDPOINT_HALT, rtype);
 	ep->toggle = 0;
 	return 0;
 }
diff --git a/payloads/libpayload/include/usb/usb.h b/payloads/libpayload/include/usb/usb.h
index e38aa78..05ced49 100644
--- a/payloads/libpayload/include/usb/usb.h
+++ b/payloads/libpayload/include/usb/usb.h
@@ -215,6 +215,7 @@ void init_device_entry (hci_t *controller, int num);
 
 void set_feature (usbdev_t *dev, int endp, int feature, int rtype);
 void get_status (usbdev_t *dev, int endp, int rtype, int len, void *data);
+void clear_feature (usbdev_t *dev, int endp, int feature, int rtype);
 int clear_stall (endpoint_t *ep);
 
 void usb_nop_init (usbdev_t *dev);




More information about the coreboot mailing list