aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/usb/usb_request.c
diff options
context:
space:
mode:
authorAndrew Thompson <thompsa@FreeBSD.org>2009-04-05 18:19:19 +0000
committerAndrew Thompson <thompsa@FreeBSD.org>2009-04-05 18:19:19 +0000
commit7efaaa9a91de291dbc124bc88d9f99219c260dc9 (patch)
treee725c0e7a7d9dcbcc17ec52658513e67f3f548e9 /sys/dev/usb/usb_request.c
parentab32485fd9548c571868db5319a81f2a2a036c7f (diff)
downloadsrc-7efaaa9a91de291dbc124bc88d9f99219c260dc9.tar.gz
src-7efaaa9a91de291dbc124bc88d9f99219c260dc9.zip
MFp4 //depot/projects/usb@159811
First patch in a series of memory save patches. Submitted by: Hans Petter Selasky
Notes
Notes: svn path=/head/; revision=190727
Diffstat (limited to 'sys/dev/usb/usb_request.c')
-rw-r--r--sys/dev/usb/usb_request.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/sys/dev/usb/usb_request.c b/sys/dev/usb/usb_request.c
index 37e276176793..78671eaece5c 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: