Lines Matching refs:h
47 static int fill_cmd(ctlr_info_t *h, CommandList_struct *c, __u8 cmd, void *buff,
52 static CommandList_struct *cmd_alloc(ctlr_info_t *h);
53 static CommandList_struct *cmd_special_alloc(ctlr_info_t *h);
54 static void cmd_free(ctlr_info_t *h, CommandList_struct *c);
55 static void cmd_special_free(ctlr_info_t *h, CommandList_struct *c);
63 static int cciss_scsi_queue_command (struct Scsi_Host *h,
127 #define CPQ_TAPE_LOCK(h, flags) spin_lock_irqsave( \ argument
128 &h->scsi_ctlr->lock, flags);
129 #define CPQ_TAPE_UNLOCK(h, flags) spin_unlock_irqrestore( \ argument
130 &h->scsi_ctlr->lock, flags);
133 scsi_cmd_alloc(ctlr_info_t *h) in scsi_cmd_alloc() argument
146 sa = h->scsi_ctlr; in scsi_cmd_alloc()
170 c->cmd.ctlr = h->ctlr; in scsi_cmd_alloc()
177 scsi_cmd_free(ctlr_info_t *h, CommandList_struct *c) in scsi_cmd_free() argument
186 sa = h->scsi_ctlr; in scsi_cmd_free()
190 dev_err(&h->pdev->dev, in scsi_cmd_free()
198 scsi_cmd_stack_setup(ctlr_info_t *h, struct cciss_scsi_adapter_data_t *sa) in scsi_cmd_stack_setup() argument
206 sa->cmd_sg_list = cciss_allocate_sg_chain_blocks(h, in scsi_cmd_stack_setup()
207 h->chainsize, stk->nelems); in scsi_cmd_stack_setup()
208 if (!sa->cmd_sg_list && h->chainsize > 0) in scsi_cmd_stack_setup()
217 pci_alloc_consistent(h->pdev, size, &stk->cmd_pool_handle); in scsi_cmd_stack_setup()
226 pci_free_consistent(h->pdev, size, stk->pool, in scsi_cmd_stack_setup()
241 scsi_cmd_stack_free(ctlr_info_t *h) in scsi_cmd_stack_free() argument
247 sa = h->scsi_ctlr; in scsi_cmd_stack_free()
250 dev_warn(&h->pdev->dev, in scsi_cmd_stack_free()
256 pci_free_consistent(h->pdev, size, stk->pool, stk->cmd_pool_handle); in scsi_cmd_stack_free()
350 find_bus_target_lun(ctlr_info_t *h, int *bus, int *target, int *lun) in find_bus_target_lun() argument
360 for (i = 0; i < ccissscsi[h->ctlr].ndevices; i++) in find_bus_target_lun()
361 target_taken[ccissscsi[h->ctlr].dev[i].target] = 1; in find_bus_target_lun()
377 cciss_scsi_add_entry(ctlr_info_t *h, int hostno, in cciss_scsi_add_entry() argument
382 int n = ccissscsi[h->ctlr].ndevices; in cciss_scsi_add_entry()
388 dev_warn(&h->pdev->dev, "Too many devices, " in cciss_scsi_add_entry()
405 sd = &ccissscsi[h->ctlr].dev[i]; in cciss_scsi_add_entry()
418 sd = &ccissscsi[h->ctlr].dev[n]; in cciss_scsi_add_entry()
420 if (find_bus_target_lun(h, in cciss_scsi_add_entry()
439 ccissscsi[h->ctlr].ndevices++; in cciss_scsi_add_entry()
445 dev_info(&h->pdev->dev, "%s device c%db%dt%dl%d added.\n", in cciss_scsi_add_entry()
452 cciss_scsi_remove_entry(ctlr_info_t *h, int hostno, int entry, in cciss_scsi_remove_entry() argument
460 sd = ccissscsi[h->ctlr].dev[entry]; in cciss_scsi_remove_entry()
465 for (i = entry; i < ccissscsi[h->ctlr].ndevices-1; i++) in cciss_scsi_remove_entry()
466 ccissscsi[h->ctlr].dev[i] = ccissscsi[h->ctlr].dev[i+1]; in cciss_scsi_remove_entry()
467 ccissscsi[h->ctlr].ndevices--; in cciss_scsi_remove_entry()
468 dev_info(&h->pdev->dev, "%s device c%db%dt%dl%d removed.\n", in cciss_scsi_remove_entry()
484 static void fixup_botched_add(ctlr_info_t *h, char *scsi3addr) in fixup_botched_add() argument
490 CPQ_TAPE_LOCK(h, flags); in fixup_botched_add()
491 for (i = 0; i < ccissscsi[h->ctlr].ndevices; i++) { in fixup_botched_add()
493 ccissscsi[h->ctlr].dev[i].scsi3addr, 8) == 0) { in fixup_botched_add()
494 for (j = i; j < ccissscsi[h->ctlr].ndevices-1; j++) in fixup_botched_add()
495 ccissscsi[h->ctlr].dev[j] = in fixup_botched_add()
496 ccissscsi[h->ctlr].dev[j+1]; in fixup_botched_add()
497 ccissscsi[h->ctlr].ndevices--; in fixup_botched_add()
501 CPQ_TAPE_UNLOCK(h, flags); in fixup_botched_add()
521 adjust_cciss_scsi_table(ctlr_info_t *h, int hostno, in adjust_cciss_scsi_table() argument
542 dev_warn(&h->pdev->dev, in adjust_cciss_scsi_table()
547 CPQ_TAPE_LOCK(h, flags); in adjust_cciss_scsi_table()
550 sh = h->scsi_ctlr->scsi_host; in adjust_cciss_scsi_table()
558 while (i < ccissscsi[h->ctlr].ndevices) { in adjust_cciss_scsi_table()
559 csd = &ccissscsi[h->ctlr].dev[i]; in adjust_cciss_scsi_table()
574 cciss_scsi_remove_entry(h, hostno, i, in adjust_cciss_scsi_table()
579 dev_info(&h->pdev->dev, in adjust_cciss_scsi_table()
582 cciss_scsi_remove_entry(h, hostno, i, in adjust_cciss_scsi_table()
585 if (cciss_scsi_add_entry(h, hostno, &sd[j], in adjust_cciss_scsi_table()
607 for (j = 0; j < ccissscsi[h->ctlr].ndevices; j++) { in adjust_cciss_scsi_table()
608 csd = &ccissscsi[h->ctlr].dev[j]; in adjust_cciss_scsi_table()
620 if (cciss_scsi_add_entry(h, hostno, &sd[i], in adjust_cciss_scsi_table()
626 dev_warn(&h->pdev->dev, in adjust_cciss_scsi_table()
631 CPQ_TAPE_UNLOCK(h, flags); in adjust_cciss_scsi_table()
651 dev_warn(&h->pdev->dev, "didn't find " in adjust_cciss_scsi_table()
665 dev_warn(&h->pdev->dev, "scsi_add_device " in adjust_cciss_scsi_table()
670 fixup_botched_add(h, added[i].scsi3addr); in adjust_cciss_scsi_table()
680 lookup_scsi3addr(ctlr_info_t *h, int bus, int target, int lun, char *scsi3addr) in lookup_scsi3addr() argument
686 CPQ_TAPE_LOCK(h, flags); in lookup_scsi3addr()
687 for (i = 0; i < ccissscsi[h->ctlr].ndevices; i++) { in lookup_scsi3addr()
688 sd = &ccissscsi[h->ctlr].dev[i]; in lookup_scsi3addr()
693 CPQ_TAPE_UNLOCK(h, flags); in lookup_scsi3addr()
697 CPQ_TAPE_UNLOCK(h, flags); in lookup_scsi3addr()
702 cciss_scsi_setup(ctlr_info_t *h) in cciss_scsi_setup() argument
706 ccissscsi[h->ctlr].ndevices = 0; in cciss_scsi_setup()
714 if (scsi_cmd_stack_setup(h, shba) != 0) { in cciss_scsi_setup()
718 h->scsi_ctlr = shba; in cciss_scsi_setup()
726 ctlr_info_t *h; in complete_scsi_command() local
738 h = hba[c->ctlr]; in complete_scsi_command()
741 if (c->Header.SGTotal > h->max_cmd_sgentries) in complete_scsi_command()
742 cciss_unmap_sg_chain_block(h, c); in complete_scsi_command()
781 dev_warn(&h->pdev->dev, "%p has" in complete_scsi_command()
798 dev_warn(&h->pdev->dev, in complete_scsi_command()
803 dev_warn(&h->pdev->dev, in complete_scsi_command()
808 dev_warn(&h->pdev->dev, in complete_scsi_command()
813 dev_warn(&h->pdev->dev, "%p was aborted\n", c); in complete_scsi_command()
817 dev_warn(&h->pdev->dev, in complete_scsi_command()
822 dev_warn(&h->pdev->dev, "%p aborted due to an " in complete_scsi_command()
827 dev_warn(&h->pdev->dev, "%p timedout\n", c); in complete_scsi_command()
831 dev_warn(&h->pdev->dev, "c %p command " in complete_scsi_command()
836 dev_warn(&h->pdev->dev, in complete_scsi_command()
842 scsi_cmd_free(h, c); in complete_scsi_command()
846 cciss_scsi_detect(ctlr_info_t *h) in cciss_scsi_detect() argument
858 sh->sg_tablesize = h->maxsgentries; in cciss_scsi_detect()
860 sh->max_sectors = h->cciss_max_sectors; in cciss_scsi_detect()
863 h->scsi_ctlr)->scsi_host = sh; in cciss_scsi_detect()
864 sh->hostdata[0] = (unsigned long) h; in cciss_scsi_detect()
865 sh->irq = h->intr[SIMPLE_MODE_INT]; in cciss_scsi_detect()
867 error = scsi_add_host(sh, &h->pdev->dev); in cciss_scsi_detect()
912 cciss_scsi_do_simple_cmd(ctlr_info_t *h, in cciss_scsi_do_simple_cmd() argument
942 cciss_map_one(h->pdev, c, (unsigned char *) buf, in cciss_scsi_do_simple_cmd()
946 enqueue_cmd_and_start_io(h, c); in cciss_scsi_do_simple_cmd()
950 cciss_unmap_one(h->pdev, c, bufsize, DMA_FROM_DEVICE); in cciss_scsi_do_simple_cmd()
955 cciss_scsi_interpret_error(ctlr_info_t *h, CommandList_struct *c) in cciss_scsi_interpret_error() argument
963 dev_warn(&h->pdev->dev, in cciss_scsi_interpret_error()
965 dev_warn(&h->pdev->dev, in cciss_scsi_interpret_error()
969 dev_warn(&h->pdev->dev, in cciss_scsi_interpret_error()
976 dev_info(&h->pdev->dev, "UNDERRUN\n"); in cciss_scsi_interpret_error()
979 dev_warn(&h->pdev->dev, "%p has" in cciss_scsi_interpret_error()
986 dev_warn(&h->pdev->dev, in cciss_scsi_interpret_error()
994 dev_warn(&h->pdev->dev, "%p has protocol error\n", c); in cciss_scsi_interpret_error()
998 dev_warn(&h->pdev->dev, "%p had hardware error\n", c); in cciss_scsi_interpret_error()
1001 dev_warn(&h->pdev->dev, "%p had connection lost\n", c); in cciss_scsi_interpret_error()
1004 dev_warn(&h->pdev->dev, "%p was aborted\n", c); in cciss_scsi_interpret_error()
1007 dev_warn(&h->pdev->dev, in cciss_scsi_interpret_error()
1011 dev_warn(&h->pdev->dev, in cciss_scsi_interpret_error()
1015 dev_warn(&h->pdev->dev, "%p timedout\n", c); in cciss_scsi_interpret_error()
1018 dev_warn(&h->pdev->dev, in cciss_scsi_interpret_error()
1022 dev_warn(&h->pdev->dev, in cciss_scsi_interpret_error()
1029 cciss_scsi_do_inquiry(ctlr_info_t *h, unsigned char *scsi3addr, in cciss_scsi_do_inquiry() argument
1039 spin_lock_irqsave(&h->lock, flags); in cciss_scsi_do_inquiry()
1040 c = scsi_cmd_alloc(h); in cciss_scsi_do_inquiry()
1041 spin_unlock_irqrestore(&h->lock, flags); in cciss_scsi_do_inquiry()
1056 rc = cciss_scsi_do_simple_cmd(h, c, scsi3addr, cdb, in cciss_scsi_do_inquiry()
1063 cciss_scsi_interpret_error(h, c); in cciss_scsi_do_inquiry()
1066 spin_lock_irqsave(&h->lock, flags); in cciss_scsi_do_inquiry()
1067 scsi_cmd_free(h, c); in cciss_scsi_do_inquiry()
1068 spin_unlock_irqrestore(&h->lock, flags); in cciss_scsi_do_inquiry()
1073 static int cciss_scsi_get_device_id(ctlr_info_t *h, unsigned char *scsi3addr, in cciss_scsi_get_device_id() argument
1084 rc = cciss_scsi_do_inquiry(h, scsi3addr, 0x83, buf, 64); in cciss_scsi_get_device_id()
1092 cciss_scsi_do_report_phys_luns(ctlr_info_t *h, in cciss_scsi_do_report_phys_luns() argument
1102 spin_lock_irqsave(&h->lock, flags); in cciss_scsi_do_report_phys_luns()
1103 c = scsi_cmd_alloc(h); in cciss_scsi_do_report_phys_luns()
1104 spin_unlock_irqrestore(&h->lock, flags); in cciss_scsi_do_report_phys_luns()
1124 rc = cciss_scsi_do_simple_cmd(h, c, scsi3addr, in cciss_scsi_do_report_phys_luns()
1134 cciss_scsi_interpret_error(h, c); in cciss_scsi_do_report_phys_luns()
1137 spin_lock_irqsave(&h->lock, flags); in cciss_scsi_do_report_phys_luns()
1138 scsi_cmd_free(h, c); in cciss_scsi_do_report_phys_luns()
1139 spin_unlock_irqrestore(&h->lock, flags); in cciss_scsi_do_report_phys_luns()
1144 cciss_update_non_disk_devices(ctlr_info_t *h, int hostno) in cciss_update_non_disk_devices() argument
1193 if (cciss_scsi_do_report_phys_luns(h, ld_buff, reportlunsize) == 0) { in cciss_update_non_disk_devices()
1217 if (cciss_scsi_do_inquiry(h, scsi3addr, 0, inq_buff, in cciss_update_non_disk_devices()
1235 cciss_scsi_get_device_id(h, scsi3addr, in cciss_update_non_disk_devices()
1262 "too many devices.\n", h->ctlr, in cciss_update_non_disk_devices()
1274 adjust_cciss_scsi_table(h, hostno, currentsd, ncurrent); in cciss_update_non_disk_devices()
1293 cciss_scsi_user_command(ctlr_info_t *h, int hostno, char *buffer, int length) in cciss_scsi_user_command() argument
1298 cciss_update_non_disk_devices(h, hostno); in cciss_scsi_user_command()
1309 ctlr_info_t *h = (ctlr_info_t *) sh->hostdata[0]; in cciss_scsi_write_info() local
1310 if (h == NULL) /* This really shouldn't ever happen. */ in cciss_scsi_write_info()
1313 return cciss_scsi_user_command(h, sh->host_no, in cciss_scsi_write_info()
1321 ctlr_info_t *h = (ctlr_info_t *) sh->hostdata[0]; in cciss_scsi_show_info() local
1324 if (h == NULL) /* This really shouldn't ever happen. */ in cciss_scsi_show_info()
1328 h->ctlr, sh->host_no); in cciss_scsi_show_info()
1338 for (i = 0; i < ccissscsi[h->ctlr].ndevices; i++) { in cciss_scsi_show_info()
1340 &ccissscsi[h->ctlr].dev[i]; in cciss_scsi_show_info()
1357 static void cciss_scatter_gather(ctlr_info_t *h, CommandList_struct *c, in cciss_scatter_gather() argument
1364 struct cciss_scsi_adapter_data_t *sa = h->scsi_ctlr; in cciss_scatter_gather()
1367 BUG_ON(scsi_sg_count(cmd) > h->maxsgentries); in cciss_scatter_gather()
1375 if (sg_index + 1 == h->max_cmd_sgentries && in cciss_scatter_gather()
1392 cciss_map_sg_chain_block(h, c, in cciss_scatter_gather()
1394 (request_nsgs - (h->max_cmd_sgentries - 1)) * in cciss_scatter_gather()
1398 if (request_nsgs > h->maxSG) in cciss_scatter_gather()
1399 h->maxSG = request_nsgs; in cciss_scatter_gather()
1401 if (request_nsgs > h->max_cmd_sgentries) in cciss_scatter_gather()
1402 c->Header.SGList = h->max_cmd_sgentries; in cciss_scatter_gather()
1412 ctlr_info_t *h; in cciss_scsi_queue_command_lck() local
1420 h = (ctlr_info_t *) cmd->device->host->hostdata[0]; in cciss_scsi_queue_command_lck()
1422 rc = lookup_scsi3addr(h, cmd->device->channel, cmd->device->id, in cciss_scsi_queue_command_lck()
1437 spin_lock_irqsave(&h->lock, flags); in cciss_scsi_queue_command_lck()
1438 c = scsi_cmd_alloc(h); in cciss_scsi_queue_command_lck()
1439 spin_unlock_irqrestore(&h->lock, flags); in cciss_scsi_queue_command_lck()
1441 dev_warn(&h->pdev->dev, "scsi_cmd_alloc returned NULL!\n"); in cciss_scsi_queue_command_lck()
1497 dev_warn(&h->pdev->dev, "unknown data direction: %d\n", in cciss_scsi_queue_command_lck()
1502 cciss_scatter_gather(h, c, cmd); in cciss_scsi_queue_command_lck()
1503 enqueue_cmd_and_start_io(h, c); in cciss_scsi_queue_command_lck()
1510 static void cciss_unregister_scsi(ctlr_info_t *h) in DEF_SCSI_QCMD()
1518 spin_lock_irqsave(&h->lock, flags); in DEF_SCSI_QCMD()
1519 sa = h->scsi_ctlr; in DEF_SCSI_QCMD()
1524 spin_unlock_irqrestore(&h->lock, flags); in DEF_SCSI_QCMD()
1527 spin_lock_irqsave(&h->lock, flags); in DEF_SCSI_QCMD()
1533 spin_unlock_irqrestore(&h->lock, flags); in DEF_SCSI_QCMD()
1534 scsi_cmd_stack_free(h); in DEF_SCSI_QCMD()
1538 static int cciss_engage_scsi(ctlr_info_t *h) in cciss_engage_scsi() argument
1544 spin_lock_irqsave(&h->lock, flags); in cciss_engage_scsi()
1545 sa = h->scsi_ctlr; in cciss_engage_scsi()
1549 dev_info(&h->pdev->dev, "SCSI subsystem already engaged.\n"); in cciss_engage_scsi()
1550 spin_unlock_irqrestore(&h->lock, flags); in cciss_engage_scsi()
1554 spin_unlock_irqrestore(&h->lock, flags); in cciss_engage_scsi()
1555 cciss_update_non_disk_devices(h, -1); in cciss_engage_scsi()
1556 cciss_scsi_detect(h); in cciss_engage_scsi()
1561 cciss_seq_tape_report(struct seq_file *seq, ctlr_info_t *h) in cciss_seq_tape_report() argument
1565 CPQ_TAPE_LOCK(h, flags); in cciss_seq_tape_report()
1568 ccissscsi[h->ctlr].ndevices); in cciss_seq_tape_report()
1569 CPQ_TAPE_UNLOCK(h, flags); in cciss_seq_tape_report()
1572 static int wait_for_device_to_become_ready(ctlr_info_t *h, in wait_for_device_to_become_ready() argument
1580 c = cmd_alloc(h); in wait_for_device_to_become_ready()
1582 dev_warn(&h->pdev->dev, "out of memory in " in wait_for_device_to_become_ready()
1601 rc = fill_cmd(h, c, TEST_UNIT_READY, NULL, 0, 0, in wait_for_device_to_become_ready()
1604 rc = sendcmd_withirq_core(h, c, 0); in wait_for_device_to_become_ready()
1606 (void) process_sendcmd_error(h, c); in wait_for_device_to_become_ready()
1621 check_for_unit_attention(h, c); in wait_for_device_to_become_ready()
1627 dev_warn(&h->pdev->dev, "Waiting %d secs " in wait_for_device_to_become_ready()
1634 dev_warn(&h->pdev->dev, "giving up on device.\n"); in wait_for_device_to_become_ready()
1636 dev_warn(&h->pdev->dev, "device is ready.\n"); in wait_for_device_to_become_ready()
1638 cmd_free(h, c); in wait_for_device_to_become_ready()
1658 ctlr_info_t *h; in cciss_eh_device_reset_handler() local
1661 h = (ctlr_info_t *) scsicmd->device->host->hostdata[0]; in cciss_eh_device_reset_handler()
1662 if (h == NULL) /* paranoia */ in cciss_eh_device_reset_handler()
1664 dev_warn(&h->pdev->dev, "resetting tape drive or medium changer.\n"); in cciss_eh_device_reset_handler()
1671 rc = sendcmd_withirq(h, CCISS_RESET_MSG, NULL, 0, 0, lunaddr, in cciss_eh_device_reset_handler()
1673 if (rc == 0 && wait_for_device_to_become_ready(h, lunaddr) == 0) in cciss_eh_device_reset_handler()
1675 dev_warn(&h->pdev->dev, "resetting device failed.\n"); in cciss_eh_device_reset_handler()
1684 ctlr_info_t *h; in cciss_eh_abort_handler() local
1687 h = (ctlr_info_t *) scsicmd->device->host->hostdata[0]; in cciss_eh_abort_handler()
1688 if (h == NULL) /* paranoia */ in cciss_eh_abort_handler()
1690 dev_warn(&h->pdev->dev, "aborting tardy SCSI cmd\n"); in cciss_eh_abort_handler()
1697 rc = sendcmd_withirq(h, CCISS_ABORT_MSG, &cmd_to_abort->Header.Tag, in cciss_eh_abort_handler()
1710 #define cciss_engage_scsi(h) argument