1 /* 2 * drivers/s390/cio/device.c 3 * bus driver for ccw devices 4 * 5 * Copyright (C) 2002 IBM Deutschland Entwicklung GmbH, 6 * IBM Corporation 7 * Author(s): Arnd Bergmann (arndb@de.ibm.com) 8 * Cornelia Huck (cornelia.huck@de.ibm.com) 9 * Martin Schwidefsky (schwidefsky@de.ibm.com) 10 */ 11 #include <linux/module.h> 12 #include <linux/init.h> 13 #include <linux/spinlock.h> 14 #include <linux/errno.h> 15 #include <linux/err.h> 16 #include <linux/slab.h> 17 #include <linux/list.h> 18 #include <linux/device.h> 19 #include <linux/workqueue.h> 20 21 #include <asm/ccwdev.h> 22 #include <asm/cio.h> 23 #include <asm/param.h> /* HZ */ 24 25 #include "cio.h" 26 #include "cio_debug.h" 27 #include "css.h" 28 #include "device.h" 29 #include "ioasm.h" 30 31 /******************* bus type handling ***********************/ 32 33 /* The Linux driver model distinguishes between a bus type and 34 * the bus itself. Of course we only have one channel 35 * subsystem driver and one channel system per machine, but 36 * we still use the abstraction. T.R. says it's a good idea. */ 37 static int 38 ccw_bus_match (struct device * dev, struct device_driver * drv) 39 { 40 struct ccw_device *cdev = to_ccwdev(dev); 41 struct ccw_driver *cdrv = to_ccwdrv(drv); 42 const struct ccw_device_id *ids = cdrv->ids, *found; 43 44 if (!ids) 45 return 0; 46 47 found = ccw_device_id_match(ids, &cdev->id); 48 if (!found) 49 return 0; 50 51 cdev->id.driver_info = found->driver_info; 52 53 return 1; 54 } 55 56 /* Store modalias string delimited by prefix/suffix string into buffer with 57 * specified size. Return length of resulting string (excluding trailing '\0') 58 * even if string doesn't fit buffer (snprintf semantics). */ 59 static int snprint_alias(char *buf, size_t size, 60 struct ccw_device_id *id, const char *suffix) 61 { 62 int len; 63 64 len = snprintf(buf, size, "ccw:t%04Xm%02X", id->cu_type, id->cu_model); 65 if (len > size) 66 return len; 67 buf += len; 68 size -= len; 69 70 if (id->dev_type != 0) 71 len += snprintf(buf, size, "dt%04Xdm%02X%s", id->dev_type, 72 id->dev_model, suffix); 73 else 74 len += snprintf(buf, size, "dtdm%s", suffix); 75 76 return len; 77 } 78 79 /* Set up environment variables for ccw device uevent. Return 0 on success, 80 * non-zero otherwise. */ 81 static int ccw_uevent(struct device *dev, char **envp, int num_envp, 82 char *buffer, int buffer_size) 83 { 84 struct ccw_device *cdev = to_ccwdev(dev); 85 struct ccw_device_id *id = &(cdev->id); 86 int i = 0; 87 int len = 0; 88 int ret; 89 char modalias_buf[30]; 90 91 /* CU_TYPE= */ 92 ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len, 93 "CU_TYPE=%04X", id->cu_type); 94 if (ret) 95 return ret; 96 97 /* CU_MODEL= */ 98 ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len, 99 "CU_MODEL=%02X", id->cu_model); 100 if (ret) 101 return ret; 102 103 /* The next two can be zero, that's ok for us */ 104 /* DEV_TYPE= */ 105 ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len, 106 "DEV_TYPE=%04X", id->dev_type); 107 if (ret) 108 return ret; 109 110 /* DEV_MODEL= */ 111 ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len, 112 "DEV_MODEL=%02X", id->dev_model); 113 if (ret) 114 return ret; 115 116 /* MODALIAS= */ 117 snprint_alias(modalias_buf, sizeof(modalias_buf), id, ""); 118 ret = add_uevent_var(envp, num_envp, &i, buffer, buffer_size, &len, 119 "MODALIAS=%s", modalias_buf); 120 return ret; 121 } 122 123 struct bus_type ccw_bus_type; 124 125 static int io_subchannel_probe (struct subchannel *); 126 static int io_subchannel_remove (struct subchannel *); 127 static int io_subchannel_notify(struct device *, int); 128 static void io_subchannel_verify(struct device *); 129 static void io_subchannel_ioterm(struct device *); 130 static void io_subchannel_shutdown(struct subchannel *); 131 132 struct css_driver io_subchannel_driver = { 133 .subchannel_type = SUBCHANNEL_TYPE_IO, 134 .drv = { 135 .name = "io_subchannel", 136 .bus = &css_bus_type, 137 }, 138 .irq = io_subchannel_irq, 139 .notify = io_subchannel_notify, 140 .verify = io_subchannel_verify, 141 .termination = io_subchannel_ioterm, 142 .probe = io_subchannel_probe, 143 .remove = io_subchannel_remove, 144 .shutdown = io_subchannel_shutdown, 145 }; 146 147 struct workqueue_struct *ccw_device_work; 148 struct workqueue_struct *ccw_device_notify_work; 149 wait_queue_head_t ccw_device_init_wq; 150 atomic_t ccw_device_init_count; 151 152 static int __init 153 init_ccw_bus_type (void) 154 { 155 int ret; 156 157 init_waitqueue_head(&ccw_device_init_wq); 158 atomic_set(&ccw_device_init_count, 0); 159 160 ccw_device_work = create_singlethread_workqueue("cio"); 161 if (!ccw_device_work) 162 return -ENOMEM; /* FIXME: better errno ? */ 163 ccw_device_notify_work = create_singlethread_workqueue("cio_notify"); 164 if (!ccw_device_notify_work) { 165 ret = -ENOMEM; /* FIXME: better errno ? */ 166 goto out_err; 167 } 168 slow_path_wq = create_singlethread_workqueue("kslowcrw"); 169 if (!slow_path_wq) { 170 ret = -ENOMEM; /* FIXME: better errno ? */ 171 goto out_err; 172 } 173 if ((ret = bus_register (&ccw_bus_type))) 174 goto out_err; 175 176 if ((ret = driver_register(&io_subchannel_driver.drv))) 177 goto out_err; 178 179 wait_event(ccw_device_init_wq, 180 atomic_read(&ccw_device_init_count) == 0); 181 flush_workqueue(ccw_device_work); 182 return 0; 183 out_err: 184 if (ccw_device_work) 185 destroy_workqueue(ccw_device_work); 186 if (ccw_device_notify_work) 187 destroy_workqueue(ccw_device_notify_work); 188 if (slow_path_wq) 189 destroy_workqueue(slow_path_wq); 190 return ret; 191 } 192 193 static void __exit 194 cleanup_ccw_bus_type (void) 195 { 196 driver_unregister(&io_subchannel_driver.drv); 197 bus_unregister(&ccw_bus_type); 198 destroy_workqueue(ccw_device_notify_work); 199 destroy_workqueue(ccw_device_work); 200 } 201 202 subsys_initcall(init_ccw_bus_type); 203 module_exit(cleanup_ccw_bus_type); 204 205 /************************ device handling **************************/ 206 207 /* 208 * A ccw_device has some interfaces in sysfs in addition to the 209 * standard ones. 210 * The following entries are designed to export the information which 211 * resided in 2.4 in /proc/subchannels. Subchannel and device number 212 * are obvious, so they don't have an entry :) 213 * TODO: Split chpids and pimpampom up? Where is "in use" in the tree? 214 */ 215 static ssize_t 216 chpids_show (struct device * dev, struct device_attribute *attr, char * buf) 217 { 218 struct subchannel *sch = to_subchannel(dev); 219 struct chsc_ssd_info *ssd = &sch->ssd_info; 220 ssize_t ret = 0; 221 int chp; 222 int mask; 223 224 for (chp = 0; chp < 8; chp++) { 225 mask = 0x80 >> chp; 226 if (ssd->path_mask & mask) 227 ret += sprintf(buf + ret, "%02x ", ssd->chpid[chp].id); 228 else 229 ret += sprintf(buf + ret, "00 "); 230 } 231 ret += sprintf (buf+ret, "\n"); 232 return min((ssize_t)PAGE_SIZE, ret); 233 } 234 235 static ssize_t 236 pimpampom_show (struct device * dev, struct device_attribute *attr, char * buf) 237 { 238 struct subchannel *sch = to_subchannel(dev); 239 struct pmcw *pmcw = &sch->schib.pmcw; 240 241 return sprintf (buf, "%02x %02x %02x\n", 242 pmcw->pim, pmcw->pam, pmcw->pom); 243 } 244 245 static ssize_t 246 devtype_show (struct device *dev, struct device_attribute *attr, char *buf) 247 { 248 struct ccw_device *cdev = to_ccwdev(dev); 249 struct ccw_device_id *id = &(cdev->id); 250 251 if (id->dev_type != 0) 252 return sprintf(buf, "%04x/%02x\n", 253 id->dev_type, id->dev_model); 254 else 255 return sprintf(buf, "n/a\n"); 256 } 257 258 static ssize_t 259 cutype_show (struct device *dev, struct device_attribute *attr, char *buf) 260 { 261 struct ccw_device *cdev = to_ccwdev(dev); 262 struct ccw_device_id *id = &(cdev->id); 263 264 return sprintf(buf, "%04x/%02x\n", 265 id->cu_type, id->cu_model); 266 } 267 268 static ssize_t 269 modalias_show (struct device *dev, struct device_attribute *attr, char *buf) 270 { 271 struct ccw_device *cdev = to_ccwdev(dev); 272 struct ccw_device_id *id = &(cdev->id); 273 int len; 274 275 len = snprint_alias(buf, PAGE_SIZE, id, "\n") + 1; 276 277 return len > PAGE_SIZE ? PAGE_SIZE : len; 278 } 279 280 static ssize_t 281 online_show (struct device *dev, struct device_attribute *attr, char *buf) 282 { 283 struct ccw_device *cdev = to_ccwdev(dev); 284 285 return sprintf(buf, cdev->online ? "1\n" : "0\n"); 286 } 287 288 int ccw_device_is_orphan(struct ccw_device *cdev) 289 { 290 return sch_is_pseudo_sch(to_subchannel(cdev->dev.parent)); 291 } 292 293 static void ccw_device_unregister(struct ccw_device *cdev) 294 { 295 if (test_and_clear_bit(1, &cdev->private->registered)) 296 device_del(&cdev->dev); 297 } 298 299 static void 300 ccw_device_remove_disconnected(struct ccw_device *cdev) 301 { 302 struct subchannel *sch; 303 unsigned long flags; 304 /* 305 * Forced offline in disconnected state means 306 * 'throw away device'. 307 */ 308 if (ccw_device_is_orphan(cdev)) { 309 /* Deregister ccw device. */ 310 spin_lock_irqsave(cdev->ccwlock, flags); 311 cdev->private->state = DEV_STATE_NOT_OPER; 312 spin_unlock_irqrestore(cdev->ccwlock, flags); 313 ccw_device_unregister(cdev); 314 put_device(&cdev->dev); 315 return ; 316 } 317 sch = to_subchannel(cdev->dev.parent); 318 css_sch_device_unregister(sch); 319 /* Reset intparm to zeroes. */ 320 sch->schib.pmcw.intparm = 0; 321 cio_modify(sch); 322 put_device(&sch->dev); 323 } 324 325 int 326 ccw_device_set_offline(struct ccw_device *cdev) 327 { 328 int ret; 329 330 if (!cdev) 331 return -ENODEV; 332 if (!cdev->online || !cdev->drv) 333 return -EINVAL; 334 335 if (cdev->drv->set_offline) { 336 ret = cdev->drv->set_offline(cdev); 337 if (ret != 0) 338 return ret; 339 } 340 cdev->online = 0; 341 spin_lock_irq(cdev->ccwlock); 342 ret = ccw_device_offline(cdev); 343 if (ret == -ENODEV) { 344 if (cdev->private->state != DEV_STATE_NOT_OPER) { 345 cdev->private->state = DEV_STATE_OFFLINE; 346 dev_fsm_event(cdev, DEV_EVENT_NOTOPER); 347 } 348 spin_unlock_irq(cdev->ccwlock); 349 return ret; 350 } 351 spin_unlock_irq(cdev->ccwlock); 352 if (ret == 0) 353 wait_event(cdev->private->wait_q, dev_fsm_final_state(cdev)); 354 else { 355 pr_debug("ccw_device_offline returned %d, device %s\n", 356 ret, cdev->dev.bus_id); 357 cdev->online = 1; 358 } 359 return ret; 360 } 361 362 int 363 ccw_device_set_online(struct ccw_device *cdev) 364 { 365 int ret; 366 367 if (!cdev) 368 return -ENODEV; 369 if (cdev->online || !cdev->drv) 370 return -EINVAL; 371 372 spin_lock_irq(cdev->ccwlock); 373 ret = ccw_device_online(cdev); 374 spin_unlock_irq(cdev->ccwlock); 375 if (ret == 0) 376 wait_event(cdev->private->wait_q, dev_fsm_final_state(cdev)); 377 else { 378 pr_debug("ccw_device_online returned %d, device %s\n", 379 ret, cdev->dev.bus_id); 380 return ret; 381 } 382 if (cdev->private->state != DEV_STATE_ONLINE) 383 return -ENODEV; 384 if (!cdev->drv->set_online || cdev->drv->set_online(cdev) == 0) { 385 cdev->online = 1; 386 return 0; 387 } 388 spin_lock_irq(cdev->ccwlock); 389 ret = ccw_device_offline(cdev); 390 spin_unlock_irq(cdev->ccwlock); 391 if (ret == 0) 392 wait_event(cdev->private->wait_q, dev_fsm_final_state(cdev)); 393 else 394 pr_debug("ccw_device_offline returned %d, device %s\n", 395 ret, cdev->dev.bus_id); 396 return (ret == 0) ? -ENODEV : ret; 397 } 398 399 static void online_store_handle_offline(struct ccw_device *cdev) 400 { 401 if (cdev->private->state == DEV_STATE_DISCONNECTED) 402 ccw_device_remove_disconnected(cdev); 403 else if (cdev->drv && cdev->drv->set_offline) 404 ccw_device_set_offline(cdev); 405 } 406 407 static int online_store_recog_and_online(struct ccw_device *cdev) 408 { 409 int ret; 410 411 /* Do device recognition, if needed. */ 412 if (cdev->id.cu_type == 0) { 413 ret = ccw_device_recognition(cdev); 414 if (ret) { 415 printk(KERN_WARNING"Couldn't start recognition " 416 "for device %s (ret=%d)\n", 417 cdev->dev.bus_id, ret); 418 return ret; 419 } 420 wait_event(cdev->private->wait_q, 421 cdev->private->flags.recog_done); 422 } 423 if (cdev->drv && cdev->drv->set_online) 424 ccw_device_set_online(cdev); 425 return 0; 426 } 427 static void online_store_handle_online(struct ccw_device *cdev, int force) 428 { 429 int ret; 430 431 ret = online_store_recog_and_online(cdev); 432 if (ret) 433 return; 434 if (force && cdev->private->state == DEV_STATE_BOXED) { 435 ret = ccw_device_stlck(cdev); 436 if (ret) { 437 printk(KERN_WARNING"ccw_device_stlck for device %s " 438 "returned %d!\n", cdev->dev.bus_id, ret); 439 return; 440 } 441 if (cdev->id.cu_type == 0) 442 cdev->private->state = DEV_STATE_NOT_OPER; 443 online_store_recog_and_online(cdev); 444 } 445 446 } 447 448 static ssize_t online_store (struct device *dev, struct device_attribute *attr, 449 const char *buf, size_t count) 450 { 451 struct ccw_device *cdev = to_ccwdev(dev); 452 int i, force; 453 char *tmp; 454 455 if (atomic_cmpxchg(&cdev->private->onoff, 0, 1) != 0) 456 return -EAGAIN; 457 458 if (cdev->drv && !try_module_get(cdev->drv->owner)) { 459 atomic_set(&cdev->private->onoff, 0); 460 return -EINVAL; 461 } 462 if (!strncmp(buf, "force\n", count)) { 463 force = 1; 464 i = 1; 465 } else { 466 force = 0; 467 i = simple_strtoul(buf, &tmp, 16); 468 } 469 470 switch (i) { 471 case 0: 472 online_store_handle_offline(cdev); 473 break; 474 case 1: 475 online_store_handle_online(cdev, force); 476 break; 477 default: 478 count = -EINVAL; 479 } 480 if (cdev->drv) 481 module_put(cdev->drv->owner); 482 atomic_set(&cdev->private->onoff, 0); 483 return count; 484 } 485 486 static ssize_t 487 available_show (struct device *dev, struct device_attribute *attr, char *buf) 488 { 489 struct ccw_device *cdev = to_ccwdev(dev); 490 struct subchannel *sch; 491 492 if (ccw_device_is_orphan(cdev)) 493 return sprintf(buf, "no device\n"); 494 switch (cdev->private->state) { 495 case DEV_STATE_BOXED: 496 return sprintf(buf, "boxed\n"); 497 case DEV_STATE_DISCONNECTED: 498 case DEV_STATE_DISCONNECTED_SENSE_ID: 499 case DEV_STATE_NOT_OPER: 500 sch = to_subchannel(dev->parent); 501 if (!sch->lpm) 502 return sprintf(buf, "no path\n"); 503 else 504 return sprintf(buf, "no device\n"); 505 default: 506 /* All other states considered fine. */ 507 return sprintf(buf, "good\n"); 508 } 509 } 510 511 static DEVICE_ATTR(chpids, 0444, chpids_show, NULL); 512 static DEVICE_ATTR(pimpampom, 0444, pimpampom_show, NULL); 513 static DEVICE_ATTR(devtype, 0444, devtype_show, NULL); 514 static DEVICE_ATTR(cutype, 0444, cutype_show, NULL); 515 static DEVICE_ATTR(modalias, 0444, modalias_show, NULL); 516 static DEVICE_ATTR(online, 0644, online_show, online_store); 517 extern struct device_attribute dev_attr_cmb_enable; 518 static DEVICE_ATTR(availability, 0444, available_show, NULL); 519 520 static struct attribute * subch_attrs[] = { 521 &dev_attr_chpids.attr, 522 &dev_attr_pimpampom.attr, 523 NULL, 524 }; 525 526 static struct attribute_group subch_attr_group = { 527 .attrs = subch_attrs, 528 }; 529 530 struct attribute_group *subch_attr_groups[] = { 531 &subch_attr_group, 532 NULL, 533 }; 534 535 static struct attribute * ccwdev_attrs[] = { 536 &dev_attr_devtype.attr, 537 &dev_attr_cutype.attr, 538 &dev_attr_modalias.attr, 539 &dev_attr_online.attr, 540 &dev_attr_cmb_enable.attr, 541 &dev_attr_availability.attr, 542 NULL, 543 }; 544 545 static struct attribute_group ccwdev_attr_group = { 546 .attrs = ccwdev_attrs, 547 }; 548 549 struct attribute_group *ccwdev_attr_groups[] = { 550 &ccwdev_attr_group, 551 NULL, 552 }; 553 554 /* this is a simple abstraction for device_register that sets the 555 * correct bus type and adds the bus specific files */ 556 static int ccw_device_register(struct ccw_device *cdev) 557 { 558 struct device *dev = &cdev->dev; 559 int ret; 560 561 dev->bus = &ccw_bus_type; 562 563 if ((ret = device_add(dev))) 564 return ret; 565 566 set_bit(1, &cdev->private->registered); 567 return ret; 568 } 569 570 struct match_data { 571 struct ccw_dev_id dev_id; 572 struct ccw_device * sibling; 573 }; 574 575 static int 576 match_devno(struct device * dev, void * data) 577 { 578 struct match_data * d = data; 579 struct ccw_device * cdev; 580 581 cdev = to_ccwdev(dev); 582 if ((cdev->private->state == DEV_STATE_DISCONNECTED) && 583 !ccw_device_is_orphan(cdev) && 584 ccw_dev_id_is_equal(&cdev->private->dev_id, &d->dev_id) && 585 (cdev != d->sibling)) 586 return 1; 587 return 0; 588 } 589 590 static struct ccw_device * get_disc_ccwdev_by_dev_id(struct ccw_dev_id *dev_id, 591 struct ccw_device *sibling) 592 { 593 struct device *dev; 594 struct match_data data; 595 596 data.dev_id = *dev_id; 597 data.sibling = sibling; 598 dev = bus_find_device(&ccw_bus_type, NULL, &data, match_devno); 599 600 return dev ? to_ccwdev(dev) : NULL; 601 } 602 603 static int match_orphan(struct device *dev, void *data) 604 { 605 struct ccw_dev_id *dev_id; 606 struct ccw_device *cdev; 607 608 dev_id = data; 609 cdev = to_ccwdev(dev); 610 return ccw_dev_id_is_equal(&cdev->private->dev_id, dev_id); 611 } 612 613 static struct ccw_device * 614 get_orphaned_ccwdev_by_dev_id(struct channel_subsystem *css, 615 struct ccw_dev_id *dev_id) 616 { 617 struct device *dev; 618 619 dev = device_find_child(&css->pseudo_subchannel->dev, dev_id, 620 match_orphan); 621 622 return dev ? to_ccwdev(dev) : NULL; 623 } 624 625 static void 626 ccw_device_add_changed(struct work_struct *work) 627 { 628 struct ccw_device_private *priv; 629 struct ccw_device *cdev; 630 631 priv = container_of(work, struct ccw_device_private, kick_work); 632 cdev = priv->cdev; 633 if (device_add(&cdev->dev)) { 634 put_device(&cdev->dev); 635 return; 636 } 637 set_bit(1, &cdev->private->registered); 638 } 639 640 void ccw_device_do_unreg_rereg(struct work_struct *work) 641 { 642 struct ccw_device_private *priv; 643 struct ccw_device *cdev; 644 struct subchannel *sch; 645 646 priv = container_of(work, struct ccw_device_private, kick_work); 647 cdev = priv->cdev; 648 sch = to_subchannel(cdev->dev.parent); 649 650 ccw_device_unregister(cdev); 651 PREPARE_WORK(&cdev->private->kick_work, 652 ccw_device_add_changed); 653 queue_work(ccw_device_work, &cdev->private->kick_work); 654 } 655 656 static void 657 ccw_device_release(struct device *dev) 658 { 659 struct ccw_device *cdev; 660 661 cdev = to_ccwdev(dev); 662 kfree(cdev->private); 663 kfree(cdev); 664 } 665 666 static struct ccw_device * io_subchannel_allocate_dev(struct subchannel *sch) 667 { 668 struct ccw_device *cdev; 669 670 cdev = kzalloc(sizeof(*cdev), GFP_KERNEL); 671 if (cdev) { 672 cdev->private = kzalloc(sizeof(struct ccw_device_private), 673 GFP_KERNEL | GFP_DMA); 674 if (cdev->private) 675 return cdev; 676 } 677 kfree(cdev); 678 return ERR_PTR(-ENOMEM); 679 } 680 681 static int io_subchannel_initialize_dev(struct subchannel *sch, 682 struct ccw_device *cdev) 683 { 684 cdev->private->cdev = cdev; 685 atomic_set(&cdev->private->onoff, 0); 686 cdev->dev.parent = &sch->dev; 687 cdev->dev.release = ccw_device_release; 688 INIT_LIST_HEAD(&cdev->private->kick_work.entry); 689 cdev->dev.groups = ccwdev_attr_groups; 690 /* Do first half of device_register. */ 691 device_initialize(&cdev->dev); 692 if (!get_device(&sch->dev)) { 693 if (cdev->dev.release) 694 cdev->dev.release(&cdev->dev); 695 return -ENODEV; 696 } 697 return 0; 698 } 699 700 static struct ccw_device * io_subchannel_create_ccwdev(struct subchannel *sch) 701 { 702 struct ccw_device *cdev; 703 int ret; 704 705 cdev = io_subchannel_allocate_dev(sch); 706 if (!IS_ERR(cdev)) { 707 ret = io_subchannel_initialize_dev(sch, cdev); 708 if (ret) { 709 kfree(cdev); 710 cdev = ERR_PTR(ret); 711 } 712 } 713 return cdev; 714 } 715 716 static int io_subchannel_recog(struct ccw_device *, struct subchannel *); 717 718 static void sch_attach_device(struct subchannel *sch, 719 struct ccw_device *cdev) 720 { 721 css_update_ssd_info(sch); 722 spin_lock_irq(sch->lock); 723 sch->dev.driver_data = cdev; 724 cdev->private->schid = sch->schid; 725 cdev->ccwlock = sch->lock; 726 device_trigger_reprobe(sch); 727 spin_unlock_irq(sch->lock); 728 } 729 730 static void sch_attach_disconnected_device(struct subchannel *sch, 731 struct ccw_device *cdev) 732 { 733 struct subchannel *other_sch; 734 int ret; 735 736 other_sch = to_subchannel(get_device(cdev->dev.parent)); 737 ret = device_move(&cdev->dev, &sch->dev); 738 if (ret) { 739 CIO_MSG_EVENT(2, "Moving disconnected device 0.%x.%04x failed " 740 "(ret=%d)!\n", cdev->private->dev_id.ssid, 741 cdev->private->dev_id.devno, ret); 742 put_device(&other_sch->dev); 743 return; 744 } 745 other_sch->dev.driver_data = NULL; 746 /* No need to keep a subchannel without ccw device around. */ 747 css_sch_device_unregister(other_sch); 748 put_device(&other_sch->dev); 749 sch_attach_device(sch, cdev); 750 } 751 752 static void sch_attach_orphaned_device(struct subchannel *sch, 753 struct ccw_device *cdev) 754 { 755 int ret; 756 757 /* Try to move the ccw device to its new subchannel. */ 758 ret = device_move(&cdev->dev, &sch->dev); 759 if (ret) { 760 CIO_MSG_EVENT(0, "Moving device 0.%x.%04x from orphanage " 761 "failed (ret=%d)!\n", 762 cdev->private->dev_id.ssid, 763 cdev->private->dev_id.devno, ret); 764 return; 765 } 766 sch_attach_device(sch, cdev); 767 } 768 769 static void sch_create_and_recog_new_device(struct subchannel *sch) 770 { 771 struct ccw_device *cdev; 772 773 /* Need to allocate a new ccw device. */ 774 cdev = io_subchannel_create_ccwdev(sch); 775 if (IS_ERR(cdev)) { 776 /* OK, we did everything we could... */ 777 css_sch_device_unregister(sch); 778 return; 779 } 780 spin_lock_irq(sch->lock); 781 sch->dev.driver_data = cdev; 782 spin_unlock_irq(sch->lock); 783 /* Start recognition for the new ccw device. */ 784 if (io_subchannel_recog(cdev, sch)) { 785 spin_lock_irq(sch->lock); 786 sch->dev.driver_data = NULL; 787 spin_unlock_irq(sch->lock); 788 if (cdev->dev.release) 789 cdev->dev.release(&cdev->dev); 790 css_sch_device_unregister(sch); 791 } 792 } 793 794 795 void ccw_device_move_to_orphanage(struct work_struct *work) 796 { 797 struct ccw_device_private *priv; 798 struct ccw_device *cdev; 799 struct ccw_device *replacing_cdev; 800 struct subchannel *sch; 801 int ret; 802 struct channel_subsystem *css; 803 struct ccw_dev_id dev_id; 804 805 priv = container_of(work, struct ccw_device_private, kick_work); 806 cdev = priv->cdev; 807 sch = to_subchannel(cdev->dev.parent); 808 css = to_css(sch->dev.parent); 809 dev_id.devno = sch->schib.pmcw.dev; 810 dev_id.ssid = sch->schid.ssid; 811 812 /* 813 * Move the orphaned ccw device to the orphanage so the replacing 814 * ccw device can take its place on the subchannel. 815 */ 816 ret = device_move(&cdev->dev, &css->pseudo_subchannel->dev); 817 if (ret) { 818 CIO_MSG_EVENT(0, "Moving device 0.%x.%04x to orphanage failed " 819 "(ret=%d)!\n", cdev->private->dev_id.ssid, 820 cdev->private->dev_id.devno, ret); 821 return; 822 } 823 cdev->ccwlock = css->pseudo_subchannel->lock; 824 /* 825 * Search for the replacing ccw device 826 * - among the disconnected devices 827 * - in the orphanage 828 */ 829 replacing_cdev = get_disc_ccwdev_by_dev_id(&dev_id, cdev); 830 if (replacing_cdev) { 831 sch_attach_disconnected_device(sch, replacing_cdev); 832 return; 833 } 834 replacing_cdev = get_orphaned_ccwdev_by_dev_id(css, &dev_id); 835 if (replacing_cdev) { 836 sch_attach_orphaned_device(sch, replacing_cdev); 837 return; 838 } 839 sch_create_and_recog_new_device(sch); 840 } 841 842 /* 843 * Register recognized device. 844 */ 845 static void 846 io_subchannel_register(struct work_struct *work) 847 { 848 struct ccw_device_private *priv; 849 struct ccw_device *cdev; 850 struct subchannel *sch; 851 int ret; 852 unsigned long flags; 853 854 priv = container_of(work, struct ccw_device_private, kick_work); 855 cdev = priv->cdev; 856 sch = to_subchannel(cdev->dev.parent); 857 css_update_ssd_info(sch); 858 /* 859 * io_subchannel_register() will also be called after device 860 * recognition has been done for a boxed device (which will already 861 * be registered). We need to reprobe since we may now have sense id 862 * information. 863 */ 864 if (klist_node_attached(&cdev->dev.knode_parent)) { 865 if (!cdev->drv) { 866 ret = device_reprobe(&cdev->dev); 867 if (ret) 868 /* We can't do much here. */ 869 dev_info(&cdev->dev, "device_reprobe() returned" 870 " %d\n", ret); 871 } 872 goto out; 873 } 874 /* 875 * Now we know this subchannel will stay, we can throw 876 * our delayed uevent. 877 */ 878 sch->dev.uevent_suppress = 0; 879 kobject_uevent(&sch->dev.kobj, KOBJ_ADD); 880 /* make it known to the system */ 881 ret = ccw_device_register(cdev); 882 if (ret) { 883 printk (KERN_WARNING "%s: could not register %s\n", 884 __func__, cdev->dev.bus_id); 885 put_device(&cdev->dev); 886 spin_lock_irqsave(sch->lock, flags); 887 sch->dev.driver_data = NULL; 888 spin_unlock_irqrestore(sch->lock, flags); 889 kfree (cdev->private); 890 kfree (cdev); 891 put_device(&sch->dev); 892 if (atomic_dec_and_test(&ccw_device_init_count)) 893 wake_up(&ccw_device_init_wq); 894 return; 895 } 896 put_device(&cdev->dev); 897 out: 898 cdev->private->flags.recog_done = 1; 899 put_device(&sch->dev); 900 wake_up(&cdev->private->wait_q); 901 if (atomic_dec_and_test(&ccw_device_init_count)) 902 wake_up(&ccw_device_init_wq); 903 } 904 905 void 906 ccw_device_call_sch_unregister(struct work_struct *work) 907 { 908 struct ccw_device_private *priv; 909 struct ccw_device *cdev; 910 struct subchannel *sch; 911 912 priv = container_of(work, struct ccw_device_private, kick_work); 913 cdev = priv->cdev; 914 sch = to_subchannel(cdev->dev.parent); 915 css_sch_device_unregister(sch); 916 /* Reset intparm to zeroes. */ 917 sch->schib.pmcw.intparm = 0; 918 cio_modify(sch); 919 put_device(&cdev->dev); 920 put_device(&sch->dev); 921 } 922 923 /* 924 * subchannel recognition done. Called from the state machine. 925 */ 926 void 927 io_subchannel_recog_done(struct ccw_device *cdev) 928 { 929 struct subchannel *sch; 930 931 if (css_init_done == 0) { 932 cdev->private->flags.recog_done = 1; 933 return; 934 } 935 switch (cdev->private->state) { 936 case DEV_STATE_NOT_OPER: 937 cdev->private->flags.recog_done = 1; 938 /* Remove device found not operational. */ 939 if (!get_device(&cdev->dev)) 940 break; 941 sch = to_subchannel(cdev->dev.parent); 942 PREPARE_WORK(&cdev->private->kick_work, 943 ccw_device_call_sch_unregister); 944 queue_work(slow_path_wq, &cdev->private->kick_work); 945 if (atomic_dec_and_test(&ccw_device_init_count)) 946 wake_up(&ccw_device_init_wq); 947 break; 948 case DEV_STATE_BOXED: 949 /* Device did not respond in time. */ 950 case DEV_STATE_OFFLINE: 951 /* 952 * We can't register the device in interrupt context so 953 * we schedule a work item. 954 */ 955 if (!get_device(&cdev->dev)) 956 break; 957 PREPARE_WORK(&cdev->private->kick_work, 958 io_subchannel_register); 959 queue_work(slow_path_wq, &cdev->private->kick_work); 960 break; 961 } 962 } 963 964 static int 965 io_subchannel_recog(struct ccw_device *cdev, struct subchannel *sch) 966 { 967 int rc; 968 struct ccw_device_private *priv; 969 970 sch->dev.driver_data = cdev; 971 sch->driver = &io_subchannel_driver; 972 cdev->ccwlock = sch->lock; 973 974 /* Init private data. */ 975 priv = cdev->private; 976 priv->dev_id.devno = sch->schib.pmcw.dev; 977 priv->dev_id.ssid = sch->schid.ssid; 978 priv->schid = sch->schid; 979 priv->state = DEV_STATE_NOT_OPER; 980 INIT_LIST_HEAD(&priv->cmb_list); 981 init_waitqueue_head(&priv->wait_q); 982 init_timer(&priv->timer); 983 984 /* Set an initial name for the device. */ 985 snprintf (cdev->dev.bus_id, BUS_ID_SIZE, "0.%x.%04x", 986 sch->schid.ssid, sch->schib.pmcw.dev); 987 988 /* Increase counter of devices currently in recognition. */ 989 atomic_inc(&ccw_device_init_count); 990 991 /* Start async. device sensing. */ 992 spin_lock_irq(sch->lock); 993 rc = ccw_device_recognition(cdev); 994 spin_unlock_irq(sch->lock); 995 if (rc) { 996 if (atomic_dec_and_test(&ccw_device_init_count)) 997 wake_up(&ccw_device_init_wq); 998 } 999 return rc; 1000 } 1001 1002 static void ccw_device_move_to_sch(struct work_struct *work) 1003 { 1004 struct ccw_device_private *priv; 1005 int rc; 1006 struct subchannel *sch; 1007 struct ccw_device *cdev; 1008 struct subchannel *former_parent; 1009 1010 priv = container_of(work, struct ccw_device_private, kick_work); 1011 sch = priv->sch; 1012 cdev = priv->cdev; 1013 former_parent = ccw_device_is_orphan(cdev) ? 1014 NULL : to_subchannel(get_device(cdev->dev.parent)); 1015 mutex_lock(&sch->reg_mutex); 1016 /* Try to move the ccw device to its new subchannel. */ 1017 rc = device_move(&cdev->dev, &sch->dev); 1018 mutex_unlock(&sch->reg_mutex); 1019 if (rc) { 1020 CIO_MSG_EVENT(2, "Moving device 0.%x.%04x to subchannel " 1021 "0.%x.%04x failed (ret=%d)!\n", 1022 cdev->private->dev_id.ssid, 1023 cdev->private->dev_id.devno, sch->schid.ssid, 1024 sch->schid.sch_no, rc); 1025 css_sch_device_unregister(sch); 1026 goto out; 1027 } 1028 if (former_parent) { 1029 spin_lock_irq(former_parent->lock); 1030 former_parent->dev.driver_data = NULL; 1031 spin_unlock_irq(former_parent->lock); 1032 css_sch_device_unregister(former_parent); 1033 /* Reset intparm to zeroes. */ 1034 former_parent->schib.pmcw.intparm = 0; 1035 cio_modify(former_parent); 1036 } 1037 sch_attach_device(sch, cdev); 1038 out: 1039 if (former_parent) 1040 put_device(&former_parent->dev); 1041 put_device(&cdev->dev); 1042 } 1043 1044 static int 1045 io_subchannel_probe (struct subchannel *sch) 1046 { 1047 struct ccw_device *cdev; 1048 int rc; 1049 unsigned long flags; 1050 struct ccw_dev_id dev_id; 1051 1052 if (sch->dev.driver_data) { 1053 /* 1054 * This subchannel already has an associated ccw_device. 1055 * Register it and exit. This happens for all early 1056 * device, e.g. the console. 1057 */ 1058 cdev = sch->dev.driver_data; 1059 device_initialize(&cdev->dev); 1060 ccw_device_register(cdev); 1061 /* 1062 * Check if the device is already online. If it is 1063 * the reference count needs to be corrected 1064 * (see ccw_device_online and css_init_done for the 1065 * ugly details). 1066 */ 1067 if (cdev->private->state != DEV_STATE_NOT_OPER && 1068 cdev->private->state != DEV_STATE_OFFLINE && 1069 cdev->private->state != DEV_STATE_BOXED) 1070 get_device(&cdev->dev); 1071 return 0; 1072 } 1073 /* 1074 * First check if a fitting device may be found amongst the 1075 * disconnected devices or in the orphanage. 1076 */ 1077 dev_id.devno = sch->schib.pmcw.dev; 1078 dev_id.ssid = sch->schid.ssid; 1079 cdev = get_disc_ccwdev_by_dev_id(&dev_id, NULL); 1080 if (!cdev) 1081 cdev = get_orphaned_ccwdev_by_dev_id(to_css(sch->dev.parent), 1082 &dev_id); 1083 if (cdev) { 1084 /* 1085 * Schedule moving the device until when we have a registered 1086 * subchannel to move to and succeed the probe. We can 1087 * unregister later again, when the probe is through. 1088 */ 1089 cdev->private->sch = sch; 1090 PREPARE_WORK(&cdev->private->kick_work, 1091 ccw_device_move_to_sch); 1092 queue_work(slow_path_wq, &cdev->private->kick_work); 1093 return 0; 1094 } 1095 cdev = io_subchannel_create_ccwdev(sch); 1096 if (IS_ERR(cdev)) 1097 return PTR_ERR(cdev); 1098 1099 rc = io_subchannel_recog(cdev, sch); 1100 if (rc) { 1101 spin_lock_irqsave(sch->lock, flags); 1102 sch->dev.driver_data = NULL; 1103 spin_unlock_irqrestore(sch->lock, flags); 1104 if (cdev->dev.release) 1105 cdev->dev.release(&cdev->dev); 1106 } 1107 1108 return rc; 1109 } 1110 1111 static int 1112 io_subchannel_remove (struct subchannel *sch) 1113 { 1114 struct ccw_device *cdev; 1115 unsigned long flags; 1116 1117 if (!sch->dev.driver_data) 1118 return 0; 1119 cdev = sch->dev.driver_data; 1120 /* Set ccw device to not operational and drop reference. */ 1121 spin_lock_irqsave(cdev->ccwlock, flags); 1122 sch->dev.driver_data = NULL; 1123 cdev->private->state = DEV_STATE_NOT_OPER; 1124 spin_unlock_irqrestore(cdev->ccwlock, flags); 1125 ccw_device_unregister(cdev); 1126 put_device(&cdev->dev); 1127 return 0; 1128 } 1129 1130 static int 1131 io_subchannel_notify(struct device *dev, int event) 1132 { 1133 struct ccw_device *cdev; 1134 1135 cdev = dev->driver_data; 1136 if (!cdev) 1137 return 0; 1138 if (!cdev->drv) 1139 return 0; 1140 if (!cdev->online) 1141 return 0; 1142 return cdev->drv->notify ? cdev->drv->notify(cdev, event) : 0; 1143 } 1144 1145 static void 1146 io_subchannel_verify(struct device *dev) 1147 { 1148 struct ccw_device *cdev; 1149 1150 cdev = dev->driver_data; 1151 if (cdev) 1152 dev_fsm_event(cdev, DEV_EVENT_VERIFY); 1153 } 1154 1155 static void 1156 io_subchannel_ioterm(struct device *dev) 1157 { 1158 struct ccw_device *cdev; 1159 1160 cdev = dev->driver_data; 1161 if (!cdev) 1162 return; 1163 /* Internal I/O will be retried by the interrupt handler. */ 1164 if (cdev->private->flags.intretry) 1165 return; 1166 cdev->private->state = DEV_STATE_CLEAR_VERIFY; 1167 if (cdev->handler) 1168 cdev->handler(cdev, cdev->private->intparm, 1169 ERR_PTR(-EIO)); 1170 } 1171 1172 static void 1173 io_subchannel_shutdown(struct subchannel *sch) 1174 { 1175 struct ccw_device *cdev; 1176 int ret; 1177 1178 cdev = sch->dev.driver_data; 1179 1180 if (cio_is_console(sch->schid)) 1181 return; 1182 if (!sch->schib.pmcw.ena) 1183 /* Nothing to do. */ 1184 return; 1185 ret = cio_disable_subchannel(sch); 1186 if (ret != -EBUSY) 1187 /* Subchannel is disabled, we're done. */ 1188 return; 1189 cdev->private->state = DEV_STATE_QUIESCE; 1190 if (cdev->handler) 1191 cdev->handler(cdev, cdev->private->intparm, 1192 ERR_PTR(-EIO)); 1193 ret = ccw_device_cancel_halt_clear(cdev); 1194 if (ret == -EBUSY) { 1195 ccw_device_set_timeout(cdev, HZ/10); 1196 wait_event(cdev->private->wait_q, dev_fsm_final_state(cdev)); 1197 } 1198 cio_disable_subchannel(sch); 1199 } 1200 1201 #ifdef CONFIG_CCW_CONSOLE 1202 static struct ccw_device console_cdev; 1203 static struct ccw_device_private console_private; 1204 static int console_cdev_in_use; 1205 1206 static DEFINE_SPINLOCK(ccw_console_lock); 1207 1208 spinlock_t * cio_get_console_lock(void) 1209 { 1210 return &ccw_console_lock; 1211 } 1212 1213 static int 1214 ccw_device_console_enable (struct ccw_device *cdev, struct subchannel *sch) 1215 { 1216 int rc; 1217 1218 /* Initialize the ccw_device structure. */ 1219 cdev->dev.parent= &sch->dev; 1220 rc = io_subchannel_recog(cdev, sch); 1221 if (rc) 1222 return rc; 1223 1224 /* Now wait for the async. recognition to come to an end. */ 1225 spin_lock_irq(cdev->ccwlock); 1226 while (!dev_fsm_final_state(cdev)) 1227 wait_cons_dev(); 1228 rc = -EIO; 1229 if (cdev->private->state != DEV_STATE_OFFLINE) 1230 goto out_unlock; 1231 ccw_device_online(cdev); 1232 while (!dev_fsm_final_state(cdev)) 1233 wait_cons_dev(); 1234 if (cdev->private->state != DEV_STATE_ONLINE) 1235 goto out_unlock; 1236 rc = 0; 1237 out_unlock: 1238 spin_unlock_irq(cdev->ccwlock); 1239 return 0; 1240 } 1241 1242 struct ccw_device * 1243 ccw_device_probe_console(void) 1244 { 1245 struct subchannel *sch; 1246 int ret; 1247 1248 if (xchg(&console_cdev_in_use, 1) != 0) 1249 return ERR_PTR(-EBUSY); 1250 sch = cio_probe_console(); 1251 if (IS_ERR(sch)) { 1252 console_cdev_in_use = 0; 1253 return (void *) sch; 1254 } 1255 memset(&console_cdev, 0, sizeof(struct ccw_device)); 1256 memset(&console_private, 0, sizeof(struct ccw_device_private)); 1257 console_cdev.private = &console_private; 1258 console_private.cdev = &console_cdev; 1259 ret = ccw_device_console_enable(&console_cdev, sch); 1260 if (ret) { 1261 cio_release_console(); 1262 console_cdev_in_use = 0; 1263 return ERR_PTR(ret); 1264 } 1265 console_cdev.online = 1; 1266 return &console_cdev; 1267 } 1268 #endif 1269 1270 /* 1271 * get ccw_device matching the busid, but only if owned by cdrv 1272 */ 1273 static int 1274 __ccwdev_check_busid(struct device *dev, void *id) 1275 { 1276 char *bus_id; 1277 1278 bus_id = id; 1279 1280 return (strncmp(bus_id, dev->bus_id, BUS_ID_SIZE) == 0); 1281 } 1282 1283 1284 struct ccw_device * 1285 get_ccwdev_by_busid(struct ccw_driver *cdrv, const char *bus_id) 1286 { 1287 struct device *dev; 1288 struct device_driver *drv; 1289 1290 drv = get_driver(&cdrv->driver); 1291 if (!drv) 1292 return NULL; 1293 1294 dev = driver_find_device(drv, NULL, (void *)bus_id, 1295 __ccwdev_check_busid); 1296 put_driver(drv); 1297 1298 return dev ? to_ccwdev(dev) : NULL; 1299 } 1300 1301 /************************** device driver handling ************************/ 1302 1303 /* This is the implementation of the ccw_driver class. The probe, remove 1304 * and release methods are initially very similar to the device_driver 1305 * implementations, with the difference that they have ccw_device 1306 * arguments. 1307 * 1308 * A ccw driver also contains the information that is needed for 1309 * device matching. 1310 */ 1311 static int 1312 ccw_device_probe (struct device *dev) 1313 { 1314 struct ccw_device *cdev = to_ccwdev(dev); 1315 struct ccw_driver *cdrv = to_ccwdrv(dev->driver); 1316 int ret; 1317 1318 cdev->drv = cdrv; /* to let the driver call _set_online */ 1319 1320 ret = cdrv->probe ? cdrv->probe(cdev) : -ENODEV; 1321 1322 if (ret) { 1323 cdev->drv = NULL; 1324 return ret; 1325 } 1326 1327 return 0; 1328 } 1329 1330 static int 1331 ccw_device_remove (struct device *dev) 1332 { 1333 struct ccw_device *cdev = to_ccwdev(dev); 1334 struct ccw_driver *cdrv = cdev->drv; 1335 int ret; 1336 1337 pr_debug("removing device %s\n", cdev->dev.bus_id); 1338 if (cdrv->remove) 1339 cdrv->remove(cdev); 1340 if (cdev->online) { 1341 cdev->online = 0; 1342 spin_lock_irq(cdev->ccwlock); 1343 ret = ccw_device_offline(cdev); 1344 spin_unlock_irq(cdev->ccwlock); 1345 if (ret == 0) 1346 wait_event(cdev->private->wait_q, 1347 dev_fsm_final_state(cdev)); 1348 else 1349 //FIXME: we can't fail! 1350 pr_debug("ccw_device_offline returned %d, device %s\n", 1351 ret, cdev->dev.bus_id); 1352 } 1353 ccw_device_set_timeout(cdev, 0); 1354 cdev->drv = NULL; 1355 return 0; 1356 } 1357 1358 struct bus_type ccw_bus_type = { 1359 .name = "ccw", 1360 .match = ccw_bus_match, 1361 .uevent = ccw_uevent, 1362 .probe = ccw_device_probe, 1363 .remove = ccw_device_remove, 1364 }; 1365 1366 int 1367 ccw_driver_register (struct ccw_driver *cdriver) 1368 { 1369 struct device_driver *drv = &cdriver->driver; 1370 1371 drv->bus = &ccw_bus_type; 1372 drv->name = cdriver->name; 1373 1374 return driver_register(drv); 1375 } 1376 1377 void 1378 ccw_driver_unregister (struct ccw_driver *cdriver) 1379 { 1380 driver_unregister(&cdriver->driver); 1381 } 1382 1383 /* Helper func for qdio. */ 1384 struct subchannel_id 1385 ccw_device_get_subchannel_id(struct ccw_device *cdev) 1386 { 1387 struct subchannel *sch; 1388 1389 sch = to_subchannel(cdev->dev.parent); 1390 return sch->schid; 1391 } 1392 1393 MODULE_LICENSE("GPL"); 1394 EXPORT_SYMBOL(ccw_device_set_online); 1395 EXPORT_SYMBOL(ccw_device_set_offline); 1396 EXPORT_SYMBOL(ccw_driver_register); 1397 EXPORT_SYMBOL(ccw_driver_unregister); 1398 EXPORT_SYMBOL(get_ccwdev_by_busid); 1399 EXPORT_SYMBOL(ccw_bus_type); 1400 EXPORT_SYMBOL(ccw_device_work); 1401 EXPORT_SYMBOL(ccw_device_notify_work); 1402 EXPORT_SYMBOL_GPL(ccw_device_get_subchannel_id); 1403