mirror of
https://github.com/SCST-project/scst.git
synced 2026-05-24 06:01:28 +00:00
Update for 2.6.25
git-svn-id: http://svn.code.sf.net/p/scst/svn/trunk@338 d57e44dd-8a1f-0410-8b47-8ef2f437770f
This commit is contained in:
@@ -1999,9 +1999,9 @@ qla2x00_print_scsi_cmd(struct scsi_cmnd * cmd)
|
||||
printk("0x%02x ", cmd->cmnd[i]);
|
||||
}
|
||||
printk("\n seg_cnt=%d, allowed=%d, retries=%d\n",
|
||||
cmd->use_sg, cmd->allowed, cmd->retries);
|
||||
scsi_sg_count(cmd), cmd->allowed, cmd->retries);
|
||||
printk(" request buffer=0x%p, request buffer len=0x%x\n",
|
||||
cmd->request_buffer, cmd->request_bufflen);
|
||||
scsi_sglist(cmd), scsi_bufflen(cmd));
|
||||
printk(" tag=%d, transfersize=0x%x\n",
|
||||
cmd->tag, cmd->transfersize);
|
||||
printk(" serial_number=%lx, SP=%p\n", cmd->serial_number, sp);
|
||||
|
||||
@@ -319,4 +319,27 @@ extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *);
|
||||
extern void qla2x00_init_host_attr(scsi_qla_host_t *);
|
||||
extern void qla2x00_alloc_sysfs_attr(scsi_qla_host_t *);
|
||||
extern void qla2x00_free_sysfs_attr(scsi_qla_host_t *);
|
||||
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,23)
|
||||
static inline void scsi_set_resid(struct scsi_cmnd *cmd, int resid)
|
||||
{
|
||||
cmd->resid = resid;
|
||||
}
|
||||
|
||||
static inline struct scatterlist *scsi_sglist(struct scsi_cmnd *cmd)
|
||||
{
|
||||
return (struct scatterlist *)cmd->request_buffer;
|
||||
}
|
||||
|
||||
static inline unsigned scsi_bufflen(struct scsi_cmnd *cmd)
|
||||
{
|
||||
return cmd->request_bufflen;
|
||||
}
|
||||
|
||||
static inline unsigned scsi_sg_count(struct scsi_cmnd *cmd)
|
||||
{
|
||||
return cmd->use_sg;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* _QLA_GBL_H */
|
||||
|
||||
@@ -162,7 +162,7 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
|
||||
__constant_cpu_to_le32(COMMAND_TYPE);
|
||||
|
||||
/* No data transfer */
|
||||
if (cmd->request_bufflen == 0 || cmd->sc_data_direction == DMA_NONE) {
|
||||
if (scsi_bufflen(cmd) == 0 || cmd->sc_data_direction == DMA_NONE) {
|
||||
cmd_pkt->byte_count = __constant_cpu_to_le32(0);
|
||||
return;
|
||||
}
|
||||
@@ -176,11 +176,11 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
|
||||
cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
|
||||
|
||||
/* Load data segments */
|
||||
if (cmd->use_sg != 0) {
|
||||
if (scsi_sg_count(cmd) != 0) {
|
||||
struct scatterlist *cur_seg;
|
||||
struct scatterlist *end_seg;
|
||||
|
||||
cur_seg = (struct scatterlist *)cmd->request_buffer;
|
||||
cur_seg = scsi_sglist(cmd);
|
||||
end_seg = cur_seg + tot_dsds;
|
||||
while (cur_seg < end_seg) {
|
||||
cont_entry_t *cont_pkt;
|
||||
@@ -204,7 +204,7 @@ void qla2x00_build_scsi_iocbs_32(srb_t *sp, cmd_entry_t *cmd_pkt,
|
||||
}
|
||||
} else {
|
||||
*cur_dsd++ = cpu_to_le32(sp->dma_handle);
|
||||
*cur_dsd++ = cpu_to_le32(cmd->request_bufflen);
|
||||
*cur_dsd++ = cpu_to_le32(scsi_bufflen(cmd));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -231,7 +231,7 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
|
||||
__constant_cpu_to_le32(COMMAND_A64_TYPE);
|
||||
|
||||
/* No data transfer */
|
||||
if (cmd->request_bufflen == 0 || cmd->sc_data_direction == DMA_NONE) {
|
||||
if (scsi_bufflen(cmd) == 0 || cmd->sc_data_direction == DMA_NONE) {
|
||||
cmd_pkt->byte_count = __constant_cpu_to_le32(0);
|
||||
return;
|
||||
}
|
||||
@@ -245,11 +245,11 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
|
||||
cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
|
||||
|
||||
/* Load data segments */
|
||||
if (cmd->use_sg != 0) {
|
||||
if (scsi_sg_count(cmd) != 0) {
|
||||
struct scatterlist *cur_seg;
|
||||
struct scatterlist *end_seg;
|
||||
|
||||
cur_seg = (struct scatterlist *)cmd->request_buffer;
|
||||
cur_seg = scsi_sglist(cmd);
|
||||
end_seg = cur_seg + tot_dsds;
|
||||
while (cur_seg < end_seg) {
|
||||
dma_addr_t sle_dma;
|
||||
@@ -277,7 +277,7 @@ void qla2x00_build_scsi_iocbs_64(srb_t *sp, cmd_entry_t *cmd_pkt,
|
||||
} else {
|
||||
*cur_dsd++ = cpu_to_le32(LSD(sp->dma_handle));
|
||||
*cur_dsd++ = cpu_to_le32(MSD(sp->dma_handle));
|
||||
*cur_dsd++ = cpu_to_le32(cmd->request_bufflen);
|
||||
*cur_dsd++ = cpu_to_le32(scsi_bufflen(cmd));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -336,17 +336,17 @@ qla2x00_start_scsi(srb_t *sp)
|
||||
goto queuing_error;
|
||||
|
||||
/* Map the sg table so we have an accurate count of sg entries needed */
|
||||
if (cmd->use_sg) {
|
||||
sg = (struct scatterlist *) cmd->request_buffer;
|
||||
tot_dsds = pci_map_sg(ha->pdev, sg, cmd->use_sg,
|
||||
if (scsi_sg_count(cmd)) {
|
||||
sg = scsi_sglist(cmd);
|
||||
tot_dsds = pci_map_sg(ha->pdev, sg, scsi_sg_count(cmd),
|
||||
cmd->sc_data_direction);
|
||||
if (tot_dsds == 0)
|
||||
goto queuing_error;
|
||||
} else if (cmd->request_bufflen) {
|
||||
} else if (scsi_bufflen(cmd)) {
|
||||
dma_addr_t req_dma;
|
||||
|
||||
req_dma = pci_map_single(ha->pdev, cmd->request_buffer,
|
||||
cmd->request_bufflen, cmd->sc_data_direction);
|
||||
req_dma = pci_map_single(ha->pdev, scsi_sglist(cmd),
|
||||
scsi_bufflen(cmd), cmd->sc_data_direction);
|
||||
if (dma_mapping_error(req_dma))
|
||||
goto queuing_error;
|
||||
|
||||
@@ -390,7 +390,7 @@ qla2x00_start_scsi(srb_t *sp)
|
||||
|
||||
/* Load SCSI command packet. */
|
||||
memcpy(cmd_pkt->scsi_cdb, cmd->cmnd, cmd->cmd_len);
|
||||
cmd_pkt->byte_count = cpu_to_le32((uint32_t)cmd->request_bufflen);
|
||||
cmd_pkt->byte_count = cpu_to_le32((uint32_t)scsi_bufflen(cmd));
|
||||
|
||||
/* Build IOCB segments */
|
||||
ha->isp_ops.build_iocbs(sp, cmd_pkt, tot_dsds);
|
||||
@@ -427,13 +427,13 @@ qla2x00_start_scsi(srb_t *sp)
|
||||
return (QLA_SUCCESS);
|
||||
|
||||
queuing_error:
|
||||
if (cmd->use_sg && tot_dsds) {
|
||||
sg = (struct scatterlist *) cmd->request_buffer;
|
||||
pci_unmap_sg(ha->pdev, sg, cmd->use_sg,
|
||||
if (scsi_sg_count(cmd) && tot_dsds) {
|
||||
sg = scsi_sglist(cmd);
|
||||
pci_unmap_sg(ha->pdev, sg, scsi_sg_count(cmd),
|
||||
cmd->sc_data_direction);
|
||||
} else if (tot_dsds) {
|
||||
pci_unmap_single(ha->pdev, sp->dma_handle,
|
||||
cmd->request_bufflen, cmd->sc_data_direction);
|
||||
scsi_bufflen(cmd), cmd->sc_data_direction);
|
||||
}
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
|
||||
@@ -653,7 +653,7 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
|
||||
__constant_cpu_to_le32(COMMAND_TYPE_7);
|
||||
|
||||
/* No data transfer */
|
||||
if (cmd->request_bufflen == 0 || cmd->sc_data_direction == DMA_NONE) {
|
||||
if (scsi_bufflen(cmd) == 0 || cmd->sc_data_direction == DMA_NONE) {
|
||||
cmd_pkt->byte_count = __constant_cpu_to_le32(0);
|
||||
return;
|
||||
}
|
||||
@@ -673,11 +673,11 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
|
||||
cur_dsd = (uint32_t *)&cmd_pkt->dseg_0_address;
|
||||
|
||||
/* Load data segments */
|
||||
if (cmd->use_sg != 0) {
|
||||
if (scsi_sg_count(cmd) != 0) {
|
||||
struct scatterlist *cur_seg;
|
||||
struct scatterlist *end_seg;
|
||||
|
||||
cur_seg = (struct scatterlist *)cmd->request_buffer;
|
||||
cur_seg = scsi_sglist(cmd);
|
||||
end_seg = cur_seg + tot_dsds;
|
||||
while (cur_seg < end_seg) {
|
||||
dma_addr_t sle_dma;
|
||||
@@ -705,7 +705,7 @@ qla24xx_build_scsi_iocbs(srb_t *sp, struct cmd_type_7 *cmd_pkt,
|
||||
} else {
|
||||
*cur_dsd++ = cpu_to_le32(LSD(sp->dma_handle));
|
||||
*cur_dsd++ = cpu_to_le32(MSD(sp->dma_handle));
|
||||
*cur_dsd++ = cpu_to_le32(cmd->request_bufflen);
|
||||
*cur_dsd++ = cpu_to_le32(scsi_bufflen(cmd));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -765,17 +765,17 @@ qla24xx_start_scsi(srb_t *sp)
|
||||
goto queuing_error;
|
||||
|
||||
/* Map the sg table so we have an accurate count of sg entries needed */
|
||||
if (cmd->use_sg) {
|
||||
sg = (struct scatterlist *) cmd->request_buffer;
|
||||
tot_dsds = pci_map_sg(ha->pdev, sg, cmd->use_sg,
|
||||
if (scsi_sg_count(cmd)) {
|
||||
sg = scsi_sglist(cmd);
|
||||
tot_dsds = pci_map_sg(ha->pdev, sg, scsi_sg_count(cmd),
|
||||
cmd->sc_data_direction);
|
||||
if (tot_dsds == 0)
|
||||
goto queuing_error;
|
||||
} else if (cmd->request_bufflen) {
|
||||
} else if (scsi_bufflen(cmd)) {
|
||||
dma_addr_t req_dma;
|
||||
|
||||
req_dma = pci_map_single(ha->pdev, cmd->request_buffer,
|
||||
cmd->request_bufflen, cmd->sc_data_direction);
|
||||
req_dma = pci_map_single(ha->pdev, scsi_sglist(cmd),
|
||||
scsi_bufflen(cmd), cmd->sc_data_direction);
|
||||
if (dma_mapping_error(req_dma))
|
||||
goto queuing_error;
|
||||
|
||||
@@ -824,7 +824,7 @@ qla24xx_start_scsi(srb_t *sp)
|
||||
memcpy(cmd_pkt->fcp_cdb, cmd->cmnd, cmd->cmd_len);
|
||||
host_to_fcp_swap(cmd_pkt->fcp_cdb, sizeof(cmd_pkt->fcp_cdb));
|
||||
|
||||
cmd_pkt->byte_count = cpu_to_le32((uint32_t)cmd->request_bufflen);
|
||||
cmd_pkt->byte_count = cpu_to_le32((uint32_t)scsi_bufflen(cmd));
|
||||
|
||||
/* Build IOCB segments */
|
||||
qla24xx_build_scsi_iocbs(sp, cmd_pkt, tot_dsds);
|
||||
@@ -861,13 +861,13 @@ qla24xx_start_scsi(srb_t *sp)
|
||||
return QLA_SUCCESS;
|
||||
|
||||
queuing_error:
|
||||
if (cmd->use_sg && tot_dsds) {
|
||||
sg = (struct scatterlist *) cmd->request_buffer;
|
||||
pci_unmap_sg(ha->pdev, sg, cmd->use_sg,
|
||||
if (scsi_sg_count(cmd) && tot_dsds) {
|
||||
sg = scsi_sglist(cmd);
|
||||
pci_unmap_sg(ha->pdev, sg, scsi_sg_count(cmd),
|
||||
cmd->sc_data_direction);
|
||||
} else if (tot_dsds) {
|
||||
pci_unmap_single(ha->pdev, sp->dma_handle,
|
||||
cmd->request_bufflen, cmd->sc_data_direction);
|
||||
scsi_bufflen(cmd), cmd->sc_data_direction);
|
||||
}
|
||||
spin_unlock_irqrestore(&ha->hardware_lock, flags);
|
||||
|
||||
|
||||
@@ -1053,11 +1053,11 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
||||
}
|
||||
if (scsi_status & (SS_RESIDUAL_UNDER | SS_RESIDUAL_OVER)) {
|
||||
resid = resid_len;
|
||||
cp->resid = resid;
|
||||
scsi_set_resid(cp, resid);
|
||||
CMD_RESID_LEN(cp) = resid;
|
||||
|
||||
if (!lscsi_status &&
|
||||
((unsigned)(cp->request_bufflen - resid) <
|
||||
((unsigned)(scsi_bufflen(cp) - resid) <
|
||||
cp->underflow)) {
|
||||
qla_printk(KERN_INFO, ha,
|
||||
"scsi(%ld:%d:%d:%d): Mid-layer underflow "
|
||||
@@ -1065,7 +1065,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
||||
"error status.\n", ha->host_no,
|
||||
cp->device->channel, cp->device->id,
|
||||
cp->device->lun, resid,
|
||||
cp->request_bufflen);
|
||||
scsi_bufflen(cp));
|
||||
|
||||
cp->result = DID_ERROR << 16;
|
||||
break;
|
||||
@@ -1111,7 +1111,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
||||
case CS_DATA_UNDERRUN:
|
||||
resid = resid_len;
|
||||
if (scsi_status & SS_RESIDUAL_UNDER) {
|
||||
cp->resid = resid;
|
||||
scsi_set_resid(cp, resid);
|
||||
CMD_RESID_LEN(cp) = resid;
|
||||
} else {
|
||||
DEBUG2(printk(KERN_INFO
|
||||
@@ -1175,14 +1175,14 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
||||
"retrying command.\n", ha->host_no,
|
||||
cp->device->channel, cp->device->id,
|
||||
cp->device->lun, resid,
|
||||
cp->request_bufflen));
|
||||
scsi_bufflen(cp)));
|
||||
|
||||
cp->result = DID_BUS_BUSY << 16;
|
||||
break;
|
||||
}
|
||||
|
||||
/* Handle mid-layer underflow */
|
||||
if ((unsigned)(cp->request_bufflen - resid) <
|
||||
if ((unsigned)(scsi_bufflen(cp) - resid) <
|
||||
cp->underflow) {
|
||||
qla_printk(KERN_INFO, ha,
|
||||
"scsi(%ld:%d:%d:%d): Mid-layer underflow "
|
||||
@@ -1190,7 +1190,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
||||
"error status.\n", ha->host_no,
|
||||
cp->device->channel, cp->device->id,
|
||||
cp->device->lun, resid,
|
||||
cp->request_bufflen);
|
||||
scsi_bufflen(cp));
|
||||
|
||||
cp->result = DID_ERROR << 16;
|
||||
break;
|
||||
@@ -1213,7 +1213,7 @@ qla2x00_status_entry(scsi_qla_host_t *ha, void *pkt)
|
||||
DEBUG2(printk(KERN_INFO
|
||||
"PID=0x%lx req=0x%x xtra=0x%x -- returning DID_ERROR "
|
||||
"status!\n",
|
||||
cp->serial_number, cp->request_bufflen, resid_len));
|
||||
cp->serial_number, scsi_bufflen(cp), resid_len));
|
||||
|
||||
cp->result = DID_ERROR << 16;
|
||||
break;
|
||||
|
||||
@@ -2453,12 +2453,12 @@ qla2x00_sp_free_dma(scsi_qla_host_t *ha, srb_t *sp)
|
||||
struct scsi_cmnd *cmd = sp->cmd;
|
||||
|
||||
if (sp->flags & SRB_DMA_VALID) {
|
||||
if (cmd->use_sg) {
|
||||
dma_unmap_sg(&ha->pdev->dev, cmd->request_buffer,
|
||||
cmd->use_sg, cmd->sc_data_direction);
|
||||
} else if (cmd->request_bufflen) {
|
||||
if (scsi_sg_count(cmd)) {
|
||||
dma_unmap_sg(&ha->pdev->dev, scsi_sglist(cmd),
|
||||
scsi_sg_count(cmd), cmd->sc_data_direction);
|
||||
} else if (scsi_bufflen(cmd)) {
|
||||
dma_unmap_single(&ha->pdev->dev, sp->dma_handle,
|
||||
cmd->request_bufflen, cmd->sc_data_direction);
|
||||
scsi_bufflen(cmd), cmd->sc_data_direction);
|
||||
}
|
||||
sp->flags &= ~SRB_DMA_VALID;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,12 @@ int changer_attach(struct scst_device *dev)
|
||||
do {
|
||||
TRACE_DBG("%s", "Doing TEST_UNIT_READY");
|
||||
res = scsi_test_unit_ready(dev->scsi_dev, CHANGER_TIMEOUT,
|
||||
CHANGER_RETRIES);
|
||||
CHANGER_RETRIES
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
|
||||
);
|
||||
#else
|
||||
, NULL);
|
||||
#endif
|
||||
TRACE_DBG("TEST_UNIT_READY done: %x", res);
|
||||
} while ((--retries > 0) && res);
|
||||
if (res) {
|
||||
|
||||
@@ -87,7 +87,12 @@ int processor_attach(struct scst_device *dev)
|
||||
do {
|
||||
TRACE_DBG("%s", "Doing TEST_UNIT_READY");
|
||||
res = scsi_test_unit_ready(dev->scsi_dev, PROCESSOR_TIMEOUT,
|
||||
PROCESSOR_RETRIES);
|
||||
PROCESSOR_RETRIES
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
|
||||
);
|
||||
#else
|
||||
, NULL);
|
||||
#endif
|
||||
TRACE_DBG("TEST_UNIT_READY done: %x", res);
|
||||
} while ((--retries > 0) && res);
|
||||
if (res) {
|
||||
|
||||
@@ -87,7 +87,12 @@ int raid_attach(struct scst_device *dev)
|
||||
do {
|
||||
TRACE_DBG("%s", "Doing TEST_UNIT_READY");
|
||||
res = scsi_test_unit_ready(dev->scsi_dev, RAID_TIMEOUT,
|
||||
RAID_RETRIES);
|
||||
RAID_RETRIES
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
|
||||
);
|
||||
#else
|
||||
, NULL);
|
||||
#endif
|
||||
TRACE_DBG("TEST_UNIT_READY done: %x", res);
|
||||
} while ((--retries > 0) && res);
|
||||
if (res) {
|
||||
|
||||
@@ -183,7 +183,12 @@ int tape_attach(struct scst_device *dev)
|
||||
do {
|
||||
TRACE_DBG("%s", "Doing TEST_UNIT_READY");
|
||||
res = scsi_test_unit_ready(dev->scsi_dev, TAPE_SMALL_TIMEOUT,
|
||||
TAPE_RETRIES);
|
||||
TAPE_RETRIES
|
||||
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
|
||||
);
|
||||
#else
|
||||
, NULL);
|
||||
#endif
|
||||
TRACE_DBG("TEST_UNIT_READY done: %x", res);
|
||||
} while ((--retries > 0) && res);
|
||||
if (res) {
|
||||
|
||||
Reference in New Issue
Block a user