/* SPDX-License-Identifier: GPL-2.0-only */ /* * Marvell Fibre Channel HBA Driver * Copyright (C) 2018- Marvell * */ #ifndef __QLA_EDIF_BSG_H #define __QLA_EDIF_BSG_H /* BSG Vendor specific commands */ #define ELS_MAX_PAYLOAD 1024 #ifndef WWN_SIZE #define WWN_SIZE 8 #endif #define VND_CMD_APP_RESERVED_SIZE 32 enum auth_els_sub_cmd { SEND_ELS = 0, SEND_ELS_REPLY, PULL_ELS, }; struct extra_auth_els { enum auth_els_sub_cmd sub_cmd; uint32_t extra_rx_xchg_address; uint8_t extra_control_flags; #define BSG_CTL_FLAG_INIT 0 #define BSG_CTL_FLAG_LS_ACC 1 #define BSG_CTL_FLAG_LS_RJT 2 #define BSG_CTL_FLAG_TRM 3 uint8_t extra_rsvd[3]; } __packed; struct qla_bsg_auth_els_request { struct fc_bsg_request r; struct extra_auth_els e; }; struct qla_bsg_auth_els_reply { struct fc_bsg_reply r; uint32_t rx_xchg_address; }; struct app_id { int app_vid; uint8_t app_key[32]; } __packed; struct app_start_reply { uint32_t host_support_edif; uint32_t edif_enode_active; uint32_t edif_edb_active; uint32_t reserved[VND_CMD_APP_RESERVED_SIZE]; } __packed; struct app_start { struct app_id app_info; uint32_t prli_to; uint32_t key_shred; uint8_t app_start_flags; uint8_t reserved[VND_CMD_APP_RESERVED_SIZE - 1]; } __packed; struct app_stop { struct app_id app_info; char buf[16]; } __packed; struct app_plogi_reply { uint32_t prli_status; uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; } __packed; #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]; } __packed; struct app_pinfo_req { struct app_id app_info; uint8_t num_ports; port_id_t remote_pid; uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; } __packed; struct app_pinfo { port_id_t remote_pid; uint8_t remote_wwpn[WWN_SIZE]; uint8_t remote_type; #define VND_CMD_RTYPE_UNKNOWN 0 #define VND_CMD_RTYPE_TARGET 1 #define VND_CMD_RTYPE_INITIATOR 2 uint8_t remote_state; uint8_t auth_state; uint8_t rekey_mode; int64_t rekey_count; int64_t rekey_config_value; int64_t rekey_consumed_value; uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; } __packed; /* AUTH States */ #define VND_CMD_AUTH_STATE_UNDEF 0 #define VND_CMD_AUTH_STATE_SESSION_SHUTDOWN 1 #define VND_CMD_AUTH_STATE_NEEDED 2 #define VND_CMD_AUTH_STATE_ELS_RCVD 3 #define VND_CMD_AUTH_STATE_SAUPDATE_COMPL 4 struct app_pinfo_reply { uint8_t port_count; uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; struct app_pinfo ports[0]; } __packed; struct app_sinfo_req { struct app_id app_info; uint8_t num_ports; uint8_t reserved[VND_CMD_APP_RESERVED_SIZE]; } __packed; struct app_sinfo { uint8_t remote_wwpn[WWN_SIZE]; int64_t rekey_count; uint8_t rekey_mode; int64_t tx_bytes; int64_t rx_bytes; } __packed; struct app_stats_reply { uint8_t elem_count; struct app_sinfo elem[0]; } __packed; struct qla_sa_update_frame { struct app_id app_info; uint16_t flags; #define SAU_FLG_INV 0x01 /* delete key */ #define SAU_FLG_TX 0x02 /* 1=tx, 0 = rx */ #define SAU_FLG_FORCE_DELETE 0x08 #define SAU_FLG_GMAC_MODE 0x20 /* * GMAC mode is cleartext for the IO * (i.e. NULL encryption) */ #define SAU_FLG_KEY128 0x40 #define SAU_FLG_KEY256 0x80 uint16_t fast_sa_index:10, reserved:6; uint32_t salt; uint32_t spi; uint8_t sa_key[32]; uint8_t node_name[WWN_SIZE]; uint8_t port_name[WWN_SIZE]; port_id_t port_id; } __packed; // used for edif mgmt bsg interface #define QL_VND_SC_UNDEF 0 #define QL_VND_SC_SA_UPDATE 1 #define QL_VND_SC_APP_START 2 #define QL_VND_SC_APP_STOP 3 #define QL_VND_SC_AUTH_OK 4 #define QL_VND_SC_AUTH_FAIL 5 #define QL_VND_SC_REKEY_CONFIG 6 #define QL_VND_SC_GET_FCINFO 7 #define QL_VND_SC_GET_STATS 8 /* Application interface data structure for rtn data */ #define EXT_DEF_EVENT_DATA_SIZE 64 struct edif_app_dbell { uint32_t event_code; uint32_t event_data_size; union { port_id_t port_id; uint8_t event_data[EXT_DEF_EVENT_DATA_SIZE]; }; } __packed; struct edif_sa_update_aen { port_id_t port_id; uint32_t key_type; /* Tx (1) or RX (2) */ uint32_t status; /* 0 succes, 1 failed, 2 timeout , 3 error */ uint8_t reserved[16]; } __packed; #define QL_VND_SA_STAT_SUCCESS 0 #define QL_VND_SA_STAT_FAILED 1 #define QL_VND_SA_STAT_TIMEOUT 2 #define QL_VND_SA_STAT_ERROR 3 #define QL_VND_RX_SA_KEY 1 #define QL_VND_TX_SA_KEY 2 /* App defines for plogi auth'd ok and plogi auth bad requests */ struct auth_complete_cmd { struct app_id app_info; #define PL_TYPE_WWPN 1 #define PL_TYPE_DID 2 uint32_t type; union { uint8_t wwpn[WWN_SIZE]; port_id_t d_id; } u; uint32_t reserved[VND_CMD_APP_RESERVED_SIZE]; } __packed; #define RX_DELAY_DELETE_TIMEOUT 20 #endif /* QLA_EDIF_BSG_H */