PERFORCE change 130484 for review
Hans Petter Selasky
hselasky at FreeBSD.org
Sat Dec 8 03:51:27 PST 2007
http://perforce.freebsd.org/chv.cgi?CH=130484
Change 130484 by hselasky at hselasky_laptop001 on 2007/12/08 11:51:08
This commit relates to USB device side support.
In USB device side mode we allow "usbd_do_request_flags"
to read out the USB descriptors from the USB template
system for sake of convenience. All other requests are
not supported and should yield an error.
Affected files ...
.. //depot/projects/usb/src/sys/dev/usb/usb_subr.h#68 edit
.. //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#63 edit
Differences ...
==== //depot/projects/usb/src/sys/dev/usb/usb_subr.h#68 (text+ko) ====
@@ -116,7 +116,7 @@
typedef void (usbd_std_root_transfer_func_t)(struct usbd_xfer *, struct usbd_std_root_transfer *);
-typedef const uint8_t *(usbd_temp_get_desc_t)(struct usbd_device *udev, uint16_t langid, uint8_t type, uint8_t index);
+typedef void (usbd_temp_get_desc_t)(struct usbd_device *udev, struct mtx *mtx, usb_device_request_t *req, const void **data, uint16_t *pLen);
/* USB modes */
==== //depot/projects/usb/src/sys/dev/usb/usb_transfer.c#63 (text+ko) ====
@@ -2262,6 +2262,7 @@
{
struct usbd_xfer *xfer;
struct usbd_config uc[1];
+ const void *desc;
uint32_t level = 0;
uint32_t start_ticks;
uint32_t delta_ticks;
@@ -2283,6 +2284,24 @@
req->wIndex[1], req->wIndex[0],
req->wLength[1], req->wLength[0]));
+ if (udev->usb_mode == USB_MODE_DEVICE) {
+ PRINTFN(0, ("USB device mode\n"));
+ (udev->usb_temp_get_desc) (udev, mtx, req, &desc, &temp);
+ if (desc == NULL) {
+ return (USBD_INVAL);
+ }
+ if (length > temp) {
+ if (!(flags & USBD_SHORT_XFER_OK)) {
+ return (USBD_SHORT_XFER);
+ }
+ length = temp;
+ }
+ if (actlen) {
+ *actlen = length;
+ }
+ bcopy(desc, data, length);
+ return (0); /* success */
+ }
if (actlen) {
(*actlen) = 0;
}
More information about the p4-projects
mailing list