Lines Matching refs:ent

190 			     "ent[%d] %s val[%02x] sreg[%02x] seqreg[%02x] "
404 static dma_addr_t esp_cur_dma_addr(struct esp_cmd_entry *ent,
409 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
410 return ent->sense_dma +
411 (ent->sense_ptr - cmd->sense_buffer);
419 static unsigned int esp_cur_dma_len(struct esp_cmd_entry *ent,
424 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
426 (ent->sense_ptr - cmd->sense_buffer);
431 static void esp_advance_dma(struct esp *esp, struct esp_cmd_entry *ent,
436 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
437 ent->sense_ptr += len;
465 static void esp_save_pointers(struct esp *esp, struct esp_cmd_entry *ent)
467 struct scsi_cmnd *cmd = ent->cmd;
470 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
471 ent->saved_sense_ptr = ent->sense_ptr;
474 ent->saved_cur_residue = spriv->cur_residue;
475 ent->saved_prv_sg = spriv->prv_sg;
476 ent->saved_cur_sg = spriv->cur_sg;
477 ent->saved_tot_residue = spriv->tot_residue;
480 static void esp_restore_pointers(struct esp *esp, struct esp_cmd_entry *ent)
482 struct scsi_cmnd *cmd = ent->cmd;
485 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
486 ent->sense_ptr = ent->saved_sense_ptr;
489 spriv->cur_residue = ent->saved_cur_residue;
490 spriv->prv_sg = ent->saved_prv_sg;
491 spriv->cur_sg = ent->saved_cur_sg;
492 spriv->tot_residue = ent->saved_tot_residue;
574 static int esp_alloc_lun_tag(struct esp_cmd_entry *ent,
577 if (!ent->orig_tag[0]) {
601 lp->non_tagged_cmd = ent;
609 BUG_ON(lp->tagged_cmds[ent->orig_tag[1]]);
611 lp->tagged_cmds[ent->orig_tag[1]] = ent;
617 static void esp_free_lun_tag(struct esp_cmd_entry *ent,
620 if (ent->orig_tag[0]) {
621 BUG_ON(lp->tagged_cmds[ent->orig_tag[1]] != ent);
622 lp->tagged_cmds[ent->orig_tag[1]] = NULL;
625 BUG_ON(lp->non_tagged_cmd != ent);
630 static void esp_map_sense(struct esp *esp, struct esp_cmd_entry *ent)
632 ent->sense_ptr = ent->cmd->sense_buffer;
634 ent->sense_dma = (uintptr_t)ent->sense_ptr;
638 ent->sense_dma = dma_map_single(esp->dev, ent->sense_ptr,
642 static void esp_unmap_sense(struct esp *esp, struct esp_cmd_entry *ent)
645 dma_unmap_single(esp->dev, ent->sense_dma,
647 ent->sense_ptr = NULL;
657 static void esp_autosense(struct esp *esp, struct esp_cmd_entry *ent)
659 struct scsi_cmnd *cmd = ent->cmd;
668 if (!ent->sense_ptr) {
671 esp_map_sense(esp, ent);
673 ent->saved_sense_ptr = ent->sense_ptr;
675 esp->active_cmd = ent;
706 struct esp_cmd_entry *ent;
708 list_for_each_entry(ent, &esp->queued_cmds, list) {
709 struct scsi_cmnd *cmd = ent->cmd;
713 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
714 ent->tag[0] = 0;
715 ent->tag[1] = 0;
716 return ent;
719 if (!spi_populate_tag_msg(&ent->tag[0], cmd)) {
720 ent->tag[0] = 0;
721 ent->tag[1] = 0;
723 ent->orig_tag[0] = ent->tag[0];
724 ent->orig_tag[1] = ent->tag[1];
726 if (esp_alloc_lun_tag(ent, lp) < 0)
729 return ent;
740 struct esp_cmd_entry *ent;
750 ent = find_and_prep_issuable_command(esp);
751 if (!ent)
754 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
755 esp_autosense(esp, ent);
759 cmd = ent->cmd;
765 list_move(&ent->list, &esp->active_cmds);
767 esp->active_cmd = ent;
770 esp_save_pointers(esp, ent);
822 if (ent->tag[0] && esp->rev == ESP100) {
833 if (ent->tag[0]) {
837 esp->msg_out[0] = ent->tag[0];
838 esp->msg_out[1] = ent->tag[1];
846 if (ent->tag[0]) {
847 *p++ = ent->tag[0];
848 *p++ = ent->tag[1];
893 static void esp_put_ent(struct esp *esp, struct esp_cmd_entry *ent)
895 list_add(&ent->list, &esp->esp_cmd_pool);
898 static void esp_cmd_is_done(struct esp *esp, struct esp_cmd_entry *ent,
907 esp_free_lun_tag(ent, dev->hostdata);
910 if (ent->eh_done) {
911 complete(ent->eh_done);
912 ent->eh_done = NULL;
915 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE) {
916 esp_unmap_sense(esp, ent);
927 ent->flags &= ~ESP_CMD_FLAG_AUTOSENSE;
941 list_del(&ent->list);
942 esp_put_ent(esp, ent);
953 static void esp_event_queue_full(struct esp *esp, struct esp_cmd_entry *ent)
955 struct scsi_device *dev = ent->cmd->device;
966 struct esp_cmd_entry *ent;
968 ent = esp_get_ent(esp);
969 if (!ent)
972 ent->cmd = cmd;
979 list_add_tail(&ent->list, &esp->queued_cmds);
1057 struct esp_cmd_entry *ent;
1134 ent = lp->tagged_cmds[esp->command_block[1]];
1135 if (!ent) {
1142 return ent;
1147 struct esp_cmd_entry *ent;
1211 ent = lp->non_tagged_cmd;
1212 if (!ent) {
1213 ent = esp_reconnect_with_tag(esp, lp);
1214 if (!ent)
1218 esp->active_cmd = ent;
1221 esp_restore_pointers(esp, ent);
1232 struct esp_cmd_entry *ent;
1239 ent = esp->active_cmd;
1240 cmd = ent->cmd;
1247 esp_cmd_is_done(esp, ent, cmd, (DID_ERROR << 16));
1260 if (!(ent->flags & ESP_CMD_FLAG_AUTOSENSE)) {
1262 esp_free_lun_tag(ent, cmd->device->hostdata);
1267 esp_unmap_sense(esp, ent);
1273 list_move(&ent->list, &esp->queued_cmds);
1292 esp_cmd_is_done(esp, ent, cmd, (DID_BAD_TARGET << 16));
1324 static int esp_data_bytes_sent(struct esp *esp, struct esp_cmd_entry *ent,
1355 if (fifo_cnt == 1 && ent->flags & ESP_CMD_FLAG_RESIDUAL) {
1360 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE)
1361 ent->sense_ptr[bytes_sent] = bval;
1374 ent->flags &= ~ESP_CMD_FLAG_RESIDUAL;
1376 if (!(ent->flags & ESP_CMD_FLAG_WRITE))
1408 if (!(ent->flags & ESP_CMD_FLAG_WRITE))
1459 struct esp_cmd_entry *ent = esp->active_cmd;
1460 struct scsi_cmnd *cmd = ent->cmd;
1599 struct esp_cmd_entry *ent = esp->active_cmd;
1600 struct scsi_cmnd *cmd = ent->cmd;
1647 struct esp_cmd_entry *ent;
1655 ent = esp->active_cmd;
1656 spriv = ESP_CMD_PRIV(ent->cmd);
1677 struct esp_cmd_entry *ent = esp->active_cmd;
1679 ent->message = msg0;
1747 struct esp_cmd_entry *ent = esp->active_cmd;
1748 struct scsi_cmnd *cmd = ent->cmd;
1749 dma_addr_t dma_addr = esp_cur_dma_addr(ent, cmd);
1750 unsigned int dma_len = esp_cur_dma_len(ent, cmd);
1756 ent->flags |= ESP_CMD_FLAG_WRITE;
1758 ent->flags &= ~ESP_CMD_FLAG_WRITE;
1773 (unsigned long long)esp_cur_dma_addr(ent, cmd),
1774 esp_cur_dma_len(ent, cmd));
1788 struct esp_cmd_entry *ent = esp->active_cmd;
1789 struct scsi_cmnd *cmd = ent->cmd;
1799 if (ent->flags & ESP_CMD_FLAG_WRITE) {
1816 bytes_sent = esp_data_bytes_sent(esp, ent, cmd);
1819 ent->flags, bytes_sent);
1827 esp_advance_dma(esp, ent, cmd, bytes_sent);
1833 struct esp_cmd_entry *ent = esp->active_cmd;
1836 ent->status = esp_read8(ESP_FDATA);
1837 ent->message = esp_read8(ESP_FDATA);
1840 ent->status = esp_read8(ESP_FDATA);
1841 ent->message = 0xff;
1846 if (ent->message != COMMAND_COMPLETE) {
1849 ent->message);
1859 struct esp_cmd_entry *ent = esp->active_cmd;
1860 struct scsi_cmnd *cmd = ent->cmd;
1862 if (ent->message == COMMAND_COMPLETE ||
1863 ent->message == DISCONNECT)
1866 if (ent->message == COMMAND_COMPLETE) {
1868 ent->status, ent->message);
1869 if (ent->status == SAM_STAT_TASK_SET_FULL)
1870 esp_event_queue_full(esp, ent);
1872 if (ent->status == SAM_STAT_CHECK_CONDITION &&
1873 !(ent->flags & ESP_CMD_FLAG_AUTOSENSE)) {
1874 ent->flags |= ESP_CMD_FLAG_AUTOSENSE;
1875 esp_autosense(esp, ent);
1877 esp_cmd_is_done(esp, ent, cmd,
1878 compose_result(ent->status,
1879 ent->message,
1882 } else if (ent->message == DISCONNECT) {
1885 ent->tag[0], ent->tag[1]);
1892 ent->message);
2039 static void esp_reset_cleanup_one(struct esp *esp, struct esp_cmd_entry *ent)
2041 struct scsi_cmnd *cmd = ent->cmd;
2044 esp_free_lun_tag(ent, cmd->device->hostdata);
2047 if (ent->flags & ESP_CMD_FLAG_AUTOSENSE)
2048 esp_unmap_sense(esp, ent);
2051 list_del(&ent->list);
2052 esp_put_ent(esp, ent);
2065 struct esp_cmd_entry *ent, *tmp;
2068 list_for_each_entry_safe(ent, tmp, &esp->queued_cmds, list) {
2069 struct scsi_cmnd *cmd = ent->cmd;
2071 list_del(&ent->list);
2074 esp_put_ent(esp, ent);
2077 list_for_each_entry_safe(ent, tmp, &esp->active_cmds, list) {
2078 if (ent == esp->active_cmd)
2080 esp_reset_cleanup_one(esp, ent);
2504 struct esp_cmd_entry *ent, *tmp;
2514 ent = esp->active_cmd;
2515 if (ent)
2518 ent->cmd, ent->cmd->cmnd[0]);
2519 list_for_each_entry(ent, &esp->queued_cmds, list) {
2521 ent->cmd, ent->cmd->cmnd[0]);
2523 list_for_each_entry(ent, &esp->active_cmds, list) {
2525 ent->cmd, ent->cmd->cmnd[0]);
2532 ent = NULL;
2535 ent = tmp;
2540 if (ent) {
2544 list_del(&ent->list);
2549 esp_put_ent(esp, ent);
2556 ent = esp->active_cmd;
2557 if (ent && ent->cmd == cmd) {
2570 ent->eh_done = &eh_done;
2597 ent->eh_done = NULL;