1 /* 2 * Disk Array driver for HP Smart Array SAS controllers 3 * Copyright 2000, 2009 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, GOOD TITLE or 12 * NON INFRINGEMENT. See the GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program; if not, write to the Free Software 16 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 17 * 18 * Questions/Comments/Bugfixes to iss_storagedev@hp.com 19 * 20 */ 21 22 #include <linux/module.h> 23 #include <linux/interrupt.h> 24 #include <linux/types.h> 25 #include <linux/pci.h> 26 #include <linux/kernel.h> 27 #include <linux/slab.h> 28 #include <linux/delay.h> 29 #include <linux/fs.h> 30 #include <linux/timer.h> 31 #include <linux/seq_file.h> 32 #include <linux/init.h> 33 #include <linux/spinlock.h> 34 #include <linux/smp_lock.h> 35 #include <linux/compat.h> 36 #include <linux/blktrace_api.h> 37 #include <linux/uaccess.h> 38 #include <linux/io.h> 39 #include <linux/dma-mapping.h> 40 #include <linux/completion.h> 41 #include <linux/moduleparam.h> 42 #include <scsi/scsi.h> 43 #include <scsi/scsi_cmnd.h> 44 #include <scsi/scsi_device.h> 45 #include <scsi/scsi_host.h> 46 #include <scsi/scsi_tcq.h> 47 #include <linux/cciss_ioctl.h> 48 #include <linux/string.h> 49 #include <linux/bitmap.h> 50 #include <asm/atomic.h> 51 #include <linux/kthread.h> 52 #include "hpsa_cmd.h" 53 #include "hpsa.h" 54 55 /* HPSA_DRIVER_VERSION must be 3 byte values (0-255) separated by '.' */ 56 #define HPSA_DRIVER_VERSION "2.0.2-1" 57 #define DRIVER_NAME "HP HPSA Driver (v " HPSA_DRIVER_VERSION ")" 58 59 /* How long to wait (in milliseconds) for board to go into simple mode */ 60 #define MAX_CONFIG_WAIT 30000 61 #define MAX_IOCTL_CONFIG_WAIT 1000 62 63 /*define how many times we will try a command because of bus resets */ 64 #define MAX_CMD_RETRIES 3 65 66 /* Embedded module documentation macros - see modules.h */ 67 MODULE_AUTHOR("Hewlett-Packard Company"); 68 MODULE_DESCRIPTION("Driver for HP Smart Array Controller version " \ 69 HPSA_DRIVER_VERSION); 70 MODULE_SUPPORTED_DEVICE("HP Smart Array Controllers"); 71 MODULE_VERSION(HPSA_DRIVER_VERSION); 72 MODULE_LICENSE("GPL"); 73 74 static int hpsa_allow_any; 75 module_param(hpsa_allow_any, int, S_IRUGO|S_IWUSR); 76 MODULE_PARM_DESC(hpsa_allow_any, 77 "Allow hpsa driver to access unknown HP Smart Array hardware"); 78 79 /* define the PCI info for the cards we can control */ 80 static const struct pci_device_id hpsa_pci_device_id[] = { 81 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3241}, 82 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3243}, 83 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3245}, 84 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3247}, 85 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3249}, 86 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x324a}, 87 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x324b}, 88 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSE, 0x103C, 0x3233}, 89 #define PCI_DEVICE_ID_HP_CISSF 0x333f 90 {PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_CISSF, 0x103C, 0x333F}, 91 {PCI_VENDOR_ID_HP, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, 92 PCI_CLASS_STORAGE_RAID << 8, 0xffff << 8, 0}, 93 {0,} 94 }; 95 96 MODULE_DEVICE_TABLE(pci, hpsa_pci_device_id); 97 98 /* board_id = Subsystem Device ID & Vendor ID 99 * product = Marketing Name for the board 100 * access = Address of the struct of function pointers 101 */ 102 static struct board_type products[] = { 103 {0x3241103C, "Smart Array P212", &SA5_access}, 104 {0x3243103C, "Smart Array P410", &SA5_access}, 105 {0x3245103C, "Smart Array P410i", &SA5_access}, 106 {0x3247103C, "Smart Array P411", &SA5_access}, 107 {0x3249103C, "Smart Array P812", &SA5_access}, 108 {0x324a103C, "Smart Array P712m", &SA5_access}, 109 {0x324b103C, "Smart Array P711m", &SA5_access}, 110 {0x3233103C, "StorageWorks P1210m", &SA5_access}, 111 {0x333F103C, "StorageWorks P1210m", &SA5_access}, 112 {0xFFFF103C, "Unknown Smart Array", &SA5_access}, 113 }; 114 115 static int number_of_controllers; 116 117 static irqreturn_t do_hpsa_intr(int irq, void *dev_id); 118 static int hpsa_ioctl(struct scsi_device *dev, int cmd, void *arg); 119 static void start_io(struct ctlr_info *h); 120 121 #ifdef CONFIG_COMPAT 122 static int hpsa_compat_ioctl(struct scsi_device *dev, int cmd, void *arg); 123 #endif 124 125 static void cmd_free(struct ctlr_info *h, struct CommandList *c); 126 static void cmd_special_free(struct ctlr_info *h, struct CommandList *c); 127 static struct CommandList *cmd_alloc(struct ctlr_info *h); 128 static struct CommandList *cmd_special_alloc(struct ctlr_info *h); 129 static void fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h, 130 void *buff, size_t size, u8 page_code, unsigned char *scsi3addr, 131 int cmd_type); 132 133 static int hpsa_scsi_queue_command(struct scsi_cmnd *cmd, 134 void (*done)(struct scsi_cmnd *)); 135 static void hpsa_scan_start(struct Scsi_Host *); 136 static int hpsa_scan_finished(struct Scsi_Host *sh, 137 unsigned long elapsed_time); 138 static int hpsa_change_queue_depth(struct scsi_device *sdev, 139 int qdepth, int reason); 140 141 static int hpsa_eh_device_reset_handler(struct scsi_cmnd *scsicmd); 142 static int hpsa_slave_alloc(struct scsi_device *sdev); 143 static void hpsa_slave_destroy(struct scsi_device *sdev); 144 145 static ssize_t raid_level_show(struct device *dev, 146 struct device_attribute *attr, char *buf); 147 static ssize_t lunid_show(struct device *dev, 148 struct device_attribute *attr, char *buf); 149 static ssize_t unique_id_show(struct device *dev, 150 struct device_attribute *attr, char *buf); 151 static ssize_t host_show_firmware_revision(struct device *dev, 152 struct device_attribute *attr, char *buf); 153 static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno); 154 static ssize_t host_store_rescan(struct device *dev, 155 struct device_attribute *attr, const char *buf, size_t count); 156 static int check_for_unit_attention(struct ctlr_info *h, 157 struct CommandList *c); 158 static void check_ioctl_unit_attention(struct ctlr_info *h, 159 struct CommandList *c); 160 /* performant mode helper functions */ 161 static void calc_bucket_map(int *bucket, int num_buckets, 162 int nsgs, int *bucket_map); 163 static __devinit void hpsa_put_ctlr_into_performant_mode(struct ctlr_info *h); 164 static inline u32 next_command(struct ctlr_info *h); 165 166 static DEVICE_ATTR(raid_level, S_IRUGO, raid_level_show, NULL); 167 static DEVICE_ATTR(lunid, S_IRUGO, lunid_show, NULL); 168 static DEVICE_ATTR(unique_id, S_IRUGO, unique_id_show, NULL); 169 static DEVICE_ATTR(rescan, S_IWUSR, NULL, host_store_rescan); 170 static DEVICE_ATTR(firmware_revision, S_IRUGO, 171 host_show_firmware_revision, NULL); 172 173 static struct device_attribute *hpsa_sdev_attrs[] = { 174 &dev_attr_raid_level, 175 &dev_attr_lunid, 176 &dev_attr_unique_id, 177 NULL, 178 }; 179 180 static struct device_attribute *hpsa_shost_attrs[] = { 181 &dev_attr_rescan, 182 &dev_attr_firmware_revision, 183 NULL, 184 }; 185 186 static struct scsi_host_template hpsa_driver_template = { 187 .module = THIS_MODULE, 188 .name = "hpsa", 189 .proc_name = "hpsa", 190 .queuecommand = hpsa_scsi_queue_command, 191 .scan_start = hpsa_scan_start, 192 .scan_finished = hpsa_scan_finished, 193 .change_queue_depth = hpsa_change_queue_depth, 194 .this_id = -1, 195 .use_clustering = ENABLE_CLUSTERING, 196 .eh_device_reset_handler = hpsa_eh_device_reset_handler, 197 .ioctl = hpsa_ioctl, 198 .slave_alloc = hpsa_slave_alloc, 199 .slave_destroy = hpsa_slave_destroy, 200 #ifdef CONFIG_COMPAT 201 .compat_ioctl = hpsa_compat_ioctl, 202 #endif 203 .sdev_attrs = hpsa_sdev_attrs, 204 .shost_attrs = hpsa_shost_attrs, 205 }; 206 207 static inline struct ctlr_info *sdev_to_hba(struct scsi_device *sdev) 208 { 209 unsigned long *priv = shost_priv(sdev->host); 210 return (struct ctlr_info *) *priv; 211 } 212 213 static inline struct ctlr_info *shost_to_hba(struct Scsi_Host *sh) 214 { 215 unsigned long *priv = shost_priv(sh); 216 return (struct ctlr_info *) *priv; 217 } 218 219 static int check_for_unit_attention(struct ctlr_info *h, 220 struct CommandList *c) 221 { 222 if (c->err_info->SenseInfo[2] != UNIT_ATTENTION) 223 return 0; 224 225 switch (c->err_info->SenseInfo[12]) { 226 case STATE_CHANGED: 227 dev_warn(&h->pdev->dev, "hpsa%d: a state change " 228 "detected, command retried\n", h->ctlr); 229 break; 230 case LUN_FAILED: 231 dev_warn(&h->pdev->dev, "hpsa%d: LUN failure " 232 "detected, action required\n", h->ctlr); 233 break; 234 case REPORT_LUNS_CHANGED: 235 dev_warn(&h->pdev->dev, "hpsa%d: report LUN data " 236 "changed, action required\n", h->ctlr); 237 /* 238 * Note: this REPORT_LUNS_CHANGED condition only occurs on the MSA2012. 239 */ 240 break; 241 case POWER_OR_RESET: 242 dev_warn(&h->pdev->dev, "hpsa%d: a power on " 243 "or device reset detected\n", h->ctlr); 244 break; 245 case UNIT_ATTENTION_CLEARED: 246 dev_warn(&h->pdev->dev, "hpsa%d: unit attention " 247 "cleared by another initiator\n", h->ctlr); 248 break; 249 default: 250 dev_warn(&h->pdev->dev, "hpsa%d: unknown " 251 "unit attention detected\n", h->ctlr); 252 break; 253 } 254 return 1; 255 } 256 257 static ssize_t host_store_rescan(struct device *dev, 258 struct device_attribute *attr, 259 const char *buf, size_t count) 260 { 261 struct ctlr_info *h; 262 struct Scsi_Host *shost = class_to_shost(dev); 263 h = shost_to_hba(shost); 264 hpsa_scan_start(h->scsi_host); 265 return count; 266 } 267 268 static ssize_t host_show_firmware_revision(struct device *dev, 269 struct device_attribute *attr, char *buf) 270 { 271 struct ctlr_info *h; 272 struct Scsi_Host *shost = class_to_shost(dev); 273 unsigned char *fwrev; 274 275 h = shost_to_hba(shost); 276 if (!h->hba_inquiry_data) 277 return 0; 278 fwrev = &h->hba_inquiry_data[32]; 279 return snprintf(buf, 20, "%c%c%c%c\n", 280 fwrev[0], fwrev[1], fwrev[2], fwrev[3]); 281 } 282 283 /* Enqueuing and dequeuing functions for cmdlists. */ 284 static inline void addQ(struct hlist_head *list, struct CommandList *c) 285 { 286 hlist_add_head(&c->list, list); 287 } 288 289 static inline u32 next_command(struct ctlr_info *h) 290 { 291 u32 a; 292 293 if (unlikely(h->transMethod != CFGTBL_Trans_Performant)) 294 return h->access.command_completed(h); 295 296 if ((*(h->reply_pool_head) & 1) == (h->reply_pool_wraparound)) { 297 a = *(h->reply_pool_head); /* Next cmd in ring buffer */ 298 (h->reply_pool_head)++; 299 h->commands_outstanding--; 300 } else { 301 a = FIFO_EMPTY; 302 } 303 /* Check for wraparound */ 304 if (h->reply_pool_head == (h->reply_pool + h->max_commands)) { 305 h->reply_pool_head = h->reply_pool; 306 h->reply_pool_wraparound ^= 1; 307 } 308 return a; 309 } 310 311 /* set_performant_mode: Modify the tag for cciss performant 312 * set bit 0 for pull model, bits 3-1 for block fetch 313 * register number 314 */ 315 static void set_performant_mode(struct ctlr_info *h, struct CommandList *c) 316 { 317 if (likely(h->transMethod == CFGTBL_Trans_Performant)) 318 c->busaddr |= 1 | (h->blockFetchTable[c->Header.SGList] << 1); 319 } 320 321 static void enqueue_cmd_and_start_io(struct ctlr_info *h, 322 struct CommandList *c) 323 { 324 unsigned long flags; 325 326 set_performant_mode(h, c); 327 spin_lock_irqsave(&h->lock, flags); 328 addQ(&h->reqQ, c); 329 h->Qdepth++; 330 start_io(h); 331 spin_unlock_irqrestore(&h->lock, flags); 332 } 333 334 static inline void removeQ(struct CommandList *c) 335 { 336 if (WARN_ON(hlist_unhashed(&c->list))) 337 return; 338 hlist_del_init(&c->list); 339 } 340 341 static inline int is_hba_lunid(unsigned char scsi3addr[]) 342 { 343 return memcmp(scsi3addr, RAID_CTLR_LUNID, 8) == 0; 344 } 345 346 static inline int is_logical_dev_addr_mode(unsigned char scsi3addr[]) 347 { 348 return (scsi3addr[3] & 0xC0) == 0x40; 349 } 350 351 static inline int is_scsi_rev_5(struct ctlr_info *h) 352 { 353 if (!h->hba_inquiry_data) 354 return 0; 355 if ((h->hba_inquiry_data[2] & 0x07) == 5) 356 return 1; 357 return 0; 358 } 359 360 static const char *raid_label[] = { "0", "4", "1(1+0)", "5", "5+1", "ADG", 361 "UNKNOWN" 362 }; 363 #define RAID_UNKNOWN (ARRAY_SIZE(raid_label) - 1) 364 365 static ssize_t raid_level_show(struct device *dev, 366 struct device_attribute *attr, char *buf) 367 { 368 ssize_t l = 0; 369 unsigned char rlevel; 370 struct ctlr_info *h; 371 struct scsi_device *sdev; 372 struct hpsa_scsi_dev_t *hdev; 373 unsigned long flags; 374 375 sdev = to_scsi_device(dev); 376 h = sdev_to_hba(sdev); 377 spin_lock_irqsave(&h->lock, flags); 378 hdev = sdev->hostdata; 379 if (!hdev) { 380 spin_unlock_irqrestore(&h->lock, flags); 381 return -ENODEV; 382 } 383 384 /* Is this even a logical drive? */ 385 if (!is_logical_dev_addr_mode(hdev->scsi3addr)) { 386 spin_unlock_irqrestore(&h->lock, flags); 387 l = snprintf(buf, PAGE_SIZE, "N/A\n"); 388 return l; 389 } 390 391 rlevel = hdev->raid_level; 392 spin_unlock_irqrestore(&h->lock, flags); 393 if (rlevel > RAID_UNKNOWN) 394 rlevel = RAID_UNKNOWN; 395 l = snprintf(buf, PAGE_SIZE, "RAID %s\n", raid_label[rlevel]); 396 return l; 397 } 398 399 static ssize_t lunid_show(struct device *dev, 400 struct device_attribute *attr, char *buf) 401 { 402 struct ctlr_info *h; 403 struct scsi_device *sdev; 404 struct hpsa_scsi_dev_t *hdev; 405 unsigned long flags; 406 unsigned char lunid[8]; 407 408 sdev = to_scsi_device(dev); 409 h = sdev_to_hba(sdev); 410 spin_lock_irqsave(&h->lock, flags); 411 hdev = sdev->hostdata; 412 if (!hdev) { 413 spin_unlock_irqrestore(&h->lock, flags); 414 return -ENODEV; 415 } 416 memcpy(lunid, hdev->scsi3addr, sizeof(lunid)); 417 spin_unlock_irqrestore(&h->lock, flags); 418 return snprintf(buf, 20, "0x%02x%02x%02x%02x%02x%02x%02x%02x\n", 419 lunid[0], lunid[1], lunid[2], lunid[3], 420 lunid[4], lunid[5], lunid[6], lunid[7]); 421 } 422 423 static ssize_t unique_id_show(struct device *dev, 424 struct device_attribute *attr, char *buf) 425 { 426 struct ctlr_info *h; 427 struct scsi_device *sdev; 428 struct hpsa_scsi_dev_t *hdev; 429 unsigned long flags; 430 unsigned char sn[16]; 431 432 sdev = to_scsi_device(dev); 433 h = sdev_to_hba(sdev); 434 spin_lock_irqsave(&h->lock, flags); 435 hdev = sdev->hostdata; 436 if (!hdev) { 437 spin_unlock_irqrestore(&h->lock, flags); 438 return -ENODEV; 439 } 440 memcpy(sn, hdev->device_id, sizeof(sn)); 441 spin_unlock_irqrestore(&h->lock, flags); 442 return snprintf(buf, 16 * 2 + 2, 443 "%02X%02X%02X%02X%02X%02X%02X%02X" 444 "%02X%02X%02X%02X%02X%02X%02X%02X\n", 445 sn[0], sn[1], sn[2], sn[3], 446 sn[4], sn[5], sn[6], sn[7], 447 sn[8], sn[9], sn[10], sn[11], 448 sn[12], sn[13], sn[14], sn[15]); 449 } 450 451 static int hpsa_find_target_lun(struct ctlr_info *h, 452 unsigned char scsi3addr[], int bus, int *target, int *lun) 453 { 454 /* finds an unused bus, target, lun for a new physical device 455 * assumes h->devlock is held 456 */ 457 int i, found = 0; 458 DECLARE_BITMAP(lun_taken, HPSA_MAX_SCSI_DEVS_PER_HBA); 459 460 memset(&lun_taken[0], 0, HPSA_MAX_SCSI_DEVS_PER_HBA >> 3); 461 462 for (i = 0; i < h->ndevices; i++) { 463 if (h->dev[i]->bus == bus && h->dev[i]->target != -1) 464 set_bit(h->dev[i]->target, lun_taken); 465 } 466 467 for (i = 0; i < HPSA_MAX_SCSI_DEVS_PER_HBA; i++) { 468 if (!test_bit(i, lun_taken)) { 469 /* *bus = 1; */ 470 *target = i; 471 *lun = 0; 472 found = 1; 473 break; 474 } 475 } 476 return !found; 477 } 478 479 /* Add an entry into h->dev[] array. */ 480 static int hpsa_scsi_add_entry(struct ctlr_info *h, int hostno, 481 struct hpsa_scsi_dev_t *device, 482 struct hpsa_scsi_dev_t *added[], int *nadded) 483 { 484 /* assumes h->devlock is held */ 485 int n = h->ndevices; 486 int i; 487 unsigned char addr1[8], addr2[8]; 488 struct hpsa_scsi_dev_t *sd; 489 490 if (n >= HPSA_MAX_SCSI_DEVS_PER_HBA) { 491 dev_err(&h->pdev->dev, "too many devices, some will be " 492 "inaccessible.\n"); 493 return -1; 494 } 495 496 /* physical devices do not have lun or target assigned until now. */ 497 if (device->lun != -1) 498 /* Logical device, lun is already assigned. */ 499 goto lun_assigned; 500 501 /* If this device a non-zero lun of a multi-lun device 502 * byte 4 of the 8-byte LUN addr will contain the logical 503 * unit no, zero otherise. 504 */ 505 if (device->scsi3addr[4] == 0) { 506 /* This is not a non-zero lun of a multi-lun device */ 507 if (hpsa_find_target_lun(h, device->scsi3addr, 508 device->bus, &device->target, &device->lun) != 0) 509 return -1; 510 goto lun_assigned; 511 } 512 513 /* This is a non-zero lun of a multi-lun device. 514 * Search through our list and find the device which 515 * has the same 8 byte LUN address, excepting byte 4. 516 * Assign the same bus and target for this new LUN. 517 * Use the logical unit number from the firmware. 518 */ 519 memcpy(addr1, device->scsi3addr, 8); 520 addr1[4] = 0; 521 for (i = 0; i < n; i++) { 522 sd = h->dev[i]; 523 memcpy(addr2, sd->scsi3addr, 8); 524 addr2[4] = 0; 525 /* differ only in byte 4? */ 526 if (memcmp(addr1, addr2, 8) == 0) { 527 device->bus = sd->bus; 528 device->target = sd->target; 529 device->lun = device->scsi3addr[4]; 530 break; 531 } 532 } 533 if (device->lun == -1) { 534 dev_warn(&h->pdev->dev, "physical device with no LUN=0," 535 " suspect firmware bug or unsupported hardware " 536 "configuration.\n"); 537 return -1; 538 } 539 540 lun_assigned: 541 542 h->dev[n] = device; 543 h->ndevices++; 544 added[*nadded] = device; 545 (*nadded)++; 546 547 /* initially, (before registering with scsi layer) we don't 548 * know our hostno and we don't want to print anything first 549 * time anyway (the scsi layer's inquiries will show that info) 550 */ 551 /* if (hostno != -1) */ 552 dev_info(&h->pdev->dev, "%s device c%db%dt%dl%d added.\n", 553 scsi_device_type(device->devtype), hostno, 554 device->bus, device->target, device->lun); 555 return 0; 556 } 557 558 /* Replace an entry from h->dev[] array. */ 559 static void hpsa_scsi_replace_entry(struct ctlr_info *h, int hostno, 560 int entry, struct hpsa_scsi_dev_t *new_entry, 561 struct hpsa_scsi_dev_t *added[], int *nadded, 562 struct hpsa_scsi_dev_t *removed[], int *nremoved) 563 { 564 /* assumes h->devlock is held */ 565 BUG_ON(entry < 0 || entry >= HPSA_MAX_SCSI_DEVS_PER_HBA); 566 removed[*nremoved] = h->dev[entry]; 567 (*nremoved)++; 568 h->dev[entry] = new_entry; 569 added[*nadded] = new_entry; 570 (*nadded)++; 571 dev_info(&h->pdev->dev, "%s device c%db%dt%dl%d changed.\n", 572 scsi_device_type(new_entry->devtype), hostno, new_entry->bus, 573 new_entry->target, new_entry->lun); 574 } 575 576 /* Remove an entry from h->dev[] array. */ 577 static void hpsa_scsi_remove_entry(struct ctlr_info *h, int hostno, int entry, 578 struct hpsa_scsi_dev_t *removed[], int *nremoved) 579 { 580 /* assumes h->devlock is held */ 581 int i; 582 struct hpsa_scsi_dev_t *sd; 583 584 BUG_ON(entry < 0 || entry >= HPSA_MAX_SCSI_DEVS_PER_HBA); 585 586 sd = h->dev[entry]; 587 removed[*nremoved] = h->dev[entry]; 588 (*nremoved)++; 589 590 for (i = entry; i < h->ndevices-1; i++) 591 h->dev[i] = h->dev[i+1]; 592 h->ndevices--; 593 dev_info(&h->pdev->dev, "%s device c%db%dt%dl%d removed.\n", 594 scsi_device_type(sd->devtype), hostno, sd->bus, sd->target, 595 sd->lun); 596 } 597 598 #define SCSI3ADDR_EQ(a, b) ( \ 599 (a)[7] == (b)[7] && \ 600 (a)[6] == (b)[6] && \ 601 (a)[5] == (b)[5] && \ 602 (a)[4] == (b)[4] && \ 603 (a)[3] == (b)[3] && \ 604 (a)[2] == (b)[2] && \ 605 (a)[1] == (b)[1] && \ 606 (a)[0] == (b)[0]) 607 608 static void fixup_botched_add(struct ctlr_info *h, 609 struct hpsa_scsi_dev_t *added) 610 { 611 /* called when scsi_add_device fails in order to re-adjust 612 * h->dev[] to match the mid layer's view. 613 */ 614 unsigned long flags; 615 int i, j; 616 617 spin_lock_irqsave(&h->lock, flags); 618 for (i = 0; i < h->ndevices; i++) { 619 if (h->dev[i] == added) { 620 for (j = i; j < h->ndevices-1; j++) 621 h->dev[j] = h->dev[j+1]; 622 h->ndevices--; 623 break; 624 } 625 } 626 spin_unlock_irqrestore(&h->lock, flags); 627 kfree(added); 628 } 629 630 static inline int device_is_the_same(struct hpsa_scsi_dev_t *dev1, 631 struct hpsa_scsi_dev_t *dev2) 632 { 633 if ((is_logical_dev_addr_mode(dev1->scsi3addr) || 634 (dev1->lun != -1 && dev2->lun != -1)) && 635 dev1->devtype != 0x0C) 636 return (memcmp(dev1, dev2, sizeof(*dev1)) == 0); 637 638 /* we compare everything except lun and target as these 639 * are not yet assigned. Compare parts likely 640 * to differ first 641 */ 642 if (memcmp(dev1->scsi3addr, dev2->scsi3addr, 643 sizeof(dev1->scsi3addr)) != 0) 644 return 0; 645 if (memcmp(dev1->device_id, dev2->device_id, 646 sizeof(dev1->device_id)) != 0) 647 return 0; 648 if (memcmp(dev1->model, dev2->model, sizeof(dev1->model)) != 0) 649 return 0; 650 if (memcmp(dev1->vendor, dev2->vendor, sizeof(dev1->vendor)) != 0) 651 return 0; 652 if (memcmp(dev1->revision, dev2->revision, sizeof(dev1->revision)) != 0) 653 return 0; 654 if (dev1->devtype != dev2->devtype) 655 return 0; 656 if (dev1->raid_level != dev2->raid_level) 657 return 0; 658 if (dev1->bus != dev2->bus) 659 return 0; 660 return 1; 661 } 662 663 /* Find needle in haystack. If exact match found, return DEVICE_SAME, 664 * and return needle location in *index. If scsi3addr matches, but not 665 * vendor, model, serial num, etc. return DEVICE_CHANGED, and return needle 666 * location in *index. If needle not found, return DEVICE_NOT_FOUND. 667 */ 668 static int hpsa_scsi_find_entry(struct hpsa_scsi_dev_t *needle, 669 struct hpsa_scsi_dev_t *haystack[], int haystack_size, 670 int *index) 671 { 672 int i; 673 #define DEVICE_NOT_FOUND 0 674 #define DEVICE_CHANGED 1 675 #define DEVICE_SAME 2 676 for (i = 0; i < haystack_size; i++) { 677 if (haystack[i] == NULL) /* previously removed. */ 678 continue; 679 if (SCSI3ADDR_EQ(needle->scsi3addr, haystack[i]->scsi3addr)) { 680 *index = i; 681 if (device_is_the_same(needle, haystack[i])) 682 return DEVICE_SAME; 683 else 684 return DEVICE_CHANGED; 685 } 686 } 687 *index = -1; 688 return DEVICE_NOT_FOUND; 689 } 690 691 static void adjust_hpsa_scsi_table(struct ctlr_info *h, int hostno, 692 struct hpsa_scsi_dev_t *sd[], int nsds) 693 { 694 /* sd contains scsi3 addresses and devtypes, and inquiry 695 * data. This function takes what's in sd to be the current 696 * reality and updates h->dev[] to reflect that reality. 697 */ 698 int i, entry, device_change, changes = 0; 699 struct hpsa_scsi_dev_t *csd; 700 unsigned long flags; 701 struct hpsa_scsi_dev_t **added, **removed; 702 int nadded, nremoved; 703 struct Scsi_Host *sh = NULL; 704 705 added = kzalloc(sizeof(*added) * HPSA_MAX_SCSI_DEVS_PER_HBA, 706 GFP_KERNEL); 707 removed = kzalloc(sizeof(*removed) * HPSA_MAX_SCSI_DEVS_PER_HBA, 708 GFP_KERNEL); 709 710 if (!added || !removed) { 711 dev_warn(&h->pdev->dev, "out of memory in " 712 "adjust_hpsa_scsi_table\n"); 713 goto free_and_out; 714 } 715 716 spin_lock_irqsave(&h->devlock, flags); 717 718 /* find any devices in h->dev[] that are not in 719 * sd[] and remove them from h->dev[], and for any 720 * devices which have changed, remove the old device 721 * info and add the new device info. 722 */ 723 i = 0; 724 nremoved = 0; 725 nadded = 0; 726 while (i < h->ndevices) { 727 csd = h->dev[i]; 728 device_change = hpsa_scsi_find_entry(csd, sd, nsds, &entry); 729 if (device_change == DEVICE_NOT_FOUND) { 730 changes++; 731 hpsa_scsi_remove_entry(h, hostno, i, 732 removed, &nremoved); 733 continue; /* remove ^^^, hence i not incremented */ 734 } else if (device_change == DEVICE_CHANGED) { 735 changes++; 736 hpsa_scsi_replace_entry(h, hostno, i, sd[entry], 737 added, &nadded, removed, &nremoved); 738 /* Set it to NULL to prevent it from being freed 739 * at the bottom of hpsa_update_scsi_devices() 740 */ 741 sd[entry] = NULL; 742 } 743 i++; 744 } 745 746 /* Now, make sure every device listed in sd[] is also 747 * listed in h->dev[], adding them if they aren't found 748 */ 749 750 for (i = 0; i < nsds; i++) { 751 if (!sd[i]) /* if already added above. */ 752 continue; 753 device_change = hpsa_scsi_find_entry(sd[i], h->dev, 754 h->ndevices, &entry); 755 if (device_change == DEVICE_NOT_FOUND) { 756 changes++; 757 if (hpsa_scsi_add_entry(h, hostno, sd[i], 758 added, &nadded) != 0) 759 break; 760 sd[i] = NULL; /* prevent from being freed later. */ 761 } else if (device_change == DEVICE_CHANGED) { 762 /* should never happen... */ 763 changes++; 764 dev_warn(&h->pdev->dev, 765 "device unexpectedly changed.\n"); 766 /* but if it does happen, we just ignore that device */ 767 } 768 } 769 spin_unlock_irqrestore(&h->devlock, flags); 770 771 /* Don't notify scsi mid layer of any changes the first time through 772 * (or if there are no changes) scsi_scan_host will do it later the 773 * first time through. 774 */ 775 if (hostno == -1 || !changes) 776 goto free_and_out; 777 778 sh = h->scsi_host; 779 /* Notify scsi mid layer of any removed devices */ 780 for (i = 0; i < nremoved; i++) { 781 struct scsi_device *sdev = 782 scsi_device_lookup(sh, removed[i]->bus, 783 removed[i]->target, removed[i]->lun); 784 if (sdev != NULL) { 785 scsi_remove_device(sdev); 786 scsi_device_put(sdev); 787 } else { 788 /* We don't expect to get here. 789 * future cmds to this device will get selection 790 * timeout as if the device was gone. 791 */ 792 dev_warn(&h->pdev->dev, "didn't find c%db%dt%dl%d " 793 " for removal.", hostno, removed[i]->bus, 794 removed[i]->target, removed[i]->lun); 795 } 796 kfree(removed[i]); 797 removed[i] = NULL; 798 } 799 800 /* Notify scsi mid layer of any added devices */ 801 for (i = 0; i < nadded; i++) { 802 if (scsi_add_device(sh, added[i]->bus, 803 added[i]->target, added[i]->lun) == 0) 804 continue; 805 dev_warn(&h->pdev->dev, "scsi_add_device c%db%dt%dl%d failed, " 806 "device not added.\n", hostno, added[i]->bus, 807 added[i]->target, added[i]->lun); 808 /* now we have to remove it from h->dev, 809 * since it didn't get added to scsi mid layer 810 */ 811 fixup_botched_add(h, added[i]); 812 } 813 814 free_and_out: 815 kfree(added); 816 kfree(removed); 817 } 818 819 /* 820 * Lookup bus/target/lun and retrun corresponding struct hpsa_scsi_dev_t * 821 * Assume's h->devlock is held. 822 */ 823 static struct hpsa_scsi_dev_t *lookup_hpsa_scsi_dev(struct ctlr_info *h, 824 int bus, int target, int lun) 825 { 826 int i; 827 struct hpsa_scsi_dev_t *sd; 828 829 for (i = 0; i < h->ndevices; i++) { 830 sd = h->dev[i]; 831 if (sd->bus == bus && sd->target == target && sd->lun == lun) 832 return sd; 833 } 834 return NULL; 835 } 836 837 /* link sdev->hostdata to our per-device structure. */ 838 static int hpsa_slave_alloc(struct scsi_device *sdev) 839 { 840 struct hpsa_scsi_dev_t *sd; 841 unsigned long flags; 842 struct ctlr_info *h; 843 844 h = sdev_to_hba(sdev); 845 spin_lock_irqsave(&h->devlock, flags); 846 sd = lookup_hpsa_scsi_dev(h, sdev_channel(sdev), 847 sdev_id(sdev), sdev->lun); 848 if (sd != NULL) 849 sdev->hostdata = sd; 850 spin_unlock_irqrestore(&h->devlock, flags); 851 return 0; 852 } 853 854 static void hpsa_slave_destroy(struct scsi_device *sdev) 855 { 856 /* nothing to do. */ 857 } 858 859 static void hpsa_scsi_setup(struct ctlr_info *h) 860 { 861 h->ndevices = 0; 862 h->scsi_host = NULL; 863 spin_lock_init(&h->devlock); 864 } 865 866 static void hpsa_free_sg_chain_blocks(struct ctlr_info *h) 867 { 868 int i; 869 870 if (!h->cmd_sg_list) 871 return; 872 for (i = 0; i < h->nr_cmds; i++) { 873 kfree(h->cmd_sg_list[i]); 874 h->cmd_sg_list[i] = NULL; 875 } 876 kfree(h->cmd_sg_list); 877 h->cmd_sg_list = NULL; 878 } 879 880 static int hpsa_allocate_sg_chain_blocks(struct ctlr_info *h) 881 { 882 int i; 883 884 if (h->chainsize <= 0) 885 return 0; 886 887 h->cmd_sg_list = kzalloc(sizeof(*h->cmd_sg_list) * h->nr_cmds, 888 GFP_KERNEL); 889 if (!h->cmd_sg_list) 890 return -ENOMEM; 891 for (i = 0; i < h->nr_cmds; i++) { 892 h->cmd_sg_list[i] = kmalloc(sizeof(*h->cmd_sg_list[i]) * 893 h->chainsize, GFP_KERNEL); 894 if (!h->cmd_sg_list[i]) 895 goto clean; 896 } 897 return 0; 898 899 clean: 900 hpsa_free_sg_chain_blocks(h); 901 return -ENOMEM; 902 } 903 904 static void hpsa_map_sg_chain_block(struct ctlr_info *h, 905 struct CommandList *c) 906 { 907 struct SGDescriptor *chain_sg, *chain_block; 908 u64 temp64; 909 910 chain_sg = &c->SG[h->max_cmd_sg_entries - 1]; 911 chain_block = h->cmd_sg_list[c->cmdindex]; 912 chain_sg->Ext = HPSA_SG_CHAIN; 913 chain_sg->Len = sizeof(*chain_sg) * 914 (c->Header.SGTotal - h->max_cmd_sg_entries); 915 temp64 = pci_map_single(h->pdev, chain_block, chain_sg->Len, 916 PCI_DMA_TODEVICE); 917 chain_sg->Addr.lower = (u32) (temp64 & 0x0FFFFFFFFULL); 918 chain_sg->Addr.upper = (u32) ((temp64 >> 32) & 0x0FFFFFFFFULL); 919 } 920 921 static void hpsa_unmap_sg_chain_block(struct ctlr_info *h, 922 struct CommandList *c) 923 { 924 struct SGDescriptor *chain_sg; 925 union u64bit temp64; 926 927 if (c->Header.SGTotal <= h->max_cmd_sg_entries) 928 return; 929 930 chain_sg = &c->SG[h->max_cmd_sg_entries - 1]; 931 temp64.val32.lower = chain_sg->Addr.lower; 932 temp64.val32.upper = chain_sg->Addr.upper; 933 pci_unmap_single(h->pdev, temp64.val, chain_sg->Len, PCI_DMA_TODEVICE); 934 } 935 936 static void complete_scsi_command(struct CommandList *cp, 937 int timeout, u32 tag) 938 { 939 struct scsi_cmnd *cmd; 940 struct ctlr_info *h; 941 struct ErrorInfo *ei; 942 943 unsigned char sense_key; 944 unsigned char asc; /* additional sense code */ 945 unsigned char ascq; /* additional sense code qualifier */ 946 947 ei = cp->err_info; 948 cmd = (struct scsi_cmnd *) cp->scsi_cmd; 949 h = cp->h; 950 951 scsi_dma_unmap(cmd); /* undo the DMA mappings */ 952 if (cp->Header.SGTotal > h->max_cmd_sg_entries) 953 hpsa_unmap_sg_chain_block(h, cp); 954 955 cmd->result = (DID_OK << 16); /* host byte */ 956 cmd->result |= (COMMAND_COMPLETE << 8); /* msg byte */ 957 cmd->result |= ei->ScsiStatus; 958 959 /* copy the sense data whether we need to or not. */ 960 memcpy(cmd->sense_buffer, ei->SenseInfo, 961 ei->SenseLen > SCSI_SENSE_BUFFERSIZE ? 962 SCSI_SENSE_BUFFERSIZE : 963 ei->SenseLen); 964 scsi_set_resid(cmd, ei->ResidualCnt); 965 966 if (ei->CommandStatus == 0) { 967 cmd->scsi_done(cmd); 968 cmd_free(h, cp); 969 return; 970 } 971 972 /* an error has occurred */ 973 switch (ei->CommandStatus) { 974 975 case CMD_TARGET_STATUS: 976 if (ei->ScsiStatus) { 977 /* Get sense key */ 978 sense_key = 0xf & ei->SenseInfo[2]; 979 /* Get additional sense code */ 980 asc = ei->SenseInfo[12]; 981 /* Get addition sense code qualifier */ 982 ascq = ei->SenseInfo[13]; 983 } 984 985 if (ei->ScsiStatus == SAM_STAT_CHECK_CONDITION) { 986 if (check_for_unit_attention(h, cp)) { 987 cmd->result = DID_SOFT_ERROR << 16; 988 break; 989 } 990 if (sense_key == ILLEGAL_REQUEST) { 991 /* 992 * SCSI REPORT_LUNS is commonly unsupported on 993 * Smart Array. Suppress noisy complaint. 994 */ 995 if (cp->Request.CDB[0] == REPORT_LUNS) 996 break; 997 998 /* If ASC/ASCQ indicate Logical Unit 999 * Not Supported condition, 1000 */ 1001 if ((asc == 0x25) && (ascq == 0x0)) { 1002 dev_warn(&h->pdev->dev, "cp %p " 1003 "has check condition\n", cp); 1004 break; 1005 } 1006 } 1007 1008 if (sense_key == NOT_READY) { 1009 /* If Sense is Not Ready, Logical Unit 1010 * Not ready, Manual Intervention 1011 * required 1012 */ 1013 if ((asc == 0x04) && (ascq == 0x03)) { 1014 dev_warn(&h->pdev->dev, "cp %p " 1015 "has check condition: unit " 1016 "not ready, manual " 1017 "intervention required\n", cp); 1018 break; 1019 } 1020 } 1021 if (sense_key == ABORTED_COMMAND) { 1022 /* Aborted command is retryable */ 1023 dev_warn(&h->pdev->dev, "cp %p " 1024 "has check condition: aborted command: " 1025 "ASC: 0x%x, ASCQ: 0x%x\n", 1026 cp, asc, ascq); 1027 cmd->result = DID_SOFT_ERROR << 16; 1028 break; 1029 } 1030 /* Must be some other type of check condition */ 1031 dev_warn(&h->pdev->dev, "cp %p has check condition: " 1032 "unknown type: " 1033 "Sense: 0x%x, ASC: 0x%x, ASCQ: 0x%x, " 1034 "Returning result: 0x%x, " 1035 "cmd=[%02x %02x %02x %02x %02x " 1036 "%02x %02x %02x %02x %02x %02x " 1037 "%02x %02x %02x %02x %02x]\n", 1038 cp, sense_key, asc, ascq, 1039 cmd->result, 1040 cmd->cmnd[0], cmd->cmnd[1], 1041 cmd->cmnd[2], cmd->cmnd[3], 1042 cmd->cmnd[4], cmd->cmnd[5], 1043 cmd->cmnd[6], cmd->cmnd[7], 1044 cmd->cmnd[8], cmd->cmnd[9], 1045 cmd->cmnd[10], cmd->cmnd[11], 1046 cmd->cmnd[12], cmd->cmnd[13], 1047 cmd->cmnd[14], cmd->cmnd[15]); 1048 break; 1049 } 1050 1051 1052 /* Problem was not a check condition 1053 * Pass it up to the upper layers... 1054 */ 1055 if (ei->ScsiStatus) { 1056 dev_warn(&h->pdev->dev, "cp %p has status 0x%x " 1057 "Sense: 0x%x, ASC: 0x%x, ASCQ: 0x%x, " 1058 "Returning result: 0x%x\n", 1059 cp, ei->ScsiStatus, 1060 sense_key, asc, ascq, 1061 cmd->result); 1062 } else { /* scsi status is zero??? How??? */ 1063 dev_warn(&h->pdev->dev, "cp %p SCSI status was 0. " 1064 "Returning no connection.\n", cp), 1065 1066 /* Ordinarily, this case should never happen, 1067 * but there is a bug in some released firmware 1068 * revisions that allows it to happen if, for 1069 * example, a 4100 backplane loses power and 1070 * the tape drive is in it. We assume that 1071 * it's a fatal error of some kind because we 1072 * can't show that it wasn't. We will make it 1073 * look like selection timeout since that is 1074 * the most common reason for this to occur, 1075 * and it's severe enough. 1076 */ 1077 1078 cmd->result = DID_NO_CONNECT << 16; 1079 } 1080 break; 1081 1082 case CMD_DATA_UNDERRUN: /* let mid layer handle it. */ 1083 break; 1084 case CMD_DATA_OVERRUN: 1085 dev_warn(&h->pdev->dev, "cp %p has" 1086 " completed with data overrun " 1087 "reported\n", cp); 1088 break; 1089 case CMD_INVALID: { 1090 /* print_bytes(cp, sizeof(*cp), 1, 0); 1091 print_cmd(cp); */ 1092 /* We get CMD_INVALID if you address a non-existent device 1093 * instead of a selection timeout (no response). You will 1094 * see this if you yank out a drive, then try to access it. 1095 * This is kind of a shame because it means that any other 1096 * CMD_INVALID (e.g. driver bug) will get interpreted as a 1097 * missing target. */ 1098 cmd->result = DID_NO_CONNECT << 16; 1099 } 1100 break; 1101 case CMD_PROTOCOL_ERR: 1102 dev_warn(&h->pdev->dev, "cp %p has " 1103 "protocol error \n", cp); 1104 break; 1105 case CMD_HARDWARE_ERR: 1106 cmd->result = DID_ERROR << 16; 1107 dev_warn(&h->pdev->dev, "cp %p had hardware error\n", cp); 1108 break; 1109 case CMD_CONNECTION_LOST: 1110 cmd->result = DID_ERROR << 16; 1111 dev_warn(&h->pdev->dev, "cp %p had connection lost\n", cp); 1112 break; 1113 case CMD_ABORTED: 1114 cmd->result = DID_ABORT << 16; 1115 dev_warn(&h->pdev->dev, "cp %p was aborted with status 0x%x\n", 1116 cp, ei->ScsiStatus); 1117 break; 1118 case CMD_ABORT_FAILED: 1119 cmd->result = DID_ERROR << 16; 1120 dev_warn(&h->pdev->dev, "cp %p reports abort failed\n", cp); 1121 break; 1122 case CMD_UNSOLICITED_ABORT: 1123 cmd->result = DID_RESET << 16; 1124 dev_warn(&h->pdev->dev, "cp %p aborted do to an unsolicited " 1125 "abort\n", cp); 1126 break; 1127 case CMD_TIMEOUT: 1128 cmd->result = DID_TIME_OUT << 16; 1129 dev_warn(&h->pdev->dev, "cp %p timedout\n", cp); 1130 break; 1131 default: 1132 cmd->result = DID_ERROR << 16; 1133 dev_warn(&h->pdev->dev, "cp %p returned unknown status %x\n", 1134 cp, ei->CommandStatus); 1135 } 1136 cmd->scsi_done(cmd); 1137 cmd_free(h, cp); 1138 } 1139 1140 static int hpsa_scsi_detect(struct ctlr_info *h) 1141 { 1142 struct Scsi_Host *sh; 1143 int error; 1144 1145 sh = scsi_host_alloc(&hpsa_driver_template, sizeof(h)); 1146 if (sh == NULL) 1147 goto fail; 1148 1149 sh->io_port = 0; 1150 sh->n_io_port = 0; 1151 sh->this_id = -1; 1152 sh->max_channel = 3; 1153 sh->max_cmd_len = MAX_COMMAND_SIZE; 1154 sh->max_lun = HPSA_MAX_LUN; 1155 sh->max_id = HPSA_MAX_LUN; 1156 sh->can_queue = h->nr_cmds; 1157 sh->cmd_per_lun = h->nr_cmds; 1158 sh->sg_tablesize = h->maxsgentries; 1159 h->scsi_host = sh; 1160 sh->hostdata[0] = (unsigned long) h; 1161 sh->irq = h->intr[PERF_MODE_INT]; 1162 sh->unique_id = sh->irq; 1163 error = scsi_add_host(sh, &h->pdev->dev); 1164 if (error) 1165 goto fail_host_put; 1166 scsi_scan_host(sh); 1167 return 0; 1168 1169 fail_host_put: 1170 dev_err(&h->pdev->dev, "hpsa_scsi_detect: scsi_add_host" 1171 " failed for controller %d\n", h->ctlr); 1172 scsi_host_put(sh); 1173 return error; 1174 fail: 1175 dev_err(&h->pdev->dev, "hpsa_scsi_detect: scsi_host_alloc" 1176 " failed for controller %d\n", h->ctlr); 1177 return -ENOMEM; 1178 } 1179 1180 static void hpsa_pci_unmap(struct pci_dev *pdev, 1181 struct CommandList *c, int sg_used, int data_direction) 1182 { 1183 int i; 1184 union u64bit addr64; 1185 1186 for (i = 0; i < sg_used; i++) { 1187 addr64.val32.lower = c->SG[i].Addr.lower; 1188 addr64.val32.upper = c->SG[i].Addr.upper; 1189 pci_unmap_single(pdev, (dma_addr_t) addr64.val, c->SG[i].Len, 1190 data_direction); 1191 } 1192 } 1193 1194 static void hpsa_map_one(struct pci_dev *pdev, 1195 struct CommandList *cp, 1196 unsigned char *buf, 1197 size_t buflen, 1198 int data_direction) 1199 { 1200 u64 addr64; 1201 1202 if (buflen == 0 || data_direction == PCI_DMA_NONE) { 1203 cp->Header.SGList = 0; 1204 cp->Header.SGTotal = 0; 1205 return; 1206 } 1207 1208 addr64 = (u64) pci_map_single(pdev, buf, buflen, data_direction); 1209 cp->SG[0].Addr.lower = 1210 (u32) (addr64 & (u64) 0x00000000FFFFFFFF); 1211 cp->SG[0].Addr.upper = 1212 (u32) ((addr64 >> 32) & (u64) 0x00000000FFFFFFFF); 1213 cp->SG[0].Len = buflen; 1214 cp->Header.SGList = (u8) 1; /* no. SGs contig in this cmd */ 1215 cp->Header.SGTotal = (u16) 1; /* total sgs in this cmd list */ 1216 } 1217 1218 static inline void hpsa_scsi_do_simple_cmd_core(struct ctlr_info *h, 1219 struct CommandList *c) 1220 { 1221 DECLARE_COMPLETION_ONSTACK(wait); 1222 1223 c->waiting = &wait; 1224 enqueue_cmd_and_start_io(h, c); 1225 wait_for_completion(&wait); 1226 } 1227 1228 static void hpsa_scsi_do_simple_cmd_with_retry(struct ctlr_info *h, 1229 struct CommandList *c, int data_direction) 1230 { 1231 int retry_count = 0; 1232 1233 do { 1234 memset(c->err_info, 0, sizeof(c->err_info)); 1235 hpsa_scsi_do_simple_cmd_core(h, c); 1236 retry_count++; 1237 } while (check_for_unit_attention(h, c) && retry_count <= 3); 1238 hpsa_pci_unmap(h->pdev, c, 1, data_direction); 1239 } 1240 1241 static void hpsa_scsi_interpret_error(struct CommandList *cp) 1242 { 1243 struct ErrorInfo *ei; 1244 struct device *d = &cp->h->pdev->dev; 1245 1246 ei = cp->err_info; 1247 switch (ei->CommandStatus) { 1248 case CMD_TARGET_STATUS: 1249 dev_warn(d, "cmd %p has completed with errors\n", cp); 1250 dev_warn(d, "cmd %p has SCSI Status = %x\n", cp, 1251 ei->ScsiStatus); 1252 if (ei->ScsiStatus == 0) 1253 dev_warn(d, "SCSI status is abnormally zero. " 1254 "(probably indicates selection timeout " 1255 "reported incorrectly due to a known " 1256 "firmware bug, circa July, 2001.)\n"); 1257 break; 1258 case CMD_DATA_UNDERRUN: /* let mid layer handle it. */ 1259 dev_info(d, "UNDERRUN\n"); 1260 break; 1261 case CMD_DATA_OVERRUN: 1262 dev_warn(d, "cp %p has completed with data overrun\n", cp); 1263 break; 1264 case CMD_INVALID: { 1265 /* controller unfortunately reports SCSI passthru's 1266 * to non-existent targets as invalid commands. 1267 */ 1268 dev_warn(d, "cp %p is reported invalid (probably means " 1269 "target device no longer present)\n", cp); 1270 /* print_bytes((unsigned char *) cp, sizeof(*cp), 1, 0); 1271 print_cmd(cp); */ 1272 } 1273 break; 1274 case CMD_PROTOCOL_ERR: 1275 dev_warn(d, "cp %p has protocol error \n", cp); 1276 break; 1277 case CMD_HARDWARE_ERR: 1278 /* cmd->result = DID_ERROR << 16; */ 1279 dev_warn(d, "cp %p had hardware error\n", cp); 1280 break; 1281 case CMD_CONNECTION_LOST: 1282 dev_warn(d, "cp %p had connection lost\n", cp); 1283 break; 1284 case CMD_ABORTED: 1285 dev_warn(d, "cp %p was aborted\n", cp); 1286 break; 1287 case CMD_ABORT_FAILED: 1288 dev_warn(d, "cp %p reports abort failed\n", cp); 1289 break; 1290 case CMD_UNSOLICITED_ABORT: 1291 dev_warn(d, "cp %p aborted due to an unsolicited abort\n", cp); 1292 break; 1293 case CMD_TIMEOUT: 1294 dev_warn(d, "cp %p timed out\n", cp); 1295 break; 1296 default: 1297 dev_warn(d, "cp %p returned unknown status %x\n", cp, 1298 ei->CommandStatus); 1299 } 1300 } 1301 1302 static int hpsa_scsi_do_inquiry(struct ctlr_info *h, unsigned char *scsi3addr, 1303 unsigned char page, unsigned char *buf, 1304 unsigned char bufsize) 1305 { 1306 int rc = IO_OK; 1307 struct CommandList *c; 1308 struct ErrorInfo *ei; 1309 1310 c = cmd_special_alloc(h); 1311 1312 if (c == NULL) { /* trouble... */ 1313 dev_warn(&h->pdev->dev, "cmd_special_alloc returned NULL!\n"); 1314 return -ENOMEM; 1315 } 1316 1317 fill_cmd(c, HPSA_INQUIRY, h, buf, bufsize, page, scsi3addr, TYPE_CMD); 1318 hpsa_scsi_do_simple_cmd_with_retry(h, c, PCI_DMA_FROMDEVICE); 1319 ei = c->err_info; 1320 if (ei->CommandStatus != 0 && ei->CommandStatus != CMD_DATA_UNDERRUN) { 1321 hpsa_scsi_interpret_error(c); 1322 rc = -1; 1323 } 1324 cmd_special_free(h, c); 1325 return rc; 1326 } 1327 1328 static int hpsa_send_reset(struct ctlr_info *h, unsigned char *scsi3addr) 1329 { 1330 int rc = IO_OK; 1331 struct CommandList *c; 1332 struct ErrorInfo *ei; 1333 1334 c = cmd_special_alloc(h); 1335 1336 if (c == NULL) { /* trouble... */ 1337 dev_warn(&h->pdev->dev, "cmd_special_alloc returned NULL!\n"); 1338 return -ENOMEM; 1339 } 1340 1341 fill_cmd(c, HPSA_DEVICE_RESET_MSG, h, NULL, 0, 0, scsi3addr, TYPE_MSG); 1342 hpsa_scsi_do_simple_cmd_core(h, c); 1343 /* no unmap needed here because no data xfer. */ 1344 1345 ei = c->err_info; 1346 if (ei->CommandStatus != 0) { 1347 hpsa_scsi_interpret_error(c); 1348 rc = -1; 1349 } 1350 cmd_special_free(h, c); 1351 return rc; 1352 } 1353 1354 static void hpsa_get_raid_level(struct ctlr_info *h, 1355 unsigned char *scsi3addr, unsigned char *raid_level) 1356 { 1357 int rc; 1358 unsigned char *buf; 1359 1360 *raid_level = RAID_UNKNOWN; 1361 buf = kzalloc(64, GFP_KERNEL); 1362 if (!buf) 1363 return; 1364 rc = hpsa_scsi_do_inquiry(h, scsi3addr, 0xC1, buf, 64); 1365 if (rc == 0) 1366 *raid_level = buf[8]; 1367 if (*raid_level > RAID_UNKNOWN) 1368 *raid_level = RAID_UNKNOWN; 1369 kfree(buf); 1370 return; 1371 } 1372 1373 /* Get the device id from inquiry page 0x83 */ 1374 static int hpsa_get_device_id(struct ctlr_info *h, unsigned char *scsi3addr, 1375 unsigned char *device_id, int buflen) 1376 { 1377 int rc; 1378 unsigned char *buf; 1379 1380 if (buflen > 16) 1381 buflen = 16; 1382 buf = kzalloc(64, GFP_KERNEL); 1383 if (!buf) 1384 return -1; 1385 rc = hpsa_scsi_do_inquiry(h, scsi3addr, 0x83, buf, 64); 1386 if (rc == 0) 1387 memcpy(device_id, &buf[8], buflen); 1388 kfree(buf); 1389 return rc != 0; 1390 } 1391 1392 static int hpsa_scsi_do_report_luns(struct ctlr_info *h, int logical, 1393 struct ReportLUNdata *buf, int bufsize, 1394 int extended_response) 1395 { 1396 int rc = IO_OK; 1397 struct CommandList *c; 1398 unsigned char scsi3addr[8]; 1399 struct ErrorInfo *ei; 1400 1401 c = cmd_special_alloc(h); 1402 if (c == NULL) { /* trouble... */ 1403 dev_err(&h->pdev->dev, "cmd_special_alloc returned NULL!\n"); 1404 return -1; 1405 } 1406 /* address the controller */ 1407 memset(scsi3addr, 0, sizeof(scsi3addr)); 1408 fill_cmd(c, logical ? HPSA_REPORT_LOG : HPSA_REPORT_PHYS, h, 1409 buf, bufsize, 0, scsi3addr, TYPE_CMD); 1410 if (extended_response) 1411 c->Request.CDB[1] = extended_response; 1412 hpsa_scsi_do_simple_cmd_with_retry(h, c, PCI_DMA_FROMDEVICE); 1413 ei = c->err_info; 1414 if (ei->CommandStatus != 0 && 1415 ei->CommandStatus != CMD_DATA_UNDERRUN) { 1416 hpsa_scsi_interpret_error(c); 1417 rc = -1; 1418 } 1419 cmd_special_free(h, c); 1420 return rc; 1421 } 1422 1423 static inline int hpsa_scsi_do_report_phys_luns(struct ctlr_info *h, 1424 struct ReportLUNdata *buf, 1425 int bufsize, int extended_response) 1426 { 1427 return hpsa_scsi_do_report_luns(h, 0, buf, bufsize, extended_response); 1428 } 1429 1430 static inline int hpsa_scsi_do_report_log_luns(struct ctlr_info *h, 1431 struct ReportLUNdata *buf, int bufsize) 1432 { 1433 return hpsa_scsi_do_report_luns(h, 1, buf, bufsize, 0); 1434 } 1435 1436 static inline void hpsa_set_bus_target_lun(struct hpsa_scsi_dev_t *device, 1437 int bus, int target, int lun) 1438 { 1439 device->bus = bus; 1440 device->target = target; 1441 device->lun = lun; 1442 } 1443 1444 static int hpsa_update_device_info(struct ctlr_info *h, 1445 unsigned char scsi3addr[], struct hpsa_scsi_dev_t *this_device) 1446 { 1447 #define OBDR_TAPE_INQ_SIZE 49 1448 unsigned char *inq_buff; 1449 1450 inq_buff = kzalloc(OBDR_TAPE_INQ_SIZE, GFP_KERNEL); 1451 if (!inq_buff) 1452 goto bail_out; 1453 1454 /* Do an inquiry to the device to see what it is. */ 1455 if (hpsa_scsi_do_inquiry(h, scsi3addr, 0, inq_buff, 1456 (unsigned char) OBDR_TAPE_INQ_SIZE) != 0) { 1457 /* Inquiry failed (msg printed already) */ 1458 dev_err(&h->pdev->dev, 1459 "hpsa_update_device_info: inquiry failed\n"); 1460 goto bail_out; 1461 } 1462 1463 this_device->devtype = (inq_buff[0] & 0x1f); 1464 memcpy(this_device->scsi3addr, scsi3addr, 8); 1465 memcpy(this_device->vendor, &inq_buff[8], 1466 sizeof(this_device->vendor)); 1467 memcpy(this_device->model, &inq_buff[16], 1468 sizeof(this_device->model)); 1469 memcpy(this_device->revision, &inq_buff[32], 1470 sizeof(this_device->revision)); 1471 memset(this_device->device_id, 0, 1472 sizeof(this_device->device_id)); 1473 hpsa_get_device_id(h, scsi3addr, this_device->device_id, 1474 sizeof(this_device->device_id)); 1475 1476 if (this_device->devtype == TYPE_DISK && 1477 is_logical_dev_addr_mode(scsi3addr)) 1478 hpsa_get_raid_level(h, scsi3addr, &this_device->raid_level); 1479 else 1480 this_device->raid_level = RAID_UNKNOWN; 1481 1482 kfree(inq_buff); 1483 return 0; 1484 1485 bail_out: 1486 kfree(inq_buff); 1487 return 1; 1488 } 1489 1490 static unsigned char *msa2xxx_model[] = { 1491 "MSA2012", 1492 "MSA2024", 1493 "MSA2312", 1494 "MSA2324", 1495 NULL, 1496 }; 1497 1498 static int is_msa2xxx(struct ctlr_info *h, struct hpsa_scsi_dev_t *device) 1499 { 1500 int i; 1501 1502 for (i = 0; msa2xxx_model[i]; i++) 1503 if (strncmp(device->model, msa2xxx_model[i], 1504 strlen(msa2xxx_model[i])) == 0) 1505 return 1; 1506 return 0; 1507 } 1508 1509 /* Helper function to assign bus, target, lun mapping of devices. 1510 * Puts non-msa2xxx logical volumes on bus 0, msa2xxx logical 1511 * volumes on bus 1, physical devices on bus 2. and the hba on bus 3. 1512 * Logical drive target and lun are assigned at this time, but 1513 * physical device lun and target assignment are deferred (assigned 1514 * in hpsa_find_target_lun, called by hpsa_scsi_add_entry.) 1515 */ 1516 static void figure_bus_target_lun(struct ctlr_info *h, 1517 u8 *lunaddrbytes, int *bus, int *target, int *lun, 1518 struct hpsa_scsi_dev_t *device) 1519 { 1520 u32 lunid; 1521 1522 if (is_logical_dev_addr_mode(lunaddrbytes)) { 1523 /* logical device */ 1524 if (unlikely(is_scsi_rev_5(h))) { 1525 /* p1210m, logical drives lun assignments 1526 * match SCSI REPORT LUNS data. 1527 */ 1528 lunid = le32_to_cpu(*((__le32 *) lunaddrbytes)); 1529 *bus = 0; 1530 *target = 0; 1531 *lun = (lunid & 0x3fff) + 1; 1532 } else { 1533 /* not p1210m... */ 1534 lunid = le32_to_cpu(*((__le32 *) lunaddrbytes)); 1535 if (is_msa2xxx(h, device)) { 1536 /* msa2xxx way, put logicals on bus 1 1537 * and match target/lun numbers box 1538 * reports. 1539 */ 1540 *bus = 1; 1541 *target = (lunid >> 16) & 0x3fff; 1542 *lun = lunid & 0x00ff; 1543 } else { 1544 /* Traditional smart array way. */ 1545 *bus = 0; 1546 *lun = 0; 1547 *target = lunid & 0x3fff; 1548 } 1549 } 1550 } else { 1551 /* physical device */ 1552 if (is_hba_lunid(lunaddrbytes)) 1553 if (unlikely(is_scsi_rev_5(h))) { 1554 *bus = 0; /* put p1210m ctlr at 0,0,0 */ 1555 *target = 0; 1556 *lun = 0; 1557 return; 1558 } else 1559 *bus = 3; /* traditional smartarray */ 1560 else 1561 *bus = 2; /* physical disk */ 1562 *target = -1; 1563 *lun = -1; /* we will fill these in later. */ 1564 } 1565 } 1566 1567 /* 1568 * If there is no lun 0 on a target, linux won't find any devices. 1569 * For the MSA2xxx boxes, we have to manually detect the enclosure 1570 * which is at lun zero, as CCISS_REPORT_PHYSICAL_LUNS doesn't report 1571 * it for some reason. *tmpdevice is the target we're adding, 1572 * this_device is a pointer into the current element of currentsd[] 1573 * that we're building up in update_scsi_devices(), below. 1574 * lunzerobits is a bitmap that tracks which targets already have a 1575 * lun 0 assigned. 1576 * Returns 1 if an enclosure was added, 0 if not. 1577 */ 1578 static int add_msa2xxx_enclosure_device(struct ctlr_info *h, 1579 struct hpsa_scsi_dev_t *tmpdevice, 1580 struct hpsa_scsi_dev_t *this_device, u8 *lunaddrbytes, 1581 int bus, int target, int lun, unsigned long lunzerobits[], 1582 int *nmsa2xxx_enclosures) 1583 { 1584 unsigned char scsi3addr[8]; 1585 1586 if (test_bit(target, lunzerobits)) 1587 return 0; /* There is already a lun 0 on this target. */ 1588 1589 if (!is_logical_dev_addr_mode(lunaddrbytes)) 1590 return 0; /* It's the logical targets that may lack lun 0. */ 1591 1592 if (!is_msa2xxx(h, tmpdevice)) 1593 return 0; /* It's only the MSA2xxx that have this problem. */ 1594 1595 if (lun == 0) /* if lun is 0, then obviously we have a lun 0. */ 1596 return 0; 1597 1598 if (is_hba_lunid(scsi3addr)) 1599 return 0; /* Don't add the RAID controller here. */ 1600 1601 if (is_scsi_rev_5(h)) 1602 return 0; /* p1210m doesn't need to do this. */ 1603 1604 #define MAX_MSA2XXX_ENCLOSURES 32 1605 if (*nmsa2xxx_enclosures >= MAX_MSA2XXX_ENCLOSURES) { 1606 dev_warn(&h->pdev->dev, "Maximum number of MSA2XXX " 1607 "enclosures exceeded. Check your hardware " 1608 "configuration."); 1609 return 0; 1610 } 1611 1612 memset(scsi3addr, 0, 8); 1613 scsi3addr[3] = target; 1614 if (hpsa_update_device_info(h, scsi3addr, this_device)) 1615 return 0; 1616 (*nmsa2xxx_enclosures)++; 1617 hpsa_set_bus_target_lun(this_device, bus, target, 0); 1618 set_bit(target, lunzerobits); 1619 return 1; 1620 } 1621 1622 /* 1623 * Do CISS_REPORT_PHYS and CISS_REPORT_LOG. Data is returned in physdev, 1624 * logdev. The number of luns in physdev and logdev are returned in 1625 * *nphysicals and *nlogicals, respectively. 1626 * Returns 0 on success, -1 otherwise. 1627 */ 1628 static int hpsa_gather_lun_info(struct ctlr_info *h, 1629 int reportlunsize, 1630 struct ReportLUNdata *physdev, u32 *nphysicals, 1631 struct ReportLUNdata *logdev, u32 *nlogicals) 1632 { 1633 if (hpsa_scsi_do_report_phys_luns(h, physdev, reportlunsize, 0)) { 1634 dev_err(&h->pdev->dev, "report physical LUNs failed.\n"); 1635 return -1; 1636 } 1637 *nphysicals = be32_to_cpu(*((__be32 *)physdev->LUNListLength)) / 8; 1638 if (*nphysicals > HPSA_MAX_PHYS_LUN) { 1639 dev_warn(&h->pdev->dev, "maximum physical LUNs (%d) exceeded." 1640 " %d LUNs ignored.\n", HPSA_MAX_PHYS_LUN, 1641 *nphysicals - HPSA_MAX_PHYS_LUN); 1642 *nphysicals = HPSA_MAX_PHYS_LUN; 1643 } 1644 if (hpsa_scsi_do_report_log_luns(h, logdev, reportlunsize)) { 1645 dev_err(&h->pdev->dev, "report logical LUNs failed.\n"); 1646 return -1; 1647 } 1648 *nlogicals = be32_to_cpu(*((__be32 *) logdev->LUNListLength)) / 8; 1649 /* Reject Logicals in excess of our max capability. */ 1650 if (*nlogicals > HPSA_MAX_LUN) { 1651 dev_warn(&h->pdev->dev, 1652 "maximum logical LUNs (%d) exceeded. " 1653 "%d LUNs ignored.\n", HPSA_MAX_LUN, 1654 *nlogicals - HPSA_MAX_LUN); 1655 *nlogicals = HPSA_MAX_LUN; 1656 } 1657 if (*nlogicals + *nphysicals > HPSA_MAX_PHYS_LUN) { 1658 dev_warn(&h->pdev->dev, 1659 "maximum logical + physical LUNs (%d) exceeded. " 1660 "%d LUNs ignored.\n", HPSA_MAX_PHYS_LUN, 1661 *nphysicals + *nlogicals - HPSA_MAX_PHYS_LUN); 1662 *nlogicals = HPSA_MAX_PHYS_LUN - *nphysicals; 1663 } 1664 return 0; 1665 } 1666 1667 u8 *figure_lunaddrbytes(struct ctlr_info *h, int raid_ctlr_position, int i, 1668 int nphysicals, int nlogicals, struct ReportLUNdata *physdev_list, 1669 struct ReportLUNdata *logdev_list) 1670 { 1671 /* Helper function, figure out where the LUN ID info is coming from 1672 * given index i, lists of physical and logical devices, where in 1673 * the list the raid controller is supposed to appear (first or last) 1674 */ 1675 1676 int logicals_start = nphysicals + (raid_ctlr_position == 0); 1677 int last_device = nphysicals + nlogicals + (raid_ctlr_position == 0); 1678 1679 if (i == raid_ctlr_position) 1680 return RAID_CTLR_LUNID; 1681 1682 if (i < logicals_start) 1683 return &physdev_list->LUN[i - (raid_ctlr_position == 0)][0]; 1684 1685 if (i < last_device) 1686 return &logdev_list->LUN[i - nphysicals - 1687 (raid_ctlr_position == 0)][0]; 1688 BUG(); 1689 return NULL; 1690 } 1691 1692 static void hpsa_update_scsi_devices(struct ctlr_info *h, int hostno) 1693 { 1694 /* the idea here is we could get notified 1695 * that some devices have changed, so we do a report 1696 * physical luns and report logical luns cmd, and adjust 1697 * our list of devices accordingly. 1698 * 1699 * The scsi3addr's of devices won't change so long as the 1700 * adapter is not reset. That means we can rescan and 1701 * tell which devices we already know about, vs. new 1702 * devices, vs. disappearing devices. 1703 */ 1704 struct ReportLUNdata *physdev_list = NULL; 1705 struct ReportLUNdata *logdev_list = NULL; 1706 unsigned char *inq_buff = NULL; 1707 u32 nphysicals = 0; 1708 u32 nlogicals = 0; 1709 u32 ndev_allocated = 0; 1710 struct hpsa_scsi_dev_t **currentsd, *this_device, *tmpdevice; 1711 int ncurrent = 0; 1712 int reportlunsize = sizeof(*physdev_list) + HPSA_MAX_PHYS_LUN * 8; 1713 int i, nmsa2xxx_enclosures, ndevs_to_allocate; 1714 int bus, target, lun; 1715 int raid_ctlr_position; 1716 DECLARE_BITMAP(lunzerobits, HPSA_MAX_TARGETS_PER_CTLR); 1717 1718 currentsd = kzalloc(sizeof(*currentsd) * HPSA_MAX_SCSI_DEVS_PER_HBA, 1719 GFP_KERNEL); 1720 physdev_list = kzalloc(reportlunsize, GFP_KERNEL); 1721 logdev_list = kzalloc(reportlunsize, GFP_KERNEL); 1722 inq_buff = kmalloc(OBDR_TAPE_INQ_SIZE, GFP_KERNEL); 1723 tmpdevice = kzalloc(sizeof(*tmpdevice), GFP_KERNEL); 1724 1725 if (!currentsd || !physdev_list || !logdev_list || 1726 !inq_buff || !tmpdevice) { 1727 dev_err(&h->pdev->dev, "out of memory\n"); 1728 goto out; 1729 } 1730 memset(lunzerobits, 0, sizeof(lunzerobits)); 1731 1732 if (hpsa_gather_lun_info(h, reportlunsize, physdev_list, &nphysicals, 1733 logdev_list, &nlogicals)) 1734 goto out; 1735 1736 /* We might see up to 32 MSA2xxx enclosures, actually 8 of them 1737 * but each of them 4 times through different paths. The plus 1 1738 * is for the RAID controller. 1739 */ 1740 ndevs_to_allocate = nphysicals + nlogicals + MAX_MSA2XXX_ENCLOSURES + 1; 1741 1742 /* Allocate the per device structures */ 1743 for (i = 0; i < ndevs_to_allocate; i++) { 1744 currentsd[i] = kzalloc(sizeof(*currentsd[i]), GFP_KERNEL); 1745 if (!currentsd[i]) { 1746 dev_warn(&h->pdev->dev, "out of memory at %s:%d\n", 1747 __FILE__, __LINE__); 1748 goto out; 1749 } 1750 ndev_allocated++; 1751 } 1752 1753 if (unlikely(is_scsi_rev_5(h))) 1754 raid_ctlr_position = 0; 1755 else 1756 raid_ctlr_position = nphysicals + nlogicals; 1757 1758 /* adjust our table of devices */ 1759 nmsa2xxx_enclosures = 0; 1760 for (i = 0; i < nphysicals + nlogicals + 1; i++) { 1761 u8 *lunaddrbytes; 1762 1763 /* Figure out where the LUN ID info is coming from */ 1764 lunaddrbytes = figure_lunaddrbytes(h, raid_ctlr_position, 1765 i, nphysicals, nlogicals, physdev_list, logdev_list); 1766 /* skip masked physical devices. */ 1767 if (lunaddrbytes[3] & 0xC0 && 1768 i < nphysicals + (raid_ctlr_position == 0)) 1769 continue; 1770 1771 /* Get device type, vendor, model, device id */ 1772 if (hpsa_update_device_info(h, lunaddrbytes, tmpdevice)) 1773 continue; /* skip it if we can't talk to it. */ 1774 figure_bus_target_lun(h, lunaddrbytes, &bus, &target, &lun, 1775 tmpdevice); 1776 this_device = currentsd[ncurrent]; 1777 1778 /* 1779 * For the msa2xxx boxes, we have to insert a LUN 0 which 1780 * doesn't show up in CCISS_REPORT_PHYSICAL data, but there 1781 * is nonetheless an enclosure device there. We have to 1782 * present that otherwise linux won't find anything if 1783 * there is no lun 0. 1784 */ 1785 if (add_msa2xxx_enclosure_device(h, tmpdevice, this_device, 1786 lunaddrbytes, bus, target, lun, lunzerobits, 1787 &nmsa2xxx_enclosures)) { 1788 ncurrent++; 1789 this_device = currentsd[ncurrent]; 1790 } 1791 1792 *this_device = *tmpdevice; 1793 hpsa_set_bus_target_lun(this_device, bus, target, lun); 1794 1795 switch (this_device->devtype) { 1796 case TYPE_ROM: { 1797 /* We don't *really* support actual CD-ROM devices, 1798 * just "One Button Disaster Recovery" tape drive 1799 * which temporarily pretends to be a CD-ROM drive. 1800 * So we check that the device is really an OBDR tape 1801 * device by checking for "$DR-10" in bytes 43-48 of 1802 * the inquiry data. 1803 */ 1804 char obdr_sig[7]; 1805 #define OBDR_TAPE_SIG "$DR-10" 1806 strncpy(obdr_sig, &inq_buff[43], 6); 1807 obdr_sig[6] = '\0'; 1808 if (strncmp(obdr_sig, OBDR_TAPE_SIG, 6) != 0) 1809 /* Not OBDR device, ignore it. */ 1810 break; 1811 } 1812 ncurrent++; 1813 break; 1814 case TYPE_DISK: 1815 if (i < nphysicals) 1816 break; 1817 ncurrent++; 1818 break; 1819 case TYPE_TAPE: 1820 case TYPE_MEDIUM_CHANGER: 1821 ncurrent++; 1822 break; 1823 case TYPE_RAID: 1824 /* Only present the Smartarray HBA as a RAID controller. 1825 * If it's a RAID controller other than the HBA itself 1826 * (an external RAID controller, MSA500 or similar) 1827 * don't present it. 1828 */ 1829 if (!is_hba_lunid(lunaddrbytes)) 1830 break; 1831 ncurrent++; 1832 break; 1833 default: 1834 break; 1835 } 1836 if (ncurrent >= HPSA_MAX_SCSI_DEVS_PER_HBA) 1837 break; 1838 } 1839 adjust_hpsa_scsi_table(h, hostno, currentsd, ncurrent); 1840 out: 1841 kfree(tmpdevice); 1842 for (i = 0; i < ndev_allocated; i++) 1843 kfree(currentsd[i]); 1844 kfree(currentsd); 1845 kfree(inq_buff); 1846 kfree(physdev_list); 1847 kfree(logdev_list); 1848 } 1849 1850 /* hpsa_scatter_gather takes a struct scsi_cmnd, (cmd), and does the pci 1851 * dma mapping and fills in the scatter gather entries of the 1852 * hpsa command, cp. 1853 */ 1854 static int hpsa_scatter_gather(struct ctlr_info *h, 1855 struct CommandList *cp, 1856 struct scsi_cmnd *cmd) 1857 { 1858 unsigned int len; 1859 struct scatterlist *sg; 1860 u64 addr64; 1861 int use_sg, i, sg_index, chained; 1862 struct SGDescriptor *curr_sg; 1863 1864 BUG_ON(scsi_sg_count(cmd) > h->maxsgentries); 1865 1866 use_sg = scsi_dma_map(cmd); 1867 if (use_sg < 0) 1868 return use_sg; 1869 1870 if (!use_sg) 1871 goto sglist_finished; 1872 1873 curr_sg = cp->SG; 1874 chained = 0; 1875 sg_index = 0; 1876 scsi_for_each_sg(cmd, sg, use_sg, i) { 1877 if (i == h->max_cmd_sg_entries - 1 && 1878 use_sg > h->max_cmd_sg_entries) { 1879 chained = 1; 1880 curr_sg = h->cmd_sg_list[cp->cmdindex]; 1881 sg_index = 0; 1882 } 1883 addr64 = (u64) sg_dma_address(sg); 1884 len = sg_dma_len(sg); 1885 curr_sg->Addr.lower = (u32) (addr64 & 0x0FFFFFFFFULL); 1886 curr_sg->Addr.upper = (u32) ((addr64 >> 32) & 0x0FFFFFFFFULL); 1887 curr_sg->Len = len; 1888 curr_sg->Ext = 0; /* we are not chaining */ 1889 curr_sg++; 1890 } 1891 1892 if (use_sg + chained > h->maxSG) 1893 h->maxSG = use_sg + chained; 1894 1895 if (chained) { 1896 cp->Header.SGList = h->max_cmd_sg_entries; 1897 cp->Header.SGTotal = (u16) (use_sg + 1); 1898 hpsa_map_sg_chain_block(h, cp); 1899 return 0; 1900 } 1901 1902 sglist_finished: 1903 1904 cp->Header.SGList = (u8) use_sg; /* no. SGs contig in this cmd */ 1905 cp->Header.SGTotal = (u16) use_sg; /* total sgs in this cmd list */ 1906 return 0; 1907 } 1908 1909 1910 static int hpsa_scsi_queue_command(struct scsi_cmnd *cmd, 1911 void (*done)(struct scsi_cmnd *)) 1912 { 1913 struct ctlr_info *h; 1914 struct hpsa_scsi_dev_t *dev; 1915 unsigned char scsi3addr[8]; 1916 struct CommandList *c; 1917 unsigned long flags; 1918 1919 /* Get the ptr to our adapter structure out of cmd->host. */ 1920 h = sdev_to_hba(cmd->device); 1921 dev = cmd->device->hostdata; 1922 if (!dev) { 1923 cmd->result = DID_NO_CONNECT << 16; 1924 done(cmd); 1925 return 0; 1926 } 1927 memcpy(scsi3addr, dev->scsi3addr, sizeof(scsi3addr)); 1928 1929 /* Need a lock as this is being allocated from the pool */ 1930 spin_lock_irqsave(&h->lock, flags); 1931 c = cmd_alloc(h); 1932 spin_unlock_irqrestore(&h->lock, flags); 1933 if (c == NULL) { /* trouble... */ 1934 dev_err(&h->pdev->dev, "cmd_alloc returned NULL!\n"); 1935 return SCSI_MLQUEUE_HOST_BUSY; 1936 } 1937 1938 /* Fill in the command list header */ 1939 1940 cmd->scsi_done = done; /* save this for use by completion code */ 1941 1942 /* save c in case we have to abort it */ 1943 cmd->host_scribble = (unsigned char *) c; 1944 1945 c->cmd_type = CMD_SCSI; 1946 c->scsi_cmd = cmd; 1947 c->Header.ReplyQueue = 0; /* unused in simple mode */ 1948 memcpy(&c->Header.LUN.LunAddrBytes[0], &scsi3addr[0], 8); 1949 c->Header.Tag.lower = (c->cmdindex << DIRECT_LOOKUP_SHIFT); 1950 c->Header.Tag.lower |= DIRECT_LOOKUP_BIT; 1951 1952 /* Fill in the request block... */ 1953 1954 c->Request.Timeout = 0; 1955 memset(c->Request.CDB, 0, sizeof(c->Request.CDB)); 1956 BUG_ON(cmd->cmd_len > sizeof(c->Request.CDB)); 1957 c->Request.CDBLen = cmd->cmd_len; 1958 memcpy(c->Request.CDB, cmd->cmnd, cmd->cmd_len); 1959 c->Request.Type.Type = TYPE_CMD; 1960 c->Request.Type.Attribute = ATTR_SIMPLE; 1961 switch (cmd->sc_data_direction) { 1962 case DMA_TO_DEVICE: 1963 c->Request.Type.Direction = XFER_WRITE; 1964 break; 1965 case DMA_FROM_DEVICE: 1966 c->Request.Type.Direction = XFER_READ; 1967 break; 1968 case DMA_NONE: 1969 c->Request.Type.Direction = XFER_NONE; 1970 break; 1971 case DMA_BIDIRECTIONAL: 1972 /* This can happen if a buggy application does a scsi passthru 1973 * and sets both inlen and outlen to non-zero. ( see 1974 * ../scsi/scsi_ioctl.c:scsi_ioctl_send_command() ) 1975 */ 1976 1977 c->Request.Type.Direction = XFER_RSVD; 1978 /* This is technically wrong, and hpsa controllers should 1979 * reject it with CMD_INVALID, which is the most correct 1980 * response, but non-fibre backends appear to let it 1981 * slide by, and give the same results as if this field 1982 * were set correctly. Either way is acceptable for 1983 * our purposes here. 1984 */ 1985 1986 break; 1987 1988 default: 1989 dev_err(&h->pdev->dev, "unknown data direction: %d\n", 1990 cmd->sc_data_direction); 1991 BUG(); 1992 break; 1993 } 1994 1995 if (hpsa_scatter_gather(h, c, cmd) < 0) { /* Fill SG list */ 1996 cmd_free(h, c); 1997 return SCSI_MLQUEUE_HOST_BUSY; 1998 } 1999 enqueue_cmd_and_start_io(h, c); 2000 /* the cmd'll come back via intr handler in complete_scsi_command() */ 2001 return 0; 2002 } 2003 2004 static void hpsa_scan_start(struct Scsi_Host *sh) 2005 { 2006 struct ctlr_info *h = shost_to_hba(sh); 2007 unsigned long flags; 2008 2009 /* wait until any scan already in progress is finished. */ 2010 while (1) { 2011 spin_lock_irqsave(&h->scan_lock, flags); 2012 if (h->scan_finished) 2013 break; 2014 spin_unlock_irqrestore(&h->scan_lock, flags); 2015 wait_event(h->scan_wait_queue, h->scan_finished); 2016 /* Note: We don't need to worry about a race between this 2017 * thread and driver unload because the midlayer will 2018 * have incremented the reference count, so unload won't 2019 * happen if we're in here. 2020 */ 2021 } 2022 h->scan_finished = 0; /* mark scan as in progress */ 2023 spin_unlock_irqrestore(&h->scan_lock, flags); 2024 2025 hpsa_update_scsi_devices(h, h->scsi_host->host_no); 2026 2027 spin_lock_irqsave(&h->scan_lock, flags); 2028 h->scan_finished = 1; /* mark scan as finished. */ 2029 wake_up_all(&h->scan_wait_queue); 2030 spin_unlock_irqrestore(&h->scan_lock, flags); 2031 } 2032 2033 static int hpsa_scan_finished(struct Scsi_Host *sh, 2034 unsigned long elapsed_time) 2035 { 2036 struct ctlr_info *h = shost_to_hba(sh); 2037 unsigned long flags; 2038 int finished; 2039 2040 spin_lock_irqsave(&h->scan_lock, flags); 2041 finished = h->scan_finished; 2042 spin_unlock_irqrestore(&h->scan_lock, flags); 2043 return finished; 2044 } 2045 2046 static int hpsa_change_queue_depth(struct scsi_device *sdev, 2047 int qdepth, int reason) 2048 { 2049 struct ctlr_info *h = sdev_to_hba(sdev); 2050 2051 if (reason != SCSI_QDEPTH_DEFAULT) 2052 return -ENOTSUPP; 2053 2054 if (qdepth < 1) 2055 qdepth = 1; 2056 else 2057 if (qdepth > h->nr_cmds) 2058 qdepth = h->nr_cmds; 2059 scsi_adjust_queue_depth(sdev, scsi_get_tag_type(sdev), qdepth); 2060 return sdev->queue_depth; 2061 } 2062 2063 static void hpsa_unregister_scsi(struct ctlr_info *h) 2064 { 2065 /* we are being forcibly unloaded, and may not refuse. */ 2066 scsi_remove_host(h->scsi_host); 2067 scsi_host_put(h->scsi_host); 2068 h->scsi_host = NULL; 2069 } 2070 2071 static int hpsa_register_scsi(struct ctlr_info *h) 2072 { 2073 int rc; 2074 2075 rc = hpsa_scsi_detect(h); 2076 if (rc != 0) 2077 dev_err(&h->pdev->dev, "hpsa_register_scsi: failed" 2078 " hpsa_scsi_detect(), rc is %d\n", rc); 2079 return rc; 2080 } 2081 2082 static int wait_for_device_to_become_ready(struct ctlr_info *h, 2083 unsigned char lunaddr[]) 2084 { 2085 int rc = 0; 2086 int count = 0; 2087 int waittime = 1; /* seconds */ 2088 struct CommandList *c; 2089 2090 c = cmd_special_alloc(h); 2091 if (!c) { 2092 dev_warn(&h->pdev->dev, "out of memory in " 2093 "wait_for_device_to_become_ready.\n"); 2094 return IO_ERROR; 2095 } 2096 2097 /* Send test unit ready until device ready, or give up. */ 2098 while (count < HPSA_TUR_RETRY_LIMIT) { 2099 2100 /* Wait for a bit. do this first, because if we send 2101 * the TUR right away, the reset will just abort it. 2102 */ 2103 msleep(1000 * waittime); 2104 count++; 2105 2106 /* Increase wait time with each try, up to a point. */ 2107 if (waittime < HPSA_MAX_WAIT_INTERVAL_SECS) 2108 waittime = waittime * 2; 2109 2110 /* Send the Test Unit Ready */ 2111 fill_cmd(c, TEST_UNIT_READY, h, NULL, 0, 0, lunaddr, TYPE_CMD); 2112 hpsa_scsi_do_simple_cmd_core(h, c); 2113 /* no unmap needed here because no data xfer. */ 2114 2115 if (c->err_info->CommandStatus == CMD_SUCCESS) 2116 break; 2117 2118 if (c->err_info->CommandStatus == CMD_TARGET_STATUS && 2119 c->err_info->ScsiStatus == SAM_STAT_CHECK_CONDITION && 2120 (c->err_info->SenseInfo[2] == NO_SENSE || 2121 c->err_info->SenseInfo[2] == UNIT_ATTENTION)) 2122 break; 2123 2124 dev_warn(&h->pdev->dev, "waiting %d secs " 2125 "for device to become ready.\n", waittime); 2126 rc = 1; /* device not ready. */ 2127 } 2128 2129 if (rc) 2130 dev_warn(&h->pdev->dev, "giving up on device.\n"); 2131 else 2132 dev_warn(&h->pdev->dev, "device is ready.\n"); 2133 2134 cmd_special_free(h, c); 2135 return rc; 2136 } 2137 2138 /* Need at least one of these error handlers to keep ../scsi/hosts.c from 2139 * complaining. Doing a host- or bus-reset can't do anything good here. 2140 */ 2141 static int hpsa_eh_device_reset_handler(struct scsi_cmnd *scsicmd) 2142 { 2143 int rc; 2144 struct ctlr_info *h; 2145 struct hpsa_scsi_dev_t *dev; 2146 2147 /* find the controller to which the command to be aborted was sent */ 2148 h = sdev_to_hba(scsicmd->device); 2149 if (h == NULL) /* paranoia */ 2150 return FAILED; 2151 dev = scsicmd->device->hostdata; 2152 if (!dev) { 2153 dev_err(&h->pdev->dev, "hpsa_eh_device_reset_handler: " 2154 "device lookup failed.\n"); 2155 return FAILED; 2156 } 2157 dev_warn(&h->pdev->dev, "resetting device %d:%d:%d:%d\n", 2158 h->scsi_host->host_no, dev->bus, dev->target, dev->lun); 2159 /* send a reset to the SCSI LUN which the command was sent to */ 2160 rc = hpsa_send_reset(h, dev->scsi3addr); 2161 if (rc == 0 && wait_for_device_to_become_ready(h, dev->scsi3addr) == 0) 2162 return SUCCESS; 2163 2164 dev_warn(&h->pdev->dev, "resetting device failed.\n"); 2165 return FAILED; 2166 } 2167 2168 /* 2169 * For operations that cannot sleep, a command block is allocated at init, 2170 * and managed by cmd_alloc() and cmd_free() using a simple bitmap to track 2171 * which ones are free or in use. Lock must be held when calling this. 2172 * cmd_free() is the complement. 2173 */ 2174 static struct CommandList *cmd_alloc(struct ctlr_info *h) 2175 { 2176 struct CommandList *c; 2177 int i; 2178 union u64bit temp64; 2179 dma_addr_t cmd_dma_handle, err_dma_handle; 2180 2181 do { 2182 i = find_first_zero_bit(h->cmd_pool_bits, h->nr_cmds); 2183 if (i == h->nr_cmds) 2184 return NULL; 2185 } while (test_and_set_bit 2186 (i & (BITS_PER_LONG - 1), 2187 h->cmd_pool_bits + (i / BITS_PER_LONG)) != 0); 2188 c = h->cmd_pool + i; 2189 memset(c, 0, sizeof(*c)); 2190 cmd_dma_handle = h->cmd_pool_dhandle 2191 + i * sizeof(*c); 2192 c->err_info = h->errinfo_pool + i; 2193 memset(c->err_info, 0, sizeof(*c->err_info)); 2194 err_dma_handle = h->errinfo_pool_dhandle 2195 + i * sizeof(*c->err_info); 2196 h->nr_allocs++; 2197 2198 c->cmdindex = i; 2199 2200 INIT_HLIST_NODE(&c->list); 2201 c->busaddr = (u32) cmd_dma_handle; 2202 temp64.val = (u64) err_dma_handle; 2203 c->ErrDesc.Addr.lower = temp64.val32.lower; 2204 c->ErrDesc.Addr.upper = temp64.val32.upper; 2205 c->ErrDesc.Len = sizeof(*c->err_info); 2206 2207 c->h = h; 2208 return c; 2209 } 2210 2211 /* For operations that can wait for kmalloc to possibly sleep, 2212 * this routine can be called. Lock need not be held to call 2213 * cmd_special_alloc. cmd_special_free() is the complement. 2214 */ 2215 static struct CommandList *cmd_special_alloc(struct ctlr_info *h) 2216 { 2217 struct CommandList *c; 2218 union u64bit temp64; 2219 dma_addr_t cmd_dma_handle, err_dma_handle; 2220 2221 c = pci_alloc_consistent(h->pdev, sizeof(*c), &cmd_dma_handle); 2222 if (c == NULL) 2223 return NULL; 2224 memset(c, 0, sizeof(*c)); 2225 2226 c->cmdindex = -1; 2227 2228 c->err_info = pci_alloc_consistent(h->pdev, sizeof(*c->err_info), 2229 &err_dma_handle); 2230 2231 if (c->err_info == NULL) { 2232 pci_free_consistent(h->pdev, 2233 sizeof(*c), c, cmd_dma_handle); 2234 return NULL; 2235 } 2236 memset(c->err_info, 0, sizeof(*c->err_info)); 2237 2238 INIT_HLIST_NODE(&c->list); 2239 c->busaddr = (u32) cmd_dma_handle; 2240 temp64.val = (u64) err_dma_handle; 2241 c->ErrDesc.Addr.lower = temp64.val32.lower; 2242 c->ErrDesc.Addr.upper = temp64.val32.upper; 2243 c->ErrDesc.Len = sizeof(*c->err_info); 2244 2245 c->h = h; 2246 return c; 2247 } 2248 2249 static void cmd_free(struct ctlr_info *h, struct CommandList *c) 2250 { 2251 int i; 2252 2253 i = c - h->cmd_pool; 2254 clear_bit(i & (BITS_PER_LONG - 1), 2255 h->cmd_pool_bits + (i / BITS_PER_LONG)); 2256 h->nr_frees++; 2257 } 2258 2259 static void cmd_special_free(struct ctlr_info *h, struct CommandList *c) 2260 { 2261 union u64bit temp64; 2262 2263 temp64.val32.lower = c->ErrDesc.Addr.lower; 2264 temp64.val32.upper = c->ErrDesc.Addr.upper; 2265 pci_free_consistent(h->pdev, sizeof(*c->err_info), 2266 c->err_info, (dma_addr_t) temp64.val); 2267 pci_free_consistent(h->pdev, sizeof(*c), 2268 c, (dma_addr_t) c->busaddr); 2269 } 2270 2271 #ifdef CONFIG_COMPAT 2272 2273 static int hpsa_ioctl32_passthru(struct scsi_device *dev, int cmd, void *arg) 2274 { 2275 IOCTL32_Command_struct __user *arg32 = 2276 (IOCTL32_Command_struct __user *) arg; 2277 IOCTL_Command_struct arg64; 2278 IOCTL_Command_struct __user *p = compat_alloc_user_space(sizeof(arg64)); 2279 int err; 2280 u32 cp; 2281 2282 err = 0; 2283 err |= copy_from_user(&arg64.LUN_info, &arg32->LUN_info, 2284 sizeof(arg64.LUN_info)); 2285 err |= copy_from_user(&arg64.Request, &arg32->Request, 2286 sizeof(arg64.Request)); 2287 err |= copy_from_user(&arg64.error_info, &arg32->error_info, 2288 sizeof(arg64.error_info)); 2289 err |= get_user(arg64.buf_size, &arg32->buf_size); 2290 err |= get_user(cp, &arg32->buf); 2291 arg64.buf = compat_ptr(cp); 2292 err |= copy_to_user(p, &arg64, sizeof(arg64)); 2293 2294 if (err) 2295 return -EFAULT; 2296 2297 err = hpsa_ioctl(dev, CCISS_PASSTHRU, (void *)p); 2298 if (err) 2299 return err; 2300 err |= copy_in_user(&arg32->error_info, &p->error_info, 2301 sizeof(arg32->error_info)); 2302 if (err) 2303 return -EFAULT; 2304 return err; 2305 } 2306 2307 static int hpsa_ioctl32_big_passthru(struct scsi_device *dev, 2308 int cmd, void *arg) 2309 { 2310 BIG_IOCTL32_Command_struct __user *arg32 = 2311 (BIG_IOCTL32_Command_struct __user *) arg; 2312 BIG_IOCTL_Command_struct arg64; 2313 BIG_IOCTL_Command_struct __user *p = 2314 compat_alloc_user_space(sizeof(arg64)); 2315 int err; 2316 u32 cp; 2317 2318 err = 0; 2319 err |= copy_from_user(&arg64.LUN_info, &arg32->LUN_info, 2320 sizeof(arg64.LUN_info)); 2321 err |= copy_from_user(&arg64.Request, &arg32->Request, 2322 sizeof(arg64.Request)); 2323 err |= copy_from_user(&arg64.error_info, &arg32->error_info, 2324 sizeof(arg64.error_info)); 2325 err |= get_user(arg64.buf_size, &arg32->buf_size); 2326 err |= get_user(arg64.malloc_size, &arg32->malloc_size); 2327 err |= get_user(cp, &arg32->buf); 2328 arg64.buf = compat_ptr(cp); 2329 err |= copy_to_user(p, &arg64, sizeof(arg64)); 2330 2331 if (err) 2332 return -EFAULT; 2333 2334 err = hpsa_ioctl(dev, CCISS_BIG_PASSTHRU, (void *)p); 2335 if (err) 2336 return err; 2337 err |= copy_in_user(&arg32->error_info, &p->error_info, 2338 sizeof(arg32->error_info)); 2339 if (err) 2340 return -EFAULT; 2341 return err; 2342 } 2343 2344 static int hpsa_compat_ioctl(struct scsi_device *dev, int cmd, void *arg) 2345 { 2346 switch (cmd) { 2347 case CCISS_GETPCIINFO: 2348 case CCISS_GETINTINFO: 2349 case CCISS_SETINTINFO: 2350 case CCISS_GETNODENAME: 2351 case CCISS_SETNODENAME: 2352 case CCISS_GETHEARTBEAT: 2353 case CCISS_GETBUSTYPES: 2354 case CCISS_GETFIRMVER: 2355 case CCISS_GETDRIVVER: 2356 case CCISS_REVALIDVOLS: 2357 case CCISS_DEREGDISK: 2358 case CCISS_REGNEWDISK: 2359 case CCISS_REGNEWD: 2360 case CCISS_RESCANDISK: 2361 case CCISS_GETLUNINFO: 2362 return hpsa_ioctl(dev, cmd, arg); 2363 2364 case CCISS_PASSTHRU32: 2365 return hpsa_ioctl32_passthru(dev, cmd, arg); 2366 case CCISS_BIG_PASSTHRU32: 2367 return hpsa_ioctl32_big_passthru(dev, cmd, arg); 2368 2369 default: 2370 return -ENOIOCTLCMD; 2371 } 2372 } 2373 #endif 2374 2375 static int hpsa_getpciinfo_ioctl(struct ctlr_info *h, void __user *argp) 2376 { 2377 struct hpsa_pci_info pciinfo; 2378 2379 if (!argp) 2380 return -EINVAL; 2381 pciinfo.domain = pci_domain_nr(h->pdev->bus); 2382 pciinfo.bus = h->pdev->bus->number; 2383 pciinfo.dev_fn = h->pdev->devfn; 2384 pciinfo.board_id = h->board_id; 2385 if (copy_to_user(argp, &pciinfo, sizeof(pciinfo))) 2386 return -EFAULT; 2387 return 0; 2388 } 2389 2390 static int hpsa_getdrivver_ioctl(struct ctlr_info *h, void __user *argp) 2391 { 2392 DriverVer_type DriverVer; 2393 unsigned char vmaj, vmin, vsubmin; 2394 int rc; 2395 2396 rc = sscanf(HPSA_DRIVER_VERSION, "%hhu.%hhu.%hhu", 2397 &vmaj, &vmin, &vsubmin); 2398 if (rc != 3) { 2399 dev_info(&h->pdev->dev, "driver version string '%s' " 2400 "unrecognized.", HPSA_DRIVER_VERSION); 2401 vmaj = 0; 2402 vmin = 0; 2403 vsubmin = 0; 2404 } 2405 DriverVer = (vmaj << 16) | (vmin << 8) | vsubmin; 2406 if (!argp) 2407 return -EINVAL; 2408 if (copy_to_user(argp, &DriverVer, sizeof(DriverVer_type))) 2409 return -EFAULT; 2410 return 0; 2411 } 2412 2413 static int hpsa_passthru_ioctl(struct ctlr_info *h, void __user *argp) 2414 { 2415 IOCTL_Command_struct iocommand; 2416 struct CommandList *c; 2417 char *buff = NULL; 2418 union u64bit temp64; 2419 2420 if (!argp) 2421 return -EINVAL; 2422 if (!capable(CAP_SYS_RAWIO)) 2423 return -EPERM; 2424 if (copy_from_user(&iocommand, argp, sizeof(iocommand))) 2425 return -EFAULT; 2426 if ((iocommand.buf_size < 1) && 2427 (iocommand.Request.Type.Direction != XFER_NONE)) { 2428 return -EINVAL; 2429 } 2430 if (iocommand.buf_size > 0) { 2431 buff = kmalloc(iocommand.buf_size, GFP_KERNEL); 2432 if (buff == NULL) 2433 return -EFAULT; 2434 } 2435 if (iocommand.Request.Type.Direction == XFER_WRITE) { 2436 /* Copy the data into the buffer we created */ 2437 if (copy_from_user(buff, iocommand.buf, iocommand.buf_size)) { 2438 kfree(buff); 2439 return -EFAULT; 2440 } 2441 } else 2442 memset(buff, 0, iocommand.buf_size); 2443 c = cmd_special_alloc(h); 2444 if (c == NULL) { 2445 kfree(buff); 2446 return -ENOMEM; 2447 } 2448 /* Fill in the command type */ 2449 c->cmd_type = CMD_IOCTL_PEND; 2450 /* Fill in Command Header */ 2451 c->Header.ReplyQueue = 0; /* unused in simple mode */ 2452 if (iocommand.buf_size > 0) { /* buffer to fill */ 2453 c->Header.SGList = 1; 2454 c->Header.SGTotal = 1; 2455 } else { /* no buffers to fill */ 2456 c->Header.SGList = 0; 2457 c->Header.SGTotal = 0; 2458 } 2459 memcpy(&c->Header.LUN, &iocommand.LUN_info, sizeof(c->Header.LUN)); 2460 /* use the kernel address the cmd block for tag */ 2461 c->Header.Tag.lower = c->busaddr; 2462 2463 /* Fill in Request block */ 2464 memcpy(&c->Request, &iocommand.Request, 2465 sizeof(c->Request)); 2466 2467 /* Fill in the scatter gather information */ 2468 if (iocommand.buf_size > 0) { 2469 temp64.val = pci_map_single(h->pdev, buff, 2470 iocommand.buf_size, PCI_DMA_BIDIRECTIONAL); 2471 c->SG[0].Addr.lower = temp64.val32.lower; 2472 c->SG[0].Addr.upper = temp64.val32.upper; 2473 c->SG[0].Len = iocommand.buf_size; 2474 c->SG[0].Ext = 0; /* we are not chaining*/ 2475 } 2476 hpsa_scsi_do_simple_cmd_core(h, c); 2477 hpsa_pci_unmap(h->pdev, c, 1, PCI_DMA_BIDIRECTIONAL); 2478 check_ioctl_unit_attention(h, c); 2479 2480 /* Copy the error information out */ 2481 memcpy(&iocommand.error_info, c->err_info, 2482 sizeof(iocommand.error_info)); 2483 if (copy_to_user(argp, &iocommand, sizeof(iocommand))) { 2484 kfree(buff); 2485 cmd_special_free(h, c); 2486 return -EFAULT; 2487 } 2488 2489 if (iocommand.Request.Type.Direction == XFER_READ) { 2490 /* Copy the data out of the buffer we created */ 2491 if (copy_to_user(iocommand.buf, buff, iocommand.buf_size)) { 2492 kfree(buff); 2493 cmd_special_free(h, c); 2494 return -EFAULT; 2495 } 2496 } 2497 kfree(buff); 2498 cmd_special_free(h, c); 2499 return 0; 2500 } 2501 2502 static int hpsa_big_passthru_ioctl(struct ctlr_info *h, void __user *argp) 2503 { 2504 BIG_IOCTL_Command_struct *ioc; 2505 struct CommandList *c; 2506 unsigned char **buff = NULL; 2507 int *buff_size = NULL; 2508 union u64bit temp64; 2509 BYTE sg_used = 0; 2510 int status = 0; 2511 int i; 2512 u32 left; 2513 u32 sz; 2514 BYTE __user *data_ptr; 2515 2516 if (!argp) 2517 return -EINVAL; 2518 if (!capable(CAP_SYS_RAWIO)) 2519 return -EPERM; 2520 ioc = (BIG_IOCTL_Command_struct *) 2521 kmalloc(sizeof(*ioc), GFP_KERNEL); 2522 if (!ioc) { 2523 status = -ENOMEM; 2524 goto cleanup1; 2525 } 2526 if (copy_from_user(ioc, argp, sizeof(*ioc))) { 2527 status = -EFAULT; 2528 goto cleanup1; 2529 } 2530 if ((ioc->buf_size < 1) && 2531 (ioc->Request.Type.Direction != XFER_NONE)) { 2532 status = -EINVAL; 2533 goto cleanup1; 2534 } 2535 /* Check kmalloc limits using all SGs */ 2536 if (ioc->malloc_size > MAX_KMALLOC_SIZE) { 2537 status = -EINVAL; 2538 goto cleanup1; 2539 } 2540 if (ioc->buf_size > ioc->malloc_size * MAXSGENTRIES) { 2541 status = -EINVAL; 2542 goto cleanup1; 2543 } 2544 buff = kzalloc(MAXSGENTRIES * sizeof(char *), GFP_KERNEL); 2545 if (!buff) { 2546 status = -ENOMEM; 2547 goto cleanup1; 2548 } 2549 buff_size = kmalloc(MAXSGENTRIES * sizeof(int), GFP_KERNEL); 2550 if (!buff_size) { 2551 status = -ENOMEM; 2552 goto cleanup1; 2553 } 2554 left = ioc->buf_size; 2555 data_ptr = ioc->buf; 2556 while (left) { 2557 sz = (left > ioc->malloc_size) ? ioc->malloc_size : left; 2558 buff_size[sg_used] = sz; 2559 buff[sg_used] = kmalloc(sz, GFP_KERNEL); 2560 if (buff[sg_used] == NULL) { 2561 status = -ENOMEM; 2562 goto cleanup1; 2563 } 2564 if (ioc->Request.Type.Direction == XFER_WRITE) { 2565 if (copy_from_user(buff[sg_used], data_ptr, sz)) { 2566 status = -ENOMEM; 2567 goto cleanup1; 2568 } 2569 } else 2570 memset(buff[sg_used], 0, sz); 2571 left -= sz; 2572 data_ptr += sz; 2573 sg_used++; 2574 } 2575 c = cmd_special_alloc(h); 2576 if (c == NULL) { 2577 status = -ENOMEM; 2578 goto cleanup1; 2579 } 2580 c->cmd_type = CMD_IOCTL_PEND; 2581 c->Header.ReplyQueue = 0; 2582 2583 if (ioc->buf_size > 0) { 2584 c->Header.SGList = sg_used; 2585 c->Header.SGTotal = sg_used; 2586 } else { 2587 c->Header.SGList = 0; 2588 c->Header.SGTotal = 0; 2589 } 2590 memcpy(&c->Header.LUN, &ioc->LUN_info, sizeof(c->Header.LUN)); 2591 c->Header.Tag.lower = c->busaddr; 2592 memcpy(&c->Request, &ioc->Request, sizeof(c->Request)); 2593 if (ioc->buf_size > 0) { 2594 int i; 2595 for (i = 0; i < sg_used; i++) { 2596 temp64.val = pci_map_single(h->pdev, buff[i], 2597 buff_size[i], PCI_DMA_BIDIRECTIONAL); 2598 c->SG[i].Addr.lower = temp64.val32.lower; 2599 c->SG[i].Addr.upper = temp64.val32.upper; 2600 c->SG[i].Len = buff_size[i]; 2601 /* we are not chaining */ 2602 c->SG[i].Ext = 0; 2603 } 2604 } 2605 hpsa_scsi_do_simple_cmd_core(h, c); 2606 hpsa_pci_unmap(h->pdev, c, sg_used, PCI_DMA_BIDIRECTIONAL); 2607 check_ioctl_unit_attention(h, c); 2608 /* Copy the error information out */ 2609 memcpy(&ioc->error_info, c->err_info, sizeof(ioc->error_info)); 2610 if (copy_to_user(argp, ioc, sizeof(*ioc))) { 2611 cmd_special_free(h, c); 2612 status = -EFAULT; 2613 goto cleanup1; 2614 } 2615 if (ioc->Request.Type.Direction == XFER_READ) { 2616 /* Copy the data out of the buffer we created */ 2617 BYTE __user *ptr = ioc->buf; 2618 for (i = 0; i < sg_used; i++) { 2619 if (copy_to_user(ptr, buff[i], buff_size[i])) { 2620 cmd_special_free(h, c); 2621 status = -EFAULT; 2622 goto cleanup1; 2623 } 2624 ptr += buff_size[i]; 2625 } 2626 } 2627 cmd_special_free(h, c); 2628 status = 0; 2629 cleanup1: 2630 if (buff) { 2631 for (i = 0; i < sg_used; i++) 2632 kfree(buff[i]); 2633 kfree(buff); 2634 } 2635 kfree(buff_size); 2636 kfree(ioc); 2637 return status; 2638 } 2639 2640 static void check_ioctl_unit_attention(struct ctlr_info *h, 2641 struct CommandList *c) 2642 { 2643 if (c->err_info->CommandStatus == CMD_TARGET_STATUS && 2644 c->err_info->ScsiStatus != SAM_STAT_CHECK_CONDITION) 2645 (void) check_for_unit_attention(h, c); 2646 } 2647 /* 2648 * ioctl 2649 */ 2650 static int hpsa_ioctl(struct scsi_device *dev, int cmd, void *arg) 2651 { 2652 struct ctlr_info *h; 2653 void __user *argp = (void __user *)arg; 2654 2655 h = sdev_to_hba(dev); 2656 2657 switch (cmd) { 2658 case CCISS_DEREGDISK: 2659 case CCISS_REGNEWDISK: 2660 case CCISS_REGNEWD: 2661 hpsa_scan_start(h->scsi_host); 2662 return 0; 2663 case CCISS_GETPCIINFO: 2664 return hpsa_getpciinfo_ioctl(h, argp); 2665 case CCISS_GETDRIVVER: 2666 return hpsa_getdrivver_ioctl(h, argp); 2667 case CCISS_PASSTHRU: 2668 return hpsa_passthru_ioctl(h, argp); 2669 case CCISS_BIG_PASSTHRU: 2670 return hpsa_big_passthru_ioctl(h, argp); 2671 default: 2672 return -ENOTTY; 2673 } 2674 } 2675 2676 static void fill_cmd(struct CommandList *c, u8 cmd, struct ctlr_info *h, 2677 void *buff, size_t size, u8 page_code, unsigned char *scsi3addr, 2678 int cmd_type) 2679 { 2680 int pci_dir = XFER_NONE; 2681 2682 c->cmd_type = CMD_IOCTL_PEND; 2683 c->Header.ReplyQueue = 0; 2684 if (buff != NULL && size > 0) { 2685 c->Header.SGList = 1; 2686 c->Header.SGTotal = 1; 2687 } else { 2688 c->Header.SGList = 0; 2689 c->Header.SGTotal = 0; 2690 } 2691 c->Header.Tag.lower = c->busaddr; 2692 memcpy(c->Header.LUN.LunAddrBytes, scsi3addr, 8); 2693 2694 c->Request.Type.Type = cmd_type; 2695 if (cmd_type == TYPE_CMD) { 2696 switch (cmd) { 2697 case HPSA_INQUIRY: 2698 /* are we trying to read a vital product page */ 2699 if (page_code != 0) { 2700 c->Request.CDB[1] = 0x01; 2701 c->Request.CDB[2] = page_code; 2702 } 2703 c->Request.CDBLen = 6; 2704 c->Request.Type.Attribute = ATTR_SIMPLE; 2705 c->Request.Type.Direction = XFER_READ; 2706 c->Request.Timeout = 0; 2707 c->Request.CDB[0] = HPSA_INQUIRY; 2708 c->Request.CDB[4] = size & 0xFF; 2709 break; 2710 case HPSA_REPORT_LOG: 2711 case HPSA_REPORT_PHYS: 2712 /* Talking to controller so It's a physical command 2713 mode = 00 target = 0. Nothing to write. 2714 */ 2715 c->Request.CDBLen = 12; 2716 c->Request.Type.Attribute = ATTR_SIMPLE; 2717 c->Request.Type.Direction = XFER_READ; 2718 c->Request.Timeout = 0; 2719 c->Request.CDB[0] = cmd; 2720 c->Request.CDB[6] = (size >> 24) & 0xFF; /* MSB */ 2721 c->Request.CDB[7] = (size >> 16) & 0xFF; 2722 c->Request.CDB[8] = (size >> 8) & 0xFF; 2723 c->Request.CDB[9] = size & 0xFF; 2724 break; 2725 case HPSA_CACHE_FLUSH: 2726 c->Request.CDBLen = 12; 2727 c->Request.Type.Attribute = ATTR_SIMPLE; 2728 c->Request.Type.Direction = XFER_WRITE; 2729 c->Request.Timeout = 0; 2730 c->Request.CDB[0] = BMIC_WRITE; 2731 c->Request.CDB[6] = BMIC_CACHE_FLUSH; 2732 break; 2733 case TEST_UNIT_READY: 2734 c->Request.CDBLen = 6; 2735 c->Request.Type.Attribute = ATTR_SIMPLE; 2736 c->Request.Type.Direction = XFER_NONE; 2737 c->Request.Timeout = 0; 2738 break; 2739 default: 2740 dev_warn(&h->pdev->dev, "unknown command 0x%c\n", cmd); 2741 BUG(); 2742 return; 2743 } 2744 } else if (cmd_type == TYPE_MSG) { 2745 switch (cmd) { 2746 2747 case HPSA_DEVICE_RESET_MSG: 2748 c->Request.CDBLen = 16; 2749 c->Request.Type.Type = 1; /* It is a MSG not a CMD */ 2750 c->Request.Type.Attribute = ATTR_SIMPLE; 2751 c->Request.Type.Direction = XFER_NONE; 2752 c->Request.Timeout = 0; /* Don't time out */ 2753 c->Request.CDB[0] = 0x01; /* RESET_MSG is 0x01 */ 2754 c->Request.CDB[1] = 0x03; /* Reset target above */ 2755 /* If bytes 4-7 are zero, it means reset the */ 2756 /* LunID device */ 2757 c->Request.CDB[4] = 0x00; 2758 c->Request.CDB[5] = 0x00; 2759 c->Request.CDB[6] = 0x00; 2760 c->Request.CDB[7] = 0x00; 2761 break; 2762 2763 default: 2764 dev_warn(&h->pdev->dev, "unknown message type %d\n", 2765 cmd); 2766 BUG(); 2767 } 2768 } else { 2769 dev_warn(&h->pdev->dev, "unknown command type %d\n", cmd_type); 2770 BUG(); 2771 } 2772 2773 switch (c->Request.Type.Direction) { 2774 case XFER_READ: 2775 pci_dir = PCI_DMA_FROMDEVICE; 2776 break; 2777 case XFER_WRITE: 2778 pci_dir = PCI_DMA_TODEVICE; 2779 break; 2780 case XFER_NONE: 2781 pci_dir = PCI_DMA_NONE; 2782 break; 2783 default: 2784 pci_dir = PCI_DMA_BIDIRECTIONAL; 2785 } 2786 2787 hpsa_map_one(h->pdev, c, buff, size, pci_dir); 2788 2789 return; 2790 } 2791 2792 /* 2793 * Map (physical) PCI mem into (virtual) kernel space 2794 */ 2795 static void __iomem *remap_pci_mem(ulong base, ulong size) 2796 { 2797 ulong page_base = ((ulong) base) & PAGE_MASK; 2798 ulong page_offs = ((ulong) base) - page_base; 2799 void __iomem *page_remapped = ioremap(page_base, page_offs + size); 2800 2801 return page_remapped ? (page_remapped + page_offs) : NULL; 2802 } 2803 2804 /* Takes cmds off the submission queue and sends them to the hardware, 2805 * then puts them on the queue of cmds waiting for completion. 2806 */ 2807 static void start_io(struct ctlr_info *h) 2808 { 2809 struct CommandList *c; 2810 2811 while (!hlist_empty(&h->reqQ)) { 2812 c = hlist_entry(h->reqQ.first, struct CommandList, list); 2813 /* can't do anything if fifo is full */ 2814 if ((h->access.fifo_full(h))) { 2815 dev_warn(&h->pdev->dev, "fifo full\n"); 2816 break; 2817 } 2818 2819 /* Get the first entry from the Request Q */ 2820 removeQ(c); 2821 h->Qdepth--; 2822 2823 /* Tell the controller execute command */ 2824 h->access.submit_command(h, c); 2825 2826 /* Put job onto the completed Q */ 2827 addQ(&h->cmpQ, c); 2828 } 2829 } 2830 2831 static inline unsigned long get_next_completion(struct ctlr_info *h) 2832 { 2833 return h->access.command_completed(h); 2834 } 2835 2836 static inline bool interrupt_pending(struct ctlr_info *h) 2837 { 2838 return h->access.intr_pending(h); 2839 } 2840 2841 static inline long interrupt_not_for_us(struct ctlr_info *h) 2842 { 2843 return !(h->msi_vector || h->msix_vector) && 2844 ((h->access.intr_pending(h) == 0) || 2845 (h->interrupts_enabled == 0)); 2846 } 2847 2848 static inline int bad_tag(struct ctlr_info *h, u32 tag_index, 2849 u32 raw_tag) 2850 { 2851 if (unlikely(tag_index >= h->nr_cmds)) { 2852 dev_warn(&h->pdev->dev, "bad tag 0x%08x ignored.\n", raw_tag); 2853 return 1; 2854 } 2855 return 0; 2856 } 2857 2858 static inline void finish_cmd(struct CommandList *c, u32 raw_tag) 2859 { 2860 removeQ(c); 2861 if (likely(c->cmd_type == CMD_SCSI)) 2862 complete_scsi_command(c, 0, raw_tag); 2863 else if (c->cmd_type == CMD_IOCTL_PEND) 2864 complete(c->waiting); 2865 } 2866 2867 static inline u32 hpsa_tag_contains_index(u32 tag) 2868 { 2869 #define DIRECT_LOOKUP_BIT 0x10 2870 return tag & DIRECT_LOOKUP_BIT; 2871 } 2872 2873 static inline u32 hpsa_tag_to_index(u32 tag) 2874 { 2875 #define DIRECT_LOOKUP_SHIFT 5 2876 return tag >> DIRECT_LOOKUP_SHIFT; 2877 } 2878 2879 static inline u32 hpsa_tag_discard_error_bits(u32 tag) 2880 { 2881 #define HPSA_ERROR_BITS 0x03 2882 return tag & ~HPSA_ERROR_BITS; 2883 } 2884 2885 /* process completion of an indexed ("direct lookup") command */ 2886 static inline u32 process_indexed_cmd(struct ctlr_info *h, 2887 u32 raw_tag) 2888 { 2889 u32 tag_index; 2890 struct CommandList *c; 2891 2892 tag_index = hpsa_tag_to_index(raw_tag); 2893 if (bad_tag(h, tag_index, raw_tag)) 2894 return next_command(h); 2895 c = h->cmd_pool + tag_index; 2896 finish_cmd(c, raw_tag); 2897 return next_command(h); 2898 } 2899 2900 /* process completion of a non-indexed command */ 2901 static inline u32 process_nonindexed_cmd(struct ctlr_info *h, 2902 u32 raw_tag) 2903 { 2904 u32 tag; 2905 struct CommandList *c = NULL; 2906 struct hlist_node *tmp; 2907 2908 tag = hpsa_tag_discard_error_bits(raw_tag); 2909 hlist_for_each_entry(c, tmp, &h->cmpQ, list) { 2910 if ((c->busaddr & 0xFFFFFFE0) == (tag & 0xFFFFFFE0)) { 2911 finish_cmd(c, raw_tag); 2912 return next_command(h); 2913 } 2914 } 2915 bad_tag(h, h->nr_cmds + 1, raw_tag); 2916 return next_command(h); 2917 } 2918 2919 static irqreturn_t do_hpsa_intr(int irq, void *dev_id) 2920 { 2921 struct ctlr_info *h = dev_id; 2922 unsigned long flags; 2923 u32 raw_tag; 2924 2925 if (interrupt_not_for_us(h)) 2926 return IRQ_NONE; 2927 spin_lock_irqsave(&h->lock, flags); 2928 raw_tag = get_next_completion(h); 2929 while (raw_tag != FIFO_EMPTY) { 2930 if (hpsa_tag_contains_index(raw_tag)) 2931 raw_tag = process_indexed_cmd(h, raw_tag); 2932 else 2933 raw_tag = process_nonindexed_cmd(h, raw_tag); 2934 } 2935 spin_unlock_irqrestore(&h->lock, flags); 2936 return IRQ_HANDLED; 2937 } 2938 2939 /* Send a message CDB to the firmware. */ 2940 static __devinit int hpsa_message(struct pci_dev *pdev, unsigned char opcode, 2941 unsigned char type) 2942 { 2943 struct Command { 2944 struct CommandListHeader CommandHeader; 2945 struct RequestBlock Request; 2946 struct ErrDescriptor ErrorDescriptor; 2947 }; 2948 struct Command *cmd; 2949 static const size_t cmd_sz = sizeof(*cmd) + 2950 sizeof(cmd->ErrorDescriptor); 2951 dma_addr_t paddr64; 2952 uint32_t paddr32, tag; 2953 void __iomem *vaddr; 2954 int i, err; 2955 2956 vaddr = pci_ioremap_bar(pdev, 0); 2957 if (vaddr == NULL) 2958 return -ENOMEM; 2959 2960 /* The Inbound Post Queue only accepts 32-bit physical addresses for the 2961 * CCISS commands, so they must be allocated from the lower 4GiB of 2962 * memory. 2963 */ 2964 err = pci_set_consistent_dma_mask(pdev, DMA_BIT_MASK(32)); 2965 if (err) { 2966 iounmap(vaddr); 2967 return -ENOMEM; 2968 } 2969 2970 cmd = pci_alloc_consistent(pdev, cmd_sz, &paddr64); 2971 if (cmd == NULL) { 2972 iounmap(vaddr); 2973 return -ENOMEM; 2974 } 2975 2976 /* This must fit, because of the 32-bit consistent DMA mask. Also, 2977 * although there's no guarantee, we assume that the address is at 2978 * least 4-byte aligned (most likely, it's page-aligned). 2979 */ 2980 paddr32 = paddr64; 2981 2982 cmd->CommandHeader.ReplyQueue = 0; 2983 cmd->CommandHeader.SGList = 0; 2984 cmd->CommandHeader.SGTotal = 0; 2985 cmd->CommandHeader.Tag.lower = paddr32; 2986 cmd->CommandHeader.Tag.upper = 0; 2987 memset(&cmd->CommandHeader.LUN.LunAddrBytes, 0, 8); 2988 2989 cmd->Request.CDBLen = 16; 2990 cmd->Request.Type.Type = TYPE_MSG; 2991 cmd->Request.Type.Attribute = ATTR_HEADOFQUEUE; 2992 cmd->Request.Type.Direction = XFER_NONE; 2993 cmd->Request.Timeout = 0; /* Don't time out */ 2994 cmd->Request.CDB[0] = opcode; 2995 cmd->Request.CDB[1] = type; 2996 memset(&cmd->Request.CDB[2], 0, 14); /* rest of the CDB is reserved */ 2997 cmd->ErrorDescriptor.Addr.lower = paddr32 + sizeof(*cmd); 2998 cmd->ErrorDescriptor.Addr.upper = 0; 2999 cmd->ErrorDescriptor.Len = sizeof(struct ErrorInfo); 3000 3001 writel(paddr32, vaddr + SA5_REQUEST_PORT_OFFSET); 3002 3003 for (i = 0; i < HPSA_MSG_SEND_RETRY_LIMIT; i++) { 3004 tag = readl(vaddr + SA5_REPLY_PORT_OFFSET); 3005 if (hpsa_tag_discard_error_bits(tag) == paddr32) 3006 break; 3007 msleep(HPSA_MSG_SEND_RETRY_INTERVAL_MSECS); 3008 } 3009 3010 iounmap(vaddr); 3011 3012 /* we leak the DMA buffer here ... no choice since the controller could 3013 * still complete the command. 3014 */ 3015 if (i == HPSA_MSG_SEND_RETRY_LIMIT) { 3016 dev_err(&pdev->dev, "controller message %02x:%02x timed out\n", 3017 opcode, type); 3018 return -ETIMEDOUT; 3019 } 3020 3021 pci_free_consistent(pdev, cmd_sz, cmd, paddr64); 3022 3023 if (tag & HPSA_ERROR_BIT) { 3024 dev_err(&pdev->dev, "controller message %02x:%02x failed\n", 3025 opcode, type); 3026 return -EIO; 3027 } 3028 3029 dev_info(&pdev->dev, "controller message %02x:%02x succeeded\n", 3030 opcode, type); 3031 return 0; 3032 } 3033 3034 #define hpsa_soft_reset_controller(p) hpsa_message(p, 1, 0) 3035 #define hpsa_noop(p) hpsa_message(p, 3, 0) 3036 3037 static __devinit int hpsa_reset_msi(struct pci_dev *pdev) 3038 { 3039 /* the #defines are stolen from drivers/pci/msi.h. */ 3040 #define msi_control_reg(base) (base + PCI_MSI_FLAGS) 3041 #define PCI_MSIX_FLAGS_ENABLE (1 << 15) 3042 3043 int pos; 3044 u16 control = 0; 3045 3046 pos = pci_find_capability(pdev, PCI_CAP_ID_MSI); 3047 if (pos) { 3048 pci_read_config_word(pdev, msi_control_reg(pos), &control); 3049 if (control & PCI_MSI_FLAGS_ENABLE) { 3050 dev_info(&pdev->dev, "resetting MSI\n"); 3051 pci_write_config_word(pdev, msi_control_reg(pos), 3052 control & ~PCI_MSI_FLAGS_ENABLE); 3053 } 3054 } 3055 3056 pos = pci_find_capability(pdev, PCI_CAP_ID_MSIX); 3057 if (pos) { 3058 pci_read_config_word(pdev, msi_control_reg(pos), &control); 3059 if (control & PCI_MSIX_FLAGS_ENABLE) { 3060 dev_info(&pdev->dev, "resetting MSI-X\n"); 3061 pci_write_config_word(pdev, msi_control_reg(pos), 3062 control & ~PCI_MSIX_FLAGS_ENABLE); 3063 } 3064 } 3065 3066 return 0; 3067 } 3068 3069 /* This does a hard reset of the controller using PCI power management 3070 * states. 3071 */ 3072 static __devinit int hpsa_hard_reset_controller(struct pci_dev *pdev) 3073 { 3074 u16 pmcsr, saved_config_space[32]; 3075 int i, pos; 3076 3077 dev_info(&pdev->dev, "using PCI PM to reset controller\n"); 3078 3079 /* This is very nearly the same thing as 3080 * 3081 * pci_save_state(pci_dev); 3082 * pci_set_power_state(pci_dev, PCI_D3hot); 3083 * pci_set_power_state(pci_dev, PCI_D0); 3084 * pci_restore_state(pci_dev); 3085 * 3086 * but we can't use these nice canned kernel routines on 3087 * kexec, because they also check the MSI/MSI-X state in PCI 3088 * configuration space and do the wrong thing when it is 3089 * set/cleared. Also, the pci_save/restore_state functions 3090 * violate the ordering requirements for restoring the 3091 * configuration space from the CCISS document (see the 3092 * comment below). So we roll our own .... 3093 */ 3094 3095 for (i = 0; i < 32; i++) 3096 pci_read_config_word(pdev, 2*i, &saved_config_space[i]); 3097 3098 pos = pci_find_capability(pdev, PCI_CAP_ID_PM); 3099 if (pos == 0) { 3100 dev_err(&pdev->dev, 3101 "hpsa_reset_controller: PCI PM not supported\n"); 3102 return -ENODEV; 3103 } 3104 3105 /* Quoting from the Open CISS Specification: "The Power 3106 * Management Control/Status Register (CSR) controls the power 3107 * state of the device. The normal operating state is D0, 3108 * CSR=00h. The software off state is D3, CSR=03h. To reset 3109 * the controller, place the interface device in D3 then to 3110 * D0, this causes a secondary PCI reset which will reset the 3111 * controller." 3112 */ 3113 3114 /* enter the D3hot power management state */ 3115 pci_read_config_word(pdev, pos + PCI_PM_CTRL, &pmcsr); 3116 pmcsr &= ~PCI_PM_CTRL_STATE_MASK; 3117 pmcsr |= PCI_D3hot; 3118 pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr); 3119 3120 msleep(500); 3121 3122 /* enter the D0 power management state */ 3123 pmcsr &= ~PCI_PM_CTRL_STATE_MASK; 3124 pmcsr |= PCI_D0; 3125 pci_write_config_word(pdev, pos + PCI_PM_CTRL, pmcsr); 3126 3127 msleep(500); 3128 3129 /* Restore the PCI configuration space. The Open CISS 3130 * Specification says, "Restore the PCI Configuration 3131 * Registers, offsets 00h through 60h. It is important to 3132 * restore the command register, 16-bits at offset 04h, 3133 * last. Do not restore the configuration status register, 3134 * 16-bits at offset 06h." Note that the offset is 2*i. 3135 */ 3136 for (i = 0; i < 32; i++) { 3137 if (i == 2 || i == 3) 3138 continue; 3139 pci_write_config_word(pdev, 2*i, saved_config_space[i]); 3140 } 3141 wmb(); 3142 pci_write_config_word(pdev, 4, saved_config_space[2]); 3143 3144 return 0; 3145 } 3146 3147 /* 3148 * We cannot read the structure directly, for portability we must use 3149 * the io functions. 3150 * This is for debug only. 3151 */ 3152 static void print_cfg_table(struct device *dev, struct CfgTable *tb) 3153 { 3154 #ifdef HPSA_DEBUG 3155 int i; 3156 char temp_name[17]; 3157 3158 dev_info(dev, "Controller Configuration information\n"); 3159 dev_info(dev, "------------------------------------\n"); 3160 for (i = 0; i < 4; i++) 3161 temp_name[i] = readb(&(tb->Signature[i])); 3162 temp_name[4] = '\0'; 3163 dev_info(dev, " Signature = %s\n", temp_name); 3164 dev_info(dev, " Spec Number = %d\n", readl(&(tb->SpecValence))); 3165 dev_info(dev, " Transport methods supported = 0x%x\n", 3166 readl(&(tb->TransportSupport))); 3167 dev_info(dev, " Transport methods active = 0x%x\n", 3168 readl(&(tb->TransportActive))); 3169 dev_info(dev, " Requested transport Method = 0x%x\n", 3170 readl(&(tb->HostWrite.TransportRequest))); 3171 dev_info(dev, " Coalesce Interrupt Delay = 0x%x\n", 3172 readl(&(tb->HostWrite.CoalIntDelay))); 3173 dev_info(dev, " Coalesce Interrupt Count = 0x%x\n", 3174 readl(&(tb->HostWrite.CoalIntCount))); 3175 dev_info(dev, " Max outstanding commands = 0x%d\n", 3176 readl(&(tb->CmdsOutMax))); 3177 dev_info(dev, " Bus Types = 0x%x\n", readl(&(tb->BusTypes))); 3178 for (i = 0; i < 16; i++) 3179 temp_name[i] = readb(&(tb->ServerName[i])); 3180 temp_name[16] = '\0'; 3181 dev_info(dev, " Server Name = %s\n", temp_name); 3182 dev_info(dev, " Heartbeat Counter = 0x%x\n\n\n", 3183 readl(&(tb->HeartBeat))); 3184 #endif /* HPSA_DEBUG */ 3185 } 3186 3187 static int find_PCI_BAR_index(struct pci_dev *pdev, unsigned long pci_bar_addr) 3188 { 3189 int i, offset, mem_type, bar_type; 3190 3191 if (pci_bar_addr == PCI_BASE_ADDRESS_0) /* looking for BAR zero? */ 3192 return 0; 3193 offset = 0; 3194 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) { 3195 bar_type = pci_resource_flags(pdev, i) & PCI_BASE_ADDRESS_SPACE; 3196 if (bar_type == PCI_BASE_ADDRESS_SPACE_IO) 3197 offset += 4; 3198 else { 3199 mem_type = pci_resource_flags(pdev, i) & 3200 PCI_BASE_ADDRESS_MEM_TYPE_MASK; 3201 switch (mem_type) { 3202 case PCI_BASE_ADDRESS_MEM_TYPE_32: 3203 case PCI_BASE_ADDRESS_MEM_TYPE_1M: 3204 offset += 4; /* 32 bit */ 3205 break; 3206 case PCI_BASE_ADDRESS_MEM_TYPE_64: 3207 offset += 8; 3208 break; 3209 default: /* reserved in PCI 2.2 */ 3210 dev_warn(&pdev->dev, 3211 "base address is invalid\n"); 3212 return -1; 3213 break; 3214 } 3215 } 3216 if (offset == pci_bar_addr - PCI_BASE_ADDRESS_0) 3217 return i + 1; 3218 } 3219 return -1; 3220 } 3221 3222 /* If MSI/MSI-X is supported by the kernel we will try to enable it on 3223 * controllers that are capable. If not, we use IO-APIC mode. 3224 */ 3225 3226 static void __devinit hpsa_interrupt_mode(struct ctlr_info *h) 3227 { 3228 #ifdef CONFIG_PCI_MSI 3229 int err; 3230 struct msix_entry hpsa_msix_entries[4] = { {0, 0}, {0, 1}, 3231 {0, 2}, {0, 3} 3232 }; 3233 3234 /* Some boards advertise MSI but don't really support it */ 3235 if ((h->board_id == 0x40700E11) || (h->board_id == 0x40800E11) || 3236 (h->board_id == 0x40820E11) || (h->board_id == 0x40830E11)) 3237 goto default_int_mode; 3238 if (pci_find_capability(h->pdev, PCI_CAP_ID_MSIX)) { 3239 dev_info(&h->pdev->dev, "MSIX\n"); 3240 err = pci_enable_msix(h->pdev, hpsa_msix_entries, 4); 3241 if (!err) { 3242 h->intr[0] = hpsa_msix_entries[0].vector; 3243 h->intr[1] = hpsa_msix_entries[1].vector; 3244 h->intr[2] = hpsa_msix_entries[2].vector; 3245 h->intr[3] = hpsa_msix_entries[3].vector; 3246 h->msix_vector = 1; 3247 return; 3248 } 3249 if (err > 0) { 3250 dev_warn(&h->pdev->dev, "only %d MSI-X vectors " 3251 "available\n", err); 3252 goto default_int_mode; 3253 } else { 3254 dev_warn(&h->pdev->dev, "MSI-X init failed %d\n", 3255 err); 3256 goto default_int_mode; 3257 } 3258 } 3259 if (pci_find_capability(h->pdev, PCI_CAP_ID_MSI)) { 3260 dev_info(&h->pdev->dev, "MSI\n"); 3261 if (!pci_enable_msi(h->pdev)) 3262 h->msi_vector = 1; 3263 else 3264 dev_warn(&h->pdev->dev, "MSI init failed\n"); 3265 } 3266 default_int_mode: 3267 #endif /* CONFIG_PCI_MSI */ 3268 /* if we get here we're going to use the default interrupt mode */ 3269 h->intr[PERF_MODE_INT] = h->pdev->irq; 3270 } 3271 3272 static int __devinit hpsa_lookup_board_id(struct pci_dev *pdev, u32 *board_id) 3273 { 3274 int i; 3275 u32 subsystem_vendor_id, subsystem_device_id; 3276 3277 subsystem_vendor_id = pdev->subsystem_vendor; 3278 subsystem_device_id = pdev->subsystem_device; 3279 *board_id = ((subsystem_device_id << 16) & 0xffff0000) | 3280 subsystem_vendor_id; 3281 3282 for (i = 0; i < ARRAY_SIZE(products); i++) 3283 if (*board_id == products[i].board_id) 3284 return i; 3285 3286 if (subsystem_vendor_id != PCI_VENDOR_ID_HP || !hpsa_allow_any) { 3287 dev_warn(&pdev->dev, "unrecognized board ID: " 3288 "0x%08x, ignoring.\n", *board_id); 3289 return -ENODEV; 3290 } 3291 return ARRAY_SIZE(products) - 1; /* generic unknown smart array */ 3292 } 3293 3294 static inline bool hpsa_board_disabled(struct pci_dev *pdev) 3295 { 3296 u16 command; 3297 3298 (void) pci_read_config_word(pdev, PCI_COMMAND, &command); 3299 return ((command & PCI_COMMAND_MEMORY) == 0); 3300 } 3301 3302 static int __devinit hpsa_pci_find_memory_BAR(struct ctlr_info *h, 3303 unsigned long *memory_bar) 3304 { 3305 int i; 3306 3307 for (i = 0; i < DEVICE_COUNT_RESOURCE; i++) 3308 if (pci_resource_flags(h->pdev, i) & IORESOURCE_MEM) { 3309 /* addressing mode bits already removed */ 3310 *memory_bar = pci_resource_start(h->pdev, i); 3311 dev_dbg(&h->pdev->dev, "memory BAR = %lx\n", 3312 *memory_bar); 3313 return 0; 3314 } 3315 dev_warn(&h->pdev->dev, "no memory BAR found\n"); 3316 return -ENODEV; 3317 } 3318 3319 static int __devinit hpsa_wait_for_board_ready(struct ctlr_info *h) 3320 { 3321 int i; 3322 u32 scratchpad; 3323 3324 for (i = 0; i < HPSA_BOARD_READY_ITERATIONS; i++) { 3325 scratchpad = readl(h->vaddr + SA5_SCRATCHPAD_OFFSET); 3326 if (scratchpad == HPSA_FIRMWARE_READY) 3327 return 0; 3328 msleep(HPSA_BOARD_READY_POLL_INTERVAL_MSECS); 3329 } 3330 dev_warn(&h->pdev->dev, "board not ready, timed out.\n"); 3331 return -ENODEV; 3332 } 3333 3334 static int __devinit hpsa_find_cfgtables(struct ctlr_info *h) 3335 { 3336 u64 cfg_offset; 3337 u32 cfg_base_addr; 3338 u64 cfg_base_addr_index; 3339 u32 trans_offset; 3340 3341 /* get the address index number */ 3342 cfg_base_addr = readl(h->vaddr + SA5_CTCFG_OFFSET); 3343 cfg_base_addr &= (u32) 0x0000ffff; 3344 cfg_base_addr_index = find_PCI_BAR_index(h->pdev, cfg_base_addr); 3345 if (cfg_base_addr_index == -1) { 3346 dev_warn(&h->pdev->dev, "cannot find cfg_base_addr_index\n"); 3347 return -ENODEV; 3348 } 3349 cfg_offset = readl(h->vaddr + SA5_CTMEM_OFFSET); 3350 h->cfgtable = remap_pci_mem(pci_resource_start(h->pdev, 3351 cfg_base_addr_index) + cfg_offset, 3352 sizeof(h->cfgtable)); 3353 if (!h->cfgtable) 3354 return -ENOMEM; 3355 /* Find performant mode table. */ 3356 trans_offset = readl(&(h->cfgtable->TransMethodOffset)); 3357 h->transtable = remap_pci_mem(pci_resource_start(h->pdev, 3358 cfg_base_addr_index)+cfg_offset+trans_offset, 3359 sizeof(*h->transtable)); 3360 if (!h->transtable) 3361 return -ENOMEM; 3362 return 0; 3363 } 3364 3365 /* Interrogate the hardware for some limits: 3366 * max commands, max SG elements without chaining, and with chaining, 3367 * SG chain block size, etc. 3368 */ 3369 static void __devinit hpsa_find_board_params(struct ctlr_info *h) 3370 { 3371 h->max_commands = readl(&(h->cfgtable->MaxPerformantModeCommands)); 3372 h->nr_cmds = h->max_commands - 4; /* Allow room for some ioctls */ 3373 h->maxsgentries = readl(&(h->cfgtable->MaxScatterGatherElements)); 3374 /* 3375 * Limit in-command s/g elements to 32 save dma'able memory. 3376 * Howvever spec says if 0, use 31 3377 */ 3378 h->max_cmd_sg_entries = 31; 3379 if (h->maxsgentries > 512) { 3380 h->max_cmd_sg_entries = 32; 3381 h->chainsize = h->maxsgentries - h->max_cmd_sg_entries + 1; 3382 h->maxsgentries--; /* save one for chain pointer */ 3383 } else { 3384 h->maxsgentries = 31; /* default to traditional values */ 3385 h->chainsize = 0; 3386 } 3387 } 3388 3389 static inline bool hpsa_CISS_signature_present(struct ctlr_info *h) 3390 { 3391 if ((readb(&h->cfgtable->Signature[0]) != 'C') || 3392 (readb(&h->cfgtable->Signature[1]) != 'I') || 3393 (readb(&h->cfgtable->Signature[2]) != 'S') || 3394 (readb(&h->cfgtable->Signature[3]) != 'S')) { 3395 dev_warn(&h->pdev->dev, "not a valid CISS config table\n"); 3396 return false; 3397 } 3398 return true; 3399 } 3400 3401 /* Need to enable prefetch in the SCSI core for 6400 in x86 */ 3402 static inline void hpsa_enable_scsi_prefetch(struct ctlr_info *h) 3403 { 3404 #ifdef CONFIG_X86 3405 u32 prefetch; 3406 3407 prefetch = readl(&(h->cfgtable->SCSI_Prefetch)); 3408 prefetch |= 0x100; 3409 writel(prefetch, &(h->cfgtable->SCSI_Prefetch)); 3410 #endif 3411 } 3412 3413 /* Disable DMA prefetch for the P600. Otherwise an ASIC bug may result 3414 * in a prefetch beyond physical memory. 3415 */ 3416 static inline void hpsa_p600_dma_prefetch_quirk(struct ctlr_info *h) 3417 { 3418 u32 dma_prefetch; 3419 3420 if (h->board_id != 0x3225103C) 3421 return; 3422 dma_prefetch = readl(h->vaddr + I2O_DMA1_CFG); 3423 dma_prefetch |= 0x8000; 3424 writel(dma_prefetch, h->vaddr + I2O_DMA1_CFG); 3425 } 3426 3427 static void __devinit hpsa_wait_for_mode_change_ack(struct ctlr_info *h) 3428 { 3429 int i; 3430 3431 /* under certain very rare conditions, this can take awhile. 3432 * (e.g.: hot replace a failed 144GB drive in a RAID 5 set right 3433 * as we enter this code.) 3434 */ 3435 for (i = 0; i < MAX_CONFIG_WAIT; i++) { 3436 if (!(readl(h->vaddr + SA5_DOORBELL) & CFGTBL_ChangeReq)) 3437 break; 3438 /* delay and try again */ 3439 msleep(10); 3440 } 3441 } 3442 3443 static int __devinit hpsa_enter_simple_mode(struct ctlr_info *h) 3444 { 3445 u32 trans_support; 3446 3447 trans_support = readl(&(h->cfgtable->TransportSupport)); 3448 if (!(trans_support & SIMPLE_MODE)) 3449 return -ENOTSUPP; 3450 3451 h->max_commands = readl(&(h->cfgtable->CmdsOutMax)); 3452 /* Update the field, and then ring the doorbell */ 3453 writel(CFGTBL_Trans_Simple, &(h->cfgtable->HostWrite.TransportRequest)); 3454 writel(CFGTBL_ChangeReq, h->vaddr + SA5_DOORBELL); 3455 hpsa_wait_for_mode_change_ack(h); 3456 print_cfg_table(&h->pdev->dev, h->cfgtable); 3457 if (!(readl(&(h->cfgtable->TransportActive)) & CFGTBL_Trans_Simple)) { 3458 dev_warn(&h->pdev->dev, 3459 "unable to get board into simple mode\n"); 3460 return -ENODEV; 3461 } 3462 return 0; 3463 } 3464 3465 static int __devinit hpsa_pci_init(struct ctlr_info *h) 3466 { 3467 int prod_index, err; 3468 3469 prod_index = hpsa_lookup_board_id(h->pdev, &h->board_id); 3470 if (prod_index < 0) 3471 return -ENODEV; 3472 h->product_name = products[prod_index].product_name; 3473 h->access = *(products[prod_index].access); 3474 3475 if (hpsa_board_disabled(h->pdev)) { 3476 dev_warn(&h->pdev->dev, "controller appears to be disabled\n"); 3477 return -ENODEV; 3478 } 3479 err = pci_enable_device(h->pdev); 3480 if (err) { 3481 dev_warn(&h->pdev->dev, "unable to enable PCI device\n"); 3482 return err; 3483 } 3484 3485 err = pci_request_regions(h->pdev, "hpsa"); 3486 if (err) { 3487 dev_err(&h->pdev->dev, 3488 "cannot obtain PCI resources, aborting\n"); 3489 return err; 3490 } 3491 hpsa_interrupt_mode(h); 3492 err = hpsa_pci_find_memory_BAR(h, &h->paddr); 3493 if (err) 3494 goto err_out_free_res; 3495 h->vaddr = remap_pci_mem(h->paddr, 0x250); 3496 if (!h->vaddr) { 3497 err = -ENOMEM; 3498 goto err_out_free_res; 3499 } 3500 err = hpsa_wait_for_board_ready(h); 3501 if (err) 3502 goto err_out_free_res; 3503 err = hpsa_find_cfgtables(h); 3504 if (err) 3505 goto err_out_free_res; 3506 hpsa_find_board_params(h); 3507 3508 if (!hpsa_CISS_signature_present(h)) { 3509 err = -ENODEV; 3510 goto err_out_free_res; 3511 } 3512 hpsa_enable_scsi_prefetch(h); 3513 hpsa_p600_dma_prefetch_quirk(h); 3514 err = hpsa_enter_simple_mode(h); 3515 if (err) 3516 goto err_out_free_res; 3517 return 0; 3518 3519 err_out_free_res: 3520 if (h->transtable) 3521 iounmap(h->transtable); 3522 if (h->cfgtable) 3523 iounmap(h->cfgtable); 3524 if (h->vaddr) 3525 iounmap(h->vaddr); 3526 /* 3527 * Deliberately omit pci_disable_device(): it does something nasty to 3528 * Smart Array controllers that pci_enable_device does not undo 3529 */ 3530 pci_release_regions(h->pdev); 3531 return err; 3532 } 3533 3534 static void __devinit hpsa_hba_inquiry(struct ctlr_info *h) 3535 { 3536 int rc; 3537 3538 #define HBA_INQUIRY_BYTE_COUNT 64 3539 h->hba_inquiry_data = kmalloc(HBA_INQUIRY_BYTE_COUNT, GFP_KERNEL); 3540 if (!h->hba_inquiry_data) 3541 return; 3542 rc = hpsa_scsi_do_inquiry(h, RAID_CTLR_LUNID, 0, 3543 h->hba_inquiry_data, HBA_INQUIRY_BYTE_COUNT); 3544 if (rc != 0) { 3545 kfree(h->hba_inquiry_data); 3546 h->hba_inquiry_data = NULL; 3547 } 3548 } 3549 3550 static int __devinit hpsa_init_one(struct pci_dev *pdev, 3551 const struct pci_device_id *ent) 3552 { 3553 int i, rc; 3554 int dac; 3555 struct ctlr_info *h; 3556 3557 if (number_of_controllers == 0) 3558 printk(KERN_INFO DRIVER_NAME "\n"); 3559 if (reset_devices) { 3560 /* Reset the controller with a PCI power-cycle */ 3561 if (hpsa_hard_reset_controller(pdev) || hpsa_reset_msi(pdev)) 3562 return -ENODEV; 3563 3564 /* Some devices (notably the HP Smart Array 5i Controller) 3565 need a little pause here */ 3566 msleep(HPSA_POST_RESET_PAUSE_MSECS); 3567 3568 /* Now try to get the controller to respond to a no-op */ 3569 for (i = 0; i < HPSA_POST_RESET_NOOP_RETRIES; i++) { 3570 if (hpsa_noop(pdev) == 0) 3571 break; 3572 else 3573 dev_warn(&pdev->dev, "no-op failed%s\n", 3574 (i < 11 ? "; re-trying" : "")); 3575 } 3576 } 3577 3578 /* Command structures must be aligned on a 32-byte boundary because 3579 * the 5 lower bits of the address are used by the hardware. and by 3580 * the driver. See comments in hpsa.h for more info. 3581 */ 3582 #define COMMANDLIST_ALIGNMENT 32 3583 BUILD_BUG_ON(sizeof(struct CommandList) % COMMANDLIST_ALIGNMENT); 3584 h = kzalloc(sizeof(*h), GFP_KERNEL); 3585 if (!h) 3586 return -ENOMEM; 3587 3588 h->pdev = pdev; 3589 h->busy_initializing = 1; 3590 INIT_HLIST_HEAD(&h->cmpQ); 3591 INIT_HLIST_HEAD(&h->reqQ); 3592 rc = hpsa_pci_init(h); 3593 if (rc != 0) 3594 goto clean1; 3595 3596 sprintf(h->devname, "hpsa%d", number_of_controllers); 3597 h->ctlr = number_of_controllers; 3598 number_of_controllers++; 3599 3600 /* configure PCI DMA stuff */ 3601 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(64)); 3602 if (rc == 0) { 3603 dac = 1; 3604 } else { 3605 rc = pci_set_dma_mask(pdev, DMA_BIT_MASK(32)); 3606 if (rc == 0) { 3607 dac = 0; 3608 } else { 3609 dev_err(&pdev->dev, "no suitable DMA available\n"); 3610 goto clean1; 3611 } 3612 } 3613 3614 /* make sure the board interrupts are off */ 3615 h->access.set_intr_mask(h, HPSA_INTR_OFF); 3616 rc = request_irq(h->intr[PERF_MODE_INT], do_hpsa_intr, 3617 IRQF_DISABLED, h->devname, h); 3618 if (rc) { 3619 dev_err(&pdev->dev, "unable to get irq %d for %s\n", 3620 h->intr[PERF_MODE_INT], h->devname); 3621 goto clean2; 3622 } 3623 3624 dev_info(&pdev->dev, "%s: <0x%x> at IRQ %d%s using DAC\n", 3625 h->devname, pdev->device, 3626 h->intr[PERF_MODE_INT], dac ? "" : " not"); 3627 3628 h->cmd_pool_bits = 3629 kmalloc(((h->nr_cmds + BITS_PER_LONG - 3630 1) / BITS_PER_LONG) * sizeof(unsigned long), GFP_KERNEL); 3631 h->cmd_pool = pci_alloc_consistent(h->pdev, 3632 h->nr_cmds * sizeof(*h->cmd_pool), 3633 &(h->cmd_pool_dhandle)); 3634 h->errinfo_pool = pci_alloc_consistent(h->pdev, 3635 h->nr_cmds * sizeof(*h->errinfo_pool), 3636 &(h->errinfo_pool_dhandle)); 3637 if ((h->cmd_pool_bits == NULL) 3638 || (h->cmd_pool == NULL) 3639 || (h->errinfo_pool == NULL)) { 3640 dev_err(&pdev->dev, "out of memory"); 3641 rc = -ENOMEM; 3642 goto clean4; 3643 } 3644 if (hpsa_allocate_sg_chain_blocks(h)) 3645 goto clean4; 3646 spin_lock_init(&h->lock); 3647 spin_lock_init(&h->scan_lock); 3648 init_waitqueue_head(&h->scan_wait_queue); 3649 h->scan_finished = 1; /* no scan currently in progress */ 3650 3651 pci_set_drvdata(pdev, h); 3652 memset(h->cmd_pool_bits, 0, 3653 ((h->nr_cmds + BITS_PER_LONG - 3654 1) / BITS_PER_LONG) * sizeof(unsigned long)); 3655 3656 hpsa_scsi_setup(h); 3657 3658 /* Turn the interrupts on so we can service requests */ 3659 h->access.set_intr_mask(h, HPSA_INTR_ON); 3660 3661 hpsa_put_ctlr_into_performant_mode(h); 3662 hpsa_hba_inquiry(h); 3663 hpsa_register_scsi(h); /* hook ourselves into SCSI subsystem */ 3664 h->busy_initializing = 0; 3665 return 1; 3666 3667 clean4: 3668 hpsa_free_sg_chain_blocks(h); 3669 kfree(h->cmd_pool_bits); 3670 if (h->cmd_pool) 3671 pci_free_consistent(h->pdev, 3672 h->nr_cmds * sizeof(struct CommandList), 3673 h->cmd_pool, h->cmd_pool_dhandle); 3674 if (h->errinfo_pool) 3675 pci_free_consistent(h->pdev, 3676 h->nr_cmds * sizeof(struct ErrorInfo), 3677 h->errinfo_pool, 3678 h->errinfo_pool_dhandle); 3679 free_irq(h->intr[PERF_MODE_INT], h); 3680 clean2: 3681 clean1: 3682 h->busy_initializing = 0; 3683 kfree(h); 3684 return rc; 3685 } 3686 3687 static void hpsa_flush_cache(struct ctlr_info *h) 3688 { 3689 char *flush_buf; 3690 struct CommandList *c; 3691 3692 flush_buf = kzalloc(4, GFP_KERNEL); 3693 if (!flush_buf) 3694 return; 3695 3696 c = cmd_special_alloc(h); 3697 if (!c) { 3698 dev_warn(&h->pdev->dev, "cmd_special_alloc returned NULL!\n"); 3699 goto out_of_memory; 3700 } 3701 fill_cmd(c, HPSA_CACHE_FLUSH, h, flush_buf, 4, 0, 3702 RAID_CTLR_LUNID, TYPE_CMD); 3703 hpsa_scsi_do_simple_cmd_with_retry(h, c, PCI_DMA_TODEVICE); 3704 if (c->err_info->CommandStatus != 0) 3705 dev_warn(&h->pdev->dev, 3706 "error flushing cache on controller\n"); 3707 cmd_special_free(h, c); 3708 out_of_memory: 3709 kfree(flush_buf); 3710 } 3711 3712 static void hpsa_shutdown(struct pci_dev *pdev) 3713 { 3714 struct ctlr_info *h; 3715 3716 h = pci_get_drvdata(pdev); 3717 /* Turn board interrupts off and send the flush cache command 3718 * sendcmd will turn off interrupt, and send the flush... 3719 * To write all data in the battery backed cache to disks 3720 */ 3721 hpsa_flush_cache(h); 3722 h->access.set_intr_mask(h, HPSA_INTR_OFF); 3723 free_irq(h->intr[PERF_MODE_INT], h); 3724 #ifdef CONFIG_PCI_MSI 3725 if (h->msix_vector) 3726 pci_disable_msix(h->pdev); 3727 else if (h->msi_vector) 3728 pci_disable_msi(h->pdev); 3729 #endif /* CONFIG_PCI_MSI */ 3730 } 3731 3732 static void __devexit hpsa_remove_one(struct pci_dev *pdev) 3733 { 3734 struct ctlr_info *h; 3735 3736 if (pci_get_drvdata(pdev) == NULL) { 3737 dev_err(&pdev->dev, "unable to remove device \n"); 3738 return; 3739 } 3740 h = pci_get_drvdata(pdev); 3741 hpsa_unregister_scsi(h); /* unhook from SCSI subsystem */ 3742 hpsa_shutdown(pdev); 3743 iounmap(h->vaddr); 3744 iounmap(h->transtable); 3745 iounmap(h->cfgtable); 3746 hpsa_free_sg_chain_blocks(h); 3747 pci_free_consistent(h->pdev, 3748 h->nr_cmds * sizeof(struct CommandList), 3749 h->cmd_pool, h->cmd_pool_dhandle); 3750 pci_free_consistent(h->pdev, 3751 h->nr_cmds * sizeof(struct ErrorInfo), 3752 h->errinfo_pool, h->errinfo_pool_dhandle); 3753 pci_free_consistent(h->pdev, h->reply_pool_size, 3754 h->reply_pool, h->reply_pool_dhandle); 3755 kfree(h->cmd_pool_bits); 3756 kfree(h->blockFetchTable); 3757 kfree(h->hba_inquiry_data); 3758 /* 3759 * Deliberately omit pci_disable_device(): it does something nasty to 3760 * Smart Array controllers that pci_enable_device does not undo 3761 */ 3762 pci_release_regions(pdev); 3763 pci_set_drvdata(pdev, NULL); 3764 kfree(h); 3765 } 3766 3767 static int hpsa_suspend(__attribute__((unused)) struct pci_dev *pdev, 3768 __attribute__((unused)) pm_message_t state) 3769 { 3770 return -ENOSYS; 3771 } 3772 3773 static int hpsa_resume(__attribute__((unused)) struct pci_dev *pdev) 3774 { 3775 return -ENOSYS; 3776 } 3777 3778 static struct pci_driver hpsa_pci_driver = { 3779 .name = "hpsa", 3780 .probe = hpsa_init_one, 3781 .remove = __devexit_p(hpsa_remove_one), 3782 .id_table = hpsa_pci_device_id, /* id_table */ 3783 .shutdown = hpsa_shutdown, 3784 .suspend = hpsa_suspend, 3785 .resume = hpsa_resume, 3786 }; 3787 3788 /* Fill in bucket_map[], given nsgs (the max number of 3789 * scatter gather elements supported) and bucket[], 3790 * which is an array of 8 integers. The bucket[] array 3791 * contains 8 different DMA transfer sizes (in 16 3792 * byte increments) which the controller uses to fetch 3793 * commands. This function fills in bucket_map[], which 3794 * maps a given number of scatter gather elements to one of 3795 * the 8 DMA transfer sizes. The point of it is to allow the 3796 * controller to only do as much DMA as needed to fetch the 3797 * command, with the DMA transfer size encoded in the lower 3798 * bits of the command address. 3799 */ 3800 static void calc_bucket_map(int bucket[], int num_buckets, 3801 int nsgs, int *bucket_map) 3802 { 3803 int i, j, b, size; 3804 3805 /* even a command with 0 SGs requires 4 blocks */ 3806 #define MINIMUM_TRANSFER_BLOCKS 4 3807 #define NUM_BUCKETS 8 3808 /* Note, bucket_map must have nsgs+1 entries. */ 3809 for (i = 0; i <= nsgs; i++) { 3810 /* Compute size of a command with i SG entries */ 3811 size = i + MINIMUM_TRANSFER_BLOCKS; 3812 b = num_buckets; /* Assume the biggest bucket */ 3813 /* Find the bucket that is just big enough */ 3814 for (j = 0; j < 8; j++) { 3815 if (bucket[j] >= size) { 3816 b = j; 3817 break; 3818 } 3819 } 3820 /* for a command with i SG entries, use bucket b. */ 3821 bucket_map[i] = b; 3822 } 3823 } 3824 3825 static __devinit void hpsa_enter_performant_mode(struct ctlr_info *h) 3826 { 3827 int i; 3828 unsigned long register_value; 3829 3830 /* This is a bit complicated. There are 8 registers on 3831 * the controller which we write to to tell it 8 different 3832 * sizes of commands which there may be. It's a way of 3833 * reducing the DMA done to fetch each command. Encoded into 3834 * each command's tag are 3 bits which communicate to the controller 3835 * which of the eight sizes that command fits within. The size of 3836 * each command depends on how many scatter gather entries there are. 3837 * Each SG entry requires 16 bytes. The eight registers are programmed 3838 * with the number of 16-byte blocks a command of that size requires. 3839 * The smallest command possible requires 5 such 16 byte blocks. 3840 * the largest command possible requires MAXSGENTRIES + 4 16-byte 3841 * blocks. Note, this only extends to the SG entries contained 3842 * within the command block, and does not extend to chained blocks 3843 * of SG elements. bft[] contains the eight values we write to 3844 * the registers. They are not evenly distributed, but have more 3845 * sizes for small commands, and fewer sizes for larger commands. 3846 */ 3847 int bft[8] = {5, 6, 8, 10, 12, 20, 28, MAXSGENTRIES + 4}; 3848 BUILD_BUG_ON(28 > MAXSGENTRIES + 4); 3849 /* 5 = 1 s/g entry or 4k 3850 * 6 = 2 s/g entry or 8k 3851 * 8 = 4 s/g entry or 16k 3852 * 10 = 6 s/g entry or 24k 3853 */ 3854 3855 h->reply_pool_wraparound = 1; /* spec: init to 1 */ 3856 3857 /* Controller spec: zero out this buffer. */ 3858 memset(h->reply_pool, 0, h->reply_pool_size); 3859 h->reply_pool_head = h->reply_pool; 3860 3861 bft[7] = h->max_sg_entries + 4; 3862 calc_bucket_map(bft, ARRAY_SIZE(bft), 32, h->blockFetchTable); 3863 for (i = 0; i < 8; i++) 3864 writel(bft[i], &h->transtable->BlockFetch[i]); 3865 3866 /* size of controller ring buffer */ 3867 writel(h->max_commands, &h->transtable->RepQSize); 3868 writel(1, &h->transtable->RepQCount); 3869 writel(0, &h->transtable->RepQCtrAddrLow32); 3870 writel(0, &h->transtable->RepQCtrAddrHigh32); 3871 writel(h->reply_pool_dhandle, &h->transtable->RepQAddr0Low32); 3872 writel(0, &h->transtable->RepQAddr0High32); 3873 writel(CFGTBL_Trans_Performant, 3874 &(h->cfgtable->HostWrite.TransportRequest)); 3875 writel(CFGTBL_ChangeReq, h->vaddr + SA5_DOORBELL); 3876 hpsa_wait_for_mode_change_ack(h); 3877 register_value = readl(&(h->cfgtable->TransportActive)); 3878 if (!(register_value & CFGTBL_Trans_Performant)) { 3879 dev_warn(&h->pdev->dev, "unable to get board into" 3880 " performant mode\n"); 3881 return; 3882 } 3883 } 3884 3885 static __devinit void hpsa_put_ctlr_into_performant_mode(struct ctlr_info *h) 3886 { 3887 u32 trans_support; 3888 3889 trans_support = readl(&(h->cfgtable->TransportSupport)); 3890 if (!(trans_support & PERFORMANT_MODE)) 3891 return; 3892 3893 h->max_commands = readl(&(h->cfgtable->MaxPerformantModeCommands)); 3894 h->max_sg_entries = 32; 3895 /* Performant mode ring buffer and supporting data structures */ 3896 h->reply_pool_size = h->max_commands * sizeof(u64); 3897 h->reply_pool = pci_alloc_consistent(h->pdev, h->reply_pool_size, 3898 &(h->reply_pool_dhandle)); 3899 3900 /* Need a block fetch table for performant mode */ 3901 h->blockFetchTable = kmalloc(((h->max_sg_entries+1) * 3902 sizeof(u32)), GFP_KERNEL); 3903 3904 if ((h->reply_pool == NULL) 3905 || (h->blockFetchTable == NULL)) 3906 goto clean_up; 3907 3908 hpsa_enter_performant_mode(h); 3909 3910 /* Change the access methods to the performant access methods */ 3911 h->access = SA5_performant_access; 3912 h->transMethod = CFGTBL_Trans_Performant; 3913 3914 return; 3915 3916 clean_up: 3917 if (h->reply_pool) 3918 pci_free_consistent(h->pdev, h->reply_pool_size, 3919 h->reply_pool, h->reply_pool_dhandle); 3920 kfree(h->blockFetchTable); 3921 } 3922 3923 /* 3924 * This is it. Register the PCI driver information for the cards we control 3925 * the OS will call our registered routines when it finds one of our cards. 3926 */ 3927 static int __init hpsa_init(void) 3928 { 3929 return pci_register_driver(&hpsa_pci_driver); 3930 } 3931 3932 static void __exit hpsa_cleanup(void) 3933 { 3934 pci_unregister_driver(&hpsa_pci_driver); 3935 } 3936 3937 module_init(hpsa_init); 3938 module_exit(hpsa_cleanup); 3939