1e1ffcc66SDimitris Michailidis /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
2e1ffcc66SDimitris Michailidis 
3e1ffcc66SDimitris Michailidis #ifndef __FUN_HCI_H
4e1ffcc66SDimitris Michailidis #define __FUN_HCI_H
5e1ffcc66SDimitris Michailidis 
6e1ffcc66SDimitris Michailidis enum {
7e1ffcc66SDimitris Michailidis 	FUN_HCI_ID_INVALID = 0xffffffff,
8e1ffcc66SDimitris Michailidis };
9e1ffcc66SDimitris Michailidis 
10e1ffcc66SDimitris Michailidis enum fun_admin_op {
11e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_BIND = 0x1,
12e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_EPCQ = 0x11,
13e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_EPSQ = 0x12,
14e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_PORT = 0x13,
15e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_ETH = 0x14,
16e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_VI = 0x15,
17e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_SWUPGRADE = 0x1f,
18e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_RSS = 0x21,
19e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_ADI = 0x25,
20e1ffcc66SDimitris Michailidis 	FUN_ADMIN_OP_KTLS = 0x26,
21e1ffcc66SDimitris Michailidis };
22e1ffcc66SDimitris Michailidis 
23e1ffcc66SDimitris Michailidis enum {
24e1ffcc66SDimitris Michailidis 	FUN_REQ_COMMON_FLAG_RSP = 0x1,
25e1ffcc66SDimitris Michailidis 	FUN_REQ_COMMON_FLAG_HEAD_WB = 0x2,
26e1ffcc66SDimitris Michailidis 	FUN_REQ_COMMON_FLAG_INT = 0x4,
27e1ffcc66SDimitris Michailidis 	FUN_REQ_COMMON_FLAG_CQE_IN_RQBUF = 0x8,
28e1ffcc66SDimitris Michailidis };
29e1ffcc66SDimitris Michailidis 
30e1ffcc66SDimitris Michailidis struct fun_admin_req_common {
31e1ffcc66SDimitris Michailidis 	__u8 op;
32e1ffcc66SDimitris Michailidis 	__u8 len8;
33e1ffcc66SDimitris Michailidis 	__be16 flags;
34e1ffcc66SDimitris Michailidis 	__u8 suboff8;
35e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
36e1ffcc66SDimitris Michailidis 	__be16 cid;
37e1ffcc66SDimitris Michailidis };
38e1ffcc66SDimitris Michailidis 
39e1ffcc66SDimitris Michailidis #define FUN_ADMIN_REQ_COMMON_INIT(_op, _len8, _flags, _suboff8, _cid)       \
40e1ffcc66SDimitris Michailidis 	(struct fun_admin_req_common) {                                     \
41e1ffcc66SDimitris Michailidis 		.op = (_op), .len8 = (_len8), .flags = cpu_to_be16(_flags), \
42e1ffcc66SDimitris Michailidis 		.suboff8 = (_suboff8), .cid = cpu_to_be16(_cid),            \
43e1ffcc66SDimitris Michailidis 	}
44e1ffcc66SDimitris Michailidis 
45e1ffcc66SDimitris Michailidis #define FUN_ADMIN_REQ_COMMON_INIT2(_op, _len)    \
46e1ffcc66SDimitris Michailidis 	(struct fun_admin_req_common) {          \
47e1ffcc66SDimitris Michailidis 		.op = (_op), .len8 = (_len) / 8, \
48e1ffcc66SDimitris Michailidis 	}
49e1ffcc66SDimitris Michailidis 
50e1ffcc66SDimitris Michailidis struct fun_admin_rsp_common {
51e1ffcc66SDimitris Michailidis 	__u8 op;
52e1ffcc66SDimitris Michailidis 	__u8 len8;
53e1ffcc66SDimitris Michailidis 	__be16 flags;
54e1ffcc66SDimitris Michailidis 	__u8 suboff8;
55e1ffcc66SDimitris Michailidis 	__u8 ret;
56e1ffcc66SDimitris Michailidis 	__be16 cid;
57e1ffcc66SDimitris Michailidis };
58e1ffcc66SDimitris Michailidis 
59e1ffcc66SDimitris Michailidis struct fun_admin_write48_req {
60e1ffcc66SDimitris Michailidis 	__be64 key_to_data;
61e1ffcc66SDimitris Michailidis };
62e1ffcc66SDimitris Michailidis 
63e1ffcc66SDimitris Michailidis #define FUN_ADMIN_WRITE48_REQ_KEY_S 56U
64e1ffcc66SDimitris Michailidis #define FUN_ADMIN_WRITE48_REQ_KEY_M 0xff
65e1ffcc66SDimitris Michailidis #define FUN_ADMIN_WRITE48_REQ_KEY_P_NOSWAP(x) \
66e1ffcc66SDimitris Michailidis 	(((__u64)x) << FUN_ADMIN_WRITE48_REQ_KEY_S)
67e1ffcc66SDimitris Michailidis 
68e1ffcc66SDimitris Michailidis #define FUN_ADMIN_WRITE48_REQ_DATA_S 0U
69e1ffcc66SDimitris Michailidis #define FUN_ADMIN_WRITE48_REQ_DATA_M 0xffffffffffff
70e1ffcc66SDimitris Michailidis #define FUN_ADMIN_WRITE48_REQ_DATA_P_NOSWAP(x) \
71e1ffcc66SDimitris Michailidis 	(((__u64)x) << FUN_ADMIN_WRITE48_REQ_DATA_S)
72e1ffcc66SDimitris Michailidis 
73e1ffcc66SDimitris Michailidis #define FUN_ADMIN_WRITE48_REQ_INIT(key, data)                       \
74e1ffcc66SDimitris Michailidis 	(struct fun_admin_write48_req) {                            \
75e1ffcc66SDimitris Michailidis 		.key_to_data = cpu_to_be64(                         \
76e1ffcc66SDimitris Michailidis 			FUN_ADMIN_WRITE48_REQ_KEY_P_NOSWAP(key) |   \
77e1ffcc66SDimitris Michailidis 			FUN_ADMIN_WRITE48_REQ_DATA_P_NOSWAP(data)), \
78e1ffcc66SDimitris Michailidis 	}
79e1ffcc66SDimitris Michailidis 
80e1ffcc66SDimitris Michailidis struct fun_admin_write48_rsp {
81e1ffcc66SDimitris Michailidis 	__be64 key_to_data;
82e1ffcc66SDimitris Michailidis };
83e1ffcc66SDimitris Michailidis 
84e1ffcc66SDimitris Michailidis struct fun_admin_read48_req {
85e1ffcc66SDimitris Michailidis 	__be64 key_pack;
86e1ffcc66SDimitris Michailidis };
87e1ffcc66SDimitris Michailidis 
88e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_REQ_KEY_S 56U
89e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_REQ_KEY_M 0xff
90e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_REQ_KEY_P_NOSWAP(x) \
91e1ffcc66SDimitris Michailidis 	(((__u64)x) << FUN_ADMIN_READ48_REQ_KEY_S)
92e1ffcc66SDimitris Michailidis 
93e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_REQ_INIT(key)                                       \
94e1ffcc66SDimitris Michailidis 	(struct fun_admin_read48_req) {                                      \
95e1ffcc66SDimitris Michailidis 		.key_pack =                                                  \
96e1ffcc66SDimitris Michailidis 			cpu_to_be64(FUN_ADMIN_READ48_REQ_KEY_P_NOSWAP(key)), \
97e1ffcc66SDimitris Michailidis 	}
98e1ffcc66SDimitris Michailidis 
99e1ffcc66SDimitris Michailidis struct fun_admin_read48_rsp {
100e1ffcc66SDimitris Michailidis 	__be64 key_to_data;
101e1ffcc66SDimitris Michailidis };
102e1ffcc66SDimitris Michailidis 
103e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_KEY_S 56U
104e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_KEY_M 0xff
105e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_KEY_G(x)                     \
106e1ffcc66SDimitris Michailidis 	((be64_to_cpu(x) >> FUN_ADMIN_READ48_RSP_KEY_S) & \
107e1ffcc66SDimitris Michailidis 	 FUN_ADMIN_READ48_RSP_KEY_M)
108e1ffcc66SDimitris Michailidis 
109e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_RET_S 48U
110e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_RET_M 0xff
111e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_RET_G(x)                     \
112e1ffcc66SDimitris Michailidis 	((be64_to_cpu(x) >> FUN_ADMIN_READ48_RSP_RET_S) & \
113e1ffcc66SDimitris Michailidis 	 FUN_ADMIN_READ48_RSP_RET_M)
114e1ffcc66SDimitris Michailidis 
115e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_DATA_S 0U
116e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_DATA_M 0xffffffffffff
117e1ffcc66SDimitris Michailidis #define FUN_ADMIN_READ48_RSP_DATA_G(x)                     \
118e1ffcc66SDimitris Michailidis 	((be64_to_cpu(x) >> FUN_ADMIN_READ48_RSP_DATA_S) & \
119e1ffcc66SDimitris Michailidis 	 FUN_ADMIN_READ48_RSP_DATA_M)
120e1ffcc66SDimitris Michailidis 
121e1ffcc66SDimitris Michailidis enum fun_admin_bind_type {
122e1ffcc66SDimitris Michailidis 	FUN_ADMIN_BIND_TYPE_EPCQ = 0x1,
123e1ffcc66SDimitris Michailidis 	FUN_ADMIN_BIND_TYPE_EPSQ = 0x2,
124e1ffcc66SDimitris Michailidis 	FUN_ADMIN_BIND_TYPE_PORT = 0x3,
125e1ffcc66SDimitris Michailidis 	FUN_ADMIN_BIND_TYPE_RSS = 0x4,
126e1ffcc66SDimitris Michailidis 	FUN_ADMIN_BIND_TYPE_VI = 0x5,
127e1ffcc66SDimitris Michailidis 	FUN_ADMIN_BIND_TYPE_ETH = 0x6,
128e1ffcc66SDimitris Michailidis };
129e1ffcc66SDimitris Michailidis 
130e1ffcc66SDimitris Michailidis struct fun_admin_bind_entry {
131e1ffcc66SDimitris Michailidis 	__u8 type;
132e1ffcc66SDimitris Michailidis 	__u8 rsvd0[3];
133e1ffcc66SDimitris Michailidis 	__be32 id;
134e1ffcc66SDimitris Michailidis };
135e1ffcc66SDimitris Michailidis 
136e1ffcc66SDimitris Michailidis #define FUN_ADMIN_BIND_ENTRY_INIT(_type, _id)            \
137e1ffcc66SDimitris Michailidis 	(struct fun_admin_bind_entry) {                  \
138e1ffcc66SDimitris Michailidis 		.type = (_type), .id = cpu_to_be32(_id), \
139e1ffcc66SDimitris Michailidis 	}
140e1ffcc66SDimitris Michailidis 
141e1ffcc66SDimitris Michailidis struct fun_admin_bind_req {
142e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
143e1ffcc66SDimitris Michailidis 	struct fun_admin_bind_entry entry[];
144e1ffcc66SDimitris Michailidis };
145e1ffcc66SDimitris Michailidis 
146e1ffcc66SDimitris Michailidis struct fun_admin_bind_rsp {
147e1ffcc66SDimitris Michailidis 	struct fun_admin_rsp_common bind_rsp_common;
148e1ffcc66SDimitris Michailidis };
149e1ffcc66SDimitris Michailidis 
150e1ffcc66SDimitris Michailidis struct fun_admin_simple_subop {
151e1ffcc66SDimitris Michailidis 	__u8 subop;
152e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
153e1ffcc66SDimitris Michailidis 	__be16 flags;
154e1ffcc66SDimitris Michailidis 	__be32 data;
155e1ffcc66SDimitris Michailidis };
156e1ffcc66SDimitris Michailidis 
157e1ffcc66SDimitris Michailidis #define FUN_ADMIN_SIMPLE_SUBOP_INIT(_subop, _flags, _data)       \
158e1ffcc66SDimitris Michailidis 	(struct fun_admin_simple_subop) {                        \
159e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags), \
160e1ffcc66SDimitris Michailidis 		.data = cpu_to_be32(_data),                      \
161e1ffcc66SDimitris Michailidis 	}
162e1ffcc66SDimitris Michailidis 
163e1ffcc66SDimitris Michailidis enum fun_admin_subop {
164e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SUBOP_CREATE = 0x10,
165e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SUBOP_DESTROY = 0x11,
166e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SUBOP_MODIFY = 0x12,
167e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SUBOP_RES_COUNT = 0x14,
168e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SUBOP_READ = 0x15,
169e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SUBOP_WRITE = 0x16,
170e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SUBOP_NOTIFY = 0x17,
171e1ffcc66SDimitris Michailidis };
172e1ffcc66SDimitris Michailidis 
173e1ffcc66SDimitris Michailidis enum {
174e1ffcc66SDimitris Michailidis 	FUN_ADMIN_RES_CREATE_FLAG_ALLOCATOR = 0x1,
175e1ffcc66SDimitris Michailidis };
176e1ffcc66SDimitris Michailidis 
177e1ffcc66SDimitris Michailidis struct fun_admin_generic_destroy_req {
178e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
179e1ffcc66SDimitris Michailidis 	struct fun_admin_simple_subop destroy;
180e1ffcc66SDimitris Michailidis };
181e1ffcc66SDimitris Michailidis 
182e1ffcc66SDimitris Michailidis struct fun_admin_generic_create_rsp {
183e1ffcc66SDimitris Michailidis 	struct fun_admin_rsp_common common;
184e1ffcc66SDimitris Michailidis 
185e1ffcc66SDimitris Michailidis 	__u8 subop;
186e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
187e1ffcc66SDimitris Michailidis 	__be16 flags;
188e1ffcc66SDimitris Michailidis 	__be32 id;
189e1ffcc66SDimitris Michailidis };
190e1ffcc66SDimitris Michailidis 
191e1ffcc66SDimitris Michailidis struct fun_admin_res_count_req {
192e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
193e1ffcc66SDimitris Michailidis 	struct fun_admin_simple_subop count;
194e1ffcc66SDimitris Michailidis };
195e1ffcc66SDimitris Michailidis 
196e1ffcc66SDimitris Michailidis struct fun_admin_res_count_rsp {
197e1ffcc66SDimitris Michailidis 	struct fun_admin_rsp_common common;
198e1ffcc66SDimitris Michailidis 	struct fun_admin_simple_subop count;
199e1ffcc66SDimitris Michailidis };
200e1ffcc66SDimitris Michailidis 
201e1ffcc66SDimitris Michailidis enum {
202e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPCQ_CREATE_FLAG_INT_EPCQ = 0x2,
203e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPCQ_CREATE_FLAG_ENTRY_WR_TPH = 0x4,
204e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPCQ_CREATE_FLAG_SL_WR_TPH = 0x8,
205e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPCQ_CREATE_FLAG_RQ = 0x80,
206e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPCQ_CREATE_FLAG_INT_IQ = 0x100,
207e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPCQ_CREATE_FLAG_INT_NOARM = 0x200,
208e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPCQ_CREATE_FLAG_DROP_ON_OVERFLOW = 0x400,
209e1ffcc66SDimitris Michailidis };
210e1ffcc66SDimitris Michailidis 
211e1ffcc66SDimitris Michailidis struct fun_admin_epcq_req {
212e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
213e1ffcc66SDimitris Michailidis 	union epcq_req_subop {
214e1ffcc66SDimitris Michailidis 		struct fun_admin_epcq_create_req {
215e1ffcc66SDimitris Michailidis 			__u8 subop;
216e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
217e1ffcc66SDimitris Michailidis 			__be16 flags;
218e1ffcc66SDimitris Michailidis 			__be32 id;
219e1ffcc66SDimitris Michailidis 
220e1ffcc66SDimitris Michailidis 			__be32 epsqid;
221e1ffcc66SDimitris Michailidis 			__u8 rsvd1;
222e1ffcc66SDimitris Michailidis 			__u8 entry_size_log2;
223e1ffcc66SDimitris Michailidis 			__be16 nentries;
224e1ffcc66SDimitris Michailidis 
225e1ffcc66SDimitris Michailidis 			__be64 address;
226e1ffcc66SDimitris Michailidis 
227e1ffcc66SDimitris Michailidis 			__be16 tailroom; /* per packet tailroom in bytes */
228e1ffcc66SDimitris Michailidis 			__u8 headroom; /* per packet headroom in 2B units */
229e1ffcc66SDimitris Michailidis 			__u8 intcoal_kbytes;
230e1ffcc66SDimitris Michailidis 			__u8 intcoal_holdoff_nentries;
231e1ffcc66SDimitris Michailidis 			__u8 intcoal_holdoff_usecs;
232e1ffcc66SDimitris Michailidis 			__be16 intid;
233e1ffcc66SDimitris Michailidis 
234e1ffcc66SDimitris Michailidis 			__be32 scan_start_id;
235e1ffcc66SDimitris Michailidis 			__be32 scan_end_id;
236e1ffcc66SDimitris Michailidis 
237e1ffcc66SDimitris Michailidis 			__be16 tph_cpuid;
238e1ffcc66SDimitris Michailidis 			__u8 rsvd3[6];
239e1ffcc66SDimitris Michailidis 		} create;
240e1ffcc66SDimitris Michailidis 
241e1ffcc66SDimitris Michailidis 		struct fun_admin_epcq_modify_req {
242e1ffcc66SDimitris Michailidis 			__u8 subop;
243e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
244e1ffcc66SDimitris Michailidis 			__be16 flags;
245e1ffcc66SDimitris Michailidis 			__be32 id;
246e1ffcc66SDimitris Michailidis 
247e1ffcc66SDimitris Michailidis 			__be16 headroom; /* headroom in bytes */
248e1ffcc66SDimitris Michailidis 			__u8 rsvd1[6];
249e1ffcc66SDimitris Michailidis 		} modify;
250e1ffcc66SDimitris Michailidis 	} u;
251e1ffcc66SDimitris Michailidis };
252e1ffcc66SDimitris Michailidis 
253e1ffcc66SDimitris Michailidis #define FUN_ADMIN_EPCQ_CREATE_REQ_INIT(                                      \
254e1ffcc66SDimitris Michailidis 	_subop, _flags, _id, _epsqid, _entry_size_log2, _nentries, _address, \
255e1ffcc66SDimitris Michailidis 	_tailroom, _headroom, _intcoal_kbytes, _intcoal_holdoff_nentries,    \
256e1ffcc66SDimitris Michailidis 	_intcoal_holdoff_usecs, _intid, _scan_start_id, _scan_end_id,        \
257e1ffcc66SDimitris Michailidis 	_tph_cpuid)                                                          \
258e1ffcc66SDimitris Michailidis 	(struct fun_admin_epcq_create_req) {                                 \
259e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),             \
260e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .epsqid = cpu_to_be32(_epsqid),      \
261e1ffcc66SDimitris Michailidis 		.entry_size_log2 = _entry_size_log2,                         \
262e1ffcc66SDimitris Michailidis 		.nentries = cpu_to_be16(_nentries),                          \
263e1ffcc66SDimitris Michailidis 		.address = cpu_to_be64(_address),                            \
264e1ffcc66SDimitris Michailidis 		.tailroom = cpu_to_be16(_tailroom), .headroom = _headroom,   \
265e1ffcc66SDimitris Michailidis 		.intcoal_kbytes = _intcoal_kbytes,                           \
266e1ffcc66SDimitris Michailidis 		.intcoal_holdoff_nentries = _intcoal_holdoff_nentries,       \
267e1ffcc66SDimitris Michailidis 		.intcoal_holdoff_usecs = _intcoal_holdoff_usecs,             \
268e1ffcc66SDimitris Michailidis 		.intid = cpu_to_be16(_intid),                                \
269e1ffcc66SDimitris Michailidis 		.scan_start_id = cpu_to_be32(_scan_start_id),                \
270e1ffcc66SDimitris Michailidis 		.scan_end_id = cpu_to_be32(_scan_end_id),                    \
271e1ffcc66SDimitris Michailidis 		.tph_cpuid = cpu_to_be16(_tph_cpuid),                        \
272e1ffcc66SDimitris Michailidis 	}
273e1ffcc66SDimitris Michailidis 
274e1ffcc66SDimitris Michailidis #define FUN_ADMIN_EPCQ_MODIFY_REQ_INIT(_subop, _flags, _id, _headroom)      \
275e1ffcc66SDimitris Michailidis 	(struct fun_admin_epcq_modify_req) {                                \
276e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),            \
277e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .headroom = cpu_to_be16(_headroom), \
278e1ffcc66SDimitris Michailidis 	}
279e1ffcc66SDimitris Michailidis 
280e1ffcc66SDimitris Michailidis enum {
281e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_INT_EPSQ = 0x2,
282e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_ENTRY_RD_TPH = 0x4,
283e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_GL_RD_TPH = 0x8,
284e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_HEAD_WB_ADDRESS = 0x10,
285e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_HEAD_WB_ADDRESS_TPH = 0x20,
286e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_HEAD_WB_EPCQ = 0x40,
287e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_RQ = 0x80,
288e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_INT_IQ = 0x100,
289e1ffcc66SDimitris Michailidis 	FUN_ADMIN_EPSQ_CREATE_FLAG_NO_CMPL = 0x200,
290e1ffcc66SDimitris Michailidis };
291e1ffcc66SDimitris Michailidis 
292e1ffcc66SDimitris Michailidis struct fun_admin_epsq_req {
293e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
294e1ffcc66SDimitris Michailidis 
295e1ffcc66SDimitris Michailidis 	union epsq_req_subop {
296e1ffcc66SDimitris Michailidis 		struct fun_admin_epsq_create_req {
297e1ffcc66SDimitris Michailidis 			__u8 subop;
298e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
299e1ffcc66SDimitris Michailidis 			__be16 flags;
300e1ffcc66SDimitris Michailidis 			__be32 id;
301e1ffcc66SDimitris Michailidis 
302e1ffcc66SDimitris Michailidis 			__be32 epcqid;
303e1ffcc66SDimitris Michailidis 			__u8 rsvd1;
304e1ffcc66SDimitris Michailidis 			__u8 entry_size_log2;
305e1ffcc66SDimitris Michailidis 			__be16 nentries;
306e1ffcc66SDimitris Michailidis 
307e1ffcc66SDimitris Michailidis 			__be64 address; /* DMA address of epsq */
308e1ffcc66SDimitris Michailidis 
309e1ffcc66SDimitris Michailidis 			__u8 rsvd2[3];
310e1ffcc66SDimitris Michailidis 			__u8 intcoal_kbytes;
311e1ffcc66SDimitris Michailidis 			__u8 intcoal_holdoff_nentries;
312e1ffcc66SDimitris Michailidis 			__u8 intcoal_holdoff_usecs;
313e1ffcc66SDimitris Michailidis 			__be16 intid;
314e1ffcc66SDimitris Michailidis 
315e1ffcc66SDimitris Michailidis 			__be32 scan_start_id;
316e1ffcc66SDimitris Michailidis 			__be32 scan_end_id;
317e1ffcc66SDimitris Michailidis 
318e1ffcc66SDimitris Michailidis 			__u8 rsvd3[4];
319e1ffcc66SDimitris Michailidis 			__be16 tph_cpuid;
320e1ffcc66SDimitris Michailidis 			__u8 buf_size_log2; /* log2 of RQ buffer size */
321e1ffcc66SDimitris Michailidis 			__u8 head_wb_size_log2; /* log2 of head write back size */
322e1ffcc66SDimitris Michailidis 
323e1ffcc66SDimitris Michailidis 			__be64 head_wb_address; /* DMA address for head writeback */
324e1ffcc66SDimitris Michailidis 		} create;
325e1ffcc66SDimitris Michailidis 	} u;
326e1ffcc66SDimitris Michailidis };
327e1ffcc66SDimitris Michailidis 
328e1ffcc66SDimitris Michailidis #define FUN_ADMIN_EPSQ_CREATE_REQ_INIT(                                      \
329e1ffcc66SDimitris Michailidis 	_subop, _flags, _id, _epcqid, _entry_size_log2, _nentries, _address, \
330e1ffcc66SDimitris Michailidis 	_intcoal_kbytes, _intcoal_holdoff_nentries, _intcoal_holdoff_usecs,  \
331e1ffcc66SDimitris Michailidis 	_intid, _scan_start_id, _scan_end_id, _tph_cpuid, _buf_size_log2,    \
332e1ffcc66SDimitris Michailidis 	_head_wb_size_log2, _head_wb_address)                                \
333e1ffcc66SDimitris Michailidis 	(struct fun_admin_epsq_create_req) {                                 \
334e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),             \
335e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .epcqid = cpu_to_be32(_epcqid),      \
336e1ffcc66SDimitris Michailidis 		.entry_size_log2 = _entry_size_log2,                         \
337e1ffcc66SDimitris Michailidis 		.nentries = cpu_to_be16(_nentries),                          \
338e1ffcc66SDimitris Michailidis 		.address = cpu_to_be64(_address),                            \
339e1ffcc66SDimitris Michailidis 		.intcoal_kbytes = _intcoal_kbytes,                           \
340e1ffcc66SDimitris Michailidis 		.intcoal_holdoff_nentries = _intcoal_holdoff_nentries,       \
341e1ffcc66SDimitris Michailidis 		.intcoal_holdoff_usecs = _intcoal_holdoff_usecs,             \
342e1ffcc66SDimitris Michailidis 		.intid = cpu_to_be16(_intid),                                \
343e1ffcc66SDimitris Michailidis 		.scan_start_id = cpu_to_be32(_scan_start_id),                \
344e1ffcc66SDimitris Michailidis 		.scan_end_id = cpu_to_be32(_scan_end_id),                    \
345e1ffcc66SDimitris Michailidis 		.tph_cpuid = cpu_to_be16(_tph_cpuid),                        \
346e1ffcc66SDimitris Michailidis 		.buf_size_log2 = _buf_size_log2,                             \
347e1ffcc66SDimitris Michailidis 		.head_wb_size_log2 = _head_wb_size_log2,                     \
348e1ffcc66SDimitris Michailidis 		.head_wb_address = cpu_to_be64(_head_wb_address),            \
349e1ffcc66SDimitris Michailidis 	}
350e1ffcc66SDimitris Michailidis 
351e1ffcc66SDimitris Michailidis enum {
352e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_OFFLOADS = 0x1,
353e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_STATS = 0x2,
354e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_LOOPBACK = 0x4,
355e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_VPORT = 0x8,
356e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_TX_PAUSE = 0x10,
357e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_RX_PAUSE = 0x20,
358e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_AUTONEG = 0x40,
359e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_RSS = 0x80,
360e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_VLAN_OFFLOADS = 0x100,
361e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_ENCAP_OFFLOADS = 0x200,
362e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_1000_X = 0x1000,
363e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_10G_R = 0x2000,
364e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_40G_R4 = 0x4000,
365e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_25G_R = 0x8000,
366e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_50G_R2 = 0x10000,
367e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_50G_R = 0x20000,
368e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_100G_R4 = 0x40000,
369e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_100G_R2 = 0x80000,
370e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_200G_R4 = 0x100000,
371e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_FEC_NONE = 0x10000000,
372e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_FEC_FC = 0x20000000,
373e1ffcc66SDimitris Michailidis 	FUN_PORT_CAP_FEC_RS = 0x40000000,
374e1ffcc66SDimitris Michailidis };
375e1ffcc66SDimitris Michailidis 
376e1ffcc66SDimitris Michailidis enum fun_port_brkout_mode {
377e1ffcc66SDimitris Michailidis 	FUN_PORT_BRKMODE_NA = 0x0,
378e1ffcc66SDimitris Michailidis 	FUN_PORT_BRKMODE_NONE = 0x1,
379e1ffcc66SDimitris Michailidis 	FUN_PORT_BRKMODE_2X = 0x2,
380e1ffcc66SDimitris Michailidis 	FUN_PORT_BRKMODE_4X = 0x3,
381e1ffcc66SDimitris Michailidis };
382e1ffcc66SDimitris Michailidis 
383e1ffcc66SDimitris Michailidis enum {
384e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_AUTO = 0x0,
385e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_10M = 0x1,
386e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_100M = 0x2,
387e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_1G = 0x4,
388e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_10G = 0x8,
389e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_25G = 0x10,
390e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_40G = 0x20,
391e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_50G = 0x40,
392e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_100G = 0x80,
393e1ffcc66SDimitris Michailidis 	FUN_PORT_SPEED_200G = 0x100,
394e1ffcc66SDimitris Michailidis };
395e1ffcc66SDimitris Michailidis 
396e1ffcc66SDimitris Michailidis enum fun_port_duplex_mode {
397e1ffcc66SDimitris Michailidis 	FUN_PORT_FULL_DUPLEX = 0x0,
398e1ffcc66SDimitris Michailidis 	FUN_PORT_HALF_DUPLEX = 0x1,
399e1ffcc66SDimitris Michailidis };
400e1ffcc66SDimitris Michailidis 
401e1ffcc66SDimitris Michailidis enum {
402e1ffcc66SDimitris Michailidis 	FUN_PORT_FEC_NA = 0x0,
403e1ffcc66SDimitris Michailidis 	FUN_PORT_FEC_OFF = 0x1,
404e1ffcc66SDimitris Michailidis 	FUN_PORT_FEC_RS = 0x2,
405e1ffcc66SDimitris Michailidis 	FUN_PORT_FEC_FC = 0x4,
406e1ffcc66SDimitris Michailidis 	FUN_PORT_FEC_AUTO = 0x8,
407e1ffcc66SDimitris Michailidis };
408e1ffcc66SDimitris Michailidis 
409e1ffcc66SDimitris Michailidis enum fun_port_link_status {
410e1ffcc66SDimitris Michailidis 	FUN_PORT_LINK_UP = 0x0,
411e1ffcc66SDimitris Michailidis 	FUN_PORT_LINK_UP_WITH_ERR = 0x1,
412e1ffcc66SDimitris Michailidis 	FUN_PORT_LINK_DOWN = 0x2,
413e1ffcc66SDimitris Michailidis };
414e1ffcc66SDimitris Michailidis 
415e1ffcc66SDimitris Michailidis enum fun_port_led_type {
416e1ffcc66SDimitris Michailidis 	FUN_PORT_LED_OFF = 0x0,
417e1ffcc66SDimitris Michailidis 	FUN_PORT_LED_AMBER = 0x1,
418e1ffcc66SDimitris Michailidis 	FUN_PORT_LED_GREEN = 0x2,
419e1ffcc66SDimitris Michailidis 	FUN_PORT_LED_BEACON_ON = 0x3,
420e1ffcc66SDimitris Michailidis 	FUN_PORT_LED_BEACON_OFF = 0x4,
421e1ffcc66SDimitris Michailidis };
422e1ffcc66SDimitris Michailidis 
423e1ffcc66SDimitris Michailidis enum {
424e1ffcc66SDimitris Michailidis 	FUN_PORT_FLAG_MAC_DOWN = 0x1,
425e1ffcc66SDimitris Michailidis 	FUN_PORT_FLAG_MAC_UP = 0x2,
426e1ffcc66SDimitris Michailidis 	FUN_PORT_FLAG_NH_DOWN = 0x4,
427e1ffcc66SDimitris Michailidis 	FUN_PORT_FLAG_NH_UP = 0x8,
428e1ffcc66SDimitris Michailidis };
429e1ffcc66SDimitris Michailidis 
430e1ffcc66SDimitris Michailidis enum {
431e1ffcc66SDimitris Michailidis 	FUN_PORT_FLAG_ENABLE_NOTIFY = 0x1,
432e1ffcc66SDimitris Michailidis };
433e1ffcc66SDimitris Michailidis 
434e1ffcc66SDimitris Michailidis enum fun_port_lane_attr {
435e1ffcc66SDimitris Michailidis 	FUN_PORT_LANE_1 = 0x1,
436e1ffcc66SDimitris Michailidis 	FUN_PORT_LANE_2 = 0x2,
437e1ffcc66SDimitris Michailidis 	FUN_PORT_LANE_4 = 0x4,
438e1ffcc66SDimitris Michailidis 	FUN_PORT_LANE_SPEED_10G = 0x100,
439e1ffcc66SDimitris Michailidis 	FUN_PORT_LANE_SPEED_25G = 0x200,
440e1ffcc66SDimitris Michailidis 	FUN_PORT_LANE_SPEED_50G = 0x400,
441e1ffcc66SDimitris Michailidis 	FUN_PORT_LANE_SPLIT = 0x8000,
442e1ffcc66SDimitris Michailidis };
443e1ffcc66SDimitris Michailidis 
444e1ffcc66SDimitris Michailidis enum fun_admin_port_subop {
445*f03c8a1eSDimitris Michailidis 	FUN_ADMIN_PORT_SUBOP_XCVR_READ = 0x23,
446e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_SUBOP_INETADDR_EVENT = 0x24,
447e1ffcc66SDimitris Michailidis };
448e1ffcc66SDimitris Michailidis 
449e1ffcc66SDimitris Michailidis enum fun_admin_port_key {
450e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_ILLEGAL = 0x0,
451e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_MTU = 0x1,
452e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_FEC = 0x2,
453e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_SPEED = 0x3,
454e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_DEBOUNCE = 0x4,
455e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_DUPLEX = 0x5,
456e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_MACADDR = 0x6,
457e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_LINKMODE = 0x7,
458e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_BREAKOUT = 0x8,
459e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_ENABLE = 0x9,
460e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_DISABLE = 0xa,
461e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_ERR_DISABLE = 0xb,
462e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_CAPABILITIES = 0xc,
463e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_LP_CAPABILITIES = 0xd,
464e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_STATS_DMA_LOW = 0xe,
465e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_STATS_DMA_HIGH = 0xf,
466e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_LANE_ATTRS = 0x10,
467e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_LED = 0x11,
468e1ffcc66SDimitris Michailidis 	FUN_ADMIN_PORT_KEY_ADVERT = 0x12,
469e1ffcc66SDimitris Michailidis };
470e1ffcc66SDimitris Michailidis 
471e1ffcc66SDimitris Michailidis struct fun_subop_imm {
472e1ffcc66SDimitris Michailidis 	__u8 subop; /* see fun_data_subop enum */
473e1ffcc66SDimitris Michailidis 	__u8 flags;
474e1ffcc66SDimitris Michailidis 	__u8 nsgl;
475e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
476e1ffcc66SDimitris Michailidis 	__be32 len;
477e1ffcc66SDimitris Michailidis 
478e1ffcc66SDimitris Michailidis 	__u8 data[];
479e1ffcc66SDimitris Michailidis };
480e1ffcc66SDimitris Michailidis 
481e1ffcc66SDimitris Michailidis enum fun_subop_sgl_flags {
482e1ffcc66SDimitris Michailidis 	FUN_SUBOP_SGL_USE_OFF8 = 0x1,
483e1ffcc66SDimitris Michailidis 	FUN_SUBOP_FLAG_FREE_BUF = 0x2,
484e1ffcc66SDimitris Michailidis 	FUN_SUBOP_FLAG_IS_REFBUF = 0x4,
485e1ffcc66SDimitris Michailidis 	FUN_SUBOP_SGL_FLAG_LOCAL = 0x8,
486e1ffcc66SDimitris Michailidis };
487e1ffcc66SDimitris Michailidis 
488e1ffcc66SDimitris Michailidis enum fun_data_op {
489e1ffcc66SDimitris Michailidis 	FUN_DATAOP_INVALID = 0x0,
490e1ffcc66SDimitris Michailidis 	FUN_DATAOP_SL = 0x1, /* scatter */
491e1ffcc66SDimitris Michailidis 	FUN_DATAOP_GL = 0x2, /* gather */
492e1ffcc66SDimitris Michailidis 	FUN_DATAOP_SGL = 0x3, /* scatter-gather */
493e1ffcc66SDimitris Michailidis 	FUN_DATAOP_IMM = 0x4, /* immediate data */
494e1ffcc66SDimitris Michailidis 	FUN_DATAOP_RQBUF = 0x8, /* rq buffer */
495e1ffcc66SDimitris Michailidis };
496e1ffcc66SDimitris Michailidis 
497e1ffcc66SDimitris Michailidis struct fun_dataop_gl {
498e1ffcc66SDimitris Michailidis 	__u8 subop;
499e1ffcc66SDimitris Michailidis 	__u8 flags;
500e1ffcc66SDimitris Michailidis 	__be16 sgl_off;
501e1ffcc66SDimitris Michailidis 	__be32 sgl_len;
502e1ffcc66SDimitris Michailidis 
503e1ffcc66SDimitris Michailidis 	__be64 sgl_data;
504e1ffcc66SDimitris Michailidis };
505e1ffcc66SDimitris Michailidis 
fun_dataop_gl_init(struct fun_dataop_gl * s,u8 flags,u16 sgl_off,u32 sgl_len,u64 sgl_data)506e1ffcc66SDimitris Michailidis static inline void fun_dataop_gl_init(struct fun_dataop_gl *s, u8 flags,
507e1ffcc66SDimitris Michailidis 				      u16 sgl_off, u32 sgl_len, u64 sgl_data)
508e1ffcc66SDimitris Michailidis {
509e1ffcc66SDimitris Michailidis 	s->subop = FUN_DATAOP_GL;
510e1ffcc66SDimitris Michailidis 	s->flags = flags;
511e1ffcc66SDimitris Michailidis 	s->sgl_off = cpu_to_be16(sgl_off);
512e1ffcc66SDimitris Michailidis 	s->sgl_len = cpu_to_be32(sgl_len);
513e1ffcc66SDimitris Michailidis 	s->sgl_data = cpu_to_be64(sgl_data);
514e1ffcc66SDimitris Michailidis }
515e1ffcc66SDimitris Michailidis 
516e1ffcc66SDimitris Michailidis struct fun_dataop_imm {
517e1ffcc66SDimitris Michailidis 	__u8 subop;
518e1ffcc66SDimitris Michailidis 	__u8 flags;
519e1ffcc66SDimitris Michailidis 	__be16 rsvd0;
520e1ffcc66SDimitris Michailidis 	__be32 sgl_len;
521e1ffcc66SDimitris Michailidis };
522e1ffcc66SDimitris Michailidis 
523e1ffcc66SDimitris Michailidis struct fun_subop_sgl {
524e1ffcc66SDimitris Michailidis 	__u8 subop;
525e1ffcc66SDimitris Michailidis 	__u8 flags;
526e1ffcc66SDimitris Michailidis 	__u8 nsgl;
527e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
528e1ffcc66SDimitris Michailidis 	__be32 sgl_len;
529e1ffcc66SDimitris Michailidis 
530e1ffcc66SDimitris Michailidis 	__be64 sgl_data;
531e1ffcc66SDimitris Michailidis };
532e1ffcc66SDimitris Michailidis 
533e1ffcc66SDimitris Michailidis #define FUN_SUBOP_SGL_INIT(_subop, _flags, _nsgl, _sgl_len, _sgl_data) \
534e1ffcc66SDimitris Michailidis 	(struct fun_subop_sgl) {                                       \
535e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = (_flags), .nsgl = (_nsgl), \
536e1ffcc66SDimitris Michailidis 		.sgl_len = cpu_to_be32(_sgl_len),                      \
537e1ffcc66SDimitris Michailidis 		.sgl_data = cpu_to_be64(_sgl_data),                    \
538e1ffcc66SDimitris Michailidis 	}
539e1ffcc66SDimitris Michailidis 
540e1ffcc66SDimitris Michailidis struct fun_dataop_rqbuf {
541e1ffcc66SDimitris Michailidis 	__u8 subop;
542e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
543e1ffcc66SDimitris Michailidis 	__be16 cid;
544e1ffcc66SDimitris Michailidis 	__be32 bufoff;
545e1ffcc66SDimitris Michailidis };
546e1ffcc66SDimitris Michailidis 
547e1ffcc66SDimitris Michailidis struct fun_dataop_hdr {
548e1ffcc66SDimitris Michailidis 	__u8 nsgl;
549e1ffcc66SDimitris Michailidis 	__u8 flags;
550e1ffcc66SDimitris Michailidis 	__u8 ngather;
551e1ffcc66SDimitris Michailidis 	__u8 nscatter;
552e1ffcc66SDimitris Michailidis 	__be32 total_len;
553e1ffcc66SDimitris Michailidis 
554e1ffcc66SDimitris Michailidis 	struct fun_dataop_imm imm[];
555e1ffcc66SDimitris Michailidis };
556e1ffcc66SDimitris Michailidis 
557e1ffcc66SDimitris Michailidis #define FUN_DATAOP_HDR_INIT(_nsgl, _flags, _ngather, _nscatter, _total_len)  \
558e1ffcc66SDimitris Michailidis 	(struct fun_dataop_hdr) {                                            \
559e1ffcc66SDimitris Michailidis 		.nsgl = _nsgl, .flags = _flags, .ngather = _ngather,         \
560e1ffcc66SDimitris Michailidis 		.nscatter = _nscatter, .total_len = cpu_to_be32(_total_len), \
561e1ffcc66SDimitris Michailidis 	}
562e1ffcc66SDimitris Michailidis 
563e1ffcc66SDimitris Michailidis enum fun_port_inetaddr_event_type {
564e1ffcc66SDimitris Michailidis 	FUN_PORT_INETADDR_ADD = 0x1,
565e1ffcc66SDimitris Michailidis 	FUN_PORT_INETADDR_DEL = 0x2,
566e1ffcc66SDimitris Michailidis };
567e1ffcc66SDimitris Michailidis 
568e1ffcc66SDimitris Michailidis enum fun_port_inetaddr_addr_family {
569e1ffcc66SDimitris Michailidis 	FUN_PORT_INETADDR_IPV4 = 0x1,
570e1ffcc66SDimitris Michailidis 	FUN_PORT_INETADDR_IPV6 = 0x2,
571e1ffcc66SDimitris Michailidis };
572e1ffcc66SDimitris Michailidis 
573e1ffcc66SDimitris Michailidis struct fun_admin_port_req {
574e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
575e1ffcc66SDimitris Michailidis 
576e1ffcc66SDimitris Michailidis 	union port_req_subop {
577e1ffcc66SDimitris Michailidis 		struct fun_admin_port_create_req {
578e1ffcc66SDimitris Michailidis 			__u8 subop;
579e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
580e1ffcc66SDimitris Michailidis 			__be16 flags;
581e1ffcc66SDimitris Michailidis 			__be32 id;
582e1ffcc66SDimitris Michailidis 		} create;
583e1ffcc66SDimitris Michailidis 		struct fun_admin_port_write_req {
584e1ffcc66SDimitris Michailidis 			__u8 subop;
585e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
586e1ffcc66SDimitris Michailidis 			__be16 flags;
587e1ffcc66SDimitris Michailidis 			__be32 id; /* portid */
588e1ffcc66SDimitris Michailidis 
589e1ffcc66SDimitris Michailidis 			struct fun_admin_write48_req write48[];
590e1ffcc66SDimitris Michailidis 		} write;
591e1ffcc66SDimitris Michailidis 		struct fun_admin_port_read_req {
592e1ffcc66SDimitris Michailidis 			__u8 subop;
593e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
594e1ffcc66SDimitris Michailidis 			__be16 flags;
595e1ffcc66SDimitris Michailidis 			__be32 id; /* portid */
596e1ffcc66SDimitris Michailidis 
597e1ffcc66SDimitris Michailidis 			struct fun_admin_read48_req read48[];
598e1ffcc66SDimitris Michailidis 		} read;
599*f03c8a1eSDimitris Michailidis 		struct fun_admin_port_xcvr_read_req {
600*f03c8a1eSDimitris Michailidis 			u8 subop;
601*f03c8a1eSDimitris Michailidis 			u8 rsvd0;
602*f03c8a1eSDimitris Michailidis 			__be16 flags;
603*f03c8a1eSDimitris Michailidis 			__be32 id;
604*f03c8a1eSDimitris Michailidis 
605*f03c8a1eSDimitris Michailidis 			u8 bank;
606*f03c8a1eSDimitris Michailidis 			u8 page;
607*f03c8a1eSDimitris Michailidis 			u8 offset;
608*f03c8a1eSDimitris Michailidis 			u8 length;
609*f03c8a1eSDimitris Michailidis 			u8 dev_addr;
610*f03c8a1eSDimitris Michailidis 			u8 rsvd1[3];
611*f03c8a1eSDimitris Michailidis 		} xcvr_read;
612e1ffcc66SDimitris Michailidis 		struct fun_admin_port_inetaddr_event_req {
613e1ffcc66SDimitris Michailidis 			__u8 subop;
614e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
615e1ffcc66SDimitris Michailidis 			__u8 event_type;
616e1ffcc66SDimitris Michailidis 			__u8 addr_family;
617e1ffcc66SDimitris Michailidis 			__be32 id;
618e1ffcc66SDimitris Michailidis 
619e1ffcc66SDimitris Michailidis 			__u8 addr[];
620e1ffcc66SDimitris Michailidis 		} inetaddr_event;
621e1ffcc66SDimitris Michailidis 	} u;
622e1ffcc66SDimitris Michailidis };
623e1ffcc66SDimitris Michailidis 
624e1ffcc66SDimitris Michailidis #define FUN_ADMIN_PORT_CREATE_REQ_INIT(_subop, _flags, _id)      \
625e1ffcc66SDimitris Michailidis 	(struct fun_admin_port_create_req) {                     \
626e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags), \
627e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id),                          \
628e1ffcc66SDimitris Michailidis 	}
629e1ffcc66SDimitris Michailidis 
630e1ffcc66SDimitris Michailidis #define FUN_ADMIN_PORT_WRITE_REQ_INIT(_subop, _flags, _id)       \
631e1ffcc66SDimitris Michailidis 	(struct fun_admin_port_write_req) {                      \
632e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags), \
633e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id),                          \
634e1ffcc66SDimitris Michailidis 	}
635e1ffcc66SDimitris Michailidis 
636e1ffcc66SDimitris Michailidis #define FUN_ADMIN_PORT_READ_REQ_INIT(_subop, _flags, _id)        \
637e1ffcc66SDimitris Michailidis 	(struct fun_admin_port_read_req) {                       \
638e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags), \
639e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id),                          \
640e1ffcc66SDimitris Michailidis 	}
641e1ffcc66SDimitris Michailidis 
642*f03c8a1eSDimitris Michailidis #define FUN_ADMIN_PORT_XCVR_READ_REQ_INIT(_flags, _id, _bank, _page,   \
643*f03c8a1eSDimitris Michailidis 					  _offset, _length, _dev_addr) \
644*f03c8a1eSDimitris Michailidis 	((struct fun_admin_port_xcvr_read_req) {                       \
645*f03c8a1eSDimitris Michailidis 		.subop = FUN_ADMIN_PORT_SUBOP_XCVR_READ,               \
646*f03c8a1eSDimitris Michailidis 		.flags = cpu_to_be16(_flags), .id = cpu_to_be32(_id),  \
647*f03c8a1eSDimitris Michailidis 		.bank = (_bank), .page = (_page), .offset = (_offset), \
648*f03c8a1eSDimitris Michailidis 		.length = (_length), .dev_addr = (_dev_addr),          \
649*f03c8a1eSDimitris Michailidis 	})
650*f03c8a1eSDimitris Michailidis 
651e1ffcc66SDimitris Michailidis struct fun_admin_port_rsp {
652e1ffcc66SDimitris Michailidis 	struct fun_admin_rsp_common common;
653e1ffcc66SDimitris Michailidis 
654e1ffcc66SDimitris Michailidis 	union port_rsp_subop {
655e1ffcc66SDimitris Michailidis 		struct fun_admin_port_create_rsp {
656e1ffcc66SDimitris Michailidis 			__u8 subop;
657e1ffcc66SDimitris Michailidis 			__u8 rsvd0[3];
658e1ffcc66SDimitris Michailidis 			__be32 id;
659e1ffcc66SDimitris Michailidis 
660e1ffcc66SDimitris Michailidis 			__be16 lport;
661e1ffcc66SDimitris Michailidis 			__u8 rsvd1[6];
662e1ffcc66SDimitris Michailidis 		} create;
663e1ffcc66SDimitris Michailidis 		struct fun_admin_port_write_rsp {
664e1ffcc66SDimitris Michailidis 			__u8 subop;
665e1ffcc66SDimitris Michailidis 			__u8 rsvd0[3];
666e1ffcc66SDimitris Michailidis 			__be32 id; /* portid */
667e1ffcc66SDimitris Michailidis 
668e1ffcc66SDimitris Michailidis 			struct fun_admin_write48_rsp write48[];
669e1ffcc66SDimitris Michailidis 		} write;
670e1ffcc66SDimitris Michailidis 		struct fun_admin_port_read_rsp {
671e1ffcc66SDimitris Michailidis 			__u8 subop;
672e1ffcc66SDimitris Michailidis 			__u8 rsvd0[3];
673e1ffcc66SDimitris Michailidis 			__be32 id; /* portid */
674e1ffcc66SDimitris Michailidis 
675e1ffcc66SDimitris Michailidis 			struct fun_admin_read48_rsp read48[];
676e1ffcc66SDimitris Michailidis 		} read;
677e1ffcc66SDimitris Michailidis 		struct fun_admin_port_inetaddr_event_rsp {
678e1ffcc66SDimitris Michailidis 			__u8 subop;
679e1ffcc66SDimitris Michailidis 			__u8 rsvd0[3];
680e1ffcc66SDimitris Michailidis 			__be32 id; /* portid */
681e1ffcc66SDimitris Michailidis 		} inetaddr_event;
682e1ffcc66SDimitris Michailidis 	} u;
683e1ffcc66SDimitris Michailidis };
684e1ffcc66SDimitris Michailidis 
685*f03c8a1eSDimitris Michailidis struct fun_admin_port_xcvr_read_rsp {
686*f03c8a1eSDimitris Michailidis 	struct fun_admin_rsp_common common;
687*f03c8a1eSDimitris Michailidis 
688*f03c8a1eSDimitris Michailidis 	u8 subop;
689*f03c8a1eSDimitris Michailidis 	u8 rsvd0[3];
690*f03c8a1eSDimitris Michailidis 	__be32 id;
691*f03c8a1eSDimitris Michailidis 
692*f03c8a1eSDimitris Michailidis 	u8 bank;
693*f03c8a1eSDimitris Michailidis 	u8 page;
694*f03c8a1eSDimitris Michailidis 	u8 offset;
695*f03c8a1eSDimitris Michailidis 	u8 length;
696*f03c8a1eSDimitris Michailidis 	u8 dev_addr;
697*f03c8a1eSDimitris Michailidis 	u8 rsvd1[3];
698*f03c8a1eSDimitris Michailidis 
699*f03c8a1eSDimitris Michailidis 	u8 data[128];
700*f03c8a1eSDimitris Michailidis };
701*f03c8a1eSDimitris Michailidis 
702e1ffcc66SDimitris Michailidis enum fun_xcvr_type {
703e1ffcc66SDimitris Michailidis 	FUN_XCVR_BASET = 0x0,
704e1ffcc66SDimitris Michailidis 	FUN_XCVR_CU = 0x1,
705e1ffcc66SDimitris Michailidis 	FUN_XCVR_SMF = 0x2,
706e1ffcc66SDimitris Michailidis 	FUN_XCVR_MMF = 0x3,
707e1ffcc66SDimitris Michailidis 	FUN_XCVR_AOC = 0x4,
708e1ffcc66SDimitris Michailidis 	FUN_XCVR_SFPP = 0x10, /* SFP+ or later */
709e1ffcc66SDimitris Michailidis 	FUN_XCVR_QSFPP = 0x11, /* QSFP+ or later */
710e1ffcc66SDimitris Michailidis 	FUN_XCVR_QSFPDD = 0x12, /* QSFP-DD */
711e1ffcc66SDimitris Michailidis };
712e1ffcc66SDimitris Michailidis 
713e1ffcc66SDimitris Michailidis struct fun_admin_port_notif {
714e1ffcc66SDimitris Michailidis 	struct fun_admin_rsp_common common;
715e1ffcc66SDimitris Michailidis 
716e1ffcc66SDimitris Michailidis 	__u8 subop;
717e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
718e1ffcc66SDimitris Michailidis 	__be16 id;
719e1ffcc66SDimitris Michailidis 	__be32 speed; /* in 10 Mbps units */
720e1ffcc66SDimitris Michailidis 
721e1ffcc66SDimitris Michailidis 	__u8 link_state;
722e1ffcc66SDimitris Michailidis 	__u8 missed_events;
723e1ffcc66SDimitris Michailidis 	__u8 link_down_reason;
724e1ffcc66SDimitris Michailidis 	__u8 xcvr_type;
725e1ffcc66SDimitris Michailidis 	__u8 flow_ctrl;
726e1ffcc66SDimitris Michailidis 	__u8 fec;
727e1ffcc66SDimitris Michailidis 	__u8 active_lanes;
728e1ffcc66SDimitris Michailidis 	__u8 rsvd1;
729e1ffcc66SDimitris Michailidis 
730e1ffcc66SDimitris Michailidis 	__be64 advertising;
731e1ffcc66SDimitris Michailidis 
732e1ffcc66SDimitris Michailidis 	__be64 lp_advertising;
733e1ffcc66SDimitris Michailidis };
734e1ffcc66SDimitris Michailidis 
735e1ffcc66SDimitris Michailidis enum fun_eth_rss_const {
736e1ffcc66SDimitris Michailidis 	FUN_ETH_RSS_MAX_KEY_SIZE = 0x28,
737e1ffcc66SDimitris Michailidis 	FUN_ETH_RSS_MAX_INDIR_ENT = 0x40,
738e1ffcc66SDimitris Michailidis };
739e1ffcc66SDimitris Michailidis 
740e1ffcc66SDimitris Michailidis enum fun_eth_hash_alg {
741e1ffcc66SDimitris Michailidis 	FUN_ETH_RSS_ALG_INVALID = 0x0,
742e1ffcc66SDimitris Michailidis 	FUN_ETH_RSS_ALG_TOEPLITZ = 0x1,
743e1ffcc66SDimitris Michailidis 	FUN_ETH_RSS_ALG_CRC32 = 0x2,
744e1ffcc66SDimitris Michailidis };
745e1ffcc66SDimitris Michailidis 
746e1ffcc66SDimitris Michailidis struct fun_admin_rss_req {
747e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
748e1ffcc66SDimitris Michailidis 
749e1ffcc66SDimitris Michailidis 	union rss_req_subop {
750e1ffcc66SDimitris Michailidis 		struct fun_admin_rss_create_req {
751e1ffcc66SDimitris Michailidis 			__u8 subop;
752e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
753e1ffcc66SDimitris Michailidis 			__be16 flags;
754e1ffcc66SDimitris Michailidis 			__be32 id;
755e1ffcc66SDimitris Michailidis 
756e1ffcc66SDimitris Michailidis 			__be32 rsvd1;
757e1ffcc66SDimitris Michailidis 			__be32 viid; /* VI flow id */
758e1ffcc66SDimitris Michailidis 
759e1ffcc66SDimitris Michailidis 			__be64 metadata[1];
760e1ffcc66SDimitris Michailidis 
761e1ffcc66SDimitris Michailidis 			__u8 alg;
762e1ffcc66SDimitris Michailidis 			__u8 keylen;
763e1ffcc66SDimitris Michailidis 			__u8 indir_nent;
764e1ffcc66SDimitris Michailidis 			__u8 rsvd2;
765e1ffcc66SDimitris Michailidis 			__be16 key_off;
766e1ffcc66SDimitris Michailidis 			__be16 indir_off;
767e1ffcc66SDimitris Michailidis 
768e1ffcc66SDimitris Michailidis 			struct fun_dataop_hdr dataop;
769e1ffcc66SDimitris Michailidis 		} create;
770e1ffcc66SDimitris Michailidis 	} u;
771e1ffcc66SDimitris Michailidis };
772e1ffcc66SDimitris Michailidis 
773e1ffcc66SDimitris Michailidis #define FUN_ADMIN_RSS_CREATE_REQ_INIT(_subop, _flags, _id, _viid, _alg,    \
774e1ffcc66SDimitris Michailidis 				      _keylen, _indir_nent, _key_off,      \
775e1ffcc66SDimitris Michailidis 				      _indir_off)                          \
776e1ffcc66SDimitris Michailidis 	(struct fun_admin_rss_create_req) {                                \
777e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),           \
778e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .viid = cpu_to_be32(_viid),        \
779e1ffcc66SDimitris Michailidis 		.alg = _alg, .keylen = _keylen, .indir_nent = _indir_nent, \
780e1ffcc66SDimitris Michailidis 		.key_off = cpu_to_be16(_key_off),                          \
781e1ffcc66SDimitris Michailidis 		.indir_off = cpu_to_be16(_indir_off),                      \
782e1ffcc66SDimitris Michailidis 	}
783e1ffcc66SDimitris Michailidis 
784e1ffcc66SDimitris Michailidis struct fun_admin_vi_req {
785e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
786e1ffcc66SDimitris Michailidis 
787e1ffcc66SDimitris Michailidis 	union vi_req_subop {
788e1ffcc66SDimitris Michailidis 		struct fun_admin_vi_create_req {
789e1ffcc66SDimitris Michailidis 			__u8 subop;
790e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
791e1ffcc66SDimitris Michailidis 			__be16 flags;
792e1ffcc66SDimitris Michailidis 			__be32 id;
793e1ffcc66SDimitris Michailidis 
794e1ffcc66SDimitris Michailidis 			__be32 rsvd1;
795e1ffcc66SDimitris Michailidis 			__be32 portid; /* port flow id */
796e1ffcc66SDimitris Michailidis 		} create;
797e1ffcc66SDimitris Michailidis 	} u;
798e1ffcc66SDimitris Michailidis };
799e1ffcc66SDimitris Michailidis 
800e1ffcc66SDimitris Michailidis #define FUN_ADMIN_VI_CREATE_REQ_INIT(_subop, _flags, _id, _portid)      \
801e1ffcc66SDimitris Michailidis 	(struct fun_admin_vi_create_req) {                              \
802e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),        \
803e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .portid = cpu_to_be32(_portid), \
804e1ffcc66SDimitris Michailidis 	}
805e1ffcc66SDimitris Michailidis 
806e1ffcc66SDimitris Michailidis struct fun_admin_eth_req {
807e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
808e1ffcc66SDimitris Michailidis 
809e1ffcc66SDimitris Michailidis 	union eth_req_subop {
810e1ffcc66SDimitris Michailidis 		struct fun_admin_eth_create_req {
811e1ffcc66SDimitris Michailidis 			__u8 subop;
812e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
813e1ffcc66SDimitris Michailidis 			__be16 flags;
814e1ffcc66SDimitris Michailidis 			__be32 id;
815e1ffcc66SDimitris Michailidis 
816e1ffcc66SDimitris Michailidis 			__be32 rsvd1;
817e1ffcc66SDimitris Michailidis 			__be32 portid; /* port flow id */
818e1ffcc66SDimitris Michailidis 		} create;
819e1ffcc66SDimitris Michailidis 	} u;
820e1ffcc66SDimitris Michailidis };
821e1ffcc66SDimitris Michailidis 
822e1ffcc66SDimitris Michailidis #define FUN_ADMIN_ETH_CREATE_REQ_INIT(_subop, _flags, _id, _portid)     \
823e1ffcc66SDimitris Michailidis 	(struct fun_admin_eth_create_req) {                             \
824e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),        \
825e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .portid = cpu_to_be32(_portid), \
826e1ffcc66SDimitris Michailidis 	}
827e1ffcc66SDimitris Michailidis 
828e1ffcc66SDimitris Michailidis enum {
829e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_UPGRADE_FLAG_INIT = 0x10,
830e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_UPGRADE_FLAG_COMPLETE = 0x20,
831e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_UPGRADE_FLAG_DOWNGRADE = 0x40,
832e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_UPGRADE_FLAG_ACTIVE_IMAGE = 0x80,
833e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_UPGRADE_FLAG_ASYNC = 0x1,
834e1ffcc66SDimitris Michailidis };
835e1ffcc66SDimitris Michailidis 
836e1ffcc66SDimitris Michailidis enum fun_admin_swu_subop {
837e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_SUBOP_GET_VERSION = 0x20,
838e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_SUBOP_UPGRADE = 0x21,
839e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_SUBOP_UPGRADE_DATA = 0x22,
840e1ffcc66SDimitris Michailidis 	FUN_ADMIN_SWU_SUBOP_GET_ALL_VERSIONS = 0x23,
841e1ffcc66SDimitris Michailidis };
842e1ffcc66SDimitris Michailidis 
843e1ffcc66SDimitris Michailidis struct fun_admin_swu_req {
844e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
845e1ffcc66SDimitris Michailidis 
846e1ffcc66SDimitris Michailidis 	union swu_req_subop {
847e1ffcc66SDimitris Michailidis 		struct fun_admin_swu_create_req {
848e1ffcc66SDimitris Michailidis 			__u8 subop;
849e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
850e1ffcc66SDimitris Michailidis 			__be16 flags;
851e1ffcc66SDimitris Michailidis 			__be32 id;
852e1ffcc66SDimitris Michailidis 		} create;
853e1ffcc66SDimitris Michailidis 		struct fun_admin_swu_upgrade_req {
854e1ffcc66SDimitris Michailidis 			__u8 subop;
855e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
856e1ffcc66SDimitris Michailidis 			__be16 flags;
857e1ffcc66SDimitris Michailidis 			__be32 id;
858e1ffcc66SDimitris Michailidis 
859e1ffcc66SDimitris Michailidis 			__be32 fourcc;
860e1ffcc66SDimitris Michailidis 			__be32 rsvd1;
861e1ffcc66SDimitris Michailidis 
862e1ffcc66SDimitris Michailidis 			__be64 image_size; /* upgrade image length */
863e1ffcc66SDimitris Michailidis 		} upgrade;
864e1ffcc66SDimitris Michailidis 		struct fun_admin_swu_upgrade_data_req {
865e1ffcc66SDimitris Michailidis 			__u8 subop;
866e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
867e1ffcc66SDimitris Michailidis 			__be16 flags;
868e1ffcc66SDimitris Michailidis 			__be32 id;
869e1ffcc66SDimitris Michailidis 
870e1ffcc66SDimitris Michailidis 			__be32 offset; /* offset of data in this command */
871e1ffcc66SDimitris Michailidis 			__be32 size; /* total size of data in this command */
872e1ffcc66SDimitris Michailidis 		} upgrade_data;
873e1ffcc66SDimitris Michailidis 	} u;
874e1ffcc66SDimitris Michailidis 
875e1ffcc66SDimitris Michailidis 	struct fun_subop_sgl sgl[]; /* in, out buffers through sgl */
876e1ffcc66SDimitris Michailidis };
877e1ffcc66SDimitris Michailidis 
878e1ffcc66SDimitris Michailidis #define FUN_ADMIN_SWU_CREATE_REQ_INIT(_subop, _flags, _id)       \
879e1ffcc66SDimitris Michailidis 	(struct fun_admin_swu_create_req) {                      \
880e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags), \
881e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id),                          \
882e1ffcc66SDimitris Michailidis 	}
883e1ffcc66SDimitris Michailidis 
884e1ffcc66SDimitris Michailidis #define FUN_ADMIN_SWU_UPGRADE_REQ_INIT(_subop, _flags, _id, _fourcc,    \
885e1ffcc66SDimitris Michailidis 				       _image_size)                     \
886e1ffcc66SDimitris Michailidis 	(struct fun_admin_swu_upgrade_req) {                            \
887e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),        \
888e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .fourcc = cpu_to_be32(_fourcc), \
889e1ffcc66SDimitris Michailidis 		.image_size = cpu_to_be64(_image_size),                 \
890e1ffcc66SDimitris Michailidis 	}
891e1ffcc66SDimitris Michailidis 
892e1ffcc66SDimitris Michailidis #define FUN_ADMIN_SWU_UPGRADE_DATA_REQ_INIT(_subop, _flags, _id, _offset, \
893e1ffcc66SDimitris Michailidis 					    _size)                        \
894e1ffcc66SDimitris Michailidis 	(struct fun_admin_swu_upgrade_data_req) {                         \
895e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),          \
896e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .offset = cpu_to_be32(_offset),   \
897e1ffcc66SDimitris Michailidis 		.size = cpu_to_be32(_size),                               \
898e1ffcc66SDimitris Michailidis 	}
899e1ffcc66SDimitris Michailidis 
900e1ffcc66SDimitris Michailidis struct fun_admin_swu_rsp {
901e1ffcc66SDimitris Michailidis 	struct fun_admin_rsp_common common;
902e1ffcc66SDimitris Michailidis 
903e1ffcc66SDimitris Michailidis 	union swu_rsp_subop {
904e1ffcc66SDimitris Michailidis 		struct fun_admin_swu_create_rsp {
905e1ffcc66SDimitris Michailidis 			__u8 subop;
906e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
907e1ffcc66SDimitris Michailidis 			__be16 flags;
908e1ffcc66SDimitris Michailidis 			__be32 id;
909e1ffcc66SDimitris Michailidis 		} create;
910e1ffcc66SDimitris Michailidis 		struct fun_admin_swu_upgrade_rsp {
911e1ffcc66SDimitris Michailidis 			__u8 subop;
912e1ffcc66SDimitris Michailidis 			__u8 rsvd0[3];
913e1ffcc66SDimitris Michailidis 			__be32 id;
914e1ffcc66SDimitris Michailidis 
915e1ffcc66SDimitris Michailidis 			__be32 fourcc;
916e1ffcc66SDimitris Michailidis 			__be32 status;
917e1ffcc66SDimitris Michailidis 
918e1ffcc66SDimitris Michailidis 			__be32 progress;
919e1ffcc66SDimitris Michailidis 			__be32 unused;
920e1ffcc66SDimitris Michailidis 		} upgrade;
921e1ffcc66SDimitris Michailidis 		struct fun_admin_swu_upgrade_data_rsp {
922e1ffcc66SDimitris Michailidis 			__u8 subop;
923e1ffcc66SDimitris Michailidis 			__u8 rsvd0;
924e1ffcc66SDimitris Michailidis 			__be16 flags;
925e1ffcc66SDimitris Michailidis 			__be32 id;
926e1ffcc66SDimitris Michailidis 
927e1ffcc66SDimitris Michailidis 			__be32 offset;
928e1ffcc66SDimitris Michailidis 			__be32 size;
929e1ffcc66SDimitris Michailidis 		} upgrade_data;
930e1ffcc66SDimitris Michailidis 	} u;
931e1ffcc66SDimitris Michailidis };
932e1ffcc66SDimitris Michailidis 
933e1ffcc66SDimitris Michailidis enum fun_ktls_version {
934e1ffcc66SDimitris Michailidis 	FUN_KTLS_TLSV2 = 0x20,
935e1ffcc66SDimitris Michailidis 	FUN_KTLS_TLSV3 = 0x30,
936e1ffcc66SDimitris Michailidis };
937e1ffcc66SDimitris Michailidis 
938e1ffcc66SDimitris Michailidis enum fun_ktls_cipher {
939e1ffcc66SDimitris Michailidis 	FUN_KTLS_CIPHER_AES_GCM_128 = 0x33,
940e1ffcc66SDimitris Michailidis 	FUN_KTLS_CIPHER_AES_GCM_256 = 0x34,
941e1ffcc66SDimitris Michailidis 	FUN_KTLS_CIPHER_AES_CCM_128 = 0x35,
942e1ffcc66SDimitris Michailidis 	FUN_KTLS_CIPHER_CHACHA20_POLY1305 = 0x36,
943e1ffcc66SDimitris Michailidis };
944e1ffcc66SDimitris Michailidis 
945e1ffcc66SDimitris Michailidis enum fun_ktls_modify_flags {
946e1ffcc66SDimitris Michailidis 	FUN_KTLS_MODIFY_REMOVE = 0x1,
947e1ffcc66SDimitris Michailidis };
948e1ffcc66SDimitris Michailidis 
949e1ffcc66SDimitris Michailidis struct fun_admin_ktls_create_req {
950e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
951e1ffcc66SDimitris Michailidis 
952e1ffcc66SDimitris Michailidis 	__u8 subop;
953e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
954e1ffcc66SDimitris Michailidis 	__be16 flags;
955e1ffcc66SDimitris Michailidis 	__be32 id;
956e1ffcc66SDimitris Michailidis };
957e1ffcc66SDimitris Michailidis 
958e1ffcc66SDimitris Michailidis #define FUN_ADMIN_KTLS_CREATE_REQ_INIT(_subop, _flags, _id)      \
959e1ffcc66SDimitris Michailidis 	(struct fun_admin_ktls_create_req) {                     \
960e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags), \
961e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id),                          \
962e1ffcc66SDimitris Michailidis 	}
963e1ffcc66SDimitris Michailidis 
964e1ffcc66SDimitris Michailidis struct fun_admin_ktls_create_rsp {
965e1ffcc66SDimitris Michailidis 	struct fun_admin_rsp_common common;
966e1ffcc66SDimitris Michailidis 
967e1ffcc66SDimitris Michailidis 	__u8 subop;
968e1ffcc66SDimitris Michailidis 	__u8 rsvd0[3];
969e1ffcc66SDimitris Michailidis 	__be32 id;
970e1ffcc66SDimitris Michailidis };
971e1ffcc66SDimitris Michailidis 
972e1ffcc66SDimitris Michailidis struct fun_admin_ktls_modify_req {
973e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
974e1ffcc66SDimitris Michailidis 
975e1ffcc66SDimitris Michailidis 	__u8 subop;
976e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
977e1ffcc66SDimitris Michailidis 	__be16 flags;
978e1ffcc66SDimitris Michailidis 	__be32 id;
979e1ffcc66SDimitris Michailidis 
980e1ffcc66SDimitris Michailidis 	__be64 tlsid;
981e1ffcc66SDimitris Michailidis 
982e1ffcc66SDimitris Michailidis 	__be32 tcp_seq;
983e1ffcc66SDimitris Michailidis 	__u8 version;
984e1ffcc66SDimitris Michailidis 	__u8 cipher;
985e1ffcc66SDimitris Michailidis 	__u8 rsvd1[2];
986e1ffcc66SDimitris Michailidis 
987e1ffcc66SDimitris Michailidis 	__u8 record_seq[8];
988e1ffcc66SDimitris Michailidis 
989e1ffcc66SDimitris Michailidis 	__u8 key[32];
990e1ffcc66SDimitris Michailidis 
991e1ffcc66SDimitris Michailidis 	__u8 iv[16];
992e1ffcc66SDimitris Michailidis 
993e1ffcc66SDimitris Michailidis 	__u8 salt[8];
994e1ffcc66SDimitris Michailidis };
995e1ffcc66SDimitris Michailidis 
996e1ffcc66SDimitris Michailidis #define FUN_ADMIN_KTLS_MODIFY_REQ_INIT(_subop, _flags, _id, _tlsid, _tcp_seq, \
997e1ffcc66SDimitris Michailidis 				       _version, _cipher)                     \
998e1ffcc66SDimitris Michailidis 	(struct fun_admin_ktls_modify_req) {                                  \
999e1ffcc66SDimitris Michailidis 		.subop = (_subop), .flags = cpu_to_be16(_flags),              \
1000e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id), .tlsid = cpu_to_be64(_tlsid),         \
1001e1ffcc66SDimitris Michailidis 		.tcp_seq = cpu_to_be32(_tcp_seq), .version = _version,        \
1002e1ffcc66SDimitris Michailidis 		.cipher = _cipher,                                            \
1003e1ffcc66SDimitris Michailidis 	}
1004e1ffcc66SDimitris Michailidis 
1005e1ffcc66SDimitris Michailidis struct fun_admin_ktls_modify_rsp {
1006e1ffcc66SDimitris Michailidis 	struct fun_admin_rsp_common common;
1007e1ffcc66SDimitris Michailidis 
1008e1ffcc66SDimitris Michailidis 	__u8 subop;
1009e1ffcc66SDimitris Michailidis 	__u8 rsvd0[3];
1010e1ffcc66SDimitris Michailidis 	__be32 id;
1011e1ffcc66SDimitris Michailidis 
1012e1ffcc66SDimitris Michailidis 	__be64 tlsid;
1013e1ffcc66SDimitris Michailidis };
1014e1ffcc66SDimitris Michailidis 
1015e1ffcc66SDimitris Michailidis struct fun_req_common {
1016e1ffcc66SDimitris Michailidis 	__u8 op;
1017e1ffcc66SDimitris Michailidis 	__u8 len8;
1018e1ffcc66SDimitris Michailidis 	__be16 flags;
1019e1ffcc66SDimitris Michailidis 	__u8 suboff8;
1020e1ffcc66SDimitris Michailidis 	__u8 rsvd0;
1021e1ffcc66SDimitris Michailidis 	__be16 cid;
1022e1ffcc66SDimitris Michailidis };
1023e1ffcc66SDimitris Michailidis 
1024e1ffcc66SDimitris Michailidis struct fun_rsp_common {
1025e1ffcc66SDimitris Michailidis 	__u8 op;
1026e1ffcc66SDimitris Michailidis 	__u8 len8;
1027e1ffcc66SDimitris Michailidis 	__be16 flags;
1028e1ffcc66SDimitris Michailidis 	__u8 suboff8;
1029e1ffcc66SDimitris Michailidis 	__u8 ret;
1030e1ffcc66SDimitris Michailidis 	__be16 cid;
1031e1ffcc66SDimitris Michailidis };
1032e1ffcc66SDimitris Michailidis 
1033e1ffcc66SDimitris Michailidis struct fun_cqe_info {
1034e1ffcc66SDimitris Michailidis 	__be16 sqhd;
1035e1ffcc66SDimitris Michailidis 	__be16 sqid;
1036e1ffcc66SDimitris Michailidis 	__be16 cid;
1037e1ffcc66SDimitris Michailidis 	__be16 sf_p;
1038e1ffcc66SDimitris Michailidis };
1039e1ffcc66SDimitris Michailidis 
1040e1ffcc66SDimitris Michailidis enum fun_eprq_def {
1041e1ffcc66SDimitris Michailidis 	FUN_EPRQ_PKT_ALIGN = 0x80,
1042e1ffcc66SDimitris Michailidis };
1043e1ffcc66SDimitris Michailidis 
1044e1ffcc66SDimitris Michailidis struct fun_eprq_rqbuf {
1045e1ffcc66SDimitris Michailidis 	__be64 bufaddr;
1046e1ffcc66SDimitris Michailidis };
1047e1ffcc66SDimitris Michailidis 
1048e1ffcc66SDimitris Michailidis #define FUN_EPRQ_RQBUF_INIT(_bufaddr)             \
1049e1ffcc66SDimitris Michailidis 	(struct fun_eprq_rqbuf) {                 \
1050e1ffcc66SDimitris Michailidis 		.bufaddr = cpu_to_be64(_bufaddr), \
1051e1ffcc66SDimitris Michailidis 	}
1052e1ffcc66SDimitris Michailidis 
1053e1ffcc66SDimitris Michailidis enum fun_eth_op {
1054e1ffcc66SDimitris Michailidis 	FUN_ETH_OP_TX = 0x1,
1055e1ffcc66SDimitris Michailidis 	FUN_ETH_OP_RX = 0x2,
1056e1ffcc66SDimitris Michailidis };
1057e1ffcc66SDimitris Michailidis 
1058e1ffcc66SDimitris Michailidis enum {
1059e1ffcc66SDimitris Michailidis 	FUN_ETH_OFFLOAD_EN = 0x8000,
1060e1ffcc66SDimitris Michailidis 	FUN_ETH_OUTER_EN = 0x4000,
1061e1ffcc66SDimitris Michailidis 	FUN_ETH_INNER_LSO = 0x2000,
1062e1ffcc66SDimitris Michailidis 	FUN_ETH_INNER_TSO = 0x1000,
1063e1ffcc66SDimitris Michailidis 	FUN_ETH_OUTER_IPV6 = 0x800,
1064e1ffcc66SDimitris Michailidis 	FUN_ETH_OUTER_UDP = 0x400,
1065e1ffcc66SDimitris Michailidis 	FUN_ETH_INNER_IPV6 = 0x200,
1066e1ffcc66SDimitris Michailidis 	FUN_ETH_INNER_UDP = 0x100,
1067e1ffcc66SDimitris Michailidis 	FUN_ETH_UPDATE_OUTER_L3_LEN = 0x80,
1068e1ffcc66SDimitris Michailidis 	FUN_ETH_UPDATE_OUTER_L3_CKSUM = 0x40,
1069e1ffcc66SDimitris Michailidis 	FUN_ETH_UPDATE_OUTER_L4_LEN = 0x20,
1070e1ffcc66SDimitris Michailidis 	FUN_ETH_UPDATE_OUTER_L4_CKSUM = 0x10,
1071e1ffcc66SDimitris Michailidis 	FUN_ETH_UPDATE_INNER_L3_LEN = 0x8,
1072e1ffcc66SDimitris Michailidis 	FUN_ETH_UPDATE_INNER_L3_CKSUM = 0x4,
1073e1ffcc66SDimitris Michailidis 	FUN_ETH_UPDATE_INNER_L4_LEN = 0x2,
1074e1ffcc66SDimitris Michailidis 	FUN_ETH_UPDATE_INNER_L4_CKSUM = 0x1,
1075e1ffcc66SDimitris Michailidis };
1076e1ffcc66SDimitris Michailidis 
1077e1ffcc66SDimitris Michailidis struct fun_eth_offload {
1078e1ffcc66SDimitris Michailidis 	__be16 flags; /* combination of above flags */
1079e1ffcc66SDimitris Michailidis 	__be16 mss; /* TSO max seg size */
1080e1ffcc66SDimitris Michailidis 	__be16 tcp_doff_flags; /* TCP data offset + flags 16b word */
1081e1ffcc66SDimitris Michailidis 	__be16 vlan;
1082e1ffcc66SDimitris Michailidis 
1083e1ffcc66SDimitris Michailidis 	__be16 inner_l3_off; /* Inner L3 header offset */
1084e1ffcc66SDimitris Michailidis 	__be16 inner_l4_off; /* Inner L4 header offset */
1085e1ffcc66SDimitris Michailidis 	__be16 outer_l3_off; /* Outer L3 header offset */
1086e1ffcc66SDimitris Michailidis 	__be16 outer_l4_off; /* Outer L4 header offset */
1087e1ffcc66SDimitris Michailidis };
1088e1ffcc66SDimitris Michailidis 
fun_eth_offload_init(struct fun_eth_offload * s,u16 flags,u16 mss,__be16 tcp_doff_flags,__be16 vlan,u16 inner_l3_off,u16 inner_l4_off,u16 outer_l3_off,u16 outer_l4_off)1089e1ffcc66SDimitris Michailidis static inline void fun_eth_offload_init(struct fun_eth_offload *s, u16 flags,
1090e1ffcc66SDimitris Michailidis 					u16 mss, __be16 tcp_doff_flags,
1091e1ffcc66SDimitris Michailidis 					__be16 vlan, u16 inner_l3_off,
1092e1ffcc66SDimitris Michailidis 					u16 inner_l4_off, u16 outer_l3_off,
1093e1ffcc66SDimitris Michailidis 					u16 outer_l4_off)
1094e1ffcc66SDimitris Michailidis {
1095e1ffcc66SDimitris Michailidis 	s->flags = cpu_to_be16(flags);
1096e1ffcc66SDimitris Michailidis 	s->mss = cpu_to_be16(mss);
1097e1ffcc66SDimitris Michailidis 	s->tcp_doff_flags = tcp_doff_flags;
1098e1ffcc66SDimitris Michailidis 	s->vlan = vlan;
1099e1ffcc66SDimitris Michailidis 	s->inner_l3_off = cpu_to_be16(inner_l3_off);
1100e1ffcc66SDimitris Michailidis 	s->inner_l4_off = cpu_to_be16(inner_l4_off);
1101e1ffcc66SDimitris Michailidis 	s->outer_l3_off = cpu_to_be16(outer_l3_off);
1102e1ffcc66SDimitris Michailidis 	s->outer_l4_off = cpu_to_be16(outer_l4_off);
1103e1ffcc66SDimitris Michailidis }
1104e1ffcc66SDimitris Michailidis 
1105e1ffcc66SDimitris Michailidis struct fun_eth_tls {
1106e1ffcc66SDimitris Michailidis 	__be64 tlsid;
1107e1ffcc66SDimitris Michailidis };
1108e1ffcc66SDimitris Michailidis 
1109e1ffcc66SDimitris Michailidis enum {
1110e1ffcc66SDimitris Michailidis 	FUN_ETH_TX_TLS = 0x8000,
1111e1ffcc66SDimitris Michailidis };
1112e1ffcc66SDimitris Michailidis 
1113e1ffcc66SDimitris Michailidis struct fun_eth_tx_req {
1114e1ffcc66SDimitris Michailidis 	__u8 op;
1115e1ffcc66SDimitris Michailidis 	__u8 len8;
1116e1ffcc66SDimitris Michailidis 	__be16 flags;
1117e1ffcc66SDimitris Michailidis 	__u8 suboff8;
1118e1ffcc66SDimitris Michailidis 	__u8 repr_idn;
1119e1ffcc66SDimitris Michailidis 	__be16 encap_proto;
1120e1ffcc66SDimitris Michailidis 
1121e1ffcc66SDimitris Michailidis 	struct fun_eth_offload offload;
1122e1ffcc66SDimitris Michailidis 
1123e1ffcc66SDimitris Michailidis 	struct fun_dataop_hdr dataop;
1124e1ffcc66SDimitris Michailidis };
1125e1ffcc66SDimitris Michailidis 
1126e1ffcc66SDimitris Michailidis struct fun_eth_rx_cv {
1127e1ffcc66SDimitris Michailidis 	__be16 il4_prot_to_l2_type;
1128e1ffcc66SDimitris Michailidis };
1129e1ffcc66SDimitris Michailidis 
1130e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_IL4_PROT_S 13U
1131e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_IL4_PROT_M 0x3
1132e1ffcc66SDimitris Michailidis 
1133e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_IL3_PROT_S 11U
1134e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_IL3_PROT_M 0x3
1135e1ffcc66SDimitris Michailidis 
1136e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_OL4_PROT_S 8U
1137e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_OL4_PROT_M 0x7
1138e1ffcc66SDimitris Michailidis 
1139e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_ENCAP_TYPE_S 6U
1140e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_ENCAP_TYPE_M 0x3
1141e1ffcc66SDimitris Michailidis 
1142e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_OL3_PROT_S 4U
1143e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_OL3_PROT_M 0x3
1144e1ffcc66SDimitris Michailidis 
1145e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_VLAN_TYPE_S 3U
1146e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_VLAN_TYPE_M 0x1
1147e1ffcc66SDimitris Michailidis 
1148e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_L2_TYPE_S 2U
1149e1ffcc66SDimitris Michailidis #define FUN_ETH_RX_CV_L2_TYPE_M 0x1
1150e1ffcc66SDimitris Michailidis 
1151e1ffcc66SDimitris Michailidis enum fun_rx_cv {
1152e1ffcc66SDimitris Michailidis 	FUN_RX_CV_NONE = 0x0,
1153e1ffcc66SDimitris Michailidis 	FUN_RX_CV_IP = 0x2,
1154e1ffcc66SDimitris Michailidis 	FUN_RX_CV_IP6 = 0x3,
1155e1ffcc66SDimitris Michailidis 	FUN_RX_CV_TCP = 0x2,
1156e1ffcc66SDimitris Michailidis 	FUN_RX_CV_UDP = 0x3,
1157e1ffcc66SDimitris Michailidis 	FUN_RX_CV_VXLAN = 0x2,
1158e1ffcc66SDimitris Michailidis 	FUN_RX_CV_MPLS = 0x3,
1159e1ffcc66SDimitris Michailidis };
1160e1ffcc66SDimitris Michailidis 
1161e1ffcc66SDimitris Michailidis struct fun_eth_cqe {
1162e1ffcc66SDimitris Michailidis 	__u8 op;
1163e1ffcc66SDimitris Michailidis 	__u8 len8;
1164e1ffcc66SDimitris Michailidis 	__u8 nsgl;
1165e1ffcc66SDimitris Michailidis 	__u8 repr_idn;
1166e1ffcc66SDimitris Michailidis 	__be32 pkt_len;
1167e1ffcc66SDimitris Michailidis 
1168e1ffcc66SDimitris Michailidis 	__be64 timestamp;
1169e1ffcc66SDimitris Michailidis 
1170e1ffcc66SDimitris Michailidis 	__be16 pkt_cv;
1171e1ffcc66SDimitris Michailidis 	__be16 rsvd0;
1172e1ffcc66SDimitris Michailidis 	__be32 hash;
1173e1ffcc66SDimitris Michailidis 
1174e1ffcc66SDimitris Michailidis 	__be16 encap_proto;
1175e1ffcc66SDimitris Michailidis 	__be16 vlan;
1176e1ffcc66SDimitris Michailidis 	__be32 rsvd1;
1177e1ffcc66SDimitris Michailidis 
1178e1ffcc66SDimitris Michailidis 	__be32 buf_offset;
1179e1ffcc66SDimitris Michailidis 	__be16 headroom;
1180e1ffcc66SDimitris Michailidis 	__be16 csum;
1181e1ffcc66SDimitris Michailidis };
1182e1ffcc66SDimitris Michailidis 
1183e1ffcc66SDimitris Michailidis enum fun_admin_adi_attr {
1184e1ffcc66SDimitris Michailidis 	FUN_ADMIN_ADI_ATTR_MACADDR = 0x1,
1185e1ffcc66SDimitris Michailidis 	FUN_ADMIN_ADI_ATTR_VLAN = 0x2,
1186e1ffcc66SDimitris Michailidis 	FUN_ADMIN_ADI_ATTR_RATE = 0x3,
1187e1ffcc66SDimitris Michailidis };
1188e1ffcc66SDimitris Michailidis 
1189e1ffcc66SDimitris Michailidis struct fun_adi_param {
1190e1ffcc66SDimitris Michailidis 	union adi_param {
1191e1ffcc66SDimitris Michailidis 		struct fun_adi_mac {
1192e1ffcc66SDimitris Michailidis 			__be64 addr;
1193e1ffcc66SDimitris Michailidis 		} mac;
1194e1ffcc66SDimitris Michailidis 		struct fun_adi_vlan {
1195e1ffcc66SDimitris Michailidis 			__be32 rsvd;
1196e1ffcc66SDimitris Michailidis 			__be16 eth_type;
1197e1ffcc66SDimitris Michailidis 			__be16 tci;
1198e1ffcc66SDimitris Michailidis 		} vlan;
1199e1ffcc66SDimitris Michailidis 		struct fun_adi_rate {
1200e1ffcc66SDimitris Michailidis 			__be32 rsvd;
1201e1ffcc66SDimitris Michailidis 			__be32 tx_mbps;
1202e1ffcc66SDimitris Michailidis 		} rate;
1203e1ffcc66SDimitris Michailidis 	} u;
1204e1ffcc66SDimitris Michailidis };
1205e1ffcc66SDimitris Michailidis 
1206e1ffcc66SDimitris Michailidis #define FUN_ADI_MAC_INIT(_addr)             \
1207e1ffcc66SDimitris Michailidis 	(struct fun_adi_mac) {              \
1208e1ffcc66SDimitris Michailidis 		.addr = cpu_to_be64(_addr), \
1209e1ffcc66SDimitris Michailidis 	}
1210e1ffcc66SDimitris Michailidis 
1211e1ffcc66SDimitris Michailidis #define FUN_ADI_VLAN_INIT(_eth_type, _tci)                                    \
1212e1ffcc66SDimitris Michailidis 	(struct fun_adi_vlan) {                                               \
1213e1ffcc66SDimitris Michailidis 		.eth_type = cpu_to_be16(_eth_type), .tci = cpu_to_be16(_tci), \
1214e1ffcc66SDimitris Michailidis 	}
1215e1ffcc66SDimitris Michailidis 
1216e1ffcc66SDimitris Michailidis #define FUN_ADI_RATE_INIT(_tx_mbps)               \
1217e1ffcc66SDimitris Michailidis 	(struct fun_adi_rate) {                   \
1218e1ffcc66SDimitris Michailidis 		.tx_mbps = cpu_to_be32(_tx_mbps), \
1219e1ffcc66SDimitris Michailidis 	}
1220e1ffcc66SDimitris Michailidis 
1221e1ffcc66SDimitris Michailidis struct fun_admin_adi_req {
1222e1ffcc66SDimitris Michailidis 	struct fun_admin_req_common common;
1223e1ffcc66SDimitris Michailidis 
1224e1ffcc66SDimitris Michailidis 	union adi_req_subop {
1225e1ffcc66SDimitris Michailidis 		struct fun_admin_adi_write_req {
1226e1ffcc66SDimitris Michailidis 			__u8 subop;
1227e1ffcc66SDimitris Michailidis 			__u8 attribute;
1228e1ffcc66SDimitris Michailidis 			__be16 rsvd;
1229e1ffcc66SDimitris Michailidis 			__be32 id;
1230e1ffcc66SDimitris Michailidis 
1231e1ffcc66SDimitris Michailidis 			struct fun_adi_param param;
1232e1ffcc66SDimitris Michailidis 		} write;
1233e1ffcc66SDimitris Michailidis 	} u;
1234e1ffcc66SDimitris Michailidis };
1235e1ffcc66SDimitris Michailidis 
1236e1ffcc66SDimitris Michailidis #define FUN_ADMIN_ADI_WRITE_REQ_INIT(_subop, _attribute, _id) \
1237e1ffcc66SDimitris Michailidis 	(struct fun_admin_adi_write_req) {                    \
1238e1ffcc66SDimitris Michailidis 		.subop = (_subop), .attribute = (_attribute), \
1239e1ffcc66SDimitris Michailidis 		.id = cpu_to_be32(_id),                       \
1240e1ffcc66SDimitris Michailidis 	}
1241e1ffcc66SDimitris Michailidis 
1242e1ffcc66SDimitris Michailidis #endif /* __FUN_HCI_H */
1243