Commit 7a7b0b48 authored by Quinn Tran's avatar Quinn Tran Committed by Martin K. Petersen

scsi: qla2xxx: edif: bsg refactor

 - Add version field to edif bsg for future enhancement.

 - Add version edif bsg version check

 - Remove unused interfaces and fields.

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