linux/drivers/firewire/fw-card.c
<<
>>
Prefs
   1/*
   2 * Copyright (C) 2005-2007  Kristian Hoegsberg <krh@bitplanet.net>
   3 *
   4 * This program is free software; you can redistribute it and/or modify
   5 * it under the terms of the GNU General Public License as published by
   6 * the Free Software Foundation; either version 2 of the License, or
   7 * (at your option) any later version.
   8 *
   9 * This program is distributed in the hope that it will be useful,
  10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12 * GNU General Public License for more details.
  13 *
  14 * You should have received a copy of the GNU General Public License
  15 * along with this program; if not, write to the Free Software Foundation,
  16 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
  17 */
  18
  19#include <linux/completion.h>
  20#include <linux/crc-itu-t.h>
  21#include <linux/delay.h>
  22#include <linux/device.h>
  23#include <linux/errno.h>
  24#include <linux/kref.h>
  25#include <linux/module.h>
  26#include <linux/mutex.h>
  27
  28#include "fw-transaction.h"
  29#include "fw-topology.h"
  30#include "fw-device.h"
  31
  32int fw_compute_block_crc(u32 *block)
  33{
  34        __be32 be32_block[256];
  35        int i, length;
  36
  37        length = (*block >> 16) & 0xff;
  38        for (i = 0; i < length; i++)
  39                be32_block[i] = cpu_to_be32(block[i + 1]);
  40        *block |= crc_itu_t(0, (u8 *) be32_block, length * 4);
  41
  42        return length;
  43}
  44
  45static DEFINE_MUTEX(card_mutex);
  46static LIST_HEAD(card_list);
  47
  48static LIST_HEAD(descriptor_list);
  49static int descriptor_count;
  50
  51#define BIB_CRC(v)              ((v) <<  0)
  52#define BIB_CRC_LENGTH(v)       ((v) << 16)
  53#define BIB_INFO_LENGTH(v)      ((v) << 24)
  54
  55#define BIB_LINK_SPEED(v)       ((v) <<  0)
  56#define BIB_GENERATION(v)       ((v) <<  4)
  57#define BIB_MAX_ROM(v)          ((v) <<  8)
  58#define BIB_MAX_RECEIVE(v)      ((v) << 12)
  59#define BIB_CYC_CLK_ACC(v)      ((v) << 16)
  60#define BIB_PMC                 ((1) << 27)
  61#define BIB_BMC                 ((1) << 28)
  62#define BIB_ISC                 ((1) << 29)
  63#define BIB_CMC                 ((1) << 30)
  64#define BIB_IMC                 ((1) << 31)
  65
  66static u32 *generate_config_rom(struct fw_card *card, size_t *config_rom_length)
  67{
  68        struct fw_descriptor *desc;
  69        static u32 config_rom[256];
  70        int i, j, length;
  71
  72        /*
  73         * Initialize contents of config rom buffer.  On the OHCI
  74         * controller, block reads to the config rom accesses the host
  75         * memory, but quadlet read access the hardware bus info block
  76         * registers.  That's just crack, but it means we should make
  77         * sure the contents of bus info block in host memory matches
  78         * the version stored in the OHCI registers.
  79         */
  80
  81        memset(config_rom, 0, sizeof(config_rom));
  82        config_rom[0] = BIB_CRC_LENGTH(4) | BIB_INFO_LENGTH(4) | BIB_CRC(0);
  83        config_rom[1] = 0x31333934;
  84
  85        config_rom[2] =
  86                BIB_LINK_SPEED(card->link_speed) |
  87                BIB_GENERATION(card->config_rom_generation++ % 14 + 2) |
  88                BIB_MAX_ROM(2) |
  89                BIB_MAX_RECEIVE(card->max_receive) |
  90                BIB_BMC | BIB_ISC | BIB_CMC | BIB_IMC;
  91        config_rom[3] = card->guid >> 32;
  92        config_rom[4] = card->guid;
  93
  94        /* Generate root directory. */
  95        i = 5;
  96        config_rom[i++] = 0;
  97        config_rom[i++] = 0x0c0083c0; /* node capabilities */
  98        j = i + descriptor_count;
  99
 100        /* Generate root directory entries for descriptors. */
 101        list_for_each_entry (desc, &descriptor_list, link) {
 102                if (desc->immediate > 0)
 103                        config_rom[i++] = desc->immediate;
 104                config_rom[i] = desc->key | (j - i);
 105                i++;
 106                j += desc->length;
 107        }
 108
 109        /* Update root directory length. */
 110        config_rom[5] = (i - 5 - 1) << 16;
 111
 112        /* End of root directory, now copy in descriptors. */
 113        list_for_each_entry (desc, &descriptor_list, link) {
 114                memcpy(&config_rom[i], desc->data, desc->length * 4);
 115                i += desc->length;
 116        }
 117
 118        /* Calculate CRCs for all blocks in the config rom.  This
 119         * assumes that CRC length and info length are identical for
 120         * the bus info block, which is always the case for this
 121         * implementation. */
 122        for (i = 0; i < j; i += length + 1)
 123                length = fw_compute_block_crc(config_rom + i);
 124
 125        *config_rom_length = j;
 126
 127        return config_rom;
 128}
 129
 130static void update_config_roms(void)
 131{
 132        struct fw_card *card;
 133        u32 *config_rom;
 134        size_t length;
 135
 136        list_for_each_entry (card, &card_list, link) {
 137                config_rom = generate_config_rom(card, &length);
 138                card->driver->set_config_rom(card, config_rom, length);
 139        }
 140}
 141
 142int fw_core_add_descriptor(struct fw_descriptor *desc)
 143{
 144        size_t i;
 145
 146        /*
 147         * Check descriptor is valid; the length of all blocks in the
 148         * descriptor has to add up to exactly the length of the
 149         * block.
 150         */
 151        i = 0;
 152        while (i < desc->length)
 153                i += (desc->data[i] >> 16) + 1;
 154
 155        if (i != desc->length)
 156                return -EINVAL;
 157
 158        mutex_lock(&card_mutex);
 159
 160        list_add_tail(&desc->link, &descriptor_list);
 161        descriptor_count++;
 162        if (desc->immediate > 0)
 163                descriptor_count++;
 164        update_config_roms();
 165
 166        mutex_unlock(&card_mutex);
 167
 168        return 0;
 169}
 170
 171void fw_core_remove_descriptor(struct fw_descriptor *desc)
 172{
 173        mutex_lock(&card_mutex);
 174
 175        list_del(&desc->link);
 176        descriptor_count--;
 177        if (desc->immediate > 0)
 178                descriptor_count--;
 179        update_config_roms();
 180
 181        mutex_unlock(&card_mutex);
 182}
 183
 184static int set_broadcast_channel(struct device *dev, void *data)
 185{
 186        fw_device_set_broadcast_channel(fw_device(dev), (long)data);
 187        return 0;
 188}
 189
 190static void allocate_broadcast_channel(struct fw_card *card, int generation)
 191{
 192        int channel, bandwidth = 0;
 193
 194        fw_iso_resource_manage(card, generation, 1ULL << 31,
 195                               &channel, &bandwidth, true);
 196        if (channel == 31) {
 197                card->broadcast_channel_allocated = true;
 198                device_for_each_child(card->device, (void *)(long)generation,
 199                                      set_broadcast_channel);
 200        }
 201}
 202
 203static const char gap_count_table[] = {
 204        63, 5, 7, 8, 10, 13, 16, 18, 21, 24, 26, 29, 32, 35, 37, 40
 205};
 206
 207void fw_schedule_bm_work(struct fw_card *card, unsigned long delay)
 208{
 209        int scheduled;
 210
 211        fw_card_get(card);
 212        scheduled = schedule_delayed_work(&card->work, delay);
 213        if (!scheduled)
 214                fw_card_put(card);
 215}
 216
 217static void fw_card_bm_work(struct work_struct *work)
 218{
 219        struct fw_card *card = container_of(work, struct fw_card, work.work);
 220        struct fw_device *root_device;
 221        struct fw_node *root_node;
 222        unsigned long flags;
 223        int root_id, new_root_id, irm_id, local_id;
 224        int gap_count, generation, grace, rcode;
 225        bool do_reset = false;
 226        bool root_device_is_running;
 227        bool root_device_is_cmc;
 228        __be32 lock_data[2];
 229
 230        spin_lock_irqsave(&card->lock, flags);
 231
 232        if (card->local_node == NULL) {
 233                spin_unlock_irqrestore(&card->lock, flags);
 234                goto out_put_card;
 235        }
 236
 237        generation = card->generation;
 238        root_node = card->root_node;
 239        fw_node_get(root_node);
 240        root_device = root_node->data;
 241        root_device_is_running = root_device &&
 242                        atomic_read(&root_device->state) == FW_DEVICE_RUNNING;
 243        root_device_is_cmc = root_device && root_device->cmc;
 244        root_id  = root_node->node_id;
 245        irm_id   = card->irm_node->node_id;
 246        local_id = card->local_node->node_id;
 247
 248        grace = time_after(jiffies, card->reset_jiffies + DIV_ROUND_UP(HZ, 8));
 249
 250        if (is_next_generation(generation, card->bm_generation) ||
 251            (card->bm_generation != generation && grace)) {
 252                /*
 253                 * This first step is to figure out who is IRM and
 254                 * then try to become bus manager.  If the IRM is not
 255                 * well defined (e.g. does not have an active link
 256                 * layer or does not responds to our lock request, we
 257                 * will have to do a little vigilante bus management.
 258                 * In that case, we do a goto into the gap count logic
 259                 * so that when we do the reset, we still optimize the
 260                 * gap count.  That could well save a reset in the
 261                 * next generation.
 262                 */
 263
 264                if (!card->irm_node->link_on) {
 265                        new_root_id = local_id;
 266                        fw_notify("IRM has link off, making local node (%02x) root.\n",
 267                                  new_root_id);
 268                        goto pick_me;
 269                }
 270
 271                lock_data[0] = cpu_to_be32(0x3f);
 272                lock_data[1] = cpu_to_be32(local_id);
 273
 274                spin_unlock_irqrestore(&card->lock, flags);
 275
 276                rcode = fw_run_transaction(card, TCODE_LOCK_COMPARE_SWAP,
 277                                irm_id, generation, SCODE_100,
 278                                CSR_REGISTER_BASE + CSR_BUS_MANAGER_ID,
 279                                lock_data, sizeof(lock_data));
 280
 281                if (rcode == RCODE_GENERATION)
 282                        /* Another bus reset, BM work has been rescheduled. */
 283                        goto out;
 284
 285                if (rcode == RCODE_COMPLETE &&
 286                    lock_data[0] != cpu_to_be32(0x3f)) {
 287
 288                        /* Somebody else is BM.  Only act as IRM. */
 289                        if (local_id == irm_id)
 290                                allocate_broadcast_channel(card, generation);
 291
 292                        goto out;
 293                }
 294
 295                spin_lock_irqsave(&card->lock, flags);
 296
 297                if (rcode != RCODE_COMPLETE) {
 298                        /*
 299                         * The lock request failed, maybe the IRM
 300                         * isn't really IRM capable after all. Let's
 301                         * do a bus reset and pick the local node as
 302                         * root, and thus, IRM.
 303                         */
 304                        new_root_id = local_id;
 305                        fw_notify("BM lock failed, making local node (%02x) root.\n",
 306                                  new_root_id);
 307                        goto pick_me;
 308                }
 309        } else if (card->bm_generation != generation) {
 310                /*
 311                 * We weren't BM in the last generation, and the last
 312                 * bus reset is less than 125ms ago.  Reschedule this job.
 313                 */
 314                spin_unlock_irqrestore(&card->lock, flags);
 315                fw_schedule_bm_work(card, DIV_ROUND_UP(HZ, 8));
 316                goto out;
 317        }
 318
 319        /*
 320         * We're bus manager for this generation, so next step is to
 321         * make sure we have an active cycle master and do gap count
 322         * optimization.
 323         */
 324        card->bm_generation = generation;
 325
 326        if (root_device == NULL) {
 327                /*
 328                 * Either link_on is false, or we failed to read the
 329                 * config rom.  In either case, pick another root.
 330                 */
 331                new_root_id = local_id;
 332        } else if (!root_device_is_running) {
 333                /*
 334                 * If we haven't probed this device yet, bail out now
 335                 * and let's try again once that's done.
 336                 */
 337                spin_unlock_irqrestore(&card->lock, flags);
 338                goto out;
 339        } else if (root_device_is_cmc) {
 340                /*
 341                 * FIXME: I suppose we should set the cmstr bit in the
 342                 * STATE_CLEAR register of this node, as described in
 343                 * 1394-1995, 8.4.2.6.  Also, send out a force root
 344                 * packet for this node.
 345                 */
 346                new_root_id = root_id;
 347        } else {
 348                /*
 349                 * Current root has an active link layer and we
 350                 * successfully read the config rom, but it's not
 351                 * cycle master capable.
 352                 */
 353                new_root_id = local_id;
 354        }
 355
 356 pick_me:
 357        /*
 358         * Pick a gap count from 1394a table E-1.  The table doesn't cover
 359         * the typically much larger 1394b beta repeater delays though.
 360         */
 361        if (!card->beta_repeaters_present &&
 362            root_node->max_hops < ARRAY_SIZE(gap_count_table))
 363                gap_count = gap_count_table[root_node->max_hops];
 364        else
 365                gap_count = 63;
 366
 367        /*
 368         * Finally, figure out if we should do a reset or not.  If we have
 369         * done less than 5 resets with the same physical topology and we
 370         * have either a new root or a new gap count setting, let's do it.
 371         */
 372
 373        if (card->bm_retries++ < 5 &&
 374            (card->gap_count != gap_count || new_root_id != root_id))
 375                do_reset = true;
 376
 377        spin_unlock_irqrestore(&card->lock, flags);
 378
 379        if (do_reset) {
 380                fw_notify("phy config: card %d, new root=%x, gap_count=%d\n",
 381                          card->index, new_root_id, gap_count);
 382                fw_send_phy_config(card, new_root_id, generation, gap_count);
 383                fw_core_initiate_bus_reset(card, 1);
 384                /* Will allocate broadcast channel after the reset. */
 385        } else {
 386                if (local_id == irm_id)
 387                        allocate_broadcast_channel(card, generation);
 388        }
 389
 390 out:
 391        fw_node_put(root_node);
 392 out_put_card:
 393        fw_card_put(card);
 394}
 395
 396static void flush_timer_callback(unsigned long data)
 397{
 398        struct fw_card *card = (struct fw_card *)data;
 399
 400        fw_flush_transactions(card);
 401}
 402
 403void fw_card_initialize(struct fw_card *card,
 404                        const struct fw_card_driver *driver,
 405                        struct device *device)
 406{
 407        static atomic_t index = ATOMIC_INIT(-1);
 408
 409        card->index = atomic_inc_return(&index);
 410        card->driver = driver;
 411        card->device = device;
 412        card->current_tlabel = 0;
 413        card->tlabel_mask = 0;
 414        card->color = 0;
 415        card->broadcast_channel = BROADCAST_CHANNEL_INITIAL;
 416
 417        kref_init(&card->kref);
 418        init_completion(&card->done);
 419        INIT_LIST_HEAD(&card->transaction_list);
 420        spin_lock_init(&card->lock);
 421        setup_timer(&card->flush_timer,
 422                    flush_timer_callback, (unsigned long)card);
 423
 424        card->local_node = NULL;
 425
 426        INIT_DELAYED_WORK(&card->work, fw_card_bm_work);
 427}
 428EXPORT_SYMBOL(fw_card_initialize);
 429
 430int fw_card_add(struct fw_card *card,
 431                u32 max_receive, u32 link_speed, u64 guid)
 432{
 433        u32 *config_rom;
 434        size_t length;
 435        int ret;
 436
 437        card->max_receive = max_receive;
 438        card->link_speed = link_speed;
 439        card->guid = guid;
 440
 441        mutex_lock(&card_mutex);
 442        config_rom = generate_config_rom(card, &length);
 443        list_add_tail(&card->link, &card_list);
 444        mutex_unlock(&card_mutex);
 445
 446        ret = card->driver->enable(card, config_rom, length);
 447        if (ret < 0) {
 448                mutex_lock(&card_mutex);
 449                list_del(&card->link);
 450                mutex_unlock(&card_mutex);
 451        }
 452
 453        return ret;
 454}
 455EXPORT_SYMBOL(fw_card_add);
 456
 457
 458/*
 459 * The next few functions implements a dummy driver that use once a
 460 * card driver shuts down an fw_card.  This allows the driver to
 461 * cleanly unload, as all IO to the card will be handled by the dummy
 462 * driver instead of calling into the (possibly) unloaded module.  The
 463 * dummy driver just fails all IO.
 464 */
 465
 466static int dummy_enable(struct fw_card *card, u32 *config_rom, size_t length)
 467{
 468        BUG();
 469        return -1;
 470}
 471
 472static int dummy_update_phy_reg(struct fw_card *card, int address,
 473                                int clear_bits, int set_bits)
 474{
 475        return -ENODEV;
 476}
 477
 478static int dummy_set_config_rom(struct fw_card *card,
 479                                u32 *config_rom, size_t length)
 480{
 481        /*
 482         * We take the card out of card_list before setting the dummy
 483         * driver, so this should never get called.
 484         */
 485        BUG();
 486        return -1;
 487}
 488
 489static void dummy_send_request(struct fw_card *card, struct fw_packet *packet)
 490{
 491        packet->callback(packet, card, -ENODEV);
 492}
 493
 494static void dummy_send_response(struct fw_card *card, struct fw_packet *packet)
 495{
 496        packet->callback(packet, card, -ENODEV);
 497}
 498
 499static int dummy_cancel_packet(struct fw_card *card, struct fw_packet *packet)
 500{
 501        return -ENOENT;
 502}
 503
 504static int dummy_enable_phys_dma(struct fw_card *card,
 505                                 int node_id, int generation)
 506{
 507        return -ENODEV;
 508}
 509
 510static struct fw_card_driver dummy_driver = {
 511        .enable          = dummy_enable,
 512        .update_phy_reg  = dummy_update_phy_reg,
 513        .set_config_rom  = dummy_set_config_rom,
 514        .send_request    = dummy_send_request,
 515        .cancel_packet   = dummy_cancel_packet,
 516        .send_response   = dummy_send_response,
 517        .enable_phys_dma = dummy_enable_phys_dma,
 518};
 519
 520void fw_card_release(struct kref *kref)
 521{
 522        struct fw_card *card = container_of(kref, struct fw_card, kref);
 523
 524        complete(&card->done);
 525}
 526
 527void fw_core_remove_card(struct fw_card *card)
 528{
 529        card->driver->update_phy_reg(card, 4,
 530                                     PHY_LINK_ACTIVE | PHY_CONTENDER, 0);
 531        fw_core_initiate_bus_reset(card, 1);
 532
 533        mutex_lock(&card_mutex);
 534        list_del_init(&card->link);
 535        mutex_unlock(&card_mutex);
 536
 537        /* Set up the dummy driver. */
 538        card->driver = &dummy_driver;
 539
 540        fw_destroy_nodes(card);
 541
 542        /* Wait for all users, especially device workqueue jobs, to finish. */
 543        fw_card_put(card);
 544        wait_for_completion(&card->done);
 545
 546        WARN_ON(!list_empty(&card->transaction_list));
 547        del_timer_sync(&card->flush_timer);
 548}
 549EXPORT_SYMBOL(fw_core_remove_card);
 550
 551int fw_core_initiate_bus_reset(struct fw_card *card, int short_reset)
 552{
 553        int reg = short_reset ? 5 : 1;
 554        int bit = short_reset ? PHY_BUS_SHORT_RESET : PHY_BUS_RESET;
 555
 556        return card->driver->update_phy_reg(card, reg, 0, bit);
 557}
 558EXPORT_SYMBOL(fw_core_initiate_bus_reset);
 559