Daniel Wagner 59d57a
From: Quinn Tran <qutran@marvell.com>
Daniel Wagner 59d57a
Date: Mon, 6 Jun 2022 21:46:18 -0700
Daniel Wagner 59d57a
Subject: scsi: qla2xxx: edif: bsg refactor
Denis Kirjanov 718367
Patch-mainline: v5.20-rc1
Daniel Wagner 59d57a
Git-commit: 7a7b0b4865d3490f62d6ef1a3aa39fa2b47859a4
Daniel Wagner 59d57a
References: bsc#1201958
Daniel Wagner 59d57a
Daniel Wagner 59d57a
 - Add version field to edif bsg for future enhancement.
Daniel Wagner 59d57a
Daniel Wagner 59d57a
 - Add version edif bsg version check
Daniel Wagner 59d57a
Daniel Wagner 59d57a
 - Remove unused interfaces and fields.
Daniel Wagner 59d57a
Daniel Wagner 59d57a
Link: https://lore.kernel.org/r/20220607044627.19563-3-njavali@marvell.com
Daniel Wagner 59d57a
Fixes: dd30706e73b7 ("scsi: qla2xxx: edif: Add key update")
Daniel Wagner 59d57a
Signed-off-by: Quinn Tran <qutran@marvell.com>
Daniel Wagner 59d57a
Signed-off-by: Nilesh Javali <njavali@marvell.com>
Daniel Wagner 59d57a
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Daniel Wagner 59d57a
Acked-by: Daniel Wagner <dwagner@suse.de>
Daniel Wagner 59d57a
---
Daniel Wagner 59d57a
 drivers/scsi/qla2xxx/qla_edif.c     |   32 +++++++++---
Daniel Wagner 59d57a
 drivers/scsi/qla2xxx/qla_edif_bsg.h |   90 ++++++++++++++++++++++--------------
Daniel Wagner 59d57a
 2 files changed, 79 insertions(+), 43 deletions(-)
Daniel Wagner 59d57a
Daniel Wagner 59d57a
--- a/drivers/scsi/qla2xxx/qla_edif_bsg.h
Daniel Wagner 59d57a
+++ b/drivers/scsi/qla2xxx/qla_edif_bsg.h
Daniel Wagner 59d57a
@@ -7,13 +7,15 @@
Daniel Wagner 59d57a
 #ifndef __QLA_EDIF_BSG_H
Daniel Wagner 59d57a
 #define __QLA_EDIF_BSG_H
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
+#define EDIF_VERSION1 1
Daniel Wagner 59d57a
+
Daniel Wagner 59d57a
 /* BSG Vendor specific commands */
Daniel Wagner 59d57a
 #define	ELS_MAX_PAYLOAD		2112
Daniel Wagner 59d57a
 #ifndef	WWN_SIZE
Daniel Wagner 59d57a
 #define WWN_SIZE		8
Daniel Wagner 59d57a
 #endif
