|
@@ -2786,44 +2786,6 @@ qla2x00_disable_fce_trace(scsi_qla_host_t *vha, uint64_t *wr, uint64_t *rd)
|
|
|
return rval;
|
|
|
}
|
|
|
|
|
|
-int
|
|
|
-qla2x00_read_sfp(scsi_qla_host_t *vha, dma_addr_t sfp_dma, uint16_t addr,
|
|
|
- uint16_t off, uint16_t count)
|
|
|
-{
|
|
|
- int rval;
|
|
|
- mbx_cmd_t mc;
|
|
|
- mbx_cmd_t *mcp = &mc;
|
|
|
-
|
|
|
- if (!IS_FWI2_CAPABLE(vha->hw))
|
|
|
- return QLA_FUNCTION_FAILED;
|
|
|
-
|
|
|
- DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
|
|
|
-
|
|
|
- mcp->mb[0] = MBC_READ_SFP;
|
|
|
- mcp->mb[1] = addr;
|
|
|
- mcp->mb[2] = MSW(sfp_dma);
|
|
|
- mcp->mb[3] = LSW(sfp_dma);
|
|
|
- mcp->mb[6] = MSW(MSD(sfp_dma));
|
|
|
- mcp->mb[7] = LSW(MSD(sfp_dma));
|
|
|
- mcp->mb[8] = count;
|
|
|
- mcp->mb[9] = off;
|
|
|
- mcp->mb[10] = 0;
|
|
|
- mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|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;
|
|
|
-}
|
|
|
-
|
|
|
int
|
|
|
qla2x00_get_idma_speed(scsi_qla_host_t *vha, uint16_t loop_id,
|
|
|
uint16_t *port_speed, uint16_t *mb)
|
|
@@ -3589,15 +3551,22 @@ qla81xx_restart_mpi_firmware(scsi_qla_host_t *vha)
|
|
|
}
|
|
|
|
|
|
int
|
|
|
-qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
|
|
|
- dma_addr_t sfp_dma, uint8_t *sfp, uint16_t len, uint16_t opt)
|
|
|
+qla2x00_read_sfp(scsi_qla_host_t *vha, dma_addr_t sfp_dma, uint8_t *sfp,
|
|
|
+ uint16_t dev, uint16_t off, uint16_t len, uint16_t opt)
|
|
|
{
|
|
|
int rval;
|
|
|
mbx_cmd_t mc;
|
|
|
mbx_cmd_t *mcp = &mc;
|
|
|
+ struct qla_hw_data *ha = vha->hw;
|
|
|
+
|
|
|
+ if (!IS_FWI2_CAPABLE(ha))
|
|
|
+ return QLA_FUNCTION_FAILED;
|
|
|
|
|
|
DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
|
|
|
|
|
|
+ if (len == 1)
|
|
|
+ opt |= BIT_0;
|
|
|
+
|
|
|
mcp->mb[0] = MBC_READ_SFP;
|
|
|
mcp->mb[1] = dev;
|
|
|
mcp->mb[2] = MSW(sfp_dma);
|
|
@@ -3605,7 +3574,7 @@ qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
|
|
|
mcp->mb[6] = MSW(MSD(sfp_dma));
|
|
|
mcp->mb[7] = LSW(MSD(sfp_dma));
|
|
|
mcp->mb[8] = len;
|
|
|
- mcp->mb[9] = adr;
|
|
|
+ mcp->mb[9] = off;
|
|
|
mcp->mb[10] = opt;
|
|
|
mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
|
|
|
mcp->in_mb = MBX_1|MBX_0;
|
|
@@ -3614,8 +3583,7 @@ qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
|
|
|
rval = qla2x00_mailbox_command(vha, mcp);
|
|
|
|
|
|
if (opt & BIT_0)
|
|
|
- if (sfp)
|
|
|
- *sfp = mcp->mb[1];
|
|
|
+ *sfp = mcp->mb[1];
|
|
|
|
|
|
if (rval != QLA_SUCCESS) {
|
|
|
DEBUG2_3_11(printk("%s(%ld): failed=%x (%x).\n", __func__,
|
|
@@ -3628,18 +3596,24 @@ qla2x00_read_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
|
|
|
}
|
|
|
|
|
|
int
|
|
|
-qla2x00_write_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
|
|
|
- dma_addr_t sfp_dma, uint8_t *sfp, uint16_t len, uint16_t opt)
|
|
|
+qla2x00_write_sfp(scsi_qla_host_t *vha, dma_addr_t sfp_dma, uint8_t *sfp,
|
|
|
+ uint16_t dev, uint16_t off, uint16_t len, uint16_t opt)
|
|
|
{
|
|
|
int rval;
|
|
|
mbx_cmd_t mc;
|
|
|
mbx_cmd_t *mcp = &mc;
|
|
|
+ struct qla_hw_data *ha = vha->hw;
|
|
|
+
|
|
|
+ if (!IS_FWI2_CAPABLE(ha))
|
|
|
+ return QLA_FUNCTION_FAILED;
|
|
|
|
|
|
DEBUG11(printk("%s(%ld): entered.\n", __func__, vha->host_no));
|
|
|
|
|
|
+ if (len == 1)
|
|
|
+ opt |= BIT_0;
|
|
|
+
|
|
|
if (opt & BIT_0)
|
|
|
- if (sfp)
|
|
|
- len = *sfp;
|
|
|
+ len = *sfp;
|
|
|
|
|
|
mcp->mb[0] = MBC_WRITE_SFP;
|
|
|
mcp->mb[1] = dev;
|
|
@@ -3648,10 +3622,10 @@ qla2x00_write_edc(scsi_qla_host_t *vha, uint16_t dev, uint16_t adr,
|
|
|
mcp->mb[6] = MSW(MSD(sfp_dma));
|
|
|
mcp->mb[7] = LSW(MSD(sfp_dma));
|
|
|
mcp->mb[8] = len;
|
|
|
- mcp->mb[9] = adr;
|
|
|
+ mcp->mb[9] = off;
|
|
|
mcp->mb[10] = opt;
|
|
|
mcp->out_mb = MBX_10|MBX_9|MBX_8|MBX_7|MBX_6|MBX_3|MBX_2|MBX_1|MBX_0;
|
|
|
- mcp->in_mb = MBX_0;
|
|
|
+ mcp->in_mb = MBX_1|MBX_0;
|
|
|
mcp->tov = MBX_TOV_SECONDS;
|
|
|
mcp->flags = 0;
|
|
|
rval = qla2x00_mailbox_command(vha, mcp);
|