#define EndpointOutRequest \
((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 */
/* GetBusState and SetHubDescriptor are optional, omitted */
#define ClearHubFeature (0x2000 | USB_REQ_CLEAR_FEATURE)
* this request for iso endpoints, which can't halt!
*/
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);
/* don't un-halt or force to DATA0 except on success */
if (dev->ep[tmp].is_in)
goto stall;
}
- /* endpoint halt */
- if (ctrl.wValue != 0)
+ if (ctrl.wValue != USB_ENDPOINT_HALT)
goto stall;
if (tmp)
goku_clear_halt(&dev->ep[tmp]);
/* hw handles device features */
if (u.r.bRequestType != USB_RECIP_ENDPOINT)
goto delegate;
- if (u.r.wValue != 0 /* HALT feature */
+ if (u.r.wValue != USB_ENDPOINT_HALT
|| u.r.wLength != 0)
goto do_stall;
if ((e = get_ep_by_addr (dev, u.r.wIndex)) == 0)
/* hw handles device features */
if (u.r.bRequestType != USB_RECIP_ENDPOINT)
goto delegate;
- if (u.r.wValue != 0 /* HALT feature */
+ if (u.r.wValue != USB_ENDPOINT_HALT
|| u.r.wLength != 0)
goto do_stall;
if ((e = get_ep_by_addr (dev, u.r.wIndex)) == 0)
/* set halt (protocol test only), verify it worked */
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);
if (retval < 0) {
dbg ("ep %02x couldn't set halt, %d", ep, retval);
endp |= USB_DIR_IN;
result = usb_stor_control_msg(us, us->send_ctrl_pipe,
- USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT, 0,
- endp, NULL, 0, 3*HZ);
+ USB_REQ_CLEAR_FEATURE, USB_RECIP_ENDPOINT,
+ USB_ENDPOINT_HALT, endp,
+ NULL, 0, 3*HZ);
/* reset the toggles and endpoint flags */
usb_endpoint_running(us->pusb_dev, usb_pipeendpoint(pipe),
#define USB_REQ_SET_INTERFACE 0x0B
#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