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