From owner-p4-projects@FreeBSD.ORG Thu Jun 11 20:04:39 2009 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 00A6110656FF; Thu, 11 Jun 2009 20:04:39 +0000 (UTC) Delivered-To: perforce@FreeBSD.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id B169910656F1 for ; Thu, 11 Jun 2009 20:04:38 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (repoman.freebsd.org [IPv6:2001:4f8:fff6::29]) by mx1.freebsd.org (Postfix) with ESMTP id 9F3ED8FC2B for ; Thu, 11 Jun 2009 20:04:38 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.14.3/8.14.3) with ESMTP id n5BK4cvX023363 for ; Thu, 11 Jun 2009 20:04:38 GMT (envelope-from hselasky@FreeBSD.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.14.3/8.14.3/Submit) id n5BK4c0I023361 for perforce@freebsd.org; Thu, 11 Jun 2009 20:04:38 GMT (envelope-from hselasky@FreeBSD.org) Date: Thu, 11 Jun 2009 20:04:38 GMT Message-Id: <200906112004.n5BK4c0I023361@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to hselasky@FreeBSD.org using -f From: Hans Petter Selasky To: Perforce Change Reviews Cc: Subject: PERFORCE change 164141 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 11 Jun 2009 20:04:40 -0000 http://perforce.freebsd.org/chv.cgi?CH=164141 Change 164141 by hselasky@hselasky_laptop001 on 2009/06/11 20:03:57 USB input: - add support for Yubikey - reported by Jeremy Faulkner - improve mouse probe routine Affected files ... .. //depot/projects/usb/src/sys/dev/usb/input/ukbd.c#18 edit .. //depot/projects/usb/src/sys/dev/usb/input/ums.c#16 edit Differences ... ==== //depot/projects/usb/src/sys/dev/usb/input/ukbd.c#18 (text+ko) ==== @@ -659,6 +659,9 @@ { keyboard_switch_t *sw = kbd_get_switch(UKBD_DRIVER_NAME); struct usb_attach_arg *uaa = device_get_ivars(dev); + void *d_ptr; + int error; + uint16_t d_len; DPRINTFN(11, "\n"); @@ -668,16 +671,35 @@ if (uaa->usb_mode != USB_MODE_HOST) { return (ENXIO); } - /* check that the keyboard speaks the boot protocol: */ - if ((uaa->info.bInterfaceClass == UICLASS_HID) - && (uaa->info.bInterfaceSubClass == UISUBCLASS_BOOT) - && (uaa->info.bInterfaceProtocol == UPROTO_BOOT_KEYBOARD)) { + + if (uaa->info.bInterfaceClass != UICLASS_HID) + return (ENXIO); + + if ((uaa->info.bInterfaceSubClass == UISUBCLASS_BOOT) && + (uaa->info.bInterfaceProtocol == UPROTO_BOOT_KEYBOARD)) { if (usb2_test_quirk(uaa, UQ_KBD_IGNORE)) return (ENXIO); else return (0); } - return (ENXIO); + + error = usb2_req_get_hid_desc(uaa->device, NULL, + &d_ptr, &d_len, M_TEMP, uaa->info.bIfaceIndex); + + if (error) + return (ENXIO); + + if (hid_is_collection(d_ptr, d_len, + HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_KEYBOARD))) { + if (usb2_test_quirk(uaa, UQ_KBD_IGNORE)) + error = ENXIO; + else + error = 0; + } else + error = ENXIO; + + free(d_ptr, M_TEMP); + return (error); } static int ==== //depot/projects/usb/src/sys/dev/usb/input/ums.c#16 (text+ko) ==== @@ -332,7 +332,6 @@ ums_probe(device_t dev) { struct usb_attach_arg *uaa = device_get_ivars(dev); - struct usb_interface_descriptor *id; void *d_ptr; int error; uint16_t d_len; @@ -342,11 +341,12 @@ if (uaa->usb_mode != USB_MODE_HOST) return (ENXIO); - id = usb2_get_interface_descriptor(uaa->iface); + if (uaa->info.bInterfaceClass != UICLASS_HID) + return (ENXIO); - if ((id == NULL) || - (id->bInterfaceClass != UICLASS_HID)) - return (ENXIO); + if ((uaa->info.bInterfaceSubClass == UISUBCLASS_BOOT) && + (uaa->info.bInterfaceProtocol == UIPROTO_MOUSE)) + return (0); error = usb2_req_get_hid_desc(uaa->device, NULL, &d_ptr, &d_len, M_TEMP, uaa->info.bIfaceIndex); @@ -357,9 +357,6 @@ if (hid_is_collection(d_ptr, d_len, HID_USAGE2(HUP_GENERIC_DESKTOP, HUG_MOUSE))) error = 0; - else if ((id->bInterfaceSubClass == UISUBCLASS_BOOT) && - (id->bInterfaceProtocol == UIPROTO_MOUSE)) - error = 0; else error = ENXIO;