Revision 616238646138 () - Diff

Link to this snippet: https://friendpaste.com/1Gv579D3tQ8fSZo9jqX0g7
Embed:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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
+