Commit 818c7f87 authored by Joe Carnuccio's avatar Joe Carnuccio Committed by Martin K. Petersen
Browse files

scsi: qla2xxx: Add changes in preparation for vendor extended FDMI/RDP

This patch prepares code for implementing Vendor specific extended FDMI/RDP
commands. It also addes support for MBC_GET_PORT_DATABASE and
MBC_GET_RNID_PARAMS commands.

Link: https://lore.kernel.org/r/20200212214436.25532-7-hmadhani@marvell.com


Signed-off-by: default avatarJoe Carnuccio <joe.carnuccio@qlogic.com>
Signed-off-by: default avatarHimanshu Madhani <hmadhani@marvell.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent 974c0860
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1261,7 +1261,9 @@ static inline bool qla2xxx_is_valid_mbs(unsigned int mbs)
#define	MBX_1		BIT_1
#define	MBX_0		BIT_0

#define RNID_TYPE_ELS_CMD	0x5
#define RNID_TYPE_PORT_LOGIN	0x7
#define RNID_BUFFER_CREDITS	0x8
#define RNID_TYPE_SET_VERSION	0x9
#define RNID_TYPE_ASIC_TEMP	0xC

@@ -4459,6 +4461,7 @@ typedef struct scsi_qla_host {
	uint8_t		node_name[WWN_SIZE];
	uint8_t		port_name[WWN_SIZE];
	uint8_t		fabric_node_name[WWN_SIZE];
	uint8_t		fabric_port_name[WWN_SIZE];

	struct		nvme_fc_local_port *nvme_local_port;
	struct completion nvme_del_done;
+4 −0
Original line number Diff line number Diff line
@@ -31,6 +31,9 @@
#define PDO_FORCE_ADISC		BIT_1
#define PDO_FORCE_PLOGI		BIT_0

struct buffer_credit_24xx {
	u32 parameter[28];
};

#define	PORT_DATABASE_24XX_SIZE		64
struct port_database_24xx {
@@ -1883,6 +1886,7 @@ struct nvram_81xx {
	 * BIT 6-15 = Unused
	 */
	uint16_t enhanced_features;

	uint16_t reserved_24[4];

	/* Offset 416. */
+11 −1
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ extern int qla81xx_nvram_config(struct scsi_qla_host *);
extern void qla2x00_update_fw_options(struct scsi_qla_host *);
extern void qla24xx_update_fw_options(scsi_qla_host_t *);
extern void qla81xx_update_fw_options(scsi_qla_host_t *);
extern void qla83xx_update_fw_options(scsi_qla_host_t *);

extern int qla2x00_load_risc(struct scsi_qla_host *, uint32_t *);
extern int qla24xx_load_risc(scsi_qla_host_t *, uint32_t *);
extern int qla81xx_load_risc(scsi_qla_host_t *, uint32_t *);
@@ -142,6 +144,7 @@ extern int qlport_down_retry;
extern int ql2xplogiabsentdevice;
extern int ql2xloginretrycount;
extern int ql2xfdmienable;
extern int ql2xsmartsan;
extern int ql2xallocfwdump;
extern int ql2xextended_error_logging;
extern int ql2xiidmaenable;
@@ -353,6 +356,9 @@ qla2x00_init_firmware(scsi_qla_host_t *, uint16_t);
extern int
qla2x00_get_port_database(scsi_qla_host_t *, fc_port_t *, uint8_t);

extern int
qla24xx_get_port_database(scsi_qla_host_t *, u16, struct port_database_24xx *);

extern int
qla2x00_get_firmware_state(scsi_qla_host_t *, uint16_t *);

@@ -451,6 +457,10 @@ qla82xx_set_driver_version(scsi_qla_host_t *, char *);
extern int
qla25xx_set_driver_version(scsi_qla_host_t *, char *);

extern int
qla24xx_get_buffer_credits(scsi_qla_host_t *, struct buffer_credit_24xx *,
	dma_addr_t);

extern int
qla2x00_read_sfp(scsi_qla_host_t *, dma_addr_t, uint8_t *,
	uint16_t, uint16_t, uint16_t, uint16_t);
@@ -656,7 +666,7 @@ extern void *qla24xx_prep_ms_fdmi_iocb(scsi_qla_host_t *, uint32_t, uint32_t);
extern int qla2x00_fdmi_register(scsi_qla_host_t *);
extern int qla2x00_gfpn_id(scsi_qla_host_t *, sw_info_t *);
extern int qla2x00_gpsc(scsi_qla_host_t *, sw_info_t *);
extern void qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t);
extern size_t qla2x00_get_sym_node_name(scsi_qla_host_t *, uint8_t *, size_t);
extern int qla2x00_chk_ms_status(scsi_qla_host_t *, ms_iocb_entry_t *,
	struct ct_sns_rsp *, const char *);
extern void qla2x00_async_iocb_timeout(void *data);
+7 −8
Original line number Diff line number Diff line
@@ -844,18 +844,17 @@ static int qla_async_rnnid(scsi_qla_host_t *vha, port_id_t *d_id,
	return rval;
}

void
size_t
qla2x00_get_sym_node_name(scsi_qla_host_t *vha, uint8_t *snn, size_t size)
{
	struct qla_hw_data *ha = vha->hw;

	if (IS_QLAFX00(ha))
		snprintf(snn, size, "%s FW:v%s DVR:v%s", ha->model_number,
		    ha->mr.fw_version, qla2x00_version_str);
	else
		snprintf(snn, size,
		    "%s FW:v%d.%02d.%02d DVR:v%s", ha->model_number,
		    ha->fw_major_version, ha->fw_minor_version,
		return scnprintf(snn, size, "%s FW:v%s DVR:v%s",
		    ha->model_number, ha->mr.fw_version, qla2x00_version_str);

	return scnprintf(snn, size, "%s FW:v%d.%02d.%02d DVR:v%s",
	    ha->model_number, ha->fw_major_version, ha->fw_minor_version,
	    ha->fw_subminor_version, qla2x00_version_str);
}

+20 −8
Original line number Diff line number Diff line
@@ -5541,6 +5541,10 @@ qla2x00_configure_fabric(scsi_qla_host_t *vha)
	}
	vha->device_flags |= SWITCH_FOUND;

	rval = qla2x00_get_port_name(vha, loop_id, vha->fabric_port_name, 0);
	if (rval != QLA_SUCCESS)
		ql_dbg(ql_dbg_disc, vha, 0x20ff,
		    "Failed to get Fabric Port Name\n");

	if (qla_tgt_mode_enabled(vha) || qla_dual_mode_enabled(vha)) {
		rval = qla2x00_send_change_request(vha, 0x3, 0);
@@ -5550,15 +5554,9 @@ qla2x00_configure_fabric(scsi_qla_host_t *vha)
			    rval);
	}


	do {
		qla2x00_mgmt_svr_login(vha);

		/* FDMI support. */
		if (ql2xfdmienable &&
		    test_and_clear_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags))
			qla2x00_fdmi_register(vha);

		/* Ensure we are logged into the SNS. */
		loop_id = NPH_SNS_LID(ha);
		rval = ha->isp_ops->fabric_login(vha, loop_id, 0xff, 0xff,
@@ -5570,6 +5568,12 @@ qla2x00_configure_fabric(scsi_qla_host_t *vha)
			set_bit(LOOP_RESYNC_NEEDED, &vha->dpc_flags);
			return rval;
		}

		/* FDMI support. */
		if (ql2xfdmienable &&
		    test_and_clear_bit(REGISTER_FDMI_NEEDED, &vha->dpc_flags))
			qla2x00_fdmi_register(vha);

		if (test_and_clear_bit(REGISTER_FC4_NEEDED, &vha->dpc_flags)) {
			if (qla2x00_rft_id(vha)) {
				/* EMPTY */
@@ -8663,6 +8667,14 @@ qla82xx_restart_isp(scsi_qla_host_t *vha)
	return status;
}

void
qla83xx_update_fw_options(scsi_qla_host_t *vha)
{
	struct qla_hw_data *ha = vha->hw;

	qla2x00_set_fw_options(vha, ha->fw_options);
}

void
qla81xx_update_fw_options(scsi_qla_host_t *vha)
{
Loading