svn commit: r225469 - in head/sys: dev/usb dev/usb/quirk sys
Robert Watson
rwatson at FreeBSD.org
Sun Sep 11 21:47:04 UTC 2011
On Sat, 10 Sep 2011, Hans Petter Selasky wrote:
> Refactor auto-quirk solution so that we break as few external
> drivers as possible.
>
> PR: usb/160299
> Approved by: re (kib)
> Suggested by: rwatson
Thanks, much appreciated!
Robert
> MFC after: 0 days
>
> Modified:
> head/sys/dev/usb/quirk/usb_quirk.c
> head/sys/dev/usb/usb_device.c
> head/sys/dev/usb/usb_dynamic.c
> head/sys/dev/usb/usb_dynamic.h
> head/sys/dev/usb/usbdi.h
> head/sys/sys/param.h
>
> Modified: head/sys/dev/usb/quirk/usb_quirk.c
> ==============================================================================
> --- head/sys/dev/usb/quirk/usb_quirk.c Sat Sep 10 12:36:11 2011 (r225468)
> +++ head/sys/dev/usb/quirk/usb_quirk.c Sat Sep 10 15:55:36 2011 (r225469)
> @@ -588,7 +588,7 @@ usb_test_quirk_by_info(const struct usbd
> }
> mtx_unlock(&usb_quirk_mtx);
> done:
> - return (usb_test_quirk_w(info, quirk));
> + return (0); /* no quirk match */
> }
>
> static struct usb_quirk_entry *
>
> Modified: head/sys/dev/usb/usb_device.c
> ==============================================================================
> --- head/sys/dev/usb/usb_device.c Sat Sep 10 12:36:11 2011 (r225468)
> +++ head/sys/dev/usb/usb_device.c Sat Sep 10 15:55:36 2011 (r225469)
> @@ -1239,8 +1239,6 @@ static void
> usb_init_attach_arg(struct usb_device *udev,
> struct usb_attach_arg *uaa)
> {
> - uint8_t x;
> -
> memset(uaa, 0, sizeof(*uaa));
>
> uaa->device = udev;
> @@ -1256,9 +1254,6 @@ usb_init_attach_arg(struct usb_device *u
> uaa->info.bDeviceProtocol = udev->ddesc.bDeviceProtocol;
> uaa->info.bConfigIndex = udev->curr_config_index;
> uaa->info.bConfigNum = udev->curr_config_no;
> -
> - for (x = 0; x != USB_MAX_AUTO_QUIRK; x++)
> - uaa->info.autoQuirk[x] = udev->autoQuirk[x];
> }
>
> /*------------------------------------------------------------------------*
> @@ -2389,8 +2384,22 @@ uint8_t
> usb_test_quirk(const struct usb_attach_arg *uaa, uint16_t quirk)
> {
> uint8_t found;
> + uint8_t x;
> +
> + if (quirk == UQ_NONE)
> + return (0);
> +
> + /* search the automatic per device quirks first */
> +
> + for (x = 0; x != USB_MAX_AUTO_QUIRK; x++) {
> + if (uaa->device->autoQuirk[x] == quirk)
> + return (1);
> + }
> +
> + /* search global quirk table, if any */
>
> found = (usb_test_quirk_p) (&uaa->info, quirk);
> +
> return (found);
> }
>
> @@ -2723,7 +2732,8 @@ usbd_add_dynamic_quirk(struct usb_device
> uint8_t x;
>
> for (x = 0; x != USB_MAX_AUTO_QUIRK; x++) {
> - if (udev->autoQuirk[x] == 0) {
> + if (udev->autoQuirk[x] == 0 ||
> + udev->autoQuirk[x] == quirk) {
> udev->autoQuirk[x] = quirk;
> return (0); /* success */
> }
>
> Modified: head/sys/dev/usb/usb_dynamic.c
> ==============================================================================
> --- head/sys/dev/usb/usb_dynamic.c Sat Sep 10 12:36:11 2011 (r225468)
> +++ head/sys/dev/usb/usb_dynamic.c Sat Sep 10 15:55:36 2011 (r225469)
> @@ -50,12 +50,12 @@
> #include <dev/usb/usb_process.h>
> #include <dev/usb/usb_device.h>
> #include <dev/usb/usb_dynamic.h>
> -#include <dev/usb/quirk/usb_quirk.h>
>
> /* function prototypes */
> static usb_handle_req_t usb_temp_get_desc_w;
> static usb_temp_setup_by_index_t usb_temp_setup_by_index_w;
> static usb_temp_unsetup_t usb_temp_unsetup_w;
> +static usb_test_quirk_t usb_test_quirk_w;
> static usb_quirk_ioctl_t usb_quirk_ioctl_w;
>
> /* global variables */
> @@ -72,19 +72,9 @@ usb_temp_setup_by_index_w(struct usb_dev
> return (USB_ERR_INVAL);
> }
>
> -uint8_t
> +static uint8_t
> usb_test_quirk_w(const struct usbd_lookup_info *info, uint16_t quirk)
> {
> - uint8_t x;
> -
> - if (quirk == UQ_NONE)
> - return (0); /* no match */
> -
> - for (x = 0; x != USB_MAX_AUTO_QUIRK; x++) {
> - if (info->autoQuirk[x] == quirk)
> - return (1); /* match */
> - }
> -
> return (0); /* no match */
> }
>
>
> Modified: head/sys/dev/usb/usb_dynamic.h
> ==============================================================================
> --- head/sys/dev/usb/usb_dynamic.h Sat Sep 10 12:36:11 2011 (r225468)
> +++ head/sys/dev/usb/usb_dynamic.h Sat Sep 10 15:55:36 2011 (r225469)
> @@ -57,6 +57,5 @@ extern devclass_t usb_devclass_ptr;
> void usb_temp_unload(void *);
> void usb_quirk_unload(void *);
> void usb_bus_unload(void *);
> -usb_test_quirk_t usb_test_quirk_w;
>
> #endif /* _USB_DYNAMIC_H_ */
>
> Modified: head/sys/dev/usb/usbdi.h
> ==============================================================================
> --- head/sys/dev/usb/usbdi.h Sat Sep 10 12:36:11 2011 (r225468)
> +++ head/sys/dev/usb/usbdi.h Sat Sep 10 15:55:36 2011 (r225469)
> @@ -353,7 +353,6 @@ struct usbd_lookup_info {
> uint16_t idVendor;
> uint16_t idProduct;
> uint16_t bcdDevice;
> - uint16_t autoQuirk[USB_MAX_AUTO_QUIRK];
> uint8_t bDeviceClass;
> uint8_t bDeviceSubClass;
> uint8_t bDeviceProtocol;
>
> Modified: head/sys/sys/param.h
> ==============================================================================
> --- head/sys/sys/param.h Sat Sep 10 12:36:11 2011 (r225468)
> +++ head/sys/sys/param.h Sat Sep 10 15:55:36 2011 (r225469)
> @@ -58,7 +58,7 @@
> * in the range 5 to 9.
> */
> #undef __FreeBSD_version
> -#define __FreeBSD_version 900043 /* Master, propagated to newvers */
> +#define __FreeBSD_version 900044 /* Master, propagated to newvers */
>
> #ifdef _KERNEL
> #define P_OSREL_SIGSEGV 700004
>
More information about the svn-src-all
mailing list