mirror of
https://github.com/opnsense/src.git
synced 2026-05-28 04:12:45 -04:00
MFp4 //depot/projects/usb@159811
First patch in a series of memory save patches. Submitted by: Hans Petter Selasky
This commit is contained in:
parent
ab32485fd9
commit
7efaaa9a91
3 changed files with 48 additions and 8 deletions
|
|
@ -504,8 +504,9 @@ usb2_free_iface_data(struct usb2_device *udev)
|
|||
}
|
||||
|
||||
/* free "cdesc" after "ifaces", if any */
|
||||
if (udev->cdesc) {
|
||||
free(udev->cdesc, M_USB);
|
||||
if (udev->cdesc != NULL) {
|
||||
if (udev->flags.usb2_mode != USB_MODE_DEVICE)
|
||||
free(udev->cdesc, M_USB);
|
||||
udev->cdesc = NULL;
|
||||
}
|
||||
/* set unconfigured state */
|
||||
|
|
@ -569,8 +570,14 @@ usb2_set_config_index(struct usb2_device *udev, uint8_t index)
|
|||
goto done;
|
||||
}
|
||||
/* get the full config descriptor */
|
||||
err = usb2_req_get_config_desc_full(udev,
|
||||
NULL, &cdp, M_USB, index);
|
||||
if (udev->flags.usb2_mode == USB_MODE_DEVICE) {
|
||||
/* save some memory */
|
||||
err = usb2_req_get_config_desc_ptr(udev, &cdp, index);
|
||||
} else {
|
||||
/* normal request */
|
||||
err = usb2_req_get_config_desc_full(udev,
|
||||
NULL, &cdp, M_USB, index);
|
||||
}
|
||||
if (err) {
|
||||
goto done;
|
||||
}
|
||||
|
|
@ -1713,10 +1720,9 @@ repeat_set_config:
|
|||
udev->ugen_symlink = usb2_alloc_symlink(udev->ugen_name);
|
||||
|
||||
/* Announce device */
|
||||
#if USB_HAVE_STRINGS
|
||||
printf("%s: <%s> at %s\n", udev->ugen_name, udev->manufacturer,
|
||||
device_get_nameunit(udev->bus->bdev));
|
||||
#endif
|
||||
|
||||
usb2_notify_addq("+", udev);
|
||||
#endif
|
||||
done:
|
||||
|
|
@ -1851,10 +1857,8 @@ usb2_free_device(struct usb2_device *udev)
|
|||
#if USB_HAVE_UGEN
|
||||
usb2_notify_addq("-", udev);
|
||||
|
||||
#if USB_HAVE_STRINGS
|
||||
printf("%s: <%s> at %s (disconnected)\n", udev->ugen_name,
|
||||
udev->manufacturer, device_get_nameunit(bus->bdev));
|
||||
#endif
|
||||
|
||||
/* Destroy UGEN symlink, if any */
|
||||
if (udev->ugen_symlink) {
|
||||
|
|
|
|||
|
|
@ -832,6 +832,40 @@ usb2_req_get_string_desc(struct usb2_device *udev, struct mtx *mtx, void *sdesc,
|
|||
UDESC_STRING, string_index, 0));
|
||||
}
|
||||
|
||||
/*------------------------------------------------------------------------*
|
||||
* 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
|
||||
*
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@ usb2_error_t usb2_req_get_alt_interface_no(struct usb2_device *udev,
|
|||
uint8_t iface_index);
|
||||
usb2_error_t usb2_req_get_config(struct usb2_device *udev, struct mtx *mtx,
|
||||
uint8_t *pconf);
|
||||
usb2_error_t usb2_req_get_config_desc_ptr(struct usb2_device *udev,
|
||||
struct usb2_config_descriptor **ppcd, uint8_t config_index);
|
||||
usb2_error_t usb2_req_get_config_desc(struct usb2_device *udev, struct mtx *mtx,
|
||||
struct usb2_config_descriptor *d, uint8_t conf_index);
|
||||
usb2_error_t usb2_req_get_config_desc_full(struct usb2_device *udev,
|
||||
|
|
|
|||
Loading…
Reference in a new issue