Lines Matching full:ent
189 "ent[%d] %s val[%02x] sreg[%02x] seqreg[%02x] " in esp_dump_cmd_log()
388 static dma_addr_t esp_cur_dma_addr(struct esp_cmd_entry *ent, in esp_cur_dma_addr() argument
393 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in esp_cur_dma_addr()
394 return ent->sense_dma + in esp_cur_dma_addr()
395 (ent->sense_ptr - cmd->sense_buffer); in esp_cur_dma_addr()
403 static unsigned int esp_cur_dma_len(struct esp_cmd_entry *ent, in esp_cur_dma_len() argument
408 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in esp_cur_dma_len()
410 (ent->sense_ptr - cmd->sense_buffer); in esp_cur_dma_len()
415 static void esp_advance_dma(struct esp *esp, struct esp_cmd_entry *ent, in esp_advance_dma() argument
420 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in esp_advance_dma()
421 ent->sense_ptr += len; in esp_advance_dma()
453 static void esp_save_pointers(struct esp *esp, struct esp_cmd_entry *ent) in esp_save_pointers() argument
455 struct scsi_cmnd *cmd = ent->cmd; in esp_save_pointers()
458 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in esp_save_pointers()
459 ent->saved_sense_ptr = ent->sense_ptr; in esp_save_pointers()
462 ent->saved_cur_residue = spriv->cur_residue; in esp_save_pointers()
463 ent->saved_cur_sg = spriv->cur_sg; in esp_save_pointers()
464 ent->saved_tot_residue = spriv->tot_residue; in esp_save_pointers()
467 static void esp_restore_pointers(struct esp *esp, struct esp_cmd_entry *ent) in esp_restore_pointers() argument
469 struct scsi_cmnd *cmd = ent->cmd; in esp_restore_pointers()
472 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in esp_restore_pointers()
473 ent->sense_ptr = ent->saved_sense_ptr; in esp_restore_pointers()
476 spriv->cur_residue = ent->saved_cur_residue; in esp_restore_pointers()
477 spriv->cur_sg = ent->saved_cur_sg; in esp_restore_pointers()
478 spriv->tot_residue = ent->saved_tot_residue; in esp_restore_pointers()
571 static int esp_alloc_lun_tag(struct esp_cmd_entry *ent, in esp_alloc_lun_tag() argument
574 if (!ent->orig_tag[0]) { in esp_alloc_lun_tag()
598 lp->non_tagged_cmd = ent; in esp_alloc_lun_tag()
606 BUG_ON(lp->tagged_cmds[ent->orig_tag[1]]); in esp_alloc_lun_tag()
608 lp->tagged_cmds[ent->orig_tag[1]] = ent; in esp_alloc_lun_tag()
614 static void esp_free_lun_tag(struct esp_cmd_entry *ent, in esp_free_lun_tag() argument
617 if (ent->orig_tag[0]) { in esp_free_lun_tag()
618 BUG_ON(lp->tagged_cmds[ent->orig_tag[1]] != ent); in esp_free_lun_tag()
619 lp->tagged_cmds[ent->orig_tag[1]] = NULL; in esp_free_lun_tag()
622 BUG_ON(lp->non_tagged_cmd != ent); in esp_free_lun_tag()
634 static void esp_autosense(struct esp *esp, struct esp_cmd_entry *ent) in esp_autosense() argument
636 struct scsi_cmnd *cmd = ent->cmd; in esp_autosense()
645 if (!ent->sense_ptr) { in esp_autosense()
649 ent->sense_ptr = cmd->sense_buffer; in esp_autosense()
650 ent->sense_dma = esp->ops->map_single(esp, in esp_autosense()
651 ent->sense_ptr, in esp_autosense()
655 ent->saved_sense_ptr = ent->sense_ptr; in esp_autosense()
657 esp->active_cmd = ent; in esp_autosense()
688 struct esp_cmd_entry *ent; in find_and_prep_issuable_command() local
690 list_for_each_entry(ent, &esp->queued_cmds, list) { in find_and_prep_issuable_command()
691 struct scsi_cmnd *cmd = ent->cmd; in find_and_prep_issuable_command()
695 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in find_and_prep_issuable_command()
696 ent->tag[0] = 0; in find_and_prep_issuable_command()
697 ent->tag[1] = 0; in find_and_prep_issuable_command()
698 return ent; in find_and_prep_issuable_command()
701 if (!spi_populate_tag_msg(&ent->tag[0], cmd)) { in find_and_prep_issuable_command()
702 ent->tag[0] = 0; in find_and_prep_issuable_command()
703 ent->tag[1] = 0; in find_and_prep_issuable_command()
705 ent->orig_tag[0] = ent->tag[0]; in find_and_prep_issuable_command()
706 ent->orig_tag[1] = ent->tag[1]; in find_and_prep_issuable_command()
708 if (esp_alloc_lun_tag(ent, lp) < 0) in find_and_prep_issuable_command()
711 return ent; in find_and_prep_issuable_command()
723 struct esp_cmd_entry *ent; in esp_maybe_execute_command() local
732 ent = find_and_prep_issuable_command(esp); in esp_maybe_execute_command()
733 if (!ent) in esp_maybe_execute_command()
736 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in esp_maybe_execute_command()
737 esp_autosense(esp, ent); in esp_maybe_execute_command()
741 cmd = ent->cmd; in esp_maybe_execute_command()
748 list_move(&ent->list, &esp->active_cmds); in esp_maybe_execute_command()
750 esp->active_cmd = ent; in esp_maybe_execute_command()
753 esp_save_pointers(esp, ent); in esp_maybe_execute_command()
806 if (lp && (tp->flags & ESP_TGT_DISCONNECT) && ent->tag[0]) in esp_maybe_execute_command()
811 if (ent->tag[0] && esp->rev == ESP100) { in esp_maybe_execute_command()
820 if (ent->tag[0]) { in esp_maybe_execute_command()
821 *p++ = ent->tag[0]; in esp_maybe_execute_command()
822 *p++ = ent->tag[1]; in esp_maybe_execute_command()
835 if (ent->tag[0]) { in esp_maybe_execute_command()
839 esp->msg_out[0] = ent->tag[0]; in esp_maybe_execute_command()
840 esp->msg_out[1] = ent->tag[1]; in esp_maybe_execute_command()
882 static void esp_put_ent(struct esp *esp, struct esp_cmd_entry *ent) in esp_put_ent() argument
884 list_add(&ent->list, &esp->esp_cmd_pool); in esp_put_ent()
887 static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent, in esp_cmd_is_done() argument
896 esp_free_lun_tag(ent, dev->hostdata); in esp_cmd_is_done()
899 if (ent->eh_done) { in esp_cmd_is_done()
900 complete(ent->eh_done); in esp_cmd_is_done()
901 ent->eh_done = NULL; in esp_cmd_is_done()
904 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in esp_cmd_is_done()
905 esp->ops->unmap_single(esp, ent->sense_dma, in esp_cmd_is_done()
907 ent->sense_ptr = NULL; in esp_cmd_is_done()
918 ent->flags &= ~ESP_CMD_FLAG_AUTOSENSE; in esp_cmd_is_done()
932 list_del(&ent->list); in esp_cmd_is_done()
933 esp_put_ent(esp, ent); in esp_cmd_is_done()
944 static void esp_event_queue_full(struct esp *esp, struct esp_cmd_entry *ent) in esp_event_queue_full() argument
946 struct scsi_device *dev = ent->cmd->device; in esp_event_queue_full()
957 struct esp_cmd_entry *ent; in esp_queuecommand_lck() local
959 ent = esp_get_ent(esp); in esp_queuecommand_lck()
960 if (!ent) in esp_queuecommand_lck()
963 ent->cmd = cmd; in esp_queuecommand_lck()
970 list_add_tail(&ent->list, &esp->queued_cmds); in esp_queuecommand_lck()
1048 struct esp_cmd_entry *ent; in esp_reconnect_with_tag() local
1125 ent = lp->tagged_cmds[esp->command_block[1]]; in esp_reconnect_with_tag()
1126 if (!ent) { in esp_reconnect_with_tag()
1133 return ent; in esp_reconnect_with_tag()
1138 struct esp_cmd_entry *ent; in esp_reconnect() local
1202 ent = lp->non_tagged_cmd; in esp_reconnect()
1203 if (!ent) { in esp_reconnect()
1204 ent = esp_reconnect_with_tag(esp, lp); in esp_reconnect()
1205 if (!ent) in esp_reconnect()
1209 esp->active_cmd = ent; in esp_reconnect()
1212 esp_restore_pointers(esp, ent); in esp_reconnect()
1223 struct esp_cmd_entry *ent; in esp_finish_select() local
1230 ent = esp->active_cmd; in esp_finish_select()
1231 cmd = ent->cmd; in esp_finish_select()
1238 esp_cmd_is_done(esp, ent, cmd, (DID_ERROR << 16)); in esp_finish_select()
1251 if (!(ent->flags & ESP_CMD_FLAG_AUTOSENSE)) { in esp_finish_select()
1253 esp_free_lun_tag(ent, cmd->device->hostdata); in esp_finish_select()
1259 esp->ops->unmap_single(esp, ent->sense_dma, in esp_finish_select()
1262 ent->sense_ptr = NULL; in esp_finish_select()
1268 list_move(&ent->list, &esp->queued_cmds); in esp_finish_select()
1287 esp_cmd_is_done(esp, ent, cmd, (DID_BAD_TARGET << 16)); in esp_finish_select()
1320 static int esp_data_bytes_sent(struct esp *esp, struct esp_cmd_entry *ent, in esp_data_bytes_sent() argument
1351 if (fifo_cnt == 1 && ent->flags & ESP_CMD_FLAG_RESIDUAL) { in esp_data_bytes_sent()
1356 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) in esp_data_bytes_sent()
1357 ent->sense_ptr[bytes_sent] = bval; in esp_data_bytes_sent()
1370 ent->flags &= ~ESP_CMD_FLAG_RESIDUAL; in esp_data_bytes_sent()
1372 if (!(ent->flags & ESP_CMD_FLAG_WRITE)) in esp_data_bytes_sent()
1404 if (!(ent->flags & ESP_CMD_FLAG_WRITE)) in esp_data_bytes_sent()
1455 struct esp_cmd_entry *ent = esp->active_cmd; in esp_msgin_reject() local
1456 struct scsi_cmnd *cmd = ent->cmd; in esp_msgin_reject()
1595 struct esp_cmd_entry *ent = esp->active_cmd; in esp_msgin_extended() local
1596 struct scsi_cmnd *cmd = ent->cmd; in esp_msgin_extended()
1643 struct esp_cmd_entry *ent; in esp_msgin_process() local
1651 ent = esp->active_cmd; in esp_msgin_process()
1652 spriv = ESP_CMD_PRIV(ent->cmd); in esp_msgin_process()
1673 struct esp_cmd_entry *ent = esp->active_cmd; in esp_msgin_process() local
1675 ent->message = msg0; in esp_msgin_process()
1743 struct esp_cmd_entry *ent = esp->active_cmd; in esp_process_event() local
1744 struct scsi_cmnd *cmd = ent->cmd; in esp_process_event()
1745 dma_addr_t dma_addr = esp_cur_dma_addr(ent, cmd); in esp_process_event()
1746 unsigned int dma_len = esp_cur_dma_len(ent, cmd); in esp_process_event()
1752 ent->flags |= ESP_CMD_FLAG_WRITE; in esp_process_event()
1754 ent->flags &= ~ESP_CMD_FLAG_WRITE; in esp_process_event()
1769 (unsigned long long)esp_cur_dma_addr(ent, cmd), in esp_process_event()
1770 esp_cur_dma_len(ent, cmd)); in esp_process_event()
1784 struct esp_cmd_entry *ent = esp->active_cmd; in esp_process_event() local
1785 struct scsi_cmnd *cmd = ent->cmd; in esp_process_event()
1795 if (ent->flags & ESP_CMD_FLAG_WRITE) { in esp_process_event()
1812 bytes_sent = esp_data_bytes_sent(esp, ent, cmd); in esp_process_event()
1815 ent->flags, bytes_sent); in esp_process_event()
1823 esp_advance_dma(esp, ent, cmd, bytes_sent); in esp_process_event()
1829 struct esp_cmd_entry *ent = esp->active_cmd; in esp_process_event() local
1832 ent->status = esp_read8(ESP_FDATA); in esp_process_event()
1833 ent->message = esp_read8(ESP_FDATA); in esp_process_event()
1836 ent->status = esp_read8(ESP_FDATA); in esp_process_event()
1837 ent->message = 0xff; in esp_process_event()
1842 if (ent->message != COMMAND_COMPLETE) { in esp_process_event()
1845 ent->message); in esp_process_event()
1855 struct esp_cmd_entry *ent = esp->active_cmd; in esp_process_event() local
1856 struct scsi_cmnd *cmd = ent->cmd; in esp_process_event()
1858 if (ent->message == COMMAND_COMPLETE || in esp_process_event()
1859 ent->message == DISCONNECT) in esp_process_event()
1862 if (ent->message == COMMAND_COMPLETE) { in esp_process_event()
1864 ent->status, ent->message); in esp_process_event()
1865 if (ent->status == SAM_STAT_TASK_SET_FULL) in esp_process_event()
1866 esp_event_queue_full(esp, ent); in esp_process_event()
1868 if (ent->status == SAM_STAT_CHECK_CONDITION && in esp_process_event()
1869 !(ent->flags & ESP_CMD_FLAG_AUTOSENSE)) { in esp_process_event()
1870 ent->flags |= ESP_CMD_FLAG_AUTOSENSE; in esp_process_event()
1871 esp_autosense(esp, ent); in esp_process_event()
1873 esp_cmd_is_done(esp, ent, cmd, in esp_process_event()
1874 compose_result(ent->status, in esp_process_event()
1875 ent->message, in esp_process_event()
1878 } else if (ent->message == DISCONNECT) { in esp_process_event()
1881 ent->tag[0], ent->tag[1]); in esp_process_event()
1888 ent->message); in esp_process_event()
2035 static void esp_reset_cleanup_one(struct esp *esp, struct esp_cmd_entry *ent) in esp_reset_cleanup_one() argument
2037 struct scsi_cmnd *cmd = ent->cmd; in esp_reset_cleanup_one()
2040 esp_free_lun_tag(ent, cmd->device->hostdata); in esp_reset_cleanup_one()
2043 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) { in esp_reset_cleanup_one()
2044 esp->ops->unmap_single(esp, ent->sense_dma, in esp_reset_cleanup_one()
2046 ent->sense_ptr = NULL; in esp_reset_cleanup_one()
2050 list_del(&ent->list); in esp_reset_cleanup_one()
2051 esp_put_ent(esp, ent); in esp_reset_cleanup_one()
2064 struct esp_cmd_entry *ent, *tmp; in esp_reset_cleanup() local
2067 list_for_each_entry_safe(ent, tmp, &esp->queued_cmds, list) { in esp_reset_cleanup()
2068 struct scsi_cmnd *cmd = ent->cmd; in esp_reset_cleanup()
2070 list_del(&ent->list); in esp_reset_cleanup()
2073 esp_put_ent(esp, ent); in esp_reset_cleanup()
2076 list_for_each_entry_safe(ent, tmp, &esp->active_cmds, list) { in esp_reset_cleanup()
2077 if (ent == esp->active_cmd) in esp_reset_cleanup()
2079 esp_reset_cleanup_one(esp, ent); in esp_reset_cleanup()
2502 struct esp_cmd_entry *ent, *tmp; in esp_eh_abort_handler() local
2512 ent = esp->active_cmd; in esp_eh_abort_handler()
2513 if (ent) in esp_eh_abort_handler()
2516 ent->cmd, ent->cmd->cmnd[0]); in esp_eh_abort_handler()
2517 list_for_each_entry(ent, &esp->queued_cmds, list) { in esp_eh_abort_handler()
2519 ent->cmd, ent->cmd->cmnd[0]); in esp_eh_abort_handler()
2521 list_for_each_entry(ent, &esp->active_cmds, list) { in esp_eh_abort_handler()
2523 ent->cmd, ent->cmd->cmnd[0]); in esp_eh_abort_handler()
2530 ent = NULL; in esp_eh_abort_handler()
2533 ent = tmp; in esp_eh_abort_handler()
2538 if (ent) { in esp_eh_abort_handler()
2542 list_del(&ent->list); in esp_eh_abort_handler()
2547 esp_put_ent(esp, ent); in esp_eh_abort_handler()
2554 ent = esp->active_cmd; in esp_eh_abort_handler()
2555 if (ent && ent->cmd == cmd) { in esp_eh_abort_handler()
2568 ent->eh_done = &eh_done; in esp_eh_abort_handler()
2595 ent->eh_done = NULL; in esp_eh_abort_handler()