diff options
author | thompsa <thompsa@FreeBSD.org> | 2009-04-05 18:19:19 +0000 |
---|---|---|
committer | thompsa <thompsa@FreeBSD.org> | 2009-04-05 18:19:19 +0000 |
commit | 9471e9cac020daf29d40e96031e8d7583e895541 (patch) | |
tree | e725c0e7a7d9dcbcc17ec52658513e67f3f548e9 /sys/dev/usb/usb_request.c | |
parent | 505f82c775b5b57a2ac270d816ebfdb59678c3cd (diff) | |
download | FreeBSD-src-9471e9cac020daf29d40e96031e8d7583e895541.zip FreeBSD-src-9471e9cac020daf29d40e96031e8d7583e895541.tar.gz |
MFp4 //depot/projects/usb@159811
First patch in a series of memory save patches.
Submitted by: Hans Petter Selasky
Diffstat (limited to 'sys/dev/usb/usb_request.c')
-rw-r--r-- | sys/dev/usb/usb_request.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/sys/dev/usb/usb_request.c b/sys/dev/usb/usb_request.c index 37e2761..78671ea 100644 --- a/sys/dev/usb/usb_request.c +++ b/sys/dev/usb/usb_request.c @@ -833,6 +833,40 @@ usb2_req_get_string_desc(struct usb2_device *udev, struct mtx *mtx, void *sdesc, } /*------------------------------------------------------------------------* + * usb2_req_get_config_desc_ptr + * + * This function is used in device side mode to retrieve the pointer + * to the generated config descriptor. This saves allocating space for + * an additional config descriptor when setting the configuration. + * + * Returns: + * 0: Success + * Else: Failure + *------------------------------------------------------------------------*/ +usb2_error_t +usb2_req_get_config_desc_ptr(struct usb2_device *udev, + struct usb2_config_descriptor **ppcd, uint8_t config_index) +{ + uint16_t len; + + struct usb2_device_request req; + + if (udev->flags.usb2_mode != USB_MODE_DEVICE) + return (USB_ERR_INVAL); + + req.bmRequestType = UT_READ_CLASS_DEVICE; + req.bRequest = UR_GET_DESCRIPTOR; + USETW2(req.wValue, UDESC_CONFIG, config_index); + USETW(req.wIndex, 0); + USETW(req.wLength, 0); + + (usb2_temp_get_desc_p) (udev, &req, + __DECONST(const void **, ppcd), &len); + + return (*ppcd ? USB_ERR_NORMAL_COMPLETION : USB_ERR_INVAL); +} + +/*------------------------------------------------------------------------* * usb2_req_get_config_desc * * Returns: |