blob: 58b718d35d19a9133d4d7113a32e653a3e5b4558 [file] [log] [blame]
Quinn Tran7ebb336e2021-06-23 22:25:56 -07001/* 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 1024
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[0];
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[0];
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 */