1 // SPDX-License-Identifier: GPL-2.0 2 /* 3 * Linux Driver for Mylex DAC960/AcceleRAID/eXtremeRAID PCI RAID Controllers 4 * 5 * Copyright 2017 Hannes Reinecke, SUSE Linux GmbH <hare@suse.com> 6 * 7 * Based on the original DAC960 driver, 8 * Copyright 1998-2001 by Leonard N. Zubkoff <lnz@dandelion.com> 9 * Portions Copyright 2002 by Mylex (An IBM Business Unit) 10 * 11 */ 12 13 #include <linux/module.h> 14 #include <linux/types.h> 15 #include <linux/delay.h> 16 #include <linux/interrupt.h> 17 #include <linux/pci.h> 18 #include <linux/raid_class.h> 19 #include <asm/unaligned.h> 20 #include <scsi/scsi.h> 21 #include <scsi/scsi_host.h> 22 #include <scsi/scsi_device.h> 23 #include <scsi/scsi_cmnd.h> 24 #include <scsi/scsi_tcq.h> 25 #include "myrb.h" 26 27 static struct raid_template *myrb_raid_template; 28 29 static void myrb_monitor(struct work_struct *work); 30 static inline void myrb_translate_devstate(void *DeviceState); 31 32 static inline int myrb_logical_channel(struct Scsi_Host *shost) 33 { 34 return shost->max_channel - 1; 35 } 36 37 static struct myrb_devstate_name_entry { 38 enum myrb_devstate state; 39 const char *name; 40 } myrb_devstate_name_list[] = { 41 { MYRB_DEVICE_DEAD, "Dead" }, 42 { MYRB_DEVICE_WO, "WriteOnly" }, 43 { MYRB_DEVICE_ONLINE, "Online" }, 44 { MYRB_DEVICE_CRITICAL, "Critical" }, 45 { MYRB_DEVICE_STANDBY, "Standby" }, 46 { MYRB_DEVICE_OFFLINE, "Offline" }, 47 }; 48 49 static const char *myrb_devstate_name(enum myrb_devstate state) 50 { 51 struct myrb_devstate_name_entry *entry = myrb_devstate_name_list; 52 int i; 53 54 for (i = 0; i < ARRAY_SIZE(myrb_devstate_name_list); i++) { 55 if (entry[i].state == state) 56 return entry[i].name; 57 } 58 return "Unknown"; 59 } 60 61 static struct myrb_raidlevel_name_entry { 62 enum myrb_raidlevel level; 63 const char *name; 64 } myrb_raidlevel_name_list[] = { 65 { MYRB_RAID_LEVEL0, "RAID0" }, 66 { MYRB_RAID_LEVEL1, "RAID1" }, 67 { MYRB_RAID_LEVEL3, "RAID3" }, 68 { MYRB_RAID_LEVEL5, "RAID5" }, 69 { MYRB_RAID_LEVEL6, "RAID6" }, 70 { MYRB_RAID_JBOD, "JBOD" }, 71 }; 72 73 static const char *myrb_raidlevel_name(enum myrb_raidlevel level) 74 { 75 struct myrb_raidlevel_name_entry *entry = myrb_raidlevel_name_list; 76 int i; 77 78 for (i = 0; i < ARRAY_SIZE(myrb_raidlevel_name_list); i++) { 79 if (entry[i].level == level) 80 return entry[i].name; 81 } 82 return NULL; 83 } 84 85 /* 86 * myrb_create_mempools - allocates auxiliary data structures 87 * 88 * Return: true on success, false otherwise. 89 */ 90 static bool myrb_create_mempools(struct pci_dev *pdev, struct myrb_hba *cb) 91 { 92 size_t elem_size, elem_align; 93 94 elem_align = sizeof(struct myrb_sge); 95 elem_size = cb->host->sg_tablesize * elem_align; 96 cb->sg_pool = dma_pool_create("myrb_sg", &pdev->dev, 97 elem_size, elem_align, 0); 98 if (cb->sg_pool == NULL) { 99 shost_printk(KERN_ERR, cb->host, 100 "Failed to allocate SG pool\n"); 101 return false; 102 } 103 104 cb->dcdb_pool = dma_pool_create("myrb_dcdb", &pdev->dev, 105 sizeof(struct myrb_dcdb), 106 sizeof(unsigned int), 0); 107 if (!cb->dcdb_pool) { 108 dma_pool_destroy(cb->sg_pool); 109 cb->sg_pool = NULL; 110 shost_printk(KERN_ERR, cb->host, 111 "Failed to allocate DCDB pool\n"); 112 return false; 113 } 114 115 snprintf(cb->work_q_name, sizeof(cb->work_q_name), 116 "myrb_wq_%d", cb->host->host_no); 117 cb->work_q = create_singlethread_workqueue(cb->work_q_name); 118 if (!cb->work_q) { 119 dma_pool_destroy(cb->dcdb_pool); 120 cb->dcdb_pool = NULL; 121 dma_pool_destroy(cb->sg_pool); 122 cb->sg_pool = NULL; 123 shost_printk(KERN_ERR, cb->host, 124 "Failed to create workqueue\n"); 125 return false; 126 } 127 128 /* 129 * Initialize the Monitoring Timer. 130 */ 131 INIT_DELAYED_WORK(&cb->monitor_work, myrb_monitor); 132 queue_delayed_work(cb->work_q, &cb->monitor_work, 1); 133 134 return true; 135 } 136 137 /* 138 * myrb_destroy_mempools - tears down the memory pools for the controller 139 */ 140 static void myrb_destroy_mempools(struct myrb_hba *cb) 141 { 142 cancel_delayed_work_sync(&cb->monitor_work); 143 destroy_workqueue(cb->work_q); 144 145 dma_pool_destroy(cb->sg_pool); 146 dma_pool_destroy(cb->dcdb_pool); 147 } 148 149 /* 150 * myrb_reset_cmd - reset command block 151 */ 152 static inline void myrb_reset_cmd(struct myrb_cmdblk *cmd_blk) 153 { 154 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 155 156 memset(mbox, 0, sizeof(union myrb_cmd_mbox)); 157 cmd_blk->status = 0; 158 } 159 160 /* 161 * myrb_qcmd - queues command block for execution 162 */ 163 static void myrb_qcmd(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk) 164 { 165 void __iomem *base = cb->io_base; 166 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 167 union myrb_cmd_mbox *next_mbox = cb->next_cmd_mbox; 168 169 cb->write_cmd_mbox(next_mbox, mbox); 170 if (cb->prev_cmd_mbox1->words[0] == 0 || 171 cb->prev_cmd_mbox2->words[0] == 0) 172 cb->get_cmd_mbox(base); 173 cb->prev_cmd_mbox2 = cb->prev_cmd_mbox1; 174 cb->prev_cmd_mbox1 = next_mbox; 175 if (++next_mbox > cb->last_cmd_mbox) 176 next_mbox = cb->first_cmd_mbox; 177 cb->next_cmd_mbox = next_mbox; 178 } 179 180 /* 181 * myrb_exec_cmd - executes command block and waits for completion. 182 * 183 * Return: command status 184 */ 185 static unsigned short myrb_exec_cmd(struct myrb_hba *cb, 186 struct myrb_cmdblk *cmd_blk) 187 { 188 DECLARE_COMPLETION_ONSTACK(cmpl); 189 unsigned long flags; 190 191 cmd_blk->completion = &cmpl; 192 193 spin_lock_irqsave(&cb->queue_lock, flags); 194 cb->qcmd(cb, cmd_blk); 195 spin_unlock_irqrestore(&cb->queue_lock, flags); 196 197 wait_for_completion(&cmpl); 198 return cmd_blk->status; 199 } 200 201 /* 202 * myrb_exec_type3 - executes a type 3 command and waits for completion. 203 * 204 * Return: command status 205 */ 206 static unsigned short myrb_exec_type3(struct myrb_hba *cb, 207 enum myrb_cmd_opcode op, dma_addr_t addr) 208 { 209 struct myrb_cmdblk *cmd_blk = &cb->dcmd_blk; 210 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 211 unsigned short status; 212 213 mutex_lock(&cb->dcmd_mutex); 214 myrb_reset_cmd(cmd_blk); 215 mbox->type3.id = MYRB_DCMD_TAG; 216 mbox->type3.opcode = op; 217 mbox->type3.addr = addr; 218 status = myrb_exec_cmd(cb, cmd_blk); 219 mutex_unlock(&cb->dcmd_mutex); 220 return status; 221 } 222 223 /* 224 * myrb_exec_type3D - executes a type 3D command and waits for completion. 225 * 226 * Return: command status 227 */ 228 static unsigned short myrb_exec_type3D(struct myrb_hba *cb, 229 enum myrb_cmd_opcode op, struct scsi_device *sdev, 230 struct myrb_pdev_state *pdev_info) 231 { 232 struct myrb_cmdblk *cmd_blk = &cb->dcmd_blk; 233 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 234 unsigned short status; 235 dma_addr_t pdev_info_addr; 236 237 pdev_info_addr = dma_map_single(&cb->pdev->dev, pdev_info, 238 sizeof(struct myrb_pdev_state), 239 DMA_FROM_DEVICE); 240 if (dma_mapping_error(&cb->pdev->dev, pdev_info_addr)) 241 return MYRB_STATUS_SUBSYS_FAILED; 242 243 mutex_lock(&cb->dcmd_mutex); 244 myrb_reset_cmd(cmd_blk); 245 mbox->type3D.id = MYRB_DCMD_TAG; 246 mbox->type3D.opcode = op; 247 mbox->type3D.channel = sdev->channel; 248 mbox->type3D.target = sdev->id; 249 mbox->type3D.addr = pdev_info_addr; 250 status = myrb_exec_cmd(cb, cmd_blk); 251 mutex_unlock(&cb->dcmd_mutex); 252 dma_unmap_single(&cb->pdev->dev, pdev_info_addr, 253 sizeof(struct myrb_pdev_state), DMA_FROM_DEVICE); 254 if (status == MYRB_STATUS_SUCCESS && 255 mbox->type3D.opcode == MYRB_CMD_GET_DEVICE_STATE_OLD) 256 myrb_translate_devstate(pdev_info); 257 258 return status; 259 } 260 261 static char *myrb_event_msg[] = { 262 "killed because write recovery failed", 263 "killed because of SCSI bus reset failure", 264 "killed because of double check condition", 265 "killed because it was removed", 266 "killed because of gross error on SCSI chip", 267 "killed because of bad tag returned from drive", 268 "killed because of timeout on SCSI command", 269 "killed because of reset SCSI command issued from system", 270 "killed because busy or parity error count exceeded limit", 271 "killed because of 'kill drive' command from system", 272 "killed because of selection timeout", 273 "killed due to SCSI phase sequence error", 274 "killed due to unknown status", 275 }; 276 277 /** 278 * myrb_get_event - get event log from HBA 279 * @cb: pointer to the hba structure 280 * @event: number of the event 281 * 282 * Execute a type 3E command and logs the event message 283 */ 284 static void myrb_get_event(struct myrb_hba *cb, unsigned int event) 285 { 286 struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk; 287 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 288 struct myrb_log_entry *ev_buf; 289 dma_addr_t ev_addr; 290 unsigned short status; 291 292 ev_buf = dma_alloc_coherent(&cb->pdev->dev, 293 sizeof(struct myrb_log_entry), 294 &ev_addr, GFP_KERNEL); 295 if (!ev_buf) 296 return; 297 298 myrb_reset_cmd(cmd_blk); 299 mbox->type3E.id = MYRB_MCMD_TAG; 300 mbox->type3E.opcode = MYRB_CMD_EVENT_LOG_OPERATION; 301 mbox->type3E.optype = DAC960_V1_GetEventLogEntry; 302 mbox->type3E.opqual = 1; 303 mbox->type3E.ev_seq = event; 304 mbox->type3E.addr = ev_addr; 305 status = myrb_exec_cmd(cb, cmd_blk); 306 if (status != MYRB_STATUS_SUCCESS) 307 shost_printk(KERN_INFO, cb->host, 308 "Failed to get event log %d, status %04x\n", 309 event, status); 310 311 else if (ev_buf->seq_num == event) { 312 struct scsi_sense_hdr sshdr; 313 314 memset(&sshdr, 0, sizeof(sshdr)); 315 scsi_normalize_sense(ev_buf->sense, 32, &sshdr); 316 317 if (sshdr.sense_key == VENDOR_SPECIFIC && 318 sshdr.asc == 0x80 && 319 sshdr.ascq < ARRAY_SIZE(myrb_event_msg)) 320 shost_printk(KERN_CRIT, cb->host, 321 "Physical drive %d:%d: %s\n", 322 ev_buf->channel, ev_buf->target, 323 myrb_event_msg[sshdr.ascq]); 324 else 325 shost_printk(KERN_CRIT, cb->host, 326 "Physical drive %d:%d: Sense: %X/%02X/%02X\n", 327 ev_buf->channel, ev_buf->target, 328 sshdr.sense_key, sshdr.asc, sshdr.ascq); 329 } 330 331 dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_log_entry), 332 ev_buf, ev_addr); 333 } 334 335 /* 336 * myrb_get_errtable - retrieves the error table from the controller 337 * 338 * Executes a type 3 command and logs the error table from the controller. 339 */ 340 static void myrb_get_errtable(struct myrb_hba *cb) 341 { 342 struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk; 343 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 344 unsigned short status; 345 struct myrb_error_entry old_table[MYRB_MAX_CHANNELS * MYRB_MAX_TARGETS]; 346 347 memcpy(&old_table, cb->err_table, sizeof(old_table)); 348 349 myrb_reset_cmd(cmd_blk); 350 mbox->type3.id = MYRB_MCMD_TAG; 351 mbox->type3.opcode = MYRB_CMD_GET_ERROR_TABLE; 352 mbox->type3.addr = cb->err_table_addr; 353 status = myrb_exec_cmd(cb, cmd_blk); 354 if (status == MYRB_STATUS_SUCCESS) { 355 struct myrb_error_entry *table = cb->err_table; 356 struct myrb_error_entry *new, *old; 357 size_t err_table_offset; 358 struct scsi_device *sdev; 359 360 shost_for_each_device(sdev, cb->host) { 361 if (sdev->channel >= myrb_logical_channel(cb->host)) 362 continue; 363 err_table_offset = sdev->channel * MYRB_MAX_TARGETS 364 + sdev->id; 365 new = table + err_table_offset; 366 old = &old_table[err_table_offset]; 367 if (new->parity_err == old->parity_err && 368 new->soft_err == old->soft_err && 369 new->hard_err == old->hard_err && 370 new->misc_err == old->misc_err) 371 continue; 372 sdev_printk(KERN_CRIT, sdev, 373 "Errors: Parity = %d, Soft = %d, Hard = %d, Misc = %d\n", 374 new->parity_err, new->soft_err, 375 new->hard_err, new->misc_err); 376 } 377 } 378 } 379 380 /* 381 * myrb_get_ldev_info - retrieves the logical device table from the controller 382 * 383 * Executes a type 3 command and updates the logical device table. 384 * 385 * Return: command status 386 */ 387 static unsigned short myrb_get_ldev_info(struct myrb_hba *cb) 388 { 389 unsigned short status; 390 int ldev_num, ldev_cnt = cb->enquiry->ldev_count; 391 struct Scsi_Host *shost = cb->host; 392 393 status = myrb_exec_type3(cb, MYRB_CMD_GET_LDEV_INFO, 394 cb->ldev_info_addr); 395 if (status != MYRB_STATUS_SUCCESS) 396 return status; 397 398 for (ldev_num = 0; ldev_num < ldev_cnt; ldev_num++) { 399 struct myrb_ldev_info *old = NULL; 400 struct myrb_ldev_info *new = cb->ldev_info_buf + ldev_num; 401 struct scsi_device *sdev; 402 403 sdev = scsi_device_lookup(shost, myrb_logical_channel(shost), 404 ldev_num, 0); 405 if (!sdev) { 406 if (new->state == MYRB_DEVICE_OFFLINE) 407 continue; 408 shost_printk(KERN_INFO, shost, 409 "Adding Logical Drive %d in state %s\n", 410 ldev_num, myrb_devstate_name(new->state)); 411 scsi_add_device(shost, myrb_logical_channel(shost), 412 ldev_num, 0); 413 continue; 414 } 415 old = sdev->hostdata; 416 if (new->state != old->state) 417 shost_printk(KERN_INFO, shost, 418 "Logical Drive %d is now %s\n", 419 ldev_num, myrb_devstate_name(new->state)); 420 if (new->wb_enabled != old->wb_enabled) 421 sdev_printk(KERN_INFO, sdev, 422 "Logical Drive is now WRITE %s\n", 423 (new->wb_enabled ? "BACK" : "THRU")); 424 memcpy(old, new, sizeof(*new)); 425 scsi_device_put(sdev); 426 } 427 return status; 428 } 429 430 /* 431 * myrb_get_rbld_progress - get rebuild progress information 432 * 433 * Executes a type 3 command and returns the rebuild progress 434 * information. 435 * 436 * Return: command status 437 */ 438 static unsigned short myrb_get_rbld_progress(struct myrb_hba *cb, 439 struct myrb_rbld_progress *rbld) 440 { 441 struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk; 442 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 443 struct myrb_rbld_progress *rbld_buf; 444 dma_addr_t rbld_addr; 445 unsigned short status; 446 447 rbld_buf = dma_alloc_coherent(&cb->pdev->dev, 448 sizeof(struct myrb_rbld_progress), 449 &rbld_addr, GFP_KERNEL); 450 if (!rbld_buf) 451 return MYRB_STATUS_RBLD_NOT_CHECKED; 452 453 myrb_reset_cmd(cmd_blk); 454 mbox->type3.id = MYRB_MCMD_TAG; 455 mbox->type3.opcode = MYRB_CMD_GET_REBUILD_PROGRESS; 456 mbox->type3.addr = rbld_addr; 457 status = myrb_exec_cmd(cb, cmd_blk); 458 if (rbld) 459 memcpy(rbld, rbld_buf, sizeof(struct myrb_rbld_progress)); 460 dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_rbld_progress), 461 rbld_buf, rbld_addr); 462 return status; 463 } 464 465 /* 466 * myrb_update_rbld_progress - updates the rebuild status 467 * 468 * Updates the rebuild status for the attached logical devices. 469 */ 470 static void myrb_update_rbld_progress(struct myrb_hba *cb) 471 { 472 struct myrb_rbld_progress rbld_buf; 473 unsigned short status; 474 475 status = myrb_get_rbld_progress(cb, &rbld_buf); 476 if (status == MYRB_NO_STDBY_RBLD_OR_CHECK_IN_PROGRESS && 477 cb->last_rbld_status == MYRB_STATUS_SUCCESS) 478 status = MYRB_STATUS_RBLD_SUCCESS; 479 if (status != MYRB_NO_STDBY_RBLD_OR_CHECK_IN_PROGRESS) { 480 unsigned int blocks_done = 481 rbld_buf.ldev_size - rbld_buf.blocks_left; 482 struct scsi_device *sdev; 483 484 sdev = scsi_device_lookup(cb->host, 485 myrb_logical_channel(cb->host), 486 rbld_buf.ldev_num, 0); 487 if (!sdev) 488 return; 489 490 switch (status) { 491 case MYRB_STATUS_SUCCESS: 492 sdev_printk(KERN_INFO, sdev, 493 "Rebuild in Progress, %d%% completed\n", 494 (100 * (blocks_done >> 7)) 495 / (rbld_buf.ldev_size >> 7)); 496 break; 497 case MYRB_STATUS_RBLD_FAILED_LDEV_FAILURE: 498 sdev_printk(KERN_INFO, sdev, 499 "Rebuild Failed due to Logical Drive Failure\n"); 500 break; 501 case MYRB_STATUS_RBLD_FAILED_BADBLOCKS: 502 sdev_printk(KERN_INFO, sdev, 503 "Rebuild Failed due to Bad Blocks on Other Drives\n"); 504 break; 505 case MYRB_STATUS_RBLD_FAILED_NEW_DRIVE_FAILED: 506 sdev_printk(KERN_INFO, sdev, 507 "Rebuild Failed due to Failure of Drive Being Rebuilt\n"); 508 break; 509 case MYRB_STATUS_RBLD_SUCCESS: 510 sdev_printk(KERN_INFO, sdev, 511 "Rebuild Completed Successfully\n"); 512 break; 513 case MYRB_STATUS_RBLD_SUCCESS_TERMINATED: 514 sdev_printk(KERN_INFO, sdev, 515 "Rebuild Successfully Terminated\n"); 516 break; 517 default: 518 break; 519 } 520 scsi_device_put(sdev); 521 } 522 cb->last_rbld_status = status; 523 } 524 525 /* 526 * myrb_get_cc_progress - retrieve the rebuild status 527 * 528 * Execute a type 3 Command and fetch the rebuild / consistency check 529 * status. 530 */ 531 static void myrb_get_cc_progress(struct myrb_hba *cb) 532 { 533 struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk; 534 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 535 struct myrb_rbld_progress *rbld_buf; 536 dma_addr_t rbld_addr; 537 unsigned short status; 538 539 rbld_buf = dma_alloc_coherent(&cb->pdev->dev, 540 sizeof(struct myrb_rbld_progress), 541 &rbld_addr, GFP_KERNEL); 542 if (!rbld_buf) { 543 cb->need_cc_status = true; 544 return; 545 } 546 myrb_reset_cmd(cmd_blk); 547 mbox->type3.id = MYRB_MCMD_TAG; 548 mbox->type3.opcode = MYRB_CMD_REBUILD_STAT; 549 mbox->type3.addr = rbld_addr; 550 status = myrb_exec_cmd(cb, cmd_blk); 551 if (status == MYRB_STATUS_SUCCESS) { 552 unsigned int ldev_num = rbld_buf->ldev_num; 553 unsigned int ldev_size = rbld_buf->ldev_size; 554 unsigned int blocks_done = 555 ldev_size - rbld_buf->blocks_left; 556 struct scsi_device *sdev; 557 558 sdev = scsi_device_lookup(cb->host, 559 myrb_logical_channel(cb->host), 560 ldev_num, 0); 561 if (sdev) { 562 sdev_printk(KERN_INFO, sdev, 563 "Consistency Check in Progress: %d%% completed\n", 564 (100 * (blocks_done >> 7)) 565 / (ldev_size >> 7)); 566 scsi_device_put(sdev); 567 } 568 } 569 dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_rbld_progress), 570 rbld_buf, rbld_addr); 571 } 572 573 /* 574 * myrb_bgi_control - updates background initialisation status 575 * 576 * Executes a type 3B command and updates the background initialisation status 577 */ 578 static void myrb_bgi_control(struct myrb_hba *cb) 579 { 580 struct myrb_cmdblk *cmd_blk = &cb->mcmd_blk; 581 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 582 struct myrb_bgi_status *bgi, *last_bgi; 583 dma_addr_t bgi_addr; 584 struct scsi_device *sdev = NULL; 585 unsigned short status; 586 587 bgi = dma_alloc_coherent(&cb->pdev->dev, sizeof(struct myrb_bgi_status), 588 &bgi_addr, GFP_KERNEL); 589 if (!bgi) { 590 shost_printk(KERN_ERR, cb->host, 591 "Failed to allocate bgi memory\n"); 592 return; 593 } 594 myrb_reset_cmd(cmd_blk); 595 mbox->type3B.id = MYRB_DCMD_TAG; 596 mbox->type3B.opcode = MYRB_CMD_BGI_CONTROL; 597 mbox->type3B.optype = 0x20; 598 mbox->type3B.addr = bgi_addr; 599 status = myrb_exec_cmd(cb, cmd_blk); 600 last_bgi = &cb->bgi_status; 601 sdev = scsi_device_lookup(cb->host, 602 myrb_logical_channel(cb->host), 603 bgi->ldev_num, 0); 604 switch (status) { 605 case MYRB_STATUS_SUCCESS: 606 switch (bgi->status) { 607 case MYRB_BGI_INVALID: 608 break; 609 case MYRB_BGI_STARTED: 610 if (!sdev) 611 break; 612 sdev_printk(KERN_INFO, sdev, 613 "Background Initialization Started\n"); 614 break; 615 case MYRB_BGI_INPROGRESS: 616 if (!sdev) 617 break; 618 if (bgi->blocks_done == last_bgi->blocks_done && 619 bgi->ldev_num == last_bgi->ldev_num) 620 break; 621 sdev_printk(KERN_INFO, sdev, 622 "Background Initialization in Progress: %d%% completed\n", 623 (100 * (bgi->blocks_done >> 7)) 624 / (bgi->ldev_size >> 7)); 625 break; 626 case MYRB_BGI_SUSPENDED: 627 if (!sdev) 628 break; 629 sdev_printk(KERN_INFO, sdev, 630 "Background Initialization Suspended\n"); 631 break; 632 case MYRB_BGI_CANCELLED: 633 if (!sdev) 634 break; 635 sdev_printk(KERN_INFO, sdev, 636 "Background Initialization Cancelled\n"); 637 break; 638 } 639 memcpy(&cb->bgi_status, bgi, sizeof(struct myrb_bgi_status)); 640 break; 641 case MYRB_STATUS_BGI_SUCCESS: 642 if (sdev && cb->bgi_status.status == MYRB_BGI_INPROGRESS) 643 sdev_printk(KERN_INFO, sdev, 644 "Background Initialization Completed Successfully\n"); 645 cb->bgi_status.status = MYRB_BGI_INVALID; 646 break; 647 case MYRB_STATUS_BGI_ABORTED: 648 if (sdev && cb->bgi_status.status == MYRB_BGI_INPROGRESS) 649 sdev_printk(KERN_INFO, sdev, 650 "Background Initialization Aborted\n"); 651 fallthrough; 652 case MYRB_STATUS_NO_BGI_INPROGRESS: 653 cb->bgi_status.status = MYRB_BGI_INVALID; 654 break; 655 } 656 if (sdev) 657 scsi_device_put(sdev); 658 dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_bgi_status), 659 bgi, bgi_addr); 660 } 661 662 /* 663 * myrb_hba_enquiry - updates the controller status 664 * 665 * Executes a DAC_V1_Enquiry command and updates the controller status. 666 * 667 * Return: command status 668 */ 669 static unsigned short myrb_hba_enquiry(struct myrb_hba *cb) 670 { 671 struct myrb_enquiry old, *new; 672 unsigned short status; 673 674 memcpy(&old, cb->enquiry, sizeof(struct myrb_enquiry)); 675 676 status = myrb_exec_type3(cb, MYRB_CMD_ENQUIRY, cb->enquiry_addr); 677 if (status != MYRB_STATUS_SUCCESS) 678 return status; 679 680 new = cb->enquiry; 681 if (new->ldev_count > old.ldev_count) { 682 int ldev_num = old.ldev_count - 1; 683 684 while (++ldev_num < new->ldev_count) 685 shost_printk(KERN_CRIT, cb->host, 686 "Logical Drive %d Now Exists\n", 687 ldev_num); 688 } 689 if (new->ldev_count < old.ldev_count) { 690 int ldev_num = new->ldev_count - 1; 691 692 while (++ldev_num < old.ldev_count) 693 shost_printk(KERN_CRIT, cb->host, 694 "Logical Drive %d No Longer Exists\n", 695 ldev_num); 696 } 697 if (new->status.deferred != old.status.deferred) 698 shost_printk(KERN_CRIT, cb->host, 699 "Deferred Write Error Flag is now %s\n", 700 (new->status.deferred ? "TRUE" : "FALSE")); 701 if (new->ev_seq != old.ev_seq) { 702 cb->new_ev_seq = new->ev_seq; 703 cb->need_err_info = true; 704 shost_printk(KERN_INFO, cb->host, 705 "Event log %d/%d (%d/%d) available\n", 706 cb->old_ev_seq, cb->new_ev_seq, 707 old.ev_seq, new->ev_seq); 708 } 709 if ((new->ldev_critical > 0 && 710 new->ldev_critical != old.ldev_critical) || 711 (new->ldev_offline > 0 && 712 new->ldev_offline != old.ldev_offline) || 713 (new->ldev_count != old.ldev_count)) { 714 shost_printk(KERN_INFO, cb->host, 715 "Logical drive count changed (%d/%d/%d)\n", 716 new->ldev_critical, 717 new->ldev_offline, 718 new->ldev_count); 719 cb->need_ldev_info = true; 720 } 721 if (new->pdev_dead > 0 || 722 new->pdev_dead != old.pdev_dead || 723 time_after_eq(jiffies, cb->secondary_monitor_time 724 + MYRB_SECONDARY_MONITOR_INTERVAL)) { 725 cb->need_bgi_status = cb->bgi_status_supported; 726 cb->secondary_monitor_time = jiffies; 727 } 728 if (new->rbld == MYRB_STDBY_RBLD_IN_PROGRESS || 729 new->rbld == MYRB_BG_RBLD_IN_PROGRESS || 730 old.rbld == MYRB_STDBY_RBLD_IN_PROGRESS || 731 old.rbld == MYRB_BG_RBLD_IN_PROGRESS) { 732 cb->need_rbld = true; 733 cb->rbld_first = (new->ldev_critical < old.ldev_critical); 734 } 735 if (old.rbld == MYRB_BG_CHECK_IN_PROGRESS) 736 switch (new->rbld) { 737 case MYRB_NO_STDBY_RBLD_OR_CHECK_IN_PROGRESS: 738 shost_printk(KERN_INFO, cb->host, 739 "Consistency Check Completed Successfully\n"); 740 break; 741 case MYRB_STDBY_RBLD_IN_PROGRESS: 742 case MYRB_BG_RBLD_IN_PROGRESS: 743 break; 744 case MYRB_BG_CHECK_IN_PROGRESS: 745 cb->need_cc_status = true; 746 break; 747 case MYRB_STDBY_RBLD_COMPLETED_WITH_ERROR: 748 shost_printk(KERN_INFO, cb->host, 749 "Consistency Check Completed with Error\n"); 750 break; 751 case MYRB_BG_RBLD_OR_CHECK_FAILED_DRIVE_FAILED: 752 shost_printk(KERN_INFO, cb->host, 753 "Consistency Check Failed - Physical Device Failed\n"); 754 break; 755 case MYRB_BG_RBLD_OR_CHECK_FAILED_LDEV_FAILED: 756 shost_printk(KERN_INFO, cb->host, 757 "Consistency Check Failed - Logical Drive Failed\n"); 758 break; 759 case MYRB_BG_RBLD_OR_CHECK_FAILED_OTHER: 760 shost_printk(KERN_INFO, cb->host, 761 "Consistency Check Failed - Other Causes\n"); 762 break; 763 case MYRB_BG_RBLD_OR_CHECK_SUCCESS_TERMINATED: 764 shost_printk(KERN_INFO, cb->host, 765 "Consistency Check Successfully Terminated\n"); 766 break; 767 } 768 else if (new->rbld == MYRB_BG_CHECK_IN_PROGRESS) 769 cb->need_cc_status = true; 770 771 return MYRB_STATUS_SUCCESS; 772 } 773 774 /* 775 * myrb_set_pdev_state - sets the device state for a physical device 776 * 777 * Return: command status 778 */ 779 static unsigned short myrb_set_pdev_state(struct myrb_hba *cb, 780 struct scsi_device *sdev, enum myrb_devstate state) 781 { 782 struct myrb_cmdblk *cmd_blk = &cb->dcmd_blk; 783 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 784 unsigned short status; 785 786 mutex_lock(&cb->dcmd_mutex); 787 mbox->type3D.opcode = MYRB_CMD_START_DEVICE; 788 mbox->type3D.id = MYRB_DCMD_TAG; 789 mbox->type3D.channel = sdev->channel; 790 mbox->type3D.target = sdev->id; 791 mbox->type3D.state = state & 0x1F; 792 status = myrb_exec_cmd(cb, cmd_blk); 793 mutex_unlock(&cb->dcmd_mutex); 794 795 return status; 796 } 797 798 /* 799 * myrb_enable_mmio - enables the Memory Mailbox Interface 800 * 801 * PD and P controller types have no memory mailbox, but still need the 802 * other dma mapped memory. 803 * 804 * Return: true on success, false otherwise. 805 */ 806 static bool myrb_enable_mmio(struct myrb_hba *cb, mbox_mmio_init_t mmio_init_fn) 807 { 808 void __iomem *base = cb->io_base; 809 struct pci_dev *pdev = cb->pdev; 810 size_t err_table_size; 811 size_t ldev_info_size; 812 union myrb_cmd_mbox *cmd_mbox_mem; 813 struct myrb_stat_mbox *stat_mbox_mem; 814 union myrb_cmd_mbox mbox; 815 unsigned short status; 816 817 memset(&mbox, 0, sizeof(union myrb_cmd_mbox)); 818 819 if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(32))) { 820 dev_err(&pdev->dev, "DMA mask out of range\n"); 821 return false; 822 } 823 824 cb->enquiry = dma_alloc_coherent(&pdev->dev, 825 sizeof(struct myrb_enquiry), 826 &cb->enquiry_addr, GFP_KERNEL); 827 if (!cb->enquiry) 828 return false; 829 830 err_table_size = sizeof(struct myrb_error_entry) * 831 MYRB_MAX_CHANNELS * MYRB_MAX_TARGETS; 832 cb->err_table = dma_alloc_coherent(&pdev->dev, err_table_size, 833 &cb->err_table_addr, GFP_KERNEL); 834 if (!cb->err_table) 835 return false; 836 837 ldev_info_size = sizeof(struct myrb_ldev_info) * MYRB_MAX_LDEVS; 838 cb->ldev_info_buf = dma_alloc_coherent(&pdev->dev, ldev_info_size, 839 &cb->ldev_info_addr, GFP_KERNEL); 840 if (!cb->ldev_info_buf) 841 return false; 842 843 /* 844 * Skip mailbox initialisation for PD and P Controllers 845 */ 846 if (!mmio_init_fn) 847 return true; 848 849 /* These are the base addresses for the command memory mailbox array */ 850 cb->cmd_mbox_size = MYRB_CMD_MBOX_COUNT * sizeof(union myrb_cmd_mbox); 851 cb->first_cmd_mbox = dma_alloc_coherent(&pdev->dev, 852 cb->cmd_mbox_size, 853 &cb->cmd_mbox_addr, 854 GFP_KERNEL); 855 if (!cb->first_cmd_mbox) 856 return false; 857 858 cmd_mbox_mem = cb->first_cmd_mbox; 859 cmd_mbox_mem += MYRB_CMD_MBOX_COUNT - 1; 860 cb->last_cmd_mbox = cmd_mbox_mem; 861 cb->next_cmd_mbox = cb->first_cmd_mbox; 862 cb->prev_cmd_mbox1 = cb->last_cmd_mbox; 863 cb->prev_cmd_mbox2 = cb->last_cmd_mbox - 1; 864 865 /* These are the base addresses for the status memory mailbox array */ 866 cb->stat_mbox_size = MYRB_STAT_MBOX_COUNT * 867 sizeof(struct myrb_stat_mbox); 868 cb->first_stat_mbox = dma_alloc_coherent(&pdev->dev, 869 cb->stat_mbox_size, 870 &cb->stat_mbox_addr, 871 GFP_KERNEL); 872 if (!cb->first_stat_mbox) 873 return false; 874 875 stat_mbox_mem = cb->first_stat_mbox; 876 stat_mbox_mem += MYRB_STAT_MBOX_COUNT - 1; 877 cb->last_stat_mbox = stat_mbox_mem; 878 cb->next_stat_mbox = cb->first_stat_mbox; 879 880 /* Enable the Memory Mailbox Interface. */ 881 cb->dual_mode_interface = true; 882 mbox.typeX.opcode = 0x2B; 883 mbox.typeX.id = 0; 884 mbox.typeX.opcode2 = 0x14; 885 mbox.typeX.cmd_mbox_addr = cb->cmd_mbox_addr; 886 mbox.typeX.stat_mbox_addr = cb->stat_mbox_addr; 887 888 status = mmio_init_fn(pdev, base, &mbox); 889 if (status != MYRB_STATUS_SUCCESS) { 890 cb->dual_mode_interface = false; 891 mbox.typeX.opcode2 = 0x10; 892 status = mmio_init_fn(pdev, base, &mbox); 893 if (status != MYRB_STATUS_SUCCESS) { 894 dev_err(&pdev->dev, 895 "Failed to enable mailbox, statux %02X\n", 896 status); 897 return false; 898 } 899 } 900 return true; 901 } 902 903 /* 904 * myrb_get_hba_config - reads the configuration information 905 * 906 * Reads the configuration information from the controller and 907 * initializes the controller structure. 908 * 909 * Return: 0 on success, errno otherwise 910 */ 911 static int myrb_get_hba_config(struct myrb_hba *cb) 912 { 913 struct myrb_enquiry2 *enquiry2; 914 dma_addr_t enquiry2_addr; 915 struct myrb_config2 *config2; 916 dma_addr_t config2_addr; 917 struct Scsi_Host *shost = cb->host; 918 struct pci_dev *pdev = cb->pdev; 919 int pchan_max = 0, pchan_cur = 0; 920 unsigned short status; 921 int ret = -ENODEV, memsize = 0; 922 923 enquiry2 = dma_alloc_coherent(&pdev->dev, sizeof(struct myrb_enquiry2), 924 &enquiry2_addr, GFP_KERNEL); 925 if (!enquiry2) { 926 shost_printk(KERN_ERR, cb->host, 927 "Failed to allocate V1 enquiry2 memory\n"); 928 return -ENOMEM; 929 } 930 config2 = dma_alloc_coherent(&pdev->dev, sizeof(struct myrb_config2), 931 &config2_addr, GFP_KERNEL); 932 if (!config2) { 933 shost_printk(KERN_ERR, cb->host, 934 "Failed to allocate V1 config2 memory\n"); 935 dma_free_coherent(&pdev->dev, sizeof(struct myrb_enquiry2), 936 enquiry2, enquiry2_addr); 937 return -ENOMEM; 938 } 939 mutex_lock(&cb->dma_mutex); 940 status = myrb_hba_enquiry(cb); 941 mutex_unlock(&cb->dma_mutex); 942 if (status != MYRB_STATUS_SUCCESS) { 943 shost_printk(KERN_WARNING, cb->host, 944 "Failed it issue V1 Enquiry\n"); 945 goto out_free; 946 } 947 948 status = myrb_exec_type3(cb, MYRB_CMD_ENQUIRY2, enquiry2_addr); 949 if (status != MYRB_STATUS_SUCCESS) { 950 shost_printk(KERN_WARNING, cb->host, 951 "Failed to issue V1 Enquiry2\n"); 952 goto out_free; 953 } 954 955 status = myrb_exec_type3(cb, MYRB_CMD_READ_CONFIG2, config2_addr); 956 if (status != MYRB_STATUS_SUCCESS) { 957 shost_printk(KERN_WARNING, cb->host, 958 "Failed to issue ReadConfig2\n"); 959 goto out_free; 960 } 961 962 status = myrb_get_ldev_info(cb); 963 if (status != MYRB_STATUS_SUCCESS) { 964 shost_printk(KERN_WARNING, cb->host, 965 "Failed to get logical drive information\n"); 966 goto out_free; 967 } 968 969 /* 970 * Initialize the Controller Model Name and Full Model Name fields. 971 */ 972 switch (enquiry2->hw.sub_model) { 973 case DAC960_V1_P_PD_PU: 974 if (enquiry2->scsi_cap.bus_speed == MYRB_SCSI_SPEED_ULTRA) 975 strcpy(cb->model_name, "DAC960PU"); 976 else 977 strcpy(cb->model_name, "DAC960PD"); 978 break; 979 case DAC960_V1_PL: 980 strcpy(cb->model_name, "DAC960PL"); 981 break; 982 case DAC960_V1_PG: 983 strcpy(cb->model_name, "DAC960PG"); 984 break; 985 case DAC960_V1_PJ: 986 strcpy(cb->model_name, "DAC960PJ"); 987 break; 988 case DAC960_V1_PR: 989 strcpy(cb->model_name, "DAC960PR"); 990 break; 991 case DAC960_V1_PT: 992 strcpy(cb->model_name, "DAC960PT"); 993 break; 994 case DAC960_V1_PTL0: 995 strcpy(cb->model_name, "DAC960PTL0"); 996 break; 997 case DAC960_V1_PRL: 998 strcpy(cb->model_name, "DAC960PRL"); 999 break; 1000 case DAC960_V1_PTL1: 1001 strcpy(cb->model_name, "DAC960PTL1"); 1002 break; 1003 case DAC960_V1_1164P: 1004 strcpy(cb->model_name, "eXtremeRAID 1100"); 1005 break; 1006 default: 1007 shost_printk(KERN_WARNING, cb->host, 1008 "Unknown Model %X\n", 1009 enquiry2->hw.sub_model); 1010 goto out; 1011 } 1012 /* 1013 * Initialize the Controller Firmware Version field and verify that it 1014 * is a supported firmware version. 1015 * The supported firmware versions are: 1016 * 1017 * DAC1164P 5.06 and above 1018 * DAC960PTL/PRL/PJ/PG 4.06 and above 1019 * DAC960PU/PD/PL 3.51 and above 1020 * DAC960PU/PD/PL/P 2.73 and above 1021 */ 1022 #if defined(CONFIG_ALPHA) 1023 /* 1024 * DEC Alpha machines were often equipped with DAC960 cards that were 1025 * OEMed from Mylex, and had their own custom firmware. Version 2.70, 1026 * the last custom FW revision to be released by DEC for these older 1027 * controllers, appears to work quite well with this driver. 1028 * 1029 * Cards tested successfully were several versions each of the PD and 1030 * PU, called by DEC the KZPSC and KZPAC, respectively, and having 1031 * the Manufacturer Numbers (from Mylex), usually on a sticker on the 1032 * back of the board, of: 1033 * 1034 * KZPSC: D040347 (1-channel) or D040348 (2-channel) 1035 * or D040349 (3-channel) 1036 * KZPAC: D040395 (1-channel) or D040396 (2-channel) 1037 * or D040397 (3-channel) 1038 */ 1039 # define FIRMWARE_27X "2.70" 1040 #else 1041 # define FIRMWARE_27X "2.73" 1042 #endif 1043 1044 if (enquiry2->fw.major_version == 0) { 1045 enquiry2->fw.major_version = cb->enquiry->fw_major_version; 1046 enquiry2->fw.minor_version = cb->enquiry->fw_minor_version; 1047 enquiry2->fw.firmware_type = '0'; 1048 enquiry2->fw.turn_id = 0; 1049 } 1050 snprintf(cb->fw_version, sizeof(cb->fw_version), 1051 "%u.%02u-%c-%02u", 1052 enquiry2->fw.major_version, 1053 enquiry2->fw.minor_version, 1054 enquiry2->fw.firmware_type, 1055 enquiry2->fw.turn_id); 1056 if (!((enquiry2->fw.major_version == 5 && 1057 enquiry2->fw.minor_version >= 6) || 1058 (enquiry2->fw.major_version == 4 && 1059 enquiry2->fw.minor_version >= 6) || 1060 (enquiry2->fw.major_version == 3 && 1061 enquiry2->fw.minor_version >= 51) || 1062 (enquiry2->fw.major_version == 2 && 1063 strcmp(cb->fw_version, FIRMWARE_27X) >= 0))) { 1064 shost_printk(KERN_WARNING, cb->host, 1065 "Firmware Version '%s' unsupported\n", 1066 cb->fw_version); 1067 goto out; 1068 } 1069 /* 1070 * Initialize the Channels, Targets, Memory Size, and SAF-TE 1071 * Enclosure Management Enabled fields. 1072 */ 1073 switch (enquiry2->hw.model) { 1074 case MYRB_5_CHANNEL_BOARD: 1075 pchan_max = 5; 1076 break; 1077 case MYRB_3_CHANNEL_BOARD: 1078 case MYRB_3_CHANNEL_ASIC_DAC: 1079 pchan_max = 3; 1080 break; 1081 case MYRB_2_CHANNEL_BOARD: 1082 pchan_max = 2; 1083 break; 1084 default: 1085 pchan_max = enquiry2->cfg_chan; 1086 break; 1087 } 1088 pchan_cur = enquiry2->cur_chan; 1089 if (enquiry2->scsi_cap.bus_width == MYRB_WIDTH_WIDE_32BIT) 1090 cb->bus_width = 32; 1091 else if (enquiry2->scsi_cap.bus_width == MYRB_WIDTH_WIDE_16BIT) 1092 cb->bus_width = 16; 1093 else 1094 cb->bus_width = 8; 1095 cb->ldev_block_size = enquiry2->ldev_block_size; 1096 shost->max_channel = pchan_cur; 1097 shost->max_id = enquiry2->max_targets; 1098 memsize = enquiry2->mem_size >> 20; 1099 cb->safte_enabled = (enquiry2->fault_mgmt == MYRB_FAULT_SAFTE); 1100 /* 1101 * Initialize the Controller Queue Depth, Driver Queue Depth, 1102 * Logical Drive Count, Maximum Blocks per Command, Controller 1103 * Scatter/Gather Limit, and Driver Scatter/Gather Limit. 1104 * The Driver Queue Depth must be at most one less than the 1105 * Controller Queue Depth to allow for an automatic drive 1106 * rebuild operation. 1107 */ 1108 shost->can_queue = cb->enquiry->max_tcq; 1109 if (shost->can_queue < 3) 1110 shost->can_queue = enquiry2->max_cmds; 1111 if (shost->can_queue < 3) 1112 /* Play safe and disable TCQ */ 1113 shost->can_queue = 1; 1114 1115 if (shost->can_queue > MYRB_CMD_MBOX_COUNT - 2) 1116 shost->can_queue = MYRB_CMD_MBOX_COUNT - 2; 1117 shost->max_sectors = enquiry2->max_sectors; 1118 shost->sg_tablesize = enquiry2->max_sge; 1119 if (shost->sg_tablesize > MYRB_SCATTER_GATHER_LIMIT) 1120 shost->sg_tablesize = MYRB_SCATTER_GATHER_LIMIT; 1121 /* 1122 * Initialize the Stripe Size, Segment Size, and Geometry Translation. 1123 */ 1124 cb->stripe_size = config2->blocks_per_stripe * config2->block_factor 1125 >> (10 - MYRB_BLKSIZE_BITS); 1126 cb->segment_size = config2->blocks_per_cacheline * config2->block_factor 1127 >> (10 - MYRB_BLKSIZE_BITS); 1128 /* Assume 255/63 translation */ 1129 cb->ldev_geom_heads = 255; 1130 cb->ldev_geom_sectors = 63; 1131 if (config2->drive_geometry) { 1132 cb->ldev_geom_heads = 128; 1133 cb->ldev_geom_sectors = 32; 1134 } 1135 1136 /* 1137 * Initialize the Background Initialization Status. 1138 */ 1139 if ((cb->fw_version[0] == '4' && 1140 strcmp(cb->fw_version, "4.08") >= 0) || 1141 (cb->fw_version[0] == '5' && 1142 strcmp(cb->fw_version, "5.08") >= 0)) { 1143 cb->bgi_status_supported = true; 1144 myrb_bgi_control(cb); 1145 } 1146 cb->last_rbld_status = MYRB_NO_STDBY_RBLD_OR_CHECK_IN_PROGRESS; 1147 ret = 0; 1148 1149 out: 1150 shost_printk(KERN_INFO, cb->host, 1151 "Configuring %s PCI RAID Controller\n", cb->model_name); 1152 shost_printk(KERN_INFO, cb->host, 1153 " Firmware Version: %s, Memory Size: %dMB\n", 1154 cb->fw_version, memsize); 1155 if (cb->io_addr == 0) 1156 shost_printk(KERN_INFO, cb->host, 1157 " I/O Address: n/a, PCI Address: 0x%lX, IRQ Channel: %d\n", 1158 (unsigned long)cb->pci_addr, cb->irq); 1159 else 1160 shost_printk(KERN_INFO, cb->host, 1161 " I/O Address: 0x%lX, PCI Address: 0x%lX, IRQ Channel: %d\n", 1162 (unsigned long)cb->io_addr, (unsigned long)cb->pci_addr, 1163 cb->irq); 1164 shost_printk(KERN_INFO, cb->host, 1165 " Controller Queue Depth: %d, Maximum Blocks per Command: %d\n", 1166 cb->host->can_queue, cb->host->max_sectors); 1167 shost_printk(KERN_INFO, cb->host, 1168 " Driver Queue Depth: %d, Scatter/Gather Limit: %d of %d Segments\n", 1169 cb->host->can_queue, cb->host->sg_tablesize, 1170 MYRB_SCATTER_GATHER_LIMIT); 1171 shost_printk(KERN_INFO, cb->host, 1172 " Stripe Size: %dKB, Segment Size: %dKB, BIOS Geometry: %d/%d%s\n", 1173 cb->stripe_size, cb->segment_size, 1174 cb->ldev_geom_heads, cb->ldev_geom_sectors, 1175 cb->safte_enabled ? 1176 " SAF-TE Enclosure Management Enabled" : ""); 1177 shost_printk(KERN_INFO, cb->host, 1178 " Physical: %d/%d channels %d/%d/%d devices\n", 1179 pchan_cur, pchan_max, 0, cb->enquiry->pdev_dead, 1180 cb->host->max_id); 1181 1182 shost_printk(KERN_INFO, cb->host, 1183 " Logical: 1/1 channels, %d/%d disks\n", 1184 cb->enquiry->ldev_count, MYRB_MAX_LDEVS); 1185 1186 out_free: 1187 dma_free_coherent(&pdev->dev, sizeof(struct myrb_enquiry2), 1188 enquiry2, enquiry2_addr); 1189 dma_free_coherent(&pdev->dev, sizeof(struct myrb_config2), 1190 config2, config2_addr); 1191 1192 return ret; 1193 } 1194 1195 /* 1196 * myrb_unmap - unmaps controller structures 1197 */ 1198 static void myrb_unmap(struct myrb_hba *cb) 1199 { 1200 if (cb->ldev_info_buf) { 1201 size_t ldev_info_size = sizeof(struct myrb_ldev_info) * 1202 MYRB_MAX_LDEVS; 1203 dma_free_coherent(&cb->pdev->dev, ldev_info_size, 1204 cb->ldev_info_buf, cb->ldev_info_addr); 1205 cb->ldev_info_buf = NULL; 1206 } 1207 if (cb->err_table) { 1208 size_t err_table_size = sizeof(struct myrb_error_entry) * 1209 MYRB_MAX_CHANNELS * MYRB_MAX_TARGETS; 1210 dma_free_coherent(&cb->pdev->dev, err_table_size, 1211 cb->err_table, cb->err_table_addr); 1212 cb->err_table = NULL; 1213 } 1214 if (cb->enquiry) { 1215 dma_free_coherent(&cb->pdev->dev, sizeof(struct myrb_enquiry), 1216 cb->enquiry, cb->enquiry_addr); 1217 cb->enquiry = NULL; 1218 } 1219 if (cb->first_stat_mbox) { 1220 dma_free_coherent(&cb->pdev->dev, cb->stat_mbox_size, 1221 cb->first_stat_mbox, cb->stat_mbox_addr); 1222 cb->first_stat_mbox = NULL; 1223 } 1224 if (cb->first_cmd_mbox) { 1225 dma_free_coherent(&cb->pdev->dev, cb->cmd_mbox_size, 1226 cb->first_cmd_mbox, cb->cmd_mbox_addr); 1227 cb->first_cmd_mbox = NULL; 1228 } 1229 } 1230 1231 /* 1232 * myrb_cleanup - cleanup controller structures 1233 */ 1234 static void myrb_cleanup(struct myrb_hba *cb) 1235 { 1236 struct pci_dev *pdev = cb->pdev; 1237 1238 /* Free the memory mailbox, status, and related structures */ 1239 myrb_unmap(cb); 1240 1241 if (cb->mmio_base) { 1242 cb->disable_intr(cb->io_base); 1243 iounmap(cb->mmio_base); 1244 } 1245 if (cb->irq) 1246 free_irq(cb->irq, cb); 1247 if (cb->io_addr) 1248 release_region(cb->io_addr, 0x80); 1249 pci_set_drvdata(pdev, NULL); 1250 pci_disable_device(pdev); 1251 scsi_host_put(cb->host); 1252 } 1253 1254 static int myrb_host_reset(struct scsi_cmnd *scmd) 1255 { 1256 struct Scsi_Host *shost = scmd->device->host; 1257 struct myrb_hba *cb = shost_priv(shost); 1258 1259 cb->reset(cb->io_base); 1260 return SUCCESS; 1261 } 1262 1263 static int myrb_pthru_queuecommand(struct Scsi_Host *shost, 1264 struct scsi_cmnd *scmd) 1265 { 1266 struct myrb_hba *cb = shost_priv(shost); 1267 struct myrb_cmdblk *cmd_blk = scsi_cmd_priv(scmd); 1268 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 1269 struct myrb_dcdb *dcdb; 1270 dma_addr_t dcdb_addr; 1271 struct scsi_device *sdev = scmd->device; 1272 struct scatterlist *sgl; 1273 unsigned long flags; 1274 int nsge; 1275 1276 myrb_reset_cmd(cmd_blk); 1277 dcdb = dma_pool_alloc(cb->dcdb_pool, GFP_ATOMIC, &dcdb_addr); 1278 if (!dcdb) 1279 return SCSI_MLQUEUE_HOST_BUSY; 1280 nsge = scsi_dma_map(scmd); 1281 if (nsge > 1) { 1282 dma_pool_free(cb->dcdb_pool, dcdb, dcdb_addr); 1283 scmd->result = (DID_ERROR << 16); 1284 scmd->scsi_done(scmd); 1285 return 0; 1286 } 1287 1288 mbox->type3.opcode = MYRB_CMD_DCDB; 1289 mbox->type3.id = scmd->request->tag + 3; 1290 mbox->type3.addr = dcdb_addr; 1291 dcdb->channel = sdev->channel; 1292 dcdb->target = sdev->id; 1293 switch (scmd->sc_data_direction) { 1294 case DMA_NONE: 1295 dcdb->data_xfer = MYRB_DCDB_XFER_NONE; 1296 break; 1297 case DMA_TO_DEVICE: 1298 dcdb->data_xfer = MYRB_DCDB_XFER_SYSTEM_TO_DEVICE; 1299 break; 1300 case DMA_FROM_DEVICE: 1301 dcdb->data_xfer = MYRB_DCDB_XFER_DEVICE_TO_SYSTEM; 1302 break; 1303 default: 1304 dcdb->data_xfer = MYRB_DCDB_XFER_ILLEGAL; 1305 break; 1306 } 1307 dcdb->early_status = false; 1308 if (scmd->request->timeout <= 10) 1309 dcdb->timeout = MYRB_DCDB_TMO_10_SECS; 1310 else if (scmd->request->timeout <= 60) 1311 dcdb->timeout = MYRB_DCDB_TMO_60_SECS; 1312 else if (scmd->request->timeout <= 600) 1313 dcdb->timeout = MYRB_DCDB_TMO_10_MINS; 1314 else 1315 dcdb->timeout = MYRB_DCDB_TMO_24_HRS; 1316 dcdb->no_autosense = false; 1317 dcdb->allow_disconnect = true; 1318 sgl = scsi_sglist(scmd); 1319 dcdb->dma_addr = sg_dma_address(sgl); 1320 if (sg_dma_len(sgl) > USHRT_MAX) { 1321 dcdb->xfer_len_lo = sg_dma_len(sgl) & 0xffff; 1322 dcdb->xfer_len_hi4 = sg_dma_len(sgl) >> 16; 1323 } else { 1324 dcdb->xfer_len_lo = sg_dma_len(sgl); 1325 dcdb->xfer_len_hi4 = 0; 1326 } 1327 dcdb->cdb_len = scmd->cmd_len; 1328 dcdb->sense_len = sizeof(dcdb->sense); 1329 memcpy(&dcdb->cdb, scmd->cmnd, scmd->cmd_len); 1330 1331 spin_lock_irqsave(&cb->queue_lock, flags); 1332 cb->qcmd(cb, cmd_blk); 1333 spin_unlock_irqrestore(&cb->queue_lock, flags); 1334 return 0; 1335 } 1336 1337 static void myrb_inquiry(struct myrb_hba *cb, 1338 struct scsi_cmnd *scmd) 1339 { 1340 unsigned char inq[36] = { 1341 0x00, 0x00, 0x03, 0x02, 0x20, 0x00, 0x01, 0x00, 1342 0x4d, 0x59, 0x4c, 0x45, 0x58, 0x20, 0x20, 0x20, 1343 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 1344 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 1345 0x20, 0x20, 0x20, 0x20, 1346 }; 1347 1348 if (cb->bus_width > 16) 1349 inq[7] |= 1 << 6; 1350 if (cb->bus_width > 8) 1351 inq[7] |= 1 << 5; 1352 memcpy(&inq[16], cb->model_name, 16); 1353 memcpy(&inq[32], cb->fw_version, 1); 1354 memcpy(&inq[33], &cb->fw_version[2], 2); 1355 memcpy(&inq[35], &cb->fw_version[7], 1); 1356 1357 scsi_sg_copy_from_buffer(scmd, (void *)inq, 36); 1358 } 1359 1360 static void 1361 myrb_mode_sense(struct myrb_hba *cb, struct scsi_cmnd *scmd, 1362 struct myrb_ldev_info *ldev_info) 1363 { 1364 unsigned char modes[32], *mode_pg; 1365 bool dbd; 1366 size_t mode_len; 1367 1368 dbd = (scmd->cmnd[1] & 0x08) == 0x08; 1369 if (dbd) { 1370 mode_len = 24; 1371 mode_pg = &modes[4]; 1372 } else { 1373 mode_len = 32; 1374 mode_pg = &modes[12]; 1375 } 1376 memset(modes, 0, sizeof(modes)); 1377 modes[0] = mode_len - 1; 1378 if (!dbd) { 1379 unsigned char *block_desc = &modes[4]; 1380 1381 modes[3] = 8; 1382 put_unaligned_be32(ldev_info->size, &block_desc[0]); 1383 put_unaligned_be32(cb->ldev_block_size, &block_desc[5]); 1384 } 1385 mode_pg[0] = 0x08; 1386 mode_pg[1] = 0x12; 1387 if (ldev_info->wb_enabled) 1388 mode_pg[2] |= 0x04; 1389 if (cb->segment_size) { 1390 mode_pg[2] |= 0x08; 1391 put_unaligned_be16(cb->segment_size, &mode_pg[14]); 1392 } 1393 1394 scsi_sg_copy_from_buffer(scmd, modes, mode_len); 1395 } 1396 1397 static void myrb_request_sense(struct myrb_hba *cb, 1398 struct scsi_cmnd *scmd) 1399 { 1400 scsi_build_sense(scmd, 0, NO_SENSE, 0, 0); 1401 scsi_sg_copy_from_buffer(scmd, scmd->sense_buffer, 1402 SCSI_SENSE_BUFFERSIZE); 1403 } 1404 1405 static void myrb_read_capacity(struct myrb_hba *cb, struct scsi_cmnd *scmd, 1406 struct myrb_ldev_info *ldev_info) 1407 { 1408 unsigned char data[8]; 1409 1410 dev_dbg(&scmd->device->sdev_gendev, 1411 "Capacity %u, blocksize %u\n", 1412 ldev_info->size, cb->ldev_block_size); 1413 put_unaligned_be32(ldev_info->size - 1, &data[0]); 1414 put_unaligned_be32(cb->ldev_block_size, &data[4]); 1415 scsi_sg_copy_from_buffer(scmd, data, 8); 1416 } 1417 1418 static int myrb_ldev_queuecommand(struct Scsi_Host *shost, 1419 struct scsi_cmnd *scmd) 1420 { 1421 struct myrb_hba *cb = shost_priv(shost); 1422 struct myrb_cmdblk *cmd_blk = scsi_cmd_priv(scmd); 1423 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 1424 struct myrb_ldev_info *ldev_info; 1425 struct scsi_device *sdev = scmd->device; 1426 struct scatterlist *sgl; 1427 unsigned long flags; 1428 u64 lba; 1429 u32 block_cnt; 1430 int nsge; 1431 1432 ldev_info = sdev->hostdata; 1433 if (ldev_info->state != MYRB_DEVICE_ONLINE && 1434 ldev_info->state != MYRB_DEVICE_WO) { 1435 dev_dbg(&shost->shost_gendev, "ldev %u in state %x, skip\n", 1436 sdev->id, ldev_info ? ldev_info->state : 0xff); 1437 scmd->result = (DID_BAD_TARGET << 16); 1438 scmd->scsi_done(scmd); 1439 return 0; 1440 } 1441 switch (scmd->cmnd[0]) { 1442 case TEST_UNIT_READY: 1443 scmd->result = (DID_OK << 16); 1444 scmd->scsi_done(scmd); 1445 return 0; 1446 case INQUIRY: 1447 if (scmd->cmnd[1] & 1) { 1448 /* Illegal request, invalid field in CDB */ 1449 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0); 1450 } else { 1451 myrb_inquiry(cb, scmd); 1452 scmd->result = (DID_OK << 16); 1453 } 1454 scmd->scsi_done(scmd); 1455 return 0; 1456 case SYNCHRONIZE_CACHE: 1457 scmd->result = (DID_OK << 16); 1458 scmd->scsi_done(scmd); 1459 return 0; 1460 case MODE_SENSE: 1461 if ((scmd->cmnd[2] & 0x3F) != 0x3F && 1462 (scmd->cmnd[2] & 0x3F) != 0x08) { 1463 /* Illegal request, invalid field in CDB */ 1464 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0); 1465 } else { 1466 myrb_mode_sense(cb, scmd, ldev_info); 1467 scmd->result = (DID_OK << 16); 1468 } 1469 scmd->scsi_done(scmd); 1470 return 0; 1471 case READ_CAPACITY: 1472 if ((scmd->cmnd[1] & 1) || 1473 (scmd->cmnd[8] & 1)) { 1474 /* Illegal request, invalid field in CDB */ 1475 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0); 1476 scmd->scsi_done(scmd); 1477 return 0; 1478 } 1479 lba = get_unaligned_be32(&scmd->cmnd[2]); 1480 if (lba) { 1481 /* Illegal request, invalid field in CDB */ 1482 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0); 1483 scmd->scsi_done(scmd); 1484 return 0; 1485 } 1486 myrb_read_capacity(cb, scmd, ldev_info); 1487 scmd->scsi_done(scmd); 1488 return 0; 1489 case REQUEST_SENSE: 1490 myrb_request_sense(cb, scmd); 1491 scmd->result = (DID_OK << 16); 1492 return 0; 1493 case SEND_DIAGNOSTIC: 1494 if (scmd->cmnd[1] != 0x04) { 1495 /* Illegal request, invalid field in CDB */ 1496 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x24, 0); 1497 } else { 1498 /* Assume good status */ 1499 scmd->result = (DID_OK << 16); 1500 } 1501 scmd->scsi_done(scmd); 1502 return 0; 1503 case READ_6: 1504 if (ldev_info->state == MYRB_DEVICE_WO) { 1505 /* Data protect, attempt to read invalid data */ 1506 scsi_build_sense(scmd, 0, DATA_PROTECT, 0x21, 0x06); 1507 scmd->scsi_done(scmd); 1508 return 0; 1509 } 1510 fallthrough; 1511 case WRITE_6: 1512 lba = (((scmd->cmnd[1] & 0x1F) << 16) | 1513 (scmd->cmnd[2] << 8) | 1514 scmd->cmnd[3]); 1515 block_cnt = scmd->cmnd[4]; 1516 break; 1517 case READ_10: 1518 if (ldev_info->state == MYRB_DEVICE_WO) { 1519 /* Data protect, attempt to read invalid data */ 1520 scsi_build_sense(scmd, 0, DATA_PROTECT, 0x21, 0x06); 1521 scmd->scsi_done(scmd); 1522 return 0; 1523 } 1524 fallthrough; 1525 case WRITE_10: 1526 case VERIFY: /* 0x2F */ 1527 case WRITE_VERIFY: /* 0x2E */ 1528 lba = get_unaligned_be32(&scmd->cmnd[2]); 1529 block_cnt = get_unaligned_be16(&scmd->cmnd[7]); 1530 break; 1531 case READ_12: 1532 if (ldev_info->state == MYRB_DEVICE_WO) { 1533 /* Data protect, attempt to read invalid data */ 1534 scsi_build_sense(scmd, 0, DATA_PROTECT, 0x21, 0x06); 1535 scmd->scsi_done(scmd); 1536 return 0; 1537 } 1538 fallthrough; 1539 case WRITE_12: 1540 case VERIFY_12: /* 0xAF */ 1541 case WRITE_VERIFY_12: /* 0xAE */ 1542 lba = get_unaligned_be32(&scmd->cmnd[2]); 1543 block_cnt = get_unaligned_be32(&scmd->cmnd[6]); 1544 break; 1545 default: 1546 /* Illegal request, invalid opcode */ 1547 scsi_build_sense(scmd, 0, ILLEGAL_REQUEST, 0x20, 0); 1548 scmd->scsi_done(scmd); 1549 return 0; 1550 } 1551 1552 myrb_reset_cmd(cmd_blk); 1553 mbox->type5.id = scmd->request->tag + 3; 1554 if (scmd->sc_data_direction == DMA_NONE) 1555 goto submit; 1556 nsge = scsi_dma_map(scmd); 1557 if (nsge == 1) { 1558 sgl = scsi_sglist(scmd); 1559 if (scmd->sc_data_direction == DMA_FROM_DEVICE) 1560 mbox->type5.opcode = MYRB_CMD_READ; 1561 else 1562 mbox->type5.opcode = MYRB_CMD_WRITE; 1563 1564 mbox->type5.ld.xfer_len = block_cnt; 1565 mbox->type5.ld.ldev_num = sdev->id; 1566 mbox->type5.lba = lba; 1567 mbox->type5.addr = (u32)sg_dma_address(sgl); 1568 } else { 1569 struct myrb_sge *hw_sgl; 1570 dma_addr_t hw_sgl_addr; 1571 int i; 1572 1573 hw_sgl = dma_pool_alloc(cb->sg_pool, GFP_ATOMIC, &hw_sgl_addr); 1574 if (!hw_sgl) 1575 return SCSI_MLQUEUE_HOST_BUSY; 1576 1577 cmd_blk->sgl = hw_sgl; 1578 cmd_blk->sgl_addr = hw_sgl_addr; 1579 1580 if (scmd->sc_data_direction == DMA_FROM_DEVICE) 1581 mbox->type5.opcode = MYRB_CMD_READ_SG; 1582 else 1583 mbox->type5.opcode = MYRB_CMD_WRITE_SG; 1584 1585 mbox->type5.ld.xfer_len = block_cnt; 1586 mbox->type5.ld.ldev_num = sdev->id; 1587 mbox->type5.lba = lba; 1588 mbox->type5.addr = hw_sgl_addr; 1589 mbox->type5.sg_count = nsge; 1590 1591 scsi_for_each_sg(scmd, sgl, nsge, i) { 1592 hw_sgl->sge_addr = (u32)sg_dma_address(sgl); 1593 hw_sgl->sge_count = (u32)sg_dma_len(sgl); 1594 hw_sgl++; 1595 } 1596 } 1597 submit: 1598 spin_lock_irqsave(&cb->queue_lock, flags); 1599 cb->qcmd(cb, cmd_blk); 1600 spin_unlock_irqrestore(&cb->queue_lock, flags); 1601 1602 return 0; 1603 } 1604 1605 static int myrb_queuecommand(struct Scsi_Host *shost, 1606 struct scsi_cmnd *scmd) 1607 { 1608 struct scsi_device *sdev = scmd->device; 1609 1610 if (sdev->channel > myrb_logical_channel(shost)) { 1611 scmd->result = (DID_BAD_TARGET << 16); 1612 scmd->scsi_done(scmd); 1613 return 0; 1614 } 1615 if (sdev->channel == myrb_logical_channel(shost)) 1616 return myrb_ldev_queuecommand(shost, scmd); 1617 1618 return myrb_pthru_queuecommand(shost, scmd); 1619 } 1620 1621 static int myrb_ldev_slave_alloc(struct scsi_device *sdev) 1622 { 1623 struct myrb_hba *cb = shost_priv(sdev->host); 1624 struct myrb_ldev_info *ldev_info; 1625 unsigned short ldev_num = sdev->id; 1626 enum raid_level level; 1627 1628 ldev_info = cb->ldev_info_buf + ldev_num; 1629 if (!ldev_info) 1630 return -ENXIO; 1631 1632 sdev->hostdata = kzalloc(sizeof(*ldev_info), GFP_KERNEL); 1633 if (!sdev->hostdata) 1634 return -ENOMEM; 1635 dev_dbg(&sdev->sdev_gendev, 1636 "slave alloc ldev %d state %x\n", 1637 ldev_num, ldev_info->state); 1638 memcpy(sdev->hostdata, ldev_info, 1639 sizeof(*ldev_info)); 1640 switch (ldev_info->raid_level) { 1641 case MYRB_RAID_LEVEL0: 1642 level = RAID_LEVEL_LINEAR; 1643 break; 1644 case MYRB_RAID_LEVEL1: 1645 level = RAID_LEVEL_1; 1646 break; 1647 case MYRB_RAID_LEVEL3: 1648 level = RAID_LEVEL_3; 1649 break; 1650 case MYRB_RAID_LEVEL5: 1651 level = RAID_LEVEL_5; 1652 break; 1653 case MYRB_RAID_LEVEL6: 1654 level = RAID_LEVEL_6; 1655 break; 1656 case MYRB_RAID_JBOD: 1657 level = RAID_LEVEL_JBOD; 1658 break; 1659 default: 1660 level = RAID_LEVEL_UNKNOWN; 1661 break; 1662 } 1663 raid_set_level(myrb_raid_template, &sdev->sdev_gendev, level); 1664 return 0; 1665 } 1666 1667 static int myrb_pdev_slave_alloc(struct scsi_device *sdev) 1668 { 1669 struct myrb_hba *cb = shost_priv(sdev->host); 1670 struct myrb_pdev_state *pdev_info; 1671 unsigned short status; 1672 1673 if (sdev->id > MYRB_MAX_TARGETS) 1674 return -ENXIO; 1675 1676 pdev_info = kzalloc(sizeof(*pdev_info), GFP_KERNEL|GFP_DMA); 1677 if (!pdev_info) 1678 return -ENOMEM; 1679 1680 status = myrb_exec_type3D(cb, MYRB_CMD_GET_DEVICE_STATE, 1681 sdev, pdev_info); 1682 if (status != MYRB_STATUS_SUCCESS) { 1683 dev_dbg(&sdev->sdev_gendev, 1684 "Failed to get device state, status %x\n", 1685 status); 1686 kfree(pdev_info); 1687 return -ENXIO; 1688 } 1689 if (!pdev_info->present) { 1690 dev_dbg(&sdev->sdev_gendev, 1691 "device not present, skip\n"); 1692 kfree(pdev_info); 1693 return -ENXIO; 1694 } 1695 dev_dbg(&sdev->sdev_gendev, 1696 "slave alloc pdev %d:%d state %x\n", 1697 sdev->channel, sdev->id, pdev_info->state); 1698 sdev->hostdata = pdev_info; 1699 1700 return 0; 1701 } 1702 1703 static int myrb_slave_alloc(struct scsi_device *sdev) 1704 { 1705 if (sdev->channel > myrb_logical_channel(sdev->host)) 1706 return -ENXIO; 1707 1708 if (sdev->lun > 0) 1709 return -ENXIO; 1710 1711 if (sdev->channel == myrb_logical_channel(sdev->host)) 1712 return myrb_ldev_slave_alloc(sdev); 1713 1714 return myrb_pdev_slave_alloc(sdev); 1715 } 1716 1717 static int myrb_slave_configure(struct scsi_device *sdev) 1718 { 1719 struct myrb_ldev_info *ldev_info; 1720 1721 if (sdev->channel > myrb_logical_channel(sdev->host)) 1722 return -ENXIO; 1723 1724 if (sdev->channel < myrb_logical_channel(sdev->host)) { 1725 sdev->no_uld_attach = 1; 1726 return 0; 1727 } 1728 if (sdev->lun != 0) 1729 return -ENXIO; 1730 1731 ldev_info = sdev->hostdata; 1732 if (!ldev_info) 1733 return -ENXIO; 1734 if (ldev_info->state != MYRB_DEVICE_ONLINE) 1735 sdev_printk(KERN_INFO, sdev, 1736 "Logical drive is %s\n", 1737 myrb_devstate_name(ldev_info->state)); 1738 1739 sdev->tagged_supported = 1; 1740 return 0; 1741 } 1742 1743 static void myrb_slave_destroy(struct scsi_device *sdev) 1744 { 1745 kfree(sdev->hostdata); 1746 } 1747 1748 static int myrb_biosparam(struct scsi_device *sdev, struct block_device *bdev, 1749 sector_t capacity, int geom[]) 1750 { 1751 struct myrb_hba *cb = shost_priv(sdev->host); 1752 1753 geom[0] = cb->ldev_geom_heads; 1754 geom[1] = cb->ldev_geom_sectors; 1755 geom[2] = sector_div(capacity, geom[0] * geom[1]); 1756 1757 return 0; 1758 } 1759 1760 static ssize_t raid_state_show(struct device *dev, 1761 struct device_attribute *attr, char *buf) 1762 { 1763 struct scsi_device *sdev = to_scsi_device(dev); 1764 struct myrb_hba *cb = shost_priv(sdev->host); 1765 int ret; 1766 1767 if (!sdev->hostdata) 1768 return snprintf(buf, 16, "Unknown\n"); 1769 1770 if (sdev->channel == myrb_logical_channel(sdev->host)) { 1771 struct myrb_ldev_info *ldev_info = sdev->hostdata; 1772 const char *name; 1773 1774 name = myrb_devstate_name(ldev_info->state); 1775 if (name) 1776 ret = snprintf(buf, 32, "%s\n", name); 1777 else 1778 ret = snprintf(buf, 32, "Invalid (%02X)\n", 1779 ldev_info->state); 1780 } else { 1781 struct myrb_pdev_state *pdev_info = sdev->hostdata; 1782 unsigned short status; 1783 const char *name; 1784 1785 status = myrb_exec_type3D(cb, MYRB_CMD_GET_DEVICE_STATE, 1786 sdev, pdev_info); 1787 if (status != MYRB_STATUS_SUCCESS) 1788 sdev_printk(KERN_INFO, sdev, 1789 "Failed to get device state, status %x\n", 1790 status); 1791 1792 if (!pdev_info->present) 1793 name = "Removed"; 1794 else 1795 name = myrb_devstate_name(pdev_info->state); 1796 if (name) 1797 ret = snprintf(buf, 32, "%s\n", name); 1798 else 1799 ret = snprintf(buf, 32, "Invalid (%02X)\n", 1800 pdev_info->state); 1801 } 1802 return ret; 1803 } 1804 1805 static ssize_t raid_state_store(struct device *dev, 1806 struct device_attribute *attr, const char *buf, size_t count) 1807 { 1808 struct scsi_device *sdev = to_scsi_device(dev); 1809 struct myrb_hba *cb = shost_priv(sdev->host); 1810 struct myrb_pdev_state *pdev_info; 1811 enum myrb_devstate new_state; 1812 unsigned short status; 1813 1814 if (!strncmp(buf, "kill", 4) || 1815 !strncmp(buf, "offline", 7)) 1816 new_state = MYRB_DEVICE_DEAD; 1817 else if (!strncmp(buf, "online", 6)) 1818 new_state = MYRB_DEVICE_ONLINE; 1819 else if (!strncmp(buf, "standby", 7)) 1820 new_state = MYRB_DEVICE_STANDBY; 1821 else 1822 return -EINVAL; 1823 1824 pdev_info = sdev->hostdata; 1825 if (!pdev_info) { 1826 sdev_printk(KERN_INFO, sdev, 1827 "Failed - no physical device information\n"); 1828 return -ENXIO; 1829 } 1830 if (!pdev_info->present) { 1831 sdev_printk(KERN_INFO, sdev, 1832 "Failed - device not present\n"); 1833 return -ENXIO; 1834 } 1835 1836 if (pdev_info->state == new_state) 1837 return count; 1838 1839 status = myrb_set_pdev_state(cb, sdev, new_state); 1840 switch (status) { 1841 case MYRB_STATUS_SUCCESS: 1842 break; 1843 case MYRB_STATUS_START_DEVICE_FAILED: 1844 sdev_printk(KERN_INFO, sdev, 1845 "Failed - Unable to Start Device\n"); 1846 count = -EAGAIN; 1847 break; 1848 case MYRB_STATUS_NO_DEVICE: 1849 sdev_printk(KERN_INFO, sdev, 1850 "Failed - No Device at Address\n"); 1851 count = -ENODEV; 1852 break; 1853 case MYRB_STATUS_INVALID_CHANNEL_OR_TARGET: 1854 sdev_printk(KERN_INFO, sdev, 1855 "Failed - Invalid Channel or Target or Modifier\n"); 1856 count = -EINVAL; 1857 break; 1858 case MYRB_STATUS_CHANNEL_BUSY: 1859 sdev_printk(KERN_INFO, sdev, 1860 "Failed - Channel Busy\n"); 1861 count = -EBUSY; 1862 break; 1863 default: 1864 sdev_printk(KERN_INFO, sdev, 1865 "Failed - Unexpected Status %04X\n", status); 1866 count = -EIO; 1867 break; 1868 } 1869 return count; 1870 } 1871 static DEVICE_ATTR_RW(raid_state); 1872 1873 static ssize_t raid_level_show(struct device *dev, 1874 struct device_attribute *attr, char *buf) 1875 { 1876 struct scsi_device *sdev = to_scsi_device(dev); 1877 1878 if (sdev->channel == myrb_logical_channel(sdev->host)) { 1879 struct myrb_ldev_info *ldev_info = sdev->hostdata; 1880 const char *name; 1881 1882 if (!ldev_info) 1883 return -ENXIO; 1884 1885 name = myrb_raidlevel_name(ldev_info->raid_level); 1886 if (!name) 1887 return snprintf(buf, 32, "Invalid (%02X)\n", 1888 ldev_info->state); 1889 return snprintf(buf, 32, "%s\n", name); 1890 } 1891 return snprintf(buf, 32, "Physical Drive\n"); 1892 } 1893 static DEVICE_ATTR_RO(raid_level); 1894 1895 static ssize_t rebuild_show(struct device *dev, 1896 struct device_attribute *attr, char *buf) 1897 { 1898 struct scsi_device *sdev = to_scsi_device(dev); 1899 struct myrb_hba *cb = shost_priv(sdev->host); 1900 struct myrb_rbld_progress rbld_buf; 1901 unsigned char status; 1902 1903 if (sdev->channel < myrb_logical_channel(sdev->host)) 1904 return snprintf(buf, 32, "physical device - not rebuilding\n"); 1905 1906 status = myrb_get_rbld_progress(cb, &rbld_buf); 1907 1908 if (rbld_buf.ldev_num != sdev->id || 1909 status != MYRB_STATUS_SUCCESS) 1910 return snprintf(buf, 32, "not rebuilding\n"); 1911 1912 return snprintf(buf, 32, "rebuilding block %u of %u\n", 1913 rbld_buf.ldev_size - rbld_buf.blocks_left, 1914 rbld_buf.ldev_size); 1915 } 1916 1917 static ssize_t rebuild_store(struct device *dev, 1918 struct device_attribute *attr, const char *buf, size_t count) 1919 { 1920 struct scsi_device *sdev = to_scsi_device(dev); 1921 struct myrb_hba *cb = shost_priv(sdev->host); 1922 struct myrb_cmdblk *cmd_blk; 1923 union myrb_cmd_mbox *mbox; 1924 unsigned short status; 1925 int rc, start; 1926 const char *msg; 1927 1928 rc = kstrtoint(buf, 0, &start); 1929 if (rc) 1930 return rc; 1931 1932 if (sdev->channel >= myrb_logical_channel(sdev->host)) 1933 return -ENXIO; 1934 1935 status = myrb_get_rbld_progress(cb, NULL); 1936 if (start) { 1937 if (status == MYRB_STATUS_SUCCESS) { 1938 sdev_printk(KERN_INFO, sdev, 1939 "Rebuild Not Initiated; already in progress\n"); 1940 return -EALREADY; 1941 } 1942 mutex_lock(&cb->dcmd_mutex); 1943 cmd_blk = &cb->dcmd_blk; 1944 myrb_reset_cmd(cmd_blk); 1945 mbox = &cmd_blk->mbox; 1946 mbox->type3D.opcode = MYRB_CMD_REBUILD_ASYNC; 1947 mbox->type3D.id = MYRB_DCMD_TAG; 1948 mbox->type3D.channel = sdev->channel; 1949 mbox->type3D.target = sdev->id; 1950 status = myrb_exec_cmd(cb, cmd_blk); 1951 mutex_unlock(&cb->dcmd_mutex); 1952 } else { 1953 struct pci_dev *pdev = cb->pdev; 1954 unsigned char *rate; 1955 dma_addr_t rate_addr; 1956 1957 if (status != MYRB_STATUS_SUCCESS) { 1958 sdev_printk(KERN_INFO, sdev, 1959 "Rebuild Not Cancelled; not in progress\n"); 1960 return 0; 1961 } 1962 1963 rate = dma_alloc_coherent(&pdev->dev, sizeof(char), 1964 &rate_addr, GFP_KERNEL); 1965 if (rate == NULL) { 1966 sdev_printk(KERN_INFO, sdev, 1967 "Cancellation of Rebuild Failed - Out of Memory\n"); 1968 return -ENOMEM; 1969 } 1970 mutex_lock(&cb->dcmd_mutex); 1971 cmd_blk = &cb->dcmd_blk; 1972 myrb_reset_cmd(cmd_blk); 1973 mbox = &cmd_blk->mbox; 1974 mbox->type3R.opcode = MYRB_CMD_REBUILD_CONTROL; 1975 mbox->type3R.id = MYRB_DCMD_TAG; 1976 mbox->type3R.rbld_rate = 0xFF; 1977 mbox->type3R.addr = rate_addr; 1978 status = myrb_exec_cmd(cb, cmd_blk); 1979 dma_free_coherent(&pdev->dev, sizeof(char), rate, rate_addr); 1980 mutex_unlock(&cb->dcmd_mutex); 1981 } 1982 if (status == MYRB_STATUS_SUCCESS) { 1983 sdev_printk(KERN_INFO, sdev, "Rebuild %s\n", 1984 start ? "Initiated" : "Cancelled"); 1985 return count; 1986 } 1987 if (!start) { 1988 sdev_printk(KERN_INFO, sdev, 1989 "Rebuild Not Cancelled, status 0x%x\n", 1990 status); 1991 return -EIO; 1992 } 1993 1994 switch (status) { 1995 case MYRB_STATUS_ATTEMPT_TO_RBLD_ONLINE_DRIVE: 1996 msg = "Attempt to Rebuild Online or Unresponsive Drive"; 1997 break; 1998 case MYRB_STATUS_RBLD_NEW_DISK_FAILED: 1999 msg = "New Disk Failed During Rebuild"; 2000 break; 2001 case MYRB_STATUS_INVALID_ADDRESS: 2002 msg = "Invalid Device Address"; 2003 break; 2004 case MYRB_STATUS_RBLD_OR_CHECK_INPROGRESS: 2005 msg = "Already in Progress"; 2006 break; 2007 default: 2008 msg = NULL; 2009 break; 2010 } 2011 if (msg) 2012 sdev_printk(KERN_INFO, sdev, 2013 "Rebuild Failed - %s\n", msg); 2014 else 2015 sdev_printk(KERN_INFO, sdev, 2016 "Rebuild Failed, status 0x%x\n", status); 2017 2018 return -EIO; 2019 } 2020 static DEVICE_ATTR_RW(rebuild); 2021 2022 static ssize_t consistency_check_store(struct device *dev, 2023 struct device_attribute *attr, const char *buf, size_t count) 2024 { 2025 struct scsi_device *sdev = to_scsi_device(dev); 2026 struct myrb_hba *cb = shost_priv(sdev->host); 2027 struct myrb_rbld_progress rbld_buf; 2028 struct myrb_cmdblk *cmd_blk; 2029 union myrb_cmd_mbox *mbox; 2030 unsigned short ldev_num = 0xFFFF; 2031 unsigned short status; 2032 int rc, start; 2033 const char *msg; 2034 2035 rc = kstrtoint(buf, 0, &start); 2036 if (rc) 2037 return rc; 2038 2039 if (sdev->channel < myrb_logical_channel(sdev->host)) 2040 return -ENXIO; 2041 2042 status = myrb_get_rbld_progress(cb, &rbld_buf); 2043 if (start) { 2044 if (status == MYRB_STATUS_SUCCESS) { 2045 sdev_printk(KERN_INFO, sdev, 2046 "Check Consistency Not Initiated; already in progress\n"); 2047 return -EALREADY; 2048 } 2049 mutex_lock(&cb->dcmd_mutex); 2050 cmd_blk = &cb->dcmd_blk; 2051 myrb_reset_cmd(cmd_blk); 2052 mbox = &cmd_blk->mbox; 2053 mbox->type3C.opcode = MYRB_CMD_CHECK_CONSISTENCY_ASYNC; 2054 mbox->type3C.id = MYRB_DCMD_TAG; 2055 mbox->type3C.ldev_num = sdev->id; 2056 mbox->type3C.auto_restore = true; 2057 2058 status = myrb_exec_cmd(cb, cmd_blk); 2059 mutex_unlock(&cb->dcmd_mutex); 2060 } else { 2061 struct pci_dev *pdev = cb->pdev; 2062 unsigned char *rate; 2063 dma_addr_t rate_addr; 2064 2065 if (ldev_num != sdev->id) { 2066 sdev_printk(KERN_INFO, sdev, 2067 "Check Consistency Not Cancelled; not in progress\n"); 2068 return 0; 2069 } 2070 rate = dma_alloc_coherent(&pdev->dev, sizeof(char), 2071 &rate_addr, GFP_KERNEL); 2072 if (rate == NULL) { 2073 sdev_printk(KERN_INFO, sdev, 2074 "Cancellation of Check Consistency Failed - Out of Memory\n"); 2075 return -ENOMEM; 2076 } 2077 mutex_lock(&cb->dcmd_mutex); 2078 cmd_blk = &cb->dcmd_blk; 2079 myrb_reset_cmd(cmd_blk); 2080 mbox = &cmd_blk->mbox; 2081 mbox->type3R.opcode = MYRB_CMD_REBUILD_CONTROL; 2082 mbox->type3R.id = MYRB_DCMD_TAG; 2083 mbox->type3R.rbld_rate = 0xFF; 2084 mbox->type3R.addr = rate_addr; 2085 status = myrb_exec_cmd(cb, cmd_blk); 2086 dma_free_coherent(&pdev->dev, sizeof(char), rate, rate_addr); 2087 mutex_unlock(&cb->dcmd_mutex); 2088 } 2089 if (status == MYRB_STATUS_SUCCESS) { 2090 sdev_printk(KERN_INFO, sdev, "Check Consistency %s\n", 2091 start ? "Initiated" : "Cancelled"); 2092 return count; 2093 } 2094 if (!start) { 2095 sdev_printk(KERN_INFO, sdev, 2096 "Check Consistency Not Cancelled, status 0x%x\n", 2097 status); 2098 return -EIO; 2099 } 2100 2101 switch (status) { 2102 case MYRB_STATUS_ATTEMPT_TO_RBLD_ONLINE_DRIVE: 2103 msg = "Dependent Physical Device is DEAD"; 2104 break; 2105 case MYRB_STATUS_RBLD_NEW_DISK_FAILED: 2106 msg = "New Disk Failed During Rebuild"; 2107 break; 2108 case MYRB_STATUS_INVALID_ADDRESS: 2109 msg = "Invalid or Nonredundant Logical Drive"; 2110 break; 2111 case MYRB_STATUS_RBLD_OR_CHECK_INPROGRESS: 2112 msg = "Already in Progress"; 2113 break; 2114 default: 2115 msg = NULL; 2116 break; 2117 } 2118 if (msg) 2119 sdev_printk(KERN_INFO, sdev, 2120 "Check Consistency Failed - %s\n", msg); 2121 else 2122 sdev_printk(KERN_INFO, sdev, 2123 "Check Consistency Failed, status 0x%x\n", status); 2124 2125 return -EIO; 2126 } 2127 2128 static ssize_t consistency_check_show(struct device *dev, 2129 struct device_attribute *attr, char *buf) 2130 { 2131 return rebuild_show(dev, attr, buf); 2132 } 2133 static DEVICE_ATTR_RW(consistency_check); 2134 2135 static ssize_t ctlr_num_show(struct device *dev, 2136 struct device_attribute *attr, char *buf) 2137 { 2138 struct Scsi_Host *shost = class_to_shost(dev); 2139 struct myrb_hba *cb = shost_priv(shost); 2140 2141 return snprintf(buf, 20, "%u\n", cb->ctlr_num); 2142 } 2143 static DEVICE_ATTR_RO(ctlr_num); 2144 2145 static ssize_t firmware_show(struct device *dev, 2146 struct device_attribute *attr, char *buf) 2147 { 2148 struct Scsi_Host *shost = class_to_shost(dev); 2149 struct myrb_hba *cb = shost_priv(shost); 2150 2151 return snprintf(buf, 16, "%s\n", cb->fw_version); 2152 } 2153 static DEVICE_ATTR_RO(firmware); 2154 2155 static ssize_t model_show(struct device *dev, 2156 struct device_attribute *attr, char *buf) 2157 { 2158 struct Scsi_Host *shost = class_to_shost(dev); 2159 struct myrb_hba *cb = shost_priv(shost); 2160 2161 return snprintf(buf, 16, "%s\n", cb->model_name); 2162 } 2163 static DEVICE_ATTR_RO(model); 2164 2165 static ssize_t flush_cache_store(struct device *dev, 2166 struct device_attribute *attr, const char *buf, size_t count) 2167 { 2168 struct Scsi_Host *shost = class_to_shost(dev); 2169 struct myrb_hba *cb = shost_priv(shost); 2170 unsigned short status; 2171 2172 status = myrb_exec_type3(cb, MYRB_CMD_FLUSH, 0); 2173 if (status == MYRB_STATUS_SUCCESS) { 2174 shost_printk(KERN_INFO, shost, 2175 "Cache Flush Completed\n"); 2176 return count; 2177 } 2178 shost_printk(KERN_INFO, shost, 2179 "Cache Flush Failed, status %x\n", status); 2180 return -EIO; 2181 } 2182 static DEVICE_ATTR_WO(flush_cache); 2183 2184 static struct device_attribute *myrb_sdev_attrs[] = { 2185 &dev_attr_rebuild, 2186 &dev_attr_consistency_check, 2187 &dev_attr_raid_state, 2188 &dev_attr_raid_level, 2189 NULL, 2190 }; 2191 2192 static struct device_attribute *myrb_shost_attrs[] = { 2193 &dev_attr_ctlr_num, 2194 &dev_attr_model, 2195 &dev_attr_firmware, 2196 &dev_attr_flush_cache, 2197 NULL, 2198 }; 2199 2200 static struct scsi_host_template myrb_template = { 2201 .module = THIS_MODULE, 2202 .name = "DAC960", 2203 .proc_name = "myrb", 2204 .queuecommand = myrb_queuecommand, 2205 .eh_host_reset_handler = myrb_host_reset, 2206 .slave_alloc = myrb_slave_alloc, 2207 .slave_configure = myrb_slave_configure, 2208 .slave_destroy = myrb_slave_destroy, 2209 .bios_param = myrb_biosparam, 2210 .cmd_size = sizeof(struct myrb_cmdblk), 2211 .shost_attrs = myrb_shost_attrs, 2212 .sdev_attrs = myrb_sdev_attrs, 2213 .this_id = -1, 2214 }; 2215 2216 /** 2217 * myrb_is_raid - return boolean indicating device is raid volume 2218 * @dev: the device struct object 2219 */ 2220 static int myrb_is_raid(struct device *dev) 2221 { 2222 struct scsi_device *sdev = to_scsi_device(dev); 2223 2224 return sdev->channel == myrb_logical_channel(sdev->host); 2225 } 2226 2227 /** 2228 * myrb_get_resync - get raid volume resync percent complete 2229 * @dev: the device struct object 2230 */ 2231 static void myrb_get_resync(struct device *dev) 2232 { 2233 struct scsi_device *sdev = to_scsi_device(dev); 2234 struct myrb_hba *cb = shost_priv(sdev->host); 2235 struct myrb_rbld_progress rbld_buf; 2236 unsigned int percent_complete = 0; 2237 unsigned short status; 2238 unsigned int ldev_size = 0, remaining = 0; 2239 2240 if (sdev->channel < myrb_logical_channel(sdev->host)) 2241 return; 2242 status = myrb_get_rbld_progress(cb, &rbld_buf); 2243 if (status == MYRB_STATUS_SUCCESS) { 2244 if (rbld_buf.ldev_num == sdev->id) { 2245 ldev_size = rbld_buf.ldev_size; 2246 remaining = rbld_buf.blocks_left; 2247 } 2248 } 2249 if (remaining && ldev_size) 2250 percent_complete = (ldev_size - remaining) * 100 / ldev_size; 2251 raid_set_resync(myrb_raid_template, dev, percent_complete); 2252 } 2253 2254 /** 2255 * myrb_get_state - get raid volume status 2256 * @dev: the device struct object 2257 */ 2258 static void myrb_get_state(struct device *dev) 2259 { 2260 struct scsi_device *sdev = to_scsi_device(dev); 2261 struct myrb_hba *cb = shost_priv(sdev->host); 2262 struct myrb_ldev_info *ldev_info = sdev->hostdata; 2263 enum raid_state state = RAID_STATE_UNKNOWN; 2264 unsigned short status; 2265 2266 if (sdev->channel < myrb_logical_channel(sdev->host) || !ldev_info) 2267 state = RAID_STATE_UNKNOWN; 2268 else { 2269 status = myrb_get_rbld_progress(cb, NULL); 2270 if (status == MYRB_STATUS_SUCCESS) 2271 state = RAID_STATE_RESYNCING; 2272 else { 2273 switch (ldev_info->state) { 2274 case MYRB_DEVICE_ONLINE: 2275 state = RAID_STATE_ACTIVE; 2276 break; 2277 case MYRB_DEVICE_WO: 2278 case MYRB_DEVICE_CRITICAL: 2279 state = RAID_STATE_DEGRADED; 2280 break; 2281 default: 2282 state = RAID_STATE_OFFLINE; 2283 } 2284 } 2285 } 2286 raid_set_state(myrb_raid_template, dev, state); 2287 } 2288 2289 static struct raid_function_template myrb_raid_functions = { 2290 .cookie = &myrb_template, 2291 .is_raid = myrb_is_raid, 2292 .get_resync = myrb_get_resync, 2293 .get_state = myrb_get_state, 2294 }; 2295 2296 static void myrb_handle_scsi(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk, 2297 struct scsi_cmnd *scmd) 2298 { 2299 unsigned short status; 2300 2301 if (!cmd_blk) 2302 return; 2303 2304 scsi_dma_unmap(scmd); 2305 2306 if (cmd_blk->dcdb) { 2307 memcpy(scmd->sense_buffer, &cmd_blk->dcdb->sense, 64); 2308 dma_pool_free(cb->dcdb_pool, cmd_blk->dcdb, 2309 cmd_blk->dcdb_addr); 2310 cmd_blk->dcdb = NULL; 2311 } 2312 if (cmd_blk->sgl) { 2313 dma_pool_free(cb->sg_pool, cmd_blk->sgl, cmd_blk->sgl_addr); 2314 cmd_blk->sgl = NULL; 2315 cmd_blk->sgl_addr = 0; 2316 } 2317 status = cmd_blk->status; 2318 switch (status) { 2319 case MYRB_STATUS_SUCCESS: 2320 case MYRB_STATUS_DEVICE_BUSY: 2321 scmd->result = (DID_OK << 16) | status; 2322 break; 2323 case MYRB_STATUS_BAD_DATA: 2324 dev_dbg(&scmd->device->sdev_gendev, 2325 "Bad Data Encountered\n"); 2326 if (scmd->sc_data_direction == DMA_FROM_DEVICE) 2327 /* Unrecovered read error */ 2328 scsi_build_sense(scmd, 0, MEDIUM_ERROR, 0x11, 0); 2329 else 2330 /* Write error */ 2331 scsi_build_sense(scmd, 0, MEDIUM_ERROR, 0x0C, 0); 2332 break; 2333 case MYRB_STATUS_IRRECOVERABLE_DATA_ERROR: 2334 scmd_printk(KERN_ERR, scmd, "Irrecoverable Data Error\n"); 2335 if (scmd->sc_data_direction == DMA_FROM_DEVICE) 2336 /* Unrecovered read error, auto-reallocation failed */ 2337 scsi_build_sense(scmd, 0, MEDIUM_ERROR, 0x11, 0x04); 2338 else 2339 /* Write error, auto-reallocation failed */ 2340 scsi_build_sense(scmd, 0, MEDIUM_ERROR, 0x0C, 0x02); 2341 break; 2342 case MYRB_STATUS_LDRV_NONEXISTENT_OR_OFFLINE: 2343 dev_dbg(&scmd->device->sdev_gendev, 2344 "Logical Drive Nonexistent or Offline"); 2345 scmd->result = (DID_BAD_TARGET << 16); 2346 break; 2347 case MYRB_STATUS_ACCESS_BEYOND_END_OF_LDRV: 2348 dev_dbg(&scmd->device->sdev_gendev, 2349 "Attempt to Access Beyond End of Logical Drive"); 2350 /* Logical block address out of range */ 2351 scsi_build_sense(scmd, 0, NOT_READY, 0x21, 0); 2352 break; 2353 case MYRB_STATUS_DEVICE_NONRESPONSIVE: 2354 dev_dbg(&scmd->device->sdev_gendev, "Device nonresponsive\n"); 2355 scmd->result = (DID_BAD_TARGET << 16); 2356 break; 2357 default: 2358 scmd_printk(KERN_ERR, scmd, 2359 "Unexpected Error Status %04X", status); 2360 scmd->result = (DID_ERROR << 16); 2361 break; 2362 } 2363 scmd->scsi_done(scmd); 2364 } 2365 2366 static void myrb_handle_cmdblk(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk) 2367 { 2368 if (!cmd_blk) 2369 return; 2370 2371 if (cmd_blk->completion) { 2372 complete(cmd_blk->completion); 2373 cmd_blk->completion = NULL; 2374 } 2375 } 2376 2377 static void myrb_monitor(struct work_struct *work) 2378 { 2379 struct myrb_hba *cb = container_of(work, 2380 struct myrb_hba, monitor_work.work); 2381 struct Scsi_Host *shost = cb->host; 2382 unsigned long interval = MYRB_PRIMARY_MONITOR_INTERVAL; 2383 2384 dev_dbg(&shost->shost_gendev, "monitor tick\n"); 2385 2386 if (cb->new_ev_seq > cb->old_ev_seq) { 2387 int event = cb->old_ev_seq; 2388 2389 dev_dbg(&shost->shost_gendev, 2390 "get event log no %d/%d\n", 2391 cb->new_ev_seq, event); 2392 myrb_get_event(cb, event); 2393 cb->old_ev_seq = event + 1; 2394 interval = 10; 2395 } else if (cb->need_err_info) { 2396 cb->need_err_info = false; 2397 dev_dbg(&shost->shost_gendev, "get error table\n"); 2398 myrb_get_errtable(cb); 2399 interval = 10; 2400 } else if (cb->need_rbld && cb->rbld_first) { 2401 cb->need_rbld = false; 2402 dev_dbg(&shost->shost_gendev, 2403 "get rebuild progress\n"); 2404 myrb_update_rbld_progress(cb); 2405 interval = 10; 2406 } else if (cb->need_ldev_info) { 2407 cb->need_ldev_info = false; 2408 dev_dbg(&shost->shost_gendev, 2409 "get logical drive info\n"); 2410 myrb_get_ldev_info(cb); 2411 interval = 10; 2412 } else if (cb->need_rbld) { 2413 cb->need_rbld = false; 2414 dev_dbg(&shost->shost_gendev, 2415 "get rebuild progress\n"); 2416 myrb_update_rbld_progress(cb); 2417 interval = 10; 2418 } else if (cb->need_cc_status) { 2419 cb->need_cc_status = false; 2420 dev_dbg(&shost->shost_gendev, 2421 "get consistency check progress\n"); 2422 myrb_get_cc_progress(cb); 2423 interval = 10; 2424 } else if (cb->need_bgi_status) { 2425 cb->need_bgi_status = false; 2426 dev_dbg(&shost->shost_gendev, "get background init status\n"); 2427 myrb_bgi_control(cb); 2428 interval = 10; 2429 } else { 2430 dev_dbg(&shost->shost_gendev, "new enquiry\n"); 2431 mutex_lock(&cb->dma_mutex); 2432 myrb_hba_enquiry(cb); 2433 mutex_unlock(&cb->dma_mutex); 2434 if ((cb->new_ev_seq - cb->old_ev_seq > 0) || 2435 cb->need_err_info || cb->need_rbld || 2436 cb->need_ldev_info || cb->need_cc_status || 2437 cb->need_bgi_status) { 2438 dev_dbg(&shost->shost_gendev, 2439 "reschedule monitor\n"); 2440 interval = 0; 2441 } 2442 } 2443 if (interval > 1) 2444 cb->primary_monitor_time = jiffies; 2445 queue_delayed_work(cb->work_q, &cb->monitor_work, interval); 2446 } 2447 2448 /* 2449 * myrb_err_status - reports controller BIOS messages 2450 * 2451 * Controller BIOS messages are passed through the Error Status Register 2452 * when the driver performs the BIOS handshaking. 2453 * 2454 * Return: true for fatal errors and false otherwise. 2455 */ 2456 static bool myrb_err_status(struct myrb_hba *cb, unsigned char error, 2457 unsigned char parm0, unsigned char parm1) 2458 { 2459 struct pci_dev *pdev = cb->pdev; 2460 2461 switch (error) { 2462 case 0x00: 2463 dev_info(&pdev->dev, 2464 "Physical Device %d:%d Not Responding\n", 2465 parm1, parm0); 2466 break; 2467 case 0x08: 2468 dev_notice(&pdev->dev, "Spinning Up Drives\n"); 2469 break; 2470 case 0x30: 2471 dev_notice(&pdev->dev, "Configuration Checksum Error\n"); 2472 break; 2473 case 0x60: 2474 dev_notice(&pdev->dev, "Mirror Race Recovery Failed\n"); 2475 break; 2476 case 0x70: 2477 dev_notice(&pdev->dev, "Mirror Race Recovery In Progress\n"); 2478 break; 2479 case 0x90: 2480 dev_notice(&pdev->dev, "Physical Device %d:%d COD Mismatch\n", 2481 parm1, parm0); 2482 break; 2483 case 0xA0: 2484 dev_notice(&pdev->dev, "Logical Drive Installation Aborted\n"); 2485 break; 2486 case 0xB0: 2487 dev_notice(&pdev->dev, "Mirror Race On A Critical Logical Drive\n"); 2488 break; 2489 case 0xD0: 2490 dev_notice(&pdev->dev, "New Controller Configuration Found\n"); 2491 break; 2492 case 0xF0: 2493 dev_err(&pdev->dev, "Fatal Memory Parity Error\n"); 2494 return true; 2495 default: 2496 dev_err(&pdev->dev, "Unknown Initialization Error %02X\n", 2497 error); 2498 return true; 2499 } 2500 return false; 2501 } 2502 2503 /* 2504 * Hardware-specific functions 2505 */ 2506 2507 /* 2508 * DAC960 LA Series Controllers 2509 */ 2510 2511 static inline void DAC960_LA_hw_mbox_new_cmd(void __iomem *base) 2512 { 2513 writeb(DAC960_LA_IDB_HWMBOX_NEW_CMD, base + DAC960_LA_IDB_OFFSET); 2514 } 2515 2516 static inline void DAC960_LA_ack_hw_mbox_status(void __iomem *base) 2517 { 2518 writeb(DAC960_LA_IDB_HWMBOX_ACK_STS, base + DAC960_LA_IDB_OFFSET); 2519 } 2520 2521 static inline void DAC960_LA_reset_ctrl(void __iomem *base) 2522 { 2523 writeb(DAC960_LA_IDB_CTRL_RESET, base + DAC960_LA_IDB_OFFSET); 2524 } 2525 2526 static inline void DAC960_LA_mem_mbox_new_cmd(void __iomem *base) 2527 { 2528 writeb(DAC960_LA_IDB_MMBOX_NEW_CMD, base + DAC960_LA_IDB_OFFSET); 2529 } 2530 2531 static inline bool DAC960_LA_hw_mbox_is_full(void __iomem *base) 2532 { 2533 unsigned char idb = readb(base + DAC960_LA_IDB_OFFSET); 2534 2535 return !(idb & DAC960_LA_IDB_HWMBOX_EMPTY); 2536 } 2537 2538 static inline bool DAC960_LA_init_in_progress(void __iomem *base) 2539 { 2540 unsigned char idb = readb(base + DAC960_LA_IDB_OFFSET); 2541 2542 return !(idb & DAC960_LA_IDB_INIT_DONE); 2543 } 2544 2545 static inline void DAC960_LA_ack_hw_mbox_intr(void __iomem *base) 2546 { 2547 writeb(DAC960_LA_ODB_HWMBOX_ACK_IRQ, base + DAC960_LA_ODB_OFFSET); 2548 } 2549 2550 static inline void DAC960_LA_ack_intr(void __iomem *base) 2551 { 2552 writeb(DAC960_LA_ODB_HWMBOX_ACK_IRQ | DAC960_LA_ODB_MMBOX_ACK_IRQ, 2553 base + DAC960_LA_ODB_OFFSET); 2554 } 2555 2556 static inline bool DAC960_LA_hw_mbox_status_available(void __iomem *base) 2557 { 2558 unsigned char odb = readb(base + DAC960_LA_ODB_OFFSET); 2559 2560 return odb & DAC960_LA_ODB_HWMBOX_STS_AVAIL; 2561 } 2562 2563 static inline void DAC960_LA_enable_intr(void __iomem *base) 2564 { 2565 unsigned char odb = 0xFF; 2566 2567 odb &= ~DAC960_LA_IRQMASK_DISABLE_IRQ; 2568 writeb(odb, base + DAC960_LA_IRQMASK_OFFSET); 2569 } 2570 2571 static inline void DAC960_LA_disable_intr(void __iomem *base) 2572 { 2573 unsigned char odb = 0xFF; 2574 2575 odb |= DAC960_LA_IRQMASK_DISABLE_IRQ; 2576 writeb(odb, base + DAC960_LA_IRQMASK_OFFSET); 2577 } 2578 2579 static inline void DAC960_LA_write_cmd_mbox(union myrb_cmd_mbox *mem_mbox, 2580 union myrb_cmd_mbox *mbox) 2581 { 2582 mem_mbox->words[1] = mbox->words[1]; 2583 mem_mbox->words[2] = mbox->words[2]; 2584 mem_mbox->words[3] = mbox->words[3]; 2585 /* Memory barrier to prevent reordering */ 2586 wmb(); 2587 mem_mbox->words[0] = mbox->words[0]; 2588 /* Memory barrier to force PCI access */ 2589 mb(); 2590 } 2591 2592 static inline void DAC960_LA_write_hw_mbox(void __iomem *base, 2593 union myrb_cmd_mbox *mbox) 2594 { 2595 writel(mbox->words[0], base + DAC960_LA_CMDOP_OFFSET); 2596 writel(mbox->words[1], base + DAC960_LA_MBOX4_OFFSET); 2597 writel(mbox->words[2], base + DAC960_LA_MBOX8_OFFSET); 2598 writeb(mbox->bytes[12], base + DAC960_LA_MBOX12_OFFSET); 2599 } 2600 2601 static inline unsigned short DAC960_LA_read_status(void __iomem *base) 2602 { 2603 return readw(base + DAC960_LA_STS_OFFSET); 2604 } 2605 2606 static inline bool 2607 DAC960_LA_read_error_status(void __iomem *base, unsigned char *error, 2608 unsigned char *param0, unsigned char *param1) 2609 { 2610 unsigned char errsts = readb(base + DAC960_LA_ERRSTS_OFFSET); 2611 2612 if (!(errsts & DAC960_LA_ERRSTS_PENDING)) 2613 return false; 2614 errsts &= ~DAC960_LA_ERRSTS_PENDING; 2615 2616 *error = errsts; 2617 *param0 = readb(base + DAC960_LA_CMDOP_OFFSET); 2618 *param1 = readb(base + DAC960_LA_CMDID_OFFSET); 2619 writeb(0xFF, base + DAC960_LA_ERRSTS_OFFSET); 2620 return true; 2621 } 2622 2623 static inline unsigned short 2624 DAC960_LA_mbox_init(struct pci_dev *pdev, void __iomem *base, 2625 union myrb_cmd_mbox *mbox) 2626 { 2627 unsigned short status; 2628 int timeout = 0; 2629 2630 while (timeout < MYRB_MAILBOX_TIMEOUT) { 2631 if (!DAC960_LA_hw_mbox_is_full(base)) 2632 break; 2633 udelay(10); 2634 timeout++; 2635 } 2636 if (DAC960_LA_hw_mbox_is_full(base)) { 2637 dev_err(&pdev->dev, 2638 "Timeout waiting for empty mailbox\n"); 2639 return MYRB_STATUS_SUBSYS_TIMEOUT; 2640 } 2641 DAC960_LA_write_hw_mbox(base, mbox); 2642 DAC960_LA_hw_mbox_new_cmd(base); 2643 timeout = 0; 2644 while (timeout < MYRB_MAILBOX_TIMEOUT) { 2645 if (DAC960_LA_hw_mbox_status_available(base)) 2646 break; 2647 udelay(10); 2648 timeout++; 2649 } 2650 if (!DAC960_LA_hw_mbox_status_available(base)) { 2651 dev_err(&pdev->dev, "Timeout waiting for mailbox status\n"); 2652 return MYRB_STATUS_SUBSYS_TIMEOUT; 2653 } 2654 status = DAC960_LA_read_status(base); 2655 DAC960_LA_ack_hw_mbox_intr(base); 2656 DAC960_LA_ack_hw_mbox_status(base); 2657 2658 return status; 2659 } 2660 2661 static int DAC960_LA_hw_init(struct pci_dev *pdev, 2662 struct myrb_hba *cb, void __iomem *base) 2663 { 2664 int timeout = 0; 2665 unsigned char error, parm0, parm1; 2666 2667 DAC960_LA_disable_intr(base); 2668 DAC960_LA_ack_hw_mbox_status(base); 2669 udelay(1000); 2670 while (DAC960_LA_init_in_progress(base) && 2671 timeout < MYRB_MAILBOX_TIMEOUT) { 2672 if (DAC960_LA_read_error_status(base, &error, 2673 &parm0, &parm1) && 2674 myrb_err_status(cb, error, parm0, parm1)) 2675 return -ENODEV; 2676 udelay(10); 2677 timeout++; 2678 } 2679 if (timeout == MYRB_MAILBOX_TIMEOUT) { 2680 dev_err(&pdev->dev, 2681 "Timeout waiting for Controller Initialisation\n"); 2682 return -ETIMEDOUT; 2683 } 2684 if (!myrb_enable_mmio(cb, DAC960_LA_mbox_init)) { 2685 dev_err(&pdev->dev, 2686 "Unable to Enable Memory Mailbox Interface\n"); 2687 DAC960_LA_reset_ctrl(base); 2688 return -ENODEV; 2689 } 2690 DAC960_LA_enable_intr(base); 2691 cb->qcmd = myrb_qcmd; 2692 cb->write_cmd_mbox = DAC960_LA_write_cmd_mbox; 2693 if (cb->dual_mode_interface) 2694 cb->get_cmd_mbox = DAC960_LA_mem_mbox_new_cmd; 2695 else 2696 cb->get_cmd_mbox = DAC960_LA_hw_mbox_new_cmd; 2697 cb->disable_intr = DAC960_LA_disable_intr; 2698 cb->reset = DAC960_LA_reset_ctrl; 2699 2700 return 0; 2701 } 2702 2703 static irqreturn_t DAC960_LA_intr_handler(int irq, void *arg) 2704 { 2705 struct myrb_hba *cb = arg; 2706 void __iomem *base = cb->io_base; 2707 struct myrb_stat_mbox *next_stat_mbox; 2708 unsigned long flags; 2709 2710 spin_lock_irqsave(&cb->queue_lock, flags); 2711 DAC960_LA_ack_intr(base); 2712 next_stat_mbox = cb->next_stat_mbox; 2713 while (next_stat_mbox->valid) { 2714 unsigned char id = next_stat_mbox->id; 2715 struct scsi_cmnd *scmd = NULL; 2716 struct myrb_cmdblk *cmd_blk = NULL; 2717 2718 if (id == MYRB_DCMD_TAG) 2719 cmd_blk = &cb->dcmd_blk; 2720 else if (id == MYRB_MCMD_TAG) 2721 cmd_blk = &cb->mcmd_blk; 2722 else { 2723 scmd = scsi_host_find_tag(cb->host, id - 3); 2724 if (scmd) 2725 cmd_blk = scsi_cmd_priv(scmd); 2726 } 2727 if (cmd_blk) 2728 cmd_blk->status = next_stat_mbox->status; 2729 else 2730 dev_err(&cb->pdev->dev, 2731 "Unhandled command completion %d\n", id); 2732 2733 memset(next_stat_mbox, 0, sizeof(struct myrb_stat_mbox)); 2734 if (++next_stat_mbox > cb->last_stat_mbox) 2735 next_stat_mbox = cb->first_stat_mbox; 2736 2737 if (cmd_blk) { 2738 if (id < 3) 2739 myrb_handle_cmdblk(cb, cmd_blk); 2740 else 2741 myrb_handle_scsi(cb, cmd_blk, scmd); 2742 } 2743 } 2744 cb->next_stat_mbox = next_stat_mbox; 2745 spin_unlock_irqrestore(&cb->queue_lock, flags); 2746 return IRQ_HANDLED; 2747 } 2748 2749 static struct myrb_privdata DAC960_LA_privdata = { 2750 .hw_init = DAC960_LA_hw_init, 2751 .irq_handler = DAC960_LA_intr_handler, 2752 .mmio_size = DAC960_LA_mmio_size, 2753 }; 2754 2755 /* 2756 * DAC960 PG Series Controllers 2757 */ 2758 static inline void DAC960_PG_hw_mbox_new_cmd(void __iomem *base) 2759 { 2760 writel(DAC960_PG_IDB_HWMBOX_NEW_CMD, base + DAC960_PG_IDB_OFFSET); 2761 } 2762 2763 static inline void DAC960_PG_ack_hw_mbox_status(void __iomem *base) 2764 { 2765 writel(DAC960_PG_IDB_HWMBOX_ACK_STS, base + DAC960_PG_IDB_OFFSET); 2766 } 2767 2768 static inline void DAC960_PG_reset_ctrl(void __iomem *base) 2769 { 2770 writel(DAC960_PG_IDB_CTRL_RESET, base + DAC960_PG_IDB_OFFSET); 2771 } 2772 2773 static inline void DAC960_PG_mem_mbox_new_cmd(void __iomem *base) 2774 { 2775 writel(DAC960_PG_IDB_MMBOX_NEW_CMD, base + DAC960_PG_IDB_OFFSET); 2776 } 2777 2778 static inline bool DAC960_PG_hw_mbox_is_full(void __iomem *base) 2779 { 2780 unsigned char idb = readl(base + DAC960_PG_IDB_OFFSET); 2781 2782 return idb & DAC960_PG_IDB_HWMBOX_FULL; 2783 } 2784 2785 static inline bool DAC960_PG_init_in_progress(void __iomem *base) 2786 { 2787 unsigned char idb = readl(base + DAC960_PG_IDB_OFFSET); 2788 2789 return idb & DAC960_PG_IDB_INIT_IN_PROGRESS; 2790 } 2791 2792 static inline void DAC960_PG_ack_hw_mbox_intr(void __iomem *base) 2793 { 2794 writel(DAC960_PG_ODB_HWMBOX_ACK_IRQ, base + DAC960_PG_ODB_OFFSET); 2795 } 2796 2797 static inline void DAC960_PG_ack_intr(void __iomem *base) 2798 { 2799 writel(DAC960_PG_ODB_HWMBOX_ACK_IRQ | DAC960_PG_ODB_MMBOX_ACK_IRQ, 2800 base + DAC960_PG_ODB_OFFSET); 2801 } 2802 2803 static inline bool DAC960_PG_hw_mbox_status_available(void __iomem *base) 2804 { 2805 unsigned char odb = readl(base + DAC960_PG_ODB_OFFSET); 2806 2807 return odb & DAC960_PG_ODB_HWMBOX_STS_AVAIL; 2808 } 2809 2810 static inline void DAC960_PG_enable_intr(void __iomem *base) 2811 { 2812 unsigned int imask = (unsigned int)-1; 2813 2814 imask &= ~DAC960_PG_IRQMASK_DISABLE_IRQ; 2815 writel(imask, base + DAC960_PG_IRQMASK_OFFSET); 2816 } 2817 2818 static inline void DAC960_PG_disable_intr(void __iomem *base) 2819 { 2820 unsigned int imask = (unsigned int)-1; 2821 2822 writel(imask, base + DAC960_PG_IRQMASK_OFFSET); 2823 } 2824 2825 static inline void DAC960_PG_write_cmd_mbox(union myrb_cmd_mbox *mem_mbox, 2826 union myrb_cmd_mbox *mbox) 2827 { 2828 mem_mbox->words[1] = mbox->words[1]; 2829 mem_mbox->words[2] = mbox->words[2]; 2830 mem_mbox->words[3] = mbox->words[3]; 2831 /* Memory barrier to prevent reordering */ 2832 wmb(); 2833 mem_mbox->words[0] = mbox->words[0]; 2834 /* Memory barrier to force PCI access */ 2835 mb(); 2836 } 2837 2838 static inline void DAC960_PG_write_hw_mbox(void __iomem *base, 2839 union myrb_cmd_mbox *mbox) 2840 { 2841 writel(mbox->words[0], base + DAC960_PG_CMDOP_OFFSET); 2842 writel(mbox->words[1], base + DAC960_PG_MBOX4_OFFSET); 2843 writel(mbox->words[2], base + DAC960_PG_MBOX8_OFFSET); 2844 writeb(mbox->bytes[12], base + DAC960_PG_MBOX12_OFFSET); 2845 } 2846 2847 static inline unsigned short 2848 DAC960_PG_read_status(void __iomem *base) 2849 { 2850 return readw(base + DAC960_PG_STS_OFFSET); 2851 } 2852 2853 static inline bool 2854 DAC960_PG_read_error_status(void __iomem *base, unsigned char *error, 2855 unsigned char *param0, unsigned char *param1) 2856 { 2857 unsigned char errsts = readb(base + DAC960_PG_ERRSTS_OFFSET); 2858 2859 if (!(errsts & DAC960_PG_ERRSTS_PENDING)) 2860 return false; 2861 errsts &= ~DAC960_PG_ERRSTS_PENDING; 2862 *error = errsts; 2863 *param0 = readb(base + DAC960_PG_CMDOP_OFFSET); 2864 *param1 = readb(base + DAC960_PG_CMDID_OFFSET); 2865 writeb(0, base + DAC960_PG_ERRSTS_OFFSET); 2866 return true; 2867 } 2868 2869 static inline unsigned short 2870 DAC960_PG_mbox_init(struct pci_dev *pdev, void __iomem *base, 2871 union myrb_cmd_mbox *mbox) 2872 { 2873 unsigned short status; 2874 int timeout = 0; 2875 2876 while (timeout < MYRB_MAILBOX_TIMEOUT) { 2877 if (!DAC960_PG_hw_mbox_is_full(base)) 2878 break; 2879 udelay(10); 2880 timeout++; 2881 } 2882 if (DAC960_PG_hw_mbox_is_full(base)) { 2883 dev_err(&pdev->dev, 2884 "Timeout waiting for empty mailbox\n"); 2885 return MYRB_STATUS_SUBSYS_TIMEOUT; 2886 } 2887 DAC960_PG_write_hw_mbox(base, mbox); 2888 DAC960_PG_hw_mbox_new_cmd(base); 2889 2890 timeout = 0; 2891 while (timeout < MYRB_MAILBOX_TIMEOUT) { 2892 if (DAC960_PG_hw_mbox_status_available(base)) 2893 break; 2894 udelay(10); 2895 timeout++; 2896 } 2897 if (!DAC960_PG_hw_mbox_status_available(base)) { 2898 dev_err(&pdev->dev, 2899 "Timeout waiting for mailbox status\n"); 2900 return MYRB_STATUS_SUBSYS_TIMEOUT; 2901 } 2902 status = DAC960_PG_read_status(base); 2903 DAC960_PG_ack_hw_mbox_intr(base); 2904 DAC960_PG_ack_hw_mbox_status(base); 2905 2906 return status; 2907 } 2908 2909 static int DAC960_PG_hw_init(struct pci_dev *pdev, 2910 struct myrb_hba *cb, void __iomem *base) 2911 { 2912 int timeout = 0; 2913 unsigned char error, parm0, parm1; 2914 2915 DAC960_PG_disable_intr(base); 2916 DAC960_PG_ack_hw_mbox_status(base); 2917 udelay(1000); 2918 while (DAC960_PG_init_in_progress(base) && 2919 timeout < MYRB_MAILBOX_TIMEOUT) { 2920 if (DAC960_PG_read_error_status(base, &error, 2921 &parm0, &parm1) && 2922 myrb_err_status(cb, error, parm0, parm1)) 2923 return -EIO; 2924 udelay(10); 2925 timeout++; 2926 } 2927 if (timeout == MYRB_MAILBOX_TIMEOUT) { 2928 dev_err(&pdev->dev, 2929 "Timeout waiting for Controller Initialisation\n"); 2930 return -ETIMEDOUT; 2931 } 2932 if (!myrb_enable_mmio(cb, DAC960_PG_mbox_init)) { 2933 dev_err(&pdev->dev, 2934 "Unable to Enable Memory Mailbox Interface\n"); 2935 DAC960_PG_reset_ctrl(base); 2936 return -ENODEV; 2937 } 2938 DAC960_PG_enable_intr(base); 2939 cb->qcmd = myrb_qcmd; 2940 cb->write_cmd_mbox = DAC960_PG_write_cmd_mbox; 2941 if (cb->dual_mode_interface) 2942 cb->get_cmd_mbox = DAC960_PG_mem_mbox_new_cmd; 2943 else 2944 cb->get_cmd_mbox = DAC960_PG_hw_mbox_new_cmd; 2945 cb->disable_intr = DAC960_PG_disable_intr; 2946 cb->reset = DAC960_PG_reset_ctrl; 2947 2948 return 0; 2949 } 2950 2951 static irqreturn_t DAC960_PG_intr_handler(int irq, void *arg) 2952 { 2953 struct myrb_hba *cb = arg; 2954 void __iomem *base = cb->io_base; 2955 struct myrb_stat_mbox *next_stat_mbox; 2956 unsigned long flags; 2957 2958 spin_lock_irqsave(&cb->queue_lock, flags); 2959 DAC960_PG_ack_intr(base); 2960 next_stat_mbox = cb->next_stat_mbox; 2961 while (next_stat_mbox->valid) { 2962 unsigned char id = next_stat_mbox->id; 2963 struct scsi_cmnd *scmd = NULL; 2964 struct myrb_cmdblk *cmd_blk = NULL; 2965 2966 if (id == MYRB_DCMD_TAG) 2967 cmd_blk = &cb->dcmd_blk; 2968 else if (id == MYRB_MCMD_TAG) 2969 cmd_blk = &cb->mcmd_blk; 2970 else { 2971 scmd = scsi_host_find_tag(cb->host, id - 3); 2972 if (scmd) 2973 cmd_blk = scsi_cmd_priv(scmd); 2974 } 2975 if (cmd_blk) 2976 cmd_blk->status = next_stat_mbox->status; 2977 else 2978 dev_err(&cb->pdev->dev, 2979 "Unhandled command completion %d\n", id); 2980 2981 memset(next_stat_mbox, 0, sizeof(struct myrb_stat_mbox)); 2982 if (++next_stat_mbox > cb->last_stat_mbox) 2983 next_stat_mbox = cb->first_stat_mbox; 2984 2985 if (id < 3) 2986 myrb_handle_cmdblk(cb, cmd_blk); 2987 else 2988 myrb_handle_scsi(cb, cmd_blk, scmd); 2989 } 2990 cb->next_stat_mbox = next_stat_mbox; 2991 spin_unlock_irqrestore(&cb->queue_lock, flags); 2992 return IRQ_HANDLED; 2993 } 2994 2995 static struct myrb_privdata DAC960_PG_privdata = { 2996 .hw_init = DAC960_PG_hw_init, 2997 .irq_handler = DAC960_PG_intr_handler, 2998 .mmio_size = DAC960_PG_mmio_size, 2999 }; 3000 3001 3002 /* 3003 * DAC960 PD Series Controllers 3004 */ 3005 3006 static inline void DAC960_PD_hw_mbox_new_cmd(void __iomem *base) 3007 { 3008 writeb(DAC960_PD_IDB_HWMBOX_NEW_CMD, base + DAC960_PD_IDB_OFFSET); 3009 } 3010 3011 static inline void DAC960_PD_ack_hw_mbox_status(void __iomem *base) 3012 { 3013 writeb(DAC960_PD_IDB_HWMBOX_ACK_STS, base + DAC960_PD_IDB_OFFSET); 3014 } 3015 3016 static inline void DAC960_PD_reset_ctrl(void __iomem *base) 3017 { 3018 writeb(DAC960_PD_IDB_CTRL_RESET, base + DAC960_PD_IDB_OFFSET); 3019 } 3020 3021 static inline bool DAC960_PD_hw_mbox_is_full(void __iomem *base) 3022 { 3023 unsigned char idb = readb(base + DAC960_PD_IDB_OFFSET); 3024 3025 return idb & DAC960_PD_IDB_HWMBOX_FULL; 3026 } 3027 3028 static inline bool DAC960_PD_init_in_progress(void __iomem *base) 3029 { 3030 unsigned char idb = readb(base + DAC960_PD_IDB_OFFSET); 3031 3032 return idb & DAC960_PD_IDB_INIT_IN_PROGRESS; 3033 } 3034 3035 static inline void DAC960_PD_ack_intr(void __iomem *base) 3036 { 3037 writeb(DAC960_PD_ODB_HWMBOX_ACK_IRQ, base + DAC960_PD_ODB_OFFSET); 3038 } 3039 3040 static inline bool DAC960_PD_hw_mbox_status_available(void __iomem *base) 3041 { 3042 unsigned char odb = readb(base + DAC960_PD_ODB_OFFSET); 3043 3044 return odb & DAC960_PD_ODB_HWMBOX_STS_AVAIL; 3045 } 3046 3047 static inline void DAC960_PD_enable_intr(void __iomem *base) 3048 { 3049 writeb(DAC960_PD_IRQMASK_ENABLE_IRQ, base + DAC960_PD_IRQEN_OFFSET); 3050 } 3051 3052 static inline void DAC960_PD_disable_intr(void __iomem *base) 3053 { 3054 writeb(0, base + DAC960_PD_IRQEN_OFFSET); 3055 } 3056 3057 static inline void DAC960_PD_write_cmd_mbox(void __iomem *base, 3058 union myrb_cmd_mbox *mbox) 3059 { 3060 writel(mbox->words[0], base + DAC960_PD_CMDOP_OFFSET); 3061 writel(mbox->words[1], base + DAC960_PD_MBOX4_OFFSET); 3062 writel(mbox->words[2], base + DAC960_PD_MBOX8_OFFSET); 3063 writeb(mbox->bytes[12], base + DAC960_PD_MBOX12_OFFSET); 3064 } 3065 3066 static inline unsigned char 3067 DAC960_PD_read_status_cmd_ident(void __iomem *base) 3068 { 3069 return readb(base + DAC960_PD_STSID_OFFSET); 3070 } 3071 3072 static inline unsigned short 3073 DAC960_PD_read_status(void __iomem *base) 3074 { 3075 return readw(base + DAC960_PD_STS_OFFSET); 3076 } 3077 3078 static inline bool 3079 DAC960_PD_read_error_status(void __iomem *base, unsigned char *error, 3080 unsigned char *param0, unsigned char *param1) 3081 { 3082 unsigned char errsts = readb(base + DAC960_PD_ERRSTS_OFFSET); 3083 3084 if (!(errsts & DAC960_PD_ERRSTS_PENDING)) 3085 return false; 3086 errsts &= ~DAC960_PD_ERRSTS_PENDING; 3087 *error = errsts; 3088 *param0 = readb(base + DAC960_PD_CMDOP_OFFSET); 3089 *param1 = readb(base + DAC960_PD_CMDID_OFFSET); 3090 writeb(0, base + DAC960_PD_ERRSTS_OFFSET); 3091 return true; 3092 } 3093 3094 static void DAC960_PD_qcmd(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk) 3095 { 3096 void __iomem *base = cb->io_base; 3097 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 3098 3099 while (DAC960_PD_hw_mbox_is_full(base)) 3100 udelay(1); 3101 DAC960_PD_write_cmd_mbox(base, mbox); 3102 DAC960_PD_hw_mbox_new_cmd(base); 3103 } 3104 3105 static int DAC960_PD_hw_init(struct pci_dev *pdev, 3106 struct myrb_hba *cb, void __iomem *base) 3107 { 3108 int timeout = 0; 3109 unsigned char error, parm0, parm1; 3110 3111 if (!request_region(cb->io_addr, 0x80, "myrb")) { 3112 dev_err(&pdev->dev, "IO port 0x%lx busy\n", 3113 (unsigned long)cb->io_addr); 3114 return -EBUSY; 3115 } 3116 DAC960_PD_disable_intr(base); 3117 DAC960_PD_ack_hw_mbox_status(base); 3118 udelay(1000); 3119 while (DAC960_PD_init_in_progress(base) && 3120 timeout < MYRB_MAILBOX_TIMEOUT) { 3121 if (DAC960_PD_read_error_status(base, &error, 3122 &parm0, &parm1) && 3123 myrb_err_status(cb, error, parm0, parm1)) 3124 return -EIO; 3125 udelay(10); 3126 timeout++; 3127 } 3128 if (timeout == MYRB_MAILBOX_TIMEOUT) { 3129 dev_err(&pdev->dev, 3130 "Timeout waiting for Controller Initialisation\n"); 3131 return -ETIMEDOUT; 3132 } 3133 if (!myrb_enable_mmio(cb, NULL)) { 3134 dev_err(&pdev->dev, 3135 "Unable to Enable Memory Mailbox Interface\n"); 3136 DAC960_PD_reset_ctrl(base); 3137 return -ENODEV; 3138 } 3139 DAC960_PD_enable_intr(base); 3140 cb->qcmd = DAC960_PD_qcmd; 3141 cb->disable_intr = DAC960_PD_disable_intr; 3142 cb->reset = DAC960_PD_reset_ctrl; 3143 3144 return 0; 3145 } 3146 3147 static irqreturn_t DAC960_PD_intr_handler(int irq, void *arg) 3148 { 3149 struct myrb_hba *cb = arg; 3150 void __iomem *base = cb->io_base; 3151 unsigned long flags; 3152 3153 spin_lock_irqsave(&cb->queue_lock, flags); 3154 while (DAC960_PD_hw_mbox_status_available(base)) { 3155 unsigned char id = DAC960_PD_read_status_cmd_ident(base); 3156 struct scsi_cmnd *scmd = NULL; 3157 struct myrb_cmdblk *cmd_blk = NULL; 3158 3159 if (id == MYRB_DCMD_TAG) 3160 cmd_blk = &cb->dcmd_blk; 3161 else if (id == MYRB_MCMD_TAG) 3162 cmd_blk = &cb->mcmd_blk; 3163 else { 3164 scmd = scsi_host_find_tag(cb->host, id - 3); 3165 if (scmd) 3166 cmd_blk = scsi_cmd_priv(scmd); 3167 } 3168 if (cmd_blk) 3169 cmd_blk->status = DAC960_PD_read_status(base); 3170 else 3171 dev_err(&cb->pdev->dev, 3172 "Unhandled command completion %d\n", id); 3173 3174 DAC960_PD_ack_intr(base); 3175 DAC960_PD_ack_hw_mbox_status(base); 3176 3177 if (id < 3) 3178 myrb_handle_cmdblk(cb, cmd_blk); 3179 else 3180 myrb_handle_scsi(cb, cmd_blk, scmd); 3181 } 3182 spin_unlock_irqrestore(&cb->queue_lock, flags); 3183 return IRQ_HANDLED; 3184 } 3185 3186 static struct myrb_privdata DAC960_PD_privdata = { 3187 .hw_init = DAC960_PD_hw_init, 3188 .irq_handler = DAC960_PD_intr_handler, 3189 .mmio_size = DAC960_PD_mmio_size, 3190 }; 3191 3192 3193 /* 3194 * DAC960 P Series Controllers 3195 * 3196 * Similar to the DAC960 PD Series Controllers, but some commands have 3197 * to be translated. 3198 */ 3199 3200 static inline void myrb_translate_enquiry(void *enq) 3201 { 3202 memcpy(enq + 132, enq + 36, 64); 3203 memset(enq + 36, 0, 96); 3204 } 3205 3206 static inline void myrb_translate_devstate(void *state) 3207 { 3208 memcpy(state + 2, state + 3, 1); 3209 memmove(state + 4, state + 5, 2); 3210 memmove(state + 6, state + 8, 4); 3211 } 3212 3213 static inline void myrb_translate_to_rw_command(struct myrb_cmdblk *cmd_blk) 3214 { 3215 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 3216 int ldev_num = mbox->type5.ld.ldev_num; 3217 3218 mbox->bytes[3] &= 0x7; 3219 mbox->bytes[3] |= mbox->bytes[7] << 6; 3220 mbox->bytes[7] = ldev_num; 3221 } 3222 3223 static inline void myrb_translate_from_rw_command(struct myrb_cmdblk *cmd_blk) 3224 { 3225 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 3226 int ldev_num = mbox->bytes[7]; 3227 3228 mbox->bytes[7] = mbox->bytes[3] >> 6; 3229 mbox->bytes[3] &= 0x7; 3230 mbox->bytes[3] |= ldev_num << 3; 3231 } 3232 3233 static void DAC960_P_qcmd(struct myrb_hba *cb, struct myrb_cmdblk *cmd_blk) 3234 { 3235 void __iomem *base = cb->io_base; 3236 union myrb_cmd_mbox *mbox = &cmd_blk->mbox; 3237 3238 switch (mbox->common.opcode) { 3239 case MYRB_CMD_ENQUIRY: 3240 mbox->common.opcode = MYRB_CMD_ENQUIRY_OLD; 3241 break; 3242 case MYRB_CMD_GET_DEVICE_STATE: 3243 mbox->common.opcode = MYRB_CMD_GET_DEVICE_STATE_OLD; 3244 break; 3245 case MYRB_CMD_READ: 3246 mbox->common.opcode = MYRB_CMD_READ_OLD; 3247 myrb_translate_to_rw_command(cmd_blk); 3248 break; 3249 case MYRB_CMD_WRITE: 3250 mbox->common.opcode = MYRB_CMD_WRITE_OLD; 3251 myrb_translate_to_rw_command(cmd_blk); 3252 break; 3253 case MYRB_CMD_READ_SG: 3254 mbox->common.opcode = MYRB_CMD_READ_SG_OLD; 3255 myrb_translate_to_rw_command(cmd_blk); 3256 break; 3257 case MYRB_CMD_WRITE_SG: 3258 mbox->common.opcode = MYRB_CMD_WRITE_SG_OLD; 3259 myrb_translate_to_rw_command(cmd_blk); 3260 break; 3261 default: 3262 break; 3263 } 3264 while (DAC960_PD_hw_mbox_is_full(base)) 3265 udelay(1); 3266 DAC960_PD_write_cmd_mbox(base, mbox); 3267 DAC960_PD_hw_mbox_new_cmd(base); 3268 } 3269 3270 3271 static int DAC960_P_hw_init(struct pci_dev *pdev, 3272 struct myrb_hba *cb, void __iomem *base) 3273 { 3274 int timeout = 0; 3275 unsigned char error, parm0, parm1; 3276 3277 if (!request_region(cb->io_addr, 0x80, "myrb")) { 3278 dev_err(&pdev->dev, "IO port 0x%lx busy\n", 3279 (unsigned long)cb->io_addr); 3280 return -EBUSY; 3281 } 3282 DAC960_PD_disable_intr(base); 3283 DAC960_PD_ack_hw_mbox_status(base); 3284 udelay(1000); 3285 while (DAC960_PD_init_in_progress(base) && 3286 timeout < MYRB_MAILBOX_TIMEOUT) { 3287 if (DAC960_PD_read_error_status(base, &error, 3288 &parm0, &parm1) && 3289 myrb_err_status(cb, error, parm0, parm1)) 3290 return -EAGAIN; 3291 udelay(10); 3292 timeout++; 3293 } 3294 if (timeout == MYRB_MAILBOX_TIMEOUT) { 3295 dev_err(&pdev->dev, 3296 "Timeout waiting for Controller Initialisation\n"); 3297 return -ETIMEDOUT; 3298 } 3299 if (!myrb_enable_mmio(cb, NULL)) { 3300 dev_err(&pdev->dev, 3301 "Unable to allocate DMA mapped memory\n"); 3302 DAC960_PD_reset_ctrl(base); 3303 return -ETIMEDOUT; 3304 } 3305 DAC960_PD_enable_intr(base); 3306 cb->qcmd = DAC960_P_qcmd; 3307 cb->disable_intr = DAC960_PD_disable_intr; 3308 cb->reset = DAC960_PD_reset_ctrl; 3309 3310 return 0; 3311 } 3312 3313 static irqreturn_t DAC960_P_intr_handler(int irq, void *arg) 3314 { 3315 struct myrb_hba *cb = arg; 3316 void __iomem *base = cb->io_base; 3317 unsigned long flags; 3318 3319 spin_lock_irqsave(&cb->queue_lock, flags); 3320 while (DAC960_PD_hw_mbox_status_available(base)) { 3321 unsigned char id = DAC960_PD_read_status_cmd_ident(base); 3322 struct scsi_cmnd *scmd = NULL; 3323 struct myrb_cmdblk *cmd_blk = NULL; 3324 union myrb_cmd_mbox *mbox; 3325 enum myrb_cmd_opcode op; 3326 3327 3328 if (id == MYRB_DCMD_TAG) 3329 cmd_blk = &cb->dcmd_blk; 3330 else if (id == MYRB_MCMD_TAG) 3331 cmd_blk = &cb->mcmd_blk; 3332 else { 3333 scmd = scsi_host_find_tag(cb->host, id - 3); 3334 if (scmd) 3335 cmd_blk = scsi_cmd_priv(scmd); 3336 } 3337 if (cmd_blk) 3338 cmd_blk->status = DAC960_PD_read_status(base); 3339 else 3340 dev_err(&cb->pdev->dev, 3341 "Unhandled command completion %d\n", id); 3342 3343 DAC960_PD_ack_intr(base); 3344 DAC960_PD_ack_hw_mbox_status(base); 3345 3346 if (!cmd_blk) 3347 continue; 3348 3349 mbox = &cmd_blk->mbox; 3350 op = mbox->common.opcode; 3351 switch (op) { 3352 case MYRB_CMD_ENQUIRY_OLD: 3353 mbox->common.opcode = MYRB_CMD_ENQUIRY; 3354 myrb_translate_enquiry(cb->enquiry); 3355 break; 3356 case MYRB_CMD_READ_OLD: 3357 mbox->common.opcode = MYRB_CMD_READ; 3358 myrb_translate_from_rw_command(cmd_blk); 3359 break; 3360 case MYRB_CMD_WRITE_OLD: 3361 mbox->common.opcode = MYRB_CMD_WRITE; 3362 myrb_translate_from_rw_command(cmd_blk); 3363 break; 3364 case MYRB_CMD_READ_SG_OLD: 3365 mbox->common.opcode = MYRB_CMD_READ_SG; 3366 myrb_translate_from_rw_command(cmd_blk); 3367 break; 3368 case MYRB_CMD_WRITE_SG_OLD: 3369 mbox->common.opcode = MYRB_CMD_WRITE_SG; 3370 myrb_translate_from_rw_command(cmd_blk); 3371 break; 3372 default: 3373 break; 3374 } 3375 if (id < 3) 3376 myrb_handle_cmdblk(cb, cmd_blk); 3377 else 3378 myrb_handle_scsi(cb, cmd_blk, scmd); 3379 } 3380 spin_unlock_irqrestore(&cb->queue_lock, flags); 3381 return IRQ_HANDLED; 3382 } 3383 3384 static struct myrb_privdata DAC960_P_privdata = { 3385 .hw_init = DAC960_P_hw_init, 3386 .irq_handler = DAC960_P_intr_handler, 3387 .mmio_size = DAC960_PD_mmio_size, 3388 }; 3389 3390 static struct myrb_hba *myrb_detect(struct pci_dev *pdev, 3391 const struct pci_device_id *entry) 3392 { 3393 struct myrb_privdata *privdata = 3394 (struct myrb_privdata *)entry->driver_data; 3395 irq_handler_t irq_handler = privdata->irq_handler; 3396 unsigned int mmio_size = privdata->mmio_size; 3397 struct Scsi_Host *shost; 3398 struct myrb_hba *cb = NULL; 3399 3400 shost = scsi_host_alloc(&myrb_template, sizeof(struct myrb_hba)); 3401 if (!shost) { 3402 dev_err(&pdev->dev, "Unable to allocate Controller\n"); 3403 return NULL; 3404 } 3405 shost->max_cmd_len = 12; 3406 shost->max_lun = 256; 3407 cb = shost_priv(shost); 3408 mutex_init(&cb->dcmd_mutex); 3409 mutex_init(&cb->dma_mutex); 3410 cb->pdev = pdev; 3411 3412 if (pci_enable_device(pdev)) 3413 goto failure; 3414 3415 if (privdata->hw_init == DAC960_PD_hw_init || 3416 privdata->hw_init == DAC960_P_hw_init) { 3417 cb->io_addr = pci_resource_start(pdev, 0); 3418 cb->pci_addr = pci_resource_start(pdev, 1); 3419 } else 3420 cb->pci_addr = pci_resource_start(pdev, 0); 3421 3422 pci_set_drvdata(pdev, cb); 3423 spin_lock_init(&cb->queue_lock); 3424 if (mmio_size < PAGE_SIZE) 3425 mmio_size = PAGE_SIZE; 3426 cb->mmio_base = ioremap(cb->pci_addr & PAGE_MASK, mmio_size); 3427 if (cb->mmio_base == NULL) { 3428 dev_err(&pdev->dev, 3429 "Unable to map Controller Register Window\n"); 3430 goto failure; 3431 } 3432 3433 cb->io_base = cb->mmio_base + (cb->pci_addr & ~PAGE_MASK); 3434 if (privdata->hw_init(pdev, cb, cb->io_base)) 3435 goto failure; 3436 3437 if (request_irq(pdev->irq, irq_handler, IRQF_SHARED, "myrb", cb) < 0) { 3438 dev_err(&pdev->dev, 3439 "Unable to acquire IRQ Channel %d\n", pdev->irq); 3440 goto failure; 3441 } 3442 cb->irq = pdev->irq; 3443 return cb; 3444 3445 failure: 3446 dev_err(&pdev->dev, 3447 "Failed to initialize Controller\n"); 3448 myrb_cleanup(cb); 3449 return NULL; 3450 } 3451 3452 static int myrb_probe(struct pci_dev *dev, const struct pci_device_id *entry) 3453 { 3454 struct myrb_hba *cb; 3455 int ret; 3456 3457 cb = myrb_detect(dev, entry); 3458 if (!cb) 3459 return -ENODEV; 3460 3461 ret = myrb_get_hba_config(cb); 3462 if (ret < 0) { 3463 myrb_cleanup(cb); 3464 return ret; 3465 } 3466 3467 if (!myrb_create_mempools(dev, cb)) { 3468 ret = -ENOMEM; 3469 goto failed; 3470 } 3471 3472 ret = scsi_add_host(cb->host, &dev->dev); 3473 if (ret) { 3474 dev_err(&dev->dev, "scsi_add_host failed with %d\n", ret); 3475 myrb_destroy_mempools(cb); 3476 goto failed; 3477 } 3478 scsi_scan_host(cb->host); 3479 return 0; 3480 failed: 3481 myrb_cleanup(cb); 3482 return ret; 3483 } 3484 3485 3486 static void myrb_remove(struct pci_dev *pdev) 3487 { 3488 struct myrb_hba *cb = pci_get_drvdata(pdev); 3489 3490 shost_printk(KERN_NOTICE, cb->host, "Flushing Cache..."); 3491 myrb_exec_type3(cb, MYRB_CMD_FLUSH, 0); 3492 myrb_cleanup(cb); 3493 myrb_destroy_mempools(cb); 3494 } 3495 3496 3497 static const struct pci_device_id myrb_id_table[] = { 3498 { 3499 PCI_DEVICE_SUB(PCI_VENDOR_ID_DEC, 3500 PCI_DEVICE_ID_DEC_21285, 3501 PCI_VENDOR_ID_MYLEX, 3502 PCI_DEVICE_ID_MYLEX_DAC960_LA), 3503 .driver_data = (unsigned long) &DAC960_LA_privdata, 3504 }, 3505 { 3506 PCI_DEVICE_DATA(MYLEX, DAC960_PG, &DAC960_PG_privdata), 3507 }, 3508 { 3509 PCI_DEVICE_DATA(MYLEX, DAC960_PD, &DAC960_PD_privdata), 3510 }, 3511 { 3512 PCI_DEVICE_DATA(MYLEX, DAC960_P, &DAC960_P_privdata), 3513 }, 3514 {0, }, 3515 }; 3516 3517 MODULE_DEVICE_TABLE(pci, myrb_id_table); 3518 3519 static struct pci_driver myrb_pci_driver = { 3520 .name = "myrb", 3521 .id_table = myrb_id_table, 3522 .probe = myrb_probe, 3523 .remove = myrb_remove, 3524 }; 3525 3526 static int __init myrb_init_module(void) 3527 { 3528 int ret; 3529 3530 myrb_raid_template = raid_class_attach(&myrb_raid_functions); 3531 if (!myrb_raid_template) 3532 return -ENODEV; 3533 3534 ret = pci_register_driver(&myrb_pci_driver); 3535 if (ret) 3536 raid_class_release(myrb_raid_template); 3537 3538 return ret; 3539 } 3540 3541 static void __exit myrb_cleanup_module(void) 3542 { 3543 pci_unregister_driver(&myrb_pci_driver); 3544 raid_class_release(myrb_raid_template); 3545 } 3546 3547 module_init(myrb_init_module); 3548 module_exit(myrb_cleanup_module); 3549 3550 MODULE_DESCRIPTION("Mylex DAC960/AcceleRAID/eXtremeRAID driver (Block interface)"); 3551 MODULE_AUTHOR("Hannes Reinecke <hare@suse.com>"); 3552 MODULE_LICENSE("GPL"); 3553