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