|
@@ -3090,8 +3090,7 @@ verify_done:
|
|
}
|
|
}
|
|
|
|
|
|
int
|
|
int
|
|
-qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req,
|
|
|
|
- uint8_t options)
|
|
|
|
|
|
+qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req)
|
|
{
|
|
{
|
|
int rval;
|
|
int rval;
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
@@ -3101,7 +3100,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req,
|
|
struct qla_hw_data *ha = vha->hw;
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
|
|
|
mcp->mb[0] = MBC_INITIALIZE_MULTIQ;
|
|
mcp->mb[0] = MBC_INITIALIZE_MULTIQ;
|
|
- mcp->mb[1] = options;
|
|
|
|
|
|
+ mcp->mb[1] = req->options;
|
|
mcp->mb[2] = MSW(LSD(req->dma));
|
|
mcp->mb[2] = MSW(LSD(req->dma));
|
|
mcp->mb[3] = LSW(LSD(req->dma));
|
|
mcp->mb[3] = LSW(LSD(req->dma));
|
|
mcp->mb[6] = MSW(MSD(req->dma));
|
|
mcp->mb[6] = MSW(MSD(req->dma));
|
|
@@ -3128,7 +3127,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req,
|
|
mcp->tov = 60;
|
|
mcp->tov = 60;
|
|
|
|
|
|
spin_lock_irqsave(&ha->hardware_lock, flags);
|
|
spin_lock_irqsave(&ha->hardware_lock, flags);
|
|
- if (!(options & BIT_0)) {
|
|
|
|
|
|
+ if (!(req->options & BIT_0)) {
|
|
WRT_REG_DWORD(®->req_q_in, 0);
|
|
WRT_REG_DWORD(®->req_q_in, 0);
|
|
WRT_REG_DWORD(®->req_q_out, 0);
|
|
WRT_REG_DWORD(®->req_q_out, 0);
|
|
}
|
|
}
|
|
@@ -3142,8 +3141,7 @@ qla25xx_init_req_que(struct scsi_qla_host *vha, struct req_que *req,
|
|
}
|
|
}
|
|
|
|
|
|
int
|
|
int
|
|
-qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp,
|
|
|
|
- uint8_t options)
|
|
|
|
|
|
+qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp)
|
|
{
|
|
{
|
|
int rval;
|
|
int rval;
|
|
unsigned long flags;
|
|
unsigned long flags;
|
|
@@ -3153,7 +3151,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp,
|
|
struct qla_hw_data *ha = vha->hw;
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
|
|
|
mcp->mb[0] = MBC_INITIALIZE_MULTIQ;
|
|
mcp->mb[0] = MBC_INITIALIZE_MULTIQ;
|
|
- mcp->mb[1] = options;
|
|
|
|
|
|
+ mcp->mb[1] = rsp->options;
|
|
mcp->mb[2] = MSW(LSD(rsp->dma));
|
|
mcp->mb[2] = MSW(LSD(rsp->dma));
|
|
mcp->mb[3] = LSW(LSD(rsp->dma));
|
|
mcp->mb[3] = LSW(LSD(rsp->dma));
|
|
mcp->mb[6] = MSW(MSD(rsp->dma));
|
|
mcp->mb[6] = MSW(MSD(rsp->dma));
|
|
@@ -3178,7 +3176,7 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp,
|
|
mcp->tov = 60;
|
|
mcp->tov = 60;
|
|
|
|
|
|
spin_lock_irqsave(&ha->hardware_lock, flags);
|
|
spin_lock_irqsave(&ha->hardware_lock, flags);
|
|
- if (!(options & BIT_0)) {
|
|
|
|
|
|
+ if (!(rsp->options & BIT_0)) {
|
|
WRT_REG_DWORD(®->rsp_q_out, 0);
|
|
WRT_REG_DWORD(®->rsp_q_out, 0);
|
|
WRT_REG_DWORD(®->rsp_q_in, 0);
|
|
WRT_REG_DWORD(®->rsp_q_in, 0);
|
|
}
|
|
}
|
|
@@ -3193,3 +3191,29 @@ qla25xx_init_rsp_que(struct scsi_qla_host *vha, struct rsp_que *rsp,
|
|
return rval;
|
|
return rval;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+int
|
|
|
|
+qla81xx_idc_ack(scsi_qla_host_t *vha, uint16_t *mb)
|
|
|
|
+{
|
|
|
|
+ int rval;
|
|
|
|
+ mbx_cmd_t mc;
|
|
|
|
+ mbx_cmd_t *mcp = &mc;
|
|
|
|
+
|
|
|
|
+ DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
|
|
|
|
+
|
|
|
|
+ mcp->mb[0] = MBC_IDC_ACK;
|
|
|
|
+ memcpy(&mcp->mb[1], mb, QLA_IDC_ACK_REGS * sizeof(uint16_t));
|
|
|
|
+ mcp->out_mb = MBX_7|MBX_6|MBX_5|MBX_4|MBX_3|MBX_2|MBX_1|MBX_0;
|
|
|
|
+ mcp->in_mb = MBX_0;
|
|
|
|
+ mcp->tov = MBX_TOV_SECONDS;
|
|
|
|
+ mcp->flags = 0;
|
|
|
|
+ rval = qla2x00_mailbox_command(vha, mcp);
|
|
|
|
+
|
|
|
|
+ if (rval != QLA_SUCCESS) {
|
|
|
|
+ DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__,
|
|
|
|
+ vha->host_no, rval, mcp->mb[0]));
|
|
|
|
+ } else {
|
|
|
|
+ DEBUG11(printk("%s(%ld): done.\n", __func__, vha->host_no));
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return rval;
|
|
|
|
+}
|