|
@@ -240,6 +240,12 @@ qla2x00_ga_nxt(scsi_qla_host_t *vha, fc_port_t *fcport)
|
|
|
return (rval);
|
|
|
}
|
|
|
|
|
|
+static inline int
|
|
|
+qla2x00_gid_pt_rsp_size(scsi_qla_host_t *vha)
|
|
|
+{
|
|
|
+ return vha->hw->max_fibre_devices * 4 + 16;
|
|
|
+}
|
|
|
+
|
|
|
/**
|
|
|
* qla2x00_gid_pt() - SNS scan for fabric devices via GID_PT command.
|
|
|
* @ha: HA context
|
|
@@ -261,20 +267,21 @@ qla2x00_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
|
|
|
struct ct_sns_gid_pt_data *gid_data;
|
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
+ uint16_t gid_pt_rsp_size;
|
|
|
|
|
|
if (IS_QLA2100(ha) || IS_QLA2200(ha))
|
|
|
return qla2x00_sns_gid_pt(vha, list);
|
|
|
|
|
|
gid_data = NULL;
|
|
|
-
|
|
|
+ gid_pt_rsp_size = qla2x00_gid_pt_rsp_size(vha);
|
|
|
/* Issue GID_PT */
|
|
|
/* Prepare common MS IOCB */
|
|
|
ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GID_PT_REQ_SIZE,
|
|
|
- GID_PT_RSP_SIZE);
|
|
|
+ gid_pt_rsp_size);
|
|
|
|
|
|
/* Prepare CT request */
|
|
|
ct_req = qla2x00_prep_ct_req(&ha->ct_sns->p.req, GID_PT_CMD,
|
|
|
- GID_PT_RSP_SIZE);
|
|
|
+ gid_pt_rsp_size);
|
|
|
ct_rsp = &ha->ct_sns->p.rsp;
|
|
|
|
|
|
/* Prepare CT arguments -- port_type */
|
|
@@ -292,7 +299,7 @@ qla2x00_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
rval = QLA_FUNCTION_FAILED;
|
|
|
} else {
|
|
|
/* Set port IDs in switch info list. */
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
gid_data = &ct_rsp->rsp.gid_pt.entries[i];
|
|
|
list[i].d_id.b.domain = gid_data->port_id[0];
|
|
|
list[i].d_id.b.area = gid_data->port_id[1];
|
|
@@ -313,7 +320,7 @@ qla2x00_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
* single call. Return a failed status, and let GA_NXT handle
|
|
|
* the overload.
|
|
|
*/
|
|
|
- if (i == MAX_FIBRE_DEVICES)
|
|
|
+ if (i == ha->max_fibre_devices)
|
|
|
rval = QLA_FUNCTION_FAILED;
|
|
|
}
|
|
|
|
|
@@ -330,7 +337,7 @@ qla2x00_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
int
|
|
|
qla2x00_gpn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
{
|
|
|
- int rval;
|
|
|
+ int rval = QLA_SUCCESS;
|
|
|
uint16_t i;
|
|
|
|
|
|
ms_iocb_entry_t *ms_pkt;
|
|
@@ -341,7 +348,7 @@ qla2x00_gpn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
if (IS_QLA2100(ha) || IS_QLA2200(ha))
|
|
|
return qla2x00_sns_gpn_id(vha, list);
|
|
|
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
/* Issue GPN_ID */
|
|
|
/* Prepare common MS IOCB */
|
|
|
ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GPN_ID_REQ_SIZE,
|
|
@@ -391,7 +398,7 @@ qla2x00_gpn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
int
|
|
|
qla2x00_gnn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
{
|
|
|
- int rval;
|
|
|
+ int rval = QLA_SUCCESS;
|
|
|
uint16_t i;
|
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
ms_iocb_entry_t *ms_pkt;
|
|
@@ -401,7 +408,7 @@ qla2x00_gnn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
if (IS_QLA2100(ha) || IS_QLA2200(ha))
|
|
|
return qla2x00_sns_gnn_id(vha, list);
|
|
|
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
/* Issue GNN_ID */
|
|
|
/* Prepare common MS IOCB */
|
|
|
ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GNN_ID_REQ_SIZE,
|
|
@@ -735,7 +742,7 @@ qla2x00_prep_sns_cmd(scsi_qla_host_t *vha, uint16_t cmd, uint16_t scmd_len,
|
|
|
static int
|
|
|
qla2x00_sns_ga_nxt(scsi_qla_host_t *vha, fc_port_t *fcport)
|
|
|
{
|
|
|
- int rval;
|
|
|
+ int rval = QLA_SUCCESS;
|
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
struct sns_cmd_pkt *sns_cmd;
|
|
|
|
|
@@ -814,11 +821,14 @@ qla2x00_sns_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
uint16_t i;
|
|
|
uint8_t *entry;
|
|
|
struct sns_cmd_pkt *sns_cmd;
|
|
|
+ uint16_t gid_pt_sns_data_size;
|
|
|
+
|
|
|
+ gid_pt_sns_data_size = qla2x00_gid_pt_rsp_size(vha);
|
|
|
|
|
|
/* Issue GID_PT. */
|
|
|
/* Prepare SNS command request. */
|
|
|
sns_cmd = qla2x00_prep_sns_cmd(vha, GID_PT_CMD, GID_PT_SNS_SCMD_LEN,
|
|
|
- GID_PT_SNS_DATA_SIZE);
|
|
|
+ gid_pt_sns_data_size);
|
|
|
|
|
|
/* Prepare SNS command arguments -- port_type. */
|
|
|
sns_cmd->p.cmd.param[0] = NS_NX_PORT_TYPE;
|
|
@@ -839,7 +849,7 @@ qla2x00_sns_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
rval = QLA_FUNCTION_FAILED;
|
|
|
} else {
|
|
|
/* Set port IDs in switch info list. */
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
entry = &sns_cmd->p.gid_data[(i * 4) + 16];
|
|
|
list[i].d_id.b.domain = entry[1];
|
|
|
list[i].d_id.b.area = entry[2];
|
|
@@ -858,7 +868,7 @@ qla2x00_sns_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
* single call. Return a failed status, and let GA_NXT handle
|
|
|
* the overload.
|
|
|
*/
|
|
|
- if (i == MAX_FIBRE_DEVICES)
|
|
|
+ if (i == ha->max_fibre_devices)
|
|
|
rval = QLA_FUNCTION_FAILED;
|
|
|
}
|
|
|
|
|
@@ -877,12 +887,12 @@ qla2x00_sns_gid_pt(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
static int
|
|
|
qla2x00_sns_gpn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
{
|
|
|
- int rval;
|
|
|
+ int rval = QLA_SUCCESS;
|
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
uint16_t i;
|
|
|
struct sns_cmd_pkt *sns_cmd;
|
|
|
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
/* Issue GPN_ID */
|
|
|
/* Prepare SNS command request. */
|
|
|
sns_cmd = qla2x00_prep_sns_cmd(vha, GPN_ID_CMD,
|
|
@@ -933,12 +943,12 @@ qla2x00_sns_gpn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
static int
|
|
|
qla2x00_sns_gnn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
{
|
|
|
- int rval;
|
|
|
+ int rval = QLA_SUCCESS;
|
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
uint16_t i;
|
|
|
struct sns_cmd_pkt *sns_cmd;
|
|
|
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
/* Issue GNN_ID */
|
|
|
/* Prepare SNS command request. */
|
|
|
sns_cmd = qla2x00_prep_sns_cmd(vha, GNN_ID_CMD,
|
|
@@ -1734,7 +1744,7 @@ qla2x00_fdmi_register(scsi_qla_host_t *vha)
|
|
|
int
|
|
|
qla2x00_gfpn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
{
|
|
|
- int rval;
|
|
|
+ int rval = QLA_SUCCESS;
|
|
|
uint16_t i;
|
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
ms_iocb_entry_t *ms_pkt;
|
|
@@ -1744,7 +1754,7 @@ qla2x00_gfpn_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
if (!IS_IIDMA_CAPABLE(ha))
|
|
|
return QLA_FUNCTION_FAILED;
|
|
|
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
/* Issue GFPN_ID */
|
|
|
/* Prepare common MS IOCB */
|
|
|
ms_pkt = ha->isp_ops->prep_ms_iocb(vha, GFPN_ID_REQ_SIZE,
|
|
@@ -1856,7 +1866,7 @@ qla2x00_gpsc(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
if (rval)
|
|
|
return rval;
|
|
|
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
/* Issue GFPN_ID */
|
|
|
/* Prepare common MS IOCB */
|
|
|
ms_pkt = qla24xx_prep_ms_fm_iocb(vha, GPSC_REQ_SIZE,
|
|
@@ -1957,7 +1967,7 @@ qla2x00_gff_id(scsi_qla_host_t *vha, sw_info_t *list)
|
|
|
struct qla_hw_data *ha = vha->hw;
|
|
|
uint8_t fcp_scsi_features = 0;
|
|
|
|
|
|
- for (i = 0; i < MAX_FIBRE_DEVICES; i++) {
|
|
|
+ for (i = 0; i < ha->max_fibre_devices; i++) {
|
|
|
/* Set default FC4 Type as UNKNOWN so the default is to
|
|
|
* Process this port */
|
|
|
list[i].fc4_type = FC4_TYPE_UNKNOWN;
|