brintos

brintos / linux-shallow public Read only

0
0
Text · 6.3 KiB · 514c265 Raw
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