Root/drivers/firewire/core-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/bug.h>
22#include <linux/ctype.h>
23#include <linux/delay.h>
24#include <linux/device.h>
25#include <linux/errno.h>
26#include <linux/firewire.h>
27#include <linux/firewire-constants.h>
28#include <linux/idr.h>
29#include <linux/jiffies.h>
30#include <linux/kobject.h>
31#include <linux/list.h>
32#include <linux/mod_devicetable.h>
33#include <linux/module.h>
34#include <linux/mutex.h>
35#include <linux/rwsem.h>
36#include <linux/slab.h>
37#include <linux/spinlock.h>
38#include <linux/string.h>
39#include <linux/workqueue.h>
40
41#include <linux/atomic.h>
42#include <asm/byteorder.h>
43
44#include "core.h"
45
46void fw_csr_iterator_init(struct fw_csr_iterator *ci, const u32 *p)
47{
48    ci->p = p + 1;
49    ci->end = ci->p + (p[0] >> 16);
50}
51EXPORT_SYMBOL(fw_csr_iterator_init);
52
53int fw_csr_iterator_next(struct fw_csr_iterator *ci, int *key, int *value)
54{
55    *key = *ci->p >> 24;
56    *value = *ci->p & 0xffffff;
57
58    return ci->p++ < ci->end;
59}
60EXPORT_SYMBOL(fw_csr_iterator_next);
61
62static const u32 *search_leaf(const u32 *directory, int search_key)
63{
64    struct fw_csr_iterator ci;
65    int last_key = 0, key, value;
66
67    fw_csr_iterator_init(&ci, directory);
68    while (fw_csr_iterator_next(&ci, &key, &value)) {
69        if (last_key == search_key &&
70            key == (CSR_DESCRIPTOR | CSR_LEAF))
71            return ci.p - 1 + value;
72
73        last_key = key;
74    }
75
76    return NULL;
77}
78
79static int textual_leaf_to_string(const u32 *block, char *buf, size_t size)
80{
81    unsigned int quadlets, i;
82    char c;
83
84    if (!size || !buf)
85        return -EINVAL;
86
87    quadlets = min(block[0] >> 16, 256U);
88    if (quadlets < 2)
89        return -ENODATA;
90
91    if (block[1] != 0 || block[2] != 0)
92        /* unknown language/character set */
93        return -ENODATA;
94
95    block += 3;
96    quadlets -= 2;
97    for (i = 0; i < quadlets * 4 && i < size - 1; i++) {
98        c = block[i / 4] >> (24 - 8 * (i % 4));
99        if (c == '\0')
100            break;
101        buf[i] = c;
102    }
103    buf[i] = '\0';
104
105    return i;
106}
107
108/**
109 * fw_csr_string() - reads a string from the configuration ROM
110 * @directory: e.g. root directory or unit directory
111 * @key: the key of the preceding directory entry
112 * @buf: where to put the string
113 * @size: size of @buf, in bytes
114 *
115 * The string is taken from a minimal ASCII text descriptor leaf after
116 * the immediate entry with @key. The string is zero-terminated.
117 * Returns strlen(buf) or a negative error code.
118 */
119int fw_csr_string(const u32 *directory, int key, char *buf, size_t size)
120{
121    const u32 *leaf = search_leaf(directory, key);
122    if (!leaf)
123        return -ENOENT;
124
125    return textual_leaf_to_string(leaf, buf, size);
126}
127EXPORT_SYMBOL(fw_csr_string);
128
129static void get_ids(const u32 *directory, int *id)
130{
131    struct fw_csr_iterator ci;
132    int key, value;
133
134    fw_csr_iterator_init(&ci, directory);
135    while (fw_csr_iterator_next(&ci, &key, &value)) {
136        switch (key) {
137        case CSR_VENDOR: id[0] = value; break;
138        case CSR_MODEL: id[1] = value; break;
139        case CSR_SPECIFIER_ID: id[2] = value; break;
140        case CSR_VERSION: id[3] = value; break;
141        }
142    }
143}
144
145static void get_modalias_ids(struct fw_unit *unit, int *id)
146{
147    get_ids(&fw_parent_device(unit)->config_rom[5], id);
148    get_ids(unit->directory, id);
149}
150
151static bool match_ids(const struct ieee1394_device_id *id_table, int *id)
152{
153    int match = 0;
154
155    if (id[0] == id_table->vendor_id)
156        match |= IEEE1394_MATCH_VENDOR_ID;
157    if (id[1] == id_table->model_id)
158        match |= IEEE1394_MATCH_MODEL_ID;
159    if (id[2] == id_table->specifier_id)
160        match |= IEEE1394_MATCH_SPECIFIER_ID;
161    if (id[3] == id_table->version)
162        match |= IEEE1394_MATCH_VERSION;
163
164    return (match & id_table->match_flags) == id_table->match_flags;
165}
166
167static bool is_fw_unit(struct device *dev);
168
169static int fw_unit_match(struct device *dev, struct device_driver *drv)
170{
171    const struct ieee1394_device_id *id_table =
172            container_of(drv, struct fw_driver, driver)->id_table;
173    int id[] = {0, 0, 0, 0};
174
175    /* We only allow binding to fw_units. */
176    if (!is_fw_unit(dev))
177        return 0;
178
179    get_modalias_ids(fw_unit(dev), id);
180
181    for (; id_table->match_flags != 0; id_table++)
182        if (match_ids(id_table, id))
183            return 1;
184
185    return 0;
186}
187
188static int get_modalias(struct fw_unit *unit, char *buffer, size_t buffer_size)
189{
190    int id[] = {0, 0, 0, 0};
191
192    get_modalias_ids(unit, id);
193
194    return snprintf(buffer, buffer_size,
195            "ieee1394:ven%08Xmo%08Xsp%08Xver%08X",
196            id[0], id[1], id[2], id[3]);
197}
198
199static int fw_unit_uevent(struct device *dev, struct kobj_uevent_env *env)
200{
201    struct fw_unit *unit = fw_unit(dev);
202    char modalias[64];
203
204    get_modalias(unit, modalias, sizeof(modalias));
205
206    if (add_uevent_var(env, "MODALIAS=%s", modalias))
207        return -ENOMEM;
208
209    return 0;
210}
211
212struct bus_type fw_bus_type = {
213    .name = "firewire",
214    .match = fw_unit_match,
215};
216EXPORT_SYMBOL(fw_bus_type);
217
218int fw_device_enable_phys_dma(struct fw_device *device)
219{
220    int generation = device->generation;
221
222    /* device->node_id, accessed below, must not be older than generation */
223    smp_rmb();
224
225    return device->card->driver->enable_phys_dma(device->card,
226                             device->node_id,
227                             generation);
228}
229EXPORT_SYMBOL(fw_device_enable_phys_dma);
230
231struct config_rom_attribute {
232    struct device_attribute attr;
233    u32 key;
234};
235
236static ssize_t show_immediate(struct device *dev,
237                  struct device_attribute *dattr, char *buf)
238{
239    struct config_rom_attribute *attr =
240        container_of(dattr, struct config_rom_attribute, attr);
241    struct fw_csr_iterator ci;
242    const u32 *dir;
243    int key, value, ret = -ENOENT;
244
245    down_read(&fw_device_rwsem);
246
247    if (is_fw_unit(dev))
248        dir = fw_unit(dev)->directory;
249    else
250        dir = fw_device(dev)->config_rom + 5;
251
252    fw_csr_iterator_init(&ci, dir);
253    while (fw_csr_iterator_next(&ci, &key, &value))
254        if (attr->key == key) {
255            ret = snprintf(buf, buf ? PAGE_SIZE : 0,
256                       "0x%06x\n", value);
257            break;
258        }
259
260    up_read(&fw_device_rwsem);
261
262    return ret;
263}
264
265#define IMMEDIATE_ATTR(name, key) \
266    { __ATTR(name, S_IRUGO, show_immediate, NULL), key }
267
268static ssize_t show_text_leaf(struct device *dev,
269                  struct device_attribute *dattr, char *buf)
270{
271    struct config_rom_attribute *attr =
272        container_of(dattr, struct config_rom_attribute, attr);
273    const u32 *dir;
274    size_t bufsize;
275    char dummy_buf[2];
276    int ret;
277
278    down_read(&fw_device_rwsem);
279
280    if (is_fw_unit(dev))
281        dir = fw_unit(dev)->directory;
282    else
283        dir = fw_device(dev)->config_rom + 5;
284
285    if (buf) {
286        bufsize = PAGE_SIZE - 1;
287    } else {
288        buf = dummy_buf;
289        bufsize = 1;
290    }
291
292    ret = fw_csr_string(dir, attr->key, buf, bufsize);
293
294    if (ret >= 0) {
295        /* Strip trailing whitespace and add newline. */
296        while (ret > 0 && isspace(buf[ret - 1]))
297            ret--;
298        strcpy(buf + ret, "\n");
299        ret++;
300    }
301
302    up_read(&fw_device_rwsem);
303
304    return ret;
305}
306
307#define TEXT_LEAF_ATTR(name, key) \
308    { __ATTR(name, S_IRUGO, show_text_leaf, NULL), key }
309
310static struct config_rom_attribute config_rom_attributes[] = {
311    IMMEDIATE_ATTR(vendor, CSR_VENDOR),
312    IMMEDIATE_ATTR(hardware_version, CSR_HARDWARE_VERSION),
313    IMMEDIATE_ATTR(specifier_id, CSR_SPECIFIER_ID),
314    IMMEDIATE_ATTR(version, CSR_VERSION),
315    IMMEDIATE_ATTR(model, CSR_MODEL),
316    TEXT_LEAF_ATTR(vendor_name, CSR_VENDOR),
317    TEXT_LEAF_ATTR(model_name, CSR_MODEL),
318    TEXT_LEAF_ATTR(hardware_version_name, CSR_HARDWARE_VERSION),
319};
320
321static void init_fw_attribute_group(struct device *dev,
322                    struct device_attribute *attrs,
323                    struct fw_attribute_group *group)
324{
325    struct device_attribute *attr;
326    int i, j;
327
328    for (j = 0; attrs[j].attr.name != NULL; j++)
329        group->attrs[j] = &attrs[j].attr;
330
331    for (i = 0; i < ARRAY_SIZE(config_rom_attributes); i++) {
332        attr = &config_rom_attributes[i].attr;
333        if (attr->show(dev, attr, NULL) < 0)
334            continue;
335        group->attrs[j++] = &attr->attr;
336    }
337
338    group->attrs[j] = NULL;
339    group->groups[0] = &group->group;
340    group->groups[1] = NULL;
341    group->group.attrs = group->attrs;
342    dev->groups = (const struct attribute_group **) group->groups;
343}
344
345static ssize_t modalias_show(struct device *dev,
346                 struct device_attribute *attr, char *buf)
347{
348    struct fw_unit *unit = fw_unit(dev);
349    int length;
350
351    length = get_modalias(unit, buf, PAGE_SIZE);
352    strcpy(buf + length, "\n");
353
354    return length + 1;
355}
356
357static ssize_t rom_index_show(struct device *dev,
358                  struct device_attribute *attr, char *buf)
359{
360    struct fw_device *device = fw_device(dev->parent);
361    struct fw_unit *unit = fw_unit(dev);
362
363    return snprintf(buf, PAGE_SIZE, "%d\n",
364            (int)(unit->directory - device->config_rom));
365}
366
367static struct device_attribute fw_unit_attributes[] = {
368    __ATTR_RO(modalias),
369    __ATTR_RO(rom_index),
370    __ATTR_NULL,
371};
372
373static ssize_t config_rom_show(struct device *dev,
374                   struct device_attribute *attr, char *buf)
375{
376    struct fw_device *device = fw_device(dev);
377    size_t length;
378
379    down_read(&fw_device_rwsem);
380    length = device->config_rom_length * 4;
381    memcpy(buf, device->config_rom, length);
382    up_read(&fw_device_rwsem);
383
384    return length;
385}
386
387static ssize_t guid_show(struct device *dev,
388             struct device_attribute *attr, char *buf)
389{
390    struct fw_device *device = fw_device(dev);
391    int ret;
392
393    down_read(&fw_device_rwsem);
394    ret = snprintf(buf, PAGE_SIZE, "0x%08x%08x\n",
395               device->config_rom[3], device->config_rom[4]);
396    up_read(&fw_device_rwsem);
397
398    return ret;
399}
400
401static ssize_t is_local_show(struct device *dev,
402                 struct device_attribute *attr, char *buf)
403{
404    struct fw_device *device = fw_device(dev);
405
406    return sprintf(buf, "%u\n", device->is_local);
407}
408
409static int units_sprintf(char *buf, const u32 *directory)
410{
411    struct fw_csr_iterator ci;
412    int key, value;
413    int specifier_id = 0;
414    int version = 0;
415
416    fw_csr_iterator_init(&ci, directory);
417    while (fw_csr_iterator_next(&ci, &key, &value)) {
418        switch (key) {
419        case CSR_SPECIFIER_ID:
420            specifier_id = value;
421            break;
422        case CSR_VERSION:
423            version = value;
424            break;
425        }
426    }
427
428    return sprintf(buf, "0x%06x:0x%06x ", specifier_id, version);
429}
430
431static ssize_t units_show(struct device *dev,
432              struct device_attribute *attr, char *buf)
433{
434    struct fw_device *device = fw_device(dev);
435    struct fw_csr_iterator ci;
436    int key, value, i = 0;
437
438    down_read(&fw_device_rwsem);
439    fw_csr_iterator_init(&ci, &device->config_rom[5]);
440    while (fw_csr_iterator_next(&ci, &key, &value)) {
441        if (key != (CSR_UNIT | CSR_DIRECTORY))
442            continue;
443        i += units_sprintf(&buf[i], ci.p + value - 1);
444        if (i >= PAGE_SIZE - (8 + 1 + 8 + 1))
445            break;
446    }
447    up_read(&fw_device_rwsem);
448
449    if (i)
450        buf[i - 1] = '\n';
451
452    return i;
453}
454
455static struct device_attribute fw_device_attributes[] = {
456    __ATTR_RO(config_rom),
457    __ATTR_RO(guid),
458    __ATTR_RO(is_local),
459    __ATTR_RO(units),
460    __ATTR_NULL,
461};
462
463static int read_rom(struct fw_device *device,
464            int generation, int index, u32 *data)
465{
466    u64 offset = (CSR_REGISTER_BASE | CSR_CONFIG_ROM) + index * 4;
467    int i, rcode;
468
469    /* device->node_id, accessed below, must not be older than generation */
470    smp_rmb();
471
472    for (i = 10; i < 100; i += 10) {
473        rcode = fw_run_transaction(device->card,
474                TCODE_READ_QUADLET_REQUEST, device->node_id,
475                generation, device->max_speed, offset, data, 4);
476        if (rcode != RCODE_BUSY)
477            break;
478        msleep(i);
479    }
480    be32_to_cpus(data);
481
482    return rcode;
483}
484
485#define MAX_CONFIG_ROM_SIZE 256
486
487/*
488 * Read the bus info block, perform a speed probe, and read all of the rest of
489 * the config ROM. We do all this with a cached bus generation. If the bus
490 * generation changes under us, read_config_rom will fail and get retried.
491 * It's better to start all over in this case because the node from which we
492 * are reading the ROM may have changed the ROM during the reset.
493 * Returns either a result code or a negative error code.
494 */
495static int read_config_rom(struct fw_device *device, int generation)
496{
497    struct fw_card *card = device->card;
498    const u32 *old_rom, *new_rom;
499    u32 *rom, *stack;
500    u32 sp, key;
501    int i, end, length, ret;
502
503    rom = kmalloc(sizeof(*rom) * MAX_CONFIG_ROM_SIZE +
504              sizeof(*stack) * MAX_CONFIG_ROM_SIZE, GFP_KERNEL);
505    if (rom == NULL)
506        return -ENOMEM;
507
508    stack = &rom[MAX_CONFIG_ROM_SIZE];
509    memset(rom, 0, sizeof(*rom) * MAX_CONFIG_ROM_SIZE);
510
511    device->max_speed = SCODE_100;
512
513    /* First read the bus info block. */
514    for (i = 0; i < 5; i++) {
515        ret = read_rom(device, generation, i, &rom[i]);
516        if (ret != RCODE_COMPLETE)
517            goto out;
518        /*
519         * As per IEEE1212 7.2, during initialization, devices can
520         * reply with a 0 for the first quadlet of the config
521         * rom to indicate that they are booting (for example,
522         * if the firmware is on the disk of a external
523         * harddisk). In that case we just fail, and the
524         * retry mechanism will try again later.
525         */
526        if (i == 0 && rom[i] == 0) {
527            ret = RCODE_BUSY;
528            goto out;
529        }
530    }
531
532    device->max_speed = device->node->max_speed;
533
534    /*
535     * Determine the speed of
536     * - devices with link speed less than PHY speed,
537     * - devices with 1394b PHY (unless only connected to 1394a PHYs),
538     * - all devices if there are 1394b repeaters.
539     * Note, we cannot use the bus info block's link_spd as starting point
540     * because some buggy firmwares set it lower than necessary and because
541     * 1394-1995 nodes do not have the field.
542     */
543    if ((rom[2] & 0x7) < device->max_speed ||
544        device->max_speed == SCODE_BETA ||
545        card->beta_repeaters_present) {
546        u32 dummy;
547
548        /* for S1600 and S3200 */
549        if (device->max_speed == SCODE_BETA)
550            device->max_speed = card->link_speed;
551
552        while (device->max_speed > SCODE_100) {
553            if (read_rom(device, generation, 0, &dummy) ==
554                RCODE_COMPLETE)
555                break;
556            device->max_speed--;
557        }
558    }
559
560    /*
561     * Now parse the config rom. The config rom is a recursive
562     * directory structure so we parse it using a stack of
563     * references to the blocks that make up the structure. We
564     * push a reference to the root directory on the stack to
565     * start things off.
566     */
567    length = i;
568    sp = 0;
569    stack[sp++] = 0xc0000005;
570    while (sp > 0) {
571        /*
572         * Pop the next block reference of the stack. The
573         * lower 24 bits is the offset into the config rom,
574         * the upper 8 bits are the type of the reference the
575         * block.
576         */
577        key = stack[--sp];
578        i = key & 0xffffff;
579        if (WARN_ON(i >= MAX_CONFIG_ROM_SIZE)) {
580            ret = -ENXIO;
581            goto out;
582        }
583
584        /* Read header quadlet for the block to get the length. */
585        ret = read_rom(device, generation, i, &rom[i]);
586        if (ret != RCODE_COMPLETE)
587            goto out;
588        end = i + (rom[i] >> 16) + 1;
589        if (end > MAX_CONFIG_ROM_SIZE) {
590            /*
591             * This block extends outside the config ROM which is
592             * a firmware bug. Ignore this whole block, i.e.
593             * simply set a fake block length of 0.
594             */
595            fw_err(card, "skipped invalid ROM block %x at %llx\n",
596                   rom[i],
597                   i * 4 | CSR_REGISTER_BASE | CSR_CONFIG_ROM);
598            rom[i] = 0;
599            end = i;
600        }
601        i++;
602
603        /*
604         * Now read in the block. If this is a directory
605         * block, check the entries as we read them to see if
606         * it references another block, and push it in that case.
607         */
608        for (; i < end; i++) {
609            ret = read_rom(device, generation, i, &rom[i]);
610            if (ret != RCODE_COMPLETE)
611                goto out;
612
613            if ((key >> 30) != 3 || (rom[i] >> 30) < 2)
614                continue;
615            /*
616             * Offset points outside the ROM. May be a firmware
617             * bug or an Extended ROM entry (IEEE 1212-2001 clause
618             * 7.7.18). Simply overwrite this pointer here by a
619             * fake immediate entry so that later iterators over
620             * the ROM don't have to check offsets all the time.
621             */
622            if (i + (rom[i] & 0xffffff) >= MAX_CONFIG_ROM_SIZE) {
623                fw_err(card,
624                       "skipped unsupported ROM entry %x at %llx\n",
625                       rom[i],
626                       i * 4 | CSR_REGISTER_BASE | CSR_CONFIG_ROM);
627                rom[i] = 0;
628                continue;
629            }
630            stack[sp++] = i + rom[i];
631        }
632        if (length < i)
633            length = i;
634    }
635
636    old_rom = device->config_rom;
637    new_rom = kmemdup(rom, length * 4, GFP_KERNEL);
638    if (new_rom == NULL) {
639        ret = -ENOMEM;
640        goto out;
641    }
642
643    down_write(&fw_device_rwsem);
644    device->config_rom = new_rom;
645    device->config_rom_length = length;
646    up_write(&fw_device_rwsem);
647
648    kfree(old_rom);
649    ret = RCODE_COMPLETE;
650    device->max_rec = rom[2] >> 12 & 0xf;
651    device->cmc = rom[2] >> 30 & 1;
652    device->irmc = rom[2] >> 31 & 1;
653 out:
654    kfree(rom);
655
656    return ret;
657}
658
659static void fw_unit_release(struct device *dev)
660{
661    struct fw_unit *unit = fw_unit(dev);
662
663    fw_device_put(fw_parent_device(unit));
664    kfree(unit);
665}
666
667static struct device_type fw_unit_type = {
668    .uevent = fw_unit_uevent,
669    .release = fw_unit_release,
670};
671
672static bool is_fw_unit(struct device *dev)
673{
674    return dev->type == &fw_unit_type;
675}
676
677static void create_units(struct fw_device *device)
678{
679    struct fw_csr_iterator ci;
680    struct fw_unit *unit;
681    int key, value, i;
682
683    i = 0;
684    fw_csr_iterator_init(&ci, &device->config_rom[5]);
685    while (fw_csr_iterator_next(&ci, &key, &value)) {
686        if (key != (CSR_UNIT | CSR_DIRECTORY))
687            continue;
688
689        /*
690         * Get the address of the unit directory and try to
691         * match the drivers id_tables against it.
692         */
693        unit = kzalloc(sizeof(*unit), GFP_KERNEL);
694        if (unit == NULL) {
695            fw_err(device->card, "out of memory for unit\n");
696            continue;
697        }
698
699        unit->directory = ci.p + value - 1;
700        unit->device.bus = &fw_bus_type;
701        unit->device.type = &fw_unit_type;
702        unit->device.parent = &device->device;
703        dev_set_name(&unit->device, "%s.%d", dev_name(&device->device), i++);
704
705        BUILD_BUG_ON(ARRAY_SIZE(unit->attribute_group.attrs) <
706                ARRAY_SIZE(fw_unit_attributes) +
707                ARRAY_SIZE(config_rom_attributes));
708        init_fw_attribute_group(&unit->device,
709                    fw_unit_attributes,
710                    &unit->attribute_group);
711
712        if (device_register(&unit->device) < 0)
713            goto skip_unit;
714
715        fw_device_get(device);
716        continue;
717
718    skip_unit:
719        kfree(unit);
720    }
721}
722
723static int shutdown_unit(struct device *device, void *data)
724{
725    device_unregister(device);
726
727    return 0;
728}
729
730/*
731 * fw_device_rwsem acts as dual purpose mutex:
732 * - serializes accesses to fw_device_idr,
733 * - serializes accesses to fw_device.config_rom/.config_rom_length and
734 * fw_unit.directory, unless those accesses happen at safe occasions
735 */
736DECLARE_RWSEM(fw_device_rwsem);
737
738DEFINE_IDR(fw_device_idr);
739int fw_cdev_major;
740
741struct fw_device *fw_device_get_by_devt(dev_t devt)
742{
743    struct fw_device *device;
744
745    down_read(&fw_device_rwsem);
746    device = idr_find(&fw_device_idr, MINOR(devt));
747    if (device)
748        fw_device_get(device);
749    up_read(&fw_device_rwsem);
750
751    return device;
752}
753
754struct workqueue_struct *fw_workqueue;
755EXPORT_SYMBOL(fw_workqueue);
756
757static void fw_schedule_device_work(struct fw_device *device,
758                    unsigned long delay)
759{
760    queue_delayed_work(fw_workqueue, &device->work, delay);
761}
762
763/*
764 * These defines control the retry behavior for reading the config
765 * rom. It shouldn't be necessary to tweak these; if the device
766 * doesn't respond to a config rom read within 10 seconds, it's not
767 * going to respond at all. As for the initial delay, a lot of
768 * devices will be able to respond within half a second after bus
769 * reset. On the other hand, it's not really worth being more
770 * aggressive than that, since it scales pretty well; if 10 devices
771 * are plugged in, they're all getting read within one second.
772 */
773
774#define MAX_RETRIES 10
775#define RETRY_DELAY (3 * HZ)
776#define INITIAL_DELAY (HZ / 2)
777#define SHUTDOWN_DELAY (2 * HZ)
778
779static void fw_device_shutdown(struct work_struct *work)
780{
781    struct fw_device *device =
782        container_of(work, struct fw_device, work.work);
783    int minor = MINOR(device->device.devt);
784
785    if (time_before64(get_jiffies_64(),
786              device->card->reset_jiffies + SHUTDOWN_DELAY)
787        && !list_empty(&device->card->link)) {
788        fw_schedule_device_work(device, SHUTDOWN_DELAY);
789        return;
790    }
791
792    if (atomic_cmpxchg(&device->state,
793               FW_DEVICE_GONE,
794               FW_DEVICE_SHUTDOWN) != FW_DEVICE_GONE)
795        return;
796
797    fw_device_cdev_remove(device);
798    device_for_each_child(&device->device, NULL, shutdown_unit);
799    device_unregister(&device->device);
800
801    down_write(&fw_device_rwsem);
802    idr_remove(&fw_device_idr, minor);
803    up_write(&fw_device_rwsem);
804
805    fw_device_put(device);
806}
807
808static void fw_device_release(struct device *dev)
809{
810    struct fw_device *device = fw_device(dev);
811    struct fw_card *card = device->card;
812    unsigned long flags;
813
814    /*
815     * Take the card lock so we don't set this to NULL while a
816     * FW_NODE_UPDATED callback is being handled or while the
817     * bus manager work looks at this node.
818     */
819    spin_lock_irqsave(&card->lock, flags);
820    device->node->data = NULL;
821    spin_unlock_irqrestore(&card->lock, flags);
822
823    fw_node_put(device->node);
824    kfree(device->config_rom);
825    kfree(device);
826    fw_card_put(card);
827}
828
829static struct device_type fw_device_type = {
830    .release = fw_device_release,
831};
832
833static bool is_fw_device(struct device *dev)
834{
835    return dev->type == &fw_device_type;
836}
837
838static int update_unit(struct device *dev, void *data)
839{
840    struct fw_unit *unit = fw_unit(dev);
841    struct fw_driver *driver = (struct fw_driver *)dev->driver;
842
843    if (is_fw_unit(dev) && driver != NULL && driver->update != NULL) {
844        device_lock(dev);
845        driver->update(unit);
846        device_unlock(dev);
847    }
848
849    return 0;
850}
851
852static void fw_device_update(struct work_struct *work)
853{
854    struct fw_device *device =
855        container_of(work, struct fw_device, work.work);
856
857    fw_device_cdev_update(device);
858    device_for_each_child(&device->device, NULL, update_unit);
859}
860
861/*
862 * If a device was pending for deletion because its node went away but its
863 * bus info block and root directory header matches that of a newly discovered
864 * device, revive the existing fw_device.
865 * The newly allocated fw_device becomes obsolete instead.
866 */
867static int lookup_existing_device(struct device *dev, void *data)
868{
869    struct fw_device *old = fw_device(dev);
870    struct fw_device *new = data;
871    struct fw_card *card = new->card;
872    int match = 0;
873
874    if (!is_fw_device(dev))
875        return 0;
876
877    down_read(&fw_device_rwsem); /* serialize config_rom access */
878    spin_lock_irq(&card->lock); /* serialize node access */
879
880    if (memcmp(old->config_rom, new->config_rom, 6 * 4) == 0 &&
881        atomic_cmpxchg(&old->state,
882               FW_DEVICE_GONE,
883               FW_DEVICE_RUNNING) == FW_DEVICE_GONE) {
884        struct fw_node *current_node = new->node;
885        struct fw_node *obsolete_node = old->node;
886
887        new->node = obsolete_node;
888        new->node->data = new;
889        old->node = current_node;
890        old->node->data = old;
891
892        old->max_speed = new->max_speed;
893        old->node_id = current_node->node_id;
894        smp_wmb(); /* update node_id before generation */
895        old->generation = card->generation;
896        old->config_rom_retries = 0;
897        fw_notice(card, "rediscovered device %s\n", dev_name(dev));
898
899        PREPARE_DELAYED_WORK(&old->work, fw_device_update);
900        fw_schedule_device_work(old, 0);
901
902        if (current_node == card->root_node)
903            fw_schedule_bm_work(card, 0);
904
905        match = 1;
906    }
907
908    spin_unlock_irq(&card->lock);
909    up_read(&fw_device_rwsem);
910
911    return match;
912}
913
914enum { BC_UNKNOWN = 0, BC_UNIMPLEMENTED, BC_IMPLEMENTED, };
915
916static void set_broadcast_channel(struct fw_device *device, int generation)
917{
918    struct fw_card *card = device->card;
919    __be32 data;
920    int rcode;
921
922    if (!card->broadcast_channel_allocated)
923        return;
924
925    /*
926     * The Broadcast_Channel Valid bit is required by nodes which want to
927     * transmit on this channel. Such transmissions are practically
928     * exclusive to IP over 1394 (RFC 2734). IP capable nodes are required
929     * to be IRM capable and have a max_rec of 8 or more. We use this fact
930     * to narrow down to which nodes we send Broadcast_Channel updates.
931     */
932    if (!device->irmc || device->max_rec < 8)
933        return;
934
935    /*
936     * Some 1394-1995 nodes crash if this 1394a-2000 register is written.
937     * Perform a read test first.
938     */
939    if (device->bc_implemented == BC_UNKNOWN) {
940        rcode = fw_run_transaction(card, TCODE_READ_QUADLET_REQUEST,
941                device->node_id, generation, device->max_speed,
942                CSR_REGISTER_BASE + CSR_BROADCAST_CHANNEL,
943                &data, 4);
944        switch (rcode) {
945        case RCODE_COMPLETE:
946            if (data & cpu_to_be32(1 << 31)) {
947                device->bc_implemented = BC_IMPLEMENTED;
948                break;
949            }
950            /* else fall through to case address error */
951        case RCODE_ADDRESS_ERROR:
952            device->bc_implemented = BC_UNIMPLEMENTED;
953        }
954    }
955
956    if (device->bc_implemented == BC_IMPLEMENTED) {
957        data = cpu_to_be32(BROADCAST_CHANNEL_INITIAL |
958                   BROADCAST_CHANNEL_VALID);
959        fw_run_transaction(card, TCODE_WRITE_QUADLET_REQUEST,
960                device->node_id, generation, device->max_speed,
961                CSR_REGISTER_BASE + CSR_BROADCAST_CHANNEL,
962                &data, 4);
963    }
964}
965
966int fw_device_set_broadcast_channel(struct device *dev, void *gen)
967{
968    if (is_fw_device(dev))
969        set_broadcast_channel(fw_device(dev), (long)gen);
970
971    return 0;
972}
973
974static void fw_device_init(struct work_struct *work)
975{
976    struct fw_device *device =
977        container_of(work, struct fw_device, work.work);
978    struct fw_card *card = device->card;
979    struct device *revived_dev;
980    int minor, ret;
981
982    /*
983     * All failure paths here set node->data to NULL, so that we
984     * don't try to do device_for_each_child() on a kfree()'d
985     * device.
986     */
987
988    ret = read_config_rom(device, device->generation);
989    if (ret != RCODE_COMPLETE) {
990        if (device->config_rom_retries < MAX_RETRIES &&
991            atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
992            device->config_rom_retries++;
993            fw_schedule_device_work(device, RETRY_DELAY);
994        } else {
995            if (device->node->link_on)
996                fw_notice(card, "giving up on node %x: reading config rom failed: %s\n",
997                      device->node_id,
998                      fw_rcode_string(ret));
999            if (device->node == card->root_node)
1000                fw_schedule_bm_work(card, 0);
1001            fw_device_release(&device->device);
1002        }
1003        return;
1004    }
1005
1006    revived_dev = device_find_child(card->device,
1007                    device, lookup_existing_device);
1008    if (revived_dev) {
1009        put_device(revived_dev);
1010        fw_device_release(&device->device);
1011
1012        return;
1013    }
1014
1015    device_initialize(&device->device);
1016
1017    fw_device_get(device);
1018    down_write(&fw_device_rwsem);
1019    ret = idr_pre_get(&fw_device_idr, GFP_KERNEL) ?
1020          idr_get_new(&fw_device_idr, device, &minor) :
1021          -ENOMEM;
1022    up_write(&fw_device_rwsem);
1023
1024    if (ret < 0)
1025        goto error;
1026
1027    device->device.bus = &fw_bus_type;
1028    device->device.type = &fw_device_type;
1029    device->device.parent = card->device;
1030    device->device.devt = MKDEV(fw_cdev_major, minor);
1031    dev_set_name(&device->device, "fw%d", minor);
1032
1033    BUILD_BUG_ON(ARRAY_SIZE(device->attribute_group.attrs) <
1034            ARRAY_SIZE(fw_device_attributes) +
1035            ARRAY_SIZE(config_rom_attributes));
1036    init_fw_attribute_group(&device->device,
1037                fw_device_attributes,
1038                &device->attribute_group);
1039
1040    if (device_add(&device->device)) {
1041        fw_err(card, "failed to add device\n");
1042        goto error_with_cdev;
1043    }
1044
1045    create_units(device);
1046
1047    /*
1048     * Transition the device to running state. If it got pulled
1049     * out from under us while we did the intialization work, we
1050     * have to shut down the device again here. Normally, though,
1051     * fw_node_event will be responsible for shutting it down when
1052     * necessary. We have to use the atomic cmpxchg here to avoid
1053     * racing with the FW_NODE_DESTROYED case in
1054     * fw_node_event().
1055     */
1056    if (atomic_cmpxchg(&device->state,
1057               FW_DEVICE_INITIALIZING,
1058               FW_DEVICE_RUNNING) == FW_DEVICE_GONE) {
1059        PREPARE_DELAYED_WORK(&device->work, fw_device_shutdown);
1060        fw_schedule_device_work(device, SHUTDOWN_DELAY);
1061    } else {
1062        fw_notice(card, "created device %s: GUID %08x%08x, S%d00\n",
1063              dev_name(&device->device),
1064              device->config_rom[3], device->config_rom[4],
1065              1 << device->max_speed);
1066        device->config_rom_retries = 0;
1067
1068        set_broadcast_channel(device, device->generation);
1069    }
1070
1071    /*
1072     * Reschedule the IRM work if we just finished reading the
1073     * root node config rom. If this races with a bus reset we
1074     * just end up running the IRM work a couple of extra times -
1075     * pretty harmless.
1076     */
1077    if (device->node == card->root_node)
1078        fw_schedule_bm_work(card, 0);
1079
1080    return;
1081
1082 error_with_cdev:
1083    down_write(&fw_device_rwsem);
1084    idr_remove(&fw_device_idr, minor);
1085    up_write(&fw_device_rwsem);
1086 error:
1087    fw_device_put(device); /* fw_device_idr's reference */
1088
1089    put_device(&device->device); /* our reference */
1090}
1091
1092/* Reread and compare bus info block and header of root directory */
1093static int reread_config_rom(struct fw_device *device, int generation,
1094                 bool *changed)
1095{
1096    u32 q;
1097    int i, rcode;
1098
1099    for (i = 0; i < 6; i++) {
1100        rcode = read_rom(device, generation, i, &q);
1101        if (rcode != RCODE_COMPLETE)
1102            return rcode;
1103
1104        if (i == 0 && q == 0)
1105            /* inaccessible (see read_config_rom); retry later */
1106            return RCODE_BUSY;
1107
1108        if (q != device->config_rom[i]) {
1109            *changed = true;
1110            return RCODE_COMPLETE;
1111        }
1112    }
1113
1114    *changed = false;
1115    return RCODE_COMPLETE;
1116}
1117
1118static void fw_device_refresh(struct work_struct *work)
1119{
1120    struct fw_device *device =
1121        container_of(work, struct fw_device, work.work);
1122    struct fw_card *card = device->card;
1123    int ret, node_id = device->node_id;
1124    bool changed;
1125
1126    ret = reread_config_rom(device, device->generation, &changed);
1127    if (ret != RCODE_COMPLETE)
1128        goto failed_config_rom;
1129
1130    if (!changed) {
1131        if (atomic_cmpxchg(&device->state,
1132                   FW_DEVICE_INITIALIZING,
1133                   FW_DEVICE_RUNNING) == FW_DEVICE_GONE)
1134            goto gone;
1135
1136        fw_device_update(work);
1137        device->config_rom_retries = 0;
1138        goto out;
1139    }
1140
1141    /*
1142     * Something changed. We keep things simple and don't investigate
1143     * further. We just destroy all previous units and create new ones.
1144     */
1145    device_for_each_child(&device->device, NULL, shutdown_unit);
1146
1147    ret = read_config_rom(device, device->generation);
1148    if (ret != RCODE_COMPLETE)
1149        goto failed_config_rom;
1150
1151    fw_device_cdev_update(device);
1152    create_units(device);
1153
1154    /* Userspace may want to re-read attributes. */
1155    kobject_uevent(&device->device.kobj, KOBJ_CHANGE);
1156
1157    if (atomic_cmpxchg(&device->state,
1158               FW_DEVICE_INITIALIZING,
1159               FW_DEVICE_RUNNING) == FW_DEVICE_GONE)
1160        goto gone;
1161
1162    fw_notice(card, "refreshed device %s\n", dev_name(&device->device));
1163    device->config_rom_retries = 0;
1164    goto out;
1165
1166 failed_config_rom:
1167    if (device->config_rom_retries < MAX_RETRIES &&
1168        atomic_read(&device->state) == FW_DEVICE_INITIALIZING) {
1169        device->config_rom_retries++;
1170        fw_schedule_device_work(device, RETRY_DELAY);
1171        return;
1172    }
1173
1174    fw_notice(card, "giving up on refresh of device %s: %s\n",
1175          dev_name(&device->device), fw_rcode_string(ret));
1176 gone:
1177    atomic_set(&device->state, FW_DEVICE_GONE);
1178    PREPARE_DELAYED_WORK(&device->work, fw_device_shutdown);
1179    fw_schedule_device_work(device, SHUTDOWN_DELAY);
1180 out:
1181    if (node_id == card->root_node->node_id)
1182        fw_schedule_bm_work(card, 0);
1183}
1184
1185void fw_node_event(struct fw_card *card, struct fw_node *node, int event)
1186{
1187    struct fw_device *device;
1188
1189    switch (event) {
1190    case FW_NODE_CREATED:
1191        /*
1192         * Attempt to scan the node, regardless whether its self ID has
1193         * the L (link active) flag set or not. Some broken devices
1194         * send L=0 but have an up-and-running link; others send L=1
1195         * without actually having a link.
1196         */
1197 create:
1198        device = kzalloc(sizeof(*device), GFP_ATOMIC);
1199        if (device == NULL)
1200            break;
1201
1202        /*
1203         * Do minimal intialization of the device here, the
1204         * rest will happen in fw_device_init().
1205         *
1206         * Attention: A lot of things, even fw_device_get(),
1207         * cannot be done before fw_device_init() finished!
1208         * You can basically just check device->state and
1209         * schedule work until then, but only while holding
1210         * card->lock.
1211         */
1212        atomic_set(&device->state, FW_DEVICE_INITIALIZING);
1213        device->card = fw_card_get(card);
1214        device->node = fw_node_get(node);
1215        device->node_id = node->node_id;
1216        device->generation = card->generation;
1217        device->is_local = node == card->local_node;
1218        mutex_init(&device->client_list_mutex);
1219        INIT_LIST_HEAD(&device->client_list);
1220
1221        /*
1222         * Set the node data to point back to this device so
1223         * FW_NODE_UPDATED callbacks can update the node_id
1224         * and generation for the device.
1225         */
1226        node->data = device;
1227
1228        /*
1229         * Many devices are slow to respond after bus resets,
1230         * especially if they are bus powered and go through
1231         * power-up after getting plugged in. We schedule the
1232         * first config rom scan half a second after bus reset.
1233         */
1234        INIT_DELAYED_WORK(&device->work, fw_device_init);
1235        fw_schedule_device_work(device, INITIAL_DELAY);
1236        break;
1237
1238    case FW_NODE_INITIATED_RESET:
1239    case FW_NODE_LINK_ON:
1240        device = node->data;
1241        if (device == NULL)
1242            goto create;
1243
1244        device->node_id = node->node_id;
1245        smp_wmb(); /* update node_id before generation */
1246        device->generation = card->generation;
1247        if (atomic_cmpxchg(&device->state,
1248                FW_DEVICE_RUNNING,
1249                FW_DEVICE_INITIALIZING) == FW_DEVICE_RUNNING) {
1250            PREPARE_DELAYED_WORK(&device->work, fw_device_refresh);
1251            fw_schedule_device_work(device,
1252                device->is_local ? 0 : INITIAL_DELAY);
1253        }
1254        break;
1255
1256    case FW_NODE_UPDATED:
1257        device = node->data;
1258        if (device == NULL)
1259            break;
1260
1261        device->node_id = node->node_id;
1262        smp_wmb(); /* update node_id before generation */
1263        device->generation = card->generation;
1264        if (atomic_read(&device->state) == FW_DEVICE_RUNNING) {
1265            PREPARE_DELAYED_WORK(&device->work, fw_device_update);
1266            fw_schedule_device_work(device, 0);
1267        }
1268        break;
1269
1270    case FW_NODE_DESTROYED:
1271    case FW_NODE_LINK_OFF:
1272        if (!node->data)
1273            break;
1274
1275        /*
1276         * Destroy the device associated with the node. There
1277         * are two cases here: either the device is fully
1278         * initialized (FW_DEVICE_RUNNING) or we're in the
1279         * process of reading its config rom
1280         * (FW_DEVICE_INITIALIZING). If it is fully
1281         * initialized we can reuse device->work to schedule a
1282         * full fw_device_shutdown(). If not, there's work
1283         * scheduled to read it's config rom, and we just put
1284         * the device in shutdown state to have that code fail
1285         * to create the device.
1286         */
1287        device = node->data;
1288        if (atomic_xchg(&device->state,
1289                FW_DEVICE_GONE) == FW_DEVICE_RUNNING) {
1290            PREPARE_DELAYED_WORK(&device->work, fw_device_shutdown);
1291            fw_schedule_device_work(device,
1292                list_empty(&card->link) ? 0 : SHUTDOWN_DELAY);
1293        }
1294        break;
1295    }
1296}
1297

Archive Download this file



interactive