1 /* 2 * The Serio abstraction module 3 * 4 * Copyright (c) 1999-2004 Vojtech Pavlik 5 * Copyright (c) 2004 Dmitry Torokhov 6 * Copyright (c) 2003 Daniele Bellucci 7 */ 8 9 /* 10 * This program is free software; you can redistribute it and/or modify 11 * it under the terms of the GNU General Public License as published by 12 * the Free Software Foundation; either version 2 of the License, or 13 * (at your option) any later version. 14 * 15 * This program is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU General Public License for more details. 19 * 20 * You should have received a copy of the GNU General Public License 21 * along with this program; if not, write to the Free Software 22 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 23 * 24 * Should you need to contact me, the author, you can do so either by 25 * e-mail - mail your message to <vojtech@ucw.cz>, or by paper mail: 26 * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic 27 */ 28 29 #include <linux/stddef.h> 30 #include <linux/module.h> 31 #include <linux/serio.h> 32 #include <linux/errno.h> 33 #include <linux/wait.h> 34 #include <linux/sched.h> 35 #include <linux/slab.h> 36 #include <linux/kthread.h> 37 #include <linux/mutex.h> 38 #include <linux/freezer.h> 39 40 MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); 41 MODULE_DESCRIPTION("Serio abstraction core"); 42 MODULE_LICENSE("GPL"); 43 44 /* 45 * serio_mutex protects entire serio subsystem and is taken every time 46 * serio port or driver registrered or unregistered. 47 */ 48 static DEFINE_MUTEX(serio_mutex); 49 50 static LIST_HEAD(serio_list); 51 52 static struct bus_type serio_bus; 53 54 static void serio_add_port(struct serio *serio); 55 static int serio_reconnect_port(struct serio *serio); 56 static void serio_disconnect_port(struct serio *serio); 57 static void serio_reconnect_chain(struct serio *serio); 58 static void serio_attach_driver(struct serio_driver *drv); 59 60 static int serio_connect_driver(struct serio *serio, struct serio_driver *drv) 61 { 62 int retval; 63 64 mutex_lock(&serio->drv_mutex); 65 retval = drv->connect(serio, drv); 66 mutex_unlock(&serio->drv_mutex); 67 68 return retval; 69 } 70 71 static int serio_reconnect_driver(struct serio *serio) 72 { 73 int retval = -1; 74 75 mutex_lock(&serio->drv_mutex); 76 if (serio->drv && serio->drv->reconnect) 77 retval = serio->drv->reconnect(serio); 78 mutex_unlock(&serio->drv_mutex); 79 80 return retval; 81 } 82 83 static void serio_disconnect_driver(struct serio *serio) 84 { 85 mutex_lock(&serio->drv_mutex); 86 if (serio->drv) 87 serio->drv->disconnect(serio); 88 mutex_unlock(&serio->drv_mutex); 89 } 90 91 static int serio_match_port(const struct serio_device_id *ids, struct serio *serio) 92 { 93 while (ids->type || ids->proto) { 94 if ((ids->type == SERIO_ANY || ids->type == serio->id.type) && 95 (ids->proto == SERIO_ANY || ids->proto == serio->id.proto) && 96 (ids->extra == SERIO_ANY || ids->extra == serio->id.extra) && 97 (ids->id == SERIO_ANY || ids->id == serio->id.id)) 98 return 1; 99 ids++; 100 } 101 return 0; 102 } 103 104 /* 105 * Basic serio -> driver core mappings 106 */ 107 108 static int serio_bind_driver(struct serio *serio, struct serio_driver *drv) 109 { 110 int error; 111 112 if (serio_match_port(drv->id_table, serio)) { 113 114 serio->dev.driver = &drv->driver; 115 if (serio_connect_driver(serio, drv)) { 116 serio->dev.driver = NULL; 117 return -ENODEV; 118 } 119 120 error = device_bind_driver(&serio->dev); 121 if (error) { 122 printk(KERN_WARNING 123 "serio: device_bind_driver() failed " 124 "for %s (%s) and %s, error: %d\n", 125 serio->phys, serio->name, 126 drv->description, error); 127 serio_disconnect_driver(serio); 128 serio->dev.driver = NULL; 129 return error; 130 } 131 } 132 return 0; 133 } 134 135 static void serio_find_driver(struct serio *serio) 136 { 137 int error; 138 139 error = device_attach(&serio->dev); 140 if (error < 0) 141 printk(KERN_WARNING 142 "serio: device_attach() failed for %s (%s), error: %d\n", 143 serio->phys, serio->name, error); 144 } 145 146 147 /* 148 * Serio event processing. 149 */ 150 151 enum serio_event_type { 152 SERIO_RESCAN_PORT, 153 SERIO_RECONNECT_PORT, 154 SERIO_RECONNECT_CHAIN, 155 SERIO_REGISTER_PORT, 156 SERIO_ATTACH_DRIVER, 157 }; 158 159 struct serio_event { 160 enum serio_event_type type; 161 void *object; 162 struct module *owner; 163 struct list_head node; 164 }; 165 166 static DEFINE_SPINLOCK(serio_event_lock); /* protects serio_event_list */ 167 static LIST_HEAD(serio_event_list); 168 static DECLARE_WAIT_QUEUE_HEAD(serio_wait); 169 static struct task_struct *serio_task; 170 171 static int serio_queue_event(void *object, struct module *owner, 172 enum serio_event_type event_type) 173 { 174 unsigned long flags; 175 struct serio_event *event; 176 int retval = 0; 177 178 spin_lock_irqsave(&serio_event_lock, flags); 179 180 /* 181 * Scan event list for the other events for the same serio port, 182 * starting with the most recent one. If event is the same we 183 * do not need add new one. If event is of different type we 184 * need to add this event and should not look further because 185 * we need to preseve sequence of distinct events. 186 */ 187 list_for_each_entry_reverse(event, &serio_event_list, node) { 188 if (event->object == object) { 189 if (event->type == event_type) 190 goto out; 191 break; 192 } 193 } 194 195 event = kmalloc(sizeof(struct serio_event), GFP_ATOMIC); 196 if (!event) { 197 printk(KERN_ERR 198 "serio: Not enough memory to queue event %d\n", 199 event_type); 200 retval = -ENOMEM; 201 goto out; 202 } 203 204 if (!try_module_get(owner)) { 205 printk(KERN_WARNING 206 "serio: Can't get module reference, dropping event %d\n", 207 event_type); 208 kfree(event); 209 retval = -EINVAL; 210 goto out; 211 } 212 213 event->type = event_type; 214 event->object = object; 215 event->owner = owner; 216 217 list_add_tail(&event->node, &serio_event_list); 218 wake_up(&serio_wait); 219 220 out: 221 spin_unlock_irqrestore(&serio_event_lock, flags); 222 return retval; 223 } 224 225 static void serio_free_event(struct serio_event *event) 226 { 227 module_put(event->owner); 228 kfree(event); 229 } 230 231 static void serio_remove_duplicate_events(struct serio_event *event) 232 { 233 struct list_head *node, *next; 234 struct serio_event *e; 235 unsigned long flags; 236 237 spin_lock_irqsave(&serio_event_lock, flags); 238 239 list_for_each_safe(node, next, &serio_event_list) { 240 e = list_entry(node, struct serio_event, node); 241 if (event->object == e->object) { 242 /* 243 * If this event is of different type we should not 244 * look further - we only suppress duplicate events 245 * that were sent back-to-back. 246 */ 247 if (event->type != e->type) 248 break; 249 250 list_del_init(node); 251 serio_free_event(e); 252 } 253 } 254 255 spin_unlock_irqrestore(&serio_event_lock, flags); 256 } 257 258 259 static struct serio_event *serio_get_event(void) 260 { 261 struct serio_event *event; 262 struct list_head *node; 263 unsigned long flags; 264 265 spin_lock_irqsave(&serio_event_lock, flags); 266 267 if (list_empty(&serio_event_list)) { 268 spin_unlock_irqrestore(&serio_event_lock, flags); 269 return NULL; 270 } 271 272 node = serio_event_list.next; 273 event = list_entry(node, struct serio_event, node); 274 list_del_init(node); 275 276 spin_unlock_irqrestore(&serio_event_lock, flags); 277 278 return event; 279 } 280 281 static void serio_handle_event(void) 282 { 283 struct serio_event *event; 284 285 mutex_lock(&serio_mutex); 286 287 /* 288 * Note that we handle only one event here to give swsusp 289 * a chance to freeze kseriod thread. Serio events should 290 * be pretty rare so we are not concerned about taking 291 * performance hit. 292 */ 293 if ((event = serio_get_event())) { 294 295 switch (event->type) { 296 case SERIO_REGISTER_PORT: 297 serio_add_port(event->object); 298 break; 299 300 case SERIO_RECONNECT_PORT: 301 serio_reconnect_port(event->object); 302 break; 303 304 case SERIO_RESCAN_PORT: 305 serio_disconnect_port(event->object); 306 serio_find_driver(event->object); 307 break; 308 309 case SERIO_RECONNECT_CHAIN: 310 serio_reconnect_chain(event->object); 311 break; 312 313 case SERIO_ATTACH_DRIVER: 314 serio_attach_driver(event->object); 315 break; 316 317 default: 318 break; 319 } 320 321 serio_remove_duplicate_events(event); 322 serio_free_event(event); 323 } 324 325 mutex_unlock(&serio_mutex); 326 } 327 328 /* 329 * Remove all events that have been submitted for a given 330 * object, be it serio port or driver. 331 */ 332 static void serio_remove_pending_events(void *object) 333 { 334 struct list_head *node, *next; 335 struct serio_event *event; 336 unsigned long flags; 337 338 spin_lock_irqsave(&serio_event_lock, flags); 339 340 list_for_each_safe(node, next, &serio_event_list) { 341 event = list_entry(node, struct serio_event, node); 342 if (event->object == object) { 343 list_del_init(node); 344 serio_free_event(event); 345 } 346 } 347 348 spin_unlock_irqrestore(&serio_event_lock, flags); 349 } 350 351 /* 352 * Destroy child serio port (if any) that has not been fully registered yet. 353 * 354 * Note that we rely on the fact that port can have only one child and therefore 355 * only one child registration request can be pending. Additionally, children 356 * are registered by driver's connect() handler so there can't be a grandchild 357 * pending registration together with a child. 358 */ 359 static struct serio *serio_get_pending_child(struct serio *parent) 360 { 361 struct serio_event *event; 362 struct serio *serio, *child = NULL; 363 unsigned long flags; 364 365 spin_lock_irqsave(&serio_event_lock, flags); 366 367 list_for_each_entry(event, &serio_event_list, node) { 368 if (event->type == SERIO_REGISTER_PORT) { 369 serio = event->object; 370 if (serio->parent == parent) { 371 child = serio; 372 break; 373 } 374 } 375 } 376 377 spin_unlock_irqrestore(&serio_event_lock, flags); 378 return child; 379 } 380 381 static int serio_thread(void *nothing) 382 { 383 set_freezable(); 384 do { 385 serio_handle_event(); 386 wait_event_freezable(serio_wait, 387 kthread_should_stop() || !list_empty(&serio_event_list)); 388 } while (!kthread_should_stop()); 389 390 printk(KERN_DEBUG "serio: kseriod exiting\n"); 391 return 0; 392 } 393 394 395 /* 396 * Serio port operations 397 */ 398 399 static ssize_t serio_show_description(struct device *dev, struct device_attribute *attr, char *buf) 400 { 401 struct serio *serio = to_serio_port(dev); 402 return sprintf(buf, "%s\n", serio->name); 403 } 404 405 static ssize_t serio_show_modalias(struct device *dev, struct device_attribute *attr, char *buf) 406 { 407 struct serio *serio = to_serio_port(dev); 408 409 return sprintf(buf, "serio:ty%02Xpr%02Xid%02Xex%02X\n", 410 serio->id.type, serio->id.proto, serio->id.id, serio->id.extra); 411 } 412 413 static ssize_t serio_show_id_type(struct device *dev, struct device_attribute *attr, char *buf) 414 { 415 struct serio *serio = to_serio_port(dev); 416 return sprintf(buf, "%02x\n", serio->id.type); 417 } 418 419 static ssize_t serio_show_id_proto(struct device *dev, struct device_attribute *attr, char *buf) 420 { 421 struct serio *serio = to_serio_port(dev); 422 return sprintf(buf, "%02x\n", serio->id.proto); 423 } 424 425 static ssize_t serio_show_id_id(struct device *dev, struct device_attribute *attr, char *buf) 426 { 427 struct serio *serio = to_serio_port(dev); 428 return sprintf(buf, "%02x\n", serio->id.id); 429 } 430 431 static ssize_t serio_show_id_extra(struct device *dev, struct device_attribute *attr, char *buf) 432 { 433 struct serio *serio = to_serio_port(dev); 434 return sprintf(buf, "%02x\n", serio->id.extra); 435 } 436 437 static DEVICE_ATTR(type, S_IRUGO, serio_show_id_type, NULL); 438 static DEVICE_ATTR(proto, S_IRUGO, serio_show_id_proto, NULL); 439 static DEVICE_ATTR(id, S_IRUGO, serio_show_id_id, NULL); 440 static DEVICE_ATTR(extra, S_IRUGO, serio_show_id_extra, NULL); 441 442 static struct attribute *serio_device_id_attrs[] = { 443 &dev_attr_type.attr, 444 &dev_attr_proto.attr, 445 &dev_attr_id.attr, 446 &dev_attr_extra.attr, 447 NULL 448 }; 449 450 static struct attribute_group serio_id_attr_group = { 451 .name = "id", 452 .attrs = serio_device_id_attrs, 453 }; 454 455 static ssize_t serio_rebind_driver(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 456 { 457 struct serio *serio = to_serio_port(dev); 458 struct device_driver *drv; 459 int error; 460 461 error = mutex_lock_interruptible(&serio_mutex); 462 if (error) 463 return error; 464 465 if (!strncmp(buf, "none", count)) { 466 serio_disconnect_port(serio); 467 } else if (!strncmp(buf, "reconnect", count)) { 468 serio_reconnect_chain(serio); 469 } else if (!strncmp(buf, "rescan", count)) { 470 serio_disconnect_port(serio); 471 serio_find_driver(serio); 472 } else if ((drv = driver_find(buf, &serio_bus)) != NULL) { 473 serio_disconnect_port(serio); 474 error = serio_bind_driver(serio, to_serio_driver(drv)); 475 put_driver(drv); 476 } else { 477 error = -EINVAL; 478 } 479 480 mutex_unlock(&serio_mutex); 481 482 return error ? error : count; 483 } 484 485 static ssize_t serio_show_bind_mode(struct device *dev, struct device_attribute *attr, char *buf) 486 { 487 struct serio *serio = to_serio_port(dev); 488 return sprintf(buf, "%s\n", serio->manual_bind ? "manual" : "auto"); 489 } 490 491 static ssize_t serio_set_bind_mode(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) 492 { 493 struct serio *serio = to_serio_port(dev); 494 int retval; 495 496 retval = count; 497 if (!strncmp(buf, "manual", count)) { 498 serio->manual_bind = true; 499 } else if (!strncmp(buf, "auto", count)) { 500 serio->manual_bind = false; 501 } else { 502 retval = -EINVAL; 503 } 504 505 return retval; 506 } 507 508 static struct device_attribute serio_device_attrs[] = { 509 __ATTR(description, S_IRUGO, serio_show_description, NULL), 510 __ATTR(modalias, S_IRUGO, serio_show_modalias, NULL), 511 __ATTR(drvctl, S_IWUSR, NULL, serio_rebind_driver), 512 __ATTR(bind_mode, S_IWUSR | S_IRUGO, serio_show_bind_mode, serio_set_bind_mode), 513 __ATTR_NULL 514 }; 515 516 517 static void serio_release_port(struct device *dev) 518 { 519 struct serio *serio = to_serio_port(dev); 520 521 kfree(serio); 522 module_put(THIS_MODULE); 523 } 524 525 /* 526 * Prepare serio port for registration. 527 */ 528 static void serio_init_port(struct serio *serio) 529 { 530 static atomic_t serio_no = ATOMIC_INIT(0); 531 532 __module_get(THIS_MODULE); 533 534 INIT_LIST_HEAD(&serio->node); 535 spin_lock_init(&serio->lock); 536 mutex_init(&serio->drv_mutex); 537 device_initialize(&serio->dev); 538 dev_set_name(&serio->dev, "serio%ld", 539 (long)atomic_inc_return(&serio_no) - 1); 540 serio->dev.bus = &serio_bus; 541 serio->dev.release = serio_release_port; 542 if (serio->parent) { 543 serio->dev.parent = &serio->parent->dev; 544 serio->depth = serio->parent->depth + 1; 545 } else 546 serio->depth = 0; 547 lockdep_set_subclass(&serio->lock, serio->depth); 548 } 549 550 /* 551 * Complete serio port registration. 552 * Driver core will attempt to find appropriate driver for the port. 553 */ 554 static void serio_add_port(struct serio *serio) 555 { 556 int error; 557 558 if (serio->parent) { 559 serio_pause_rx(serio->parent); 560 serio->parent->child = serio; 561 serio_continue_rx(serio->parent); 562 } 563 564 list_add_tail(&serio->node, &serio_list); 565 if (serio->start) 566 serio->start(serio); 567 error = device_add(&serio->dev); 568 if (error) 569 printk(KERN_ERR 570 "serio: device_add() failed for %s (%s), error: %d\n", 571 serio->phys, serio->name, error); 572 else { 573 serio->registered = true; 574 error = sysfs_create_group(&serio->dev.kobj, &serio_id_attr_group); 575 if (error) 576 printk(KERN_ERR 577 "serio: sysfs_create_group() failed for %s (%s), error: %d\n", 578 serio->phys, serio->name, error); 579 } 580 } 581 582 /* 583 * serio_destroy_port() completes deregistration process and removes 584 * port from the system 585 */ 586 static void serio_destroy_port(struct serio *serio) 587 { 588 struct serio *child; 589 590 child = serio_get_pending_child(serio); 591 if (child) { 592 serio_remove_pending_events(child); 593 put_device(&child->dev); 594 } 595 596 if (serio->stop) 597 serio->stop(serio); 598 599 if (serio->parent) { 600 serio_pause_rx(serio->parent); 601 serio->parent->child = NULL; 602 serio_continue_rx(serio->parent); 603 serio->parent = NULL; 604 } 605 606 if (serio->registered) { 607 sysfs_remove_group(&serio->dev.kobj, &serio_id_attr_group); 608 device_del(&serio->dev); 609 serio->registered = false; 610 } 611 612 list_del_init(&serio->node); 613 serio_remove_pending_events(serio); 614 put_device(&serio->dev); 615 } 616 617 /* 618 * Reconnect serio port (re-initialize attached device). 619 * If reconnect fails (old device is no longer attached or 620 * there was no device to begin with) we do full rescan in 621 * hope of finding a driver for the port. 622 */ 623 static int serio_reconnect_port(struct serio *serio) 624 { 625 int error = serio_reconnect_driver(serio); 626 627 if (error) { 628 serio_disconnect_port(serio); 629 serio_find_driver(serio); 630 } 631 632 return error; 633 } 634 635 /* 636 * Reconnect serio port and all its children (re-initialize attached devices) 637 */ 638 static void serio_reconnect_chain(struct serio *serio) 639 { 640 do { 641 if (serio_reconnect_port(serio)) { 642 /* Ok, old children are now gone, we are done */ 643 break; 644 } 645 serio = serio->child; 646 } while (serio); 647 } 648 649 /* 650 * serio_disconnect_port() unbinds a port from its driver. As a side effect 651 * all child ports are unbound and destroyed. 652 */ 653 static void serio_disconnect_port(struct serio *serio) 654 { 655 struct serio *s, *parent; 656 657 if (serio->child) { 658 /* 659 * Children ports should be disconnected and destroyed 660 * first, staring with the leaf one, since we don't want 661 * to do recursion 662 */ 663 for (s = serio; s->child; s = s->child) 664 /* empty */; 665 666 do { 667 parent = s->parent; 668 669 device_release_driver(&s->dev); 670 serio_destroy_port(s); 671 } while ((s = parent) != serio); 672 } 673 674 /* 675 * Ok, no children left, now disconnect this port 676 */ 677 device_release_driver(&serio->dev); 678 } 679 680 void serio_rescan(struct serio *serio) 681 { 682 serio_queue_event(serio, NULL, SERIO_RESCAN_PORT); 683 } 684 EXPORT_SYMBOL(serio_rescan); 685 686 void serio_reconnect(struct serio *serio) 687 { 688 serio_queue_event(serio, NULL, SERIO_RECONNECT_CHAIN); 689 } 690 EXPORT_SYMBOL(serio_reconnect); 691 692 /* 693 * Submits register request to kseriod for subsequent execution. 694 * Note that port registration is always asynchronous. 695 */ 696 void __serio_register_port(struct serio *serio, struct module *owner) 697 { 698 serio_init_port(serio); 699 serio_queue_event(serio, owner, SERIO_REGISTER_PORT); 700 } 701 EXPORT_SYMBOL(__serio_register_port); 702 703 /* 704 * Synchronously unregisters serio port. 705 */ 706 void serio_unregister_port(struct serio *serio) 707 { 708 mutex_lock(&serio_mutex); 709 serio_disconnect_port(serio); 710 serio_destroy_port(serio); 711 mutex_unlock(&serio_mutex); 712 } 713 EXPORT_SYMBOL(serio_unregister_port); 714 715 /* 716 * Safely unregisters child port if one is present. 717 */ 718 void serio_unregister_child_port(struct serio *serio) 719 { 720 mutex_lock(&serio_mutex); 721 if (serio->child) { 722 serio_disconnect_port(serio->child); 723 serio_destroy_port(serio->child); 724 } 725 mutex_unlock(&serio_mutex); 726 } 727 EXPORT_SYMBOL(serio_unregister_child_port); 728 729 730 /* 731 * Serio driver operations 732 */ 733 734 static ssize_t serio_driver_show_description(struct device_driver *drv, char *buf) 735 { 736 struct serio_driver *driver = to_serio_driver(drv); 737 return sprintf(buf, "%s\n", driver->description ? driver->description : "(none)"); 738 } 739 740 static ssize_t serio_driver_show_bind_mode(struct device_driver *drv, char *buf) 741 { 742 struct serio_driver *serio_drv = to_serio_driver(drv); 743 return sprintf(buf, "%s\n", serio_drv->manual_bind ? "manual" : "auto"); 744 } 745 746 static ssize_t serio_driver_set_bind_mode(struct device_driver *drv, const char *buf, size_t count) 747 { 748 struct serio_driver *serio_drv = to_serio_driver(drv); 749 int retval; 750 751 retval = count; 752 if (!strncmp(buf, "manual", count)) { 753 serio_drv->manual_bind = true; 754 } else if (!strncmp(buf, "auto", count)) { 755 serio_drv->manual_bind = false; 756 } else { 757 retval = -EINVAL; 758 } 759 760 return retval; 761 } 762 763 764 static struct driver_attribute serio_driver_attrs[] = { 765 __ATTR(description, S_IRUGO, serio_driver_show_description, NULL), 766 __ATTR(bind_mode, S_IWUSR | S_IRUGO, 767 serio_driver_show_bind_mode, serio_driver_set_bind_mode), 768 __ATTR_NULL 769 }; 770 771 static int serio_driver_probe(struct device *dev) 772 { 773 struct serio *serio = to_serio_port(dev); 774 struct serio_driver *drv = to_serio_driver(dev->driver); 775 776 return serio_connect_driver(serio, drv); 777 } 778 779 static int serio_driver_remove(struct device *dev) 780 { 781 struct serio *serio = to_serio_port(dev); 782 783 serio_disconnect_driver(serio); 784 return 0; 785 } 786 787 static void serio_cleanup(struct serio *serio) 788 { 789 mutex_lock(&serio->drv_mutex); 790 if (serio->drv && serio->drv->cleanup) 791 serio->drv->cleanup(serio); 792 mutex_unlock(&serio->drv_mutex); 793 } 794 795 static void serio_shutdown(struct device *dev) 796 { 797 struct serio *serio = to_serio_port(dev); 798 799 serio_cleanup(serio); 800 } 801 802 static void serio_attach_driver(struct serio_driver *drv) 803 { 804 int error; 805 806 error = driver_attach(&drv->driver); 807 if (error) 808 printk(KERN_WARNING 809 "serio: driver_attach() failed for %s with error %d\n", 810 drv->driver.name, error); 811 } 812 813 int __serio_register_driver(struct serio_driver *drv, struct module *owner, const char *mod_name) 814 { 815 bool manual_bind = drv->manual_bind; 816 int error; 817 818 drv->driver.bus = &serio_bus; 819 drv->driver.owner = owner; 820 drv->driver.mod_name = mod_name; 821 822 /* 823 * Temporarily disable automatic binding because probing 824 * takes long time and we are better off doing it in kseriod 825 */ 826 drv->manual_bind = true; 827 828 error = driver_register(&drv->driver); 829 if (error) { 830 printk(KERN_ERR 831 "serio: driver_register() failed for %s, error: %d\n", 832 drv->driver.name, error); 833 return error; 834 } 835 836 /* 837 * Restore original bind mode and let kseriod bind the 838 * driver to free ports 839 */ 840 if (!manual_bind) { 841 drv->manual_bind = false; 842 error = serio_queue_event(drv, NULL, SERIO_ATTACH_DRIVER); 843 if (error) { 844 driver_unregister(&drv->driver); 845 return error; 846 } 847 } 848 849 return 0; 850 } 851 EXPORT_SYMBOL(__serio_register_driver); 852 853 void serio_unregister_driver(struct serio_driver *drv) 854 { 855 struct serio *serio; 856 857 mutex_lock(&serio_mutex); 858 859 drv->manual_bind = true; /* so serio_find_driver ignores it */ 860 serio_remove_pending_events(drv); 861 862 start_over: 863 list_for_each_entry(serio, &serio_list, node) { 864 if (serio->drv == drv) { 865 serio_disconnect_port(serio); 866 serio_find_driver(serio); 867 /* we could've deleted some ports, restart */ 868 goto start_over; 869 } 870 } 871 872 driver_unregister(&drv->driver); 873 mutex_unlock(&serio_mutex); 874 } 875 EXPORT_SYMBOL(serio_unregister_driver); 876 877 static void serio_set_drv(struct serio *serio, struct serio_driver *drv) 878 { 879 serio_pause_rx(serio); 880 serio->drv = drv; 881 serio_continue_rx(serio); 882 } 883 884 static int serio_bus_match(struct device *dev, struct device_driver *drv) 885 { 886 struct serio *serio = to_serio_port(dev); 887 struct serio_driver *serio_drv = to_serio_driver(drv); 888 889 if (serio->manual_bind || serio_drv->manual_bind) 890 return 0; 891 892 return serio_match_port(serio_drv->id_table, serio); 893 } 894 895 #ifdef CONFIG_HOTPLUG 896 897 #define SERIO_ADD_UEVENT_VAR(fmt, val...) \ 898 do { \ 899 int err = add_uevent_var(env, fmt, val); \ 900 if (err) \ 901 return err; \ 902 } while (0) 903 904 static int serio_uevent(struct device *dev, struct kobj_uevent_env *env) 905 { 906 struct serio *serio; 907 908 if (!dev) 909 return -ENODEV; 910 911 serio = to_serio_port(dev); 912 913 SERIO_ADD_UEVENT_VAR("SERIO_TYPE=%02x", serio->id.type); 914 SERIO_ADD_UEVENT_VAR("SERIO_PROTO=%02x", serio->id.proto); 915 SERIO_ADD_UEVENT_VAR("SERIO_ID=%02x", serio->id.id); 916 SERIO_ADD_UEVENT_VAR("SERIO_EXTRA=%02x", serio->id.extra); 917 SERIO_ADD_UEVENT_VAR("MODALIAS=serio:ty%02Xpr%02Xid%02Xex%02X", 918 serio->id.type, serio->id.proto, serio->id.id, serio->id.extra); 919 920 return 0; 921 } 922 #undef SERIO_ADD_UEVENT_VAR 923 924 #else 925 926 static int serio_uevent(struct device *dev, struct kobj_uevent_env *env) 927 { 928 return -ENODEV; 929 } 930 931 #endif /* CONFIG_HOTPLUG */ 932 933 #ifdef CONFIG_PM 934 static int serio_suspend(struct device *dev) 935 { 936 struct serio *serio = to_serio_port(dev); 937 938 serio_cleanup(serio); 939 940 return 0; 941 } 942 943 static int serio_resume(struct device *dev) 944 { 945 struct serio *serio = to_serio_port(dev); 946 947 /* 948 * Driver reconnect can take a while, so better let kseriod 949 * deal with it. 950 */ 951 serio_queue_event(serio, NULL, SERIO_RECONNECT_PORT); 952 953 return 0; 954 } 955 956 static const struct dev_pm_ops serio_pm_ops = { 957 .suspend = serio_suspend, 958 .resume = serio_resume, 959 .poweroff = serio_suspend, 960 .restore = serio_resume, 961 }; 962 #endif /* CONFIG_PM */ 963 964 /* called from serio_driver->connect/disconnect methods under serio_mutex */ 965 int serio_open(struct serio *serio, struct serio_driver *drv) 966 { 967 serio_set_drv(serio, drv); 968 969 if (serio->open && serio->open(serio)) { 970 serio_set_drv(serio, NULL); 971 return -1; 972 } 973 return 0; 974 } 975 EXPORT_SYMBOL(serio_open); 976 977 /* called from serio_driver->connect/disconnect methods under serio_mutex */ 978 void serio_close(struct serio *serio) 979 { 980 if (serio->close) 981 serio->close(serio); 982 983 serio_set_drv(serio, NULL); 984 } 985 EXPORT_SYMBOL(serio_close); 986 987 irqreturn_t serio_interrupt(struct serio *serio, 988 unsigned char data, unsigned int dfl) 989 { 990 unsigned long flags; 991 irqreturn_t ret = IRQ_NONE; 992 993 spin_lock_irqsave(&serio->lock, flags); 994 995 if (likely(serio->drv)) { 996 ret = serio->drv->interrupt(serio, data, dfl); 997 } else if (!dfl && serio->registered) { 998 serio_rescan(serio); 999 ret = IRQ_HANDLED; 1000 } 1001 1002 spin_unlock_irqrestore(&serio->lock, flags); 1003 1004 return ret; 1005 } 1006 EXPORT_SYMBOL(serio_interrupt); 1007 1008 static struct bus_type serio_bus = { 1009 .name = "serio", 1010 .dev_attrs = serio_device_attrs, 1011 .drv_attrs = serio_driver_attrs, 1012 .match = serio_bus_match, 1013 .uevent = serio_uevent, 1014 .probe = serio_driver_probe, 1015 .remove = serio_driver_remove, 1016 .shutdown = serio_shutdown, 1017 #ifdef CONFIG_PM 1018 .pm = &serio_pm_ops, 1019 #endif 1020 }; 1021 1022 static int __init serio_init(void) 1023 { 1024 int error; 1025 1026 error = bus_register(&serio_bus); 1027 if (error) { 1028 printk(KERN_ERR "serio: failed to register serio bus, error: %d\n", error); 1029 return error; 1030 } 1031 1032 serio_task = kthread_run(serio_thread, NULL, "kseriod"); 1033 if (IS_ERR(serio_task)) { 1034 bus_unregister(&serio_bus); 1035 error = PTR_ERR(serio_task); 1036 printk(KERN_ERR "serio: Failed to start kseriod, error: %d\n", error); 1037 return error; 1038 } 1039 1040 return 0; 1041 } 1042 1043 static void __exit serio_exit(void) 1044 { 1045 bus_unregister(&serio_bus); 1046 kthread_stop(serio_task); 1047 } 1048 1049 subsys_initcall(serio_init); 1050 module_exit(serio_exit); 1051