272 lines · c
1/* SPDX-License-Identifier: GPL-2.0-only */2/*3 * Marvell Fibre Channel HBA Driver4 * Copyright (C) 2018- Marvell5 *6 */7#ifndef __QLA_EDIF_BSG_H8#define __QLA_EDIF_BSG_H9 10#define EDIF_VERSION1 111 12/* BSG Vendor specific commands */13#define ELS_MAX_PAYLOAD 211214#ifndef WWN_SIZE15#define WWN_SIZE 816#endif17#define VND_CMD_APP_RESERVED_SIZE 2818#define VND_CMD_PAD_SIZE 319enum auth_els_sub_cmd {20 SEND_ELS = 0,21 SEND_ELS_REPLY,22 PULL_ELS,23};24 25struct extra_auth_els {26 enum auth_els_sub_cmd sub_cmd;27 uint32_t extra_rx_xchg_address;28 uint8_t extra_control_flags;29#define BSG_CTL_FLAG_INIT 030#define BSG_CTL_FLAG_LS_ACC 131#define BSG_CTL_FLAG_LS_RJT 232#define BSG_CTL_FLAG_TRM 333 uint8_t version;34 uint8_t pad[2];35 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];36} __packed;37 38struct qla_bsg_auth_els_request {39 struct fc_bsg_request r;40 struct extra_auth_els e;41};42 43struct qla_bsg_auth_els_reply {44 struct fc_bsg_reply r;45 uint32_t rx_xchg_address;46 uint8_t version;47 uint8_t pad[VND_CMD_PAD_SIZE];48 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];49};50 51struct app_id {52 int app_vid;53 uint8_t version;54 uint8_t pad[VND_CMD_PAD_SIZE];55 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];56} __packed;57 58struct app_start_reply {59 uint32_t host_support_edif;60 uint32_t edif_enode_active;61 uint32_t edif_edb_active;62 uint8_t version;63 uint8_t pad[VND_CMD_PAD_SIZE];64 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];65} __packed;66 67struct app_start {68 struct app_id app_info;69 uint8_t app_start_flags;70 uint8_t version;71 uint8_t pad[2];72 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];73} __packed;74 75struct app_stop {76 struct app_id app_info;77 uint8_t version;78 uint8_t pad[VND_CMD_PAD_SIZE];79 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];80} __packed;81 82struct app_plogi_reply {83 uint32_t prli_status;84 uint8_t version;85 uint8_t pad[VND_CMD_PAD_SIZE];86 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];87} __packed;88 89struct app_pinfo_req {90 struct app_id app_info;91 uint8_t num_ports;92 struct {93#ifdef __BIG_ENDIAN94 uint8_t domain;95 uint8_t area;96 uint8_t al_pa;97#elif defined(__LITTLE_ENDIAN)98 uint8_t al_pa;99 uint8_t area;100 uint8_t domain;101#else102#error "__BIG_ENDIAN or __LITTLE_ENDIAN must be defined!"103#endif104 uint8_t rsvd_1;105 } remote_pid;106 uint8_t version;107 uint8_t pad[VND_CMD_PAD_SIZE];108 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];109} __packed;110 111struct app_pinfo {112 port_id_t remote_pid;113 uint8_t remote_wwpn[WWN_SIZE];114 uint8_t remote_type;115#define VND_CMD_RTYPE_UNKNOWN 0116#define VND_CMD_RTYPE_TARGET 1117#define VND_CMD_RTYPE_INITIATOR 2118 uint8_t remote_state;119 uint8_t auth_state;120 uint8_t version;121 uint8_t pad[VND_CMD_PAD_SIZE];122 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];123} __packed;124 125/* AUTH States */126#define VND_CMD_AUTH_STATE_UNDEF 0127#define VND_CMD_AUTH_STATE_SESSION_SHUTDOWN 1128#define VND_CMD_AUTH_STATE_NEEDED 2129#define VND_CMD_AUTH_STATE_ELS_RCVD 3130#define VND_CMD_AUTH_STATE_SAUPDATE_COMPL 4131 132struct app_pinfo_reply {133 uint8_t port_count;134 uint8_t version;135 uint8_t pad[VND_CMD_PAD_SIZE];136 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];137 struct app_pinfo ports[];138} __packed;139 140struct app_sinfo_req {141 struct app_id app_info;142 uint8_t num_ports;143 uint8_t version;144 uint8_t pad[VND_CMD_PAD_SIZE];145 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];146} __packed;147 148struct app_sinfo {149 uint8_t remote_wwpn[WWN_SIZE];150 int64_t rekey_count;151 uint8_t rekey_mode;152 int64_t tx_bytes;153 int64_t rx_bytes;154} __packed;155 156struct app_stats_reply {157 uint8_t elem_count;158 uint8_t version;159 uint8_t pad[VND_CMD_PAD_SIZE];160 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];161 struct app_sinfo elem[];162} __packed;163 164struct qla_sa_update_frame {165 struct app_id app_info;166 uint16_t flags;167#define SAU_FLG_INV 0x01 /* delete key */168#define SAU_FLG_TX 0x02 /* 1=tx, 0 = rx */169#define SAU_FLG_FORCE_DELETE 0x08170#define SAU_FLG_GMAC_MODE 0x20 /*171 * GMAC mode is cleartext for the IO172 * (i.e. NULL encryption)173 */174#define SAU_FLG_KEY128 0x40175#define SAU_FLG_KEY256 0x80176 uint16_t fast_sa_index:10,177 reserved:6;178 uint32_t salt;179 uint32_t spi;180 uint8_t sa_key[32];181 uint8_t node_name[WWN_SIZE];182 uint8_t port_name[WWN_SIZE];183 port_id_t port_id;184 uint8_t version;185 uint8_t pad[VND_CMD_PAD_SIZE];186 uint8_t reserved2[VND_CMD_APP_RESERVED_SIZE];187} __packed;188 189#define QL_VND_SC_UNDEF 0190#define QL_VND_SC_SA_UPDATE 1191#define QL_VND_SC_APP_START 2192#define QL_VND_SC_APP_STOP 3193#define QL_VND_SC_AUTH_OK 4194#define QL_VND_SC_AUTH_FAIL 5195#define QL_VND_SC_REKEY_CONFIG 6196#define QL_VND_SC_GET_FCINFO 7197#define QL_VND_SC_GET_STATS 8198#define QL_VND_SC_AEN_COMPLETE 9199#define QL_VND_SC_READ_DBELL 10200 201/*202 * bsg caller to provide empty buffer for doorbell events.203 *204 * sg_io_v4.din_xferp = empty buffer for door bell events205 * sg_io_v4.dout_xferp = struct edif_read_dbell *buf206 */207struct edif_read_dbell {208 struct app_id app_info;209 uint8_t version;210 uint8_t pad[VND_CMD_PAD_SIZE];211 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];212};213 214 215/* Application interface data structure for rtn data */216#define EXT_DEF_EVENT_DATA_SIZE 64217struct edif_app_dbell {218 uint32_t event_code;219 uint32_t event_data_size;220 union {221 port_id_t port_id;222 uint8_t event_data[EXT_DEF_EVENT_DATA_SIZE];223 };224} __packed;225 226struct edif_sa_update_aen {227 port_id_t port_id;228 uint32_t key_type; /* Tx (1) or RX (2) */229 uint32_t status; /* 0 succes, 1 failed, 2 timeout , 3 error */230 uint8_t version;231 uint8_t pad[VND_CMD_PAD_SIZE];232 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];233} __packed;234 235#define QL_VND_SA_STAT_SUCCESS 0236#define QL_VND_SA_STAT_FAILED 1237#define QL_VND_SA_STAT_TIMEOUT 2238#define QL_VND_SA_STAT_ERROR 3239 240#define QL_VND_RX_SA_KEY 1241#define QL_VND_TX_SA_KEY 2242 243/* App defines for plogi auth'd ok and plogi auth bad requests */244struct auth_complete_cmd {245 struct app_id app_info;246#define PL_TYPE_WWPN 1247#define PL_TYPE_DID 2248 uint32_t type;249 union {250 uint8_t wwpn[WWN_SIZE];251 port_id_t d_id;252 } u;253 uint8_t version;254 uint8_t pad[VND_CMD_PAD_SIZE];255 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];256} __packed;257 258struct aen_complete_cmd {259 struct app_id app_info;260 port_id_t port_id;261 uint32_t event_code;262 uint8_t version;263 uint8_t pad[VND_CMD_PAD_SIZE];264 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE];265} __packed;266 267#define RX_DELAY_DELETE_TIMEOUT 20268 269#define FCH_EVT_VENDOR_UNIQUE_VPORT_DOWN 1270 271#endif /* QLA_EDIF_BSG_H */272