1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#include <linux/module.h>
16#include <linux/slab.h>
17#include <linux/init.h>
18#include <linux/kernel.h>
19#include <linux/list.h>
20#include <linux/mm.h>
21#include <linux/mutex.h>
22#include <linux/spinlock.h>
23#include <asm/unaligned.h>
24#include <asm/byteorder.h>
25#include <linux/input.h>
26#include <linux/wait.h>
27#include <linux/workqueue.h>
28#include <linux/string.h>
29
30#include <linux/usb.h>
31
32#include <linux/hid.h>
33#include <linux/hiddev.h>
34#include <linux/hid-debug.h>
35#include <linux/hidraw.h>
36#include "usbhid.h"
37
38
39
40
41
42#define DRIVER_DESC "USB HID core driver"
43
44
45
46
47
48static unsigned int hid_mousepoll_interval;
49module_param_named(mousepoll, hid_mousepoll_interval, uint, 0644);
50MODULE_PARM_DESC(mousepoll, "Polling interval of mice");
51
52static unsigned int hid_jspoll_interval;
53module_param_named(jspoll, hid_jspoll_interval, uint, 0644);
54MODULE_PARM_DESC(jspoll, "Polling interval of joysticks");
55
56static unsigned int hid_kbpoll_interval;
57module_param_named(kbpoll, hid_kbpoll_interval, uint, 0644);
58MODULE_PARM_DESC(kbpoll, "Polling interval of keyboards");
59
60static unsigned int ignoreled;
61module_param_named(ignoreled, ignoreled, uint, 0644);
62MODULE_PARM_DESC(ignoreled, "Autosuspend with active leds");
63
64
65static char *quirks_param[MAX_USBHID_BOOT_QUIRKS];
66module_param_array_named(quirks, quirks_param, charp, NULL, 0444);
67MODULE_PARM_DESC(quirks, "Add/modify USB HID quirks by specifying "
68 " quirks=vendorID:productID:quirks"
69 " where vendorID, productID, and quirks are all in"
70 " 0x-prefixed hex");
71
72
73
74static void hid_io_error(struct hid_device *hid);
75static int hid_submit_out(struct hid_device *hid);
76static int hid_submit_ctrl(struct hid_device *hid);
77static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid);
78
79
80static int hid_start_in(struct hid_device *hid)
81{
82 unsigned long flags;
83 int rc = 0;
84 struct usbhid_device *usbhid = hid->driver_data;
85
86 spin_lock_irqsave(&usbhid->lock, flags);
87 if (test_bit(HID_IN_POLLING, &usbhid->iofl) &&
88 !test_bit(HID_DISCONNECTED, &usbhid->iofl) &&
89 !test_bit(HID_SUSPENDED, &usbhid->iofl) &&
90 !test_and_set_bit(HID_IN_RUNNING, &usbhid->iofl)) {
91 rc = usb_submit_urb(usbhid->urbin, GFP_ATOMIC);
92 if (rc != 0) {
93 clear_bit(HID_IN_RUNNING, &usbhid->iofl);
94 if (rc == -ENOSPC)
95 set_bit(HID_NO_BANDWIDTH, &usbhid->iofl);
96 } else {
97 clear_bit(HID_NO_BANDWIDTH, &usbhid->iofl);
98 }
99 }
100 spin_unlock_irqrestore(&usbhid->lock, flags);
101 return rc;
102}
103
104
105static void hid_retry_timeout(struct timer_list *t)
106{
107 struct usbhid_device *usbhid = from_timer(usbhid, t, io_retry);
108 struct hid_device *hid = usbhid->hid;
109
110 dev_dbg(&usbhid->intf->dev, "retrying intr urb\n");
111 if (hid_start_in(hid))
112 hid_io_error(hid);
113}
114
115
116static void hid_reset(struct work_struct *work)
117{
118 struct usbhid_device *usbhid =
119 container_of(work, struct usbhid_device, reset_work);
120 struct hid_device *hid = usbhid->hid;
121 int rc;
122
123 if (test_bit(HID_CLEAR_HALT, &usbhid->iofl)) {
124 dev_dbg(&usbhid->intf->dev, "clear halt\n");
125 rc = usb_clear_halt(hid_to_usb_dev(hid), usbhid->urbin->pipe);
126 clear_bit(HID_CLEAR_HALT, &usbhid->iofl);
127 if (rc == 0) {
128 hid_start_in(hid);
129 } else {
130 dev_dbg(&usbhid->intf->dev,
131 "clear-halt failed: %d\n", rc);
132 set_bit(HID_RESET_PENDING, &usbhid->iofl);
133 }
134 }
135
136 if (test_bit(HID_RESET_PENDING, &usbhid->iofl)) {
137 dev_dbg(&usbhid->intf->dev, "resetting device\n");
138 usb_queue_reset_device(usbhid->intf);
139 }
140}
141
142
143static void hid_io_error(struct hid_device *hid)
144{
145 unsigned long flags;
146 struct usbhid_device *usbhid = hid->driver_data;
147
148 spin_lock_irqsave(&usbhid->lock, flags);
149
150
151 if (test_bit(HID_DISCONNECTED, &usbhid->iofl))
152 goto done;
153
154
155
156 if (time_after(jiffies, usbhid->stop_retry + HZ/2))
157 usbhid->retry_delay = 0;
158
159
160 if (usbhid->retry_delay == 0) {
161 usbhid->retry_delay = 13;
162 usbhid->stop_retry = jiffies + msecs_to_jiffies(1000);
163 } else if (usbhid->retry_delay < 100)
164 usbhid->retry_delay *= 2;
165
166 if (time_after(jiffies, usbhid->stop_retry)) {
167
168
169 if (!test_bit(HID_NO_BANDWIDTH, &usbhid->iofl)
170 && !test_and_set_bit(HID_RESET_PENDING, &usbhid->iofl)) {
171
172 schedule_work(&usbhid->reset_work);
173 goto done;
174 }
175 }
176
177 mod_timer(&usbhid->io_retry,
178 jiffies + msecs_to_jiffies(usbhid->retry_delay));
179done:
180 spin_unlock_irqrestore(&usbhid->lock, flags);
181}
182
183static void usbhid_mark_busy(struct usbhid_device *usbhid)
184{
185 struct usb_interface *intf = usbhid->intf;
186
187 usb_mark_last_busy(interface_to_usbdev(intf));
188}
189
190static int usbhid_restart_out_queue(struct usbhid_device *usbhid)
191{
192 struct hid_device *hid = usb_get_intfdata(usbhid->intf);
193 int kicked;
194 int r;
195
196 if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) ||
197 test_bit(HID_SUSPENDED, &usbhid->iofl))
198 return 0;
199
200 if ((kicked = (usbhid->outhead != usbhid->outtail))) {
201 hid_dbg(hid, "Kicking head %d tail %d", usbhid->outhead, usbhid->outtail);
202
203
204 r = usb_autopm_get_interface_async(usbhid->intf);
205 if (r < 0)
206 return r;
207
208
209
210
211
212 if (test_bit(HID_SUSPENDED, &usbhid->iofl)) {
213 usb_autopm_put_interface_no_suspend(usbhid->intf);
214 return r;
215 }
216
217
218 set_bit(HID_OUT_RUNNING, &usbhid->iofl);
219 if (hid_submit_out(hid)) {
220 clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
221 usb_autopm_put_interface_async(usbhid->intf);
222 }
223 wake_up(&usbhid->wait);
224 }
225 return kicked;
226}
227
228static int usbhid_restart_ctrl_queue(struct usbhid_device *usbhid)
229{
230 struct hid_device *hid = usb_get_intfdata(usbhid->intf);
231 int kicked;
232 int r;
233
234 WARN_ON(hid == NULL);
235 if (!hid || test_bit(HID_RESET_PENDING, &usbhid->iofl) ||
236 test_bit(HID_SUSPENDED, &usbhid->iofl))
237 return 0;
238
239 if ((kicked = (usbhid->ctrlhead != usbhid->ctrltail))) {
240 hid_dbg(hid, "Kicking head %d tail %d", usbhid->ctrlhead, usbhid->ctrltail);
241
242
243 r = usb_autopm_get_interface_async(usbhid->intf);
244 if (r < 0)
245 return r;
246
247
248
249
250
251 if (test_bit(HID_SUSPENDED, &usbhid->iofl)) {
252 usb_autopm_put_interface_no_suspend(usbhid->intf);
253 return r;
254 }
255
256
257 set_bit(HID_CTRL_RUNNING, &usbhid->iofl);
258 if (hid_submit_ctrl(hid)) {
259 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
260 usb_autopm_put_interface_async(usbhid->intf);
261 }
262 wake_up(&usbhid->wait);
263 }
264 return kicked;
265}
266
267
268
269
270
271static void hid_irq_in(struct urb *urb)
272{
273 struct hid_device *hid = urb->context;
274 struct usbhid_device *usbhid = hid->driver_data;
275 int status;
276
277 switch (urb->status) {
278 case 0:
279 usbhid->retry_delay = 0;
280 if (!test_bit(HID_OPENED, &usbhid->iofl))
281 break;
282 usbhid_mark_busy(usbhid);
283 if (!test_bit(HID_RESUME_RUNNING, &usbhid->iofl)) {
284 hid_input_report(urb->context, HID_INPUT_REPORT,
285 urb->transfer_buffer,
286 urb->actual_length, 1);
287
288
289
290
291
292 if (hid_check_keys_pressed(hid))
293 set_bit(HID_KEYS_PRESSED, &usbhid->iofl);
294 else
295 clear_bit(HID_KEYS_PRESSED, &usbhid->iofl);
296 }
297 break;
298 case -EPIPE:
299 usbhid_mark_busy(usbhid);
300 clear_bit(HID_IN_RUNNING, &usbhid->iofl);
301 set_bit(HID_CLEAR_HALT, &usbhid->iofl);
302 schedule_work(&usbhid->reset_work);
303 return;
304 case -ECONNRESET:
305 case -ENOENT:
306 case -ESHUTDOWN:
307 clear_bit(HID_IN_RUNNING, &usbhid->iofl);
308 return;
309 case -EILSEQ:
310 case -EPROTO:
311 case -ETIME:
312 case -ETIMEDOUT:
313 usbhid_mark_busy(usbhid);
314 clear_bit(HID_IN_RUNNING, &usbhid->iofl);
315 hid_io_error(hid);
316 return;
317 default:
318 hid_warn(urb->dev, "input irq status %d received\n",
319 urb->status);
320 }
321
322 status = usb_submit_urb(urb, GFP_ATOMIC);
323 if (status) {
324 clear_bit(HID_IN_RUNNING, &usbhid->iofl);
325 if (status != -EPERM) {
326 hid_err(hid, "can't resubmit intr, %s-%s/input%d, status %d\n",
327 hid_to_usb_dev(hid)->bus->bus_name,
328 hid_to_usb_dev(hid)->devpath,
329 usbhid->ifnum, status);
330 hid_io_error(hid);
331 }
332 }
333}
334
335static int hid_submit_out(struct hid_device *hid)
336{
337 struct hid_report *report;
338 char *raw_report;
339 struct usbhid_device *usbhid = hid->driver_data;
340 int r;
341
342 report = usbhid->out[usbhid->outtail].report;
343 raw_report = usbhid->out[usbhid->outtail].raw_report;
344
345 usbhid->urbout->transfer_buffer_length = hid_report_len(report);
346 usbhid->urbout->dev = hid_to_usb_dev(hid);
347 if (raw_report) {
348 memcpy(usbhid->outbuf, raw_report,
349 usbhid->urbout->transfer_buffer_length);
350 kfree(raw_report);
351 usbhid->out[usbhid->outtail].raw_report = NULL;
352 }
353
354 dbg_hid("submitting out urb\n");
355
356 r = usb_submit_urb(usbhid->urbout, GFP_ATOMIC);
357 if (r < 0) {
358 hid_err(hid, "usb_submit_urb(out) failed: %d\n", r);
359 return r;
360 }
361 usbhid->last_out = jiffies;
362 return 0;
363}
364
365static int hid_submit_ctrl(struct hid_device *hid)
366{
367 struct hid_report *report;
368 unsigned char dir;
369 char *raw_report;
370 int len, r;
371 struct usbhid_device *usbhid = hid->driver_data;
372
373 report = usbhid->ctrl[usbhid->ctrltail].report;
374 raw_report = usbhid->ctrl[usbhid->ctrltail].raw_report;
375 dir = usbhid->ctrl[usbhid->ctrltail].dir;
376
377 len = hid_report_len(report);
378 if (dir == USB_DIR_OUT) {
379 usbhid->urbctrl->pipe = usb_sndctrlpipe(hid_to_usb_dev(hid), 0);
380 usbhid->urbctrl->transfer_buffer_length = len;
381 if (raw_report) {
382 memcpy(usbhid->ctrlbuf, raw_report, len);
383 kfree(raw_report);
384 usbhid->ctrl[usbhid->ctrltail].raw_report = NULL;
385 }
386 } else {
387 int maxpacket, padlen;
388
389 usbhid->urbctrl->pipe = usb_rcvctrlpipe(hid_to_usb_dev(hid), 0);
390 maxpacket = usb_maxpacket(hid_to_usb_dev(hid),
391 usbhid->urbctrl->pipe, 0);
392 if (maxpacket > 0) {
393 padlen = DIV_ROUND_UP(len, maxpacket);
394 padlen *= maxpacket;
395 if (padlen > usbhid->bufsize)
396 padlen = usbhid->bufsize;
397 } else
398 padlen = 0;
399 usbhid->urbctrl->transfer_buffer_length = padlen;
400 }
401 usbhid->urbctrl->dev = hid_to_usb_dev(hid);
402
403 usbhid->cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE | dir;
404 usbhid->cr->bRequest = (dir == USB_DIR_OUT) ? HID_REQ_SET_REPORT :
405 HID_REQ_GET_REPORT;
406 usbhid->cr->wValue = cpu_to_le16(((report->type + 1) << 8) |
407 report->id);
408 usbhid->cr->wIndex = cpu_to_le16(usbhid->ifnum);
409 usbhid->cr->wLength = cpu_to_le16(len);
410
411 dbg_hid("submitting ctrl urb: %s wValue=0x%04x wIndex=0x%04x wLength=%u\n",
412 usbhid->cr->bRequest == HID_REQ_SET_REPORT ? "Set_Report" :
413 "Get_Report",
414 usbhid->cr->wValue, usbhid->cr->wIndex, usbhid->cr->wLength);
415
416 r = usb_submit_urb(usbhid->urbctrl, GFP_ATOMIC);
417 if (r < 0) {
418 hid_err(hid, "usb_submit_urb(ctrl) failed: %d\n", r);
419 return r;
420 }
421 usbhid->last_ctrl = jiffies;
422 return 0;
423}
424
425
426
427
428
429static void hid_irq_out(struct urb *urb)
430{
431 struct hid_device *hid = urb->context;
432 struct usbhid_device *usbhid = hid->driver_data;
433 unsigned long flags;
434 int unplug = 0;
435
436 switch (urb->status) {
437 case 0:
438 break;
439 case -ESHUTDOWN:
440 unplug = 1;
441 break;
442 case -EILSEQ:
443 case -EPROTO:
444 case -ECONNRESET:
445 case -ENOENT:
446 break;
447 default:
448 hid_warn(urb->dev, "output irq status %d received\n",
449 urb->status);
450 }
451
452 spin_lock_irqsave(&usbhid->lock, flags);
453
454 if (unplug) {
455 usbhid->outtail = usbhid->outhead;
456 } else {
457 usbhid->outtail = (usbhid->outtail + 1) & (HID_OUTPUT_FIFO_SIZE - 1);
458
459 if (usbhid->outhead != usbhid->outtail &&
460 hid_submit_out(hid) == 0) {
461
462 spin_unlock_irqrestore(&usbhid->lock, flags);
463 return;
464 }
465 }
466
467 clear_bit(HID_OUT_RUNNING, &usbhid->iofl);
468 spin_unlock_irqrestore(&usbhid->lock, flags);
469 usb_autopm_put_interface_async(usbhid->intf);
470 wake_up(&usbhid->wait);
471}
472
473
474
475
476
477static void hid_ctrl(struct urb *urb)
478{
479 struct hid_device *hid = urb->context;
480 struct usbhid_device *usbhid = hid->driver_data;
481 unsigned long flags;
482 int unplug = 0, status = urb->status;
483
484 switch (status) {
485 case 0:
486 if (usbhid->ctrl[usbhid->ctrltail].dir == USB_DIR_IN)
487 hid_input_report(urb->context,
488 usbhid->ctrl[usbhid->ctrltail].report->type,
489 urb->transfer_buffer, urb->actual_length, 0);
490 break;
491 case -ESHUTDOWN:
492 unplug = 1;
493 break;
494 case -EILSEQ:
495 case -EPROTO:
496 case -ECONNRESET:
497 case -ENOENT:
498 case -EPIPE:
499 break;
500 default:
501 hid_warn(urb->dev, "ctrl urb status %d received\n", status);
502 }
503
504 spin_lock_irqsave(&usbhid->lock, flags);
505
506 if (unplug) {
507 usbhid->ctrltail = usbhid->ctrlhead;
508 } else {
509 usbhid->ctrltail = (usbhid->ctrltail + 1) & (HID_CONTROL_FIFO_SIZE - 1);
510
511 if (usbhid->ctrlhead != usbhid->ctrltail &&
512 hid_submit_ctrl(hid) == 0) {
513
514 spin_unlock_irqrestore(&usbhid->lock, flags);
515 return;
516 }
517 }
518
519 clear_bit(HID_CTRL_RUNNING, &usbhid->iofl);
520 spin_unlock_irqrestore(&usbhid->lock, flags);
521 usb_autopm_put_interface_async(usbhid->intf);
522 wake_up(&usbhid->wait);
523}
524
525static void __usbhid_submit_report(struct hid_device *hid, struct hid_report *report,
526 unsigned char dir)
527{
528 int head;
529 struct usbhid_device *usbhid = hid->driver_data;
530
531 if (((hid->quirks & HID_QUIRK_NOGET) && dir == USB_DIR_IN) ||
532 test_bit(HID_DISCONNECTED, &usbhid->iofl))
533 return;
534
535 if (usbhid->urbout && dir == USB_DIR_OUT && report->type == HID_OUTPUT_REPORT) {
536 if ((head = (usbhid->outhead + 1) & (HID_OUTPUT_FIFO_SIZE - 1)) == usbhid->outtail) {
537 hid_warn(hid, "output queue full\n");
538 return;
539 }
540
541 usbhid->out[usbhid->outhead].raw_report = hid_alloc_report_buf(report, GFP_ATOMIC);
542 if (!usbhid->out[usbhid->outhead].raw_report) {
543 hid_warn(hid, "output queueing failed\n");
544 return;
545 }
546 hid_output_report(report, usbhid->out[usbhid->outhead].raw_report);
547 usbhid->out[usbhid->outhead].report = report;
548 usbhid->outhead = head;
549
550
551 if (!test_bit(HID_OUT_RUNNING, &usbhid->iofl)) {
552 usbhid_restart_out_queue(usbhid);
553
554
555 } else if (time_after(jiffies, usbhid->last_out + HZ * 5)) {
556
557
558 usb_autopm_get_interface_no_resume(usbhid->intf);
559
560
561
562
563
564
565 usb_block_urb(usbhid->urbout);
566
567
568 spin_unlock(&usbhid->lock);
569
570 usb_unlink_urb(usbhid->urbout);
571 spin_lock(&usbhid->lock);
572 usb_unblock_urb(usbhid->urbout);
573
574
575 if (!test_bit(HID_OUT_RUNNING, &usbhid->iofl))
576 usbhid_restart_out_queue(usbhid);
577
578
579 usb_autopm_put_interface_async(usbhid->intf);
580 }
581 return;
582 }
583
584 if ((head = (usbhid->ctrlhead + 1) & (HID_CONTROL_FIFO_SIZE - 1)) == usbhid->ctrltail) {
585 hid_warn(hid, "control queue full\n");
586 return;
587 }
588
589 if (dir == USB_DIR_OUT) {
590 usbhid->ctrl[usbhid->ctrlhead].raw_report = hid_alloc_report_buf(report, GFP_ATOMIC);
591 if (!usbhid->ctrl[usbhid->ctrlhead].raw_report) {
592 hid_warn(hid, "control queueing failed\n");
593 return;
594 }
595 hid_output_report(report, usbhid->ctrl[usbhid->ctrlhead].raw_report);
596 }
597 usbhid->ctrl[usbhid->ctrlhead].report = report;
598 usbhid->ctrl[usbhid->ctrlhead].dir = dir;
599 usbhid->ctrlhead = head;
600
601
602 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl)) {
603 usbhid_restart_ctrl_queue(usbhid);
604
605
606 } else if (time_after(jiffies, usbhid->last_ctrl + HZ * 5)) {
607
608
609 usb_autopm_get_interface_no_resume(usbhid->intf);
610
611
612
613
614
615
616 usb_block_urb(usbhid->urbctrl);
617
618
619 spin_unlock(&usbhid->lock);
620
621 usb_unlink_urb(usbhid->urbctrl);
622 spin_lock(&usbhid->lock);
623 usb_unblock_urb(usbhid->urbctrl);
624
625
626 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
627 usbhid_restart_ctrl_queue(usbhid);
628
629
630 usb_autopm_put_interface_async(usbhid->intf);
631 }
632}
633
634static void usbhid_submit_report(struct hid_device *hid, struct hid_report *report, unsigned char dir)
635{
636 struct usbhid_device *usbhid = hid->driver_data;
637 unsigned long flags;
638
639 spin_lock_irqsave(&usbhid->lock, flags);
640 __usbhid_submit_report(hid, report, dir);
641 spin_unlock_irqrestore(&usbhid->lock, flags);
642}
643
644static int usbhid_wait_io(struct hid_device *hid)
645{
646 struct usbhid_device *usbhid = hid->driver_data;
647
648 if (!wait_event_timeout(usbhid->wait,
649 (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl) &&
650 !test_bit(HID_OUT_RUNNING, &usbhid->iofl)),
651 10*HZ)) {
652 dbg_hid("timeout waiting for ctrl or out queue to clear\n");
653 return -1;
654 }
655
656 return 0;
657}
658
659static int hid_set_idle(struct usb_device *dev, int ifnum, int report, int idle)
660{
661 return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
662 HID_REQ_SET_IDLE, USB_TYPE_CLASS | USB_RECIP_INTERFACE, (idle << 8) | report,
663 ifnum, NULL, 0, USB_CTRL_SET_TIMEOUT);
664}
665
666static int hid_get_class_descriptor(struct usb_device *dev, int ifnum,
667 unsigned char type, void *buf, int size)
668{
669 int result, retries = 4;
670
671 memset(buf, 0, size);
672
673 do {
674 result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
675 USB_REQ_GET_DESCRIPTOR, USB_RECIP_INTERFACE | USB_DIR_IN,
676 (type << 8), ifnum, buf, size, USB_CTRL_GET_TIMEOUT);
677 retries--;
678 } while (result < size && retries);
679 return result;
680}
681
682static int usbhid_open(struct hid_device *hid)
683{
684 struct usbhid_device *usbhid = hid->driver_data;
685 int res;
686
687 mutex_lock(&usbhid->mutex);
688
689 set_bit(HID_OPENED, &usbhid->iofl);
690
691 if (hid->quirks & HID_QUIRK_ALWAYS_POLL) {
692 res = 0;
693 goto Done;
694 }
695
696 res = usb_autopm_get_interface(usbhid->intf);
697
698 if (res < 0) {
699 clear_bit(HID_OPENED, &usbhid->iofl);
700 res = -EIO;
701 goto Done;
702 }
703
704 usbhid->intf->needs_remote_wakeup = 1;
705
706 set_bit(HID_RESUME_RUNNING, &usbhid->iofl);
707 set_bit(HID_IN_POLLING, &usbhid->iofl);
708
709 res = hid_start_in(hid);
710 if (res) {
711 if (res != -ENOSPC) {
712 hid_io_error(hid);
713 res = 0;
714 } else {
715
716 res = -EBUSY;
717 clear_bit(HID_OPENED, &usbhid->iofl);
718 clear_bit(HID_IN_POLLING, &usbhid->iofl);
719 usbhid->intf->needs_remote_wakeup = 0;
720 }
721 }
722
723 usb_autopm_put_interface(usbhid->intf);
724
725
726
727
728
729
730
731 if (res == 0)
732 msleep(50);
733
734 clear_bit(HID_RESUME_RUNNING, &usbhid->iofl);
735
736 Done:
737 mutex_unlock(&usbhid->mutex);
738 return res;
739}
740
741static void usbhid_close(struct hid_device *hid)
742{
743 struct usbhid_device *usbhid = hid->driver_data;
744
745 mutex_lock(&usbhid->mutex);
746
747
748
749
750
751
752 spin_lock_irq(&usbhid->lock);
753 clear_bit(HID_OPENED, &usbhid->iofl);
754 if (!(hid->quirks & HID_QUIRK_ALWAYS_POLL))
755 clear_bit(HID_IN_POLLING, &usbhid->iofl);
756 spin_unlock_irq(&usbhid->lock);
757
758 if (!(hid->quirks & HID_QUIRK_ALWAYS_POLL)) {
759 hid_cancel_delayed_stuff(usbhid);
760 usb_kill_urb(usbhid->urbin);
761 usbhid->intf->needs_remote_wakeup = 0;
762 }
763
764 mutex_unlock(&usbhid->mutex);
765}
766
767
768
769
770
771void usbhid_init_reports(struct hid_device *hid)
772{
773 struct hid_report *report;
774 struct usbhid_device *usbhid = hid->driver_data;
775 struct hid_report_enum *report_enum;
776 int err, ret;
777
778 report_enum = &hid->report_enum[HID_INPUT_REPORT];
779 list_for_each_entry(report, &report_enum->report_list, list)
780 usbhid_submit_report(hid, report, USB_DIR_IN);
781
782 report_enum = &hid->report_enum[HID_FEATURE_REPORT];
783 list_for_each_entry(report, &report_enum->report_list, list)
784 usbhid_submit_report(hid, report, USB_DIR_IN);
785
786 err = 0;
787 ret = usbhid_wait_io(hid);
788 while (ret) {
789 err |= ret;
790 if (test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
791 usb_kill_urb(usbhid->urbctrl);
792 if (test_bit(HID_OUT_RUNNING, &usbhid->iofl))
793 usb_kill_urb(usbhid->urbout);
794 ret = usbhid_wait_io(hid);
795 }
796
797 if (err)
798 hid_warn(hid, "timeout initializing reports\n");
799}
800
801
802
803
804static int hid_find_field_early(struct hid_device *hid, unsigned int page,
805 unsigned int hid_code, struct hid_field **pfield)
806{
807 struct hid_report *report;
808 struct hid_field *field;
809 struct hid_usage *usage;
810 int i, j;
811
812 list_for_each_entry(report, &hid->report_enum[HID_OUTPUT_REPORT].report_list, list) {
813 for (i = 0; i < report->maxfield; i++) {
814 field = report->field[i];
815 for (j = 0; j < field->maxusage; j++) {
816 usage = &field->usage[j];
817 if ((usage->hid & HID_USAGE_PAGE) == page &&
818 (usage->hid & 0xFFFF) == hid_code) {
819 *pfield = field;
820 return j;
821 }
822 }
823 }
824 }
825 return -1;
826}
827
828static void usbhid_set_leds(struct hid_device *hid)
829{
830 struct hid_field *field;
831 int offset;
832
833 if ((offset = hid_find_field_early(hid, HID_UP_LED, 0x01, &field)) != -1) {
834 hid_set_field(field, offset, 0);
835 usbhid_submit_report(hid, field->report, USB_DIR_OUT);
836 }
837}
838
839
840
841
842static void hid_find_max_report(struct hid_device *hid, unsigned int type,
843 unsigned int *max)
844{
845 struct hid_report *report;
846 unsigned int size;
847
848 list_for_each_entry(report, &hid->report_enum[type].report_list, list) {
849 size = ((report->size - 1) >> 3) + 1 + hid->report_enum[type].numbered;
850 if (*max < size)
851 *max = size;
852 }
853}
854
855static int hid_alloc_buffers(struct usb_device *dev, struct hid_device *hid)
856{
857 struct usbhid_device *usbhid = hid->driver_data;
858
859 usbhid->inbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
860 &usbhid->inbuf_dma);
861 usbhid->outbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
862 &usbhid->outbuf_dma);
863 usbhid->cr = kmalloc(sizeof(*usbhid->cr), GFP_KERNEL);
864 usbhid->ctrlbuf = usb_alloc_coherent(dev, usbhid->bufsize, GFP_KERNEL,
865 &usbhid->ctrlbuf_dma);
866 if (!usbhid->inbuf || !usbhid->outbuf || !usbhid->cr ||
867 !usbhid->ctrlbuf)
868 return -1;
869
870 return 0;
871}
872
873static int usbhid_get_raw_report(struct hid_device *hid,
874 unsigned char report_number, __u8 *buf, size_t count,
875 unsigned char report_type)
876{
877 struct usbhid_device *usbhid = hid->driver_data;
878 struct usb_device *dev = hid_to_usb_dev(hid);
879 struct usb_interface *intf = usbhid->intf;
880 struct usb_host_interface *interface = intf->cur_altsetting;
881 int skipped_report_id = 0;
882 int ret;
883
884
885 buf[0] = report_number;
886 if (report_number == 0x0) {
887
888
889 buf++;
890 count--;
891 skipped_report_id = 1;
892 }
893 ret = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
894 HID_REQ_GET_REPORT,
895 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
896 ((report_type + 1) << 8) | report_number,
897 interface->desc.bInterfaceNumber, buf, count,
898 USB_CTRL_SET_TIMEOUT);
899
900
901 if (ret > 0 && skipped_report_id)
902 ret++;
903
904 return ret;
905}
906
907static int usbhid_set_raw_report(struct hid_device *hid, unsigned int reportnum,
908 __u8 *buf, size_t count, unsigned char rtype)
909{
910 struct usbhid_device *usbhid = hid->driver_data;
911 struct usb_device *dev = hid_to_usb_dev(hid);
912 struct usb_interface *intf = usbhid->intf;
913 struct usb_host_interface *interface = intf->cur_altsetting;
914 int ret, skipped_report_id = 0;
915
916
917 if ((rtype == HID_OUTPUT_REPORT) &&
918 (hid->quirks & HID_QUIRK_SKIP_OUTPUT_REPORT_ID))
919 buf[0] = 0;
920 else
921 buf[0] = reportnum;
922
923 if (buf[0] == 0x0) {
924
925 buf++;
926 count--;
927 skipped_report_id = 1;
928 }
929
930 ret = usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
931 HID_REQ_SET_REPORT,
932 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE,
933 ((rtype + 1) << 8) | reportnum,
934 interface->desc.bInterfaceNumber, buf, count,
935 USB_CTRL_SET_TIMEOUT);
936
937 if (ret > 0 && skipped_report_id)
938 ret++;
939
940 return ret;
941}
942
943static int usbhid_output_report(struct hid_device *hid, __u8 *buf, size_t count)
944{
945 struct usbhid_device *usbhid = hid->driver_data;
946 struct usb_device *dev = hid_to_usb_dev(hid);
947 int actual_length, skipped_report_id = 0, ret;
948
949 if (!usbhid->urbout)
950 return -ENOSYS;
951
952 if (buf[0] == 0x0) {
953
954 buf++;
955 count--;
956 skipped_report_id = 1;
957 }
958
959 ret = usb_interrupt_msg(dev, usbhid->urbout->pipe,
960 buf, count, &actual_length,
961 USB_CTRL_SET_TIMEOUT);
962
963 if (ret == 0) {
964 ret = actual_length;
965
966 if (skipped_report_id)
967 ret++;
968 }
969
970 return ret;
971}
972
973static void hid_free_buffers(struct usb_device *dev, struct hid_device *hid)
974{
975 struct usbhid_device *usbhid = hid->driver_data;
976
977 usb_free_coherent(dev, usbhid->bufsize, usbhid->inbuf, usbhid->inbuf_dma);
978 usb_free_coherent(dev, usbhid->bufsize, usbhid->outbuf, usbhid->outbuf_dma);
979 kfree(usbhid->cr);
980 usb_free_coherent(dev, usbhid->bufsize, usbhid->ctrlbuf, usbhid->ctrlbuf_dma);
981}
982
983static int usbhid_parse(struct hid_device *hid)
984{
985 struct usb_interface *intf = to_usb_interface(hid->dev.parent);
986 struct usb_host_interface *interface = intf->cur_altsetting;
987 struct usb_device *dev = interface_to_usbdev (intf);
988 struct hid_descriptor *hdesc;
989 u32 quirks = 0;
990 unsigned int rsize = 0;
991 char *rdesc;
992 int ret, n;
993 int num_descriptors;
994 size_t offset = offsetof(struct hid_descriptor, desc);
995
996 quirks = hid_lookup_quirk(hid);
997
998 if (quirks & HID_QUIRK_IGNORE)
999 return -ENODEV;
1000
1001
1002
1003 if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT) {
1004 if (interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_KEYBOARD ||
1005 interface->desc.bInterfaceProtocol == USB_INTERFACE_PROTOCOL_MOUSE)
1006 quirks |= HID_QUIRK_NOGET;
1007 }
1008
1009 if (usb_get_extra_descriptor(interface, HID_DT_HID, &hdesc) &&
1010 (!interface->desc.bNumEndpoints ||
1011 usb_get_extra_descriptor(&interface->endpoint[0], HID_DT_HID, &hdesc))) {
1012 dbg_hid("class descriptor not present\n");
1013 return -ENODEV;
1014 }
1015
1016 if (hdesc->bLength < sizeof(struct hid_descriptor)) {
1017 dbg_hid("hid descriptor is too short\n");
1018 return -EINVAL;
1019 }
1020
1021 hid->version = le16_to_cpu(hdesc->bcdHID);
1022 hid->country = hdesc->bCountryCode;
1023
1024 num_descriptors = min_t(int, hdesc->bNumDescriptors,
1025 (hdesc->bLength - offset) / sizeof(struct hid_class_descriptor));
1026
1027 for (n = 0; n < num_descriptors; n++)
1028 if (hdesc->desc[n].bDescriptorType == HID_DT_REPORT)
1029 rsize = le16_to_cpu(hdesc->desc[n].wDescriptorLength);
1030
1031 if (!rsize || rsize > HID_MAX_DESCRIPTOR_SIZE) {
1032 dbg_hid("weird size of report descriptor (%u)\n", rsize);
1033 return -EINVAL;
1034 }
1035
1036 rdesc = kmalloc(rsize, GFP_KERNEL);
1037 if (!rdesc)
1038 return -ENOMEM;
1039
1040 hid_set_idle(dev, interface->desc.bInterfaceNumber, 0, 0);
1041
1042 ret = hid_get_class_descriptor(dev, interface->desc.bInterfaceNumber,
1043 HID_DT_REPORT, rdesc, rsize);
1044 if (ret < 0) {
1045 dbg_hid("reading report descriptor failed\n");
1046 kfree(rdesc);
1047 goto err;
1048 }
1049
1050 ret = hid_parse_report(hid, rdesc, rsize);
1051 kfree(rdesc);
1052 if (ret) {
1053 dbg_hid("parsing report descriptor failed\n");
1054 goto err;
1055 }
1056
1057 hid->quirks |= quirks;
1058
1059 return 0;
1060err:
1061 return ret;
1062}
1063
1064static int usbhid_start(struct hid_device *hid)
1065{
1066 struct usb_interface *intf = to_usb_interface(hid->dev.parent);
1067 struct usb_host_interface *interface = intf->cur_altsetting;
1068 struct usb_device *dev = interface_to_usbdev(intf);
1069 struct usbhid_device *usbhid = hid->driver_data;
1070 unsigned int n, insize = 0;
1071 int ret;
1072
1073 mutex_lock(&usbhid->mutex);
1074
1075 clear_bit(HID_DISCONNECTED, &usbhid->iofl);
1076
1077 usbhid->bufsize = HID_MIN_BUFFER_SIZE;
1078 hid_find_max_report(hid, HID_INPUT_REPORT, &usbhid->bufsize);
1079 hid_find_max_report(hid, HID_OUTPUT_REPORT, &usbhid->bufsize);
1080 hid_find_max_report(hid, HID_FEATURE_REPORT, &usbhid->bufsize);
1081
1082 if (usbhid->bufsize > HID_MAX_BUFFER_SIZE)
1083 usbhid->bufsize = HID_MAX_BUFFER_SIZE;
1084
1085 hid_find_max_report(hid, HID_INPUT_REPORT, &insize);
1086
1087 if (insize > HID_MAX_BUFFER_SIZE)
1088 insize = HID_MAX_BUFFER_SIZE;
1089
1090 if (hid_alloc_buffers(dev, hid)) {
1091 ret = -ENOMEM;
1092 goto fail;
1093 }
1094
1095 for (n = 0; n < interface->desc.bNumEndpoints; n++) {
1096 struct usb_endpoint_descriptor *endpoint;
1097 int pipe;
1098 int interval;
1099
1100 endpoint = &interface->endpoint[n].desc;
1101 if (!usb_endpoint_xfer_int(endpoint))
1102 continue;
1103
1104 interval = endpoint->bInterval;
1105
1106
1107 if (hid->quirks & HID_QUIRK_FULLSPEED_INTERVAL &&
1108 dev->speed == USB_SPEED_HIGH) {
1109 interval = fls(endpoint->bInterval*8);
1110 pr_info("%s: Fixing fullspeed to highspeed interval: %d -> %d\n",
1111 hid->name, endpoint->bInterval, interval);
1112 }
1113
1114
1115
1116
1117 switch (hid->collection->usage) {
1118 case HID_GD_MOUSE:
1119 if (hid_mousepoll_interval > 0)
1120 interval = hid_mousepoll_interval;
1121 break;
1122 case HID_GD_JOYSTICK:
1123 if (hid_jspoll_interval > 0)
1124 interval = hid_jspoll_interval;
1125 break;
1126 case HID_GD_KEYBOARD:
1127 if (hid_kbpoll_interval > 0)
1128 interval = hid_kbpoll_interval;
1129 break;
1130 }
1131
1132 ret = -ENOMEM;
1133 if (usb_endpoint_dir_in(endpoint)) {
1134 if (usbhid->urbin)
1135 continue;
1136 if (!(usbhid->urbin = usb_alloc_urb(0, GFP_KERNEL)))
1137 goto fail;
1138 pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);
1139 usb_fill_int_urb(usbhid->urbin, dev, pipe, usbhid->inbuf, insize,
1140 hid_irq_in, hid, interval);
1141 usbhid->urbin->transfer_dma = usbhid->inbuf_dma;
1142 usbhid->urbin->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1143 } else {
1144 if (usbhid->urbout)
1145 continue;
1146 if (!(usbhid->urbout = usb_alloc_urb(0, GFP_KERNEL)))
1147 goto fail;
1148 pipe = usb_sndintpipe(dev, endpoint->bEndpointAddress);
1149 usb_fill_int_urb(usbhid->urbout, dev, pipe, usbhid->outbuf, 0,
1150 hid_irq_out, hid, interval);
1151 usbhid->urbout->transfer_dma = usbhid->outbuf_dma;
1152 usbhid->urbout->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1153 }
1154 }
1155
1156 usbhid->urbctrl = usb_alloc_urb(0, GFP_KERNEL);
1157 if (!usbhid->urbctrl) {
1158 ret = -ENOMEM;
1159 goto fail;
1160 }
1161
1162 usb_fill_control_urb(usbhid->urbctrl, dev, 0, (void *) usbhid->cr,
1163 usbhid->ctrlbuf, 1, hid_ctrl, hid);
1164 usbhid->urbctrl->transfer_dma = usbhid->ctrlbuf_dma;
1165 usbhid->urbctrl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
1166
1167 set_bit(HID_STARTED, &usbhid->iofl);
1168
1169 if (hid->quirks & HID_QUIRK_ALWAYS_POLL) {
1170 ret = usb_autopm_get_interface(usbhid->intf);
1171 if (ret)
1172 goto fail;
1173 set_bit(HID_IN_POLLING, &usbhid->iofl);
1174 usbhid->intf->needs_remote_wakeup = 1;
1175 ret = hid_start_in(hid);
1176 if (ret) {
1177 dev_err(&hid->dev,
1178 "failed to start in urb: %d\n", ret);
1179 }
1180 usb_autopm_put_interface(usbhid->intf);
1181 }
1182
1183
1184
1185
1186
1187
1188
1189 if (interface->desc.bInterfaceSubClass == USB_INTERFACE_SUBCLASS_BOOT &&
1190 interface->desc.bInterfaceProtocol ==
1191 USB_INTERFACE_PROTOCOL_KEYBOARD) {
1192 usbhid_set_leds(hid);
1193 device_set_wakeup_enable(&dev->dev, 1);
1194 }
1195
1196 mutex_unlock(&usbhid->mutex);
1197 return 0;
1198
1199fail:
1200 usb_free_urb(usbhid->urbin);
1201 usb_free_urb(usbhid->urbout);
1202 usb_free_urb(usbhid->urbctrl);
1203 usbhid->urbin = NULL;
1204 usbhid->urbout = NULL;
1205 usbhid->urbctrl = NULL;
1206 hid_free_buffers(dev, hid);
1207 mutex_unlock(&usbhid->mutex);
1208 return ret;
1209}
1210
1211static void usbhid_stop(struct hid_device *hid)
1212{
1213 struct usbhid_device *usbhid = hid->driver_data;
1214
1215 if (WARN_ON(!usbhid))
1216 return;
1217
1218 if (hid->quirks & HID_QUIRK_ALWAYS_POLL) {
1219 clear_bit(HID_IN_POLLING, &usbhid->iofl);
1220 usbhid->intf->needs_remote_wakeup = 0;
1221 }
1222
1223 mutex_lock(&usbhid->mutex);
1224
1225 clear_bit(HID_STARTED, &usbhid->iofl);
1226 spin_lock_irq(&usbhid->lock);
1227 set_bit(HID_DISCONNECTED, &usbhid->iofl);
1228 spin_unlock_irq(&usbhid->lock);
1229 usb_kill_urb(usbhid->urbin);
1230 usb_kill_urb(usbhid->urbout);
1231 usb_kill_urb(usbhid->urbctrl);
1232
1233 hid_cancel_delayed_stuff(usbhid);
1234
1235 hid->claimed = 0;
1236
1237 usb_free_urb(usbhid->urbin);
1238 usb_free_urb(usbhid->urbctrl);
1239 usb_free_urb(usbhid->urbout);
1240 usbhid->urbin = NULL;
1241 usbhid->urbctrl = NULL;
1242 usbhid->urbout = NULL;
1243
1244 hid_free_buffers(hid_to_usb_dev(hid), hid);
1245
1246 mutex_unlock(&usbhid->mutex);
1247}
1248
1249static int usbhid_power(struct hid_device *hid, int lvl)
1250{
1251 struct usbhid_device *usbhid = hid->driver_data;
1252 int r = 0;
1253
1254 switch (lvl) {
1255 case PM_HINT_FULLON:
1256 r = usb_autopm_get_interface(usbhid->intf);
1257 break;
1258
1259 case PM_HINT_NORMAL:
1260 usb_autopm_put_interface(usbhid->intf);
1261 break;
1262 }
1263
1264 return r;
1265}
1266
1267static void usbhid_request(struct hid_device *hid, struct hid_report *rep, int reqtype)
1268{
1269 switch (reqtype) {
1270 case HID_REQ_GET_REPORT:
1271 usbhid_submit_report(hid, rep, USB_DIR_IN);
1272 break;
1273 case HID_REQ_SET_REPORT:
1274 usbhid_submit_report(hid, rep, USB_DIR_OUT);
1275 break;
1276 }
1277}
1278
1279static int usbhid_raw_request(struct hid_device *hid, unsigned char reportnum,
1280 __u8 *buf, size_t len, unsigned char rtype,
1281 int reqtype)
1282{
1283 switch (reqtype) {
1284 case HID_REQ_GET_REPORT:
1285 return usbhid_get_raw_report(hid, reportnum, buf, len, rtype);
1286 case HID_REQ_SET_REPORT:
1287 return usbhid_set_raw_report(hid, reportnum, buf, len, rtype);
1288 default:
1289 return -EIO;
1290 }
1291}
1292
1293static int usbhid_idle(struct hid_device *hid, int report, int idle,
1294 int reqtype)
1295{
1296 struct usb_device *dev = hid_to_usb_dev(hid);
1297 struct usb_interface *intf = to_usb_interface(hid->dev.parent);
1298 struct usb_host_interface *interface = intf->cur_altsetting;
1299 int ifnum = interface->desc.bInterfaceNumber;
1300
1301 if (reqtype != HID_REQ_SET_IDLE)
1302 return -EINVAL;
1303
1304 return hid_set_idle(dev, ifnum, report, idle);
1305}
1306
1307static bool usbhid_may_wakeup(struct hid_device *hid)
1308{
1309 struct usb_device *dev = hid_to_usb_dev(hid);
1310
1311 return device_may_wakeup(&dev->dev);
1312}
1313
1314struct hid_ll_driver usb_hid_driver = {
1315 .parse = usbhid_parse,
1316 .start = usbhid_start,
1317 .stop = usbhid_stop,
1318 .open = usbhid_open,
1319 .close = usbhid_close,
1320 .power = usbhid_power,
1321 .request = usbhid_request,
1322 .wait = usbhid_wait_io,
1323 .raw_request = usbhid_raw_request,
1324 .output_report = usbhid_output_report,
1325 .idle = usbhid_idle,
1326 .may_wakeup = usbhid_may_wakeup,
1327};
1328EXPORT_SYMBOL_GPL(usb_hid_driver);
1329
1330static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id)
1331{
1332 struct usb_host_interface *interface = intf->cur_altsetting;
1333 struct usb_device *dev = interface_to_usbdev(intf);
1334 struct usbhid_device *usbhid;
1335 struct hid_device *hid;
1336 unsigned int n, has_in = 0;
1337 size_t len;
1338 int ret;
1339
1340 dbg_hid("HID probe called for ifnum %d\n",
1341 intf->altsetting->desc.bInterfaceNumber);
1342
1343 for (n = 0; n < interface->desc.bNumEndpoints; n++)
1344 if (usb_endpoint_is_int_in(&interface->endpoint[n].desc))
1345 has_in++;
1346 if (!has_in) {
1347 hid_err(intf, "couldn't find an input interrupt endpoint\n");
1348 return -ENODEV;
1349 }
1350
1351 hid = hid_allocate_device();
1352 if (IS_ERR(hid))
1353 return PTR_ERR(hid);
1354
1355 usb_set_intfdata(intf, hid);
1356 hid->ll_driver = &usb_hid_driver;
1357 hid->ff_init = hid_pidff_init;
1358#ifdef CONFIG_USB_HIDDEV
1359 hid->hiddev_connect = hiddev_connect;
1360 hid->hiddev_disconnect = hiddev_disconnect;
1361 hid->hiddev_hid_event = hiddev_hid_event;
1362 hid->hiddev_report_event = hiddev_report_event;
1363#endif
1364 hid->dev.parent = &intf->dev;
1365 hid->bus = BUS_USB;
1366 hid->vendor = le16_to_cpu(dev->descriptor.idVendor);
1367 hid->product = le16_to_cpu(dev->descriptor.idProduct);
1368 hid->version = le16_to_cpu(dev->descriptor.bcdDevice);
1369 hid->name[0] = 0;
1370 if (intf->cur_altsetting->desc.bInterfaceProtocol ==
1371 USB_INTERFACE_PROTOCOL_MOUSE)
1372 hid->type = HID_TYPE_USBMOUSE;
1373 else if (intf->cur_altsetting->desc.bInterfaceProtocol == 0)
1374 hid->type = HID_TYPE_USBNONE;
1375
1376 if (dev->manufacturer)
1377 strlcpy(hid->name, dev->manufacturer, sizeof(hid->name));
1378
1379 if (dev->product) {
1380 if (dev->manufacturer)
1381 strlcat(hid->name, " ", sizeof(hid->name));
1382 strlcat(hid->name, dev->product, sizeof(hid->name));
1383 }
1384
1385 if (!strlen(hid->name))
1386 snprintf(hid->name, sizeof(hid->name), "HID %04x:%04x",
1387 le16_to_cpu(dev->descriptor.idVendor),
1388 le16_to_cpu(dev->descriptor.idProduct));
1389
1390 usb_make_path(dev, hid->phys, sizeof(hid->phys));
1391 strlcat(hid->phys, "/input", sizeof(hid->phys));
1392 len = strlen(hid->phys);
1393 if (len < sizeof(hid->phys) - 1)
1394 snprintf(hid->phys + len, sizeof(hid->phys) - len,
1395 "%d", intf->altsetting[0].desc.bInterfaceNumber);
1396
1397 if (usb_string(dev, dev->descriptor.iSerialNumber, hid->uniq, 64) <= 0)
1398 hid->uniq[0] = 0;
1399
1400 usbhid = kzalloc(sizeof(*usbhid), GFP_KERNEL);
1401 if (usbhid == NULL) {
1402 ret = -ENOMEM;
1403 goto err;
1404 }
1405
1406 hid->driver_data = usbhid;
1407 usbhid->hid = hid;
1408 usbhid->intf = intf;
1409 usbhid->ifnum = interface->desc.bInterfaceNumber;
1410
1411 init_waitqueue_head(&usbhid->wait);
1412 INIT_WORK(&usbhid->reset_work, hid_reset);
1413 timer_setup(&usbhid->io_retry, hid_retry_timeout, 0);
1414 spin_lock_init(&usbhid->lock);
1415 mutex_init(&usbhid->mutex);
1416
1417 ret = hid_add_device(hid);
1418 if (ret) {
1419 if (ret != -ENODEV)
1420 hid_err(intf, "can't add hid device: %d\n", ret);
1421 goto err_free;
1422 }
1423
1424 return 0;
1425err_free:
1426 kfree(usbhid);
1427err:
1428 hid_destroy_device(hid);
1429 return ret;
1430}
1431
1432static void usbhid_disconnect(struct usb_interface *intf)
1433{
1434 struct hid_device *hid = usb_get_intfdata(intf);
1435 struct usbhid_device *usbhid;
1436
1437 if (WARN_ON(!hid))
1438 return;
1439
1440 usbhid = hid->driver_data;
1441 spin_lock_irq(&usbhid->lock);
1442 set_bit(HID_DISCONNECTED, &usbhid->iofl);
1443 spin_unlock_irq(&usbhid->lock);
1444 hid_destroy_device(hid);
1445 kfree(usbhid);
1446}
1447
1448static void hid_cancel_delayed_stuff(struct usbhid_device *usbhid)
1449{
1450 del_timer_sync(&usbhid->io_retry);
1451 cancel_work_sync(&usbhid->reset_work);
1452}
1453
1454static void hid_cease_io(struct usbhid_device *usbhid)
1455{
1456 del_timer_sync(&usbhid->io_retry);
1457 usb_kill_urb(usbhid->urbin);
1458 usb_kill_urb(usbhid->urbctrl);
1459 usb_kill_urb(usbhid->urbout);
1460}
1461
1462static void hid_restart_io(struct hid_device *hid)
1463{
1464 struct usbhid_device *usbhid = hid->driver_data;
1465 int clear_halt = test_bit(HID_CLEAR_HALT, &usbhid->iofl);
1466 int reset_pending = test_bit(HID_RESET_PENDING, &usbhid->iofl);
1467
1468 spin_lock_irq(&usbhid->lock);
1469 clear_bit(HID_SUSPENDED, &usbhid->iofl);
1470 usbhid_mark_busy(usbhid);
1471
1472 if (clear_halt || reset_pending)
1473 schedule_work(&usbhid->reset_work);
1474 usbhid->retry_delay = 0;
1475 spin_unlock_irq(&usbhid->lock);
1476
1477 if (reset_pending || !test_bit(HID_STARTED, &usbhid->iofl))
1478 return;
1479
1480 if (!clear_halt) {
1481 if (hid_start_in(hid) < 0)
1482 hid_io_error(hid);
1483 }
1484
1485 spin_lock_irq(&usbhid->lock);
1486 if (usbhid->urbout && !test_bit(HID_OUT_RUNNING, &usbhid->iofl))
1487 usbhid_restart_out_queue(usbhid);
1488 if (!test_bit(HID_CTRL_RUNNING, &usbhid->iofl))
1489 usbhid_restart_ctrl_queue(usbhid);
1490 spin_unlock_irq(&usbhid->lock);
1491}
1492
1493
1494static int hid_pre_reset(struct usb_interface *intf)
1495{
1496 struct hid_device *hid = usb_get_intfdata(intf);
1497 struct usbhid_device *usbhid = hid->driver_data;
1498
1499 spin_lock_irq(&usbhid->lock);
1500 set_bit(HID_RESET_PENDING, &usbhid->iofl);
1501 spin_unlock_irq(&usbhid->lock);
1502 hid_cease_io(usbhid);
1503
1504 return 0;
1505}
1506
1507
1508static int hid_post_reset(struct usb_interface *intf)
1509{
1510 struct usb_device *dev = interface_to_usbdev (intf);
1511 struct hid_device *hid = usb_get_intfdata(intf);
1512 struct usbhid_device *usbhid = hid->driver_data;
1513 struct usb_host_interface *interface = intf->cur_altsetting;
1514 int status;
1515 char *rdesc;
1516
1517
1518
1519
1520
1521
1522 rdesc = kmalloc(hid->dev_rsize, GFP_KERNEL);
1523 if (!rdesc)
1524 return -ENOMEM;
1525
1526 status = hid_get_class_descriptor(dev,
1527 interface->desc.bInterfaceNumber,
1528 HID_DT_REPORT, rdesc, hid->dev_rsize);
1529 if (status < 0) {
1530 dbg_hid("reading report descriptor failed (post_reset)\n");
1531 kfree(rdesc);
1532 return status;
1533 }
1534 status = memcmp(rdesc, hid->dev_rdesc, hid->dev_rsize);
1535 kfree(rdesc);
1536 if (status != 0) {
1537 dbg_hid("report descriptor changed\n");
1538 return -EPERM;
1539 }
1540
1541
1542 spin_lock_irq(&usbhid->lock);
1543 clear_bit(HID_RESET_PENDING, &usbhid->iofl);
1544 clear_bit(HID_CLEAR_HALT, &usbhid->iofl);
1545 spin_unlock_irq(&usbhid->lock);
1546 hid_set_idle(dev, intf->cur_altsetting->desc.bInterfaceNumber, 0, 0);
1547
1548 hid_restart_io(hid);
1549
1550 return 0;
1551}
1552
1553#ifdef CONFIG_PM
1554static int hid_resume_common(struct hid_device *hid, bool driver_suspended)
1555{
1556 int status = 0;
1557
1558 hid_restart_io(hid);
1559 if (driver_suspended && hid->driver && hid->driver->resume)
1560 status = hid->driver->resume(hid);
1561 return status;
1562}
1563
1564static int hid_suspend(struct usb_interface *intf, pm_message_t message)
1565{
1566 struct hid_device *hid = usb_get_intfdata(intf);
1567 struct usbhid_device *usbhid = hid->driver_data;
1568 int status = 0;
1569 bool driver_suspended = false;
1570 unsigned int ledcount;
1571
1572 if (PMSG_IS_AUTO(message)) {
1573 ledcount = hidinput_count_leds(hid);
1574 spin_lock_irq(&usbhid->lock);
1575 if (!test_bit(HID_RESET_PENDING, &usbhid->iofl)
1576 && !test_bit(HID_CLEAR_HALT, &usbhid->iofl)
1577 && !test_bit(HID_OUT_RUNNING, &usbhid->iofl)
1578 && !test_bit(HID_CTRL_RUNNING, &usbhid->iofl)
1579 && !test_bit(HID_KEYS_PRESSED, &usbhid->iofl)
1580 && (!ledcount || ignoreled))
1581 {
1582 set_bit(HID_SUSPENDED, &usbhid->iofl);
1583 spin_unlock_irq(&usbhid->lock);
1584 if (hid->driver && hid->driver->suspend) {
1585 status = hid->driver->suspend(hid, message);
1586 if (status < 0)
1587 goto failed;
1588 }
1589 driver_suspended = true;
1590 } else {
1591 usbhid_mark_busy(usbhid);
1592 spin_unlock_irq(&usbhid->lock);
1593 return -EBUSY;
1594 }
1595
1596 } else {
1597
1598 if (hid->driver && hid->driver->suspend)
1599 status = hid->driver->suspend(hid, message);
1600 driver_suspended = true;
1601 spin_lock_irq(&usbhid->lock);
1602 set_bit(HID_SUSPENDED, &usbhid->iofl);
1603 spin_unlock_irq(&usbhid->lock);
1604 if (usbhid_wait_io(hid) < 0)
1605 status = -EIO;
1606 }
1607
1608 hid_cancel_delayed_stuff(usbhid);
1609 hid_cease_io(usbhid);
1610
1611 if (PMSG_IS_AUTO(message) && test_bit(HID_KEYS_PRESSED, &usbhid->iofl)) {
1612
1613 status = -EBUSY;
1614 goto failed;
1615 }
1616 dev_dbg(&intf->dev, "suspend\n");
1617 return status;
1618
1619 failed:
1620 hid_resume_common(hid, driver_suspended);
1621 return status;
1622}
1623
1624static int hid_resume(struct usb_interface *intf)
1625{
1626 struct hid_device *hid = usb_get_intfdata (intf);
1627 int status;
1628
1629 status = hid_resume_common(hid, true);
1630 dev_dbg(&intf->dev, "resume status %d\n", status);
1631 return 0;
1632}
1633
1634static int hid_reset_resume(struct usb_interface *intf)
1635{
1636 struct hid_device *hid = usb_get_intfdata(intf);
1637 int status;
1638
1639 status = hid_post_reset(intf);
1640 if (status >= 0 && hid->driver && hid->driver->reset_resume) {
1641 int ret = hid->driver->reset_resume(hid);
1642 if (ret < 0)
1643 status = ret;
1644 }
1645 return status;
1646}
1647
1648#endif
1649
1650static const struct usb_device_id hid_usb_ids[] = {
1651 { .match_flags = USB_DEVICE_ID_MATCH_INT_CLASS,
1652 .bInterfaceClass = USB_INTERFACE_CLASS_HID },
1653 { }
1654};
1655
1656MODULE_DEVICE_TABLE (usb, hid_usb_ids);
1657
1658static struct usb_driver hid_driver = {
1659 .name = "usbhid",
1660 .probe = usbhid_probe,
1661 .disconnect = usbhid_disconnect,
1662#ifdef CONFIG_PM
1663 .suspend = hid_suspend,
1664 .resume = hid_resume,
1665 .reset_resume = hid_reset_resume,
1666#endif
1667 .pre_reset = hid_pre_reset,
1668 .post_reset = hid_post_reset,
1669 .id_table = hid_usb_ids,
1670 .supports_autosuspend = 1,
1671};
1672
1673struct usb_interface *usbhid_find_interface(int minor)
1674{
1675 return usb_find_interface(&hid_driver, minor);
1676}
1677
1678static int __init hid_init(void)
1679{
1680 int retval;
1681
1682 retval = hid_quirks_init(quirks_param, BUS_USB, MAX_USBHID_BOOT_QUIRKS);
1683 if (retval)
1684 goto usbhid_quirks_init_fail;
1685 retval = usb_register(&hid_driver);
1686 if (retval)
1687 goto usb_register_fail;
1688 pr_info(KBUILD_MODNAME ": " DRIVER_DESC "\n");
1689
1690 return 0;
1691usb_register_fail:
1692 hid_quirks_exit(BUS_USB);
1693usbhid_quirks_init_fail:
1694 return retval;
1695}
1696
1697static void __exit hid_exit(void)
1698{
1699 usb_deregister(&hid_driver);
1700 hid_quirks_exit(BUS_USB);
1701}
1702
1703module_init(hid_init);
1704module_exit(hid_exit);
1705
1706MODULE_AUTHOR("Andreas Gal");
1707MODULE_AUTHOR("Vojtech Pavlik");
1708MODULE_AUTHOR("Jiri Kosina");
1709MODULE_DESCRIPTION(DRIVER_DESC);
1710MODULE_LICENSE("GPL");
1711