at v2.6.25-rc2 856 lines 22 kB view raw
1/* 2 * Device probing and sysfs code. 3 * 4 * Copyright (C) 2005-2006 Kristian Hoegsberg <krh@bitplanet.net> 5 * 6 * This program is free software; you can redistribute it and/or modify 7 * it under the terms of the GNU General Public License as published by 8 * the Free Software Foundation; either version 2 of the License, or 9 * (at your option) any later version. 10 * 11 * This program is distributed in the hope that it will be useful, 12 * but WITHOUT ANY WARRANTY; without even the implied warranty of 13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 * GNU General Public License for more details. 15 * 16 * You should have received a copy of the GNU General Public License 17 * along with this program; if not, write to the Free Software Foundation, 18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. 19 */ 20 21#include <linux/module.h> 22#include <linux/wait.h> 23#include <linux/errno.h> 24#include <linux/kthread.h> 25#include <linux/device.h> 26#include <linux/delay.h> 27#include <linux/idr.h> 28#include <linux/rwsem.h> 29#include <asm/semaphore.h> 30#include <asm/system.h> 31#include <linux/ctype.h> 32#include "fw-transaction.h" 33#include "fw-topology.h" 34#include "fw-device.h" 35 36void fw_csr_iterator_init(struct fw_csr_iterator *ci, u32 * p) 37{ 38 ci->p = p + 1; 39 ci->end = ci->p + (p[0] >> 16); 40} 41EXPORT_SYMBOL(fw_csr_iterator_init); 42 43int fw_csr_iterator_next(struct fw_csr_iterator *ci, int *key, int *value) 44{ 45 *key = *ci->p >> 24; 46 *value = *ci->p & 0xffffff; 47 48 return ci->p++ < ci->end; 49} 50EXPORT_SYMBOL(fw_csr_iterator_next); 51 52static int is_fw_unit(struct device *dev); 53 54static int match_unit_directory(u32 * directory, const struct fw_device_id *id) 55{ 56 struct fw_csr_iterator ci; 57 int key, value, match; 58 59 match = 0; 60 fw_csr_iterator_init(&ci, directory); 61 while (fw_csr_iterator_next(&ci, &key, &value)) { 62 if (key == CSR_VENDOR && value == id->vendor) 63 match |= FW_MATCH_VENDOR; 64 if (key == CSR_MODEL && value == id->model) 65 match |= FW_MATCH_MODEL; 66 if (key == CSR_SPECIFIER_ID && value == id->specifier_id) 67 match |= FW_MATCH_SPECIFIER_ID; 68 if (key == CSR_VERSION && value == id->version) 69 match |= FW_MATCH_VERSION; 70 } 71 72 return (match & id->match_flags) == id->match_flags; 73} 74 75static int fw_unit_match(struct device *dev, struct device_driver *drv) 76{ 77 struct fw_unit *unit = fw_unit(dev); 78 struct fw_driver *driver = fw_driver(drv); 79 int i; 80 81 /* We only allow binding to fw_units. */ 82 if (!is_fw_unit(dev)) 83 return 0; 84 85 for (i = 0; driver->id_table[i].match_flags != 0; i++) { 86 if (match_unit_directory(unit->directory, &driver->id_table[i])) 87 return 1; 88 } 89 90 return 0; 91} 92 93static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size) 94{ 95 struct fw_device *device = fw_device(unit->device.parent); 96 struct fw_csr_iterator ci; 97 98 int key, value; 99 int vendor = 0; 100 int model = 0; 101 int specifier_id = 0; 102 int version = 0; 103 104 fw_csr_iterator_init(&ci, &device->config_rom[5]); 105 while (fw_csr_iterator_next(&ci, &key, &value)) { 106 switch (key) { 107 case CSR_VENDOR: 108 vendor = value; 109 break; 110 case CSR_MODEL: 111 model = value; 112 break; 113 } 114 } 115 116 fw_csr_iterator_init(&ci, unit->directory); 117 while (fw_csr_iterator_next(&ci, &key, &value)) { 118 switch (key) { 119 case CSR_SPECIFIER_ID: 120 specifier_id = value; 121 break; 122 case CSR_VERSION: 123 version = value; 124 break; 125 } 126 } 127 128 return snprintf(buffer, buffer_size, 129 "ieee1394:ven%08Xmo%08Xsp%08Xver%08X", 130 vendor, model, specifier_id, version); 131} 132 133static int 134fw_unit_uevent(struct device *dev, struct kobj_uevent_env *env) 135{ 136 struct fw_unit *unit = fw_unit(dev); 137 char modalias[64]; 138 139 get_modalias(unit, modalias, sizeof(modalias)); 140 141 if (add_uevent_var(env, "MODALIAS=%s", modalias)) 142 return -ENOMEM; 143 144 return 0; 145} 146 147struct bus_type fw_bus_type = { 148 .name = "firewire", 149 .match = fw_unit_match, 150}; 151EXPORT_SYMBOL(fw_bus_type); 152 153struct fw_device *fw_device_get(struct fw_device *device) 154{ 155 get_device(&device->device); 156 157 return device; 158} 159 160void fw_device_put(struct fw_device *device) 161{ 162 put_device(&device->device); 163} 164 165static void fw_device_release(struct device *dev) 166{ 167 struct fw_device *device = fw_device(dev); 168 unsigned long flags; 169 170 /* 171 * Take the card lock so we don't set this to NULL while a 172 * FW_NODE_UPDATED callback is being handled. 173 */ 174 spin_lock_irqsave(&device->card->lock, flags); 175 device->node->data = NULL; 176 spin_unlock_irqrestore(&device->card->lock, flags); 177 178 fw_node_put(device->node); 179 fw_card_put(device->card); 180 kfree(device->config_rom); 181 kfree(device); 182} 183 184int fw_device_enable_phys_dma(struct fw_device *device) 185{ 186 int generation = device->generation; 187 188 /* device->node_id, accessed below, must not be older than generation */ 189 smp_rmb(); 190 191 return device->card->driver->enable_phys_dma(device->card, 192 device->node_id, 193 generation); 194} 195EXPORT_SYMBOL(fw_device_enable_phys_dma); 196 197struct config_rom_attribute { 198 struct device_attribute attr; 199 u32 key; 200}; 201 202static ssize_t 203show_immediate(struct device *dev, struct device_attribute *dattr, char *buf) 204{ 205 struct config_rom_attribute *attr = 206 container_of(dattr, struct config_rom_attribute, attr); 207 struct fw_csr_iterator ci; 208 u32 *dir; 209 int key, value; 210 211 if (is_fw_unit(dev)) 212 dir = fw_unit(dev)->directory; 213 else 214 dir = fw_device(dev)->config_rom + 5; 215 216 fw_csr_iterator_init(&ci, dir); 217 while (fw_csr_iterator_next(&ci, &key, &value)) 218 if (attr->key == key) 219 return snprintf(buf, buf ? PAGE_SIZE : 0, 220 "0x%06x\n", value); 221 222 return -ENOENT; 223} 224 225#define IMMEDIATE_ATTR(name, key) \ 226 { __ATTR(name, S_IRUGO, show_immediate, NULL), key } 227 228static ssize_t 229show_text_leaf(struct device *dev, struct device_attribute *dattr, char *buf) 230{ 231 struct config_rom_attribute *attr = 232 container_of(dattr, struct config_rom_attribute, attr); 233 struct fw_csr_iterator ci; 234 u32 *dir, *block = NULL, *p, *end; 235 int length, key, value, last_key = 0; 236 char *b; 237 238 if (is_fw_unit(dev)) 239 dir = fw_unit(dev)->directory; 240 else 241 dir = fw_device(dev)->config_rom + 5; 242 243 fw_csr_iterator_init(&ci, dir); 244 while (fw_csr_iterator_next(&ci, &key, &value)) { 245 if (attr->key == last_key && 246 key == (CSR_DESCRIPTOR | CSR_LEAF)) 247 block = ci.p - 1 + value; 248 last_key = key; 249 } 250 251 if (block == NULL) 252 return -ENOENT; 253 254 length = min(block[0] >> 16, 256U); 255 if (length < 3) 256 return -ENOENT; 257 258 if (block[1] != 0 || block[2] != 0) 259 /* Unknown encoding. */ 260 return -ENOENT; 261 262 if (buf == NULL) 263 return length * 4; 264 265 b = buf; 266 end = &block[length + 1]; 267 for (p = &block[3]; p < end; p++, b += 4) 268 * (u32 *) b = (__force u32) __cpu_to_be32(*p); 269 270 /* Strip trailing whitespace and add newline. */ 271 while (b--, (isspace(*b) || *b == '\0') && b > buf); 272 strcpy(b + 1, "\n"); 273 274 return b + 2 - buf; 275} 276 277#define TEXT_LEAF_ATTR(name, key) \ 278 { __ATTR(name, S_IRUGO, show_text_leaf, NULL), key } 279 280static struct config_rom_attribute config_rom_attributes[] = { 281 IMMEDIATE_ATTR(vendor, CSR_VENDOR), 282 IMMEDIATE_ATTR(hardware_version, CSR_HARDWARE_VERSION), 283 IMMEDIATE_ATTR(specifier_id, CSR_SPECIFIER_ID), 284 IMMEDIATE_ATTR(version, CSR_VERSION), 285 IMMEDIATE_ATTR(model, CSR_MODEL), 286 TEXT_LEAF_ATTR(vendor_name, CSR_VENDOR), 287 TEXT_LEAF_ATTR(model_name, CSR_MODEL), 288 TEXT_LEAF_ATTR(hardware_version_name, CSR_HARDWARE_VERSION), 289}; 290 291static void 292init_fw_attribute_group(struct device *dev, 293 struct device_attribute *attrs, 294 struct fw_attribute_group *group) 295{ 296 struct device_attribute *attr; 297 int i, j; 298 299 for (j = 0; attrs[j].attr.name != NULL; j++) 300 group->attrs[j] = &attrs[j].attr; 301 302 for (i = 0; i < ARRAY_SIZE(config_rom_attributes); i++) { 303 attr = &config_rom_attributes[i].attr; 304 if (attr->show(dev, attr, NULL) < 0) 305 continue; 306 group->attrs[j++] = &attr->attr; 307 } 308 309 BUG_ON(j >= ARRAY_SIZE(group->attrs)); 310 group->attrs[j++] = NULL; 311 group->groups[0] = &group->group; 312 group->groups[1] = NULL; 313 group->group.attrs = group->attrs; 314 dev->groups = group->groups; 315} 316 317static ssize_t 318modalias_show(struct device *dev, 319 struct device_attribute *attr, char *buf) 320{ 321 struct fw_unit *unit = fw_unit(dev); 322 int length; 323 324 length = get_modalias(unit, buf, PAGE_SIZE); 325 strcpy(buf + length, "\n"); 326 327 return length + 1; 328} 329 330static ssize_t 331rom_index_show(struct device *dev, 332 struct device_attribute *attr, char *buf) 333{ 334 struct fw_device *device = fw_device(dev->parent); 335 struct fw_unit *unit = fw_unit(dev); 336 337 return snprintf(buf, PAGE_SIZE, "%d\n", 338 (int)(unit->directory - device->config_rom)); 339} 340 341static struct device_attribute fw_unit_attributes[] = { 342 __ATTR_RO(modalias), 343 __ATTR_RO(rom_index), 344 __ATTR_NULL, 345}; 346 347static ssize_t 348config_rom_show(struct device *dev, struct device_attribute *attr, char *buf) 349{ 350 struct fw_device *device = fw_device(dev); 351 352 memcpy(buf, device->config_rom, device->config_rom_length * 4); 353 354 return device->config_rom_length * 4; 355} 356 357static ssize_t 358guid_show(struct device *dev, struct device_attribute *attr, char *buf) 359{ 360 struct fw_device *device = fw_device(dev); 361 u64 guid; 362 363 guid = ((u64)device->config_rom[3] << 32) | device->config_rom[4]; 364 365 return snprintf(buf, PAGE_SIZE, "0x%016llx\n", 366 (unsigned long long)guid); 367} 368 369static struct device_attribute fw_device_attributes[] = { 370 __ATTR_RO(config_rom), 371 __ATTR_RO(guid), 372 __ATTR_NULL, 373}; 374 375struct read_quadlet_callback_data { 376 struct completion done; 377 int rcode; 378 u32 data; 379}; 380 381static void 382complete_transaction(struct fw_card *card, int rcode, 383 void *payload, size_t length, void *data) 384{ 385 struct read_quadlet_callback_data *callback_data = data; 386 387 if (rcode == RCODE_COMPLETE) 388 callback_data->data = be32_to_cpu(*(__be32 *)payload); 389 callback_data->rcode = rcode; 390 complete(&callback_data->done); 391} 392 393static int 394read_rom(struct fw_device *device, int generation, int index, u32 *data) 395{ 396 struct read_quadlet_callback_data callback_data; 397 struct fw_transaction t; 398 u64 offset; 399 400 /* device->node_id, accessed below, must not be older than generation */ 401 smp_rmb(); 402 403 init_completion(&callback_data.done); 404 405 offset = 0xfffff0000400ULL + index * 4; 406 fw_send_request(device->card, &t, TCODE_READ_QUADLET_REQUEST, 407 device->node_id, generation, device->max_speed, 408 offset, NULL, 4, complete_transaction, &callback_data); 409 410 wait_for_completion(&callback_data.done); 411 412 *data = callback_data.data; 413 414 return callback_data.rcode; 415} 416 417/* 418 * Read the bus info block, perform a speed probe, and read all of the rest of 419 * the config ROM. We do all this with a cached bus generation. If the bus 420 * generation changes under us, read_bus_info_block will fail and get retried. 421 * It's better to start all over in this case because the node from which we 422 * are reading the ROM may have changed the ROM during the reset. 423 */ 424static int read_bus_info_block(struct fw_device *device, int generation) 425{ 426 static u32 rom[256]; 427 u32 stack[16], sp, key; 428 int i, end, length; 429 430 device->max_speed = SCODE_100; 431 432 /* First read the bus info block. */ 433 for (i = 0; i < 5; i++) { 434 if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE) 435 return -1; 436 /* 437 * As per IEEE1212 7.2, during power-up, devices can 438 * reply with a 0 for the first quadlet of the config 439 * rom to indicate that they are booting (for example, 440 * if the firmware is on the disk of a external 441 * harddisk). In that case we just fail, and the 442 * retry mechanism will try again later. 443 */ 444 if (i == 0 && rom[i] == 0) 445 return -1; 446 } 447 448 device->max_speed = device->node->max_speed; 449 450 /* 451 * Determine the speed of 452 * - devices with link speed less than PHY speed, 453 * - devices with 1394b PHY (unless only connected to 1394a PHYs), 454 * - all devices if there are 1394b repeaters. 455 * Note, we cannot use the bus info block's link_spd as starting point 456 * because some buggy firmwares set it lower than necessary and because 457 * 1394-1995 nodes do not have the field. 458 */ 459 if ((rom[2] & 0x7) < device->max_speed || 460 device->max_speed == SCODE_BETA || 461 device->card->beta_repeaters_present) { 462 u32 dummy; 463 464 /* for S1600 and S3200 */ 465 if (device->max_speed == SCODE_BETA) 466 device->max_speed = device->card->link_speed; 467 468 while (device->max_speed > SCODE_100) { 469 if (read_rom(device, generation, 0, &dummy) == 470 RCODE_COMPLETE) 471 break; 472 device->max_speed--; 473 } 474 } 475 476 /* 477 * Now parse the config rom. The config rom is a recursive 478 * directory structure so we parse it using a stack of 479 * references to the blocks that make up the structure. We 480 * push a reference to the root directory on the stack to 481 * start things off. 482 */ 483 length = i; 484 sp = 0; 485 stack[sp++] = 0xc0000005; 486 while (sp > 0) { 487 /* 488 * Pop the next block reference of the stack. The 489 * lower 24 bits is the offset into the config rom, 490 * the upper 8 bits are the type of the reference the 491 * block. 492 */ 493 key = stack[--sp]; 494 i = key & 0xffffff; 495 if (i >= ARRAY_SIZE(rom)) 496 /* 497 * The reference points outside the standard 498 * config rom area, something's fishy. 499 */ 500 return -1; 501 502 /* Read header quadlet for the block to get the length. */ 503 if (read_rom(device, generation, i, &rom[i]) != RCODE_COMPLETE) 504 return -1; 505 end = i + (rom[i] >> 16) + 1; 506 i++; 507 if (end > ARRAY_SIZE(rom)) 508 /* 509 * This block extends outside standard config 510 * area (and the array we're reading it 511 * into). That's broken, so ignore this 512 * device. 513 */ 514 return -1; 515 516 /* 517 * Now read in the block. If this is a directory 518 * block, check the entries as we read them to see if 519 * it references another block, and push it in that case. 520 */ 521 while (i < end) { 522 if (read_rom(device, generation, i, &rom[i]) != 523 RCODE_COMPLETE) 524 return -1; 525 if ((key >> 30) == 3 && (rom[i] >> 30) > 1 && 526 sp < ARRAY_SIZE(stack)) 527 stack[sp++] = i + rom[i]; 528 i++; 529 } 530 if (length < i) 531 length = i; 532 } 533 534 device->config_rom = kmalloc(length * 4, GFP_KERNEL); 535 if (device->config_rom == NULL) 536 return -1; 537 memcpy(device->config_rom, rom, length * 4); 538 device->config_rom_length = length; 539 540 return 0; 541} 542 543static void fw_unit_release(struct device *dev) 544{ 545 struct fw_unit *unit = fw_unit(dev); 546 547 kfree(unit); 548} 549 550static struct device_type fw_unit_type = { 551 .uevent = fw_unit_uevent, 552 .release = fw_unit_release, 553}; 554 555static int is_fw_unit(struct device *dev) 556{ 557 return dev->type == &fw_unit_type; 558} 559 560static void create_units(struct fw_device *device) 561{ 562 struct fw_csr_iterator ci; 563 struct fw_unit *unit; 564 int key, value, i; 565 566 i = 0; 567 fw_csr_iterator_init(&ci, &device->config_rom[5]); 568 while (fw_csr_iterator_next(&ci, &key, &value)) { 569 if (key != (CSR_UNIT | CSR_DIRECTORY)) 570 continue; 571 572 /* 573 * Get the address of the unit directory and try to 574 * match the drivers id_tables against it. 575 */ 576 unit = kzalloc(sizeof(*unit), GFP_KERNEL); 577 if (unit == NULL) { 578 fw_error("failed to allocate memory for unit\n"); 579 continue; 580 } 581 582 unit->directory = ci.p + value - 1; 583 unit->device.bus = &fw_bus_type; 584 unit->device.type = &fw_unit_type; 585 unit->device.parent = &device->device; 586 snprintf(unit->device.bus_id, sizeof(unit->device.bus_id), 587 "%s.%d", device->device.bus_id, i++); 588 589 init_fw_attribute_group(&unit->device, 590 fw_unit_attributes, 591 &unit->attribute_group); 592 if (device_register(&unit->device) < 0) 593 goto skip_unit; 594 595 continue; 596 597 skip_unit: 598 kfree(unit); 599 } 600} 601 602static int shutdown_unit(struct device *device, void *data) 603{ 604 device_unregister(device); 605 606 return 0; 607} 608 609static DECLARE_RWSEM(idr_rwsem); 610static DEFINE_IDR(fw_device_idr); 611int fw_cdev_major; 612 613struct fw_device *fw_device_from_devt(dev_t devt) 614{ 615 struct fw_device *device; 616 617 down_read(&idr_rwsem); 618 device = idr_find(&fw_device_idr, MINOR(devt)); 619 up_read(&idr_rwsem); 620 621 return device; 622} 623 624static void fw_device_shutdown(struct work_struct *work) 625{ 626 struct fw_device *device = 627 container_of(work, struct fw_device, work.work); 628 int minor = MINOR(device->device.devt); 629 630 down_write(&idr_rwsem); 631 idr_remove(&fw_device_idr, minor); 632 up_write(&idr_rwsem); 633 634 fw_device_cdev_remove(device); 635 device_for_each_child(&device->device, NULL, shutdown_unit); 636 device_unregister(&device->device); 637} 638 639static struct device_type fw_device_type = { 640 .release = fw_device_release, 641}; 642 643/* 644 * These defines control the retry behavior for reading the config 645 * rom. It shouldn't be necessary to tweak these; if the device 646 * doesn't respond to a config rom read within 10 seconds, it's not 647 * going to respond at all. As for the initial delay, a lot of 648 * devices will be able to respond within half a second after bus 649 * reset. On the other hand, it's not really worth being more 650 * aggressive than that, since it scales pretty well; if 10 devices 651 * are plugged in, they're all getting read within one second. 652 */ 653 654#define MAX_RETRIES 10 655#define RETRY_DELAY (3 * HZ) 656#define INITIAL_DELAY (HZ / 2) 657 658static void fw_device_init(struct work_struct *work) 659{ 660 struct fw_device *device = 661 container_of(work, struct fw_device, work.work); 662 int minor, err; 663 664 /* 665 * All failure paths here set node->data to NULL, so that we 666 * don't try to do device_for_each_child() on a kfree()'d 667 * device. 668 */ 669 670 if (read_bus_info_block(device, device->generation) < 0) { 671 if (device->config_rom_retries < MAX_RETRIES) { 672 device->config_rom_retries++; 673 schedule_delayed_work(&device->work, RETRY_DELAY); 674 } else { 675 fw_notify("giving up on config rom for node id %x\n", 676 device->node_id); 677 if (device->node == device->card->root_node) 678 schedule_delayed_work(&device->card->work, 0); 679 fw_device_release(&device->device); 680 } 681 return; 682 } 683 684 err = -ENOMEM; 685 down_write(&idr_rwsem); 686 if (idr_pre_get(&fw_device_idr, GFP_KERNEL)) 687 err = idr_get_new(&fw_device_idr, device, &minor); 688 up_write(&idr_rwsem); 689 if (err < 0) 690 goto error; 691 692 device->device.bus = &fw_bus_type; 693 device->device.type = &fw_device_type; 694 device->device.parent = device->card->device; 695 device->device.devt = MKDEV(fw_cdev_major, minor); 696 snprintf(device->device.bus_id, sizeof(device->device.bus_id), 697 "fw%d", minor); 698 699 init_fw_attribute_group(&device->device, 700 fw_device_attributes, 701 &device->attribute_group); 702 if (device_add(&device->device)) { 703 fw_error("Failed to add device.\n"); 704 goto error_with_cdev; 705 } 706 707 create_units(device); 708 709 /* 710 * Transition the device to running state. If it got pulled 711 * out from under us while we did the intialization work, we 712 * have to shut down the device again here. Normally, though, 713 * fw_node_event will be responsible for shutting it down when 714 * necessary. We have to use the atomic cmpxchg here to avoid 715 * racing with the FW_NODE_DESTROYED case in 716 * fw_node_event(). 717 */ 718 if (atomic_cmpxchg(&device->state, 719 FW_DEVICE_INITIALIZING, 720 FW_DEVICE_RUNNING) == FW_DEVICE_SHUTDOWN) 721 fw_device_shutdown(&device->work.work); 722 else 723 fw_notify("created new fw device %s " 724 "(%d config rom retries, S%d00)\n", 725 device->device.bus_id, device->config_rom_retries, 726 1 << device->max_speed); 727 728 /* 729 * Reschedule the IRM work if we just finished reading the 730 * root node config rom. If this races with a bus reset we 731 * just end up running the IRM work a couple of extra times - 732 * pretty harmless. 733 */ 734 if (device->node == device->card->root_node) 735 schedule_delayed_work(&device->card->work, 0); 736 737 return; 738 739 error_with_cdev: 740 down_write(&idr_rwsem); 741 idr_remove(&fw_device_idr, minor); 742 up_write(&idr_rwsem); 743 error: 744 put_device(&device->device); 745} 746 747static int update_unit(struct device *dev, void *data) 748{ 749 struct fw_unit *unit = fw_unit(dev); 750 struct fw_driver *driver = (struct fw_driver *)dev->driver; 751 752 if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) { 753 down(&dev->sem); 754 driver->update(unit); 755 up(&dev->sem); 756 } 757 758 return 0; 759} 760 761static void fw_device_update(struct work_struct *work) 762{ 763 struct fw_device *device = 764 container_of(work, struct fw_device, work.work); 765 766 fw_device_cdev_update(device); 767 device_for_each_child(&device->device, NULL, update_unit); 768} 769 770void fw_node_event(struct fw_card *card, struct fw_node *node, int event) 771{ 772 struct fw_device *device; 773 774 switch (event) { 775 case FW_NODE_CREATED: 776 case FW_NODE_LINK_ON: 777 if (!node->link_on) 778 break; 779 780 device = kzalloc(sizeof(*device), GFP_ATOMIC); 781 if (device == NULL) 782 break; 783 784 /* 785 * Do minimal intialization of the device here, the 786 * rest will happen in fw_device_init(). We need the 787 * card and node so we can read the config rom and we 788 * need to do device_initialize() now so 789 * device_for_each_child() in FW_NODE_UPDATED is 790 * doesn't freak out. 791 */ 792 device_initialize(&device->device); 793 atomic_set(&device->state, FW_DEVICE_INITIALIZING); 794 device->card = fw_card_get(card); 795 device->node = fw_node_get(node); 796 device->node_id = node->node_id; 797 device->generation = card->generation; 798 INIT_LIST_HEAD(&device->client_list); 799 800 /* 801 * Set the node data to point back to this device so 802 * FW_NODE_UPDATED callbacks can update the node_id 803 * and generation for the device. 804 */ 805 node->data = device; 806 807 /* 808 * Many devices are slow to respond after bus resets, 809 * especially if they are bus powered and go through 810 * power-up after getting plugged in. We schedule the 811 * first config rom scan half a second after bus reset. 812 */ 813 INIT_DELAYED_WORK(&device->work, fw_device_init); 814 schedule_delayed_work(&device->work, INITIAL_DELAY); 815 break; 816 817 case FW_NODE_UPDATED: 818 if (!node->link_on || node->data == NULL) 819 break; 820 821 device = node->data; 822 device->node_id = node->node_id; 823 smp_wmb(); /* update node_id before generation */ 824 device->generation = card->generation; 825 if (atomic_read(&device->state) == FW_DEVICE_RUNNING) { 826 PREPARE_DELAYED_WORK(&device->work, fw_device_update); 827 schedule_delayed_work(&device->work, 0); 828 } 829 break; 830 831 case FW_NODE_DESTROYED: 832 case FW_NODE_LINK_OFF: 833 if (!node->data) 834 break; 835 836 /* 837 * Destroy the device associated with the node. There 838 * are two cases here: either the device is fully 839 * initialized (FW_DEVICE_RUNNING) or we're in the 840 * process of reading its config rom 841 * (FW_DEVICE_INITIALIZING). If it is fully 842 * initialized we can reuse device->work to schedule a 843 * full fw_device_shutdown(). If not, there's work 844 * scheduled to read it's config rom, and we just put 845 * the device in shutdown state to have that code fail 846 * to create the device. 847 */ 848 device = node->data; 849 if (atomic_xchg(&device->state, 850 FW_DEVICE_SHUTDOWN) == FW_DEVICE_RUNNING) { 851 PREPARE_DELAYED_WORK(&device->work, fw_device_shutdown); 852 schedule_delayed_work(&device->work, 0); 853 } 854 break; 855 } 856}