--- Revision None +++ Revision 376664333234 @@ -0,0 +1,161 @@ +Index: uhidev.c +=================================================================== +RCS file: /cvs/src/sys/dev/usb/uhidev.c,v +retrieving revision 1.37 +diff -u -r1.37 uhidev.c +--- uhidev.c 23 Nov 2009 19:26:54 -0000 1.37 ++++ uhidev.c 20 Mar 2010 13:14:26 -0000 +@@ -119,7 +119,7 @@ + usb_endpoint_descriptor_t *ed; + struct uhidev_attach_arg uha; + struct uhidev *dev; +- int size, nrepid, repid, repsz; ++ int maxinpktsize, size, nrepid, repid, repsz; + int repsizes[256]; + int i; + void *desc; +@@ -139,6 +139,7 @@ + (void)usbd_set_protocol(iface, 1); + #endif + ++ maxinpktsize = 0; + sc->sc_iep_addr = sc->sc_oep_addr = -1; + for (i = 0; i < id->bNumEndpoints; i++) { + ed = usbd_interface2endpoint_descriptor(iface, i); +@@ -160,6 +161,7 @@ + + if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_IN && + (ed->bmAttributes & UE_XFERTYPE) == UE_INTERRUPT) { ++ maxinpktsize = UGETW(ed->wMaxPacketSize); + sc->sc_iep_addr = ed->bEndpointAddress; + } else if (UE_GET_DIR(ed->bEndpointAddress) == UE_DIR_OUT && + (ed->bmAttributes & UE_XFERTYPE) == UE_INTERRUPT) { +@@ -243,9 +245,11 @@ + printf("%s: no memory\n", sc->sc_dev.dv_xname); + return; + } +- sc->sc_nrepid = nrepid; +- sc->sc_isize = 0; + ++ /* Just request max packet size for the interrupt pipe */ ++ sc->sc_isize = maxinpktsize; ++ sc->sc_nrepid = nrepid; ++ + usbd_add_drv_event(USB_EVENT_DRIVER_ATTACH, sc->sc_udev, + &sc->sc_dev); + +@@ -253,13 +257,9 @@ + repsz = hid_report_size(desc, size, hid_input, repid); + DPRINTF(("uhidev_match: repid=%d, repsz=%d\n", repid, repsz)); + repsizes[repid] = repsz; +- if (repsz > 0) { +- if (repsz > sc->sc_isize) +- sc->sc_isize = repsz; +- } + } +- sc->sc_isize += nrepid != 1; /* space for report ID */ +- DPRINTF(("uhidev_attach: isize=%d\n", sc->sc_isize)); ++ ++ DPRINTF(("uhidev_attach: isize=%d\n", sc->sc_isize)); + + uha.parent = sc; + for (repid = 0; repid < nrepid; repid++) { +Index: ums.c +=================================================================== +RCS file: /cvs/src/sys/dev/usb/ums.c,v +retrieving revision 1.31 +diff -u -r1.31 ums.c +--- ums.c 13 Oct 2009 19:33:19 -0000 1.31 ++++ ums.c 20 Mar 2010 13:14:26 -0000 +@@ -312,6 +312,17 @@ + sc->sc_loc_btn[2].pos = 2; + } + ++ if (uha->uaa->vendor == USB_VENDOR_MICROSOFT && ++ ((uha->uaa->product == USB_PRODUCT_MICROSOFT_24GHZ_XCVR10) || ++ (uha->uaa->product == USB_PRODUCT_MICROSOFT_24GHZ_XCVR20) || ++ (uha->uaa->product == USB_PRODUCT_MICROSOFT_24GHZ_XCVR50))) { ++ if ((sc->flags & UMS_Z) && sc->sc_loc_z.pos == 0) ++ sc->sc_loc_z.pos = 24; ++ if ((sc->flags & UMS_W) && sc->sc_loc_w.pos == 0) ++ sc->sc_loc_w.pos = sc->sc_loc_z.pos + 8; ++ } ++ ++ + printf(": %d button%s", + sc->nbuttons, sc->nbuttons <= 1 ? "" : "s"); + switch (sc->flags & (UMS_Z | UMS_W)) { +Index: usbdevs +=================================================================== +RCS file: /cvs/src/sys/dev/usb/usbdevs,v +retrieving revision 1.480 +diff -u -r1.480 usbdevs +--- usbdevs 14 Mar 2010 22:44:56 -0000 1.480 ++++ usbdevs 20 Mar 2010 13:14:27 -0000 +@@ -2550,6 +2550,10 @@ + product MICROSOFT WLNOTEBOOK3 0x00d2 Wireless Optical Mouse 3000 (Model 1049) + product MICROSOFT WLNOTEBOOK2 0x00e1 Wireless Optical Mouse 3000 (Model 1056) + product MICROSOFT XBOX360 0x0292 XBOX 360 WLAN ++product MICROSOFT 24GHZ_XCVR10 0x071d 2.4GHz Transceiver V1.0 ++product MICROSOFT 24GHZ_XCVR20 0x071f 2.4GHz Transceiver V2.0 ++product MICROSOFT 24GHZ_XCVR50 0x074f 2.4GHz Transceiver V5.0 ++ + + /* Microtech products */ + product MICROTECH SCSIDB25 0x0004 SCSI-DB25 +Index: usbdevs.h +=================================================================== +RCS file: /cvs/src/sys/dev/usb/usbdevs.h,v +retrieving revision 1.490 +diff -u -r1.490 usbdevs.h +--- usbdevs.h 14 Mar 2010 22:45:47 -0000 1.490 ++++ usbdevs.h 20 Mar 2010 13:14:29 -0000 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: usbdevs.h,v 1.490 2010/03/14 22:45:47 mk Exp $ */ ++/* $OpenBSD$ */ + + /* + * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +@@ -2557,6 +2557,10 @@ + #define USB_PRODUCT_MICROSOFT_WLNOTEBOOK3 0x00d2 /* Wireless Optical Mouse 3000 (Model 1049) */ + #define USB_PRODUCT_MICROSOFT_WLNOTEBOOK2 0x00e1 /* Wireless Optical Mouse 3000 (Model 1056) */ + #define USB_PRODUCT_MICROSOFT_XBOX360 0x0292 /* XBOX 360 WLAN */ ++#define USB_PRODUCT_MICROSOFT_24GHZ_XCVR10 0x071d /* 2.4GHz Transceiver V1.0 */ ++#define USB_PRODUCT_MICROSOFT_24GHZ_XCVR20 0x071f /* 2.4GHz Transceiver V2.0 */ ++#define USB_PRODUCT_MICROSOFT_24GHZ_XCVR50 0x074f /* 2.4GHz Transceiver V5.0 */ ++ + + /* Microtech products */ + #define USB_PRODUCT_MICROTECH_SCSIDB25 0x0004 /* SCSI-DB25 */ +Index: usbdevs_data.h +=================================================================== +RCS file: /cvs/src/sys/dev/usb/usbdevs_data.h,v +retrieving revision 1.484 +diff -u -r1.484 usbdevs_data.h +--- usbdevs_data.h 14 Mar 2010 22:45:47 -0000 1.484 ++++ usbdevs_data.h 20 Mar 2010 13:14:31 -0000 +@@ -1,4 +1,4 @@ +-/* $OpenBSD: usbdevs_data.h,v 1.484 2010/03/14 22:45:47 mk Exp $ */ ++/* $OpenBSD$ */ + + /* + * THIS FILE IS AUTOMATICALLY GENERATED. DO NOT EDIT. +@@ -5952,6 +5952,18 @@ + { + USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_XBOX360, + "XBOX 360 WLAN", ++ }, ++ { ++ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_24GHZ_XCVR10, ++ "2.4GHz Transceiver V1.0", ++ }, ++ { ++ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_24GHZ_XCVR20, ++ "2.4GHz Transceiver V2.0", ++ }, ++ { ++ USB_VENDOR_MICROSOFT, USB_PRODUCT_MICROSOFT_24GHZ_XCVR50, ++ "2.4GHz Transceiver V5.0", + }, + { + USB_VENDOR_MICROTECH, USB_PRODUCT_MICROTECH_SCSIDB25,