aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/scsi/qlogicpti.c29
1 files changed, 7 insertions, 22 deletions
diff --git a/drivers/scsi/qlogicpti.c b/drivers/scsi/qlogicpti.c
index 7a2e7986b038..5bc883182b97 100644
--- a/drivers/scsi/qlogicpti.c
+++ b/drivers/scsi/qlogicpti.c
@@ -871,11 +871,12 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd,
871 struct scatterlist *sg, *s; 871 struct scatterlist *sg, *s;
872 int i, n; 872 int i, n;
873 873
874 if (Cmnd->use_sg) { 874 if (scsi_bufflen(Cmnd)) {
875 int sg_count; 875 int sg_count;
876 876
877 sg = (struct scatterlist *) Cmnd->request_buffer; 877 sg = scsi_sglist(Cmnd);
878 sg_count = sbus_map_sg(qpti->sdev, sg, Cmnd->use_sg, Cmnd->sc_data_direction); 878 sg_count = sbus_map_sg(qpti->sdev, sg, scsi_sg_count(Cmnd),
879 Cmnd->sc_data_direction);
879 880
880 ds = cmd->dataseg; 881 ds = cmd->dataseg;
881 cmd->segment_cnt = sg_count; 882 cmd->segment_cnt = sg_count;
@@ -914,16 +915,6 @@ static inline int load_cmd(struct scsi_cmnd *Cmnd, struct Command_Entry *cmd,
914 } 915 }
915 sg_count -= n; 916 sg_count -= n;
916 } 917 }
917 } else if (Cmnd->request_bufflen) {
918 Cmnd->SCp.ptr = (char *)(unsigned long)
919 sbus_map_single(qpti->sdev,
920 Cmnd->request_buffer,
921 Cmnd->request_bufflen,
922 Cmnd->sc_data_direction);
923
924 cmd->dataseg[0].d_base = (u32) ((unsigned long)Cmnd->SCp.ptr);
925 cmd->dataseg[0].d_count = Cmnd->request_bufflen;
926 cmd->segment_cnt = 1;
927 } else { 918 } else {
928 cmd->dataseg[0].d_base = 0; 919 cmd->dataseg[0].d_base = 0;
929 cmd->dataseg[0].d_count = 0; 920 cmd->dataseg[0].d_count = 0;
@@ -1159,17 +1150,11 @@ static struct scsi_cmnd *qlogicpti_intr_handler(struct qlogicpti *qpti)
1159 else 1150 else
1160 Cmnd->result = DID_ERROR << 16; 1151 Cmnd->result = DID_ERROR << 16;
1161 1152
1162 if (Cmnd->use_sg) { 1153 if (scsi_bufflen(Cmnd))
1163 sbus_unmap_sg(qpti->sdev, 1154 sbus_unmap_sg(qpti->sdev,
1164 (struct scatterlist *)Cmnd->request_buffer, 1155 scsi_sglist(Cmnd), scsi_sg_count(Cmnd),
1165 Cmnd->use_sg,
1166 Cmnd->sc_data_direction); 1156 Cmnd->sc_data_direction);
1167 } else if (Cmnd->request_bufflen) { 1157
1168 sbus_unmap_single(qpti->sdev,
1169 (__u32)((unsigned long)Cmnd->SCp.ptr),
1170 Cmnd->request_bufflen,
1171 Cmnd->sc_data_direction);
1172 }
1173 qpti->cmd_count[Cmnd->device->id]--; 1158 qpti->cmd_count[Cmnd->device->id]--;
1174 sbus_writew(out_ptr, qpti->qregs + MBOX5); 1159 sbus_writew(out_ptr, qpti->qregs + MBOX5);
1175 Cmnd->host_scribble = (unsigned char *) done_queue; 1160 Cmnd->host_scribble = (unsigned char *) done_queue;