2021-06-23 22:25:56 -07:00
/* 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
2022-06-06 21:46:18 -07:00
# define EDIF_VERSION1 1
2021-06-23 22:25:56 -07:00
/* BSG Vendor specific commands */
2021-10-26 04:54:09 -07:00
# define ELS_MAX_PAYLOAD 2112
2021-06-23 22:25:56 -07:00
# ifndef WWN_SIZE
# define WWN_SIZE 8
# endif
2022-06-06 21:46:18 -07:00
# define VND_CMD_APP_RESERVED_SIZE 28
# define VND_CMD_PAD_SIZE 3
2021-06-23 22:25:56 -07:00
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
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ 2 ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} __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 ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} ;
struct app_id {
int app_vid ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} __packed ;
struct app_start_reply {
uint32_t host_support_edif ;
uint32_t edif_enode_active ;
uint32_t edif_edb_active ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} __packed ;
struct app_start {
struct app_id app_info ;
uint8_t app_start_flags ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ 2 ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} __packed ;
struct app_stop {
struct app_id app_info ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} __packed ;
struct app_plogi_reply {
uint32_t prli_status ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
2021-06-23 22:25:56 -07:00
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 ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} __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 ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
2021-06-23 22:25:56 -07:00
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 ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
2021-06-23 22:25:56 -07:00
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2022-02-14 19:11:44 -06:00
struct app_pinfo ports [ ] ;
2021-06-23 22:25:56 -07:00
} __packed ;
struct app_sinfo_req {
struct app_id app_info ;
uint8_t num_ports ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
2021-06-23 22:25:56 -07:00
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 ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2022-02-14 19:11:44 -06:00
struct app_sinfo elem [ ] ;
2021-06-23 22:25:56 -07:00
} __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 ;
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved2 [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} __packed ;
# 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
2022-06-06 21:46:18 -07:00
# define QL_VND_SC_AEN_COMPLETE 9
2022-06-06 21:46:20 -07:00
# define QL_VND_SC_READ_DBELL 10
/*
* bsg caller to provide empty buffer for doorbell events .
*
* sg_io_v4 . din_xferp = empty buffer for door bell events
* sg_io_v4 . dout_xferp = struct edif_read_dbell * buf
*/
struct edif_read_dbell {
struct app_id app_info ;
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
} ;
2022-06-06 21:46:18 -07:00
2021-06-23 22:25:56 -07:00
/* 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 */
2022-06-06 21:46:18 -07:00
uint8_t version ;
uint8_t pad [ VND_CMD_PAD_SIZE ] ;
uint8_t reserved [ VND_CMD_APP_RESERVED_SIZE ] ;
2021-06-23 22:25:56 -07:00
} __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 ;
2022-06-06 21:46:18 -07:00
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 ] ;
2021-06-23 22:25:56 -07:00
} __packed ;
# define RX_DELAY_DELETE_TIMEOUT 20
2022-06-06 21:46:22 -07:00
# define FCH_EVT_VENDOR_UNIQUE_VPORT_DOWN 1
2021-06-23 22:25:56 -07:00
# endif /* QLA_EDIF_BSG_H */