aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrew Vasquez <andrew.vasquez@qlogic.com>2008-01-17 12:02:07 -0500
committerJames Bottomley <James.Bottomley@HansenPartnership.com>2008-01-23 12:29:29 -0500
commit4733fcb1fe4d64402a8bd18cec766e8b8ad25eee (patch)
tree145519223ad9067a64025807481f37492ea1adb6
parentfd66c1b4e491a2a17d7a420fa38fd04b0e8d36c1 (diff)
[SCSI] qla2xxx: Consolidate duplicate sense-data handling codes.
Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@HansenPartnership.com>
-rw-r--r--drivers/scsi/qla2xxx/qla_isr.c85
1 files changed, 31 insertions, 54 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c
index 53cbaffbb78c..5d2dc92f7d9d 100644
--- a/drivers/scsi/qla2xxx/qla_isr.c
+++ b/drivers/scsi/qla2xxx/qla_isr.c
@@ -822,6 +822,35 @@ qla2x00_process_response_queue(struct scsi_qla_host *ha)
822 WRT_REG_WORD(ISP_RSP_Q_OUT(ha, reg), ha->rsp_ring_index); 822 WRT_REG_WORD(ISP_RSP_Q_OUT(ha, reg), ha->rsp_ring_index);
823} 823}
824 824
825static inline void
826qla2x00_handle_sense(srb_t *sp, uint8_t *sense_data, uint32_t sense_len)
827{
828 struct scsi_cmnd *cp = sp->cmd;
829
830 if (sense_len >= SCSI_SENSE_BUFFERSIZE)
831 sense_len = SCSI_SENSE_BUFFERSIZE;
832
833 CMD_ACTUAL_SNSLEN(cp) = sense_len;
834 sp->request_sense_length = sense_len;
835 sp->request_sense_ptr = cp->sense_buffer;
836 if (sp->request_sense_length > 32)
837 sense_len = 32;
838
839 memcpy(cp->sense_buffer, sense_data, sense_len);
840
841 sp->request_sense_ptr += sense_len;
842 sp->request_sense_length -= sense_len;
843 if (sp->request_sense_length != 0)
844 sp->ha->status_srb = sp;
845
846 DEBUG5(printk("%s(): Check condition Sense data, scsi(%ld:%d:%d:%d) "
847 "cmd=%p pid=%ld\n", __func__, sp->ha->host_no, cp->device->channel,
848 cp->device->id, cp->device->lun, cp, cp->serial_number));
849 if (sense_len)
850 DEBUG5(qla2x00_dump_buffer(cp->sense_buffer,
851 CMD_ACTUAL_SNSLEN(cp)));
852}
853
825/** 854/**
826 * qla2x00_status_entry() - Process a Status IOCB entry. 855 * qla2x00_status_entry() - Process a Status IOCB entry.
827 * @ha: SCSI driver HA context 856 * @ha: SCSI driver HA context
@@ -976,36 +1005,11 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
976 if (lscsi_status != SS_CHECK_CONDITION) 1005 if (lscsi_status != SS_CHECK_CONDITION)
977 break; 1006 break;
978 1007
979 /* Copy Sense Data into sense buffer. */
980 memset(cp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); 1008 memset(cp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
981
982 if (!(scsi_status & SS_SENSE_LEN_VALID)) 1009 if (!(scsi_status & SS_SENSE_LEN_VALID))
983 break; 1010 break;
984 1011
985 if (sense_len >= SCSI_SENSE_BUFFERSIZE) 1012 qla2x00_handle_sense(sp, sense_data, sense_len);
986 sense_len = SCSI_SENSE_BUFFERSIZE;
987
988 CMD_ACTUAL_SNSLEN(cp) = sense_len;
989 sp->request_sense_length = sense_len;
990 sp->request_sense_ptr = cp->sense_buffer;
991
992 if (sp->request_sense_length > 32)
993 sense_len = 32;
994
995 memcpy(cp->sense_buffer, sense_data, sense_len);
996
997 sp->request_sense_ptr += sense_len;
998 sp->request_sense_length -= sense_len;
999 if (sp->request_sense_length != 0)
1000 ha->status_srb = sp;
1001
1002 DEBUG5(printk("%s(): Check condition Sense data, "
1003 "scsi(%ld:%d:%d:%d) cmd=%p pid=%ld\n", __func__,
1004 ha->host_no, cp->device->channel, cp->device->id,
1005 cp->device->lun, cp, cp->serial_number));
1006 if (sense_len)
1007 DEBUG5(qla2x00_dump_buffer(cp->sense_buffer,
1008 CMD_ACTUAL_SNSLEN(cp)));
1009 break; 1013 break;
1010 1014
1011 case CS_DATA_UNDERRUN: 1015 case CS_DATA_UNDERRUN:
@@ -1060,34 +1064,11 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
1060 if (lscsi_status != SS_CHECK_CONDITION) 1064 if (lscsi_status != SS_CHECK_CONDITION)
1061 break; 1065 break;
1062 1066
1063 /* Copy Sense Data into sense buffer */
1064 memset(cp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE); 1067 memset(cp->sense_buffer, 0, SCSI_SENSE_BUFFERSIZE);
1065
1066 if (!(scsi_status & SS_SENSE_LEN_VALID)) 1068 if (!(scsi_status & SS_SENSE_LEN_VALID))
1067 break; 1069 break;
1068 1070
1069 if (sense_len >= SCSI_SENSE_BUFFERSIZE) 1071 qla2x00_handle_sense(sp, sense_data, sense_len);
1070 sense_len = SCSI_SENSE_BUFFERSIZE;
1071
1072 CMD_ACTUAL_SNSLEN(cp) = sense_len;
1073 sp->request_sense_length = sense_len;
1074 sp->request_sense_ptr = cp->sense_buffer;
1075
1076 if (sp->request_sense_length > 32)
1077 sense_len = 32;
1078
1079 memcpy(cp->sense_buffer, sense_data, sense_len);
1080
1081 sp->request_sense_ptr += sense_len;
1082 sp->request_sense_length -= sense_len;
1083 if (sp->request_sense_length != 0)
1084 ha->status_srb = sp;
1085
1086 DEBUG5(printk("%s(): Check condition Sense data, "
1087 "scsi(%ld:%d:%d:%d) cmd=%p pid=%ld\n",
1088 __func__, ha->host_no, cp->device->channel,
1089 cp->device->id, cp->device->lun, cp,
1090 cp->serial_number));
1091 1072
1092 /* 1073 /*
1093 * In case of a Underrun condition, set both the lscsi 1074 * In case of a Underrun condition, set both the lscsi
@@ -1107,10 +1088,6 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
1107 1088
1108 cp->result = DID_ERROR << 16 | lscsi_status; 1089 cp->result = DID_ERROR << 16 | lscsi_status;
1109 } 1090 }
1110
1111 if (sense_len)
1112 DEBUG5(qla2x00_dump_buffer(cp->sense_buffer,
1113 CMD_ACTUAL_SNSLEN(cp)));
1114 } else { 1091 } else {
1115 /* 1092 /*
1116 * If RISC reports underrun and target does not report 1093 * If RISC reports underrun and target does not report