linux/drivers/block/cciss.c
<<
>>
Prefs
   1/*
   2 *    Disk Array driver for HP Smart Array controllers.
   3 *    (C) Copyright 2000, 2007 Hewlett-Packard Development Company, L.P.
   4 *
   5 *    This program is free software; you can redistribute it and/or modify
   6 *    it under the terms of the GNU General Public License as published by
   7 *    the Free Software Foundation; version 2 of the License.
   8 *
   9 *    This program is distributed in the hope that it will be useful,
  10 *    but WITHOUT ANY WARRANTY; without even the implied warranty of
  11 *    MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  12 *    General Public License for more details.
  13 *
  14 *    You should have received a copy of the GNU General Public License
  15 *    along with this program; if not, write to the Free Software
  16 *    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
  17 *    02111-1307, USA.
  18 *
  19 *    Questions/Comments/Bugfixes to iss_storagedev@hp.com
  20 *
  21 */
  22
  23#include <linux/module.h>
  24#include <linux/interrupt.h>
  25#include <linux/types.h>
  26#include <linux/pci.h>
  27#include <linux/kernel.h>
  28#include <linux/slab.h>
  29#include <linux/smp_lock.h>
  30#include <linux/delay.h>
  31#include <linux/major.h>
  32#include <linux/fs.h>
  33#include <linux/bio.h>
  34#include <linux/blkpg.h>
  35#include <linux/timer.h>
  36#include <linux/proc_fs.h>
  37#include <linux/seq_file.h>
  38#include <linux/init.h>
  39#include <linux/hdreg.h>
  40#include <linux/spinlock.h>
  41#include <linux/compat.h>
  42#include <asm/uaccess.h>
  43#include <asm/io.h>
  44
  45#include <linux/dma-mapping.h>
  46#include <linux/blkdev.h>
  47#include <linux/genhd.h>
  48#include <linux/completion.h>
  49#include <scsi/scsi.h>
  50#include <scsi/sg.h>
  51#include <scsi/scsi_ioctl.h>
  52#include <linux/cdrom.h>
  53#include <linux/scatterlist.h>
  54#include <linux/kthread.h>
  55
  56#define CCISS_DRIVER_VERSION(maj,min,submin) ((maj<<16)|(min<<8)|(submin))
  57#define DRIVER_NAME "HP CISS Driver (v 3.6.20)"
  58#define DRIVER_VERSION CCISS_DRIVER_VERSION(3, 6, 20)
  59
  60/* Embedded module documentation macros - see modules.h */
  61MODULE_AUTHOR("Hewlett-Packard Company");
  62MODULE_DESCRIPTION("Driver for HP Smart Array Controllers");
  63MODULE_SUPPORTED_DEVICE("HP SA5i SA5i+ SA532 SA5300 SA5312 SA641 SA642 SA6400"
  64                        " SA6i P600 P800 P400 P400i E200 E200i E500 P700m"
  65                        " Smart Array G2 Series SAS/SATA Controllers");
  66MODULE_VERSION("3.6.20");
  67MODULE_LICENSE("GPL");
  68
  69#include "cciss_cmd.h"
  70#include "cciss.h"
  71#include <linux/cciss_ioctl.h>
  72
  73/* define the PCI info for the cards we can control */
  74static const struct pci_device_id cciss_pci_device_id[] = {
  75        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISS,  0x0E11, 0x4070},
  76        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB, 0x0E11, 0x4080},
  77        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB, 0x0E11, 0x4082},
  78        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSB, 0x0E11, 0x4083},
  79        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x4091},
  80        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x409A},
  81        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x409B},
  82        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x409C},
  83        {PCI_VENDOR_ID_COMPAQ, PCI_DEVICE_ID_COMPAQ_CISSC, 0x0E11, 0x409D},
  84        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSA,     0x103C, 0x3225},
  85        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x3223},
  86        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x3234},
  87        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x3235},
  88        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3211},
  89        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3212},
  90        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3213},
  91        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3214},
  92        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSD,     0x103C, 0x3215},
  93        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x3237},
  94        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSC,     0x103C, 0x323D},
  95        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3241},
  96        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3243},
  97        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3245},
  98        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3247},
  99        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x3249},
 100        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x324A},
 101        {PCI_VENDOR_ID_HP,     PCI_DEVICE_ID_HP_CISSE,     0x103C, 0x324B},
 102        {PCI_VENDOR_ID_HP,     PCI_ANY_ID,      PCI_ANY_ID, PCI_ANY_ID,
 103                PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0},
 104        {0,}
 105};
 106
 107MODULE_DEVICE_TABLE(pci, cciss_pci_device_id);
 108
 109/*  board_id = Subsystem Device ID & Vendor ID
 110 *  product = Marketing Name for the board
 111 *  access = Address of the struct of function pointers
 112 */
 113static struct board_type products[] = {
 114        {0x40700E11, "Smart Array 5300", &SA5_access},
 115        {0x40800E11, "Smart Array 5i", &SA5B_access},
 116        {0x40820E11, "Smart Array 532", &SA5B_access},
 117        {0x40830E11, "Smart Array 5312", &SA5B_access},
 118        {0x409A0E11, "Smart Array 641", &SA5_access},
 119        {0x409B0E11, "Smart Array 642", &SA5_access},
 120        {0x409C0E11, "Smart Array 6400", &SA5_access},
 121        {0x409D0E11, "Smart Array 6400 EM", &SA5_access},
 122        {0x40910E11, "Smart Array 6i", &SA5_access},
 123        {0x3225103C, "Smart Array P600", &SA5_access},
 124        {0x3223103C, "Smart Array P800", &SA5_access},
 125        {0x3234103C, "Smart Array P400", &SA5_access},
 126        {0x3235103C, "Smart Array P400i", &SA5_access},
 127        {0x3211103C, "Smart Array E200i", &SA5_access},
 128        {0x3212103C, "Smart Array E200", &SA5_access},
 129        {0x3213103C, "Smart Array E200i", &SA5_access},
 130        {0x3214103C, "Smart Array E200i", &SA5_access},
 131        {0x3215103C, "Smart Array E200i", &SA5_access},
 132        {0x3237103C, "Smart Array E500", &SA5_access},
 133        {0x323D103C, "Smart Array P700m", &SA5_access},
 134        {0x3241103C, "Smart Array P212", &SA5_access},
 135        {0x3243103C, "Smart Array P410", &SA5_access},
 136        {0x3245103C, "Smart Array P410i", &SA5_access},
 137        {0x3247103C, "Smart Array P411", &SA5_access},
 138        {0x3249103C, "Smart Array P812", &SA5_access},
 139        {0x324A103C, "Smart Array P712m", &SA5_access},
 140        {0x324B103C, "Smart Array P711m", &SA5_access},
 141        {0xFFFF103C, "Unknown Smart Array", &SA5_access},
 142};
 143
 144/* How long to wait (in milliseconds) for board to go into simple mode */
 145#define MAX_CONFIG_WAIT 30000
 146#define MAX_IOCTL_CONFIG_WAIT 1000
 147
 148/*define how many times we will try a command because of bus resets */
 149#define MAX_CMD_RETRIES 3
 150
 151#define MAX_CTLR        32
 152
 153/* Originally cciss driver only supports 8 major numbers */
 154#define MAX_CTLR_ORIG   8
 155
 156static ctlr_info_t *hba[MAX_CTLR];
 157
 158static void do_cciss_request(struct request_queue *q);
 159static irqreturn_t do_cciss_intr(int irq, void *dev_id);
 160static int cciss_open(struct block_device *bdev, fmode_t mode);
 161static int cciss_release(struct gendisk *disk, fmode_t mode);
 162static int cciss_ioctl(struct block_device *bdev, fmode_t mode,
 163                       unsigned int cmd, unsigned long arg);
 164static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo);
 165
 166static int cciss_revalidate(struct gendisk *disk);
 167static int rebuild_lun_table(ctlr_info_t *h, int first_time);
 168static int deregister_disk(ctlr_info_t *h, int drv_index,
 169                           int clear_all);
 170
 171static void cciss_read_capacity(int ctlr, int logvol, int withirq,
 172                        sector_t *total_size, unsigned int *block_size);
 173static void cciss_read_capacity_16(int ctlr, int logvol, int withirq,
 174                        sector_t *total_size, unsigned int *block_size);
 175static void cciss_geometry_inquiry(int ctlr, int logvol,
 176                        int withirq, sector_t total_size,
 177                        unsigned int block_size, InquiryData_struct *inq_buff,
 178                                   drive_info_struct *drv);
 179static void __devinit cciss_interrupt_mode(ctlr_info_t *, struct pci_dev *,
 180                                           __u32);
 181static void start_io(ctlr_info_t *h);
 182static int sendcmd(__u8 cmd, int ctlr, void *buff, size_t size,
 183                   __u8 page_code, unsigned char *scsi3addr, int cmd_type);
 184static int sendcmd_withirq(__u8 cmd, int ctlr, void *buff, size_t size,
 185                        __u8 page_code, unsigned char scsi3addr[],
 186                        int cmd_type);
 187static int sendcmd_withirq_core(ctlr_info_t *h, CommandList_struct *c,
 188        int attempt_retry);
 189static int process_sendcmd_error(ctlr_info_t *h, CommandList_struct *c);
 190
 191static void fail_all_cmds(unsigned long ctlr);
 192static int scan_thread(void *data);
 193static int check_for_unit_attention(ctlr_info_t *h, CommandList_struct *c);
 194
 195#ifdef CONFIG_PROC_FS
 196static void cciss_procinit(int i);
 197#else
 198static void cciss_procinit(int i)
 199{
 200}
 201#endif                          /* CONFIG_PROC_FS */
 202
 203#ifdef CONFIG_COMPAT
 204static int cciss_compat_ioctl(struct block_device *, fmode_t,
 205                              unsigned, unsigned long);
 206#endif
 207
 208static struct block_device_operations cciss_fops = {
 209        .owner = THIS_MODULE,
 210        .open = cciss_open,
 211        .release = cciss_release,
 212        .locked_ioctl = cciss_ioctl,
 213        .getgeo = cciss_getgeo,
 214#ifdef CONFIG_COMPAT
 215        .compat_ioctl = cciss_compat_ioctl,
 216#endif
 217        .revalidate_disk = cciss_revalidate,
 218};
 219
 220/*
 221 * Enqueuing and dequeuing functions for cmdlists.
 222 */
 223static inline void addQ(struct hlist_head *list, CommandList_struct *c)
 224{
 225        hlist_add_head(&c->list, list);
 226}
 227
 228static inline void removeQ(CommandList_struct *c)
 229{
 230        /*
 231         * After kexec/dump some commands might still
 232         * be in flight, which the firmware will try
 233         * to complete. Resetting the firmware doesn't work
 234         * with old fw revisions, so we have to mark
 235         * them off as 'stale' to prevent the driver from
 236         * falling over.
 237         */
 238        if (WARN_ON(hlist_unhashed(&c->list))) {
 239                c->cmd_type = CMD_MSG_STALE;
 240                return;
 241        }
 242
 243        hlist_del_init(&c->list);
 244}
 245
 246#include "cciss_scsi.c"         /* For SCSI tape support */
 247
 248#define RAID_UNKNOWN 6
 249
 250#ifdef CONFIG_PROC_FS
 251
 252/*
 253 * Report information about this controller.
 254 */
 255#define ENG_GIG 1000000000
 256#define ENG_GIG_FACTOR (ENG_GIG/512)
 257#define ENGAGE_SCSI     "engage scsi"
 258static const char *raid_label[] = { "0", "4", "1(1+0)", "5", "5+1", "ADG",
 259        "UNKNOWN"
 260};
 261
 262static struct proc_dir_entry *proc_cciss;
 263
 264static void cciss_seq_show_header(struct seq_file *seq)
 265{
 266        ctlr_info_t *h = seq->private;
 267
 268        seq_printf(seq, "%s: HP %s Controller\n"
 269                "Board ID: 0x%08lx\n"
 270                "Firmware Version: %c%c%c%c\n"
 271                "IRQ: %d\n"
 272                "Logical drives: %d\n"
 273                "Current Q depth: %d\n"
 274                "Current # commands on controller: %d\n"
 275                "Max Q depth since init: %d\n"
 276                "Max # commands on controller since init: %d\n"
 277                "Max SG entries since init: %d\n",
 278                h->devname,
 279                h->product_name,
 280                (unsigned long)h->board_id,
 281                h->firm_ver[0], h->firm_ver[1], h->firm_ver[2],
 282                h->firm_ver[3], (unsigned int)h->intr[SIMPLE_MODE_INT],
 283                h->num_luns,
 284                h->Qdepth, h->commands_outstanding,
 285                h->maxQsinceinit, h->max_outstanding, h->maxSG);
 286
 287#ifdef CONFIG_CISS_SCSI_TAPE
 288        cciss_seq_tape_report(seq, h->ctlr);
 289#endif /* CONFIG_CISS_SCSI_TAPE */
 290}
 291
 292static void *cciss_seq_start(struct seq_file *seq, loff_t *pos)
 293{
 294        ctlr_info_t *h = seq->private;
 295        unsigned ctlr = h->ctlr;
 296        unsigned long flags;
 297
 298        /* prevent displaying bogus info during configuration
 299         * or deconfiguration of a logical volume
 300         */
 301        spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
 302        if (h->busy_configuring) {
 303                spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
 304                return ERR_PTR(-EBUSY);
 305        }
 306        h->busy_configuring = 1;
 307        spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
 308
 309        if (*pos == 0)
 310                cciss_seq_show_header(seq);
 311
 312        return pos;
 313}
 314
 315static int cciss_seq_show(struct seq_file *seq, void *v)
 316{
 317        sector_t vol_sz, vol_sz_frac;
 318        ctlr_info_t *h = seq->private;
 319        unsigned ctlr = h->ctlr;
 320        loff_t *pos = v;
 321        drive_info_struct *drv = &h->drv[*pos];
 322
 323        if (*pos > h->highest_lun)
 324                return 0;
 325
 326        if (drv->heads == 0)
 327                return 0;
 328
 329        vol_sz = drv->nr_blocks;
 330        vol_sz_frac = sector_div(vol_sz, ENG_GIG_FACTOR);
 331        vol_sz_frac *= 100;
 332        sector_div(vol_sz_frac, ENG_GIG_FACTOR);
 333
 334        if (drv->raid_level > 5)
 335                drv->raid_level = RAID_UNKNOWN;
 336        seq_printf(seq, "cciss/c%dd%d:"
 337                        "\t%4u.%02uGB\tRAID %s\n",
 338                        ctlr, (int) *pos, (int)vol_sz, (int)vol_sz_frac,
 339                        raid_label[drv->raid_level]);
 340        return 0;
 341}
 342
 343static void *cciss_seq_next(struct seq_file *seq, void *v, loff_t *pos)
 344{
 345        ctlr_info_t *h = seq->private;
 346
 347        if (*pos > h->highest_lun)
 348                return NULL;
 349        *pos += 1;
 350
 351        return pos;
 352}
 353
 354static void cciss_seq_stop(struct seq_file *seq, void *v)
 355{
 356        ctlr_info_t *h = seq->private;
 357
 358        /* Only reset h->busy_configuring if we succeeded in setting
 359         * it during cciss_seq_start. */
 360        if (v == ERR_PTR(-EBUSY))
 361                return;
 362
 363        h->busy_configuring = 0;
 364}
 365
 366static struct seq_operations cciss_seq_ops = {
 367        .start = cciss_seq_start,
 368        .show  = cciss_seq_show,
 369        .next  = cciss_seq_next,
 370        .stop  = cciss_seq_stop,
 371};
 372
 373static int cciss_seq_open(struct inode *inode, struct file *file)
 374{
 375        int ret = seq_open(file, &cciss_seq_ops);
 376        struct seq_file *seq = file->private_data;
 377
 378        if (!ret)
 379                seq->private = PDE(inode)->data;
 380
 381        return ret;
 382}
 383
 384static ssize_t
 385cciss_proc_write(struct file *file, const char __user *buf,
 386                 size_t length, loff_t *ppos)
 387{
 388        int err;
 389        char *buffer;
 390
 391#ifndef CONFIG_CISS_SCSI_TAPE
 392        return -EINVAL;
 393#endif
 394
 395        if (!buf || length > PAGE_SIZE - 1)
 396                return -EINVAL;
 397
 398        buffer = (char *)__get_free_page(GFP_KERNEL);
 399        if (!buffer)
 400                return -ENOMEM;
 401
 402        err = -EFAULT;
 403        if (copy_from_user(buffer, buf, length))
 404                goto out;
 405        buffer[length] = '\0';
 406
 407#ifdef CONFIG_CISS_SCSI_TAPE
 408        if (strncmp(ENGAGE_SCSI, buffer, sizeof ENGAGE_SCSI - 1) == 0) {
 409                struct seq_file *seq = file->private_data;
 410                ctlr_info_t *h = seq->private;
 411                int rc;
 412
 413                rc = cciss_engage_scsi(h->ctlr);
 414                if (rc != 0)
 415                        err = -rc;
 416                else
 417                        err = length;
 418        } else
 419#endif /* CONFIG_CISS_SCSI_TAPE */
 420                err = -EINVAL;
 421        /* might be nice to have "disengage" too, but it's not
 422           safely possible. (only 1 module use count, lock issues.) */
 423
 424out:
 425        free_page((unsigned long)buffer);
 426        return err;
 427}
 428
 429static struct file_operations cciss_proc_fops = {
 430        .owner   = THIS_MODULE,
 431        .open    = cciss_seq_open,
 432        .read    = seq_read,
 433        .llseek  = seq_lseek,
 434        .release = seq_release,
 435        .write   = cciss_proc_write,
 436};
 437
 438static void __devinit cciss_procinit(int i)
 439{
 440        struct proc_dir_entry *pde;
 441
 442        if (proc_cciss == NULL)
 443                proc_cciss = proc_mkdir("driver/cciss", NULL);
 444        if (!proc_cciss)
 445                return;
 446        pde = proc_create_data(hba[i]->devname, S_IWUSR | S_IRUSR | S_IRGRP |
 447                                        S_IROTH, proc_cciss,
 448                                        &cciss_proc_fops, hba[i]);
 449}
 450#endif                          /* CONFIG_PROC_FS */
 451
 452#define MAX_PRODUCT_NAME_LEN 19
 453
 454#define to_hba(n) container_of(n, struct ctlr_info, dev)
 455#define to_drv(n) container_of(n, drive_info_struct, dev)
 456
 457static struct device_type cciss_host_type = {
 458        .name           = "cciss_host",
 459};
 460
 461static ssize_t dev_show_unique_id(struct device *dev,
 462                                 struct device_attribute *attr,
 463                                 char *buf)
 464{
 465        drive_info_struct *drv = to_drv(dev);
 466        struct ctlr_info *h = to_hba(drv->dev.parent);
 467        __u8 sn[16];
 468        unsigned long flags;
 469        int ret = 0;
 470
 471        spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
 472        if (h->busy_configuring)
 473                ret = -EBUSY;
 474        else
 475                memcpy(sn, drv->serial_no, sizeof(sn));
 476        spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
 477
 478        if (ret)
 479                return ret;
 480        else
 481                return snprintf(buf, 16 * 2 + 2,
 482                                "%02X%02X%02X%02X%02X%02X%02X%02X"
 483                                "%02X%02X%02X%02X%02X%02X%02X%02X\n",
 484                                sn[0], sn[1], sn[2], sn[3],
 485                                sn[4], sn[5], sn[6], sn[7],
 486                                sn[8], sn[9], sn[10], sn[11],
 487                                sn[12], sn[13], sn[14], sn[15]);
 488}
 489DEVICE_ATTR(unique_id, S_IRUGO, dev_show_unique_id, NULL);
 490
 491static ssize_t dev_show_vendor(struct device *dev,
 492                               struct device_attribute *attr,
 493                               char *buf)
 494{
 495        drive_info_struct *drv = to_drv(dev);
 496        struct ctlr_info *h = to_hba(drv->dev.parent);
 497        char vendor[VENDOR_LEN + 1];
 498        unsigned long flags;
 499        int ret = 0;
 500
 501        spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
 502        if (h->busy_configuring)
 503                ret = -EBUSY;
 504        else
 505                memcpy(vendor, drv->vendor, VENDOR_LEN + 1);
 506        spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
 507
 508        if (ret)
 509                return ret;
 510        else
 511                return snprintf(buf, sizeof(vendor) + 1, "%s\n", drv->vendor);
 512}
 513DEVICE_ATTR(vendor, S_IRUGO, dev_show_vendor, NULL);
 514
 515static ssize_t dev_show_model(struct device *dev,
 516                              struct device_attribute *attr,
 517                              char *buf)
 518{
 519        drive_info_struct *drv = to_drv(dev);
 520        struct ctlr_info *h = to_hba(drv->dev.parent);
 521        char model[MODEL_LEN + 1];
 522        unsigned long flags;
 523        int ret = 0;
 524
 525        spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
 526        if (h->busy_configuring)
 527                ret = -EBUSY;
 528        else
 529                memcpy(model, drv->model, MODEL_LEN + 1);
 530        spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
 531
 532        if (ret)
 533                return ret;
 534        else
 535                return snprintf(buf, sizeof(model) + 1, "%s\n", drv->model);
 536}
 537DEVICE_ATTR(model, S_IRUGO, dev_show_model, NULL);
 538
 539static ssize_t dev_show_rev(struct device *dev,
 540                            struct device_attribute *attr,
 541                            char *buf)
 542{
 543        drive_info_struct *drv = to_drv(dev);
 544        struct ctlr_info *h = to_hba(drv->dev.parent);
 545        char rev[REV_LEN + 1];
 546        unsigned long flags;
 547        int ret = 0;
 548
 549        spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
 550        if (h->busy_configuring)
 551                ret = -EBUSY;
 552        else
 553                memcpy(rev, drv->rev, REV_LEN + 1);
 554        spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
 555
 556        if (ret)
 557                return ret;
 558        else
 559                return snprintf(buf, sizeof(rev) + 1, "%s\n", drv->rev);
 560}
 561DEVICE_ATTR(rev, S_IRUGO, dev_show_rev, NULL);
 562
 563static struct attribute *cciss_dev_attrs[] = {
 564        &dev_attr_unique_id.attr,
 565        &dev_attr_model.attr,
 566        &dev_attr_vendor.attr,
 567        &dev_attr_rev.attr,
 568        NULL
 569};
 570
 571static struct attribute_group cciss_dev_attr_group = {
 572        .attrs = cciss_dev_attrs,
 573};
 574
 575static struct attribute_group *cciss_dev_attr_groups[] = {
 576        &cciss_dev_attr_group,
 577        NULL
 578};
 579
 580static struct device_type cciss_dev_type = {
 581        .name           = "cciss_device",
 582        .groups         = cciss_dev_attr_groups,
 583};
 584
 585static struct bus_type cciss_bus_type = {
 586        .name           = "cciss",
 587};
 588
 589
 590/*
 591 * Initialize sysfs entry for each controller.  This sets up and registers
 592 * the 'cciss#' directory for each individual controller under
 593 * /sys/bus/pci/devices/<dev>/.
 594 */
 595static int cciss_create_hba_sysfs_entry(struct ctlr_info *h)
 596{
 597        device_initialize(&h->dev);
 598        h->dev.type = &cciss_host_type;
 599        h->dev.bus = &cciss_bus_type;
 600        dev_set_name(&h->dev, "%s", h->devname);
 601        h->dev.parent = &h->pdev->dev;
 602
 603        return device_add(&h->dev);
 604}
 605
 606/*
 607 * Remove sysfs entries for an hba.
 608 */
 609static void cciss_destroy_hba_sysfs_entry(struct ctlr_info *h)
 610{
 611        device_del(&h->dev);
 612}
 613
 614/*
 615 * Initialize sysfs for each logical drive.  This sets up and registers
 616 * the 'c#d#' directory for each individual logical drive under
 617 * /sys/bus/pci/devices/<dev/ccis#/. We also create a link from
 618 * /sys/block/cciss!c#d# to this entry.
 619 */
 620static int cciss_create_ld_sysfs_entry(struct ctlr_info *h,
 621                                       drive_info_struct *drv,
 622                                       int drv_index)
 623{
 624        device_initialize(&drv->dev);
 625        drv->dev.type = &cciss_dev_type;
 626        drv->dev.bus = &cciss_bus_type;
 627        dev_set_name(&drv->dev, "c%dd%d", h->ctlr, drv_index);
 628        drv->dev.parent = &h->dev;
 629        return device_add(&drv->dev);
 630}
 631
 632/*
 633 * Remove sysfs entries for a logical drive.
 634 */
 635static void cciss_destroy_ld_sysfs_entry(drive_info_struct *drv)
 636{
 637        device_del(&drv->dev);
 638}
 639
 640/*
 641 * For operations that cannot sleep, a command block is allocated at init,
 642 * and managed by cmd_alloc() and cmd_free() using a simple bitmap to track
 643 * which ones are free or in use.  For operations that can wait for kmalloc
 644 * to possible sleep, this routine can be called with get_from_pool set to 0.
 645 * cmd_free() MUST be called with a got_from_pool set to 0 if cmd_alloc was.
 646 */
 647static CommandList_struct *cmd_alloc(ctlr_info_t *h, int get_from_pool)
 648{
 649        CommandList_struct *c;
 650        int i;
 651        u64bit temp64;
 652        dma_addr_t cmd_dma_handle, err_dma_handle;
 653
 654        if (!get_from_pool) {
 655                c = (CommandList_struct *) pci_alloc_consistent(h->pdev,
 656                        sizeof(CommandList_struct), &cmd_dma_handle);
 657                if (c == NULL)
 658                        return NULL;
 659                memset(c, 0, sizeof(CommandList_struct));
 660
 661                c->cmdindex = -1;
 662
 663                c->err_info = (ErrorInfo_struct *)
 664                    pci_alloc_consistent(h->pdev, sizeof(ErrorInfo_struct),
 665                            &err_dma_handle);
 666
 667                if (c->err_info == NULL) {
 668                        pci_free_consistent(h->pdev,
 669                                sizeof(CommandList_struct), c, cmd_dma_handle);
 670                        return NULL;
 671                }
 672                memset(c->err_info, 0, sizeof(ErrorInfo_struct));
 673        } else {                /* get it out of the controllers pool */
 674
 675                do {
 676                        i = find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds);
 677                        if (i == h->nr_cmds)
 678                                return NULL;
 679                } while (test_and_set_bit
 680                         (i & (BITS_PER_LONG - 1),
 681                          h->cmd_pool_bits + (i / BITS_PER_LONG)) != 0);
 682#ifdef CCISS_DEBUG
 683                printk(KERN_DEBUG "cciss: using command buffer %d\n", i);
 684#endif
 685                c = h->cmd_pool + i;
 686                memset(c, 0, sizeof(CommandList_struct));
 687                cmd_dma_handle = h->cmd_pool_dhandle
 688                    + i * sizeof(CommandList_struct);
 689                c->err_info = h->errinfo_pool + i;
 690                memset(c->err_info, 0, sizeof(ErrorInfo_struct));
 691                err_dma_handle = h->errinfo_pool_dhandle
 692                    + i * sizeof(ErrorInfo_struct);
 693                h->nr_allocs++;
 694
 695                c->cmdindex = i;
 696        }
 697
 698        INIT_HLIST_NODE(&c->list);
 699        c->busaddr = (__u32) cmd_dma_handle;
 700        temp64.val = (__u64) err_dma_handle;
 701        c->ErrDesc.Addr.lower = temp64.val32.lower;
 702        c->ErrDesc.Addr.upper = temp64.val32.upper;
 703        c->ErrDesc.Len = sizeof(ErrorInfo_struct);
 704
 705        c->ctlr = h->ctlr;
 706        return c;
 707}
 708
 709/*
 710 * Frees a command block that was previously allocated with cmd_alloc().
 711 */
 712static void cmd_free(ctlr_info_t *h, CommandList_struct *c, int got_from_pool)
 713{
 714        int i;
 715        u64bit temp64;
 716
 717        if (!got_from_pool) {
 718                temp64.val32.lower = c->ErrDesc.Addr.lower;
 719                temp64.val32.upper = c->ErrDesc.Addr.upper;
 720                pci_free_consistent(h->pdev, sizeof(ErrorInfo_struct),
 721                                    c->err_info, (dma_addr_t) temp64.val);
 722                pci_free_consistent(h->pdev, sizeof(CommandList_struct),
 723                                    c, (dma_addr_t) c->busaddr);
 724        } else {
 725                i = c - h->cmd_pool;
 726                clear_bit(i & (BITS_PER_LONG - 1),
 727                          h->cmd_pool_bits + (i / BITS_PER_LONG));
 728                h->nr_frees++;
 729        }
 730}
 731
 732static inline ctlr_info_t *get_host(struct gendisk *disk)
 733{
 734        return disk->queue->queuedata;
 735}
 736
 737static inline drive_info_struct *get_drv(struct gendisk *disk)
 738{
 739        return disk->private_data;
 740}
 741
 742/*
 743 * Open.  Make sure the device is really there.
 744 */
 745static int cciss_open(struct block_device *bdev, fmode_t mode)
 746{
 747        ctlr_info_t *host = get_host(bdev->bd_disk);
 748        drive_info_struct *drv = get_drv(bdev->bd_disk);
 749
 750#ifdef CCISS_DEBUG
 751        printk(KERN_DEBUG "cciss_open %s\n", bdev->bd_disk->disk_name);
 752#endif                          /* CCISS_DEBUG */
 753
 754        if (host->busy_initializing || drv->busy_configuring)
 755                return -EBUSY;
 756        /*
 757         * Root is allowed to open raw volume zero even if it's not configured
 758         * so array config can still work. Root is also allowed to open any
 759         * volume that has a LUN ID, so it can issue IOCTL to reread the
 760         * disk information.  I don't think I really like this
 761         * but I'm already using way to many device nodes to claim another one
 762         * for "raw controller".
 763         */
 764        if (drv->heads == 0) {
 765                if (MINOR(bdev->bd_dev) != 0) { /* not node 0? */
 766                        /* if not node 0 make sure it is a partition = 0 */
 767                        if (MINOR(bdev->bd_dev) & 0x0f) {
 768                                return -ENXIO;
 769                                /* if it is, make sure we have a LUN ID */
 770                        } else if (drv->LunID == 0) {
 771                                return -ENXIO;
 772                        }
 773                }
 774                if (!capable(CAP_SYS_ADMIN))
 775                        return -EPERM;
 776        }
 777        drv->usage_count++;
 778        host->usage_count++;
 779        return 0;
 780}
 781
 782/*
 783 * Close.  Sync first.
 784 */
 785static int cciss_release(struct gendisk *disk, fmode_t mode)
 786{
 787        ctlr_info_t *host = get_host(disk);
 788        drive_info_struct *drv = get_drv(disk);
 789
 790#ifdef CCISS_DEBUG
 791        printk(KERN_DEBUG "cciss_release %s\n", disk->disk_name);
 792#endif                          /* CCISS_DEBUG */
 793
 794        drv->usage_count--;
 795        host->usage_count--;
 796        return 0;
 797}
 798
 799#ifdef CONFIG_COMPAT
 800
 801static int do_ioctl(struct block_device *bdev, fmode_t mode,
 802                    unsigned cmd, unsigned long arg)
 803{
 804        int ret;
 805        lock_kernel();
 806        ret = cciss_ioctl(bdev, mode, cmd, arg);
 807        unlock_kernel();
 808        return ret;
 809}
 810
 811static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode,
 812                                  unsigned cmd, unsigned long arg);
 813static int cciss_ioctl32_big_passthru(struct block_device *bdev, fmode_t mode,
 814                                      unsigned cmd, unsigned long arg);
 815
 816static int cciss_compat_ioctl(struct block_device *bdev, fmode_t mode,
 817                              unsigned cmd, unsigned long arg)
 818{
 819        switch (cmd) {
 820        case CCISS_GETPCIINFO:
 821        case CCISS_GETINTINFO:
 822        case CCISS_SETINTINFO:
 823        case CCISS_GETNODENAME:
 824        case CCISS_SETNODENAME:
 825        case CCISS_GETHEARTBEAT:
 826        case CCISS_GETBUSTYPES:
 827        case CCISS_GETFIRMVER:
 828        case CCISS_GETDRIVVER:
 829        case CCISS_REVALIDVOLS:
 830        case CCISS_DEREGDISK:
 831        case CCISS_REGNEWDISK:
 832        case CCISS_REGNEWD:
 833        case CCISS_RESCANDISK:
 834        case CCISS_GETLUNINFO:
 835                return do_ioctl(bdev, mode, cmd, arg);
 836
 837        case CCISS_PASSTHRU32:
 838                return cciss_ioctl32_passthru(bdev, mode, cmd, arg);
 839        case CCISS_BIG_PASSTHRU32:
 840                return cciss_ioctl32_big_passthru(bdev, mode, cmd, arg);
 841
 842        default:
 843                return -ENOIOCTLCMD;
 844        }
 845}
 846
 847static int cciss_ioctl32_passthru(struct block_device *bdev, fmode_t mode,
 848                                  unsigned cmd, unsigned long arg)
 849{
 850        IOCTL32_Command_struct __user *arg32 =
 851            (IOCTL32_Command_struct __user *) arg;
 852        IOCTL_Command_struct arg64;
 853        IOCTL_Command_struct __user *p = compat_alloc_user_space(sizeof(arg64));
 854        int err;
 855        u32 cp;
 856
 857        err = 0;
 858        err |=
 859            copy_from_user(&arg64.LUN_info, &arg32->LUN_info,
 860                           sizeof(arg64.LUN_info));
 861        err |=
 862            copy_from_user(&arg64.Request, &arg32->Request,
 863                           sizeof(arg64.Request));
 864        err |=
 865            copy_from_user(&arg64.error_info, &arg32->error_info,
 866                           sizeof(arg64.error_info));
 867        err |= get_user(arg64.buf_size, &arg32->buf_size);
 868        err |= get_user(cp, &arg32->buf);
 869        arg64.buf = compat_ptr(cp);
 870        err |= copy_to_user(p, &arg64, sizeof(arg64));
 871
 872        if (err)
 873                return -EFAULT;
 874
 875        err = do_ioctl(bdev, mode, CCISS_PASSTHRU, (unsigned long)p);
 876        if (err)
 877                return err;
 878        err |=
 879            copy_in_user(&arg32->error_info, &p->error_info,
 880                         sizeof(arg32->error_info));
 881        if (err)
 882                return -EFAULT;
 883        return err;
 884}
 885
 886static int cciss_ioctl32_big_passthru(struct block_device *bdev, fmode_t mode,
 887                                      unsigned cmd, unsigned long arg)
 888{
 889        BIG_IOCTL32_Command_struct __user *arg32 =
 890            (BIG_IOCTL32_Command_struct __user *) arg;
 891        BIG_IOCTL_Command_struct arg64;
 892        BIG_IOCTL_Command_struct __user *p =
 893            compat_alloc_user_space(sizeof(arg64));
 894        int err;
 895        u32 cp;
 896
 897        err = 0;
 898        err |=
 899            copy_from_user(&arg64.LUN_info, &arg32->LUN_info,
 900                           sizeof(arg64.LUN_info));
 901        err |=
 902            copy_from_user(&arg64.Request, &arg32->Request,
 903                           sizeof(arg64.Request));
 904        err |=
 905            copy_from_user(&arg64.error_info, &arg32->error_info,
 906                           sizeof(arg64.error_info));
 907        err |= get_user(arg64.buf_size, &arg32->buf_size);
 908        err |= get_user(arg64.malloc_size, &arg32->malloc_size);
 909        err |= get_user(cp, &arg32->buf);
 910        arg64.buf = compat_ptr(cp);
 911        err |= copy_to_user(p, &arg64, sizeof(arg64));
 912
 913        if (err)
 914                return -EFAULT;
 915
 916        err = do_ioctl(bdev, mode, CCISS_BIG_PASSTHRU, (unsigned long)p);
 917        if (err)
 918                return err;
 919        err |=
 920            copy_in_user(&arg32->error_info, &p->error_info,
 921                         sizeof(arg32->error_info));
 922        if (err)
 923                return -EFAULT;
 924        return err;
 925}
 926#endif
 927
 928static int cciss_getgeo(struct block_device *bdev, struct hd_geometry *geo)
 929{
 930        drive_info_struct *drv = get_drv(bdev->bd_disk);
 931
 932        if (!drv->cylinders)
 933                return -ENXIO;
 934
 935        geo->heads = drv->heads;
 936        geo->sectors = drv->sectors;
 937        geo->cylinders = drv->cylinders;
 938        return 0;
 939}
 940
 941static void check_ioctl_unit_attention(ctlr_info_t *host, CommandList_struct *c)
 942{
 943        if (c->err_info->CommandStatus == CMD_TARGET_STATUS &&
 944                        c->err_info->ScsiStatus != SAM_STAT_CHECK_CONDITION)
 945                (void)check_for_unit_attention(host, c);
 946}
 947/*
 948 * ioctl
 949 */
 950static int cciss_ioctl(struct block_device *bdev, fmode_t mode,
 951                       unsigned int cmd, unsigned long arg)
 952{
 953        struct gendisk *disk = bdev->bd_disk;
 954        ctlr_info_t *host = get_host(disk);
 955        drive_info_struct *drv = get_drv(disk);
 956        int ctlr = host->ctlr;
 957        void __user *argp = (void __user *)arg;
 958
 959#ifdef CCISS_DEBUG
 960        printk(KERN_DEBUG "cciss_ioctl: Called with cmd=%x %lx\n", cmd, arg);
 961#endif                          /* CCISS_DEBUG */
 962
 963        switch (cmd) {
 964        case CCISS_GETPCIINFO:
 965                {
 966                        cciss_pci_info_struct pciinfo;
 967
 968                        if (!arg)
 969                                return -EINVAL;
 970                        pciinfo.domain = pci_domain_nr(host->pdev->bus);
 971                        pciinfo.bus = host->pdev->bus->number;
 972                        pciinfo.dev_fn = host->pdev->devfn;
 973                        pciinfo.board_id = host->board_id;
 974                        if (copy_to_user
 975                            (argp, &pciinfo, sizeof(cciss_pci_info_struct)))
 976                                return -EFAULT;
 977                        return 0;
 978                }
 979        case CCISS_GETINTINFO:
 980                {
 981                        cciss_coalint_struct intinfo;
 982                        if (!arg)
 983                                return -EINVAL;
 984                        intinfo.delay =
 985                            readl(&host->cfgtable->HostWrite.CoalIntDelay);
 986                        intinfo.count =
 987                            readl(&host->cfgtable->HostWrite.CoalIntCount);
 988                        if (copy_to_user
 989                            (argp, &intinfo, sizeof(cciss_coalint_struct)))
 990                                return -EFAULT;
 991                        return 0;
 992                }
 993        case CCISS_SETINTINFO:
 994                {
 995                        cciss_coalint_struct intinfo;
 996                        unsigned long flags;
 997                        int i;
 998
 999                        if (!arg)
1000                                return -EINVAL;
1001                        if (!capable(CAP_SYS_ADMIN))
1002                                return -EPERM;
1003                        if (copy_from_user
1004                            (&intinfo, argp, sizeof(cciss_coalint_struct)))
1005                                return -EFAULT;
1006                        if ((intinfo.delay == 0) && (intinfo.count == 0))
1007                        {
1008//                      printk("cciss_ioctl: delay and count cannot be 0\n");
1009                                return -EINVAL;
1010                        }
1011                        spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1012                        /* Update the field, and then ring the doorbell */
1013                        writel(intinfo.delay,
1014                               &(host->cfgtable->HostWrite.CoalIntDelay));
1015                        writel(intinfo.count,
1016                               &(host->cfgtable->HostWrite.CoalIntCount));
1017                        writel(CFGTBL_ChangeReq, host->vaddr + SA5_DOORBELL);
1018
1019                        for (i = 0; i < MAX_IOCTL_CONFIG_WAIT; i++) {
1020                                if (!(readl(host->vaddr + SA5_DOORBELL)
1021                                      & CFGTBL_ChangeReq))
1022                                        break;
1023                                /* delay and try again */
1024                                udelay(1000);
1025                        }
1026                        spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1027                        if (i >= MAX_IOCTL_CONFIG_WAIT)
1028                                return -EAGAIN;
1029                        return 0;
1030                }
1031        case CCISS_GETNODENAME:
1032                {
1033                        NodeName_type NodeName;
1034                        int i;
1035
1036                        if (!arg)
1037                                return -EINVAL;
1038                        for (i = 0; i < 16; i++)
1039                                NodeName[i] =
1040                                    readb(&host->cfgtable->ServerName[i]);
1041                        if (copy_to_user(argp, NodeName, sizeof(NodeName_type)))
1042                                return -EFAULT;
1043                        return 0;
1044                }
1045        case CCISS_SETNODENAME:
1046                {
1047                        NodeName_type NodeName;
1048                        unsigned long flags;
1049                        int i;
1050
1051                        if (!arg)
1052                                return -EINVAL;
1053                        if (!capable(CAP_SYS_ADMIN))
1054                                return -EPERM;
1055
1056                        if (copy_from_user
1057                            (NodeName, argp, sizeof(NodeName_type)))
1058                                return -EFAULT;
1059
1060                        spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1061
1062                        /* Update the field, and then ring the doorbell */
1063                        for (i = 0; i < 16; i++)
1064                                writeb(NodeName[i],
1065                                       &host->cfgtable->ServerName[i]);
1066
1067                        writel(CFGTBL_ChangeReq, host->vaddr + SA5_DOORBELL);
1068
1069                        for (i = 0; i < MAX_IOCTL_CONFIG_WAIT; i++) {
1070                                if (!(readl(host->vaddr + SA5_DOORBELL)
1071                                      & CFGTBL_ChangeReq))
1072                                        break;
1073                                /* delay and try again */
1074                                udelay(1000);
1075                        }
1076                        spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1077                        if (i >= MAX_IOCTL_CONFIG_WAIT)
1078                                return -EAGAIN;
1079                        return 0;
1080                }
1081
1082        case CCISS_GETHEARTBEAT:
1083                {
1084                        Heartbeat_type heartbeat;
1085
1086                        if (!arg)
1087                                return -EINVAL;
1088                        heartbeat = readl(&host->cfgtable->HeartBeat);
1089                        if (copy_to_user
1090                            (argp, &heartbeat, sizeof(Heartbeat_type)))
1091                                return -EFAULT;
1092                        return 0;
1093                }
1094        case CCISS_GETBUSTYPES:
1095                {
1096                        BusTypes_type BusTypes;
1097
1098                        if (!arg)
1099                                return -EINVAL;
1100                        BusTypes = readl(&host->cfgtable->BusTypes);
1101                        if (copy_to_user
1102                            (argp, &BusTypes, sizeof(BusTypes_type)))
1103                                return -EFAULT;
1104                        return 0;
1105                }
1106        case CCISS_GETFIRMVER:
1107                {
1108                        FirmwareVer_type firmware;
1109
1110                        if (!arg)
1111                                return -EINVAL;
1112                        memcpy(firmware, host->firm_ver, 4);
1113
1114                        if (copy_to_user
1115                            (argp, firmware, sizeof(FirmwareVer_type)))
1116                                return -EFAULT;
1117                        return 0;
1118                }
1119        case CCISS_GETDRIVVER:
1120                {
1121                        DriverVer_type DriverVer = DRIVER_VERSION;
1122
1123                        if (!arg)
1124                                return -EINVAL;
1125
1126                        if (copy_to_user
1127                            (argp, &DriverVer, sizeof(DriverVer_type)))
1128                                return -EFAULT;
1129                        return 0;
1130                }
1131
1132        case CCISS_DEREGDISK:
1133        case CCISS_REGNEWD:
1134        case CCISS_REVALIDVOLS:
1135                return rebuild_lun_table(host, 0);
1136
1137        case CCISS_GETLUNINFO:{
1138                        LogvolInfo_struct luninfo;
1139
1140                        luninfo.LunID = drv->LunID;
1141                        luninfo.num_opens = drv->usage_count;
1142                        luninfo.num_parts = 0;
1143                        if (copy_to_user(argp, &luninfo,
1144                                         sizeof(LogvolInfo_struct)))
1145                                return -EFAULT;
1146                        return 0;
1147                }
1148        case CCISS_PASSTHRU:
1149                {
1150                        IOCTL_Command_struct iocommand;
1151                        CommandList_struct *c;
1152                        char *buff = NULL;
1153                        u64bit temp64;
1154                        unsigned long flags;
1155                        DECLARE_COMPLETION_ONSTACK(wait);
1156
1157                        if (!arg)
1158                                return -EINVAL;
1159
1160                        if (!capable(CAP_SYS_RAWIO))
1161                                return -EPERM;
1162
1163                        if (copy_from_user
1164                            (&iocommand, argp, sizeof(IOCTL_Command_struct)))
1165                                return -EFAULT;
1166                        if ((iocommand.buf_size < 1) &&
1167                            (iocommand.Request.Type.Direction != XFER_NONE)) {
1168                                return -EINVAL;
1169                        }
1170#if 0                           /* 'buf_size' member is 16-bits, and always smaller than kmalloc limit */
1171                        /* Check kmalloc limits */
1172                        if (iocommand.buf_size > 128000)
1173                                return -EINVAL;
1174#endif
1175                        if (iocommand.buf_size > 0) {
1176                                buff = kmalloc(iocommand.buf_size, GFP_KERNEL);
1177                                if (buff == NULL)
1178                                        return -EFAULT;
1179                        }
1180                        if (iocommand.Request.Type.Direction == XFER_WRITE) {
1181                                /* Copy the data into the buffer we created */
1182                                if (copy_from_user
1183                                    (buff, iocommand.buf, iocommand.buf_size)) {
1184                                        kfree(buff);
1185                                        return -EFAULT;
1186                                }
1187                        } else {
1188                                memset(buff, 0, iocommand.buf_size);
1189                        }
1190                        if ((c = cmd_alloc(host, 0)) == NULL) {
1191                                kfree(buff);
1192                                return -ENOMEM;
1193                        }
1194                        // Fill in the command type
1195                        c->cmd_type = CMD_IOCTL_PEND;
1196                        // Fill in Command Header
1197                        c->Header.ReplyQueue = 0;       // unused in simple mode
1198                        if (iocommand.buf_size > 0)     // buffer to fill
1199                        {
1200                                c->Header.SGList = 1;
1201                                c->Header.SGTotal = 1;
1202                        } else  // no buffers to fill
1203                        {
1204                                c->Header.SGList = 0;
1205                                c->Header.SGTotal = 0;
1206                        }
1207                        c->Header.LUN = iocommand.LUN_info;
1208                        c->Header.Tag.lower = c->busaddr;       // use the kernel address the cmd block for tag
1209
1210                        // Fill in Request block
1211                        c->Request = iocommand.Request;
1212
1213                        // Fill in the scatter gather information
1214                        if (iocommand.buf_size > 0) {
1215                                temp64.val = pci_map_single(host->pdev, buff,
1216                                        iocommand.buf_size,
1217                                        PCI_DMA_BIDIRECTIONAL);
1218                                c->SG[0].Addr.lower = temp64.val32.lower;
1219                                c->SG[0].Addr.upper = temp64.val32.upper;
1220                                c->SG[0].Len = iocommand.buf_size;
1221                                c->SG[0].Ext = 0;       // we are not chaining
1222                        }
1223                        c->waiting = &wait;
1224
1225                        /* Put the request on the tail of the request queue */
1226                        spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1227                        addQ(&host->reqQ, c);
1228                        host->Qdepth++;
1229                        start_io(host);
1230                        spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1231
1232                        wait_for_completion(&wait);
1233
1234                        /* unlock the buffers from DMA */
1235                        temp64.val32.lower = c->SG[0].Addr.lower;
1236                        temp64.val32.upper = c->SG[0].Addr.upper;
1237                        pci_unmap_single(host->pdev, (dma_addr_t) temp64.val,
1238                                         iocommand.buf_size,
1239                                         PCI_DMA_BIDIRECTIONAL);
1240
1241                        check_ioctl_unit_attention(host, c);
1242
1243                        /* Copy the error information out */
1244                        iocommand.error_info = *(c->err_info);
1245                        if (copy_to_user
1246                            (argp, &iocommand, sizeof(IOCTL_Command_struct))) {
1247                                kfree(buff);
1248                                cmd_free(host, c, 0);
1249                                return -EFAULT;
1250                        }
1251
1252                        if (iocommand.Request.Type.Direction == XFER_READ) {
1253                                /* Copy the data out of the buffer we created */
1254                                if (copy_to_user
1255                                    (iocommand.buf, buff, iocommand.buf_size)) {
1256                                        kfree(buff);
1257                                        cmd_free(host, c, 0);
1258                                        return -EFAULT;
1259                                }
1260                        }
1261                        kfree(buff);
1262                        cmd_free(host, c, 0);
1263                        return 0;
1264                }
1265        case CCISS_BIG_PASSTHRU:{
1266                        BIG_IOCTL_Command_struct *ioc;
1267                        CommandList_struct *c;
1268                        unsigned char **buff = NULL;
1269                        int *buff_size = NULL;
1270                        u64bit temp64;
1271                        unsigned long flags;
1272                        BYTE sg_used = 0;
1273                        int status = 0;
1274                        int i;
1275                        DECLARE_COMPLETION_ONSTACK(wait);
1276                        __u32 left;
1277                        __u32 sz;
1278                        BYTE __user *data_ptr;
1279
1280                        if (!arg)
1281                                return -EINVAL;
1282                        if (!capable(CAP_SYS_RAWIO))
1283                                return -EPERM;
1284                        ioc = (BIG_IOCTL_Command_struct *)
1285                            kmalloc(sizeof(*ioc), GFP_KERNEL);
1286                        if (!ioc) {
1287                                status = -ENOMEM;
1288                                goto cleanup1;
1289                        }
1290                        if (copy_from_user(ioc, argp, sizeof(*ioc))) {
1291                                status = -EFAULT;
1292                                goto cleanup1;
1293                        }
1294                        if ((ioc->buf_size < 1) &&
1295                            (ioc->Request.Type.Direction != XFER_NONE)) {
1296                                status = -EINVAL;
1297                                goto cleanup1;
1298                        }
1299                        /* Check kmalloc limits  using all SGs */
1300                        if (ioc->malloc_size > MAX_KMALLOC_SIZE) {
1301                                status = -EINVAL;
1302                                goto cleanup1;
1303                        }
1304                        if (ioc->buf_size > ioc->malloc_size * MAXSGENTRIES) {
1305                                status = -EINVAL;
1306                                goto cleanup1;
1307                        }
1308                        buff =
1309                            kzalloc(MAXSGENTRIES * sizeof(char *), GFP_KERNEL);
1310                        if (!buff) {
1311                                status = -ENOMEM;
1312                                goto cleanup1;
1313                        }
1314                        buff_size = kmalloc(MAXSGENTRIES * sizeof(int),
1315                                                   GFP_KERNEL);
1316                        if (!buff_size) {
1317                                status = -ENOMEM;
1318                                goto cleanup1;
1319                        }
1320                        left = ioc->buf_size;
1321                        data_ptr = ioc->buf;
1322                        while (left) {
1323                                sz = (left >
1324                                      ioc->malloc_size) ? ioc->
1325                                    malloc_size : left;
1326                                buff_size[sg_used] = sz;
1327                                buff[sg_used] = kmalloc(sz, GFP_KERNEL);
1328                                if (buff[sg_used] == NULL) {
1329                                        status = -ENOMEM;
1330                                        goto cleanup1;
1331                                }
1332                                if (ioc->Request.Type.Direction == XFER_WRITE) {
1333                                        if (copy_from_user
1334                                            (buff[sg_used], data_ptr, sz)) {
1335                                                status = -EFAULT;
1336                                                goto cleanup1;
1337                                        }
1338                                } else {
1339                                        memset(buff[sg_used], 0, sz);
1340                                }
1341                                left -= sz;
1342                                data_ptr += sz;
1343                                sg_used++;
1344                        }
1345                        if ((c = cmd_alloc(host, 0)) == NULL) {
1346                                status = -ENOMEM;
1347                                goto cleanup1;
1348                        }
1349                        c->cmd_type = CMD_IOCTL_PEND;
1350                        c->Header.ReplyQueue = 0;
1351
1352                        if (ioc->buf_size > 0) {
1353                                c->Header.SGList = sg_used;
1354                                c->Header.SGTotal = sg_used;
1355                        } else {
1356                                c->Header.SGList = 0;
1357                                c->Header.SGTotal = 0;
1358                        }
1359                        c->Header.LUN = ioc->LUN_info;
1360                        c->Header.Tag.lower = c->busaddr;
1361
1362                        c->Request = ioc->Request;
1363                        if (ioc->buf_size > 0) {
1364                                int i;
1365                                for (i = 0; i < sg_used; i++) {
1366                                        temp64.val =
1367                                            pci_map_single(host->pdev, buff[i],
1368                                                    buff_size[i],
1369                                                    PCI_DMA_BIDIRECTIONAL);
1370                                        c->SG[i].Addr.lower =
1371                                            temp64.val32.lower;
1372                                        c->SG[i].Addr.upper =
1373                                            temp64.val32.upper;
1374                                        c->SG[i].Len = buff_size[i];
1375                                        c->SG[i].Ext = 0;       /* we are not chaining */
1376                                }
1377                        }
1378                        c->waiting = &wait;
1379                        /* Put the request on the tail of the request queue */
1380                        spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
1381                        addQ(&host->reqQ, c);
1382                        host->Qdepth++;
1383                        start_io(host);
1384                        spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
1385                        wait_for_completion(&wait);
1386                        /* unlock the buffers from DMA */
1387                        for (i = 0; i < sg_used; i++) {
1388                                temp64.val32.lower = c->SG[i].Addr.lower;
1389                                temp64.val32.upper = c->SG[i].Addr.upper;
1390                                pci_unmap_single(host->pdev,
1391                                        (dma_addr_t) temp64.val, buff_size[i],
1392                                        PCI_DMA_BIDIRECTIONAL);
1393                        }
1394                        check_ioctl_unit_attention(host, c);
1395                        /* Copy the error information out */
1396                        ioc->error_info = *(c->err_info);
1397                        if (copy_to_user(argp, ioc, sizeof(*ioc))) {
1398                                cmd_free(host, c, 0);
1399                                status = -EFAULT;
1400                                goto cleanup1;
1401                        }
1402                        if (ioc->Request.Type.Direction == XFER_READ) {
1403                                /* Copy the data out of the buffer we created */
1404                                BYTE __user *ptr = ioc->buf;
1405                                for (i = 0; i < sg_used; i++) {
1406                                        if (copy_to_user
1407                                            (ptr, buff[i], buff_size[i])) {
1408                                                cmd_free(host, c, 0);
1409                                                status = -EFAULT;
1410                                                goto cleanup1;
1411                                        }
1412                                        ptr += buff_size[i];
1413                                }
1414                        }
1415                        cmd_free(host, c, 0);
1416                        status = 0;
1417                      cleanup1:
1418                        if (buff) {
1419                                for (i = 0; i < sg_used; i++)
1420                                        kfree(buff[i]);
1421                                kfree(buff);
1422                        }
1423                        kfree(buff_size);
1424                        kfree(ioc);
1425                        return status;
1426                }
1427
1428        /* scsi_cmd_ioctl handles these, below, though some are not */
1429        /* very meaningful for cciss.  SG_IO is the main one people want. */
1430
1431        case SG_GET_VERSION_NUM:
1432        case SG_SET_TIMEOUT:
1433        case SG_GET_TIMEOUT:
1434        case SG_GET_RESERVED_SIZE:
1435        case SG_SET_RESERVED_SIZE:
1436        case SG_EMULATED_HOST:
1437        case SG_IO:
1438        case SCSI_IOCTL_SEND_COMMAND:
1439                return scsi_cmd_ioctl(disk->queue, disk, mode, cmd, argp);
1440
1441        /* scsi_cmd_ioctl would normally handle these, below, but */
1442        /* they aren't a good fit for cciss, as CD-ROMs are */
1443        /* not supported, and we don't have any bus/target/lun */
1444        /* which we present to the kernel. */
1445
1446        case CDROM_SEND_PACKET:
1447        case CDROMCLOSETRAY:
1448        case CDROMEJECT:
1449        case SCSI_IOCTL_GET_IDLUN:
1450        case SCSI_IOCTL_GET_BUS_NUMBER:
1451        default:
1452                return -ENOTTY;
1453        }
1454}
1455
1456static void cciss_check_queues(ctlr_info_t *h)
1457{
1458        int start_queue = h->next_to_run;
1459        int i;
1460
1461        /* check to see if we have maxed out the number of commands that can
1462         * be placed on the queue.  If so then exit.  We do this check here
1463         * in case the interrupt we serviced was from an ioctl and did not
1464         * free any new commands.
1465         */
1466        if ((find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds)) == h->nr_cmds)
1467                return;
1468
1469        /* We have room on the queue for more commands.  Now we need to queue
1470         * them up.  We will also keep track of the next queue to run so
1471         * that every queue gets a chance to be started first.
1472         */
1473        for (i = 0; i < h->highest_lun + 1; i++) {
1474                int curr_queue = (start_queue + i) % (h->highest_lun + 1);
1475                /* make sure the disk has been added and the drive is real
1476                 * because this can be called from the middle of init_one.
1477                 */
1478                if (!(h->drv[curr_queue].queue) || !(h->drv[curr_queue].heads))
1479                        continue;
1480                blk_start_queue(h->gendisk[curr_queue]->queue);
1481
1482                /* check to see if we have maxed out the number of commands
1483                 * that can be placed on the queue.
1484                 */
1485                if ((find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds)) == h->nr_cmds) {
1486                        if (curr_queue == start_queue) {
1487                                h->next_to_run =
1488                                    (start_queue + 1) % (h->highest_lun + 1);
1489                                break;
1490                        } else {
1491                                h->next_to_run = curr_queue;
1492                                break;
1493                        }
1494                }
1495        }
1496}
1497
1498static void cciss_softirq_done(struct request *rq)
1499{
1500        CommandList_struct *cmd = rq->completion_data;
1501        ctlr_info_t *h = hba[cmd->ctlr];
1502        unsigned long flags;
1503        u64bit temp64;
1504        int i, ddir;
1505
1506        if (cmd->Request.Type.Direction == XFER_READ)
1507                ddir = PCI_DMA_FROMDEVICE;
1508        else
1509                ddir = PCI_DMA_TODEVICE;
1510
1511        /* command did not need to be retried */
1512        /* unmap the DMA mapping for all the scatter gather elements */
1513        for (i = 0; i < cmd->Header.SGList; i++) {
1514                temp64.val32.lower = cmd->SG[i].Addr.lower;
1515                temp64.val32.upper = cmd->SG[i].Addr.upper;
1516                pci_unmap_page(h->pdev, temp64.val, cmd->SG[i].Len, ddir);
1517        }
1518
1519#ifdef CCISS_DEBUG
1520        printk("Done with %p\n", rq);
1521#endif                          /* CCISS_DEBUG */
1522
1523        /* set the residual count for pc requests */
1524        if (blk_pc_request(rq))
1525                rq->resid_len = cmd->err_info->ResidualCnt;
1526
1527        blk_end_request_all(rq, (rq->errors == 0) ? 0 : -EIO);
1528
1529        spin_lock_irqsave(&h->lock, flags);
1530        cmd_free(h, cmd, 1);
1531        cciss_check_queues(h);
1532        spin_unlock_irqrestore(&h->lock, flags);
1533}
1534
1535static void log_unit_to_scsi3addr(ctlr_info_t *h, unsigned char scsi3addr[],
1536        uint32_t log_unit)
1537{
1538        log_unit = h->drv[log_unit].LunID & 0x03fff;
1539        memset(&scsi3addr[4], 0, 4);
1540        memcpy(&scsi3addr[0], &log_unit, 4);
1541        scsi3addr[3] |= 0x40;
1542}
1543
1544/* This function gets the SCSI vendor, model, and revision of a logical drive
1545 * via the inquiry page 0.  Model, vendor, and rev are set to empty strings if
1546 * they cannot be read.
1547 */
1548static void cciss_get_device_descr(int ctlr, int logvol, int withirq,
1549                                   char *vendor, char *model, char *rev)
1550{
1551        int rc;
1552        InquiryData_struct *inq_buf;
1553        unsigned char scsi3addr[8];
1554
1555        *vendor = '\0';
1556        *model = '\0';
1557        *rev = '\0';
1558
1559        inq_buf = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
1560        if (!inq_buf)
1561                return;
1562
1563        log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
1564        if (withirq)
1565                rc = sendcmd_withirq(CISS_INQUIRY, ctlr, inq_buf,
1566                             sizeof(InquiryData_struct), 0,
1567                                scsi3addr, TYPE_CMD);
1568        else
1569                rc = sendcmd(CISS_INQUIRY, ctlr, inq_buf,
1570                             sizeof(InquiryData_struct), 0,
1571                                scsi3addr, TYPE_CMD);
1572        if (rc == IO_OK) {
1573                memcpy(vendor, &inq_buf->data_byte[8], VENDOR_LEN);
1574                vendor[VENDOR_LEN] = '\0';
1575                memcpy(model, &inq_buf->data_byte[16], MODEL_LEN);
1576                model[MODEL_LEN] = '\0';
1577                memcpy(rev, &inq_buf->data_byte[32], REV_LEN);
1578                rev[REV_LEN] = '\0';
1579        }
1580
1581        kfree(inq_buf);
1582        return;
1583}
1584
1585/* This function gets the serial number of a logical drive via
1586 * inquiry page 0x83.  Serial no. is 16 bytes.  If the serial
1587 * number cannot be had, for whatever reason, 16 bytes of 0xff
1588 * are returned instead.
1589 */
1590static void cciss_get_serial_no(int ctlr, int logvol, int withirq,
1591                                unsigned char *serial_no, int buflen)
1592{
1593#define PAGE_83_INQ_BYTES 64
1594        int rc;
1595        unsigned char *buf;
1596        unsigned char scsi3addr[8];
1597
1598        if (buflen > 16)
1599                buflen = 16;
1600        memset(serial_no, 0xff, buflen);
1601        buf = kzalloc(PAGE_83_INQ_BYTES, GFP_KERNEL);
1602        if (!buf)
1603                return;
1604        memset(serial_no, 0, buflen);
1605        log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
1606        if (withirq)
1607                rc = sendcmd_withirq(CISS_INQUIRY, ctlr, buf,
1608                        PAGE_83_INQ_BYTES, 0x83, scsi3addr, TYPE_CMD);
1609        else
1610                rc = sendcmd(CISS_INQUIRY, ctlr, buf,
1611                        PAGE_83_INQ_BYTES, 0x83, scsi3addr, TYPE_CMD);
1612        if (rc == IO_OK)
1613                memcpy(serial_no, &buf[8], buflen);
1614        kfree(buf);
1615        return;
1616}
1617
1618static void cciss_add_disk(ctlr_info_t *h, struct gendisk *disk,
1619                                int drv_index)
1620{
1621        disk->queue = blk_init_queue(do_cciss_request, &h->lock);
1622        sprintf(disk->disk_name, "cciss/c%dd%d", h->ctlr, drv_index);
1623        disk->major = h->major;
1624        disk->first_minor = drv_index << NWD_SHIFT;
1625        disk->fops = &cciss_fops;
1626        disk->private_data = &h->drv[drv_index];
1627        disk->driverfs_dev = &h->drv[drv_index].dev;
1628
1629        /* Set up queue information */
1630        blk_queue_bounce_limit(disk->queue, h->pdev->dma_mask);
1631
1632        /* This is a hardware imposed limit. */
1633        blk_queue_max_hw_segments(disk->queue, MAXSGENTRIES);
1634
1635        /* This is a limit in the driver and could be eliminated. */
1636        blk_queue_max_phys_segments(disk->queue, MAXSGENTRIES);
1637
1638        blk_queue_max_sectors(disk->queue, h->cciss_max_sectors);
1639
1640        blk_queue_softirq_done(disk->queue, cciss_softirq_done);
1641
1642        disk->queue->queuedata = h;
1643
1644        blk_queue_logical_block_size(disk->queue,
1645                                     h->drv[drv_index].block_size);
1646
1647        /* Make sure all queue data is written out before */
1648        /* setting h->drv[drv_index].queue, as setting this */
1649        /* allows the interrupt handler to start the queue */
1650        wmb();
1651        h->drv[drv_index].queue = disk->queue;
1652        add_disk(disk);
1653}
1654
1655/* This function will check the usage_count of the drive to be updated/added.
1656 * If the usage_count is zero and it is a heretofore unknown drive, or,
1657 * the drive's capacity, geometry, or serial number has changed,
1658 * then the drive information will be updated and the disk will be
1659 * re-registered with the kernel.  If these conditions don't hold,
1660 * then it will be left alone for the next reboot.  The exception to this
1661 * is disk 0 which will always be left registered with the kernel since it
1662 * is also the controller node.  Any changes to disk 0 will show up on
1663 * the next reboot.
1664 */
1665static void cciss_update_drive_info(int ctlr, int drv_index, int first_time)
1666{
1667        ctlr_info_t *h = hba[ctlr];
1668        struct gendisk *disk;
1669        InquiryData_struct *inq_buff = NULL;
1670        unsigned int block_size;
1671        sector_t total_size;
1672        unsigned long flags = 0;
1673        int ret = 0;
1674        drive_info_struct *drvinfo;
1675        int was_only_controller_node;
1676
1677        /* Get information about the disk and modify the driver structure */
1678        inq_buff = kmalloc(sizeof(InquiryData_struct), GFP_KERNEL);
1679        drvinfo = kmalloc(sizeof(*drvinfo), GFP_KERNEL);
1680        if (inq_buff == NULL || drvinfo == NULL)
1681                goto mem_msg;
1682
1683        /* See if we're trying to update the "controller node"
1684         * this will happen the when the first logical drive gets
1685         * created by ACU.
1686         */
1687        was_only_controller_node = (drv_index == 0 &&
1688                                h->drv[0].raid_level == -1);
1689
1690        /* testing to see if 16-byte CDBs are already being used */
1691        if (h->cciss_read == CCISS_READ_16) {
1692                cciss_read_capacity_16(h->ctlr, drv_index, 1,
1693                        &total_size, &block_size);
1694
1695        } else {
1696                cciss_read_capacity(ctlr, drv_index, 1,
1697                                    &total_size, &block_size);
1698
1699                /* if read_capacity returns all F's this volume is >2TB */
1700                /* in size so we switch to 16-byte CDB's for all */
1701                /* read/write ops */
1702                if (total_size == 0xFFFFFFFFULL) {
1703                        cciss_read_capacity_16(ctlr, drv_index, 1,
1704                        &total_size, &block_size);
1705                        h->cciss_read = CCISS_READ_16;
1706                        h->cciss_write = CCISS_WRITE_16;
1707                } else {
1708                        h->cciss_read = CCISS_READ_10;
1709                        h->cciss_write = CCISS_WRITE_10;
1710                }
1711        }
1712
1713        cciss_geometry_inquiry(ctlr, drv_index, 1, total_size, block_size,
1714                               inq_buff, drvinfo);
1715        drvinfo->block_size = block_size;
1716        drvinfo->nr_blocks = total_size + 1;
1717
1718        cciss_get_device_descr(ctlr, drv_index, 1, drvinfo->vendor,
1719                                drvinfo->model, drvinfo->rev);
1720        cciss_get_serial_no(ctlr, drv_index, 1, drvinfo->serial_no,
1721                        sizeof(drvinfo->serial_no));
1722
1723        /* Is it the same disk we already know, and nothing's changed? */
1724        if (h->drv[drv_index].raid_level != -1 &&
1725                ((memcmp(drvinfo->serial_no,
1726                                h->drv[drv_index].serial_no, 16) == 0) &&
1727                drvinfo->block_size == h->drv[drv_index].block_size &&
1728                drvinfo->nr_blocks == h->drv[drv_index].nr_blocks &&
1729                drvinfo->heads == h->drv[drv_index].heads &&
1730                drvinfo->sectors == h->drv[drv_index].sectors &&
1731                drvinfo->cylinders == h->drv[drv_index].cylinders))
1732                        /* The disk is unchanged, nothing to update */
1733                        goto freeret;
1734
1735        /* If we get here it's not the same disk, or something's changed,
1736         * so we need to * deregister it, and re-register it, if it's not
1737         * in use.
1738         * If the disk already exists then deregister it before proceeding
1739         * (unless it's the first disk (for the controller node).
1740         */
1741        if (h->drv[drv_index].raid_level != -1 && drv_index != 0) {
1742                printk(KERN_WARNING "disk %d has changed.\n", drv_index);
1743                spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
1744                h->drv[drv_index].busy_configuring = 1;
1745                spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1746
1747                /* deregister_disk sets h->drv[drv_index].queue = NULL
1748                 * which keeps the interrupt handler from starting
1749                 * the queue.
1750                 */
1751                ret = deregister_disk(h, drv_index, 0);
1752                h->drv[drv_index].busy_configuring = 0;
1753        }
1754
1755        /* If the disk is in use return */
1756        if (ret)
1757                goto freeret;
1758
1759        /* Save the new information from cciss_geometry_inquiry
1760         * and serial number inquiry.
1761         */
1762        h->drv[drv_index].block_size = drvinfo->block_size;
1763        h->drv[drv_index].nr_blocks = drvinfo->nr_blocks;
1764        h->drv[drv_index].heads = drvinfo->heads;
1765        h->drv[drv_index].sectors = drvinfo->sectors;
1766        h->drv[drv_index].cylinders = drvinfo->cylinders;
1767        h->drv[drv_index].raid_level = drvinfo->raid_level;
1768        memcpy(h->drv[drv_index].serial_no, drvinfo->serial_no, 16);
1769        memcpy(h->drv[drv_index].vendor, drvinfo->vendor, VENDOR_LEN + 1);
1770        memcpy(h->drv[drv_index].model, drvinfo->model, MODEL_LEN + 1);
1771        memcpy(h->drv[drv_index].rev, drvinfo->rev, REV_LEN + 1);
1772
1773        ++h->num_luns;
1774        disk = h->gendisk[drv_index];
1775        set_capacity(disk, h->drv[drv_index].nr_blocks);
1776
1777        /* If it's not disk 0 (drv_index != 0)
1778         * or if it was disk 0, but there was previously
1779         * no actual corresponding configured logical drive
1780         * (raid_leve == -1) then we want to update the
1781         * logical drive's information.
1782         */
1783        if (drv_index || first_time)
1784                cciss_add_disk(h, disk, drv_index);
1785
1786freeret:
1787        kfree(inq_buff);
1788        kfree(drvinfo);
1789        return;
1790mem_msg:
1791        printk(KERN_ERR "cciss: out of memory\n");
1792        goto freeret;
1793}
1794
1795/* This function will find the first index of the controllers drive array
1796 * that has a -1 for the raid_level and will return that index.  This is
1797 * where new drives will be added.  If the index to be returned is greater
1798 * than the highest_lun index for the controller then highest_lun is set
1799 * to this new index.  If there are no available indexes then -1 is returned.
1800 * "controller_node" is used to know if this is a real logical drive, or just
1801 * the controller node, which determines if this counts towards highest_lun.
1802 */
1803static int cciss_find_free_drive_index(int ctlr, int controller_node)
1804{
1805        int i;
1806
1807        for (i = 0; i < CISS_MAX_LUN; i++) {
1808                if (hba[ctlr]->drv[i].raid_level == -1) {
1809                        if (i > hba[ctlr]->highest_lun)
1810                                if (!controller_node)
1811                                        hba[ctlr]->highest_lun = i;
1812                        return i;
1813                }
1814        }
1815        return -1;
1816}
1817
1818/* cciss_add_gendisk finds a free hba[]->drv structure
1819 * and allocates a gendisk if needed, and sets the lunid
1820 * in the drvinfo structure.   It returns the index into
1821 * the ->drv[] array, or -1 if none are free.
1822 * is_controller_node indicates whether highest_lun should
1823 * count this disk, or if it's only being added to provide
1824 * a means to talk to the controller in case no logical
1825 * drives have yet been configured.
1826 */
1827static int cciss_add_gendisk(ctlr_info_t *h, __u32 lunid, int controller_node)
1828{
1829        int drv_index;
1830
1831        drv_index = cciss_find_free_drive_index(h->ctlr, controller_node);
1832        if (drv_index == -1)
1833                return -1;
1834        /*Check if the gendisk needs to be allocated */
1835        if (!h->gendisk[drv_index]) {
1836                h->gendisk[drv_index] =
1837                        alloc_disk(1 << NWD_SHIFT);
1838                if (!h->gendisk[drv_index]) {
1839                        printk(KERN_ERR "cciss%d: could not "
1840                                "allocate a new disk %d\n",
1841                                h->ctlr, drv_index);
1842                        return -1;
1843                }
1844        }
1845        h->drv[drv_index].LunID = lunid;
1846        if (cciss_create_ld_sysfs_entry(h, &h->drv[drv_index], drv_index))
1847                goto err_free_disk;
1848
1849        /* Don't need to mark this busy because nobody */
1850        /* else knows about this disk yet to contend */
1851        /* for access to it. */
1852        h->drv[drv_index].busy_configuring = 0;
1853        wmb();
1854        return drv_index;
1855
1856err_free_disk:
1857        put_disk(h->gendisk[drv_index]);
1858        h->gendisk[drv_index] = NULL;
1859        return -1;
1860}
1861
1862/* This is for the special case of a controller which
1863 * has no logical drives.  In this case, we still need
1864 * to register a disk so the controller can be accessed
1865 * by the Array Config Utility.
1866 */
1867static void cciss_add_controller_node(ctlr_info_t *h)
1868{
1869        struct gendisk *disk;
1870        int drv_index;
1871
1872        if (h->gendisk[0] != NULL) /* already did this? Then bail. */
1873                return;
1874
1875        drv_index = cciss_add_gendisk(h, 0, 1);
1876        if (drv_index == -1) {
1877                printk(KERN_WARNING "cciss%d: could not "
1878                        "add disk 0.\n", h->ctlr);
1879                return;
1880        }
1881        h->drv[drv_index].block_size = 512;
1882        h->drv[drv_index].nr_blocks = 0;
1883        h->drv[drv_index].heads = 0;
1884        h->drv[drv_index].sectors = 0;
1885        h->drv[drv_index].cylinders = 0;
1886        h->drv[drv_index].raid_level = -1;
1887        memset(h->drv[drv_index].serial_no, 0, 16);
1888        disk = h->gendisk[drv_index];
1889        cciss_add_disk(h, disk, drv_index);
1890}
1891
1892/* This function will add and remove logical drives from the Logical
1893 * drive array of the controller and maintain persistency of ordering
1894 * so that mount points are preserved until the next reboot.  This allows
1895 * for the removal of logical drives in the middle of the drive array
1896 * without a re-ordering of those drives.
1897 * INPUT
1898 * h            = The controller to perform the operations on
1899 */
1900static int rebuild_lun_table(ctlr_info_t *h, int first_time)
1901{
1902        int ctlr = h->ctlr;
1903        int num_luns;
1904        ReportLunData_struct *ld_buff = NULL;
1905        int return_code;
1906        int listlength = 0;
1907        int i;
1908        int drv_found;
1909        int drv_index = 0;
1910        __u32 lunid = 0;
1911        unsigned long flags;
1912
1913        if (!capable(CAP_SYS_RAWIO))
1914                return -EPERM;
1915
1916        /* Set busy_configuring flag for this operation */
1917        spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
1918        if (h->busy_configuring) {
1919                spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1920                return -EBUSY;
1921        }
1922        h->busy_configuring = 1;
1923        spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1924
1925        ld_buff = kzalloc(sizeof(ReportLunData_struct), GFP_KERNEL);
1926        if (ld_buff == NULL)
1927                goto mem_msg;
1928
1929        return_code = sendcmd_withirq(CISS_REPORT_LOG, ctlr, ld_buff,
1930                                      sizeof(ReportLunData_struct),
1931                                      0, CTLR_LUNID, TYPE_CMD);
1932
1933        if (return_code == IO_OK)
1934                listlength = be32_to_cpu(*(__be32 *) ld_buff->LUNListLength);
1935        else {  /* reading number of logical volumes failed */
1936                printk(KERN_WARNING "cciss: report logical volume"
1937                       " command failed\n");
1938                listlength = 0;
1939                goto freeret;
1940        }
1941
1942        num_luns = listlength / 8;      /* 8 bytes per entry */
1943        if (num_luns > CISS_MAX_LUN) {
1944                num_luns = CISS_MAX_LUN;
1945                printk(KERN_WARNING "cciss: more luns configured"
1946                       " on controller than can be handled by"
1947                       " this driver.\n");
1948        }
1949
1950        if (num_luns == 0)
1951                cciss_add_controller_node(h);
1952
1953        /* Compare controller drive array to driver's drive array
1954         * to see if any drives are missing on the controller due
1955         * to action of Array Config Utility (user deletes drive)
1956         * and deregister logical drives which have disappeared.
1957         */
1958        for (i = 0; i <= h->highest_lun; i++) {
1959                int j;
1960                drv_found = 0;
1961
1962                /* skip holes in the array from already deleted drives */
1963                if (h->drv[i].raid_level == -1)
1964                        continue;
1965
1966                for (j = 0; j < num_luns; j++) {
1967                        memcpy(&lunid, &ld_buff->LUN[j][0], 4);
1968                        lunid = le32_to_cpu(lunid);
1969                        if (h->drv[i].LunID == lunid) {
1970                                drv_found = 1;
1971                                break;
1972                        }
1973                }
1974                if (!drv_found) {
1975                        /* Deregister it from the OS, it's gone. */
1976                        spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
1977                        h->drv[i].busy_configuring = 1;
1978                        spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
1979                        return_code = deregister_disk(h, i, 1);
1980                        cciss_destroy_ld_sysfs_entry(&h->drv[i]);
1981                        h->drv[i].busy_configuring = 0;
1982                }
1983        }
1984
1985        /* Compare controller drive array to driver's drive array.
1986         * Check for updates in the drive information and any new drives
1987         * on the controller due to ACU adding logical drives, or changing
1988         * a logical drive's size, etc.  Reregister any new/changed drives
1989         */
1990        for (i = 0; i < num_luns; i++) {
1991                int j;
1992
1993                drv_found = 0;
1994
1995                memcpy(&lunid, &ld_buff->LUN[i][0], 4);
1996                lunid = le32_to_cpu(lunid);
1997
1998                /* Find if the LUN is already in the drive array
1999                 * of the driver.  If so then update its info
2000                 * if not in use.  If it does not exist then find
2001                 * the first free index and add it.
2002                 */
2003                for (j = 0; j <= h->highest_lun; j++) {
2004                        if (h->drv[j].raid_level != -1 &&
2005                                h->drv[j].LunID == lunid) {
2006                                drv_index = j;
2007                                drv_found = 1;
2008                                break;
2009                        }
2010                }
2011
2012                /* check if the drive was found already in the array */
2013                if (!drv_found) {
2014                        drv_index = cciss_add_gendisk(h, lunid, 0);
2015                        if (drv_index == -1)
2016                                goto freeret;
2017                }
2018                cciss_update_drive_info(ctlr, drv_index, first_time);
2019        }               /* end for */
2020
2021freeret:
2022        kfree(ld_buff);
2023        h->busy_configuring = 0;
2024        /* We return -1 here to tell the ACU that we have registered/updated
2025         * all of the drives that we can and to keep it from calling us
2026         * additional times.
2027         */
2028        return -1;
2029mem_msg:
2030        printk(KERN_ERR "cciss: out of memory\n");
2031        h->busy_configuring = 0;
2032        goto freeret;
2033}
2034
2035/* This function will deregister the disk and it's queue from the
2036 * kernel.  It must be called with the controller lock held and the
2037 * drv structures busy_configuring flag set.  It's parameters are:
2038 *
2039 * disk = This is the disk to be deregistered
2040 * drv  = This is the drive_info_struct associated with the disk to be
2041 *        deregistered.  It contains information about the disk used
2042 *        by the driver.
2043 * clear_all = This flag determines whether or not the disk information
2044 *             is going to be completely cleared out and the highest_lun
2045 *             reset.  Sometimes we want to clear out information about
2046 *             the disk in preparation for re-adding it.  In this case
2047 *             the highest_lun should be left unchanged and the LunID
2048 *             should not be cleared.
2049*/
2050static int deregister_disk(ctlr_info_t *h, int drv_index,
2051                           int clear_all)
2052{
2053        int i;
2054        struct gendisk *disk;
2055        drive_info_struct *drv;
2056
2057        if (!capable(CAP_SYS_RAWIO))
2058                return -EPERM;
2059
2060        drv = &h->drv[drv_index];
2061        disk = h->gendisk[drv_index];
2062
2063        /* make sure logical volume is NOT is use */
2064        if (clear_all || (h->gendisk[0] == disk)) {
2065                if (drv->usage_count > 1)
2066                        return -EBUSY;
2067        } else if (drv->usage_count > 0)
2068                return -EBUSY;
2069
2070        /* invalidate the devices and deregister the disk.  If it is disk
2071         * zero do not deregister it but just zero out it's values.  This
2072         * allows us to delete disk zero but keep the controller registered.
2073         */
2074        if (h->gendisk[0] != disk) {
2075                struct request_queue *q = disk->queue;
2076                if (disk->flags & GENHD_FL_UP)
2077                        del_gendisk(disk);
2078                if (q) {
2079                        blk_cleanup_queue(q);
2080                        /* Set drv->queue to NULL so that we do not try
2081                         * to call blk_start_queue on this queue in the
2082                         * interrupt handler
2083                         */
2084                        drv->queue = NULL;
2085                }
2086                /* If clear_all is set then we are deleting the logical
2087                 * drive, not just refreshing its info.  For drives
2088                 * other than disk 0 we will call put_disk.  We do not
2089                 * do this for disk 0 as we need it to be able to
2090                 * configure the controller.
2091                 */
2092                if (clear_all){
2093                        /* This isn't pretty, but we need to find the
2094                         * disk in our array and NULL our the pointer.
2095                         * This is so that we will call alloc_disk if
2096                         * this index is used again later.
2097                         */
2098                        for (i=0; i < CISS_MAX_LUN; i++){
2099                                if (h->gendisk[i] == disk) {
2100                                        h->gendisk[i] = NULL;
2101                                        break;
2102                                }
2103                        }
2104                        put_disk(disk);
2105                }
2106        } else {
2107                set_capacity(disk, 0);
2108        }
2109
2110        --h->num_luns;
2111        /* zero out the disk size info */
2112        drv->nr_blocks = 0;
2113        drv->block_size = 0;
2114        drv->heads = 0;
2115        drv->sectors = 0;
2116        drv->cylinders = 0;
2117        drv->raid_level = -1;   /* This can be used as a flag variable to
2118                                 * indicate that this element of the drive
2119                                 * array is free.
2120                                 */
2121
2122        if (clear_all) {
2123                /* check to see if it was the last disk */
2124                if (drv == h->drv + h->highest_lun) {
2125                        /* if so, find the new hightest lun */
2126                        int i, newhighest = -1;
2127                        for (i = 0; i <= h->highest_lun; i++) {
2128                                /* if the disk has size > 0, it is available */
2129                                if (h->drv[i].heads)
2130                                        newhighest = i;
2131                        }
2132                        h->highest_lun = newhighest;
2133                }
2134
2135                drv->LunID = 0;
2136        }
2137        return 0;
2138}
2139
2140static int fill_cmd(CommandList_struct *c, __u8 cmd, int ctlr, void *buff,
2141                size_t size, __u8 page_code, unsigned char *scsi3addr,
2142                int cmd_type)
2143{
2144        ctlr_info_t *h = hba[ctlr];
2145        u64bit buff_dma_handle;
2146        int status = IO_OK;
2147
2148        c->cmd_type = CMD_IOCTL_PEND;
2149        c->Header.ReplyQueue = 0;
2150        if (buff != NULL) {
2151                c->Header.SGList = 1;
2152                c->Header.SGTotal = 1;
2153        } else {
2154                c->Header.SGList = 0;
2155                c->Header.SGTotal = 0;
2156        }
2157        c->Header.Tag.lower = c->busaddr;
2158        memcpy(c->Header.LUN.LunAddrBytes, scsi3addr, 8);
2159
2160        c->Request.Type.Type = cmd_type;
2161        if (cmd_type == TYPE_CMD) {
2162                switch (cmd) {
2163                case CISS_INQUIRY:
2164                        /* are we trying to read a vital product page */
2165                        if (page_code != 0) {
2166                                c->Request.CDB[1] = 0x01;
2167                                c->Request.CDB[2] = page_code;
2168                        }
2169                        c->Request.CDBLen = 6;
2170                        c->Request.Type.Attribute = ATTR_SIMPLE;
2171                        c->Request.Type.Direction = XFER_READ;
2172                        c->Request.Timeout = 0;
2173                        c->Request.CDB[0] = CISS_INQUIRY;
2174                        c->Request.CDB[4] = size & 0xFF;
2175                        break;
2176                case CISS_REPORT_LOG:
2177                case CISS_REPORT_PHYS:
2178                        /* Talking to controller so It's a physical command
2179                           mode = 00 target = 0.  Nothing to write.
2180                         */
2181                        c->Request.CDBLen = 12;
2182                        c->Request.Type.Attribute = ATTR_SIMPLE;
2183                        c->Request.Type.Direction = XFER_READ;
2184                        c->Request.Timeout = 0;
2185                        c->Request.CDB[0] = cmd;
2186                        c->Request.CDB[6] = (size >> 24) & 0xFF;        //MSB
2187                        c->Request.CDB[7] = (size >> 16) & 0xFF;
2188                        c->Request.CDB[8] = (size >> 8) & 0xFF;
2189                        c->Request.CDB[9] = size & 0xFF;
2190                        break;
2191
2192                case CCISS_READ_CAPACITY:
2193                        c->Request.CDBLen = 10;
2194                        c->Request.Type.Attribute = ATTR_SIMPLE;
2195                        c->Request.Type.Direction = XFER_READ;
2196                        c->Request.Timeout = 0;
2197                        c->Request.CDB[0] = cmd;
2198                        break;
2199                case CCISS_READ_CAPACITY_16:
2200                        c->Request.CDBLen = 16;
2201                        c->Request.Type.Attribute = ATTR_SIMPLE;
2202                        c->Request.Type.Direction = XFER_READ;
2203                        c->Request.Timeout = 0;
2204                        c->Request.CDB[0] = cmd;
2205                        c->Request.CDB[1] = 0x10;
2206                        c->Request.CDB[10] = (size >> 24) & 0xFF;
2207                        c->Request.CDB[11] = (size >> 16) & 0xFF;
2208                        c->Request.CDB[12] = (size >> 8) & 0xFF;
2209                        c->Request.CDB[13] = size & 0xFF;
2210                        c->Request.Timeout = 0;
2211                        c->Request.CDB[0] = cmd;
2212                        break;
2213                case CCISS_CACHE_FLUSH:
2214                        c->Request.CDBLen = 12;
2215                        c->Request.Type.Attribute = ATTR_SIMPLE;
2216                        c->Request.Type.Direction = XFER_WRITE;
2217                        c->Request.Timeout = 0;
2218                        c->Request.CDB[0] = BMIC_WRITE;
2219                        c->Request.CDB[6] = BMIC_CACHE_FLUSH;
2220                        break;
2221                case TEST_UNIT_READY:
2222                        c->Request.CDBLen = 6;
2223                        c->Request.Type.Attribute = ATTR_SIMPLE;
2224                        c->Request.Type.Direction = XFER_NONE;
2225                        c->Request.Timeout = 0;
2226                        break;
2227                default:
2228                        printk(KERN_WARNING
2229                               "cciss%d:  Unknown Command 0x%c\n", ctlr, cmd);
2230                        return IO_ERROR;
2231                }
2232        } else if (cmd_type == TYPE_MSG) {
2233                switch (cmd) {
2234                case 0: /* ABORT message */
2235                        c->Request.CDBLen = 12;
2236                        c->Request.Type.Attribute = ATTR_SIMPLE;
2237                        c->Request.Type.Direction = XFER_WRITE;
2238                        c->Request.Timeout = 0;
2239                        c->Request.CDB[0] = cmd;        /* abort */
2240                        c->Request.CDB[1] = 0;  /* abort a command */
2241                        /* buff contains the tag of the command to abort */
2242                        memcpy(&c->Request.CDB[4], buff, 8);
2243                        break;
2244                case 1: /* RESET message */
2245                        c->Request.CDBLen = 16;
2246                        c->Request.Type.Attribute = ATTR_SIMPLE;
2247                        c->Request.Type.Direction = XFER_NONE;
2248                        c->Request.Timeout = 0;
2249                        memset(&c->Request.CDB[0], 0, sizeof(c->Request.CDB));
2250                        c->Request.CDB[0] = cmd;        /* reset */
2251                        c->Request.CDB[1] = 0x03;       /* reset a target */
2252                        break;
2253                case 3: /* No-Op message */
2254                        c->Request.CDBLen = 1;
2255                        c->Request.Type.Attribute = ATTR_SIMPLE;
2256                        c->Request.Type.Direction = XFER_WRITE;
2257                        c->Request.Timeout = 0;
2258                        c->Request.CDB[0] = cmd;
2259                        break;
2260                default:
2261                        printk(KERN_WARNING
2262                               "cciss%d: unknown message type %d\n", ctlr, cmd);
2263                        return IO_ERROR;
2264                }
2265        } else {
2266                printk(KERN_WARNING
2267                       "cciss%d: unknown command type %d\n", ctlr, cmd_type);
2268                return IO_ERROR;
2269        }
2270        /* Fill in the scatter gather information */
2271        if (size > 0) {
2272                buff_dma_handle.val = (__u64) pci_map_single(h->pdev,
2273                                                             buff, size,
2274                                                             PCI_DMA_BIDIRECTIONAL);
2275                c->SG[0].Addr.lower = buff_dma_handle.val32.lower;
2276                c->SG[0].Addr.upper = buff_dma_handle.val32.upper;
2277                c->SG[0].Len = size;
2278                c->SG[0].Ext = 0;       /* we are not chaining */
2279        }
2280        return status;
2281}
2282
2283static int check_target_status(ctlr_info_t *h, CommandList_struct *c)
2284{
2285        switch (c->err_info->ScsiStatus) {
2286        case SAM_STAT_GOOD:
2287                return IO_OK;
2288        case SAM_STAT_CHECK_CONDITION:
2289                switch (0xf & c->err_info->SenseInfo[2]) {
2290                case 0: return IO_OK; /* no sense */
2291                case 1: return IO_OK; /* recovered error */
2292                default:
2293                        printk(KERN_WARNING "cciss%d: cmd 0x%02x "
2294                                "check condition, sense key = 0x%02x\n",
2295                                h->ctlr, c->Request.CDB[0],
2296                                c->err_info->SenseInfo[2]);
2297                }
2298                break;
2299        default:
2300                printk(KERN_WARNING "cciss%d: cmd 0x%02x"
2301                        "scsi status = 0x%02x\n", h->ctlr,
2302                        c->Request.CDB[0], c->err_info->ScsiStatus);
2303                break;
2304        }
2305        return IO_ERROR;
2306}
2307
2308static int process_sendcmd_error(ctlr_info_t *h, CommandList_struct *c)
2309{
2310        int return_status = IO_OK;
2311
2312        if (c->err_info->CommandStatus == CMD_SUCCESS)
2313                return IO_OK;
2314
2315        switch (c->err_info->CommandStatus) {
2316        case CMD_TARGET_STATUS:
2317                return_status = check_target_status(h, c);
2318                break;
2319        case CMD_DATA_UNDERRUN:
2320        case CMD_DATA_OVERRUN:
2321                /* expected for inquiry and report lun commands */
2322                break;
2323        case CMD_INVALID:
2324                printk(KERN_WARNING "cciss: cmd 0x%02x is "
2325                       "reported invalid\n", c->Request.CDB[0]);
2326                return_status = IO_ERROR;
2327                break;
2328        case CMD_PROTOCOL_ERR:
2329                printk(KERN_WARNING "cciss: cmd 0x%02x has "
2330                       "protocol error \n", c->Request.CDB[0]);
2331                return_status = IO_ERROR;
2332                break;
2333        case CMD_HARDWARE_ERR:
2334                printk(KERN_WARNING "cciss: cmd 0x%02x had "
2335                       " hardware error\n", c->Request.CDB[0]);
2336                return_status = IO_ERROR;
2337                break;
2338        case CMD_CONNECTION_LOST:
2339                printk(KERN_WARNING "cciss: cmd 0x%02x had "
2340                       "connection lost\n", c->Request.CDB[0]);
2341                return_status = IO_ERROR;
2342                break;
2343        case CMD_ABORTED:
2344                printk(KERN_WARNING "cciss: cmd 0x%02x was "
2345                       "aborted\n", c->Request.CDB[0]);
2346                return_status = IO_ERROR;
2347                break;
2348        case CMD_ABORT_FAILED:
2349                printk(KERN_WARNING "cciss: cmd 0x%02x reports "
2350                       "abort failed\n", c->Request.CDB[0]);
2351                return_status = IO_ERROR;
2352                break;
2353        case CMD_UNSOLICITED_ABORT:
2354                printk(KERN_WARNING
2355                       "cciss%d: unsolicited abort 0x%02x\n", h->ctlr,
2356                        c->Request.CDB[0]);
2357                return_status = IO_NEEDS_RETRY;
2358                break;
2359        default:
2360                printk(KERN_WARNING "cciss: cmd 0x%02x returned "
2361                       "unknown status %x\n", c->Request.CDB[0],
2362                       c->err_info->CommandStatus);
2363                return_status = IO_ERROR;
2364        }
2365        return return_status;
2366}
2367
2368static int sendcmd_withirq_core(ctlr_info_t *h, CommandList_struct *c,
2369        int attempt_retry)
2370{
2371        DECLARE_COMPLETION_ONSTACK(wait);
2372        u64bit buff_dma_handle;
2373        unsigned long flags;
2374        int return_status = IO_OK;
2375
2376resend_cmd2:
2377        c->waiting = &wait;
2378        /* Put the request on the tail of the queue and send it */
2379        spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
2380        addQ(&h->reqQ, c);
2381        h->Qdepth++;
2382        start_io(h);
2383        spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
2384
2385        wait_for_completion(&wait);
2386
2387        if (c->err_info->CommandStatus == 0 || !attempt_retry)
2388                goto command_done;
2389
2390        return_status = process_sendcmd_error(h, c);
2391
2392        if (return_status == IO_NEEDS_RETRY &&
2393                c->retry_count < MAX_CMD_RETRIES) {
2394                printk(KERN_WARNING "cciss%d: retrying 0x%02x\n", h->ctlr,
2395                        c->Request.CDB[0]);
2396                c->retry_count++;
2397                /* erase the old error information */
2398                memset(c->err_info, 0, sizeof(ErrorInfo_struct));
2399                return_status = IO_OK;
2400                INIT_COMPLETION(wait);
2401                goto resend_cmd2;
2402        }
2403
2404command_done:
2405        /* unlock the buffers from DMA */
2406        buff_dma_handle.val32.lower = c->SG[0].Addr.lower;
2407        buff_dma_handle.val32.upper = c->SG[0].Addr.upper;
2408        pci_unmap_single(h->pdev, (dma_addr_t) buff_dma_handle.val,
2409                         c->SG[0].Len, PCI_DMA_BIDIRECTIONAL);
2410        return return_status;
2411}
2412
2413static int sendcmd_withirq(__u8 cmd, int ctlr, void *buff, size_t size,
2414                           __u8 page_code, unsigned char scsi3addr[],
2415                        int cmd_type)
2416{
2417        ctlr_info_t *h = hba[ctlr];
2418        CommandList_struct *c;
2419        int return_status;
2420
2421        c = cmd_alloc(h, 0);
2422        if (!c)
2423                return -ENOMEM;
2424        return_status = fill_cmd(c, cmd, ctlr, buff, size, page_code,
2425                scsi3addr, cmd_type);
2426        if (return_status == IO_OK)
2427                return_status = sendcmd_withirq_core(h, c, 1);
2428
2429        cmd_free(h, c, 0);
2430        return return_status;
2431}
2432
2433static void cciss_geometry_inquiry(int ctlr, int logvol,
2434                                   int withirq, sector_t total_size,
2435                                   unsigned int block_size,
2436                                   InquiryData_struct *inq_buff,
2437                                   drive_info_struct *drv)
2438{
2439        int return_code;
2440        unsigned long t;
2441        unsigned char scsi3addr[8];
2442
2443        memset(inq_buff, 0, sizeof(InquiryData_struct));
2444        log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
2445        if (withirq)
2446                return_code = sendcmd_withirq(CISS_INQUIRY, ctlr,
2447                                              inq_buff, sizeof(*inq_buff),
2448                                              0xC1, scsi3addr, TYPE_CMD);
2449        else
2450                return_code = sendcmd(CISS_INQUIRY, ctlr, inq_buff,
2451                                      sizeof(*inq_buff), 0xC1, scsi3addr,
2452                                      TYPE_CMD);
2453        if (return_code == IO_OK) {
2454                if (inq_buff->data_byte[8] == 0xFF) {
2455                        printk(KERN_WARNING
2456                               "cciss: reading geometry failed, volume "
2457                               "does not support reading geometry\n");
2458                        drv->heads = 255;
2459                        drv->sectors = 32;      // Sectors per track
2460                        drv->cylinders = total_size + 1;
2461                        drv->raid_level = RAID_UNKNOWN;
2462                } else {
2463                        drv->heads = inq_buff->data_byte[6];
2464                        drv->sectors = inq_buff->data_byte[7];
2465                        drv->cylinders = (inq_buff->data_byte[4] & 0xff) << 8;
2466                        drv->cylinders += inq_buff->data_byte[5];
2467                        drv->raid_level = inq_buff->data_byte[8];
2468                }
2469                drv->block_size = block_size;
2470                drv->nr_blocks = total_size + 1;
2471                t = drv->heads * drv->sectors;
2472                if (t > 1) {
2473                        sector_t real_size = total_size + 1;
2474                        unsigned long rem = sector_div(real_size, t);
2475                        if (rem)
2476                                real_size++;
2477                        drv->cylinders = real_size;
2478                }
2479        } else {                /* Get geometry failed */
2480                printk(KERN_WARNING "cciss: reading geometry failed\n");
2481        }
2482        printk(KERN_INFO "      heads=%d, sectors=%d, cylinders=%d\n\n",
2483               drv->heads, drv->sectors, drv->cylinders);
2484}
2485
2486static void
2487cciss_read_capacity(int ctlr, int logvol, int withirq, sector_t *total_size,
2488                    unsigned int *block_size)
2489{
2490        ReadCapdata_struct *buf;
2491        int return_code;
2492        unsigned char scsi3addr[8];
2493
2494        buf = kzalloc(sizeof(ReadCapdata_struct), GFP_KERNEL);
2495        if (!buf) {
2496                printk(KERN_WARNING "cciss: out of memory\n");
2497                return;
2498        }
2499
2500        log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
2501        if (withirq)
2502                return_code = sendcmd_withirq(CCISS_READ_CAPACITY,
2503                                ctlr, buf, sizeof(ReadCapdata_struct),
2504                                        0, scsi3addr, TYPE_CMD);
2505        else
2506                return_code = sendcmd(CCISS_READ_CAPACITY,
2507                                ctlr, buf, sizeof(ReadCapdata_struct),
2508                                        0, scsi3addr, TYPE_CMD);
2509        if (return_code == IO_OK) {
2510                *total_size = be32_to_cpu(*(__be32 *) buf->total_size);
2511                *block_size = be32_to_cpu(*(__be32 *) buf->block_size);
2512        } else {                /* read capacity command failed */
2513                printk(KERN_WARNING "cciss: read capacity failed\n");
2514                *total_size = 0;
2515                *block_size = BLOCK_SIZE;
2516        }
2517        if (*total_size != 0)
2518                printk(KERN_INFO "      blocks= %llu block_size= %d\n",
2519                (unsigned long long)*total_size+1, *block_size);
2520        kfree(buf);
2521}
2522
2523static void
2524cciss_read_capacity_16(int ctlr, int logvol, int withirq, sector_t *total_size,                                 unsigned int *block_size)
2525{
2526        ReadCapdata_struct_16 *buf;
2527        int return_code;
2528        unsigned char scsi3addr[8];
2529
2530        buf = kzalloc(sizeof(ReadCapdata_struct_16), GFP_KERNEL);
2531        if (!buf) {
2532                printk(KERN_WARNING "cciss: out of memory\n");
2533                return;
2534        }
2535
2536        log_unit_to_scsi3addr(hba[ctlr], scsi3addr, logvol);
2537        if (withirq) {
2538                return_code = sendcmd_withirq(CCISS_READ_CAPACITY_16,
2539                        ctlr, buf, sizeof(ReadCapdata_struct_16),
2540                                0, scsi3addr, TYPE_CMD);
2541        }
2542        else {
2543                return_code = sendcmd(CCISS_READ_CAPACITY_16,
2544                        ctlr, buf, sizeof(ReadCapdata_struct_16),
2545                                0, scsi3addr, TYPE_CMD);
2546        }
2547        if (return_code == IO_OK) {
2548                *total_size = be64_to_cpu(*(__be64 *) buf->total_size);
2549                *block_size = be32_to_cpu(*(__be32 *) buf->block_size);
2550        } else {                /* read capacity command failed */
2551                printk(KERN_WARNING "cciss: read capacity failed\n");
2552                *total_size = 0;
2553                *block_size = BLOCK_SIZE;
2554        }
2555        printk(KERN_INFO "      blocks= %llu block_size= %d\n",
2556               (unsigned long long)*total_size+1, *block_size);
2557        kfree(buf);
2558}
2559
2560static int cciss_revalidate(struct gendisk *disk)
2561{
2562        ctlr_info_t *h = get_host(disk);
2563        drive_info_struct *drv = get_drv(disk);
2564        int logvol;
2565        int FOUND = 0;
2566        unsigned int block_size;
2567        sector_t total_size;
2568        InquiryData_struct *inq_buff = NULL;
2569
2570        for (logvol = 0; logvol < CISS_MAX_LUN; logvol++) {
2571                if (h->drv[logvol].LunID == drv->LunID) {
2572                        FOUND = 1;
2573                        break;
2574                }
2575        }
2576
2577        if (!FOUND)
2578                return 1;
2579
2580        inq_buff = kmalloc(sizeof(InquiryData_struct), GFP_KERNEL);
2581        if (inq_buff == NULL) {
2582                printk(KERN_WARNING "cciss: out of memory\n");
2583                return 1;
2584        }
2585        if (h->cciss_read == CCISS_READ_10) {
2586                cciss_read_capacity(h->ctlr, logvol, 1,
2587                                        &total_size, &block_size);
2588        } else {
2589                cciss_read_capacity_16(h->ctlr, logvol, 1,
2590                                        &total_size, &block_size);
2591        }
2592        cciss_geometry_inquiry(h->ctlr, logvol, 1, total_size, block_size,
2593                               inq_buff, drv);
2594
2595        blk_queue_logical_block_size(drv->queue, drv->block_size);
2596        set_capacity(disk, drv->nr_blocks);
2597
2598        kfree(inq_buff);
2599        return 0;
2600}
2601
2602/*
2603 *   Wait polling for a command to complete.
2604 *   The memory mapped FIFO is polled for the completion.
2605 *   Used only at init time, interrupts from the HBA are disabled.
2606 */
2607static unsigned long pollcomplete(int ctlr)
2608{
2609        unsigned long done;
2610        int i;
2611
2612        /* Wait (up to 20 seconds) for a command to complete */
2613
2614        for (i = 20 * HZ; i > 0; i--) {
2615                done = hba[ctlr]->access.command_completed(hba[ctlr]);
2616                if (done == FIFO_EMPTY)
2617                        schedule_timeout_uninterruptible(1);
2618                else
2619                        return done;
2620        }
2621        /* Invalid address to tell caller we ran out of time */
2622        return 1;
2623}
2624
2625/* Send command c to controller h and poll for it to complete.
2626 * Turns interrupts off on the board.  Used at driver init time
2627 * and during SCSI error recovery.
2628 */
2629static int sendcmd_core(ctlr_info_t *h, CommandList_struct *c)
2630{
2631        int i;
2632        unsigned long complete;
2633        int status = IO_ERROR;
2634        u64bit buff_dma_handle;
2635
2636resend_cmd1:
2637
2638        /* Disable interrupt on the board. */
2639        h->access.set_intr_mask(h, CCISS_INTR_OFF);
2640
2641        /* Make sure there is room in the command FIFO */
2642        /* Actually it should be completely empty at this time */
2643        /* unless we are in here doing error handling for the scsi */
2644        /* tape side of the driver. */
2645        for (i = 200000; i > 0; i--) {
2646                /* if fifo isn't full go */
2647                if (!(h->access.fifo_full(h)))
2648                        break;
2649                udelay(10);
2650                printk(KERN_WARNING "cciss cciss%d: SendCmd FIFO full,"
2651                       " waiting!\n", h->ctlr);
2652        }
2653        h->access.submit_command(h, c); /* Send the cmd */
2654        do {
2655                complete = pollcomplete(h->ctlr);
2656
2657#ifdef CCISS_DEBUG
2658                printk(KERN_DEBUG "cciss: command completed\n");
2659#endif                          /* CCISS_DEBUG */
2660
2661                if (complete == 1) {
2662                        printk(KERN_WARNING
2663                               "cciss cciss%d: SendCmd Timeout out, "
2664                               "No command list address returned!\n", h->ctlr);
2665                        status = IO_ERROR;
2666                        break;
2667                }
2668
2669                /* Make sure it's the command we're expecting. */
2670                if ((complete & ~CISS_ERROR_BIT) != c->busaddr) {
2671                        printk(KERN_WARNING "cciss%d: Unexpected command "
2672                                "completion.\n", h->ctlr);
2673                        continue;
2674                }
2675
2676                /* It is our command.  If no error, we're done. */
2677                if (!(complete & CISS_ERROR_BIT)) {
2678                        status = IO_OK;
2679                        break;
2680                }
2681
2682                /* There is an error... */
2683
2684                /* if data overrun or underun on Report command ignore it */
2685                if (((c->Request.CDB[0] == CISS_REPORT_LOG) ||
2686                     (c->Request.CDB[0] == CISS_REPORT_PHYS) ||
2687                     (c->Request.CDB[0] == CISS_INQUIRY)) &&
2688                        ((c->err_info->CommandStatus == CMD_DATA_OVERRUN) ||
2689                         (c->err_info->CommandStatus == CMD_DATA_UNDERRUN))) {
2690                        complete = c->busaddr;
2691                        status = IO_OK;
2692                        break;
2693                }
2694
2695                if (c->err_info->CommandStatus == CMD_UNSOLICITED_ABORT) {
2696                        printk(KERN_WARNING "cciss%d: unsolicited abort %p\n",
2697                                h->ctlr, c);
2698                        if (c->retry_count < MAX_CMD_RETRIES) {
2699                                printk(KERN_WARNING "cciss%d: retrying %p\n",
2700                                   h->ctlr, c);
2701                                c->retry_count++;
2702                                /* erase the old error information */
2703                                memset(c->err_info, 0, sizeof(c->err_info));
2704                                goto resend_cmd1;
2705                        }
2706                        printk(KERN_WARNING "cciss%d: retried %p too many "
2707                                "times\n", h->ctlr, c);
2708                        status = IO_ERROR;
2709                        break;
2710                }
2711
2712                if (c->err_info->CommandStatus == CMD_UNABORTABLE) {
2713                        printk(KERN_WARNING "cciss%d: command could not be "
2714                                "aborted.\n", h->ctlr);
2715                        status = IO_ERROR;
2716                        break;
2717                }
2718
2719                if (c->err_info->CommandStatus == CMD_TARGET_STATUS) {
2720                        status = check_target_status(h, c);
2721                        break;
2722                }
2723
2724                printk(KERN_WARNING "cciss%d: sendcmd error\n", h->ctlr);
2725                printk(KERN_WARNING "cmd = 0x%02x, CommandStatus = 0x%02x\n",
2726                        c->Request.CDB[0], c->err_info->CommandStatus);
2727                status = IO_ERROR;
2728                break;
2729
2730        } while (1);
2731
2732        /* unlock the data buffer from DMA */
2733        buff_dma_handle.val32.lower = c->SG[0].Addr.lower;
2734        buff_dma_handle.val32.upper = c->SG[0].Addr.upper;
2735        pci_unmap_single(h->pdev, (dma_addr_t) buff_dma_handle.val,
2736                         c->SG[0].Len, PCI_DMA_BIDIRECTIONAL);
2737        return status;
2738}
2739
2740/*
2741 * Send a command to the controller, and wait for it to complete.
2742 * Used at init time, and during SCSI error recovery.
2743 */
2744static int sendcmd(__u8 cmd, int ctlr, void *buff, size_t size,
2745        __u8 page_code, unsigned char *scsi3addr, int cmd_type)
2746{
2747        CommandList_struct *c;
2748        int status;
2749
2750        c = cmd_alloc(hba[ctlr], 1);
2751        if (!c) {
2752                printk(KERN_WARNING "cciss: unable to get memory");
2753                return IO_ERROR;
2754        }
2755        status = fill_cmd(c, cmd, ctlr, buff, size, page_code,
2756                scsi3addr, cmd_type);
2757        if (status == IO_OK)
2758                status = sendcmd_core(hba[ctlr], c);
2759        cmd_free(hba[ctlr], c, 1);
2760        return status;
2761}
2762
2763/*
2764 * Map (physical) PCI mem into (virtual) kernel space
2765 */
2766static void __iomem *remap_pci_mem(ulong base, ulong size)
2767{
2768        ulong page_base = ((ulong) base) & PAGE_MASK;
2769        ulong page_offs = ((ulong) base) - page_base;
2770        void __iomem *page_remapped = ioremap(page_base, page_offs + size);
2771
2772        return page_remapped ? (page_remapped + page_offs) : NULL;
2773}
2774
2775/*
2776 * Takes jobs of the Q and sends them to the hardware, then puts it on
2777 * the Q to wait for completion.
2778 */
2779static void start_io(ctlr_info_t *h)
2780{
2781        CommandList_struct *c;
2782
2783        while (!hlist_empty(&h->reqQ)) {
2784                c = hlist_entry(h->reqQ.first, CommandList_struct, list);
2785                /* can't do anything if fifo is full */
2786                if ((h->access.fifo_full(h))) {
2787                        printk(KERN_WARNING "cciss: fifo full\n");
2788                        break;
2789                }
2790
2791                /* Get the first entry from the Request Q */
2792                removeQ(c);
2793                h->Qdepth--;
2794
2795                /* Tell the controller execute command */
2796                h->access.submit_command(h, c);
2797
2798                /* Put job onto the completed Q */
2799                addQ(&h->cmpQ, c);
2800        }
2801}
2802
2803/* Assumes that CCISS_LOCK(h->ctlr) is held. */
2804/* Zeros out the error record and then resends the command back */
2805/* to the controller */
2806static inline void resend_cciss_cmd(ctlr_info_t *h, CommandList_struct *c)
2807{
2808        /* erase the old error information */
2809        memset(c->err_info, 0, sizeof(ErrorInfo_struct));
2810
2811        /* add it to software queue and then send it to the controller */
2812        addQ(&h->reqQ, c);
2813        h->Qdepth++;
2814        if (h->Qdepth > h->maxQsinceinit)
2815                h->maxQsinceinit = h->Qdepth;
2816
2817        start_io(h);
2818}
2819
2820static inline unsigned int make_status_bytes(unsigned int scsi_status_byte,
2821        unsigned int msg_byte, unsigned int host_byte,
2822        unsigned int driver_byte)
2823{
2824        /* inverse of macros in scsi.h */
2825        return (scsi_status_byte & 0xff) |
2826                ((msg_byte & 0xff) << 8) |
2827                ((host_byte & 0xff) << 16) |
2828                ((driver_byte & 0xff) << 24);
2829}
2830
2831static inline int evaluate_target_status(ctlr_info_t *h,
2832                        CommandList_struct *cmd, int *retry_cmd)
2833{
2834        unsigned char sense_key;
2835        unsigned char status_byte, msg_byte, host_byte, driver_byte;
2836        int error_value;
2837
2838        *retry_cmd = 0;
2839        /* If we get in here, it means we got "target status", that is, scsi status */
2840        status_byte = cmd->err_info->ScsiStatus;
2841        driver_byte = DRIVER_OK;
2842        msg_byte = cmd->err_info->CommandStatus; /* correct?  seems too device specific */
2843
2844        if (blk_pc_request(cmd->rq))
2845                host_byte = DID_PASSTHROUGH;
2846        else
2847                host_byte = DID_OK;
2848
2849        error_value = make_status_bytes(status_byte, msg_byte,
2850                host_byte, driver_byte);
2851
2852        if (cmd->err_info->ScsiStatus != SAM_STAT_CHECK_CONDITION) {
2853                if (!blk_pc_request(cmd->rq))
2854                        printk(KERN_WARNING "cciss: cmd %p "
2855                               "has SCSI Status 0x%x\n",
2856                               cmd, cmd->err_info->ScsiStatus);
2857                return error_value;
2858        }
2859
2860        /* check the sense key */
2861        sense_key = 0xf & cmd->err_info->SenseInfo[2];
2862        /* no status or recovered error */
2863        if (((sense_key == 0x0) || (sense_key == 0x1)) && !blk_pc_request(cmd->rq))
2864                error_value = 0;
2865
2866        if (check_for_unit_attention(h, cmd)) {
2867                *retry_cmd = !blk_pc_request(cmd->rq);
2868                return 0;
2869        }
2870
2871        if (!blk_pc_request(cmd->rq)) { /* Not SG_IO or similar? */
2872                if (error_value != 0)
2873                        printk(KERN_WARNING "cciss: cmd %p has CHECK CONDITION"
2874                               " sense key = 0x%x\n", cmd, sense_key);
2875                return error_value;
2876        }
2877
2878        /* SG_IO or similar, copy sense data back */
2879        if (cmd->rq->sense) {
2880                if (cmd->rq->sense_len > cmd->err_info->SenseLen)
2881                        cmd->rq->sense_len = cmd->err_info->SenseLen;
2882                memcpy(cmd->rq->sense, cmd->err_info->SenseInfo,
2883                        cmd->rq->sense_len);
2884        } else
2885                cmd->rq->sense_len = 0;
2886
2887        return error_value;
2888}
2889
2890/* checks the status of the job and calls complete buffers to mark all
2891 * buffers for the completed job. Note that this function does not need
2892 * to hold the hba/queue lock.
2893 */
2894static inline void complete_command(ctlr_info_t *h, CommandList_struct *cmd,
2895                                    int timeout)
2896{
2897        int retry_cmd = 0;
2898        struct request *rq = cmd->rq;
2899
2900        rq->errors = 0;
2901
2902        if (timeout)
2903                rq->errors = make_status_bytes(0, 0, 0, DRIVER_TIMEOUT);
2904
2905        if (cmd->err_info->CommandStatus == 0)  /* no error has occurred */
2906                goto after_error_processing;
2907
2908        switch (cmd->err_info->CommandStatus) {
2909        case CMD_TARGET_STATUS:
2910                rq->errors = evaluate_target_status(h, cmd, &retry_cmd);
2911                break;
2912        case CMD_DATA_UNDERRUN:
2913                if (blk_fs_request(cmd->rq)) {
2914                        printk(KERN_WARNING "cciss: cmd %p has"
2915                               " completed with data underrun "
2916                               "reported\n", cmd);
2917                        cmd->rq->resid_len = cmd->err_info->ResidualCnt;
2918                }
2919                break;
2920        case CMD_DATA_OVERRUN:
2921                if (blk_fs_request(cmd->rq))
2922                        printk(KERN_WARNING "cciss: cmd %p has"
2923                               " completed with data overrun "
2924                               "reported\n", cmd);
2925                break;
2926        case CMD_INVALID:
2927                printk(KERN_WARNING "cciss: cmd %p is "
2928                       "reported invalid\n", cmd);
2929                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2930                        cmd->err_info->CommandStatus, DRIVER_OK,
2931                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2932                break;
2933        case CMD_PROTOCOL_ERR:
2934                printk(KERN_WARNING "cciss: cmd %p has "
2935                       "protocol error \n", cmd);
2936                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2937                        cmd->err_info->CommandStatus, DRIVER_OK,
2938                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2939                break;
2940        case CMD_HARDWARE_ERR:
2941                printk(KERN_WARNING "cciss: cmd %p had "
2942                       " hardware error\n", cmd);
2943                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2944                        cmd->err_info->CommandStatus, DRIVER_OK,
2945                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2946                break;
2947        case CMD_CONNECTION_LOST:
2948                printk(KERN_WARNING "cciss: cmd %p had "
2949                       "connection lost\n", cmd);
2950                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2951                        cmd->err_info->CommandStatus, DRIVER_OK,
2952                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2953                break;
2954        case CMD_ABORTED:
2955                printk(KERN_WARNING "cciss: cmd %p was "
2956                       "aborted\n", cmd);
2957                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2958                        cmd->err_info->CommandStatus, DRIVER_OK,
2959                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ABORT);
2960                break;
2961        case CMD_ABORT_FAILED:
2962                printk(KERN_WARNING "cciss: cmd %p reports "
2963                       "abort failed\n", cmd);
2964                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2965                        cmd->err_info->CommandStatus, DRIVER_OK,
2966                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2967                break;
2968        case CMD_UNSOLICITED_ABORT:
2969                printk(KERN_WARNING "cciss%d: unsolicited "
2970                       "abort %p\n", h->ctlr, cmd);
2971                if (cmd->retry_count < MAX_CMD_RETRIES) {
2972                        retry_cmd = 1;
2973                        printk(KERN_WARNING
2974                               "cciss%d: retrying %p\n", h->ctlr, cmd);
2975                        cmd->retry_count++;
2976                } else
2977                        printk(KERN_WARNING
2978                               "cciss%d: %p retried too "
2979                               "many times\n", h->ctlr, cmd);
2980                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2981                        cmd->err_info->CommandStatus, DRIVER_OK,
2982                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ABORT);
2983                break;
2984        case CMD_TIMEOUT:
2985                printk(KERN_WARNING "cciss: cmd %p timedout\n", cmd);
2986                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2987                        cmd->err_info->CommandStatus, DRIVER_OK,
2988                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2989                break;
2990        default:
2991                printk(KERN_WARNING "cciss: cmd %p returned "
2992                       "unknown status %x\n", cmd,
2993                       cmd->err_info->CommandStatus);
2994                rq->errors = make_status_bytes(SAM_STAT_GOOD,
2995                        cmd->err_info->CommandStatus, DRIVER_OK,
2996                        blk_pc_request(cmd->rq) ? DID_PASSTHROUGH : DID_ERROR);
2997        }
2998
2999after_error_processing:
3000
3001        /* We need to return this command */
3002        if (retry_cmd) {
3003                resend_cciss_cmd(h, cmd);
3004                return;
3005        }
3006        cmd->rq->completion_data = cmd;
3007        blk_complete_request(cmd->rq);
3008}
3009
3010/*
3011 * Get a request and submit it to the controller.
3012 */
3013static void do_cciss_request(struct request_queue *q)
3014{
3015        ctlr_info_t *h = q->queuedata;
3016        CommandList_struct *c;
3017        sector_t start_blk;
3018        int seg;
3019        struct request *creq;
3020        u64bit temp64;
3021        struct scatterlist tmp_sg[MAXSGENTRIES];
3022        drive_info_struct *drv;
3023        int i, dir;
3024
3025        /* We call start_io here in case there is a command waiting on the
3026         * queue that has not been sent.
3027         */
3028        if (blk_queue_plugged(q))
3029                goto startio;
3030
3031      queue:
3032        creq = blk_peek_request(q);
3033        if (!creq)
3034                goto startio;
3035
3036        BUG_ON(creq->nr_phys_segments > MAXSGENTRIES);
3037
3038        if ((c = cmd_alloc(h, 1)) == NULL)
3039                goto full;
3040
3041        blk_start_request(creq);
3042
3043        spin_unlock_irq(q->queue_lock);
3044
3045        c->cmd_type = CMD_RWREQ;
3046        c->rq = creq;
3047
3048        /* fill in the request */
3049        drv = creq->rq_disk->private_data;
3050        c->Header.ReplyQueue = 0;       // unused in simple mode
3051        /* got command from pool, so use the command block index instead */
3052        /* for direct lookups. */
3053        /* The first 2 bits are reserved for controller error reporting. */
3054        c->Header.Tag.lower = (c->cmdindex << 3);
3055        c->Header.Tag.lower |= 0x04;    /* flag for direct lookup. */
3056        c->Header.LUN.LogDev.VolId = drv->LunID;
3057        c->Header.LUN.LogDev.Mode = 1;
3058        c->Request.CDBLen = 10; // 12 byte commands not in FW yet;
3059        c->Request.Type.Type = TYPE_CMD;        // It is a command.
3060        c->Request.Type.Attribute = ATTR_SIMPLE;
3061        c->Request.Type.Direction =
3062            (rq_data_dir(creq) == READ) ? XFER_READ : XFER_WRITE;
3063        c->Request.Timeout = 0; // Don't time out
3064        c->Request.CDB[0] =
3065            (rq_data_dir(creq) == READ) ? h->cciss_read : h->cciss_write;
3066        start_blk = blk_rq_pos(creq);
3067#ifdef CCISS_DEBUG
3068        printk(KERN_DEBUG "ciss: sector =%d nr_sectors=%d\n",
3069               (int)blk_rq_pos(creq), (int)blk_rq_sectors(creq));
3070#endif                          /* CCISS_DEBUG */
3071
3072        sg_init_table(tmp_sg, MAXSGENTRIES);
3073        seg = blk_rq_map_sg(q, creq, tmp_sg);
3074
3075        /* get the DMA records for the setup */
3076        if (c->Request.Type.Direction == XFER_READ)
3077                dir = PCI_DMA_FROMDEVICE;
3078        else
3079                dir = PCI_DMA_TODEVICE;
3080
3081        for (i = 0; i < seg; i++) {
3082                c->SG[i].Len = tmp_sg[i].length;
3083                temp64.val = (__u64) pci_map_page(h->pdev, sg_page(&tmp_sg[i]),
3084                                                  tmp_sg[i].offset,
3085                                                  tmp_sg[i].length, dir);
3086                c->SG[i].Addr.lower = temp64.val32.lower;
3087                c->SG[i].Addr.upper = temp64.val32.upper;
3088                c->SG[i].Ext = 0;       // we are not chaining
3089        }
3090        /* track how many SG entries we are using */
3091        if (seg > h->maxSG)
3092                h->maxSG = seg;
3093
3094#ifdef CCISS_DEBUG
3095        printk(KERN_DEBUG "cciss: Submitting %u sectors in %d segments\n",
3096               blk_rq_sectors(creq), seg);
3097#endif                          /* CCISS_DEBUG */
3098
3099        c->Header.SGList = c->Header.SGTotal = seg;
3100        if (likely(blk_fs_request(creq))) {
3101                if(h->cciss_read == CCISS_READ_10) {
3102                        c->Request.CDB[1] = 0;
3103                        c->Request.CDB[2] = (start_blk >> 24) & 0xff;   //MSB
3104                        c->Request.CDB[3] = (start_blk >> 16) & 0xff;
3105                        c->Request.CDB[4] = (start_blk >> 8) & 0xff;
3106                        c->Request.CDB[5] = start_blk & 0xff;
3107                        c->Request.CDB[6] = 0;  // (sect >> 24) & 0xff; MSB
3108                        c->Request.CDB[7] = (blk_rq_sectors(creq) >> 8) & 0xff;
3109                        c->Request.CDB[8] = blk_rq_sectors(creq) & 0xff;
3110                        c->Request.CDB[9] = c->Request.CDB[11] = c->Request.CDB[12] = 0;
3111                } else {
3112                        u32 upper32 = upper_32_bits(start_blk);
3113
3114                        c->Request.CDBLen = 16;
3115                        c->Request.CDB[1]= 0;
3116                        c->Request.CDB[2]= (upper32 >> 24) & 0xff;      //MSB
3117                        c->Request.CDB[3]= (upper32 >> 16) & 0xff;
3118                        c->Request.CDB[4]= (upper32 >>  8) & 0xff;
3119                        c->Request.CDB[5]= upper32 & 0xff;
3120                        c->Request.CDB[6]= (start_blk >> 24) & 0xff;
3121                        c->Request.CDB[7]= (start_blk >> 16) & 0xff;
3122                        c->Request.CDB[8]= (start_blk >>  8) & 0xff;
3123                        c->Request.CDB[9]= start_blk & 0xff;
3124                        c->Request.CDB[10]= (blk_rq_sectors(creq) >> 24) & 0xff;
3125                        c->Request.CDB[11]= (blk_rq_sectors(creq) >> 16) & 0xff;
3126                        c->Request.CDB[12]= (blk_rq_sectors(creq) >>  8) & 0xff;
3127                        c->Request.CDB[13]= blk_rq_sectors(creq) & 0xff;
3128                        c->Request.CDB[14] = c->Request.CDB[15] = 0;
3129                }
3130        } else if (blk_pc_request(creq)) {
3131                c->Request.CDBLen = creq->cmd_len;
3132                memcpy(c->Request.CDB, creq->cmd, BLK_MAX_CDB);
3133        } else {
3134                printk(KERN_WARNING "cciss%d: bad request type %d\n", h->ctlr, creq->cmd_type);
3135                BUG();
3136        }
3137
3138        spin_lock_irq(q->queue_lock);
3139
3140        addQ(&h->reqQ, c);
3141        h->Qdepth++;
3142        if (h->Qdepth > h->maxQsinceinit)
3143                h->maxQsinceinit = h->Qdepth;
3144
3145        goto queue;
3146full:
3147        blk_stop_queue(q);
3148startio:
3149        /* We will already have the driver lock here so not need
3150         * to lock it.
3151         */
3152        start_io(h);
3153}
3154
3155static inline unsigned long get_next_completion(ctlr_info_t *h)
3156{
3157        return h->access.command_completed(h);
3158}
3159
3160static inline int interrupt_pending(ctlr_info_t *h)
3161{
3162        return h->access.intr_pending(h);
3163}
3164
3165static inline long interrupt_not_for_us(ctlr_info_t *h)
3166{
3167        return (((h->access.intr_pending(h) == 0) ||
3168                 (h->interrupts_enabled == 0)));
3169}
3170
3171static irqreturn_t do_cciss_intr(int irq, void *dev_id)
3172{
3173        ctlr_info_t *h = dev_id;
3174        CommandList_struct *c;
3175        unsigned long flags;
3176        __u32 a, a1, a2;
3177
3178        if (interrupt_not_for_us(h))
3179                return IRQ_NONE;
3180        /*
3181         * If there are completed commands in the completion queue,
3182         * we had better do something about it.
3183         */
3184        spin_lock_irqsave(CCISS_LOCK(h->ctlr), flags);
3185        while (interrupt_pending(h)) {
3186                while ((a = get_next_completion(h)) != FIFO_EMPTY) {
3187                        a1 = a;
3188                        if ((a & 0x04)) {
3189                                a2 = (a >> 3);
3190                                if (a2 >= h->nr_cmds) {
3191                                        printk(KERN_WARNING
3192                                               "cciss: controller cciss%d failed, stopping.\n",
3193                                               h->ctlr);
3194                                        fail_all_cmds(h->ctlr);
3195                                        return IRQ_HANDLED;
3196                                }
3197
3198                                c = h->cmd_pool + a2;
3199                                a = c->busaddr;
3200
3201                        } else {
3202                                struct hlist_node *tmp;
3203
3204                                a &= ~3;
3205                                c = NULL;
3206                                hlist_for_each_entry(c, tmp, &h->cmpQ, list) {
3207                                        if (c->busaddr == a)
3208                                                break;
3209                                }
3210                        }
3211                        /*
3212                         * If we've found the command, take it off the
3213                         * completion Q and free it
3214                         */
3215                        if (c && c->busaddr == a) {
3216                                removeQ(c);
3217                                if (c->cmd_type == CMD_RWREQ) {
3218                                        complete_command(h, c, 0);
3219                                } else if (c->cmd_type == CMD_IOCTL_PEND) {
3220                                        complete(c->waiting);
3221                                }
3222#                               ifdef CONFIG_CISS_SCSI_TAPE
3223                                else if (c->cmd_type == CMD_SCSI)
3224                                        complete_scsi_command(c, 0, a1);
3225#                               endif
3226                                continue;
3227                        }
3228                }
3229        }
3230
3231        spin_unlock_irqrestore(CCISS_LOCK(h->ctlr), flags);
3232        return IRQ_HANDLED;
3233}
3234
3235static int scan_thread(void *data)
3236{
3237        ctlr_info_t *h = data;
3238        int rc;
3239        DECLARE_COMPLETION_ONSTACK(wait);
3240        h->rescan_wait = &wait;
3241
3242        for (;;) {
3243                rc = wait_for_completion_interruptible(&wait);
3244                if (kthread_should_stop())
3245                        break;
3246                if (!rc)
3247                        rebuild_lun_table(h, 0);
3248        }
3249        return 0;
3250}
3251
3252static int check_for_unit_attention(ctlr_info_t *h, CommandList_struct *c)
3253{
3254        if (c->err_info->SenseInfo[2] != UNIT_ATTENTION)
3255                return 0;
3256
3257        switch (c->err_info->SenseInfo[12]) {
3258        case STATE_CHANGED:
3259                printk(KERN_WARNING "cciss%d: a state change "
3260                        "detected, command retried\n", h->ctlr);
3261                return 1;
3262        break;
3263        case LUN_FAILED:
3264                printk(KERN_WARNING "cciss%d: LUN failure "
3265                        "detected, action required\n", h->ctlr);
3266                return 1;
3267        break;
3268        case REPORT_LUNS_CHANGED:
3269                printk(KERN_WARNING "cciss%d: report LUN data "
3270                        "changed\n", h->ctlr);
3271                if (h->rescan_wait)
3272                        complete(h->rescan_wait);
3273                return 1;
3274        break;
3275        case POWER_OR_RESET:
3276                printk(KERN_WARNING "cciss%d: a power on "
3277                        "or device reset detected\n", h->ctlr);
3278                return 1;
3279        break;
3280        case UNIT_ATTENTION_CLEARED:
3281                printk(KERN_WARNING "cciss%d: unit attention "
3282                    "cleared by another initiator\n", h->ctlr);
3283                return 1;
3284        break;
3285        default:
3286                printk(KERN_WARNING "cciss%d: unknown "
3287                        "unit attention detected\n", h->ctlr);
3288                                return 1;
3289        }
3290}
3291
3292/*
3293 *  We cannot read the structure directly, for portability we must use
3294 *   the io functions.
3295 *   This is for debug only.
3296 */
3297#ifdef CCISS_DEBUG
3298static void print_cfg_table(CfgTable_struct *tb)
3299{
3300        int i;
3301        char temp_name[17];
3302
3303        printk("Controller Configuration information\n");
3304        printk("------------------------------------\n");
3305        for (i = 0; i < 4; i++)
3306                temp_name[i] = readb(&(tb->Signature[i]));
3307        temp_name[4] = '\0';
3308        printk("   Signature = %s\n", temp_name);
3309        printk("   Spec Number = %d\n", readl(&(tb->SpecValence)));
3310        printk("   Transport methods supported = 0x%x\n",
3311               readl(&(tb->TransportSupport)));
3312        printk("   Transport methods active = 0x%x\n",
3313               readl(&(tb->TransportActive)));
3314        printk("   Requested transport Method = 0x%x\n",
3315               readl(&(tb->HostWrite.TransportRequest)));
3316        printk("   Coalesce Interrupt Delay = 0x%x\n",
3317               readl(&(tb->HostWrite.CoalIntDelay)));
3318        printk("   Coalesce Interrupt Count = 0x%x\n",
3319               readl(&(tb->HostWrite.CoalIntCount)));
3320        printk("   Max outstanding commands = 0x%d\n",
3321               readl(&(tb->CmdsOutMax)));
3322        printk("   Bus Types = 0x%x\n", readl(&(tb->BusTypes)));
3323        for (i = 0; i < 16; i++)
3324                temp_name[i] = readb(&(tb->ServerName[i]));
3325        temp_name[16] = '\0';
3326        printk("   Server Name = %s\n", temp_name);
3327        printk("   Heartbeat Counter = 0x%x\n\n\n", readl(&(tb->HeartBeat)));
3328}
3329#endif                          /* CCISS_DEBUG */
3330
3331static int find_PCI_BAR_index(struct pci_dev *pdev, unsigned long pci_bar_addr)
3332{
3333        int i, offset, mem_type, bar_type;
3334        if (pci_bar_addr == PCI_BASE_ADDRESS_0) /* looking for BAR zero? */
3335                return 0;
3336        offset = 0;
3337        for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
3338                bar_type = pci_resource_flags(pdev, i) & PCI_BASE_ADDRESS_SPACE;
3339                if (bar_type == PCI_BASE_ADDRESS_SPACE_IO)
3340                        offset += 4;
3341                else {
3342                        mem_type = pci_resource_flags(pdev, i) &
3343                            PCI_BASE_ADDRESS_MEM_TYPE_MASK;
3344                        switch (mem_type) {
3345                        case PCI_BASE_ADDRESS_MEM_TYPE_32:
3346                        case PCI_BASE_ADDRESS_MEM_TYPE_1M:
3347                                offset += 4;    /* 32 bit */
3348                                break;
3349                        case PCI_BASE_ADDRESS_MEM_TYPE_64:
3350                                offset += 8;
3351                                break;
3352                        default:        /* reserved in PCI 2.2 */
3353                                printk(KERN_WARNING
3354                                       "Base address is invalid\n");
3355                                return -1;
3356                                break;
3357                        }
3358                }
3359                if (offset == pci_bar_addr - PCI_BASE_ADDRESS_0)
3360                        return i + 1;
3361        }
3362        return -1;
3363}
3364
3365/* If MSI/MSI-X is supported by the kernel we will try to enable it on
3366 * controllers that are capable. If not, we use IO-APIC mode.
3367 */
3368
3369static void __devinit cciss_interrupt_mode(ctlr_info_t *c,
3370                                           struct pci_dev *pdev, __u32 board_id)
3371{
3372#ifdef CONFIG_PCI_MSI
3373        int err;
3374        struct msix_entry cciss_msix_entries[4] = { {0, 0}, {0, 1},
3375        {0, 2}, {0, 3}
3376        };
3377
3378        /* Some boards advertise MSI but don't really support it */
3379        if ((board_id == 0x40700E11) ||
3380            (board_id == 0x40800E11) ||
3381            (board_id == 0x40820E11) || (board_id == 0x40830E11))
3382                goto default_int_mode;
3383
3384        if (pci_find_capability(pdev, PCI_CAP_ID_MSIX)) {
3385                err = pci_enable_msix(pdev, cciss_msix_entries, 4);
3386                if (!err) {
3387                        c->intr[0] = cciss_msix_entries[0].vector;
3388                        c->intr[1] = cciss_msix_entries[1].vector;
3389                        c->intr[2] = cciss_msix_entries[2].vector;
3390                        c->intr[3] = cciss_msix_entries[3].vector;
3391                        c->msix_vector = 1;
3392                        return;
3393                }
3394                if (err > 0) {
3395                        printk(KERN_WARNING "cciss: only %d MSI-X vectors "
3396                               "available\n", err);
3397                        goto default_int_mode;
3398                } else {
3399                        printk(KERN_WARNING "cciss: MSI-X init failed %d\n",
3400                               err);
3401                        goto default_int_mode;
3402                }
3403        }
3404        if (pci_find_capability(pdev, PCI_CAP_ID_MSI)) {
3405                if (!pci_enable_msi(pdev)) {
3406                        c->msi_vector = 1;
3407                } else {
3408                        printk(KERN_WARNING "cciss: MSI init failed\n");
3409                }
3410        }
3411default_int_mode:
3412#endif                          /* CONFIG_PCI_MSI */
3413        /* if we get here we're going to use the default interrupt mode */
3414        c->intr[SIMPLE_MODE_INT] = pdev->irq;
3415        return;
3416}
3417
3418static int __devinit cciss_pci_init(ctlr_info_t *c, struct pci_dev *pdev)
3419{
3420        ushort subsystem_vendor_id, subsystem_device_id, command;
3421        __u32 board_id, scratchpad = 0;
3422        __u64 cfg_offset;
3423        __u32 cfg_base_addr;
3424        __u64 cfg_base_addr_index;
3425        int i, err;
3426
3427        /* check to see if controller has been disabled */
3428        /* BEFORE trying to enable it */
3429        (void)pci_read_config_word(pdev, PCI_COMMAND, &command);
3430        if (!(command & 0x02)) {
3431                printk(KERN_WARNING
3432                       "cciss: controller appears to be disabled\n");
3433                return -ENODEV;
3434        }
3435
3436        err = pci_enable_device(pdev);
3437        if (err) {
3438                printk(KERN_ERR "cciss: Unable to Enable PCI device\n");
3439                return err;
3440        }
3441
3442        err = pci_request_regions(pdev, "cciss");
3443        if (err) {
3444                printk(KERN_ERR "cciss: Cannot obtain PCI resources, "
3445                       "aborting\n");
3446                return err;
3447        }
3448
3449        subsystem_vendor_id = pdev->subsystem_vendor;
3450        subsystem_device_id = pdev->subsystem_device;
3451        board_id = (((__u32) (subsystem_device_id << 16) & 0xffff0000) |
3452                    subsystem_vendor_id);
3453
3454#ifdef CCISS_DEBUG
3455        printk("command = %x\n", command);
3456        printk("irq = %x\n", pdev->irq);
3457        printk("board_id = %x\n", board_id);
3458#endif                          /* CCISS_DEBUG */
3459
3460/* If the kernel supports MSI/MSI-X we will try to enable that functionality,
3461 * else we use the IO-APIC interrupt assigned to us by system ROM.
3462 */
3463        cciss_interrupt_mode(c, pdev, board_id);
3464
3465        /* find the memory BAR */
3466        for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) {
3467                if (pci_resource_flags(pdev, i) & IORESOURCE_MEM)
3468                        break;
3469        }
3470        if (i == DEVICE_COUNT_RESOURCE) {
3471                printk(KERN_WARNING "cciss: No memory BAR found\n");
3472                err = -ENODEV;
3473                goto err_out_free_res;
3474        }
3475
3476        c->paddr = pci_resource_start(pdev, i); /* addressing mode bits
3477                                                 * already removed
3478                                                 */
3479
3480#ifdef CCISS_DEBUG
3481        printk("address 0 = %lx\n", c->paddr);
3482#endif                          /* CCISS_DEBUG */
3483        c->vaddr = remap_pci_mem(c->paddr, 0x250);
3484
3485        /* Wait for the board to become ready.  (PCI hotplug needs this.)
3486         * We poll for up to 120 secs, once per 100ms. */
3487        for (i = 0; i < 1200; i++) {
3488                scratchpad = readl(c->vaddr + SA5_SCRATCHPAD_OFFSET);
3489                if (scratchpad == CCISS_FIRMWARE_READY)
3490                        break;
3491                set_current_state(TASK_INTERRUPTIBLE);
3492                schedule_timeout(HZ / 10);      /* wait 100ms */
3493        }
3494        if (scratchpad != CCISS_FIRMWARE_READY) {
3495                printk(KERN_WARNING "cciss: Board not ready.  Timed out.\n");
3496                err = -ENODEV;
3497                goto err_out_free_res;
3498        }
3499
3500        /* get the address index number */
3501        cfg_base_addr = readl(c->vaddr + SA5_CTCFG_OFFSET);
3502        cfg_base_addr &= (__u32) 0x0000ffff;
3503#ifdef CCISS_DEBUG
3504        printk("cfg base address = %x\n", cfg_base_addr);
3505#endif                          /* CCISS_DEBUG */
3506        cfg_base_addr_index = find_PCI_BAR_index(pdev, cfg_base_addr);
3507#ifdef CCISS_DEBUG
3508        printk("cfg base address index = %llx\n",
3509                (unsigned long long)cfg_base_addr_index);
3510#endif                          /* CCISS_DEBUG */
3511        if (cfg_base_addr_index == -1) {
3512                printk(KERN_WARNING "cciss: Cannot find cfg_base_addr_index\n");
3513                err = -ENODEV;
3514                goto err_out_free_res;
3515        }
3516
3517        cfg_offset = readl(c->vaddr + SA5_CTMEM_OFFSET);
3518#ifdef CCISS_DEBUG
3519        printk("cfg offset = %llx\n", (unsigned long long)cfg_offset);
3520#endif                          /* CCISS_DEBUG */
3521        c->cfgtable = remap_pci_mem(pci_resource_start(pdev,
3522                                                       cfg_base_addr_index) +
3523                                    cfg_offset, sizeof(CfgTable_struct));
3524        c->board_id = board_id;
3525
3526#ifdef CCISS_DEBUG
3527        print_cfg_table(c->cfgtable);
3528#endif                          /* CCISS_DEBUG */
3529
3530        /* Some controllers support Zero Memory Raid (ZMR).
3531         * When configured in ZMR mode the number of supported
3532         * commands drops to 64. So instead of just setting an
3533         * arbitrary value we make the driver a little smarter.
3534         * We read the config table to tell us how many commands
3535         * are supported on the controller then subtract 4 to
3536         * leave a little room for ioctl calls.
3537         */
3538        c->max_commands = readl(&(c->cfgtable->CmdsOutMax));
3539        for (i = 0; i < ARRAY_SIZE(products); i++) {
3540                if (board_id == products[i].board_id) {
3541                        c->product_name = products[i].product_name;
3542                        c->access = *(products[i].access);
3543                        c->nr_cmds = c->max_commands - 4;
3544                        break;
3545                }
3546        }
3547        if ((readb(&c->cfgtable->Signature[0]) != 'C') ||
3548            (readb(&c->cfgtable->Signature[1]) != 'I') ||
3549            (readb(&c->cfgtable->Signature[2]) != 'S') ||
3550            (readb(&c->cfgtable->Signature[3]) != 'S')) {
3551                printk("Does not appear to be a valid CISS config table\n");
3552                err = -ENODEV;
3553                goto err_out_free_res;
3554        }
3555        /* We didn't find the controller in our list. We know the
3556         * signature is valid. If it's an HP device let's try to
3557         * bind to the device and fire it up. Otherwise we bail.
3558         */
3559        if (i == ARRAY_SIZE(products)) {
3560                if (subsystem_vendor_id == PCI_VENDOR_ID_HP) {
3561                        c->product_name = products[i-1].product_name;
3562                        c->access = *(products[i-1].access);
3563                        c->nr_cmds = c->max_commands - 4;
3564                        printk(KERN_WARNING "cciss: This is an unknown "
3565                                "Smart Array controller.\n"
3566                                "cciss: Please update to the latest driver "
3567                                "available from www.hp.com.\n");
3568                } else {
3569                        printk(KERN_WARNING "cciss: Sorry, I don't know how"
3570                                " to access the Smart Array controller %08lx\n"
3571                                        , (unsigned long)board_id);
3572                        err = -ENODEV;
3573                        goto err_out_free_res;
3574                }
3575        }
3576#ifdef CONFIG_X86
3577        {
3578                /* Need to enable prefetch in the SCSI core for 6400 in x86 */
3579                __u32 prefetch;
3580                prefetch = readl(&(c->cfgtable->SCSI_Prefetch));
3581                prefetch |= 0x100;
3582                writel(prefetch, &(c->cfgtable->SCSI_Prefetch));
3583        }
3584#endif
3585
3586        /* Disabling DMA prefetch and refetch for the P600.
3587         * An ASIC bug may result in accesses to invalid memory addresses.
3588         * We've disabled prefetch for some time now. Testing with XEN
3589         * kernels revealed a bug in the refetch if dom0 resides on a P600.
3590         */
3591        if(board_id == 0x3225103C) {
3592                __u32 dma_prefetch;
3593                __u32 dma_refetch;
3594                dma_prefetch = readl(c->vaddr + I2O_DMA1_CFG);
3595                dma_prefetch |= 0x8000;
3596                writel(dma_prefetch, c->vaddr + I2O_DMA1_CFG);
3597                pci_read_config_dword(pdev, PCI_COMMAND_PARITY, &dma_refetch);
3598                dma_refetch |= 0x1;
3599                pci_write_config_dword(pdev, PCI_COMMAND_PARITY, dma_refetch);
3600        }
3601
3602#ifdef CCISS_DEBUG
3603        printk("Trying to put board into Simple mode\n");
3604#endif                          /* CCISS_DEBUG */
3605        c->max_commands = readl(&(c->cfgtable->CmdsOutMax));
3606        /* Update the field, and then ring the doorbell */
3607        writel(CFGTBL_Trans_Simple, &(c->cfgtable->HostWrite.TransportRequest));
3608        writel(CFGTBL_ChangeReq, c->vaddr + SA5_DOORBELL);
3609
3610        /* under certain very rare conditions, this can take awhile.
3611         * (e.g.: hot replace a failed 144GB drive in a RAID 5 set right
3612         * as we enter this code.) */
3613        for (i = 0; i < MAX_CONFIG_WAIT; i++) {
3614                if (!(readl(c->vaddr + SA5_DOORBELL) & CFGTBL_ChangeReq))
3615                        break;
3616                /* delay and try again */
3617                set_current_state(TASK_INTERRUPTIBLE);
3618                schedule_timeout(10);
3619        }
3620
3621#ifdef CCISS_DEBUG
3622        printk(KERN_DEBUG "I counter got to %d %x\n", i,
3623               readl(c->vaddr + SA5_DOORBELL));
3624#endif                          /* CCISS_DEBUG */
3625#ifdef CCISS_DEBUG
3626        print_cfg_table(c->cfgtable);
3627#endif                          /* CCISS_DEBUG */
3628
3629        if (!(readl(&(c->cfgtable->TransportActive)) & CFGTBL_Trans_Simple)) {
3630                printk(KERN_WARNING "cciss: unable to get board into"
3631                       " simple mode\n");
3632                err = -ENODEV;
3633                goto err_out_free_res;
3634        }
3635        return 0;
3636
3637err_out_free_res:
3638        /*
3639         * Deliberately omit pci_disable_device(): it does something nasty to
3640         * Smart Array controllers that pci_enable_device does not undo
3641         */
3642        pci_release_regions(pdev);
3643        return err;
3644}
3645
3646/* Function to find the first free pointer into our hba[] array
3647 * Returns -1 if no free entries are left.
3648 */
3649static int alloc_cciss_hba(void)
3650{
3651        int i;
3652
3653        for (i = 0; i < MAX_CTLR; i++) {
3654                if (!hba[i]) {
3655                        ctlr_info_t *p;
3656
3657                        p = kzalloc(sizeof(ctlr_info_t), GFP_KERNEL);
3658                        if (!p)
3659                                goto Enomem;
3660                        hba[i] = p;
3661                        return i;
3662                }
3663        }
3664        printk(KERN_WARNING "cciss: This driver supports a maximum"
3665               " of %d controllers.\n", MAX_CTLR);
3666        return -1;
3667Enomem:
3668        printk(KERN_ERR "cciss: out of memory.\n");
3669        return -1;
3670}
3671
3672static void free_hba(int i)
3673{
3674        ctlr_info_t *p = hba[i];
3675        int n;
3676
3677        hba[i] = NULL;
3678        for (n = 0; n < CISS_MAX_LUN; n++)
3679                put_disk(p->gendisk[n]);
3680        kfree(p);
3681}
3682
3683/* Send a message CDB to the firmware. */
3684static __devinit int cciss_message(struct pci_dev *pdev, unsigned char opcode, unsigned char type)
3685{
3686        typedef struct {
3687                CommandListHeader_struct CommandHeader;
3688                RequestBlock_struct Request;
3689                ErrDescriptor_struct ErrorDescriptor;
3690        } Command;
3691        static const size_t cmd_sz = sizeof(Command) + sizeof(ErrorInfo_struct);
3692        Command *cmd;
3693        dma_addr_t paddr64;
3694        uint32_t paddr32, tag;
3695        void __iomem *vaddr;
3696        int i, err;
3697
3698        vaddr = ioremap_nocache(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0));
3699        if (vaddr == NULL)
3700                return -ENOMEM;
3701
3702        /* The Inbound Post Queue only accepts 32-bit physical addresses for the
3703           CCISS commands, so they must be allocated from the lower 4GiB of
3704           memory. */
3705        err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32));
3706        if (err) {
3707                iounmap(vaddr);
3708                return -ENOMEM;
3709        }
3710
3711        cmd = pci_alloc_consistent(pdev, cmd_sz, &paddr64);
3712        if (cmd == NULL) {
3713                iounmap(vaddr);
3714                return -ENOMEM;
3715        }
3716
3717        /* This must fit, because of the 32-bit consistent DMA mask.  Also,
3718           although there's no guarantee, we assume that the address is at
3719           least 4-byte aligned (most likely, it's page-aligned). */
3720        paddr32 = paddr64;
3721
3722        cmd->CommandHeader.ReplyQueue = 0;
3723        cmd->CommandHeader.SGList = 0;
3724        cmd->CommandHeader.SGTotal = 0;
3725        cmd->CommandHeader.Tag.lower = paddr32;
3726        cmd->CommandHeader.Tag.upper = 0;
3727        memset(&cmd->CommandHeader.LUN.LunAddrBytes, 0, 8);
3728
3729        cmd->Request.CDBLen = 16;
3730        cmd->Request.Type.Type = TYPE_MSG;
3731        cmd->Request.Type.Attribute = ATTR_HEADOFQUEUE;
3732        cmd->Request.Type.Direction = XFER_NONE;
3733        cmd->Request.Timeout = 0; /* Don't time out */
3734        cmd->Request.CDB[0] = opcode;
3735        cmd->Request.CDB[1] = type;
3736        memset(&cmd->Request.CDB[2], 0, 14); /* the rest of the CDB is reserved */
3737
3738        cmd->ErrorDescriptor.Addr.lower = paddr32 + sizeof(Command);
3739        cmd->ErrorDescriptor.Addr.upper = 0;
3740        cmd->ErrorDescriptor.Len = sizeof(ErrorInfo_struct);
3741
3742        writel(paddr32, vaddr + SA5_REQUEST_PORT_OFFSET);
3743
3744        for (i = 0; i < 10; i++) {
3745                tag = readl(vaddr + SA5_REPLY_PORT_OFFSET);
3746                if ((tag & ~3) == paddr32)
3747                        break;
3748                schedule_timeout_uninterruptible(HZ);
3749        }
3750
3751        iounmap(vaddr);
3752
3753        /* we leak the DMA buffer here ... no choice since the controller could
3754           still complete the command. */
3755        if (i == 10) {
3756                printk(KERN_ERR "cciss: controller message %02x:%02x timed out\n",
3757                        opcode, type);
3758                return -ETIMEDOUT;
3759        }
3760
3761        pci_free_consistent(pdev, cmd_sz, cmd, paddr64);
3762
3763        if (tag & 2) {
3764                printk(KERN_ERR "cciss: controller message %02x:%02x failed\n",
3765                        opcode, type);
3766                return -EIO;
3767        }
3768
3769        printk(KERN_INFO "cciss: controller message %02x:%02x succeeded\n",
3770                opcode, type);
3771        return 0;
3772}
3773
3774#define cciss_soft_reset_controller(p) cciss_message(p, 1, 0)
3775#define cciss_noop(p) cciss_message(p, 3, 0)
3776
3777static __devinit int cciss_reset_msi(struct pci_dev *pdev)
3778{
3779/* the #defines are stolen from drivers/pci/msi.h. */
3780#define msi_control_reg(base)           (base + PCI_MSI_FLAGS)
3781#define PCI_MSIX_FLAGS_ENABLE           (1 << 15)
3782
3783        int pos;
3784        u16 control = 0;
3785
3786        pos = pci_find_capability(pdev, PCI_CAP_ID_MSI);
3787        if (pos) {
3788                pci_read_config_word(pdev, msi_control_reg(pos), &control);
3789                if (control & PCI_MSI_FLAGS_ENABLE) {
3790                        printk(KERN_INFO "cciss: resetting MSI\n");
3791                        pci_write_config_word(pdev, msi_control_reg(pos), control & ~PCI_MSI_FLAGS_ENABLE);
3792                }
3793        }
3794
3795        pos = pci_find_capability(pdev, PCI_CAP_ID_MSIX);
3796        if (pos) {
3797                pci_read_config_word(pdev, msi_control_reg(pos), &control);
3798                if (control & PCI_MSIX_FLAGS_ENABLE) {
3799                        printk(KERN_INFO "cciss: resetting MSI-X\n");
3800                        pci_write_config_word(pdev, msi_control_reg(pos), control & ~PCI_MSIX_FLAGS_ENABLE);
3801                }
3802        }
3803
3804        return 0;
3805}
3806
3807/* This does a hard reset of the controller using PCI power management
3808 * states. */
3809static __devinit int cciss_hard_reset_controller(struct pci_dev *pdev)
3810{
3811        u16 pmcsr, saved_config_space[32];
3812        int i, pos;
3813
3814        printk(KERN_INFO "cciss: using PCI PM to reset controller\n");
3815
3816        /* This is very nearly the same thing as
3817
3818           pci_save_state(pci_dev);
3819           pci_set_power_state(pci_dev, PCI_D3hot);
3820           pci_set_power_state(pci_dev, PCI_D0);
3821           pci_restore_state(pci_dev);
3822
3823           but we can't use these nice canned kernel routines on
3824           kexec, because they also check the MSI/MSI-X state in PCI
3825           configuration space and do the wrong thing when it is
3826           set/cleared.  Also, the pci_save/restore_state functions
3827           violate the ordering requirements for restoring the
3828           configuration space from the CCISS document (see the
3829           comment below).  So we roll our own .... */
3830
3831        for (i = 0; i < 32; i++)
3832                pci_read_config_word(pdev, 2*i, &saved_config_space[i]);
3833
3834        pos = pci_find_capability(pdev, PCI_CAP_ID_PM);
3835        if (pos == 0) {
3836                printk(KERN_ERR "cciss_reset_controller: PCI PM not supported\n");
3837                return -ENODEV;
3838        }
3839
3840        /* Quoting from the Open CISS Specification: "The Power
3841         * Management Control/Status Register (CSR) controls the power
3842         * state of the device.  The normal operating state is D0,
3843         * CSR=00h.  The software off state is D3, CSR=03h.  To reset
3844         * the controller, place the interface device in D3 then to
3845         * D0, this causes a secondary PCI reset which will reset the
3846         * controller." */
3847
3848        /* enter the D3hot power management state */
3849        pci_read_config_word(pdev, pos + PCI_PM_CTRL, &pmcsr);
3850        pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
3851        pmcsr |= PCI_D3hot;
3852        pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr);
3853
3854        schedule_timeout_uninterruptible(HZ >> 1);
3855
3856        /* enter the D0 power management state */
3857        pmcsr &= ~PCI_PM_CTRL_STATE_MASK;
3858        pmcsr |= PCI_D0;
3859        pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr);
3860
3861        schedule_timeout_uninterruptible(HZ >> 1);
3862
3863        /* Restore the PCI configuration space.  The Open CISS
3864         * Specification says, "Restore the PCI Configuration
3865         * Registers, offsets 00h through 60h. It is important to
3866         * restore the command register, 16-bits at offset 04h,
3867         * last. Do not restore the configuration status register,
3868         * 16-bits at offset 06h."  Note that the offset is 2*i. */
3869        for (i = 0; i < 32; i++) {
3870                if (i == 2 || i == 3)
3871                        continue;
3872                pci_write_config_word(pdev, 2*i, saved_config_space[i]);
3873        }
3874        wmb();
3875        pci_write_config_word(pdev, 4, saved_config_space[2]);
3876
3877        return 0;
3878}
3879
3880/*
3881 *  This is it.  Find all the controllers and register them.  I really hate
3882 *  stealing all these major device numbers.
3883 *  returns the number of block devices registered.
3884 */
3885static int __devinit cciss_init_one(struct pci_dev *pdev,
3886                                    const struct pci_device_id *ent)
3887{
3888        int i;
3889        int j = 0;
3890        int rc;
3891        int dac, return_code;
3892        InquiryData_struct *inq_buff = NULL;
3893
3894        if (reset_devices) {
3895                /* Reset the controller with a PCI power-cycle */
3896                if (cciss_hard_reset_controller(pdev) || cciss_reset_msi(pdev))
3897                        return -ENODEV;
3898
3899                /* Now try to get the controller to respond to a no-op. Some
3900                   devices (notably the HP Smart Array 5i Controller) need
3901                   up to 30 seconds to respond. */
3902                for (i=0; i<30; i++) {
3903                        if (cciss_noop(pdev) == 0)
3904                                break;
3905
3906                        schedule_timeout_uninterruptible(HZ);
3907                }
3908                if (i == 30) {
3909                        printk(KERN_ERR "cciss: controller seems dead\n");
3910                        return -EBUSY;
3911                }
3912        }
3913
3914        i = alloc_cciss_hba();
3915        if (i < 0)
3916                return -1;
3917
3918        hba[i]->busy_initializing = 1;
3919        INIT_HLIST_HEAD(&hba[i]->cmpQ);
3920        INIT_HLIST_HEAD(&hba[i]->reqQ);
3921
3922        if (cciss_pci_init(hba[i], pdev) != 0)
3923                goto clean0;
3924
3925        sprintf(hba[i]->devname, "cciss%d", i);
3926        hba[i]->ctlr = i;
3927        hba[i]->pdev = pdev;
3928
3929        if (cciss_create_hba_sysfs_entry(hba[i]))
3930                goto clean0;
3931
3932        /* configure PCI DMA stuff */
3933        if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(64)))
3934                dac = 1;
3935        else if (!pci_set_dma_mask(pdev, DMA_BIT_MASK(32)))
3936                dac = 0;
3937        else {
3938                printk(KERN_ERR "cciss: no suitable DMA available\n");
3939                goto clean1;
3940        }
3941
3942        /*
3943         * register with the major number, or get a dynamic major number
3944         * by passing 0 as argument.  This is done for greater than
3945         * 8 controller support.
3946         */
3947        if (i < MAX_CTLR_ORIG)
3948                hba[i]->major = COMPAQ_CISS_MAJOR + i;
3949        rc = register_blkdev(hba[i]->major, hba[i]->devname);
3950        if (rc == -EBUSY || rc == -EINVAL) {
3951                printk(KERN_ERR
3952                       "cciss:  Unable to get major number %d for %s "
3953                       "on hba %d\n", hba[i]->major, hba[i]->devname, i);
3954                goto clean1;
3955        } else {
3956                if (i >= MAX_CTLR_ORIG)
3957                        hba[i]->major = rc;
3958        }
3959
3960        /* make sure the board interrupts are off */
3961        hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_OFF);
3962        if (request_irq(hba[i]->intr[SIMPLE_MODE_INT], do_cciss_intr,
3963                        IRQF_DISABLED | IRQF_SHARED, hba[i]->devname, hba[i])) {
3964                printk(KERN_ERR "cciss: Unable to get irq %d for %s\n",
3965                       hba[i]->intr[SIMPLE_MODE_INT], hba[i]->devname);
3966                goto clean2;
3967        }
3968
3969        printk(KERN_INFO "%s: <0x%x> at PCI %s IRQ %d%s using DAC\n",
3970               hba[i]->devname, pdev->device, pci_name(pdev),
3971               hba[i]->intr[SIMPLE_MODE_INT], dac ? "" : " not");
3972
3973        hba[i]->cmd_pool_bits =
3974            kmalloc(DIV_ROUND_UP(hba[i]->nr_cmds, BITS_PER_LONG)
3975                        * sizeof(unsigned long), GFP_KERNEL);
3976        hba[i]->cmd_pool = (CommandList_struct *)
3977            pci_alloc_consistent(hba[i]->pdev,
3978                    hba[i]->nr_cmds * sizeof(CommandList_struct),
3979                    &(hba[i]->cmd_pool_dhandle));
3980        hba[i]->errinfo_pool = (ErrorInfo_struct *)
3981            pci_alloc_consistent(hba[i]->pdev,
3982                    hba[i]->nr_cmds * sizeof(ErrorInfo_struct),
3983                    &(hba[i]->errinfo_pool_dhandle));
3984        if ((hba[i]->cmd_pool_bits == NULL)
3985            || (hba[i]->cmd_pool == NULL)
3986            || (hba[i]->errinfo_pool == NULL)) {
3987                printk(KERN_ERR "cciss: out of memory");
3988                goto clean4;
3989        }
3990        spin_lock_init(&hba[i]->lock);
3991
3992        /* Initialize the pdev driver private data.
3993           have it point to hba[i].  */
3994        pci_set_drvdata(pdev, hba[i]);
3995        /* command and error info recs zeroed out before
3996           they are used */
3997        memset(hba[i]->cmd_pool_bits, 0,
3998               DIV_ROUND_UP(hba[i]->nr_cmds, BITS_PER_LONG)
3999                        * sizeof(unsigned long));
4000
4001        hba[i]->num_luns = 0;
4002        hba[i]->highest_lun = -1;
4003        for (j = 0; j < CISS_MAX_LUN; j++) {
4004                hba[i]->drv[j].raid_level = -1;
4005                hba[i]->drv[j].queue = NULL;
4006                hba[i]->gendisk[j] = NULL;
4007        }
4008
4009        cciss_scsi_setup(i);
4010
4011        /* Turn the interrupts on so we can service requests */
4012        hba[i]->access.set_intr_mask(hba[i], CCISS_INTR_ON);
4013
4014        /* Get the firmware version */
4015        inq_buff = kzalloc(sizeof(InquiryData_struct), GFP_KERNEL);
4016        if (inq_buff == NULL) {
4017                printk(KERN_ERR "cciss: out of memory\n");
4018                goto clean4;
4019        }
4020
4021        return_code = sendcmd_withirq(CISS_INQUIRY, i, inq_buff,
4022                sizeof(InquiryData_struct), 0, CTLR_LUNID, TYPE_CMD);
4023        if (return_code == IO_OK) {
4024                hba[i]->firm_ver[0] = inq_buff->data_byte[32];
4025                hba[i]->firm_ver[1] = inq_buff->data_byte[33];
4026                hba[i]->firm_ver[2] = inq_buff->data_byte[34];
4027                hba[i]->firm_ver[3] = inq_buff->data_byte[35];
4028        } else {         /* send command failed */
4029                printk(KERN_WARNING "cciss: unable to determine firmware"
4030                        " version of controller\n");
4031        }
4032
4033        cciss_procinit(i);
4034
4035        hba[i]->cciss_max_sectors = 2048;
4036
4037        hba[i]->busy_initializing = 0;
4038
4039        rebuild_lun_table(hba[i], 1);
4040        hba[i]->cciss_scan_thread = kthread_run(scan_thread, hba[i],
4041                                "cciss_scan%02d", i);
4042        if (IS_ERR(hba[i]->cciss_scan_thread))
4043                return PTR_ERR(hba[i]->cciss_scan_thread);
4044
4045        return 1;
4046
4047clean4:
4048        kfree(inq_buff);
4049        kfree(hba[i]->cmd_pool_bits);
4050        if (hba[i]->cmd_pool)
4051                pci_free_consistent(hba[i]->pdev,
4052                                    hba[i]->nr_cmds * sizeof(CommandList_struct),
4053                                    hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle);
4054        if (hba[i]->errinfo_pool)
4055                pci_free_consistent(hba[i]->pdev,
4056                                    hba[i]->nr_cmds * sizeof(ErrorInfo_struct),
4057                                    hba[i]->errinfo_pool,
4058                                    hba[i]->errinfo_pool_dhandle);
4059        free_irq(hba[i]->intr[SIMPLE_MODE_INT], hba[i]);
4060clean2:
4061        unregister_blkdev(hba[i]->major, hba[i]->devname);
4062clean1:
4063        cciss_destroy_hba_sysfs_entry(hba[i]);
4064clean0:
4065        hba[i]->busy_initializing = 0;
4066        /* cleanup any queues that may have been initialized */
4067        for (j=0; j <= hba[i]->highest_lun; j++){
4068                drive_info_struct *drv = &(hba[i]->drv[j]);
4069                if (drv->queue)
4070                        blk_cleanup_queue(drv->queue);
4071        }
4072        /*
4073         * Deliberately omit pci_disable_device(): it does something nasty to
4074         * Smart Array controllers that pci_enable_device does not undo
4075         */
4076        pci_release_regions(pdev);
4077        pci_set_drvdata(pdev, NULL);
4078        free_hba(i);
4079        return -1;
4080}
4081
4082static void cciss_shutdown(struct pci_dev *pdev)
4083{
4084        ctlr_info_t *tmp_ptr;
4085        int i;
4086        char flush_buf[4];
4087        int return_code;
4088
4089        tmp_ptr = pci_get_drvdata(pdev);
4090        if (tmp_ptr == NULL)
4091                return;
4092        i = tmp_ptr->ctlr;
4093        if (hba[i] == NULL)
4094                return;
4095
4096        /* Turn board interrupts off  and send the flush cache command */
4097        /* sendcmd will turn off interrupt, and send the flush...
4098         * To write all data in the battery backed cache to disks */
4099        memset(flush_buf, 0, 4);
4100        return_code = sendcmd(CCISS_CACHE_FLUSH, i, flush_buf, 4, 0,
4101                CTLR_LUNID, TYPE_CMD);
4102        if (return_code == IO_OK) {
4103                printk(KERN_INFO "Completed flushing cache on controller %d\n", i);
4104        } else {
4105                printk(KERN_WARNING "Error flushing cache on controller %d\n", i);
4106        }
4107        free_irq(hba[i]->intr[2], hba[i]);
4108}
4109
4110static void __devexit cciss_remove_one(struct pci_dev *pdev)
4111{
4112        ctlr_info_t *tmp_ptr;
4113        int i, j;
4114
4115        if (pci_get_drvdata(pdev) == NULL) {
4116                printk(KERN_ERR "cciss: Unable to remove device \n");
4117                return;
4118        }
4119
4120        tmp_ptr = pci_get_drvdata(pdev);
4121        i = tmp_ptr->ctlr;
4122        if (hba[i] == NULL) {
4123                printk(KERN_ERR "cciss: device appears to "
4124                       "already be removed \n");
4125                return;
4126        }
4127
4128        kthread_stop(hba[i]->cciss_scan_thread);
4129
4130        remove_proc_entry(hba[i]->devname, proc_cciss);
4131        unregister_blkdev(hba[i]->major, hba[i]->devname);
4132
4133        /* remove it from the disk list */
4134        for (j = 0; j < CISS_MAX_LUN; j++) {
4135                struct gendisk *disk = hba[i]->gendisk[j];
4136                if (disk) {
4137                        struct request_queue *q = disk->queue;
4138
4139                        if (disk->flags & GENHD_FL_UP)
4140                                del_gendisk(disk);
4141                        if (q)
4142                                blk_cleanup_queue(q);
4143                }
4144        }
4145
4146#ifdef CONFIG_CISS_SCSI_TAPE
4147        cciss_unregister_scsi(i);       /* unhook from SCSI subsystem */
4148#endif
4149
4150        cciss_shutdown(pdev);
4151
4152#ifdef CONFIG_PCI_MSI
4153        if (hba[i]->msix_vector)
4154                pci_disable_msix(hba[i]->pdev);
4155        else if (hba[i]->msi_vector)
4156                pci_disable_msi(hba[i]->pdev);
4157#endif                          /* CONFIG_PCI_MSI */
4158
4159        iounmap(hba[i]->vaddr);
4160
4161        pci_free_consistent(hba[i]->pdev, hba[i]->nr_cmds * sizeof(CommandList_struct),
4162                            hba[i]->cmd_pool, hba[i]->cmd_pool_dhandle);
4163        pci_free_consistent(hba[i]->pdev, hba[i]->nr_cmds * sizeof(ErrorInfo_struct),
4164                            hba[i]->errinfo_pool, hba[i]->errinfo_pool_dhandle);
4165        kfree(hba[i]->cmd_pool_bits);
4166        /*
4167         * Deliberately omit pci_disable_device(): it does something nasty to
4168         * Smart Array controllers that pci_enable_device does not undo
4169         */
4170        pci_release_regions(pdev);
4171        pci_set_drvdata(pdev, NULL);
4172        cciss_destroy_hba_sysfs_entry(hba[i]);
4173        free_hba(i);
4174}
4175
4176static struct pci_driver cciss_pci_driver = {
4177        .name = "cciss",
4178        .probe = cciss_init_one,
4179        .remove = __devexit_p(cciss_remove_one),
4180        .id_table = cciss_pci_device_id,        /* id_table */
4181        .shutdown = cciss_shutdown,
4182};
4183
4184/*
4185 *  This is it.  Register the PCI driver information for the cards we control
4186 *  the OS will call our registered routines when it finds one of our cards.
4187 */
4188static int __init cciss_init(void)
4189{
4190        int err;
4191
4192        /*
4193         * The hardware requires that commands are aligned on a 64-bit
4194         * boundary. Given that we use pci_alloc_consistent() to allocate an
4195         * array of them, the size must be a multiple of 8 bytes.
4196         */
4197        BUILD_BUG_ON(sizeof(CommandList_struct) % 8);
4198
4199        printk(KERN_INFO DRIVER_NAME "\n");
4200
4201        err = bus_register(&cciss_bus_type);
4202        if (err)
4203                return err;
4204
4205        /* Register for our PCI devices */
4206        err = pci_register_driver(&cciss_pci_driver);
4207        if (err)
4208                goto err_bus_register;
4209
4210        return 0;
4211
4212err_bus_register:
4213        bus_unregister(&cciss_bus_type);
4214        return err;
4215}
4216
4217static void __exit cciss_cleanup(void)
4218{
4219        int i;
4220
4221        pci_unregister_driver(&cciss_pci_driver);
4222        /* double check that all controller entrys have been removed */
4223        for (i = 0; i < MAX_CTLR; i++) {
4224                if (hba[i] != NULL) {
4225                        printk(KERN_WARNING "cciss: had to remove"
4226                               " controller %d\n", i);
4227                        cciss_remove_one(hba[i]->pdev);
4228                }
4229        }
4230        remove_proc_entry("driver/cciss", NULL);
4231        bus_unregister(&cciss_bus_type);
4232}
4233
4234static void fail_all_cmds(unsigned long ctlr)
4235{
4236        /* If we get here, the board is apparently dead. */
4237        ctlr_info_t *h = hba[ctlr];
4238        CommandList_struct *c;
4239        unsigned long flags;
4240
4241        printk(KERN_WARNING "cciss%d: controller not responding.\n", h->ctlr);
4242        h->alive = 0;           /* the controller apparently died... */
4243
4244        spin_lock_irqsave(CCISS_LOCK(ctlr), flags);
4245
4246        pci_disable_device(h->pdev);    /* Make sure it is really dead. */
4247
4248        /* move everything off the request queue onto the completed queue */
4249        while (!hlist_empty(&h->reqQ)) {
4250                c = hlist_entry(h->reqQ.first, CommandList_struct, list);
4251                removeQ(c);
4252                h->Qdepth--;
4253                addQ(&h->cmpQ, c);
4254        }
4255
4256        /* Now, fail everything on the completed queue with a HW error */
4257        while (!hlist_empty(&h->cmpQ)) {
4258                c = hlist_entry(h->cmpQ.first, CommandList_struct, list);
4259                removeQ(c);
4260                if (c->cmd_type != CMD_MSG_STALE)
4261                        c->err_info->CommandStatus = CMD_HARDWARE_ERR;
4262                if (c->cmd_type == CMD_RWREQ) {
4263                        complete_command(h, c, 0);
4264                } else if (c->cmd_type == CMD_IOCTL_PEND)
4265                        complete(c->waiting);
4266#ifdef CONFIG_CISS_SCSI_TAPE
4267                else if (c->cmd_type == CMD_SCSI)
4268                        complete_scsi_command(c, 0, 0);
4269#endif
4270        }
4271        spin_unlock_irqrestore(CCISS_LOCK(ctlr), flags);
4272        return;
4273}
4274
4275module_init(cciss_init);
4276module_exit(cciss_cleanup);
4277
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.