qla_edif_bsg.h (4921B)
1/* SPDX-License-Identifier: GPL-2.0-only */ 2/* 3 * Marvell Fibre Channel HBA Driver 4 * Copyright (C) 2018- Marvell 5 * 6 */ 7#ifndef __QLA_EDIF_BSG_H 8#define __QLA_EDIF_BSG_H 9 10/* BSG Vendor specific commands */ 11#define ELS_MAX_PAYLOAD 2112 12#ifndef WWN_SIZE 13#define WWN_SIZE 8 14#endif 15#define VND_CMD_APP_RESERVED_SIZE 32 16 17enum auth_els_sub_cmd { 18 SEND_ELS = 0, 19 SEND_ELS_REPLY, 20 PULL_ELS, 21}; 22 23struct extra_auth_els { 24 enum auth_els_sub_cmd sub_cmd; 25 uint32_t extra_rx_xchg_address; 26 uint8_t extra_control_flags; 27#define BSG_CTL_FLAG_INIT 0 28#define BSG_CTL_FLAG_LS_ACC 1 29#define BSG_CTL_FLAG_LS_RJT 2 30#define BSG_CTL_FLAG_TRM 3 31 uint8_t extra_rsvd[3]; 32} __packed; 33 34struct qla_bsg_auth_els_request { 35 struct fc_bsg_request r; 36 struct extra_auth_els e; 37}; 38 39struct qla_bsg_auth_els_reply { 40 struct fc_bsg_reply r; 41 uint32_t rx_xchg_address; 42}; 43 44struct app_id { 45 int app_vid; 46 uint8_t app_key[32]; 47} __packed; 48 49struct app_start_reply { 50 uint32_t host_support_edif; 51 uint32_t edif_enode_active; 52 uint32_t edif_edb_active; 53 uint32_t reserved[VND_CMD_APP_RESERVED_SIZE]; 54} __packed; 55 56struct app_start { 57 struct app_id app_info; 58 uint32_t prli_to; 59 uint32_t key_shred; 60 uint8_t app_start_flags; 61 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE - 1]; 62} __packed; 63 64struct app_stop { 65 struct app_id app_info; 66 char buf[16]; 67} __packed; 68 69struct app_plogi_reply { 70 uint32_t prli_status; 71 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; 72} __packed; 73 74#define RECFG_TIME 1 75#define RECFG_BYTES 2 76 77struct app_rekey_cfg { 78 struct app_id app_info; 79 uint8_t rekey_mode; 80 port_id_t d_id; 81 uint8_t force; 82 union { 83 int64_t bytes; 84 int64_t time; 85 } rky_units; 86 87 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; 88} __packed; 89 90struct app_pinfo_req { 91 struct app_id app_info; 92 uint8_t num_ports; 93 port_id_t remote_pid; 94 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; 95} __packed; 96 97struct app_pinfo { 98 port_id_t remote_pid; 99 uint8_t remote_wwpn[WWN_SIZE]; 100 uint8_t remote_type; 101#define VND_CMD_RTYPE_UNKNOWN 0 102#define VND_CMD_RTYPE_TARGET 1 103#define VND_CMD_RTYPE_INITIATOR 2 104 uint8_t remote_state; 105 uint8_t auth_state; 106 uint8_t rekey_mode; 107 int64_t rekey_count; 108 int64_t rekey_config_value; 109 int64_t rekey_consumed_value; 110 111 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; 112} __packed; 113 114/* AUTH States */ 115#define VND_CMD_AUTH_STATE_UNDEF 0 116#define VND_CMD_AUTH_STATE_SESSION_SHUTDOWN 1 117#define VND_CMD_AUTH_STATE_NEEDED 2 118#define VND_CMD_AUTH_STATE_ELS_RCVD 3 119#define VND_CMD_AUTH_STATE_SAUPDATE_COMPL 4 120 121struct app_pinfo_reply { 122 uint8_t port_count; 123 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; 124 struct app_pinfo ports[]; 125} __packed; 126 127struct app_sinfo_req { 128 struct app_id app_info; 129 uint8_t num_ports; 130 uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; 131} __packed; 132 133struct app_sinfo { 134 uint8_t remote_wwpn[WWN_SIZE]; 135 int64_t rekey_count; 136 uint8_t rekey_mode; 137 int64_t tx_bytes; 138 int64_t rx_bytes; 139} __packed; 140 141struct app_stats_reply { 142 uint8_t elem_count; 143 struct app_sinfo elem[]; 144} __packed; 145 146struct qla_sa_update_frame { 147 struct app_id app_info; 148 uint16_t flags; 149#define SAU_FLG_INV 0x01 /* delete key */ 150#define SAU_FLG_TX 0x02 /* 1=tx, 0 = rx */ 151#define SAU_FLG_FORCE_DELETE 0x08 152#define SAU_FLG_GMAC_MODE 0x20 /* 153 * GMAC mode is cleartext for the IO 154 * (i.e. NULL encryption) 155 */ 156#define SAU_FLG_KEY128 0x40 157#define SAU_FLG_KEY256 0x80 158 uint16_t fast_sa_index:10, 159 reserved:6; 160 uint32_t salt; 161 uint32_t spi; 162 uint8_t sa_key[32]; 163 uint8_t node_name[WWN_SIZE]; 164 uint8_t port_name[WWN_SIZE]; 165 port_id_t port_id; 166} __packed; 167 168// used for edif mgmt bsg interface 169#define QL_VND_SC_UNDEF 0 170#define QL_VND_SC_SA_UPDATE 1 171#define QL_VND_SC_APP_START 2 172#define QL_VND_SC_APP_STOP 3 173#define QL_VND_SC_AUTH_OK 4 174#define QL_VND_SC_AUTH_FAIL 5 175#define QL_VND_SC_REKEY_CONFIG 6 176#define QL_VND_SC_GET_FCINFO 7 177#define QL_VND_SC_GET_STATS 8 178 179/* Application interface data structure for rtn data */ 180#define EXT_DEF_EVENT_DATA_SIZE 64 181struct edif_app_dbell { 182 uint32_t event_code; 183 uint32_t event_data_size; 184 union { 185 port_id_t port_id; 186 uint8_t event_data[EXT_DEF_EVENT_DATA_SIZE]; 187 }; 188} __packed; 189 190struct edif_sa_update_aen { 191 port_id_t port_id; 192 uint32_t key_type; /* Tx (1) or RX (2) */ 193 uint32_t status; /* 0 succes, 1 failed, 2 timeout , 3 error */ 194 uint8_t reserved[16]; 195} __packed; 196 197#define QL_VND_SA_STAT_SUCCESS 0 198#define QL_VND_SA_STAT_FAILED 1 199#define QL_VND_SA_STAT_TIMEOUT 2 200#define QL_VND_SA_STAT_ERROR 3 201 202#define QL_VND_RX_SA_KEY 1 203#define QL_VND_TX_SA_KEY 2 204 205/* App defines for plogi auth'd ok and plogi auth bad requests */ 206struct auth_complete_cmd { 207 struct app_id app_info; 208#define PL_TYPE_WWPN 1 209#define PL_TYPE_DID 2 210 uint32_t type; 211 union { 212 uint8_t wwpn[WWN_SIZE]; 213 port_id_t d_id; 214 } u; 215 uint32_t reserved[VND_CMD_APP_RESERVED_SIZE]; 216} __packed; 217 218#define RX_DELAY_DELETE_TIMEOUT 20 219 220#endif /* QLA_EDIF_BSG_H */