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