[SCSI] qla2xxx: Export class-of-service (COS) information.
Export COS information for the fc_host and fc_remote_port objects added by the driver. Signed-off-by: Andrew Vasquez <andrew.vasquez@qlogic.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
This commit is contained in:
committed by
James Bottomley
parent
7524f9b9e7
commit
ad3e0edace
@@ -304,10 +304,13 @@ struct fc_function_template qla2xxx_transport_functions = {
|
|||||||
|
|
||||||
.show_host_node_name = 1,
|
.show_host_node_name = 1,
|
||||||
.show_host_port_name = 1,
|
.show_host_port_name = 1,
|
||||||
|
.show_host_supported_classes = 1,
|
||||||
|
|
||||||
.get_host_port_id = qla2x00_get_host_port_id,
|
.get_host_port_id = qla2x00_get_host_port_id,
|
||||||
.show_host_port_id = 1,
|
.show_host_port_id = 1,
|
||||||
|
|
||||||
.dd_fcrport_size = sizeof(struct fc_port *),
|
.dd_fcrport_size = sizeof(struct fc_port *),
|
||||||
|
.show_rport_supported_classes = 1,
|
||||||
|
|
||||||
.get_starget_node_name = qla2x00_get_starget_node_name,
|
.get_starget_node_name = qla2x00_get_starget_node_name,
|
||||||
.show_starget_node_name = 1,
|
.show_starget_node_name = 1,
|
||||||
@@ -329,4 +332,5 @@ qla2x00_init_host_attr(scsi_qla_host_t *ha)
|
|||||||
be64_to_cpu(*(uint64_t *)ha->init_cb->node_name);
|
be64_to_cpu(*(uint64_t *)ha->init_cb->node_name);
|
||||||
fc_host_port_name(ha->host) =
|
fc_host_port_name(ha->host) =
|
||||||
be64_to_cpu(*(uint64_t *)ha->init_cb->port_name);
|
be64_to_cpu(*(uint64_t *)ha->init_cb->port_name);
|
||||||
|
fc_host_supported_classes(ha->host) = FC_COS_CLASS3;
|
||||||
}
|
}
|
||||||
|
@@ -1673,6 +1673,7 @@ typedef struct fc_port {
|
|||||||
uint8_t cur_path; /* current path id */
|
uint8_t cur_path; /* current path id */
|
||||||
|
|
||||||
struct fc_rport *rport;
|
struct fc_rport *rport;
|
||||||
|
u32 supported_classes;
|
||||||
} fc_port_t;
|
} fc_port_t;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -1697,6 +1697,7 @@ qla2x00_alloc_fcport(scsi_qla_host_t *ha, int flags)
|
|||||||
fcport->iodesc_idx_sent = IODESC_INVALID_INDEX;
|
fcport->iodesc_idx_sent = IODESC_INVALID_INDEX;
|
||||||
atomic_set(&fcport->state, FCS_UNCONFIGURED);
|
atomic_set(&fcport->state, FCS_UNCONFIGURED);
|
||||||
fcport->flags = FCF_RLC_SUPPORT;
|
fcport->flags = FCF_RLC_SUPPORT;
|
||||||
|
fcport->supported_classes = FC_COS_UNSPECIFIED;
|
||||||
|
|
||||||
return (fcport);
|
return (fcport);
|
||||||
}
|
}
|
||||||
@@ -2075,6 +2076,7 @@ qla2x00_reg_remote_port(scsi_qla_host_t *ha, fc_port_t *fcport)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
rport->dd_data = fcport;
|
rport->dd_data = fcport;
|
||||||
|
rport->supported_classes = fcport->supported_classes;
|
||||||
|
|
||||||
rport_ids.roles = FC_RPORT_ROLE_UNKNOWN;
|
rport_ids.roles = FC_RPORT_ROLE_UNKNOWN;
|
||||||
if (fcport->port_type == FCT_INITIATOR)
|
if (fcport->port_type == FCT_INITIATOR)
|
||||||
@@ -2794,6 +2796,11 @@ qla2x00_fabric_login(scsi_qla_host_t *ha, fc_port_t *fcport,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mb[10] & BIT_0)
|
||||||
|
fcport->supported_classes |= FC_COS_CLASS2;
|
||||||
|
if (mb[10] & BIT_1)
|
||||||
|
fcport->supported_classes |= FC_COS_CLASS3;
|
||||||
|
|
||||||
rval = QLA_SUCCESS;
|
rval = QLA_SUCCESS;
|
||||||
break;
|
break;
|
||||||
} else if (mb[0] == MBS_LOOP_ID_USED) {
|
} else if (mb[0] == MBS_LOOP_ID_USED) {
|
||||||
|
@@ -19,6 +19,7 @@
|
|||||||
#include "qla_def.h"
|
#include "qla_def.h"
|
||||||
|
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
|
#include <scsi/scsi_transport_fc.h>
|
||||||
|
|
||||||
static void
|
static void
|
||||||
qla2x00_mbx_sem_timeout(unsigned long data)
|
qla2x00_mbx_sem_timeout(unsigned long data)
|
||||||
@@ -1326,6 +1327,10 @@ qla2x00_get_port_database(scsi_qla_host_t *ha, fc_port_t *fcport, uint8_t opt)
|
|||||||
fcport->port_type = FCT_INITIATOR;
|
fcport->port_type = FCT_INITIATOR;
|
||||||
else
|
else
|
||||||
fcport->port_type = FCT_TARGET;
|
fcport->port_type = FCT_TARGET;
|
||||||
|
|
||||||
|
/* Passback COS information. */
|
||||||
|
fcport->supported_classes = (pd->options & BIT_4) ?
|
||||||
|
FC_COS_CLASS2: FC_COS_CLASS3;
|
||||||
}
|
}
|
||||||
|
|
||||||
gpd_error_out:
|
gpd_error_out:
|
||||||
@@ -1661,6 +1666,13 @@ qla24xx_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain,
|
|||||||
mb[1] |= BIT_1;
|
mb[1] |= BIT_1;
|
||||||
} else
|
} else
|
||||||
mb[1] = BIT_0;
|
mb[1] = BIT_0;
|
||||||
|
|
||||||
|
/* Passback COS information. */
|
||||||
|
mb[10] = 0;
|
||||||
|
if (lg->io_parameter[7] || lg->io_parameter[8])
|
||||||
|
mb[10] |= BIT_0; /* Class 2. */
|
||||||
|
if (lg->io_parameter[9] || lg->io_parameter[10])
|
||||||
|
mb[10] |= BIT_1; /* Class 3. */
|
||||||
}
|
}
|
||||||
|
|
||||||
dma_pool_free(ha->s_dma_pool, lg, lg_dma);
|
dma_pool_free(ha->s_dma_pool, lg, lg_dma);
|
||||||
@@ -1723,6 +1735,8 @@ qla2x00_login_fabric(scsi_qla_host_t *ha, uint16_t loop_id, uint8_t domain,
|
|||||||
mb[2] = mcp->mb[2];
|
mb[2] = mcp->mb[2];
|
||||||
mb[6] = mcp->mb[6];
|
mb[6] = mcp->mb[6];
|
||||||
mb[7] = mcp->mb[7];
|
mb[7] = mcp->mb[7];
|
||||||
|
/* COS retrieved from Get-Port-Database mailbox command. */
|
||||||
|
mb[10] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (rval != QLA_SUCCESS) {
|
if (rval != QLA_SUCCESS) {
|
||||||
|
Reference in New Issue
Block a user