Commit 69dc1c65 authored by David Brownell's avatar David Brownell Committed by Greg Kroah-Hartman

[PATCH] USB: define USB feature bit indices

This patch provides standard symbols for the various USB
device and endpoint feature bits, so that drivers can
use symbolic names for them.  It also changes the code
relating to endpoint halts so it uses those symbols.
parent 0c2b45d0
...@@ -275,10 +275,6 @@ extern int usb_set_address(struct usb_device *dev); ...@@ -275,10 +275,6 @@ extern int usb_set_address(struct usb_device *dev);
#define EndpointOutRequest \ #define EndpointOutRequest \
((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8) ((USB_DIR_OUT|USB_TYPE_STANDARD|USB_RECIP_INTERFACE)<<8)
/* table 9.6 standard features */
#define DEVICE_REMOTE_WAKEUP 1
#define ENDPOINT_HALT 0
/* class requests from the USB 2.0 hub spec, table 11-15 */ /* class requests from the USB 2.0 hub spec, table 11-15 */
/* GetBusState and SetHubDescriptor are optional, omitted */ /* GetBusState and SetHubDescriptor are optional, omitted */
#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE) #define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE)
......
...@@ -722,7 +722,8 @@ int usb_clear_halt(struct usb_device *dev, int pipe) ...@@ -722,7 +722,8 @@ int usb_clear_halt(struct usb_device *dev, int pipe)
* this request for iso endpoints, which can't halt! * this request for iso endpoints, which can't halt!
*/ */
result = usb_control_msg(dev, usb_sndctrlpipe(dev, 0), result = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, 0, endp, NULL, 0, USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT,
USB_ENDPOINT_HALT, endp, NULL, 0,
HZ * USB_CTRL_SET_TIMEOUT); HZ * USB_CTRL_SET_TIMEOUT);
/* don't un-halt or force to DATA0 except on success */ /* don't un-halt or force to DATA0 except on success */
......
...@@ -1562,8 +1562,7 @@ static void ep0_setup(struct goku_udc *dev) ...@@ -1562,8 +1562,7 @@ static void ep0_setup(struct goku_udc *dev)
if (dev->ep[tmp].is_in) if (dev->ep[tmp].is_in)
goto stall; goto stall;
} }
/* endpoint halt */ if (ctrl.wValue != USB_ENDPOINT_HALT)
if (ctrl.wValue != 0)
goto stall; goto stall;
if (tmp) if (tmp)
goku_clear_halt(&dev->ep[tmp]); goku_clear_halt(&dev->ep[tmp]);
......
...@@ -2401,7 +2401,7 @@ static void handle_stat0_irqs (struct net2280 *dev, u32 stat) ...@@ -2401,7 +2401,7 @@ static void handle_stat0_irqs (struct net2280 *dev, u32 stat)
/* hw handles device features */ /* hw handles device features */
if (u.r.bRequestType != USB_RECIP_ENDPOINT) if (u.r.bRequestType != USB_RECIP_ENDPOINT)
goto delegate; goto delegate;
if (u.r.wValue != 0 /* HALT feature */ if (u.r.wValue != USB_ENDPOINT_HALT
|| u.r.wLength != 0) || u.r.wLength != 0)
goto do_stall; goto do_stall;
if ((e = get_ep_by_addr (dev, u.r.wIndex)) == 0) if ((e = get_ep_by_addr (dev, u.r.wIndex)) == 0)
...@@ -2418,7 +2418,7 @@ static void handle_stat0_irqs (struct net2280 *dev, u32 stat) ...@@ -2418,7 +2418,7 @@ static void handle_stat0_irqs (struct net2280 *dev, u32 stat)
/* hw handles device features */ /* hw handles device features */
if (u.r.bRequestType != USB_RECIP_ENDPOINT) if (u.r.bRequestType != USB_RECIP_ENDPOINT)
goto delegate; goto delegate;
if (u.r.wValue != 0 /* HALT feature */ if (u.r.wValue != USB_ENDPOINT_HALT
|| u.r.wLength != 0) || u.r.wLength != 0)
goto do_stall; goto do_stall;
if ((e = get_ep_by_addr (dev, u.r.wIndex)) == 0) if ((e = get_ep_by_addr (dev, u.r.wIndex)) == 0)
......
...@@ -1169,7 +1169,8 @@ static int test_halt (int ep, struct urb *urb) ...@@ -1169,7 +1169,8 @@ static int test_halt (int ep, struct urb *urb)
/* set halt (protocol test only), verify it worked */ /* set halt (protocol test only), verify it worked */
retval = usb_control_msg (urb->dev, usb_sndctrlpipe (urb->dev, 0), retval = usb_control_msg (urb->dev, usb_sndctrlpipe (urb->dev, 0),
USB_REQ_SET_FEATURE, USB_RECIP_ENDPOINT, 0, ep, USB_REQ_SET_FEATURE, USB_RECIP_ENDPOINT,
USB_ENDPOINT_HALT, ep,
NULL, 0, HZ * USB_CTRL_SET_TIMEOUT); NULL, 0, HZ * USB_CTRL_SET_TIMEOUT);
if (retval < 0) { if (retval < 0) {
dbg ("ep %02x couldn't set halt, %d", ep, retval); dbg ("ep %02x couldn't set halt, %d", ep, retval);
......
...@@ -256,8 +256,9 @@ int usb_stor_clear_halt(struct us_data *us, unsigned int pipe) ...@@ -256,8 +256,9 @@ int usb_stor_clear_halt(struct us_data *us, unsigned int pipe)
endp |= USB_DIR_IN; endp |= USB_DIR_IN;
result = usb_stor_control_msg(us, us->send_ctrl_pipe, result = usb_stor_control_msg(us, us->send_ctrl_pipe,
USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, 0, USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT,
endp, NULL, 0, 3*HZ); USB_ENDPOINT_HALT, endp,
NULL, 0, 3*HZ);
/* reset the toggles and endpoint flags */ /* reset the toggles and endpoint flags */
usb_endpoint_running(us->pusb_dev, usb_pipeendpoint(pipe), usb_endpoint_running(us->pusb_dev, usb_pipeendpoint(pipe),
......
...@@ -68,6 +68,20 @@ ...@@ -68,6 +68,20 @@
#define USB_REQ_SET_INTERFACE 0x0B #define USB_REQ_SET_INTERFACE 0x0B
#define USB_REQ_SYNCH_FRAME 0x0C #define USB_REQ_SYNCH_FRAME 0x0C
/*
* USB feature flags are written using USB_REQ_{CLEAR,SET}_FEATURE, and
* are read as a bit array returned by USB_REQ_GET_STATUS. (So there
* are at most sixteen features of each type.)
*/
#define USB_DEVICE_SELF_POWERED 0 /* (read only) */
#define USB_DEVICE_REMOTE_WAKEUP 1 /* dev may initiate wakeup */
#define USB_DEVICE_TEST_MODE 2 /* (high speed only) */
#define USB_DEVICE_B_HNP_ENABLE 3 /* dev may initiate HNP */
#define USB_DEVICE_A_HNP_SUPPORT 4 /* RH port supports HNP */
#define USB_DEVICE_A_ALT_HNP_SUPPORT 5 /* other RH port does */
#define USB_ENDPOINT_HALT 0 /* IN/OUT will STALL */
/** /**
* struct usb_ctrlrequest - SETUP data for a USB device control request * struct usb_ctrlrequest - SETUP data for a USB device control request
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment