linux/drivers/firewire/fw-sbp2.c History
<<
>>
Prefs
   1/*
   2 * SBP2 driver (SCSI over IEEE1394)
   3 *
   4 * Copyright (C) 2005-2007  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/*
  22 * The basic structure of this driver is based on the old storage driver,
  23 * drivers/ieee1394/sbp2.c, originally written by
  24 *     James Goodwin <jamesg@filanet.com>
  25 * with later contributions and ongoing maintenance from
  26 *     Ben Collins <bcollins@debian.org>,
  27 *     Stefan Richter <stefanr@s5r6.in-berlin.de>
  28 * and many others.
  29 */
  30
  31#include <linux/blkdev.h>
  32#include <linux/delay.h>
  33#include <linux/device.h>
  34#include <linux/dma-mapping.h>
  35#include <linux/kernel.h>
  36#include <linux/mod_devicetable.h>
  37#include <linux/module.h>
  38#include <linux/moduleparam.h>
  39#include <linux/scatterlist.h>
  40#include <linux/string.h>
  41#include <linux/stringify.h>
  42#include <linux/timer.h>
  43#include <linux/workqueue.h>
  44#include <asm/system.h>
  45
  46#include <scsi/scsi.h>
  47#include <scsi/scsi_cmnd.h>
  48#include <scsi/scsi_device.h>
  49#include <scsi/scsi_host.h>
  50
  51#include "fw-device.h"
  52#include "fw-topology.h"
  53#include "fw-transaction.h"
  54
  55/*
  56 * So far only bridges from Oxford Semiconductor are known to support
  57 * concurrent logins. Depending on firmware, four or two concurrent logins
  58 * are possible on OXFW911 and newer Oxsemi bridges.
  59 *
  60 * Concurrent logins are useful together with cluster filesystems.
  61 */
  62static int sbp2_param_exclusive_login = 1;
  63module_param_named(exclusive_login, sbp2_param_exclusive_login, bool, 0644);
  64MODULE_PARM_DESC(exclusive_login, "Exclusive login to sbp2 device "
  65                 "(default = Y, use N for concurrent initiators)");
  66
  67/*
  68 * Flags for firmware oddities
  69 *
  70 * - 128kB max transfer
  71 *   Limit transfer size. Necessary for some old bridges.
  72 *
  73 * - 36 byte inquiry
  74 *   When scsi_mod probes the device, let the inquiry command look like that
  75 *   from MS Windows.
  76 *
  77 * - skip mode page 8
  78 *   Suppress sending of mode_sense for mode page 8 if the device pretends to
  79 *   support the SCSI Primary Block commands instead of Reduced Block Commands.
  80 *
  81 * - fix capacity
  82 *   Tell sd_mod to correct the last sector number reported by read_capacity.
  83 *   Avoids access beyond actual disk limits on devices with an off-by-one bug.
  84 *   Don't use this with devices which don't have this bug.
  85 *
  86 * - delay inquiry
  87 *   Wait extra SBP2_INQUIRY_DELAY seconds after login before SCSI inquiry.
  88 *
  89 * - override internal blacklist
  90 *   Instead of adding to the built-in blacklist, use only the workarounds
  91 *   specified in the module load parameter.
  92 *   Useful if a blacklist entry interfered with a non-broken device.
  93 */
  94#define SBP2_WORKAROUND_128K_MAX_TRANS  0x1
  95#define SBP2_WORKAROUND_INQUIRY_36      0x2
  96#define SBP2_WORKAROUND_MODE_SENSE_8    0x4
  97#define SBP2_WORKAROUND_FIX_CAPACITY    0x8
  98#define SBP2_WORKAROUND_DELAY_INQUIRY   0x10
  99#define SBP2_INQUIRY_DELAY              12
 100#define SBP2_WORKAROUND_OVERRIDE        0x100
 101
 102static int sbp2_param_workarounds;
 103module_param_named(workarounds, sbp2_param_workarounds, int, 0644);
 104MODULE_PARM_DESC(workarounds, "Work around device bugs (default = 0"
 105        ", 128kB max transfer = " __stringify(SBP2_WORKAROUND_128K_MAX_TRANS)
 106        ", 36 byte inquiry = "    __stringify(SBP2_WORKAROUND_INQUIRY_36)
 107        ", skip mode page 8 = "   __stringify(SBP2_WORKAROUND_MODE_SENSE_8)
 108        ", fix capacity = "       __stringify(SBP2_WORKAROUND_FIX_CAPACITY)
 109        ", delay inquiry = "      __stringify(SBP2_WORKAROUND_DELAY_INQUIRY)
 110        ", override internal blacklist = " __stringify(SBP2_WORKAROUND_OVERRIDE)
 111        ", or a combination)");
 112
 113/* I don't know why the SCSI stack doesn't define something like this... */
 114typedef void (*scsi_done_fn_t)(struct scsi_cmnd *);
 115
 116static const char sbp2_driver_name[] = "sbp2";
 117
 118/*
 119 * We create one struct sbp2_logical_unit per SBP-2 Logical Unit Number Entry
 120 * and one struct scsi_device per sbp2_logical_unit.
 121 */
 122struct sbp2_logical_unit {
 123        struct sbp2_target *tgt;
 124        struct list_head link;
 125        struct fw_address_handler address_handler;
 126        struct list_head orb_list;
 127
 128        u64 command_block_agent_address;
 129        u16 lun;
 130        int login_id;
 131
 132        /*
 133         * The generation is updated once we've logged in or reconnected
 134         * to the logical unit.  Thus, I/O to the device will automatically
 135         * fail and get retried if it happens in a window where the device
 136         * is not ready, e.g. after a bus reset but before we reconnect.
 137         */
 138        int generation;
 139        int retries;
 140        struct delayed_work work;
 141        bool has_sdev;
 142        bool blocked;
 143};
 144
 145/*
 146 * We create one struct sbp2_target per IEEE 1212 Unit Directory
 147 * and one struct Scsi_Host per sbp2_target.
 148 */
 149struct sbp2_target {
 150        struct kref kref;
 151        struct fw_unit *unit;
 152        const char *bus_id;
 153        struct list_head lu_list;
 154
 155        u64 management_agent_address;
 156        u64 guid;
 157        int directory_id;
 158        int node_id;
 159        int address_high;
 160        unsigned int workarounds;
 161        unsigned int mgt_orb_timeout;
 162
 163        int dont_block; /* counter for each logical unit */
 164        int blocked;    /* ditto */
 165};
 166
 167/*
 168 * Per section 7.4.8 of the SBP-2 spec, a mgt_ORB_timeout value can be
 169 * provided in the config rom. Most devices do provide a value, which
 170 * we'll use for login management orbs, but with some sane limits.
 171 */
 172#define SBP2_MIN_LOGIN_ORB_TIMEOUT      5000U   /* Timeout in ms */
 173#define SBP2_MAX_LOGIN_ORB_TIMEOUT      40000U  /* Timeout in ms */
 174#define SBP2_ORB_TIMEOUT                2000U   /* Timeout in ms */
 175#define SBP2_ORB_NULL                   0x80000000
 176#define SBP2_MAX_SG_ELEMENT_LENGTH      0xf000
 177#define SBP2_RETRY_LIMIT                0xf             /* 15 retries */
 178#define SBP2_CYCLE_LIMIT                (0xc8 << 12)    /* 200 125us cycles */
 179
 180/* Unit directory keys */
 181#define SBP2_CSR_UNIT_CHARACTERISTICS   0x3a
 182#define SBP2_CSR_FIRMWARE_REVISION      0x3c
 183#define SBP2_CSR_LOGICAL_UNIT_NUMBER    0x14
 184#define SBP2_CSR_LOGICAL_UNIT_DIRECTORY 0xd4
 185
 186/* Management orb opcodes */
 187#define SBP2_LOGIN_REQUEST              0x0
 188#define SBP2_QUERY_LOGINS_REQUEST       0x1
 189#define SBP2_RECONNECT_REQUEST          0x3
 190#define SBP2_SET_PASSWORD_REQUEST       0x4
 191#define SBP2_LOGOUT_REQUEST             0x7
 192#define SBP2_ABORT_TASK_REQUEST         0xb
 193#define SBP2_ABORT_TASK_SET             0xc
 194#define SBP2_LOGICAL_UNIT_RESET         0xe
 195#define SBP2_TARGET_RESET_REQUEST       0xf
 196
 197/* Offsets for command block agent registers */
 198#define SBP2_AGENT_STATE                0x00
 199#define SBP2_AGENT_RESET                0x04
 200#define SBP2_ORB_POINTER                0x08
 201#define SBP2_DOORBELL                   0x10
 202#define SBP2_UNSOLICITED_STATUS_ENABLE  0x14
 203
 204/* Status write response codes */
 205#define SBP2_STATUS_REQUEST_COMPLETE    0x0
 206#define SBP2_STATUS_TRANSPORT_FAILURE   0x1
 207#define SBP2_STATUS_ILLEGAL_REQUEST     0x2
 208#define SBP2_STATUS_VENDOR_DEPENDENT    0x3
 209
 210#define STATUS_GET_ORB_HIGH(v)          ((v).status & 0xffff)
 211#define STATUS_GET_SBP_STATUS(v)        (((v).status >> 16) & 0xff)
 212#define STATUS_GET_LEN(v)               (((v).status >> 24) & 0x07)
 213#define STATUS_GET_DEAD(v)              (((v).status >> 27) & 0x01)
 214#define STATUS_GET_RESPONSE(v)          (((v).status >> 28) & 0x03)
 215#define STATUS_GET_SOURCE(v)            (((v).status >> 30) & 0x03)
 216#define STATUS_GET_ORB_LOW(v)           ((v).orb_low)
 217#define STATUS_GET_DATA(v)              ((v).data)
 218
 219struct sbp2_status {
 220        u32 status;
 221        u32 orb_low;
 222        u8 data[24];
 223};
 224
 225struct sbp2_pointer {
 226        __be32 high;
 227        __be32 low;
 228};
 229
 230struct sbp2_orb {
 231        struct fw_transaction t;
 232        struct kref kref;
 233        dma_addr_t request_bus;
 234        int rcode;
 235        struct sbp2_pointer pointer;
 236        void (*callback)(struct sbp2_orb * orb, struct sbp2_status * status);
 237        struct list_head link;
 238};
 239
 240#define MANAGEMENT_ORB_LUN(v)                   ((v))
 241#define MANAGEMENT_ORB_FUNCTION(v)              ((v) << 16)
 242#define MANAGEMENT_ORB_RECONNECT(v)             ((v) << 20)
 243#define MANAGEMENT_ORB_EXCLUSIVE(v)             ((v) ? 1 << 28 : 0)
 244#define MANAGEMENT_ORB_REQUEST_FORMAT(v)        ((v) << 29)
 245#define MANAGEMENT_ORB_NOTIFY                   ((1) << 31)
 246
 247#define MANAGEMENT_ORB_RESPONSE_LENGTH(v)       ((v))
 248#define MANAGEMENT_ORB_PASSWORD_LENGTH(v)       ((v) << 16)
 249
 250struct sbp2_management_orb {
 251        struct sbp2_orb base;
 252        struct {
 253                struct sbp2_pointer password;
 254                struct sbp2_pointer response;
 255                __be32 misc;
 256                __be32 length;
 257                struct sbp2_pointer status_fifo;
 258        } request;
 259        __be32 response[4];
 260        dma_addr_t response_bus;
 261        struct completion done;
 262        struct sbp2_status status;
 263};
 264
 265struct sbp2_login_response {
 266        __be32 misc;
 267        struct sbp2_pointer command_block_agent;
 268        __be32 reconnect_hold;
 269};
 270#define COMMAND_ORB_DATA_SIZE(v)        ((v))
 271#define COMMAND_ORB_PAGE_SIZE(v)        ((v) << 16)
 272#define COMMAND_ORB_PAGE_TABLE_PRESENT  ((1) << 19)
 273#define COMMAND_ORB_MAX_PAYLOAD(v)      ((v) << 20)
 274#define COMMAND_ORB_SPEED(v)            ((v) << 24)
 275#define COMMAND_ORB_DIRECTION           ((1) << 27)
 276#define COMMAND_ORB_REQUEST_FORMAT(v)   ((v) << 29)
 277#define COMMAND_ORB_NOTIFY              ((1) << 31)
 278
 279struct sbp2_command_orb {
 280        struct sbp2_orb base;
 281        struct {
 282                struct sbp2_pointer next;
 283                struct sbp2_pointer data_descriptor;
 284                __be32 misc;
 285                u8 command_block[12];
 286        } request;
 287        struct scsi_cmnd *cmd;
 288        scsi_done_fn_t done;
 289        struct sbp2_logical_unit *lu;
 290
 291        struct sbp2_pointer page_table[SG_ALL] __attribute__((aligned(8)));
 292        dma_addr_t page_table_bus;
 293};
 294
 295/*
 296 * List of devices with known bugs.
 297 *
 298 * The firmware_revision field, masked with 0xffff00, is the best
 299 * indicator for the type of bridge chip of a device.  It yields a few
 300 * false positives but this did not break correctly behaving devices
 301 * so far.  We use ~0 as a wildcard, since the 24 bit values we get
 302 * from the config rom can never match that.
 303 */
 304static const struct {
 305        u32 firmware_revision;
 306        u32 model;
 307        unsigned int workarounds;
 308} sbp2_workarounds_table[] = {
 309        /* DViCO Momobay CX-1 with TSB42AA9 bridge */ {
 310                .firmware_revision      = 0x002800,
 311                .model                  = 0x001010,
 312                .workarounds            = SBP2_WORKAROUND_INQUIRY_36 |
 313                                          SBP2_WORKAROUND_MODE_SENSE_8,
 314        },
 315        /* DViCO Momobay FX-3A with TSB42AA9A bridge */ {
 316                .firmware_revision      = 0x002800,
 317                .model                  = 0x000000,
 318                .workarounds            = SBP2_WORKAROUND_DELAY_INQUIRY,
 319        },
 320        /* Initio bridges, actually only needed for some older ones */ {
 321                .firmware_revision      = 0x000200,
 322                .model                  = ~0,
 323                .workarounds            = SBP2_WORKAROUND_INQUIRY_36,
 324        },
 325        /* Symbios bridge */ {
 326                .firmware_revision      = 0xa0b800,
 327                .model                  = ~0,
 328                .workarounds            = SBP2_WORKAROUND_128K_MAX_TRANS,
 329        },
 330        /* Datafab MD2-FW2 with Symbios/LSILogic SYM13FW500 bridge */ {
 331                .firmware_revision      = 0x002600,
 332                .model                  = ~0,
 333                .workarounds            = SBP2_WORKAROUND_128K_MAX_TRANS,
 334        },
 335
 336        /*
 337         * There are iPods (2nd gen, 3rd gen) with model_id == 0, but
 338         * these iPods do not feature the read_capacity bug according
 339         * to one report.  Read_capacity behaviour as well as model_id
 340         * could change due to Apple-supplied firmware updates though.
 341         */
 342
 343        /* iPod 4th generation. */ {
 344                .firmware_revision      = 0x0a2700,
 345                .model                  = 0x000021,
 346                .workarounds            = SBP2_WORKAROUND_FIX_CAPACITY,
 347        },
 348        /* iPod mini */ {
 349                .firmware_revision      = 0x0a2700,
 350                .model                  = 0x000023,
 351                .workarounds            = SBP2_WORKAROUND_FIX_CAPACITY,
 352        },
 353        /* iPod Photo */ {
 354                .firmware_revision      = 0x0a2700,
 355                .model                  = 0x00007e,
 356                .workarounds            = SBP2_WORKAROUND_FIX_CAPACITY,
 357        }
 358};
 359
 360static void
 361free_orb(struct kref *kref)
 362{
 363        struct sbp2_orb *orb = container_of(kref, struct sbp2_orb, kref);
 364
 365        kfree(orb);
 366}
 367
 368static void
 369sbp2_status_write(struct fw_card *card, struct fw_request *request,
 370                  int tcode, int destination, int source,
 371                  int generation, int speed,
 372                  unsigned long long offset,
 373                  void *payload, size_t length, void *callback_data)
 374{
 375        struct sbp2_logical_unit *lu = callback_data;
 376        struct sbp2_orb *orb;
 377        struct sbp2_status status;
 378        size_t header_size;
 379        unsigned long flags;
 380
 381        if (tcode != TCODE_WRITE_BLOCK_REQUEST ||
 382            length == 0 || length > sizeof(status)) {
 383                fw_send_response(card, request, RCODE_TYPE_ERROR);
 384                return;
 385        }
 386
 387        header_size = min(length, 2 * sizeof(u32));
 388        fw_memcpy_from_be32(&status, payload, header_size);
 389        if (length > header_size)
 390                memcpy(status.data, payload + 8, length - header_size);
 391        if (STATUS_GET_SOURCE(status) == 2 || STATUS_GET_SOURCE(status) == 3) {
 392                fw_notify("non-orb related status write, not handled\n");
 393                fw_send_response(card, request, RCODE_COMPLETE);
 394                return;
 395        }
 396
 397        /* Lookup the orb corresponding to this status write. */
 398        spin_lock_irqsave(&card->lock, flags);
 399        list_for_each_entry(orb, &lu->orb_list, link) {
 400                if (STATUS_GET_ORB_HIGH(status) == 0 &&
 401                    STATUS_GET_ORB_LOW(status) == orb->request_bus) {
 402                        orb->rcode = RCODE_COMPLETE;
 403                        list_del(&orb->link);
 404                        break;
 405                }
 406        }
 407        spin_unlock_irqrestore(&card->lock, flags);
 408
 409        if (&orb->link != &lu->orb_list)
 410                orb->callback(orb, &status);
 411        else
 412                fw_error("status write for unknown orb\n");
 413
 414        kref_put(&orb->kref, free_orb);
 415
 416        fw_send_response(card, request, RCODE_COMPLETE);
 417}
 418
 419static void
 420complete_transaction(struct fw_card *card, int rcode,
 421                     void *payload, size_t length, void *data)
 422{
 423        struct sbp2_orb *orb = data;
 424        unsigned long flags;
 425
 426        /*
 427         * This is a little tricky.  We can get the status write for
 428         * the orb before we get this callback.  The status write
 429         * handler above will assume the orb pointer transaction was
 430         * successful and set the rcode to RCODE_COMPLETE for the orb.
 431         * So this callback only sets the rcode if it hasn't already
 432         * been set and only does the cleanup if the transaction
 433         * failed and we didn't already get a status write.
 434         */
 435        spin_lock_irqsave(&card->lock, flags);
 436
 437        if (orb->rcode == -1)
 438                orb->rcode = rcode;
 439        if (orb->rcode != RCODE_COMPLETE) {
 440                list_del(&orb->link);
 441                spin_unlock_irqrestore(&card->lock, flags);
 442                orb->callback(orb, NULL);
 443        } else {
 444                spin_unlock_irqrestore(&card->lock, flags);
 445        }
 446
 447        kref_put(&orb->kref, free_orb);
 448}
 449
 450static void
 451sbp2_send_orb(struct sbp2_orb *orb, struct sbp2_logical_unit *lu,
 452              int node_id, int generation, u64 offset)
 453{
 454        struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
 455        unsigned long flags;
 456
 457        orb->pointer.high = 0;
 458        orb->pointer.low = cpu_to_be32(orb->request_bus);
 459
 460        spin_lock_irqsave(&device->card->lock, flags);
 461        list_add_tail(&orb->link, &lu->orb_list);
 462        spin_unlock_irqrestore(&device->card->lock, flags);
 463
 464        /* Take a ref for the orb list and for the transaction callback. */
 465        kref_get(&orb->kref);
 466        kref_get(&orb->kref);
 467
 468        fw_send_request(device->card, &orb->t, TCODE_WRITE_BLOCK_REQUEST,
 469                        node_id, generation, device->max_speed, offset,
 470                        &orb->pointer, sizeof(orb->pointer),
 471                        complete_transaction, orb);
 472}
 473
 474static int sbp2_cancel_orbs(struct sbp2_logical_unit *lu)
 475{
 476        struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
 477        struct sbp2_orb *orb, *next;
 478        struct list_head list;
 479        unsigned long flags;
 480        int retval = -ENOENT;
 481
 482        INIT_LIST_HEAD(&list);
 483        spin_lock_irqsave(&device->card->lock, flags);
 484        list_splice_init(&lu->orb_list, &list);
 485        spin_unlock_irqrestore(&device->card->lock, flags);
 486
 487        list_for_each_entry_safe(orb, next, &list, link) {
 488                retval = 0;
 489                if (fw_cancel_transaction(device->card, &orb->t) == 0)
 490                        continue;
 491
 492                orb->rcode = RCODE_CANCELLED;
 493                orb->callback(orb, NULL);
 494        }
 495
 496        return retval;
 497}
 498
 499static void
 500complete_management_orb(struct sbp2_orb *base_orb, struct sbp2_status *status)
 501{
 502        struct sbp2_management_orb *orb =
 503                container_of(base_orb, struct sbp2_management_orb, base);
 504
 505        if (status)
 506                memcpy(&orb->status, status, sizeof(*status));
 507        complete(&orb->done);
 508}
 509
 510static int
 511sbp2_send_management_orb(struct sbp2_logical_unit *lu, int node_id,
 512                         int generation, int function, int lun_or_login_id,
 513                         void *response)
 514{
 515        struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
 516        struct sbp2_management_orb *orb;
 517        unsigned int timeout;
 518        int retval = -ENOMEM;
 519
 520        if (function == SBP2_LOGOUT_REQUEST && fw_device_is_shutdown(device))
 521                return 0;
 522
 523        orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
 524        if (orb == NULL)
 525                return -ENOMEM;
 526
 527        kref_init(&orb->base.kref);
 528        orb->response_bus =
 529                dma_map_single(device->card->device, &orb->response,
 530                               sizeof(orb->response), DMA_FROM_DEVICE);
 531        if (dma_mapping_error(orb->response_bus))
 532                goto fail_mapping_response;
 533
 534        orb->request.response.high = 0;
 535        orb->request.response.low  = cpu_to_be32(orb->response_bus);
 536
 537        orb->request.misc = cpu_to_be32(
 538                MANAGEMENT_ORB_NOTIFY |
 539                MANAGEMENT_ORB_FUNCTION(function) |
 540                MANAGEMENT_ORB_LUN(lun_or_login_id));
 541        orb->request.length = cpu_to_be32(
 542                MANAGEMENT_ORB_RESPONSE_LENGTH(sizeof(orb->response)));
 543
 544        orb->request.status_fifo.high =
 545                cpu_to_be32(lu->address_handler.offset >> 32);
 546        orb->request.status_fifo.low  =
 547                cpu_to_be32(lu->address_handler.offset);
 548
 549        if (function == SBP2_LOGIN_REQUEST) {
 550                /* Ask for 2^2 == 4 seconds reconnect grace period */
 551                orb->request.misc |= cpu_to_be32(
 552                        MANAGEMENT_ORB_RECONNECT(2) |
 553                        MANAGEMENT_ORB_EXCLUSIVE(sbp2_param_exclusive_login));
 554                timeout = lu->tgt->mgt_orb_timeout;
 555        } else {
 556                timeout = SBP2_ORB_TIMEOUT;
 557        }
 558
 559        init_completion(&orb->done);
 560        orb->base.callback = complete_management_orb;
 561
 562        orb->base.request_bus =
 563                dma_map_single(device->card->device, &orb->request,
 564                               sizeof(orb->request), DMA_TO_DEVICE);
 565        if (dma_mapping_error(orb->base.request_bus))
 566                goto fail_mapping_request;
 567
 568        sbp2_send_orb(&orb->base, lu, node_id, generation,
 569                      lu->tgt->management_agent_address);
 570
 571        wait_for_completion_timeout(&orb->done, msecs_to_jiffies(timeout));
 572
 573        retval = -EIO;
 574        if (sbp2_cancel_orbs(lu) == 0) {
 575                fw_error("%s: orb reply timed out, rcode=0x%02x\n",
 576                         lu->tgt->bus_id, orb->base.rcode);
 577                goto out;
 578        }
 579
 580        if (orb->base.rcode != RCODE_COMPLETE) {
 581                fw_error("%s: management write failed, rcode 0x%02x\n",
 582                         lu->tgt->bus_id, orb->base.rcode);
 583                goto out;
 584        }
 585
 586        if (STATUS_GET_RESPONSE(orb->status) != 0 ||
 587            STATUS_GET_SBP_STATUS(orb->status) != 0) {
 588                fw_error("%s: error status: %d:%d\n", lu->tgt->bus_id,
 589                         STATUS_GET_RESPONSE(orb->status),
 590                         STATUS_GET_SBP_STATUS(orb->status));
 591                goto out;
 592        }
 593
 594        retval = 0;
 595 out:
 596        dma_unmap_single(device->card->device, orb->base.request_bus,
 597                         sizeof(orb->request), DMA_TO_DEVICE);
 598 fail_mapping_request:
 599        dma_unmap_single(device->card->device, orb->response_bus,
 600                         sizeof(orb->response), DMA_FROM_DEVICE);
 601 fail_mapping_response:
 602        if (response)
 603                memcpy(response, orb->response, sizeof(orb->response));
 604        kref_put(&orb->base.kref, free_orb);
 605
 606        return retval;
 607}
 608
 609static void
 610complete_agent_reset_write(struct fw_card *card, int rcode,
 611                           void *payload, size_t length, void *done)
 612{
 613        complete(done);
 614}
 615
 616static void sbp2_agent_reset(struct sbp2_logical_unit *lu)
 617{
 618        struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
 619        DECLARE_COMPLETION_ONSTACK(done);
 620        struct fw_transaction t;
 621        static u32 z;
 622
 623        fw_send_request(device->card, &t, TCODE_WRITE_QUADLET_REQUEST,
 624                        lu->tgt->node_id, lu->generation, device->max_speed,
 625                        lu->command_block_agent_address + SBP2_AGENT_RESET,
 626                        &z, sizeof(z), complete_agent_reset_write, &done);
 627        wait_for_completion(&done);
 628}
 629
 630static void
 631complete_agent_reset_write_no_wait(struct fw_card *card, int rcode,
 632                                   void *payload, size_t length, void *data)
 633{
 634        kfree(data);
 635}
 636
 637static void sbp2_agent_reset_no_wait(struct sbp2_logical_unit *lu)
 638{
 639        struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
 640        struct fw_transaction *t;
 641        static u32 z;
 642
 643        t = kmalloc(sizeof(*t), GFP_ATOMIC);
 644        if (t == NULL)
 645                return;
 646
 647        fw_send_request(device->card, t, TCODE_WRITE_QUADLET_REQUEST,
 648                        lu->tgt->node_id, lu->generation, device->max_speed,
 649                        lu->command_block_agent_address + SBP2_AGENT_RESET,
 650                        &z, sizeof(z), complete_agent_reset_write_no_wait, t);
 651}
 652
 653static void sbp2_set_generation(struct sbp2_logical_unit *lu, int generation)
 654{
 655        struct fw_card *card = fw_device(lu->tgt->unit->device.parent)->card;
 656        unsigned long flags;
 657
 658        /* serialize with comparisons of lu->generation and card->generation */
 659        spin_lock_irqsave(&card->lock, flags);
 660        lu->generation = generation;
 661        spin_unlock_irqrestore(&card->lock, flags);
 662}
 663
 664static inline void sbp2_allow_block(struct sbp2_logical_unit *lu)
 665{
 666        /*
 667         * We may access dont_block without taking card->lock here:
 668         * All callers of sbp2_allow_block() and all callers of sbp2_unblock()
 669         * are currently serialized against each other.
 670         * And a wrong result in sbp2_conditionally_block()'s access of
 671         * dont_block is rather harmless, it simply misses its first chance.
 672         */
 673        --lu->tgt->dont_block;
 674}
 675
 676/*
 677 * Blocks lu->tgt if all of the following conditions are met:
 678 *   - Login, INQUIRY, and high-level SCSI setup of all of the target's
 679 *     logical units have been finished (indicated by dont_block == 0).
 680 *   - lu->generation is stale.
 681 *
 682 * Note, scsi_block_requests() must be called while holding card->lock,
 683 * otherwise it might foil sbp2_[conditionally_]unblock()'s attempt to
 684 * unblock the target.
 685 */
 686static void sbp2_conditionally_block(struct sbp2_logical_unit *lu)
 687{
 688        struct sbp2_target *tgt = lu->tgt;
 689        struct fw_card *card = fw_device(tgt->unit->device.parent)->card;
 690        struct Scsi_Host *shost =
 691                container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
 692        unsigned long flags;
 693
 694        spin_lock_irqsave(&card->lock, flags);
 695        if (!tgt->dont_block && !lu->blocked &&
 696            lu->generation != card->generation) {
 697                lu->blocked = true;
 698                if (++tgt->blocked == 1)
 699                        scsi_block_requests(shost);
 700        }
 701        spin_unlock_irqrestore(&card->lock, flags);
 702}
 703
 704/*
 705 * Unblocks lu->tgt as soon as all its logical units can be unblocked.
 706 * Note, it is harmless to run scsi_unblock_requests() outside the
 707 * card->lock protected section.  On the other hand, running it inside
 708 * the section might clash with shost->host_lock.
 709 */
 710static void sbp2_conditionally_unblock(struct sbp2_logical_unit *lu)
 711{
 712        struct sbp2_target *tgt = lu->tgt;
 713        struct fw_card *card = fw_device(tgt->unit->device.parent)->card;
 714        struct Scsi_Host *shost =
 715                container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
 716        unsigned long flags;
 717        bool unblock = false;
 718
 719        spin_lock_irqsave(&card->lock, flags);
 720        if (lu->blocked && lu->generation == card->generation) {
 721                lu->blocked = false;
 722                unblock = --tgt->blocked == 0;
 723        }
 724        spin_unlock_irqrestore(&card->lock, flags);
 725
 726        if (unblock)
 727                scsi_unblock_requests(shost);
 728}
 729
 730/*
 731 * Prevents future blocking of tgt and unblocks it.
 732 * Note, it is harmless to run scsi_unblock_requests() outside the
 733 * card->lock protected section.  On the other hand, running it inside
 734 * the section might clash with shost->host_lock.
 735 */
 736static void sbp2_unblock(struct sbp2_target *tgt)
 737{
 738        struct fw_card *card = fw_device(tgt->unit->device.parent)->card;
 739        struct Scsi_Host *shost =
 740                container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
 741        unsigned long flags;
 742
 743        spin_lock_irqsave(&card->lock, flags);
 744        ++tgt->dont_block;
 745        spin_unlock_irqrestore(&card->lock, flags);
 746
 747        scsi_unblock_requests(shost);
 748}
 749
 750static int sbp2_lun2int(u16 lun)
 751{
 752        struct scsi_lun eight_bytes_lun;
 753
 754        memset(&eight_bytes_lun, 0, sizeof(eight_bytes_lun));
 755        eight_bytes_lun.scsi_lun[0] = (lun >> 8) & 0xff;
 756        eight_bytes_lun.scsi_lun[1] = lun & 0xff;
 757
 758        return scsilun_to_int(&eight_bytes_lun);
 759}
 760
 761static void sbp2_release_target(struct kref *kref)
 762{
 763        struct sbp2_target *tgt = container_of(kref, struct sbp2_target, kref);
 764        struct sbp2_logical_unit *lu, *next;
 765        struct Scsi_Host *shost =
 766                container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
 767        struct scsi_device *sdev;
 768        struct fw_device *device = fw_device(tgt->unit->device.parent);
 769
 770        /* prevent deadlocks */
 771        sbp2_unblock(tgt);
 772
 773        list_for_each_entry_safe(lu, next, &tgt->lu_list, link) {
 774                sdev = scsi_device_lookup(shost, 0, 0, sbp2_lun2int(lu->lun));
 775                if (sdev) {
 776                        scsi_remove_device(sdev);
 777                        scsi_device_put(sdev);
 778                }
 779                sbp2_send_management_orb(lu, tgt->node_id, lu->generation,
 780                                SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
 781
 782                fw_core_remove_address_handler(&lu->address_handler);
 783                list_del(&lu->link);
 784                kfree(lu);
 785        }
 786        scsi_remove_host(shost);
 787        fw_notify("released %s, target %d:0:0\n", tgt->bus_id, shost->host_no);
 788
 789        fw_unit_put(tgt->unit);
 790        scsi_host_put(shost);
 791        fw_device_put(device);
 792}
 793
 794static struct workqueue_struct *sbp2_wq;
 795
 796/*
 797 * Always get the target's kref when scheduling work on one its units.
 798 * Each workqueue job is responsible to call sbp2_target_put() upon return.
 799 */
 800static void sbp2_queue_work(struct sbp2_logical_unit *lu, unsigned long delay)
 801{
 802        if (queue_delayed_work(sbp2_wq, &lu->work, delay))
 803                kref_get(&lu->tgt->kref);
 804}
 805
 806static void sbp2_target_put(struct sbp2_target *tgt)
 807{
 808        kref_put(&tgt->kref, sbp2_release_target);
 809}
 810
 811static void
 812complete_set_busy_timeout(struct fw_card *card, int rcode,
 813                          void *payload, size_t length, void *done)
 814{
 815        complete(done);
 816}
 817
 818/*
 819 * Write retransmit retry values into the BUSY_TIMEOUT register.
 820 * - The single-phase retry protocol is supported by all SBP-2 devices, but the
 821 *   default retry_limit value is 0 (i.e. never retry transmission). We write a
 822 *   saner value after logging into the device.
 823 * - The dual-phase retry protocol is optional to implement, and if not
 824 *   supported, writes to the dual-phase portion of the register will be
 825 *   ignored. We try to write the original 1394-1995 default here.
 826 * - In the case of devices that are also SBP-3-compliant, all writes are
 827 *   ignored, as the register is read-only, but contains single-phase retry of
 828 *   15, which is what we're trying to set for all SBP-2 device anyway, so this
 829 *   write attempt is safe and yields more consistent behavior for all devices.
 830 *
 831 * See section 8.3.2.3.5 of the 1394-1995 spec, section 6.2 of the SBP-2 spec,
 832 * and section 6.4 of the SBP-3 spec for further details.
 833 */
 834static void sbp2_set_busy_timeout(struct sbp2_logical_unit *lu)
 835{
 836        struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
 837        DECLARE_COMPLETION_ONSTACK(done);
 838        struct fw_transaction t;
 839        static __be32 busy_timeout;
 840
 841        busy_timeout = cpu_to_be32(SBP2_CYCLE_LIMIT | SBP2_RETRY_LIMIT);
 842
 843        fw_send_request(device->card, &t, TCODE_WRITE_QUADLET_REQUEST,
 844                        lu->tgt->node_id, lu->generation, device->max_speed,
 845                        CSR_REGISTER_BASE + CSR_BUSY_TIMEOUT, &busy_timeout,
 846                        sizeof(busy_timeout), complete_set_busy_timeout, &done);
 847        wait_for_completion(&done);
 848}
 849
 850static void sbp2_reconnect(struct work_struct *work);
 851
 852static void sbp2_login(struct work_struct *work)
 853{
 854        struct sbp2_logical_unit *lu =
 855                container_of(work, struct sbp2_logical_unit, work.work);
 856        struct sbp2_target *tgt = lu->tgt;
 857        struct fw_device *device = fw_device(tgt->unit->device.parent);
 858        struct Scsi_Host *shost;
 859        struct scsi_device *sdev;
 860        struct sbp2_login_response response;
 861        int generation, node_id, local_node_id;
 862
 863        if (fw_device_is_shutdown(device))
 864                goto out;
 865
 866        generation    = device->generation;
 867        smp_rmb();    /* node_id must not be older than generation */
 868        node_id       = device->node_id;
 869        local_node_id = device->card->node_id;
 870
 871        /* If this is a re-login attempt, log out, or we might be rejected. */
 872        if (lu->has_sdev)
 873                sbp2_send_management_orb(lu, device->node_id, generation,
 874                                SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
 875
 876        if (sbp2_send_management_orb(lu, node_id, generation,
 877                                SBP2_LOGIN_REQUEST, lu->lun, &response) < 0) {
 878                if (lu->retries++ < 5) {
 879                        sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
 880                } else {
 881                        fw_error("%s: failed to login to LUN %04x\n",
 882                                 tgt->bus_id, lu->lun);
 883                        /* Let any waiting I/O fail from now on. */
 884                        sbp2_unblock(lu->tgt);
 885                }
 886                goto out;
 887        }
 888
 889        tgt->node_id      = node_id;
 890        tgt->address_high = local_node_id << 16;
 891        sbp2_set_generation(lu, generation);
 892
 893        lu->command_block_agent_address =
 894                ((u64)(be32_to_cpu(response.command_block_agent.high) & 0xffff)
 895                      << 32) | be32_to_cpu(response.command_block_agent.low);
 896        lu->login_id = be32_to_cpu(response.misc) & 0xffff;
 897
 898        fw_notify("%s: logged in to LUN %04x (%d retries)\n",
 899                  tgt->bus_id, lu->lun, lu->retries);
 900
 901        /* set appropriate retry limit(s) in BUSY_TIMEOUT register */
 902        sbp2_set_busy_timeout(lu);
 903
 904        PREPARE_DELAYED_WORK(&lu->work, sbp2_reconnect);
 905        sbp2_agent_reset(lu);
 906
 907        /* This was a re-login. */
 908        if (lu->has_sdev) {
 909                sbp2_cancel_orbs(lu);
 910                sbp2_conditionally_unblock(lu);
 911                goto out;
 912        }
 913
 914        if (lu->tgt->workarounds & SBP2_WORKAROUND_DELAY_INQUIRY)
 915                ssleep(SBP2_INQUIRY_DELAY);
 916
 917        shost = container_of((void *)tgt, struct Scsi_Host, hostdata[0]);
 918        sdev = __scsi_add_device(shost, 0, 0, sbp2_lun2int(lu->lun), lu);
 919        /*
 920         * FIXME:  We are unable to perform reconnects while in sbp2_login().
 921         * Therefore __scsi_add_device() will get into trouble if a bus reset
 922         * happens in parallel.  It will either fail or leave us with an
 923         * unusable sdev.  As a workaround we check for this and retry the
 924         * whole login and SCSI probing.
 925         */
 926
 927        /* Reported error during __scsi_add_device() */
 928        if (IS_ERR(sdev))
 929                goto out_logout_login;
 930
 931        /* Unreported error during __scsi_add_device() */
 932        smp_rmb(); /* get current card generation */
 933        if (generation != device->card->generation) {
 934                scsi_remove_device(sdev);
 935                scsi_device_put(sdev);
 936                goto out_logout_login;
 937        }
 938
 939        /* No error during __scsi_add_device() */
 940        lu->has_sdev = true;
 941        scsi_device_put(sdev);
 942        sbp2_allow_block(lu);
 943        goto out;
 944
 945 out_logout_login:
 946        smp_rmb(); /* generation may have changed */
 947        generation = device->generation;
 948        smp_rmb(); /* node_id must not be older than generation */
 949
 950        sbp2_send_management_orb(lu, device->node_id, generation,
 951                                 SBP2_LOGOUT_REQUEST, lu->login_id, NULL);
 952        /*
 953         * If a bus reset happened, sbp2_update will have requeued
 954         * lu->work already.  Reset the work from reconnect to login.
 955         */
 956        PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
 957 out:
 958        sbp2_target_put(tgt);
 959}
 960
 961static int sbp2_add_logical_unit(struct sbp2_target *tgt, int lun_entry)
 962{
 963        struct sbp2_logical_unit *lu;
 964
 965        lu = kmalloc(sizeof(*lu), GFP_KERNEL);
 966        if (!lu)
 967                return -ENOMEM;
 968
 969        lu->address_handler.length           = 0x100;
 970        lu->address_handler.address_callback = sbp2_status_write;
 971        lu->address_handler.callback_data    = lu;
 972
 973        if (fw_core_add_address_handler(&lu->address_handler,
 974                                        &fw_high_memory_region) < 0) {
 975                kfree(lu);
 976                return -ENOMEM;
 977        }
 978
 979        lu->tgt      = tgt;
 980        lu->lun      = lun_entry & 0xffff;
 981        lu->retries  = 0;
 982        lu->has_sdev = false;
 983        lu->blocked  = false;
 984        ++tgt->dont_block;
 985        INIT_LIST_HEAD(&lu->orb_list);
 986        INIT_DELAYED_WORK(&lu->work, sbp2_login);
 987
 988        list_add_tail(&lu->link, &tgt->lu_list);
 989        return 0;
 990}
 991
 992static int sbp2_scan_logical_unit_dir(struct sbp2_target *tgt, u32 *directory)
 993{
 994        struct fw_csr_iterator ci;
 995        int key, value;
 996
 997        fw_csr_iterator_init(&ci, directory);
 998        while (fw_csr_iterator_next(&ci, &key, &value))
 999                if (key == SBP2_CSR_LOGICAL_UNIT_NUMBER &&
1000                    sbp2_add_logical_unit(tgt, value) < 0)
1001                        return -ENOMEM;
1002        return 0;
1003}
1004
1005static int sbp2_scan_unit_dir(struct sbp2_target *tgt, u32 *directory,
1006                              u32 *model, u32 *firmware_revision)
1007{
1008        struct fw_csr_iterator ci;
1009        int key, value;
1010        unsigned int timeout;
1011
1012        fw_csr_iterator_init(&ci, directory);
1013        while (fw_csr_iterator_next(&ci, &key, &value)) {
1014                switch (key) {
1015
1016                case CSR_DEPENDENT_INFO | CSR_OFFSET:
1017                        tgt->management_agent_address =
1018                                        CSR_REGISTER_BASE + 4 * value;
1019                        break;
1020
1021                case CSR_DIRECTORY_ID:
1022                        tgt->directory_id = value;
1023                        break;
1024
1025                case CSR_MODEL:
1026                        *model = value;
1027                        break;
1028
1029                case SBP2_CSR_FIRMWARE_REVISION:
1030                        *firmware_revision = value;
1031                        break;
1032
1033                case SBP2_CSR_UNIT_CHARACTERISTICS:
1034                        /* the timeout value is stored in 500ms units */
1035                        timeout = ((unsigned int) value >> 8 & 0xff) * 500;
1036                        timeout = max(timeout, SBP2_MIN_LOGIN_ORB_TIMEOUT);
1037                        tgt->mgt_orb_timeout =
1038                                  min(timeout, SBP2_MAX_LOGIN_ORB_TIMEOUT);
1039
1040                        if (timeout > tgt->mgt_orb_timeout)
1041                                fw_notify("%s: config rom contains %ds "
1042                                          "management ORB timeout, limiting "
1043                                          "to %ds\n", tgt->bus_id,
1044                                          timeout / 1000,
1045                                          tgt->mgt_orb_timeout / 1000);
1046                        break;
1047
1048                case SBP2_CSR_LOGICAL_UNIT_NUMBER:
1049                        if (sbp2_add_logical_unit(tgt, value) < 0)
1050                                return -ENOMEM;
1051                        break;
1052
1053                case SBP2_CSR_LOGICAL_UNIT_DIRECTORY:
1054                        /* Adjust for the increment in the iterator */
1055                        if (sbp2_scan_logical_unit_dir(tgt, ci.p - 1 + value) < 0)
1056                                return -ENOMEM;
1057                        break;
1058                }
1059        }
1060        return 0;
1061}
1062
1063static void sbp2_init_workarounds(struct sbp2_target *tgt, u32 model,
1064                                  u32 firmware_revision)
1065{
1066        int i;
1067        unsigned int w = sbp2_param_workarounds;
1068
1069        if (w)
1070                fw_notify("Please notify linux1394-devel@lists.sourceforge.net "
1071                          "if you need the workarounds parameter for %s\n",
1072                          tgt->bus_id);
1073
1074        if (w & SBP2_WORKAROUND_OVERRIDE)
1075                goto out;
1076
1077        for (i = 0; i < ARRAY_SIZE(sbp2_workarounds_table); i++) {
1078
1079                if (sbp2_workarounds_table[i].firmware_revision !=
1080                    (firmware_revision & 0xffffff00))
1081                        continue;
1082
1083                if (sbp2_workarounds_table[i].model != model &&
1084                    sbp2_workarounds_table[i].model != ~0)
1085                        continue;
1086
1087                w |= sbp2_workarounds_table[i].workarounds;
1088                break;
1089        }
1090 out:
1091        if (w)
1092                fw_notify("Workarounds for %s: 0x%x "
1093                          "(firmware_revision 0x%06x, model_id 0x%06x)\n",
1094                          tgt->bus_id, w, firmware_revision, model);
1095        tgt->workarounds = w;
1096}
1097
1098static struct scsi_host_template scsi_driver_template;
1099
1100static int sbp2_probe(struct device *dev)
1101{
1102        struct fw_unit *unit = fw_unit(dev);
1103        struct fw_device *device = fw_device(unit->device.parent);
1104        struct sbp2_target *tgt;
1105        struct sbp2_logical_unit *lu;
1106        struct Scsi_Host *shost;
1107        u32 model, firmware_revision;
1108
1109        shost = scsi_host_alloc(&scsi_driver_template, sizeof(*tgt));
1110        if (shost == NULL)
1111                return -ENOMEM;
1112
1113        tgt = (struct sbp2_target *)shost->hostdata;
1114        unit->device.driver_data = tgt;
1115        tgt->unit = unit;
1116        kref_init(&tgt->kref);
1117        INIT_LIST_HEAD(&tgt->lu_list);
1118        tgt->bus_id = unit->device.bus_id;
1119        tgt->guid = (u64)device->config_rom[3] << 32 | device->config_rom[4];
1120
1121        if (fw_device_enable_phys_dma(device) < 0)
1122                goto fail_shost_put;
1123
1124        if (scsi_add_host(shost, &unit->device) < 0)
1125                goto fail_shost_put;
1126
1127        fw_device_get(device);
1128        fw_unit_get(unit);
1129
1130        /* Initialize to values that won't match anything in our table. */
1131        firmware_revision = 0xff000000;
1132        model = 0xff000000;
1133
1134        /* implicit directory ID */
1135        tgt->directory_id = ((unit->directory - device->config_rom) * 4
1136                             + CSR_CONFIG_ROM) & 0xffffff;
1137
1138        if (sbp2_scan_unit_dir(tgt, unit->directory, &model,
1139                               &firmware_revision) < 0)
1140                goto fail_tgt_put;
1141
1142        sbp2_init_workarounds(tgt, model, firmware_revision);
1143
1144        /* Do the login in a workqueue so we can easily reschedule retries. */
1145        list_for_each_entry(lu, &tgt->lu_list, link)
1146                sbp2_queue_work(lu, 0);
1147        return 0;
1148
1149 fail_tgt_put:
1150        sbp2_target_put(tgt);
1151        return -ENOMEM;
1152
1153 fail_shost_put:
1154        scsi_host_put(shost);
1155        return -ENOMEM;
1156}
1157
1158static int sbp2_remove(struct device *dev)
1159{
1160        struct fw_unit *unit = fw_unit(dev);
1161        struct sbp2_target *tgt = unit->device.driver_data;
1162
1163        sbp2_target_put(tgt);
1164        return 0;
1165}
1166
1167static void sbp2_reconnect(struct work_struct *work)
1168{
1169        struct sbp2_logical_unit *lu =
1170                container_of(work, struct sbp2_logical_unit, work.work);
1171        struct sbp2_target *tgt = lu->tgt;
1172        struct fw_device *device = fw_device(tgt->unit->device.parent);
1173        int generation, node_id, local_node_id;
1174
1175        if (fw_device_is_shutdown(device))
1176                goto out;
1177
1178        generation    = device->generation;
1179        smp_rmb();    /* node_id must not be older than generation */
1180        node_id       = device->node_id;
1181        local_node_id = device->card->node_id;
1182
1183        if (sbp2_send_management_orb(lu, node_id, generation,
1184                                     SBP2_RECONNECT_REQUEST,
1185                                     lu->login_id, NULL) < 0) {
1186                /*
1187                 * If reconnect was impossible even though we are in the
1188                 * current generation, fall back and try to log in again.
1189                 *
1190                 * We could check for "Function rejected" status, but
1191                 * looking at the bus generation as simpler and more general.
1192                 */
1193                smp_rmb(); /* get current card generation */
1194                if (generation == device->card->generation ||
1195                    lu->retries++ >= 5) {
1196                        fw_error("%s: failed to reconnect\n", tgt->bus_id);
1197                        lu->retries = 0;
1198                        PREPARE_DELAYED_WORK(&lu->work, sbp2_login);
1199                }
1200                sbp2_queue_work(lu, DIV_ROUND_UP(HZ, 5));
1201                goto out;
1202        }
1203
1204        tgt->node_id      = node_id;
1205        tgt->address_high = local_node_id << 16;
1206        sbp2_set_generation(lu, generation);
1207
1208        fw_notify("%s: reconnected to LUN %04x (%d retries)\n",
1209                  tgt->bus_id, lu->lun, lu->retries);
1210
1211        sbp2_agent_reset(lu);
1212        sbp2_cancel_orbs(lu);
1213        sbp2_conditionally_unblock(lu);
1214 out:
1215        sbp2_target_put(tgt);
1216}
1217
1218static void sbp2_update(struct fw_unit *unit)
1219{
1220        struct sbp2_target *tgt = unit->device.driver_data;
1221        struct sbp2_logical_unit *lu;
1222
1223        fw_device_enable_phys_dma(fw_device(unit->device.parent));
1224
1225        /*
1226         * Fw-core serializes sbp2_update() against sbp2_remove().
1227         * Iteration over tgt->lu_list is therefore safe here.
1228         */
1229        list_for_each_entry(lu, &tgt->lu_list, link) {
1230                sbp2_conditionally_block(lu);
1231                lu->retries = 0;
1232                sbp2_queue_work(lu, 0);
1233        }
1234}
1235
1236#define SBP2_UNIT_SPEC_ID_ENTRY 0x0000609e
1237#define SBP2_SW_VERSION_ENTRY   0x00010483
1238
1239static const struct fw_device_id sbp2_id_table[] = {
1240        {
1241                .match_flags  = FW_MATCH_SPECIFIER_ID | FW_MATCH_VERSION,
1242                .specifier_id = SBP2_UNIT_SPEC_ID_ENTRY,
1243                .version      = SBP2_SW_VERSION_ENTRY,
1244        },
1245        { }
1246};
1247
1248static struct fw_driver sbp2_driver = {
1249        .driver   = {
1250                .owner  = THIS_MODULE,
1251                .name   = sbp2_driver_name,
1252                .bus    = &fw_bus_type,
1253                .probe  = sbp2_probe,
1254                .remove = sbp2_remove,
1255        },
1256        .update   = sbp2_update,
1257        .id_table = sbp2_id_table,
1258};
1259
1260static unsigned int
1261sbp2_status_to_sense_data(u8 *sbp2_status, u8 *sense_data)
1262{
1263        int sam_status;
1264
1265        sense_data[0] = 0x70;
1266        sense_data[1] = 0x0;
1267        sense_data[2] = sbp2_status[1];
1268        sense_data[3] = sbp2_status[4];
1269        sense_data[4] = sbp2_status[5];
1270        sense_data[5] = sbp2_status[6];
1271        sense_data[6] = sbp2_status[7];
1272        sense_data[7] = 10;
1273        sense_data[8] = sbp2_status[8];
1274        sense_data[9] = sbp2_status[9];
1275        sense_data[10] = sbp2_status[10];
1276        sense_data[11] = sbp2_status[11];
1277        sense_data[12] = sbp2_status[2];
1278        sense_data[13] = sbp2_status[3];
1279        sense_data[14] = sbp2_status[12];
1280        sense_data[15] = sbp2_status[13];
1281
1282        sam_status = sbp2_status[0] & 0x3f;
1283
1284        switch (sam_status) {
1285        case SAM_STAT_GOOD:
1286        case SAM_STAT_CHECK_CONDITION:
1287        case SAM_STAT_CONDITION_MET:
1288        case SAM_STAT_BUSY:
1289        case SAM_STAT_RESERVATION_CONFLICT:
1290        case SAM_STAT_COMMAND_TERMINATED:
1291                return DID_OK << 16 | sam_status;
1292
1293        default:
1294                return DID_ERROR << 16;
1295        }
1296}
1297
1298static void
1299complete_command_orb(struct sbp2_orb *base_orb, struct sbp2_status *status)
1300{
1301        struct sbp2_command_orb *orb =
1302                container_of(base_orb, struct sbp2_command_orb, base);
1303        struct fw_device *device = fw_device(orb->lu->tgt->unit->device.parent);
1304        int result;
1305
1306        if (status != NULL) {
1307                if (STATUS_GET_DEAD(*status))
1308                        sbp2_agent_reset_no_wait(orb->lu);
1309
1310                switch (STATUS_GET_RESPONSE(*status)) {
1311                case SBP2_STATUS_REQUEST_COMPLETE:
1312                        result = DID_OK << 16;
1313                        break;
1314                case SBP2_STATUS_TRANSPORT_FAILURE:
1315                        result = DID_BUS_BUSY << 16;
1316                        break;
1317                case SBP2_STATUS_ILLEGAL_REQUEST:
1318                case SBP2_STATUS_VENDOR_DEPENDENT:
1319                default:
1320                        result = DID_ERROR << 16;
1321                        break;
1322                }
1323
1324                if (result == DID_OK << 16 && STATUS_GET_LEN(*status) > 1)
1325                        result = sbp2_status_to_sense_data(STATUS_GET_DATA(*status),
1326                                                           orb->cmd->sense_buffer);
1327        } else {
1328                /*
1329                 * If the orb completes with status == NULL, something
1330                 * went wrong, typically a bus reset happened mid-orb
1331                 * or when sending the write (less likely).
1332                 */
1333                result = DID_BUS_BUSY << 16;
1334                sbp2_conditionally_block(orb->lu);
1335        }
1336
1337        dma_unmap_single(device->card->device, orb->base.request_bus,
1338                         sizeof(orb->request), DMA_TO_DEVICE);
1339
1340        if (scsi_sg_count(orb->cmd) > 0)
1341                dma_unmap_sg(device->card->device, scsi_sglist(orb->cmd),
1342                             scsi_sg_count(orb->cmd),
1343                             orb->cmd->sc_data_direction);
1344
1345        if (orb->page_table_bus != 0)
1346                dma_unmap_single(device->card->device, orb->page_table_bus,
1347                                 sizeof(orb->page_table), DMA_TO_DEVICE);
1348
1349        orb->cmd->result = result;
1350        orb->done(orb->cmd);
1351}
1352
1353static int
1354sbp2_map_scatterlist(struct sbp2_command_orb *orb, struct fw_device *device,
1355                     struct sbp2_logical_unit *lu)
1356{
1357        struct scatterlist *sg;
1358        int sg_len, l, i, j, count;
1359        dma_addr_t sg_addr;
1360
1361        sg = scsi_sglist(orb->cmd);
1362        count = dma_map_sg(device->card->device, sg, scsi_sg_count(orb->cmd),
1363                           orb->cmd->sc_data_direction);
1364        if (count == 0)
1365                goto fail;
1366
1367        /*
1368         * Handle the special case where there is only one element in
1369         * the scatter list by converting it to an immediate block
1370         * request. This is also a workaround for broken devices such
1371         * as the second generation iPod which doesn't support page
1372         * tables.
1373         */
1374        if (count == 1 && sg_dma_len(sg) < SBP2_MAX_SG_ELEMENT_LENGTH) {
1375                orb->request.data_descriptor.high =
1376                        cpu_to_be32(lu->tgt->address_high);
1377                orb->request.data_descriptor.low  =
1378                        cpu_to_be32(sg_dma_address(sg));
1379                orb->request.misc |=
1380                        cpu_to_be32(COMMAND_ORB_DATA_SIZE(sg_dma_len(sg)));
1381                return 0;
1382        }
1383
1384        /*
1385         * Convert the scatterlist to an sbp2 page table.  If any
1386         * scatterlist entries are too big for sbp2, we split them as we
1387         * go.  Even if we ask the block I/O layer to not give us sg
1388         * elements larger than 65535 bytes, some IOMMUs may merge sg elements
1389         * during DMA mapping, and Linux currently doesn't prevent this.
1390         */
1391        for (i = 0, j = 0; i < count; i++, sg = sg_next(sg)) {
1392                sg_len = sg_dma_len(sg);
1393                sg_addr = sg_dma_address(sg);
1394                while (sg_len) {
1395                        /* FIXME: This won't get us out of the pinch. */
1396                        if (unlikely(j >= ARRAY_SIZE(orb->page_table))) {
1397                                fw_error("page table overflow\n");
1398                                goto fail_page_table;
1399                        }
1400                        l = min(sg_len, SBP2_MAX_SG_ELEMENT_LENGTH);
1401                        orb->page_table[j].low = cpu_to_be32(sg_addr);
1402                        orb->page_table[j].high = cpu_to_be32(l << 16);
1403                        sg_addr += l;
1404                        sg_len -= l;
1405                        j++;
1406                }
1407        }
1408
1409        orb->page_table_bus =
1410                dma_map_single(device->card->device, orb->page_table,
1411                               sizeof(orb->page_table), DMA_TO_DEVICE);
1412        if (dma_mapping_error(orb->page_table_bus))
1413                goto fail_page_table;
1414
1415        /*
1416         * The data_descriptor pointer is the one case where we need
1417         * to fill in the node ID part of the address.  All other
1418         * pointers assume that the data referenced reside on the
1419         * initiator (i.e. us), but data_descriptor can refer to data
1420         * on other nodes so we need to put our ID in descriptor.high.
1421         */
1422        orb->request.data_descriptor.high = cpu_to_be32(lu->tgt->address_high);
1423        orb->request.data_descriptor.low  = cpu_to_be32(orb->page_table_bus);
1424        orb->request.misc |= cpu_to_be32(COMMAND_ORB_PAGE_TABLE_PRESENT |
1425                                         COMMAND_ORB_DATA_SIZE(j));
1426
1427        return 0;
1428
1429 fail_page_table:
1430        dma_unmap_sg(device->card->device, sg, scsi_sg_count(orb->cmd),
1431                     orb->cmd->sc_data_direction);
1432 fail:
1433        return -ENOMEM;
1434}
1435
1436/* SCSI stack integration */
1437
1438static int sbp2_scsi_queuecommand(struct scsi_cmnd *cmd, scsi_done_fn_t done)
1439{
1440        struct sbp2_logical_unit *lu = cmd->device->hostdata;
1441        struct fw_device *device = fw_device(lu->tgt->unit->device.parent);
1442        struct sbp2_command_orb *orb;
1443        unsigned int max_payload;
1444        int retval = SCSI_MLQUEUE_HOST_BUSY;
1445
1446        /*
1447         * Bidirectional commands are not yet implemented, and unknown
1448         * transfer direction not handled.
1449         */
1450        if (cmd->sc_data_direction == DMA_BIDIRECTIONAL) {
1451                fw_error("Can't handle DMA_BIDIRECTIONAL, rejecting command\n");
1452                cmd->result = DID_ERROR << 16;
1453                done(cmd);
1454                return 0;
1455        }
1456
1457        orb = kzalloc(sizeof(*orb), GFP_ATOMIC);
1458        if (orb == NULL) {
1459                fw_notify("failed to alloc orb\n");
1460                return SCSI_MLQUEUE_HOST_BUSY;
1461        }
1462
1463        /* Initialize rcode to something not RCODE_COMPLETE. */
1464        orb->base.rcode = -1;
1465        kref_init(&orb->base.kref);
1466
1467        orb->lu   = lu;
1468        orb->done = done;
1469        orb->cmd  = cmd;
1470
1471        orb->request.next.high   = cpu_to_be32(SBP2_ORB_NULL);
1472        /*
1473         * At speed 100 we can do 512 bytes per packet, at speed 200,
1474         * 1024 bytes per packet etc.  The SBP-2 max_payload field
1475         * specifies the max payload size as 2 ^ (max_payload + 2), so
1476         * if we set this to max_speed + 7, we get the right value.
1477         */
1478        max_payload = min(device->max_speed + 7,
1479                          device->card->max_receive - 1);
1480        orb->request.misc = cpu_to_be32(
1481                COMMAND_ORB_MAX_PAYLOAD(max_payload) |
1482                COMMAND_ORB_SPEED(device->max_speed) |
1483                COMMAND_ORB_NOTIFY);
1484
1485        if (cmd->sc_data_direction == DMA_FROM_DEVICE)
1486                orb->request.misc |= cpu_to_be32(COMMAND_ORB_DIRECTION);
1487
1488        if (scsi_sg_count(cmd) && sbp2_map_scatterlist(orb, device, lu) < 0)
1489                goto out;
1490
1491        memcpy(orb->request.command_block, cmd->cmnd, cmd->cmd_len);
1492
1493        orb->base.callback = complete_command_orb;
1494        orb->base.request_bus =
1495                dma_map_single(device->card->device, &orb->request,
1496                               sizeof(orb->request), DMA_TO_DEVICE);
1497        if (dma_mapping_error(orb->base.request_bus))
1498                goto out;
1499
1500        sbp2_send_orb(&orb->base, lu, lu->tgt->node_id, lu->generation,
1501                      lu->command_block_agent_address + SBP2_ORB_POINTER);
1502        retval = 0;
1503 out:
1504        kref_put(&orb->base.kref, free_orb);
1505        return retval;
1506}
1507
1508static int sbp2_scsi_slave_alloc(struct scsi_device *sdev)
1509{
1510        struct sbp2_logical_unit *lu = sdev->hostdata;
1511
1512        /* (Re-)Adding logical units via the SCSI stack is not supported. */
1513        if (!lu)
1514                return -ENOSYS;
1515
1516        sdev->allow_restart = 1;
1517
1518        /* SBP-2 requires quadlet alignment of the data buffers. */
1519        blk_queue_update_dma_alignment(sdev->request_queue, 4 - 1);
1520
1521        if (lu->tgt->workarounds & SBP2_WORKAROUND_INQUIRY_36)
1522                sdev->inquiry_len = 36;
1523
1524        return 0;
1525}
1526
1527static int sbp2_scsi_slave_configure(struct scsi_device *sdev)
1528{
1529        struct sbp2_logical_unit *lu = sdev->hostdata;
1530
1531        sdev->use_10_for_rw = 1;
1532
1533        if (sdev->type == TYPE_ROM)
1534                sdev->use_10_for_ms = 1;
1535
1536        if (sdev->type == TYPE_DISK &&
1537            lu->tgt->workarounds & SBP2_WORKAROUND_MODE_SENSE_8)
1538                sdev->skip_ms_page_8 = 1;
1539
1540        if (lu->tgt->workarounds & SBP2_WORKAROUND_FIX_CAPACITY)
1541                sdev->fix_capacity = 1;
1542
1543        if (lu->tgt->workarounds & SBP2_WORKAROUND_128K_MAX_TRANS)
1544                blk_queue_max_sectors(sdev->request_queue, 128 * 1024 / 512);
1545
1546        return 0;
1547}
1548
1549/*
1550 * Called by scsi stack when something has really gone wrong.  Usually
1551 * called when a command has timed-out for some reason.
1552 */
1553static int sbp2_scsi_abort(struct scsi_cmnd *cmd)
1554{
1555        struct sbp2_logical_unit *lu = cmd->device->hostdata;
1556
1557        fw_notify("%s: sbp2_scsi_abort\n", lu->tgt->bus_id);
1558        sbp2_agent_reset(lu);
1559        sbp2_cancel_orbs(lu);
1560
1561        return SUCCESS;
1562}
1563
1564/*
1565 * Format of /sys/bus/scsi/devices/.../ieee1394_id:
1566 * u64 EUI-64 : u24 directory_ID : u16 LUN  (all printed in hexadecimal)
1567 *
1568 * This is the concatenation of target port identifier and logical unit
1569 * identifier as per SAM-2...SAM-4 annex A.
1570 */
1571static ssize_t
1572sbp2_sysfs_ieee1394_id_show(struct device *dev, struct device_attribute *attr,
1573                            char *buf)
1574{
1575        struct scsi_device *sdev = to_scsi_device(dev);
1576        struct sbp2_logical_unit *lu;
1577
1578        if (!sdev)
1579                return 0;
1580
1581        lu = sdev->hostdata;
1582
1583        return sprintf(buf, "%016llx:%06x:%04x\n",
1584                        (unsigned long long)lu->tgt->guid,
1585                        lu->tgt->directory_id, lu->lun);
1586}
1587
1588static DEVICE_ATTR(ieee1394_id, S_IRUGO, sbp2_sysfs_ieee1394_id_show, NULL);
1589
1590static struct device_attribute *sbp2_scsi_sysfs_attrs[] = {
1591        &dev_attr_ieee1394_id,
1592        NULL
1593};
1594
1595static struct scsi_host_template scsi_driver_template = {
1596        .module                 = THIS_MODULE,
1597        .name                   = "SBP-2 IEEE-1394",
1598        .proc_name              = sbp2_driver_name,
1599        .queuecommand           = sbp2_scsi_queuecommand,
1600        .slave_alloc            = sbp2_scsi_slave_alloc,
1601        .slave_configure        = sbp2_scsi_slave_configure,
1602        .eh_abort_handler       = sbp2_scsi_abort,
1603        .this_id                = -1,
1604        .sg_tablesize           = SG_ALL,
1605        .use_clustering         = ENABLE_CLUSTERING,
1606        .cmd_per_lun            = 1,
1607        .can_queue              = 1,
1608        .sdev_attrs             = sbp2_scsi_sysfs_attrs,
1609};
1610
1611MODULE_AUTHOR("Kristian Hoegsberg <krh@bitplanet.net>");
1612MODULE_DESCRIPTION("SCSI over IEEE1394");
1613MODULE_LICENSE("GPL");
1614MODULE_DEVICE_TABLE(ieee1394, sbp2_id_table);
1615
1616/* Provide a module alias so root-on-sbp2 initrds don't break. */
1617#ifndef CONFIG_IEEE1394_SBP2_MODULE
1618MODULE_ALIAS("sbp2");
1619#endif
1620
1621static int __init sbp2_init(void)
1622{
1623        sbp2_wq = create_singlethread_workqueue(KBUILD_MODNAME);
1624        if (!sbp2_wq)
1625                return -ENOMEM;
1626
1627        return driver_register(&sbp2_driver.driver);
1628}
1629
1630static void __exit sbp2_cleanup(void)
1631{
1632        driver_unregister(&sbp2_driver.driver);
1633        destroy_workqueue(sbp2_wq);
1634}
1635
1636module_init(sbp2_init);
1637module_exit(sbp2_cleanup);
1638
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.