Daniel Wagner 59d57a
-#define	VND_CMD_APP_RESERVED_SIZE	32
Daniel Wagner 59d57a
-
Daniel Wagner 59d57a
+#define VND_CMD_APP_RESERVED_SIZE	28
Daniel Wagner 59d57a
+#define VND_CMD_PAD_SIZE                3
Daniel Wagner 59d57a
 enum auth_els_sub_cmd {
Daniel Wagner 59d57a
 	SEND_ELS = 0,
Daniel Wagner 59d57a
 	SEND_ELS_REPLY,
Daniel Wagner 59d57a
@@ -28,7 +30,9 @@ struct extra_auth_els {
Daniel Wagner 59d57a
 #define BSG_CTL_FLAG_LS_ACC     1
Daniel Wagner 59d57a
 #define BSG_CTL_FLAG_LS_RJT     2
Daniel Wagner 59d57a
 #define BSG_CTL_FLAG_TRM        3
Daniel Wagner 59d57a
-	uint8_t         extra_rsvd[3];
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[2];
Daniel Wagner 59d57a
+	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct qla_bsg_auth_els_request {
Daniel Wagner 59d57a
@@ -39,51 +43,46 @@ struct qla_bsg_auth_els_request {
Daniel Wagner 59d57a
 struct qla_bsg_auth_els_reply {
Daniel Wagner 59d57a
 	struct fc_bsg_reply r;
Daniel Wagner 59d57a
 	uint32_t rx_xchg_address;
Daniel Wagner 59d57a
+	uint8_t version;
Daniel Wagner 59d57a
+	uint8_t pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 };
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct app_id {
Daniel Wagner 59d57a
 	int		app_vid;
Daniel Wagner 59d57a
-	uint8_t		app_key[32];
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct app_start_reply {
Daniel Wagner 59d57a
 	uint32_t	host_support_edif;
Daniel Wagner 59d57a
 	uint32_t	edif_enode_active;
Daniel Wagner 59d57a
 	uint32_t	edif_edb_active;
Daniel Wagner 59d57a
-	uint32_t	reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct app_start {
Daniel Wagner 59d57a
 	struct app_id	app_info;
Daniel Wagner 59d57a
-	uint32_t	prli_to;
Daniel Wagner 59d57a
-	uint32_t	key_shred;
Daniel Wagner 59d57a
 	uint8_t         app_start_flags;
Daniel Wagner 59d57a
-	uint8_t         reserved[VND_CMD_APP_RESERVED_SIZE - 1];
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[2];
Daniel Wagner 59d57a
+	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct app_stop {
Daniel Wagner 59d57a
 	struct app_id	app_info;
Daniel Wagner 59d57a
-	char		buf[16];
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct app_plogi_reply {
Daniel Wagner 59d57a
 	uint32_t	prli_status;
Daniel Wagner 59d57a
-	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
-} __packed;
Daniel Wagner 59d57a
-
Daniel Wagner 59d57a
-#define	RECFG_TIME	1
Daniel Wagner 59d57a
-#define	RECFG_BYTES	2
Daniel Wagner 59d57a
-
Daniel Wagner 59d57a
-struct app_rekey_cfg {
Daniel Wagner 59d57a
-	struct app_id app_info;
Daniel Wagner 59d57a
-	uint8_t	 rekey_mode;
Daniel Wagner 59d57a
-	port_id_t d_id;
Daniel Wagner 59d57a
-	uint8_t	 force;
Daniel Wagner 59d57a
-	union {
Daniel Wagner 59d57a
-		int64_t bytes;
Daniel Wagner 59d57a
-		int64_t time;
Daniel Wagner 59d57a
-	} rky_units;
Daniel Wagner 59d57a
-
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
 	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
@@ -91,7 +90,9 @@ struct app_pinfo_req {
Daniel Wagner 59d57a
 	struct app_id app_info;
Daniel Wagner 59d57a
 	uint8_t	 num_ports;
Daniel Wagner 59d57a
 	port_id_t remote_pid;
Daniel Wagner 59d57a
-	uint8_t	 reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct app_pinfo {
Daniel Wagner 59d57a
@@ -103,11 +104,8 @@ struct app_pinfo {
Daniel Wagner 59d57a
 #define	VND_CMD_RTYPE_INITIATOR		2
Daniel Wagner 59d57a
 	uint8_t	remote_state;
Daniel Wagner 59d57a
 	uint8_t	auth_state;
Daniel Wagner 59d57a
-	uint8_t	rekey_mode;
Daniel Wagner 59d57a
-	int64_t	rekey_count;
Daniel Wagner 59d57a
-	int64_t	rekey_config_value;
Daniel Wagner 59d57a
-	int64_t	rekey_consumed_value;
Daniel Wagner 59d57a
-
Daniel Wagner 59d57a
+	uint8_t	version;
Daniel Wagner 59d57a
+	uint8_t	pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
 	uint8_t	reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
@@ -120,6 +118,8 @@ struct app_pinfo {
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct app_pinfo_reply {
Daniel Wagner 59d57a
 	uint8_t		port_count;
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
 	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 	struct app_pinfo ports[0];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
@@ -127,6 +127,8 @@ struct app_pinfo_reply {
Daniel Wagner 59d57a
 struct app_sinfo_req {
Daniel Wagner 59d57a
 	struct app_id	app_info;
Daniel Wagner 59d57a
 	uint8_t		num_ports;
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
 	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
@@ -140,6 +142,9 @@ struct app_sinfo {
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 struct app_stats_reply {
Daniel Wagner 59d57a
 	uint8_t		elem_count;
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t		reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 	struct app_sinfo elem[0];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
@@ -163,9 +168,11 @@ struct qla_sa_update_frame {
Daniel Wagner 59d57a
 	uint8_t		node_name[WWN_SIZE];
Daniel Wagner 59d57a
 	uint8_t		port_name[WWN_SIZE];
Daniel Wagner 59d57a
 	port_id_t	port_id;
Daniel Wagner 59d57a
+	uint8_t		version;
Daniel Wagner 59d57a
+	uint8_t		pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t		reserved2[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
-// used for edif mgmt bsg interface
Daniel Wagner 59d57a
 #define	QL_VND_SC_UNDEF		0
Daniel Wagner 59d57a
 #define	QL_VND_SC_SA_UPDATE	1
Daniel Wagner 59d57a
 #define	QL_VND_SC_APP_START	2
Daniel Wagner 59d57a
@@ -175,6 +182,8 @@ struct qla_sa_update_frame {
Daniel Wagner 59d57a
 #define	QL_VND_SC_REKEY_CONFIG	6
Daniel Wagner 59d57a
 #define	QL_VND_SC_GET_FCINFO	7
Daniel Wagner 59d57a
 #define	QL_VND_SC_GET_STATS	8
Daniel Wagner 59d57a
+#define QL_VND_SC_AEN_COMPLETE  9
Daniel Wagner 59d57a
+
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 /* Application interface data structure for rtn data */
Daniel Wagner 59d57a
 #define	EXT_DEF_EVENT_DATA_SIZE	64
Daniel Wagner 59d57a
@@ -191,7 +200,9 @@ struct edif_sa_update_aen {
Daniel Wagner 59d57a
 	port_id_t port_id;
Daniel Wagner 59d57a
 	uint32_t key_type;	/* Tx (1) or RX (2) */
Daniel Wagner 59d57a
 	uint32_t status;	/* 0 succes,  1 failed, 2 timeout , 3 error */
Daniel Wagner 59d57a
-	uint8_t		reserved[16];
Daniel Wagner 59d57a
+	uint8_t	version;
Daniel Wagner 59d57a
+	uint8_t	pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t	reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 #define	QL_VND_SA_STAT_SUCCESS	0
Daniel Wagner 59d57a
@@ -212,7 +223,18 @@ struct auth_complete_cmd {
Daniel Wagner 59d57a
 		uint8_t  wwpn[WWN_SIZE];
Daniel Wagner 59d57a
 		port_id_t d_id;
Daniel Wagner 59d57a
 	} u;
Daniel Wagner 59d57a
-	uint32_t reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
+	uint8_t	version;
Daniel Wagner 59d57a
+	uint8_t	pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t	reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
+} __packed;
Daniel Wagner 59d57a
+
Daniel Wagner 59d57a
+struct aen_complete_cmd {
Daniel Wagner 59d57a
+	struct app_id app_info;
Daniel Wagner 59d57a
+	port_id_t   port_id;
Daniel Wagner 59d57a
+	uint32_t    event_code;
Daniel Wagner 59d57a
+	uint8_t     version;
Daniel Wagner 59d57a
+	uint8_t     pad[VND_CMD_PAD_SIZE];
Daniel Wagner 59d57a
+	uint8_t     reserved[VND_CMD_APP_RESERVED_SIZE];
Daniel Wagner 59d57a
 } __packed;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 #define RX_DELAY_DELETE_TIMEOUT 20
Daniel Wagner 59d57a
--- a/drivers/scsi/qla2xxx/qla_edif.c
Daniel Wagner 59d57a
+++ b/drivers/scsi/qla2xxx/qla_edif.c
Daniel Wagner 59d57a
@@ -280,14 +280,19 @@ qla_edif_app_check(scsi_qla_host_t *vha,
Daniel Wagner 59d57a
 {
Daniel Wagner 59d57a
 	/* check that the app is allow/known to the driver */
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
-	if (appid.app_vid == EDIF_APP_ID) {
Daniel Wagner 59d57a
-		ql_dbg(ql_dbg_edif + ql_dbg_verbose, vha, 0x911d, "%s app id ok\n", __func__);
Daniel Wagner 59d57a
-		return true;
Daniel Wagner 59d57a
+	if (appid.app_vid != EDIF_APP_ID) {
Daniel Wagner 59d57a
+		ql_dbg(ql_dbg_edif, vha, 0x911d, "%s app id not ok (%x)",
Daniel Wagner 59d57a
+		    __func__, appid.app_vid);
Daniel Wagner 59d57a
+		return false;
Daniel Wagner 59d57a
+	}
Daniel Wagner 59d57a
+
Daniel Wagner 59d57a
+	if (appid.version != EDIF_VERSION1) {
Daniel Wagner 59d57a
+		ql_dbg(ql_dbg_edif, vha, 0x911d, "%s app version is not ok (%x)",
Daniel Wagner 59d57a
+		    __func__, appid.version);
Daniel Wagner 59d57a
+		return false;
Daniel Wagner 59d57a
 	}
Daniel Wagner 59d57a
-	ql_dbg(ql_dbg_edif, vha, 0x911d, "%s app id not ok (%x)",
Daniel Wagner 59d57a
-	    __func__, appid.app_vid);
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
-	return false;
Daniel Wagner 59d57a
+	return true;
Daniel Wagner 59d57a
 }
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 static void
Daniel Wagner 59d57a
@@ -555,6 +560,7 @@ qla_edif_app_start(scsi_qla_host_t *vha,
Daniel Wagner 59d57a
 	appreply.host_support_edif = vha->hw->flags.edif_enabled;
Daniel Wagner 59d57a
 	appreply.edif_enode_active = vha->pur_cinfo.enode_flags;
Daniel Wagner 59d57a
 	appreply.edif_edb_active = vha->e_dbell.db_flags;
Daniel Wagner 59d57a
+	appreply.version = EDIF_VERSION1;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 	bsg_job->reply_len = sizeof(struct fc_bsg_reply);
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
@@ -684,6 +690,7 @@ qla_edif_app_authok(scsi_qla_host_t *vha
Daniel Wagner 59d57a
 	portid.b.area   = appplogiok.u.d_id.b.area;
Daniel Wagner 59d57a
 	portid.b.al_pa  = appplogiok.u.d_id.b.al_pa;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
+	appplogireply.version = EDIF_VERSION1;
Daniel Wagner 59d57a
 	switch (appplogiok.type) {
Daniel Wagner 59d57a
 	case PL_TYPE_WWPN:
Daniel Wagner 59d57a
 		fcport = qla2x00_find_fcport_by_wwpn(vha,
Daniel Wagner 59d57a
@@ -876,6 +883,8 @@ qla_edif_app_getfcinfo(scsi_qla_host_t *
Daniel Wagner 59d57a
 	} else {
Daniel Wagner 59d57a
 		struct fc_port	*fcport = NULL, *tf;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
+		app_reply->version = EDIF_VERSION1;
Daniel Wagner 59d57a
+
Daniel Wagner 59d57a
 		list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) {
Daniel Wagner 59d57a
 			if (!(fcport->flags & FCF_FCSP_DEVICE))
Daniel Wagner 59d57a
 				continue;
Daniel Wagner 59d57a
@@ -892,9 +901,6 @@ qla_edif_app_getfcinfo(scsi_qla_host_t *
Daniel Wagner 59d57a
 			if (tdid.b24 != 0 && tdid.b24 != fcport->d_id.b24)
Daniel Wagner 59d57a
 				continue;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
-			app_reply->ports[pcnt].rekey_count =
Daniel Wagner 59d57a
-				fcport->edif.rekey_cnt;
Daniel Wagner 59d57a
-
Daniel Wagner 59d57a
 			if (fcport->scan_state != QLA_FCPORT_FOUND)
Daniel Wagner 59d57a
 				continue;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
@@ -909,6 +915,7 @@ qla_edif_app_getfcinfo(scsi_qla_host_t *
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 			rval = 0;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
+			app_reply->ports[pcnt].version = EDIF_VERSION1;
Daniel Wagner 59d57a
 			app_reply->ports[pcnt].remote_type =
Daniel Wagner 59d57a
 				VND_CMD_RTYPE_UNKNOWN;
Daniel Wagner 59d57a
 			if (fcport->port_type & (FCT_NVME_TARGET | FCT_TARGET))
Daniel Wagner 59d57a
@@ -1005,6 +1012,8 @@ qla_edif_app_getstats(scsi_qla_host_t *v
Daniel Wagner 59d57a
 	} else {
Daniel Wagner 59d57a
 		struct fc_port	*fcport = NULL, *tf;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
+		app_reply->version = EDIF_VERSION1;
Daniel Wagner 59d57a
+
Daniel Wagner 59d57a
 		list_for_each_entry_safe(fcport, tf, &vha->vp_fcports, list) {
Daniel Wagner 59d57a
 			if (fcport->edif.enable) {
Daniel Wagner 59d57a
 				if (pcnt > app_req.num_ports)
Daniel Wagner 59d57a
@@ -2036,6 +2045,7 @@ qla_edb_eventcreate(scsi_qla_host_t *vha
Daniel Wagner 59d57a
 		edbnode->u.sa_aen.port_id = fcport->d_id;
Daniel Wagner 59d57a
 		edbnode->u.sa_aen.status =  data;
Daniel Wagner 59d57a
 		edbnode->u.sa_aen.key_type =  data2;
Daniel Wagner 59d57a
+		edbnode->u.sa_aen.version = EDIF_VERSION1;
Daniel Wagner 59d57a
 		break;
Daniel Wagner 59d57a
 	default:
Daniel Wagner 59d57a
 		ql_dbg(ql_dbg_edif, vha, 0x09102,
Daniel Wagner 59d57a
@@ -3379,6 +3389,10 @@ int qla_edif_process_els(scsi_qla_host_t
Daniel Wagner 59d57a
 	port_id_t d_id;
Daniel Wagner 59d57a
 	struct qla_bsg_auth_els_request *p =
Daniel Wagner 59d57a
 	    (struct qla_bsg_auth_els_request *)bsg_job->request;
Daniel Wagner 59d57a
+	struct qla_bsg_auth_els_reply *rpl =
Daniel Wagner 59d57a
+	    (struct qla_bsg_auth_els_reply *)bsg_job->reply;
Daniel Wagner 59d57a
+
Daniel Wagner 59d57a
+	rpl->version = EDIF_VERSION1;
Daniel Wagner 59d57a
 
Daniel Wagner 59d57a
 	d_id.b.al_pa = bsg_request->rqst_data.h_els.port_id[2];
Daniel Wagner 59d57a
 	d_id.b.area = bsg_request->rqst_data.h_els.port_id[1];