ena_admin_defs.h revision 1.1 1 1.1 jdolecek /*-
2 1.1 jdolecek * BSD LICENSE
3 1.1 jdolecek *
4 1.1 jdolecek * Copyright (c) 2015-2017 Amazon.com, Inc. or its affiliates.
5 1.1 jdolecek * All rights reserved.
6 1.1 jdolecek *
7 1.1 jdolecek * Redistribution and use in source and binary forms, with or without
8 1.1 jdolecek * modification, are permitted provided that the following conditions
9 1.1 jdolecek * are met:
10 1.1 jdolecek *
11 1.1 jdolecek * * Redistributions of source code must retain the above copyright
12 1.1 jdolecek * notice, this list of conditions and the following disclaimer.
13 1.1 jdolecek * * Redistributions in binary form must reproduce the above copyright
14 1.1 jdolecek * notice, this list of conditions and the following disclaimer in
15 1.1 jdolecek * the documentation and/or other materials provided with the
16 1.1 jdolecek * distribution.
17 1.1 jdolecek * * Neither the name of copyright holder nor the names of its
18 1.1 jdolecek * contributors may be used to endorse or promote products derived
19 1.1 jdolecek * from this software without specific prior written permission.
20 1.1 jdolecek *
21 1.1 jdolecek * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 1.1 jdolecek * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 1.1 jdolecek * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 1.1 jdolecek * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 1.1 jdolecek * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 1.1 jdolecek * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 1.1 jdolecek * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 1.1 jdolecek * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 1.1 jdolecek * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 1.1 jdolecek * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 1.1 jdolecek * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
32 1.1 jdolecek */
33 1.1 jdolecek
34 1.1 jdolecek #ifndef _ENA_ADMIN_H_
35 1.1 jdolecek #define _ENA_ADMIN_H_
36 1.1 jdolecek
37 1.1 jdolecek enum ena_admin_aq_opcode {
38 1.1 jdolecek ENA_ADMIN_CREATE_SQ = 1,
39 1.1 jdolecek
40 1.1 jdolecek ENA_ADMIN_DESTROY_SQ = 2,
41 1.1 jdolecek
42 1.1 jdolecek ENA_ADMIN_CREATE_CQ = 3,
43 1.1 jdolecek
44 1.1 jdolecek ENA_ADMIN_DESTROY_CQ = 4,
45 1.1 jdolecek
46 1.1 jdolecek ENA_ADMIN_GET_FEATURE = 8,
47 1.1 jdolecek
48 1.1 jdolecek ENA_ADMIN_SET_FEATURE = 9,
49 1.1 jdolecek
50 1.1 jdolecek ENA_ADMIN_GET_STATS = 11,
51 1.1 jdolecek };
52 1.1 jdolecek
53 1.1 jdolecek enum ena_admin_aq_completion_status {
54 1.1 jdolecek ENA_ADMIN_SUCCESS = 0,
55 1.1 jdolecek
56 1.1 jdolecek ENA_ADMIN_RESOURCE_ALLOCATION_FAILURE = 1,
57 1.1 jdolecek
58 1.1 jdolecek ENA_ADMIN_BAD_OPCODE = 2,
59 1.1 jdolecek
60 1.1 jdolecek ENA_ADMIN_UNSUPPORTED_OPCODE = 3,
61 1.1 jdolecek
62 1.1 jdolecek ENA_ADMIN_MALFORMED_REQUEST = 4,
63 1.1 jdolecek
64 1.1 jdolecek /* Additional status is provided in ACQ entry extended_status */
65 1.1 jdolecek ENA_ADMIN_ILLEGAL_PARAMETER = 5,
66 1.1 jdolecek
67 1.1 jdolecek ENA_ADMIN_UNKNOWN_ERROR = 6,
68 1.1 jdolecek };
69 1.1 jdolecek
70 1.1 jdolecek enum ena_admin_aq_feature_id {
71 1.1 jdolecek ENA_ADMIN_DEVICE_ATTRIBUTES = 1,
72 1.1 jdolecek
73 1.1 jdolecek ENA_ADMIN_MAX_QUEUES_NUM = 2,
74 1.1 jdolecek
75 1.1 jdolecek ENA_ADMIN_HW_HINTS = 3,
76 1.1 jdolecek
77 1.1 jdolecek ENA_ADMIN_RSS_HASH_FUNCTION = 10,
78 1.1 jdolecek
79 1.1 jdolecek ENA_ADMIN_STATELESS_OFFLOAD_CONFIG = 11,
80 1.1 jdolecek
81 1.1 jdolecek ENA_ADMIN_RSS_REDIRECTION_TABLE_CONFIG = 12,
82 1.1 jdolecek
83 1.1 jdolecek ENA_ADMIN_MTU = 14,
84 1.1 jdolecek
85 1.1 jdolecek ENA_ADMIN_RSS_HASH_INPUT = 18,
86 1.1 jdolecek
87 1.1 jdolecek ENA_ADMIN_INTERRUPT_MODERATION = 20,
88 1.1 jdolecek
89 1.1 jdolecek ENA_ADMIN_AENQ_CONFIG = 26,
90 1.1 jdolecek
91 1.1 jdolecek ENA_ADMIN_LINK_CONFIG = 27,
92 1.1 jdolecek
93 1.1 jdolecek ENA_ADMIN_HOST_ATTR_CONFIG = 28,
94 1.1 jdolecek
95 1.1 jdolecek ENA_ADMIN_FEATURES_OPCODE_NUM = 32,
96 1.1 jdolecek };
97 1.1 jdolecek
98 1.1 jdolecek enum ena_admin_placement_policy_type {
99 1.1 jdolecek /* descriptors and headers are in host memory */
100 1.1 jdolecek ENA_ADMIN_PLACEMENT_POLICY_HOST = 1,
101 1.1 jdolecek
102 1.1 jdolecek /* descriptors and headers are in device memory (a.k.a Low Latency
103 1.1 jdolecek * Queue)
104 1.1 jdolecek */
105 1.1 jdolecek ENA_ADMIN_PLACEMENT_POLICY_DEV = 3,
106 1.1 jdolecek };
107 1.1 jdolecek
108 1.1 jdolecek enum ena_admin_link_types {
109 1.1 jdolecek ENA_ADMIN_LINK_SPEED_1G = 0x1,
110 1.1 jdolecek
111 1.1 jdolecek ENA_ADMIN_LINK_SPEED_2_HALF_G = 0x2,
112 1.1 jdolecek
113 1.1 jdolecek ENA_ADMIN_LINK_SPEED_5G = 0x4,
114 1.1 jdolecek
115 1.1 jdolecek ENA_ADMIN_LINK_SPEED_10G = 0x8,
116 1.1 jdolecek
117 1.1 jdolecek ENA_ADMIN_LINK_SPEED_25G = 0x10,
118 1.1 jdolecek
119 1.1 jdolecek ENA_ADMIN_LINK_SPEED_40G = 0x20,
120 1.1 jdolecek
121 1.1 jdolecek ENA_ADMIN_LINK_SPEED_50G = 0x40,
122 1.1 jdolecek
123 1.1 jdolecek ENA_ADMIN_LINK_SPEED_100G = 0x80,
124 1.1 jdolecek
125 1.1 jdolecek ENA_ADMIN_LINK_SPEED_200G = 0x100,
126 1.1 jdolecek
127 1.1 jdolecek ENA_ADMIN_LINK_SPEED_400G = 0x200,
128 1.1 jdolecek };
129 1.1 jdolecek
130 1.1 jdolecek enum ena_admin_completion_policy_type {
131 1.1 jdolecek /* completion queue entry for each sq descriptor */
132 1.1 jdolecek ENA_ADMIN_COMPLETION_POLICY_DESC = 0,
133 1.1 jdolecek
134 1.1 jdolecek /* completion queue entry upon request in sq descriptor */
135 1.1 jdolecek ENA_ADMIN_COMPLETION_POLICY_DESC_ON_DEMAND = 1,
136 1.1 jdolecek
137 1.1 jdolecek /* current queue head pointer is updated in OS memory upon sq
138 1.1 jdolecek * descriptor request
139 1.1 jdolecek */
140 1.1 jdolecek ENA_ADMIN_COMPLETION_POLICY_HEAD_ON_DEMAND = 2,
141 1.1 jdolecek
142 1.1 jdolecek /* current queue head pointer is updated in OS memory for each sq
143 1.1 jdolecek * descriptor
144 1.1 jdolecek */
145 1.1 jdolecek ENA_ADMIN_COMPLETION_POLICY_HEAD = 3,
146 1.1 jdolecek };
147 1.1 jdolecek
148 1.1 jdolecek /* basic stats return ena_admin_basic_stats while extanded stats return a
149 1.1 jdolecek * buffer (string format) with additional statistics per queue and per
150 1.1 jdolecek * device id
151 1.1 jdolecek */
152 1.1 jdolecek enum ena_admin_get_stats_type {
153 1.1 jdolecek ENA_ADMIN_GET_STATS_TYPE_BASIC = 0,
154 1.1 jdolecek
155 1.1 jdolecek ENA_ADMIN_GET_STATS_TYPE_EXTENDED = 1,
156 1.1 jdolecek };
157 1.1 jdolecek
158 1.1 jdolecek enum ena_admin_get_stats_scope {
159 1.1 jdolecek ENA_ADMIN_SPECIFIC_QUEUE = 0,
160 1.1 jdolecek
161 1.1 jdolecek ENA_ADMIN_ETH_TRAFFIC = 1,
162 1.1 jdolecek };
163 1.1 jdolecek
164 1.1 jdolecek struct ena_admin_aq_common_desc {
165 1.1 jdolecek /* 11:0 : command_id
166 1.1 jdolecek * 15:12 : reserved12
167 1.1 jdolecek */
168 1.1 jdolecek uint16_t command_id;
169 1.1 jdolecek
170 1.1 jdolecek /* as appears in ena_admin_aq_opcode */
171 1.1 jdolecek uint8_t opcode;
172 1.1 jdolecek
173 1.1 jdolecek /* 0 : phase
174 1.1 jdolecek * 1 : ctrl_data - control buffer address valid
175 1.1 jdolecek * 2 : ctrl_data_indirect - control buffer address
176 1.1 jdolecek * points to list of pages with addresses of control
177 1.1 jdolecek * buffers
178 1.1 jdolecek * 7:3 : reserved3
179 1.1 jdolecek */
180 1.1 jdolecek uint8_t flags;
181 1.1 jdolecek };
182 1.1 jdolecek
183 1.1 jdolecek /* used in ena_admin_aq_entry. Can point directly to control data, or to a
184 1.1 jdolecek * page list chunk. Used also at the end of indirect mode page list chunks,
185 1.1 jdolecek * for chaining.
186 1.1 jdolecek */
187 1.1 jdolecek struct ena_admin_ctrl_buff_info {
188 1.1 jdolecek uint32_t length;
189 1.1 jdolecek
190 1.1 jdolecek struct ena_common_mem_addr address;
191 1.1 jdolecek };
192 1.1 jdolecek
193 1.1 jdolecek struct ena_admin_sq {
194 1.1 jdolecek uint16_t sq_idx;
195 1.1 jdolecek
196 1.1 jdolecek /* 4:0 : reserved
197 1.1 jdolecek * 7:5 : sq_direction - 0x1 - Tx; 0x2 - Rx
198 1.1 jdolecek */
199 1.1 jdolecek uint8_t sq_identity;
200 1.1 jdolecek
201 1.1 jdolecek uint8_t reserved1;
202 1.1 jdolecek };
203 1.1 jdolecek
204 1.1 jdolecek struct ena_admin_aq_entry {
205 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor;
206 1.1 jdolecek
207 1.1 jdolecek union {
208 1.1 jdolecek uint32_t inline_data_w1[3];
209 1.1 jdolecek
210 1.1 jdolecek struct ena_admin_ctrl_buff_info control_buffer;
211 1.1 jdolecek } u;
212 1.1 jdolecek
213 1.1 jdolecek uint32_t inline_data_w4[12];
214 1.1 jdolecek };
215 1.1 jdolecek
216 1.1 jdolecek struct ena_admin_acq_common_desc {
217 1.1 jdolecek /* command identifier to associate it with the aq descriptor
218 1.1 jdolecek * 11:0 : command_id
219 1.1 jdolecek * 15:12 : reserved12
220 1.1 jdolecek */
221 1.1 jdolecek uint16_t command;
222 1.1 jdolecek
223 1.1 jdolecek uint8_t status;
224 1.1 jdolecek
225 1.1 jdolecek /* 0 : phase
226 1.1 jdolecek * 7:1 : reserved1
227 1.1 jdolecek */
228 1.1 jdolecek uint8_t flags;
229 1.1 jdolecek
230 1.1 jdolecek uint16_t extended_status;
231 1.1 jdolecek
232 1.1 jdolecek /* serves as a hint what AQ entries can be revoked */
233 1.1 jdolecek uint16_t sq_head_indx;
234 1.1 jdolecek };
235 1.1 jdolecek
236 1.1 jdolecek struct ena_admin_acq_entry {
237 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_descriptor;
238 1.1 jdolecek
239 1.1 jdolecek uint32_t response_specific_data[14];
240 1.1 jdolecek };
241 1.1 jdolecek
242 1.1 jdolecek struct ena_admin_aq_create_sq_cmd {
243 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor;
244 1.1 jdolecek
245 1.1 jdolecek /* 4:0 : reserved0_w1
246 1.1 jdolecek * 7:5 : sq_direction - 0x1 - Tx, 0x2 - Rx
247 1.1 jdolecek */
248 1.1 jdolecek uint8_t sq_identity;
249 1.1 jdolecek
250 1.1 jdolecek uint8_t reserved8_w1;
251 1.1 jdolecek
252 1.1 jdolecek /* 3:0 : placement_policy - Describing where the SQ
253 1.1 jdolecek * descriptor ring and the SQ packet headers reside:
254 1.1 jdolecek * 0x1 - descriptors and headers are in OS memory,
255 1.1 jdolecek * 0x3 - descriptors and headers in device memory
256 1.1 jdolecek * (a.k.a Low Latency Queue)
257 1.1 jdolecek * 6:4 : completion_policy - Describing what policy
258 1.1 jdolecek * to use for generation completion entry (cqe) in
259 1.1 jdolecek * the CQ associated with this SQ: 0x0 - cqe for each
260 1.1 jdolecek * sq descriptor, 0x1 - cqe upon request in sq
261 1.1 jdolecek * descriptor, 0x2 - current queue head pointer is
262 1.1 jdolecek * updated in OS memory upon sq descriptor request
263 1.1 jdolecek * 0x3 - current queue head pointer is updated in OS
264 1.1 jdolecek * memory for each sq descriptor
265 1.1 jdolecek * 7 : reserved15_w1
266 1.1 jdolecek */
267 1.1 jdolecek uint8_t sq_caps_2;
268 1.1 jdolecek
269 1.1 jdolecek /* 0 : is_physically_contiguous - Described if the
270 1.1 jdolecek * queue ring memory is allocated in physical
271 1.1 jdolecek * contiguous pages or split.
272 1.1 jdolecek * 7:1 : reserved17_w1
273 1.1 jdolecek */
274 1.1 jdolecek uint8_t sq_caps_3;
275 1.1 jdolecek
276 1.1 jdolecek /* associated completion queue id. This CQ must be created prior to
277 1.1 jdolecek * SQ creation
278 1.1 jdolecek */
279 1.1 jdolecek uint16_t cq_idx;
280 1.1 jdolecek
281 1.1 jdolecek /* submission queue depth in entries */
282 1.1 jdolecek uint16_t sq_depth;
283 1.1 jdolecek
284 1.1 jdolecek /* SQ physical base address in OS memory. This field should not be
285 1.1 jdolecek * used for Low Latency queues. Has to be page aligned.
286 1.1 jdolecek */
287 1.1 jdolecek struct ena_common_mem_addr sq_ba;
288 1.1 jdolecek
289 1.1 jdolecek /* specifies queue head writeback location in OS memory. Valid if
290 1.1 jdolecek * completion_policy is set to completion_policy_head_on_demand or
291 1.1 jdolecek * completion_policy_head. Has to be cache aligned
292 1.1 jdolecek */
293 1.1 jdolecek struct ena_common_mem_addr sq_head_writeback;
294 1.1 jdolecek
295 1.1 jdolecek uint32_t reserved0_w7;
296 1.1 jdolecek
297 1.1 jdolecek uint32_t reserved0_w8;
298 1.1 jdolecek };
299 1.1 jdolecek
300 1.1 jdolecek enum ena_admin_sq_direction {
301 1.1 jdolecek ENA_ADMIN_SQ_DIRECTION_TX = 1,
302 1.1 jdolecek
303 1.1 jdolecek ENA_ADMIN_SQ_DIRECTION_RX = 2,
304 1.1 jdolecek };
305 1.1 jdolecek
306 1.1 jdolecek struct ena_admin_acq_create_sq_resp_desc {
307 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc;
308 1.1 jdolecek
309 1.1 jdolecek uint16_t sq_idx;
310 1.1 jdolecek
311 1.1 jdolecek uint16_t reserved;
312 1.1 jdolecek
313 1.1 jdolecek /* queue doorbell address as an offset to PCIe MMIO REG BAR */
314 1.1 jdolecek uint32_t sq_doorbell_offset;
315 1.1 jdolecek
316 1.1 jdolecek /* low latency queue ring base address as an offset to PCIe MMIO
317 1.1 jdolecek * LLQ_MEM BAR
318 1.1 jdolecek */
319 1.1 jdolecek uint32_t llq_descriptors_offset;
320 1.1 jdolecek
321 1.1 jdolecek /* low latency queue headers' memory as an offset to PCIe MMIO
322 1.1 jdolecek * LLQ_MEM BAR
323 1.1 jdolecek */
324 1.1 jdolecek uint32_t llq_headers_offset;
325 1.1 jdolecek };
326 1.1 jdolecek
327 1.1 jdolecek struct ena_admin_aq_destroy_sq_cmd {
328 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor;
329 1.1 jdolecek
330 1.1 jdolecek struct ena_admin_sq sq;
331 1.1 jdolecek };
332 1.1 jdolecek
333 1.1 jdolecek struct ena_admin_acq_destroy_sq_resp_desc {
334 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc;
335 1.1 jdolecek };
336 1.1 jdolecek
337 1.1 jdolecek struct ena_admin_aq_create_cq_cmd {
338 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor;
339 1.1 jdolecek
340 1.1 jdolecek /* 4:0 : reserved5
341 1.1 jdolecek * 5 : interrupt_mode_enabled - if set, cq operates
342 1.1 jdolecek * in interrupt mode, otherwise - polling
343 1.1 jdolecek * 7:6 : reserved6
344 1.1 jdolecek */
345 1.1 jdolecek uint8_t cq_caps_1;
346 1.1 jdolecek
347 1.1 jdolecek /* 4:0 : cq_entry_size_words - size of CQ entry in
348 1.1 jdolecek * 32-bit words, valid values: 4, 8.
349 1.1 jdolecek * 7:5 : reserved7
350 1.1 jdolecek */
351 1.1 jdolecek uint8_t cq_caps_2;
352 1.1 jdolecek
353 1.1 jdolecek /* completion queue depth in # of entries. must be power of 2 */
354 1.1 jdolecek uint16_t cq_depth;
355 1.1 jdolecek
356 1.1 jdolecek /* msix vector assigned to this cq */
357 1.1 jdolecek uint32_t msix_vector;
358 1.1 jdolecek
359 1.1 jdolecek /* cq physical base address in OS memory. CQ must be physically
360 1.1 jdolecek * contiguous
361 1.1 jdolecek */
362 1.1 jdolecek struct ena_common_mem_addr cq_ba;
363 1.1 jdolecek };
364 1.1 jdolecek
365 1.1 jdolecek struct ena_admin_acq_create_cq_resp_desc {
366 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc;
367 1.1 jdolecek
368 1.1 jdolecek uint16_t cq_idx;
369 1.1 jdolecek
370 1.1 jdolecek /* actual cq depth in number of entries */
371 1.1 jdolecek uint16_t cq_actual_depth;
372 1.1 jdolecek
373 1.1 jdolecek uint32_t numa_node_register_offset;
374 1.1 jdolecek
375 1.1 jdolecek uint32_t cq_head_db_register_offset;
376 1.1 jdolecek
377 1.1 jdolecek uint32_t cq_interrupt_unmask_register_offset;
378 1.1 jdolecek };
379 1.1 jdolecek
380 1.1 jdolecek struct ena_admin_aq_destroy_cq_cmd {
381 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor;
382 1.1 jdolecek
383 1.1 jdolecek uint16_t cq_idx;
384 1.1 jdolecek
385 1.1 jdolecek uint16_t reserved1;
386 1.1 jdolecek };
387 1.1 jdolecek
388 1.1 jdolecek struct ena_admin_acq_destroy_cq_resp_desc {
389 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc;
390 1.1 jdolecek };
391 1.1 jdolecek
392 1.1 jdolecek /* ENA AQ Get Statistics command. Extended statistics are placed in control
393 1.1 jdolecek * buffer pointed by AQ entry
394 1.1 jdolecek */
395 1.1 jdolecek struct ena_admin_aq_get_stats_cmd {
396 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor;
397 1.1 jdolecek
398 1.1 jdolecek union {
399 1.1 jdolecek /* command specific inline data */
400 1.1 jdolecek uint32_t inline_data_w1[3];
401 1.1 jdolecek
402 1.1 jdolecek struct ena_admin_ctrl_buff_info control_buffer;
403 1.1 jdolecek } u;
404 1.1 jdolecek
405 1.1 jdolecek /* stats type as defined in enum ena_admin_get_stats_type */
406 1.1 jdolecek uint8_t type;
407 1.1 jdolecek
408 1.1 jdolecek /* stats scope defined in enum ena_admin_get_stats_scope */
409 1.1 jdolecek uint8_t scope;
410 1.1 jdolecek
411 1.1 jdolecek uint16_t reserved3;
412 1.1 jdolecek
413 1.1 jdolecek /* queue id. used when scope is specific_queue */
414 1.1 jdolecek uint16_t queue_idx;
415 1.1 jdolecek
416 1.1 jdolecek /* device id, value 0xFFFF means mine. only privileged device can get
417 1.1 jdolecek * stats of other device
418 1.1 jdolecek */
419 1.1 jdolecek uint16_t device_id;
420 1.1 jdolecek };
421 1.1 jdolecek
422 1.1 jdolecek /* Basic Statistics Command. */
423 1.1 jdolecek struct ena_admin_basic_stats {
424 1.1 jdolecek uint32_t tx_bytes_low;
425 1.1 jdolecek
426 1.1 jdolecek uint32_t tx_bytes_high;
427 1.1 jdolecek
428 1.1 jdolecek uint32_t tx_pkts_low;
429 1.1 jdolecek
430 1.1 jdolecek uint32_t tx_pkts_high;
431 1.1 jdolecek
432 1.1 jdolecek uint32_t rx_bytes_low;
433 1.1 jdolecek
434 1.1 jdolecek uint32_t rx_bytes_high;
435 1.1 jdolecek
436 1.1 jdolecek uint32_t rx_pkts_low;
437 1.1 jdolecek
438 1.1 jdolecek uint32_t rx_pkts_high;
439 1.1 jdolecek
440 1.1 jdolecek uint32_t rx_drops_low;
441 1.1 jdolecek
442 1.1 jdolecek uint32_t rx_drops_high;
443 1.1 jdolecek };
444 1.1 jdolecek
445 1.1 jdolecek struct ena_admin_acq_get_stats_resp {
446 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc;
447 1.1 jdolecek
448 1.1 jdolecek struct ena_admin_basic_stats basic_stats;
449 1.1 jdolecek };
450 1.1 jdolecek
451 1.1 jdolecek struct ena_admin_get_set_feature_common_desc {
452 1.1 jdolecek /* 1:0 : select - 0x1 - current value; 0x3 - default
453 1.1 jdolecek * value
454 1.1 jdolecek * 7:3 : reserved3
455 1.1 jdolecek */
456 1.1 jdolecek uint8_t flags;
457 1.1 jdolecek
458 1.1 jdolecek /* as appears in ena_admin_aq_feature_id */
459 1.1 jdolecek uint8_t feature_id;
460 1.1 jdolecek
461 1.1 jdolecek uint16_t reserved16;
462 1.1 jdolecek };
463 1.1 jdolecek
464 1.1 jdolecek struct ena_admin_device_attr_feature_desc {
465 1.1 jdolecek uint32_t impl_id;
466 1.1 jdolecek
467 1.1 jdolecek uint32_t device_version;
468 1.1 jdolecek
469 1.1 jdolecek /* bitmap of ena_admin_aq_feature_id */
470 1.1 jdolecek uint32_t supported_features;
471 1.1 jdolecek
472 1.1 jdolecek uint32_t reserved3;
473 1.1 jdolecek
474 1.1 jdolecek /* Indicates how many bits are used physical address access. */
475 1.1 jdolecek uint32_t phys_addr_width;
476 1.1 jdolecek
477 1.1 jdolecek /* Indicates how many bits are used virtual address access. */
478 1.1 jdolecek uint32_t virt_addr_width;
479 1.1 jdolecek
480 1.1 jdolecek /* unicast MAC address (in Network byte order) */
481 1.1 jdolecek uint8_t mac_addr[6];
482 1.1 jdolecek
483 1.1 jdolecek uint8_t reserved7[2];
484 1.1 jdolecek
485 1.1 jdolecek uint32_t max_mtu;
486 1.1 jdolecek };
487 1.1 jdolecek
488 1.1 jdolecek struct ena_admin_queue_feature_desc {
489 1.1 jdolecek /* including LLQs */
490 1.1 jdolecek uint32_t max_sq_num;
491 1.1 jdolecek
492 1.1 jdolecek uint32_t max_sq_depth;
493 1.1 jdolecek
494 1.1 jdolecek uint32_t max_cq_num;
495 1.1 jdolecek
496 1.1 jdolecek uint32_t max_cq_depth;
497 1.1 jdolecek
498 1.1 jdolecek uint32_t max_llq_num;
499 1.1 jdolecek
500 1.1 jdolecek uint32_t max_llq_depth;
501 1.1 jdolecek
502 1.1 jdolecek uint32_t max_header_size;
503 1.1 jdolecek
504 1.1 jdolecek /* Maximum Descriptors number, including meta descriptor, allowed for
505 1.1 jdolecek * a single Tx packet
506 1.1 jdolecek */
507 1.1 jdolecek uint16_t max_packet_tx_descs;
508 1.1 jdolecek
509 1.1 jdolecek /* Maximum Descriptors number allowed for a single Rx packet */
510 1.1 jdolecek uint16_t max_packet_rx_descs;
511 1.1 jdolecek };
512 1.1 jdolecek
513 1.1 jdolecek struct ena_admin_set_feature_mtu_desc {
514 1.1 jdolecek /* exclude L2 */
515 1.1 jdolecek uint32_t mtu;
516 1.1 jdolecek };
517 1.1 jdolecek
518 1.1 jdolecek struct ena_admin_set_feature_host_attr_desc {
519 1.1 jdolecek /* host OS info base address in OS memory. host info is 4KB of
520 1.1 jdolecek * physically contiguous
521 1.1 jdolecek */
522 1.1 jdolecek struct ena_common_mem_addr os_info_ba;
523 1.1 jdolecek
524 1.1 jdolecek /* host debug area base address in OS memory. debug area must be
525 1.1 jdolecek * physically contiguous
526 1.1 jdolecek */
527 1.1 jdolecek struct ena_common_mem_addr debug_ba;
528 1.1 jdolecek
529 1.1 jdolecek /* debug area size */
530 1.1 jdolecek uint32_t debug_area_size;
531 1.1 jdolecek };
532 1.1 jdolecek
533 1.1 jdolecek struct ena_admin_feature_intr_moder_desc {
534 1.1 jdolecek /* interrupt delay granularity in usec */
535 1.1 jdolecek uint16_t intr_delay_resolution;
536 1.1 jdolecek
537 1.1 jdolecek uint16_t reserved;
538 1.1 jdolecek };
539 1.1 jdolecek
540 1.1 jdolecek struct ena_admin_get_feature_link_desc {
541 1.1 jdolecek /* Link speed in Mb */
542 1.1 jdolecek uint32_t speed;
543 1.1 jdolecek
544 1.1 jdolecek /* bit field of enum ena_admin_link types */
545 1.1 jdolecek uint32_t supported;
546 1.1 jdolecek
547 1.1 jdolecek /* 0 : autoneg
548 1.1 jdolecek * 1 : duplex - Full Duplex
549 1.1 jdolecek * 31:2 : reserved2
550 1.1 jdolecek */
551 1.1 jdolecek uint32_t flags;
552 1.1 jdolecek };
553 1.1 jdolecek
554 1.1 jdolecek struct ena_admin_feature_aenq_desc {
555 1.1 jdolecek /* bitmask for AENQ groups the device can report */
556 1.1 jdolecek uint32_t supported_groups;
557 1.1 jdolecek
558 1.1 jdolecek /* bitmask for AENQ groups to report */
559 1.1 jdolecek uint32_t enabled_groups;
560 1.1 jdolecek };
561 1.1 jdolecek
562 1.1 jdolecek struct ena_admin_feature_offload_desc {
563 1.1 jdolecek /* 0 : TX_L3_csum_ipv4
564 1.1 jdolecek * 1 : TX_L4_ipv4_csum_part - The checksum field
565 1.1 jdolecek * should be initialized with pseudo header checksum
566 1.1 jdolecek * 2 : TX_L4_ipv4_csum_full
567 1.1 jdolecek * 3 : TX_L4_ipv6_csum_part - The checksum field
568 1.1 jdolecek * should be initialized with pseudo header checksum
569 1.1 jdolecek * 4 : TX_L4_ipv6_csum_full
570 1.1 jdolecek * 5 : tso_ipv4
571 1.1 jdolecek * 6 : tso_ipv6
572 1.1 jdolecek * 7 : tso_ecn
573 1.1 jdolecek */
574 1.1 jdolecek uint32_t tx;
575 1.1 jdolecek
576 1.1 jdolecek /* Receive side supported stateless offload
577 1.1 jdolecek * 0 : RX_L3_csum_ipv4 - IPv4 checksum
578 1.1 jdolecek * 1 : RX_L4_ipv4_csum - TCP/UDP/IPv4 checksum
579 1.1 jdolecek * 2 : RX_L4_ipv6_csum - TCP/UDP/IPv6 checksum
580 1.1 jdolecek * 3 : RX_hash - Hash calculation
581 1.1 jdolecek */
582 1.1 jdolecek uint32_t rx_supported;
583 1.1 jdolecek
584 1.1 jdolecek uint32_t rx_enabled;
585 1.1 jdolecek };
586 1.1 jdolecek
587 1.1 jdolecek enum ena_admin_hash_functions {
588 1.1 jdolecek ENA_ADMIN_TOEPLITZ = 1,
589 1.1 jdolecek
590 1.1 jdolecek ENA_ADMIN_CRC32 = 2,
591 1.1 jdolecek };
592 1.1 jdolecek
593 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_control {
594 1.1 jdolecek uint32_t keys_num;
595 1.1 jdolecek
596 1.1 jdolecek uint32_t reserved;
597 1.1 jdolecek
598 1.1 jdolecek uint32_t key[10];
599 1.1 jdolecek };
600 1.1 jdolecek
601 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_function {
602 1.1 jdolecek /* 7:0 : funcs - bitmask of ena_admin_hash_functions */
603 1.1 jdolecek uint32_t supported_func;
604 1.1 jdolecek
605 1.1 jdolecek /* 7:0 : selected_func - bitmask of
606 1.1 jdolecek * ena_admin_hash_functions
607 1.1 jdolecek */
608 1.1 jdolecek uint32_t selected_func;
609 1.1 jdolecek
610 1.1 jdolecek /* initial value */
611 1.1 jdolecek uint32_t init_val;
612 1.1 jdolecek };
613 1.1 jdolecek
614 1.1 jdolecek /* RSS flow hash protocols */
615 1.1 jdolecek enum ena_admin_flow_hash_proto {
616 1.1 jdolecek ENA_ADMIN_RSS_TCP4 = 0,
617 1.1 jdolecek
618 1.1 jdolecek ENA_ADMIN_RSS_UDP4 = 1,
619 1.1 jdolecek
620 1.1 jdolecek ENA_ADMIN_RSS_TCP6 = 2,
621 1.1 jdolecek
622 1.1 jdolecek ENA_ADMIN_RSS_UDP6 = 3,
623 1.1 jdolecek
624 1.1 jdolecek ENA_ADMIN_RSS_IP4 = 4,
625 1.1 jdolecek
626 1.1 jdolecek ENA_ADMIN_RSS_IP6 = 5,
627 1.1 jdolecek
628 1.1 jdolecek ENA_ADMIN_RSS_IP4_FRAG = 6,
629 1.1 jdolecek
630 1.1 jdolecek ENA_ADMIN_RSS_NOT_IP = 7,
631 1.1 jdolecek
632 1.1 jdolecek /* TCPv6 with extension header */
633 1.1 jdolecek ENA_ADMIN_RSS_TCP6_EX = 8,
634 1.1 jdolecek
635 1.1 jdolecek /* IPv6 with extension header */
636 1.1 jdolecek ENA_ADMIN_RSS_IP6_EX = 9,
637 1.1 jdolecek
638 1.1 jdolecek ENA_ADMIN_RSS_PROTO_NUM = 16,
639 1.1 jdolecek };
640 1.1 jdolecek
641 1.1 jdolecek /* RSS flow hash fields */
642 1.1 jdolecek enum ena_admin_flow_hash_fields {
643 1.1 jdolecek /* Ethernet Dest Addr */
644 1.1 jdolecek ENA_ADMIN_RSS_L2_DA = BIT(0),
645 1.1 jdolecek
646 1.1 jdolecek /* Ethernet Src Addr */
647 1.1 jdolecek ENA_ADMIN_RSS_L2_SA = BIT(1),
648 1.1 jdolecek
649 1.1 jdolecek /* ipv4/6 Dest Addr */
650 1.1 jdolecek ENA_ADMIN_RSS_L3_DA = BIT(2),
651 1.1 jdolecek
652 1.1 jdolecek /* ipv4/6 Src Addr */
653 1.1 jdolecek ENA_ADMIN_RSS_L3_SA = BIT(3),
654 1.1 jdolecek
655 1.1 jdolecek /* tcp/udp Dest Port */
656 1.1 jdolecek ENA_ADMIN_RSS_L4_DP = BIT(4),
657 1.1 jdolecek
658 1.1 jdolecek /* tcp/udp Src Port */
659 1.1 jdolecek ENA_ADMIN_RSS_L4_SP = BIT(5),
660 1.1 jdolecek };
661 1.1 jdolecek
662 1.1 jdolecek struct ena_admin_proto_input {
663 1.1 jdolecek /* flow hash fields (bitwise according to ena_admin_flow_hash_fields) */
664 1.1 jdolecek uint16_t fields;
665 1.1 jdolecek
666 1.1 jdolecek uint16_t reserved2;
667 1.1 jdolecek };
668 1.1 jdolecek
669 1.1 jdolecek struct ena_admin_feature_rss_hash_control {
670 1.1 jdolecek struct ena_admin_proto_input supported_fields[ENA_ADMIN_RSS_PROTO_NUM];
671 1.1 jdolecek
672 1.1 jdolecek struct ena_admin_proto_input selected_fields[ENA_ADMIN_RSS_PROTO_NUM];
673 1.1 jdolecek
674 1.1 jdolecek struct ena_admin_proto_input reserved2[ENA_ADMIN_RSS_PROTO_NUM];
675 1.1 jdolecek
676 1.1 jdolecek struct ena_admin_proto_input reserved3[ENA_ADMIN_RSS_PROTO_NUM];
677 1.1 jdolecek };
678 1.1 jdolecek
679 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_input {
680 1.1 jdolecek /* supported hash input sorting
681 1.1 jdolecek * 1 : L3_sort - support swap L3 addresses if DA is
682 1.1 jdolecek * smaller than SA
683 1.1 jdolecek * 2 : L4_sort - support swap L4 ports if DP smaller
684 1.1 jdolecek * SP
685 1.1 jdolecek */
686 1.1 jdolecek uint16_t supported_input_sort;
687 1.1 jdolecek
688 1.1 jdolecek /* enabled hash input sorting
689 1.1 jdolecek * 1 : enable_L3_sort - enable swap L3 addresses if
690 1.1 jdolecek * DA smaller than SA
691 1.1 jdolecek * 2 : enable_L4_sort - enable swap L4 ports if DP
692 1.1 jdolecek * smaller than SP
693 1.1 jdolecek */
694 1.1 jdolecek uint16_t enabled_input_sort;
695 1.1 jdolecek };
696 1.1 jdolecek
697 1.1 jdolecek enum ena_admin_os_type {
698 1.1 jdolecek ENA_ADMIN_OS_LINUX = 1,
699 1.1 jdolecek
700 1.1 jdolecek ENA_ADMIN_OS_WIN = 2,
701 1.1 jdolecek
702 1.1 jdolecek ENA_ADMIN_OS_DPDK = 3,
703 1.1 jdolecek
704 1.1 jdolecek ENA_ADMIN_OS_FREEBSD = 4,
705 1.1 jdolecek
706 1.1 jdolecek ENA_ADMIN_OS_IPXE = 5,
707 1.1 jdolecek };
708 1.1 jdolecek
709 1.1 jdolecek struct ena_admin_host_info {
710 1.1 jdolecek /* defined in enum ena_admin_os_type */
711 1.1 jdolecek uint32_t os_type;
712 1.1 jdolecek
713 1.1 jdolecek /* os distribution string format */
714 1.1 jdolecek uint8_t os_dist_str[128];
715 1.1 jdolecek
716 1.1 jdolecek /* OS distribution numeric format */
717 1.1 jdolecek uint32_t os_dist;
718 1.1 jdolecek
719 1.1 jdolecek /* kernel version string format */
720 1.1 jdolecek uint8_t kernel_ver_str[32];
721 1.1 jdolecek
722 1.1 jdolecek /* Kernel version numeric format */
723 1.1 jdolecek uint32_t kernel_ver;
724 1.1 jdolecek
725 1.1 jdolecek /* 7:0 : major
726 1.1 jdolecek * 15:8 : minor
727 1.1 jdolecek * 23:16 : sub_minor
728 1.1 jdolecek */
729 1.1 jdolecek uint32_t driver_version;
730 1.1 jdolecek
731 1.1 jdolecek /* features bitmap */
732 1.1 jdolecek uint32_t supported_network_features[4];
733 1.1 jdolecek };
734 1.1 jdolecek
735 1.1 jdolecek struct ena_admin_rss_ind_table_entry {
736 1.1 jdolecek uint16_t cq_idx;
737 1.1 jdolecek
738 1.1 jdolecek uint16_t reserved;
739 1.1 jdolecek };
740 1.1 jdolecek
741 1.1 jdolecek struct ena_admin_feature_rss_ind_table {
742 1.1 jdolecek /* min supported table size (2^min_size) */
743 1.1 jdolecek uint16_t min_size;
744 1.1 jdolecek
745 1.1 jdolecek /* max supported table size (2^max_size) */
746 1.1 jdolecek uint16_t max_size;
747 1.1 jdolecek
748 1.1 jdolecek /* table size (2^size) */
749 1.1 jdolecek uint16_t size;
750 1.1 jdolecek
751 1.1 jdolecek uint16_t reserved;
752 1.1 jdolecek
753 1.1 jdolecek /* index of the inline entry. 0xFFFFFFFF means invalid */
754 1.1 jdolecek uint32_t inline_index;
755 1.1 jdolecek
756 1.1 jdolecek /* used for updating single entry, ignored when setting the entire
757 1.1 jdolecek * table through the control buffer.
758 1.1 jdolecek */
759 1.1 jdolecek struct ena_admin_rss_ind_table_entry inline_entry;
760 1.1 jdolecek };
761 1.1 jdolecek
762 1.1 jdolecek /* When hint value is 0, driver should use it's own predefined value */
763 1.1 jdolecek struct ena_admin_ena_hw_hints {
764 1.1 jdolecek /* value in ms */
765 1.1 jdolecek uint16_t mmio_read_timeout;
766 1.1 jdolecek
767 1.1 jdolecek /* value in ms */
768 1.1 jdolecek uint16_t driver_watchdog_timeout;
769 1.1 jdolecek
770 1.1 jdolecek /* Per packet tx completion timeout. value in ms */
771 1.1 jdolecek uint16_t missing_tx_completion_timeout;
772 1.1 jdolecek
773 1.1 jdolecek uint16_t missed_tx_completion_count_threshold_to_reset;
774 1.1 jdolecek
775 1.1 jdolecek /* value in ms */
776 1.1 jdolecek uint16_t admin_completion_tx_timeout;
777 1.1 jdolecek
778 1.1 jdolecek uint16_t netdev_wd_timeout;
779 1.1 jdolecek
780 1.1 jdolecek uint16_t max_tx_sgl_size;
781 1.1 jdolecek
782 1.1 jdolecek uint16_t max_rx_sgl_size;
783 1.1 jdolecek
784 1.1 jdolecek uint16_t reserved[8];
785 1.1 jdolecek };
786 1.1 jdolecek
787 1.1 jdolecek struct ena_admin_get_feat_cmd {
788 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor;
789 1.1 jdolecek
790 1.1 jdolecek struct ena_admin_ctrl_buff_info control_buffer;
791 1.1 jdolecek
792 1.1 jdolecek struct ena_admin_get_set_feature_common_desc feat_common;
793 1.1 jdolecek
794 1.1 jdolecek uint32_t raw[11];
795 1.1 jdolecek };
796 1.1 jdolecek
797 1.1 jdolecek struct ena_admin_get_feat_resp {
798 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc;
799 1.1 jdolecek
800 1.1 jdolecek union {
801 1.1 jdolecek uint32_t raw[14];
802 1.1 jdolecek
803 1.1 jdolecek struct ena_admin_device_attr_feature_desc dev_attr;
804 1.1 jdolecek
805 1.1 jdolecek struct ena_admin_queue_feature_desc max_queue;
806 1.1 jdolecek
807 1.1 jdolecek struct ena_admin_feature_aenq_desc aenq;
808 1.1 jdolecek
809 1.1 jdolecek struct ena_admin_get_feature_link_desc link;
810 1.1 jdolecek
811 1.1 jdolecek struct ena_admin_feature_offload_desc offload;
812 1.1 jdolecek
813 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
814 1.1 jdolecek
815 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
816 1.1 jdolecek
817 1.1 jdolecek struct ena_admin_feature_rss_ind_table ind_table;
818 1.1 jdolecek
819 1.1 jdolecek struct ena_admin_feature_intr_moder_desc intr_moderation;
820 1.1 jdolecek
821 1.1 jdolecek struct ena_admin_ena_hw_hints hw_hints;
822 1.1 jdolecek } u;
823 1.1 jdolecek };
824 1.1 jdolecek
825 1.1 jdolecek struct ena_admin_set_feat_cmd {
826 1.1 jdolecek struct ena_admin_aq_common_desc aq_common_descriptor;
827 1.1 jdolecek
828 1.1 jdolecek struct ena_admin_ctrl_buff_info control_buffer;
829 1.1 jdolecek
830 1.1 jdolecek struct ena_admin_get_set_feature_common_desc feat_common;
831 1.1 jdolecek
832 1.1 jdolecek union {
833 1.1 jdolecek uint32_t raw[11];
834 1.1 jdolecek
835 1.1 jdolecek /* mtu size */
836 1.1 jdolecek struct ena_admin_set_feature_mtu_desc mtu;
837 1.1 jdolecek
838 1.1 jdolecek /* host attributes */
839 1.1 jdolecek struct ena_admin_set_feature_host_attr_desc host_attr;
840 1.1 jdolecek
841 1.1 jdolecek /* AENQ configuration */
842 1.1 jdolecek struct ena_admin_feature_aenq_desc aenq;
843 1.1 jdolecek
844 1.1 jdolecek /* rss flow hash function */
845 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
846 1.1 jdolecek
847 1.1 jdolecek /* rss flow hash input */
848 1.1 jdolecek struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
849 1.1 jdolecek
850 1.1 jdolecek /* rss indirection table */
851 1.1 jdolecek struct ena_admin_feature_rss_ind_table ind_table;
852 1.1 jdolecek } u;
853 1.1 jdolecek };
854 1.1 jdolecek
855 1.1 jdolecek struct ena_admin_set_feat_resp {
856 1.1 jdolecek struct ena_admin_acq_common_desc acq_common_desc;
857 1.1 jdolecek
858 1.1 jdolecek union {
859 1.1 jdolecek uint32_t raw[14];
860 1.1 jdolecek } u;
861 1.1 jdolecek };
862 1.1 jdolecek
863 1.1 jdolecek struct ena_admin_aenq_common_desc {
864 1.1 jdolecek uint16_t group;
865 1.1 jdolecek
866 1.1 jdolecek uint16_t syndrom;
867 1.1 jdolecek
868 1.1 jdolecek /* 0 : phase */
869 1.1 jdolecek uint8_t flags;
870 1.1 jdolecek
871 1.1 jdolecek uint8_t reserved1[3];
872 1.1 jdolecek
873 1.1 jdolecek uint32_t timestamp_low;
874 1.1 jdolecek
875 1.1 jdolecek uint32_t timestamp_high;
876 1.1 jdolecek };
877 1.1 jdolecek
878 1.1 jdolecek /* asynchronous event notification groups */
879 1.1 jdolecek enum ena_admin_aenq_group {
880 1.1 jdolecek ENA_ADMIN_LINK_CHANGE = 0,
881 1.1 jdolecek
882 1.1 jdolecek ENA_ADMIN_FATAL_ERROR = 1,
883 1.1 jdolecek
884 1.1 jdolecek ENA_ADMIN_WARNING = 2,
885 1.1 jdolecek
886 1.1 jdolecek ENA_ADMIN_NOTIFICATION = 3,
887 1.1 jdolecek
888 1.1 jdolecek ENA_ADMIN_KEEP_ALIVE = 4,
889 1.1 jdolecek
890 1.1 jdolecek ENA_ADMIN_AENQ_GROUPS_NUM = 5,
891 1.1 jdolecek };
892 1.1 jdolecek
893 1.1 jdolecek enum ena_admin_aenq_notification_syndrom {
894 1.1 jdolecek ENA_ADMIN_SUSPEND = 0,
895 1.1 jdolecek
896 1.1 jdolecek ENA_ADMIN_RESUME = 1,
897 1.1 jdolecek
898 1.1 jdolecek ENA_ADMIN_UPDATE_HINTS = 2,
899 1.1 jdolecek };
900 1.1 jdolecek
901 1.1 jdolecek struct ena_admin_aenq_entry {
902 1.1 jdolecek struct ena_admin_aenq_common_desc aenq_common_desc;
903 1.1 jdolecek
904 1.1 jdolecek /* command specific inline data */
905 1.1 jdolecek uint32_t inline_data_w4[12];
906 1.1 jdolecek };
907 1.1 jdolecek
908 1.1 jdolecek struct ena_admin_aenq_link_change_desc {
909 1.1 jdolecek struct ena_admin_aenq_common_desc aenq_common_desc;
910 1.1 jdolecek
911 1.1 jdolecek /* 0 : link_status */
912 1.1 jdolecek uint32_t flags;
913 1.1 jdolecek };
914 1.1 jdolecek
915 1.1 jdolecek struct ena_admin_aenq_keep_alive_desc {
916 1.1 jdolecek struct ena_admin_aenq_common_desc aenq_common_desc;
917 1.1 jdolecek
918 1.1 jdolecek uint32_t rx_drops_low;
919 1.1 jdolecek
920 1.1 jdolecek uint32_t rx_drops_high;
921 1.1 jdolecek };
922 1.1 jdolecek
923 1.1 jdolecek struct ena_admin_ena_mmio_req_read_less_resp {
924 1.1 jdolecek uint16_t req_id;
925 1.1 jdolecek
926 1.1 jdolecek uint16_t reg_off;
927 1.1 jdolecek
928 1.1 jdolecek /* value is valid when poll is cleared */
929 1.1 jdolecek uint32_t reg_val;
930 1.1 jdolecek };
931 1.1 jdolecek
932 1.1 jdolecek /* aq_common_desc */
933 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0)
934 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK BIT(0)
935 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT 1
936 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK BIT(1)
937 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT 2
938 1.1 jdolecek #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK BIT(2)
939 1.1 jdolecek
940 1.1 jdolecek /* sq */
941 1.1 jdolecek #define ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT 5
942 1.1 jdolecek #define ENA_ADMIN_SQ_SQ_DIRECTION_MASK GENMASK(7, 5)
943 1.1 jdolecek
944 1.1 jdolecek /* acq_common_desc */
945 1.1 jdolecek #define ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0)
946 1.1 jdolecek #define ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK BIT(0)
947 1.1 jdolecek
948 1.1 jdolecek /* aq_create_sq_cmd */
949 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT 5
950 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK GENMASK(7, 5)
951 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK GENMASK(3, 0)
952 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT 4
953 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK GENMASK(6, 4)
954 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK BIT(0)
955 1.1 jdolecek
956 1.1 jdolecek /* aq_create_cq_cmd */
957 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT 5
958 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5)
959 1.1 jdolecek #define ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0)
960 1.1 jdolecek
961 1.1 jdolecek /* get_set_feature_common_desc */
962 1.1 jdolecek #define ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK GENMASK(1, 0)
963 1.1 jdolecek
964 1.1 jdolecek /* get_feature_link_desc */
965 1.1 jdolecek #define ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK BIT(0)
966 1.1 jdolecek #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT 1
967 1.1 jdolecek #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK BIT(1)
968 1.1 jdolecek
969 1.1 jdolecek /* feature_offload_desc */
970 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK BIT(0)
971 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT 1
972 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK BIT(1)
973 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT 2
974 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK BIT(2)
975 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT 3
976 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK BIT(3)
977 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT 4
978 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK BIT(4)
979 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT 5
980 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK BIT(5)
981 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT 6
982 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK BIT(6)
983 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT 7
984 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK BIT(7)
985 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK BIT(0)
986 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT 1
987 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK BIT(1)
988 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT 2
989 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK BIT(2)
990 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT 3
991 1.1 jdolecek #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK BIT(3)
992 1.1 jdolecek
993 1.1 jdolecek /* feature_rss_flow_hash_function */
994 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK GENMASK(7, 0)
995 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK GENMASK(7, 0)
996 1.1 jdolecek
997 1.1 jdolecek /* feature_rss_flow_hash_input */
998 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT 1
999 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK BIT(1)
1000 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT 2
1001 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK BIT(2)
1002 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT 1
1003 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK BIT(1)
1004 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT 2
1005 1.1 jdolecek #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK BIT(2)
1006 1.1 jdolecek
1007 1.1 jdolecek /* host_info */
1008 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_MAJOR_MASK GENMASK(7, 0)
1009 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_MINOR_SHIFT 8
1010 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_MINOR_MASK GENMASK(15, 8)
1011 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT 16
1012 1.1 jdolecek #define ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK GENMASK(23, 16)
1013 1.1 jdolecek
1014 1.1 jdolecek /* aenq_common_desc */
1015 1.1 jdolecek #define ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK BIT(0)
1016 1.1 jdolecek
1017 1.1 jdolecek /* aenq_link_change_desc */
1018 1.1 jdolecek #define ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK BIT(0)
1019 1.1 jdolecek
1020 1.1 jdolecek #if !defined(ENA_DEFS_LINUX_MAINLINE)
1021 1.1 jdolecek static inline uint16_t get_ena_admin_aq_common_desc_command_id(const struct ena_admin_aq_common_desc *p)
1022 1.1 jdolecek {
1023 1.1 jdolecek return p->command_id & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;
1024 1.1 jdolecek }
1025 1.1 jdolecek
1026 1.1 jdolecek static inline void set_ena_admin_aq_common_desc_command_id(struct ena_admin_aq_common_desc *p, uint16_t val)
1027 1.1 jdolecek {
1028 1.1 jdolecek p->command_id |= val & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;
1029 1.1 jdolecek }
1030 1.1 jdolecek
1031 1.1 jdolecek static inline uint8_t get_ena_admin_aq_common_desc_phase(const struct ena_admin_aq_common_desc *p)
1032 1.1 jdolecek {
1033 1.1 jdolecek return p->flags & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK;
1034 1.1 jdolecek }
1035 1.1 jdolecek
1036 1.1 jdolecek static inline void set_ena_admin_aq_common_desc_phase(struct ena_admin_aq_common_desc *p, uint8_t val)
1037 1.1 jdolecek {
1038 1.1 jdolecek p->flags |= val & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK;
1039 1.1 jdolecek }
1040 1.1 jdolecek
1041 1.1 jdolecek static inline uint8_t get_ena_admin_aq_common_desc_ctrl_data(const struct ena_admin_aq_common_desc *p)
1042 1.1 jdolecek {
1043 1.1 jdolecek return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK) >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT;
1044 1.1 jdolecek }
1045 1.1 jdolecek
1046 1.1 jdolecek static inline void set_ena_admin_aq_common_desc_ctrl_data(struct ena_admin_aq_common_desc *p, uint8_t val)
1047 1.1 jdolecek {
1048 1.1 jdolecek p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT) & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK;
1049 1.1 jdolecek }
1050 1.1 jdolecek
1051 1.1 jdolecek static inline uint8_t get_ena_admin_aq_common_desc_ctrl_data_indirect(const struct ena_admin_aq_common_desc *p)
1052 1.1 jdolecek {
1053 1.1 jdolecek return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK) >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT;
1054 1.1 jdolecek }
1055 1.1 jdolecek
1056 1.1 jdolecek static inline void set_ena_admin_aq_common_desc_ctrl_data_indirect(struct ena_admin_aq_common_desc *p, uint8_t val)
1057 1.1 jdolecek {
1058 1.1 jdolecek p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT) & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK;
1059 1.1 jdolecek }
1060 1.1 jdolecek
1061 1.1 jdolecek static inline uint8_t get_ena_admin_sq_sq_direction(const struct ena_admin_sq *p)
1062 1.1 jdolecek {
1063 1.1 jdolecek return (p->sq_identity & ENA_ADMIN_SQ_SQ_DIRECTION_MASK) >> ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT;
1064 1.1 jdolecek }
1065 1.1 jdolecek
1066 1.1 jdolecek static inline void set_ena_admin_sq_sq_direction(struct ena_admin_sq *p, uint8_t val)
1067 1.1 jdolecek {
1068 1.1 jdolecek p->sq_identity |= (val << ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT) & ENA_ADMIN_SQ_SQ_DIRECTION_MASK;
1069 1.1 jdolecek }
1070 1.1 jdolecek
1071 1.1 jdolecek static inline uint16_t get_ena_admin_acq_common_desc_command_id(const struct ena_admin_acq_common_desc *p)
1072 1.1 jdolecek {
1073 1.1 jdolecek return p->command & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK;
1074 1.1 jdolecek }
1075 1.1 jdolecek
1076 1.1 jdolecek static inline void set_ena_admin_acq_common_desc_command_id(struct ena_admin_acq_common_desc *p, uint16_t val)
1077 1.1 jdolecek {
1078 1.1 jdolecek p->command |= val & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK;
1079 1.1 jdolecek }
1080 1.1 jdolecek
1081 1.1 jdolecek static inline uint8_t get_ena_admin_acq_common_desc_phase(const struct ena_admin_acq_common_desc *p)
1082 1.1 jdolecek {
1083 1.1 jdolecek return p->flags & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK;
1084 1.1 jdolecek }
1085 1.1 jdolecek
1086 1.1 jdolecek static inline void set_ena_admin_acq_common_desc_phase(struct ena_admin_acq_common_desc *p, uint8_t val)
1087 1.1 jdolecek {
1088 1.1 jdolecek p->flags |= val & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK;
1089 1.1 jdolecek }
1090 1.1 jdolecek
1091 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_sq_cmd_sq_direction(const struct ena_admin_aq_create_sq_cmd *p)
1092 1.1 jdolecek {
1093 1.1 jdolecek return (p->sq_identity & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK) >> ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT;
1094 1.1 jdolecek }
1095 1.1 jdolecek
1096 1.1 jdolecek static inline void set_ena_admin_aq_create_sq_cmd_sq_direction(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)
1097 1.1 jdolecek {
1098 1.1 jdolecek p->sq_identity |= (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT) & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK;
1099 1.1 jdolecek }
1100 1.1 jdolecek
1101 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_sq_cmd_placement_policy(const struct ena_admin_aq_create_sq_cmd *p)
1102 1.1 jdolecek {
1103 1.1 jdolecek return p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK;
1104 1.1 jdolecek }
1105 1.1 jdolecek
1106 1.1 jdolecek static inline void set_ena_admin_aq_create_sq_cmd_placement_policy(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)
1107 1.1 jdolecek {
1108 1.1 jdolecek p->sq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK;
1109 1.1 jdolecek }
1110 1.1 jdolecek
1111 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_sq_cmd_completion_policy(const struct ena_admin_aq_create_sq_cmd *p)
1112 1.1 jdolecek {
1113 1.1 jdolecek return (p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK) >> ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT;
1114 1.1 jdolecek }
1115 1.1 jdolecek
1116 1.1 jdolecek static inline void set_ena_admin_aq_create_sq_cmd_completion_policy(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)
1117 1.1 jdolecek {
1118 1.1 jdolecek p->sq_caps_2 |= (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT) & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK;
1119 1.1 jdolecek }
1120 1.1 jdolecek
1121 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_sq_cmd_is_physically_contiguous(const struct ena_admin_aq_create_sq_cmd *p)
1122 1.1 jdolecek {
1123 1.1 jdolecek return p->sq_caps_3 & ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK;
1124 1.1 jdolecek }
1125 1.1 jdolecek
1126 1.1 jdolecek static inline void set_ena_admin_aq_create_sq_cmd_is_physically_contiguous(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)
1127 1.1 jdolecek {
1128 1.1 jdolecek p->sq_caps_3 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK;
1129 1.1 jdolecek }
1130 1.1 jdolecek
1131 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(const struct ena_admin_aq_create_cq_cmd *p)
1132 1.1 jdolecek {
1133 1.1 jdolecek return (p->cq_caps_1 & ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK) >> ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT;
1134 1.1 jdolecek }
1135 1.1 jdolecek
1136 1.1 jdolecek static inline void set_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(struct ena_admin_aq_create_cq_cmd *p, uint8_t val)
1137 1.1 jdolecek {
1138 1.1 jdolecek p->cq_caps_1 |= (val << ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT) & ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK;
1139 1.1 jdolecek }
1140 1.1 jdolecek
1141 1.1 jdolecek static inline uint8_t get_ena_admin_aq_create_cq_cmd_cq_entry_size_words(const struct ena_admin_aq_create_cq_cmd *p)
1142 1.1 jdolecek {
1143 1.1 jdolecek return p->cq_caps_2 & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK;
1144 1.1 jdolecek }
1145 1.1 jdolecek
1146 1.1 jdolecek static inline void set_ena_admin_aq_create_cq_cmd_cq_entry_size_words(struct ena_admin_aq_create_cq_cmd *p, uint8_t val)
1147 1.1 jdolecek {
1148 1.1 jdolecek p->cq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK;
1149 1.1 jdolecek }
1150 1.1 jdolecek
1151 1.1 jdolecek static inline uint8_t get_ena_admin_get_set_feature_common_desc_select(const struct ena_admin_get_set_feature_common_desc *p)
1152 1.1 jdolecek {
1153 1.1 jdolecek return p->flags & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK;
1154 1.1 jdolecek }
1155 1.1 jdolecek
1156 1.1 jdolecek static inline void set_ena_admin_get_set_feature_common_desc_select(struct ena_admin_get_set_feature_common_desc *p, uint8_t val)
1157 1.1 jdolecek {
1158 1.1 jdolecek p->flags |= val & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK;
1159 1.1 jdolecek }
1160 1.1 jdolecek
1161 1.1 jdolecek static inline uint32_t get_ena_admin_get_feature_link_desc_autoneg(const struct ena_admin_get_feature_link_desc *p)
1162 1.1 jdolecek {
1163 1.1 jdolecek return p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK;
1164 1.1 jdolecek }
1165 1.1 jdolecek
1166 1.1 jdolecek static inline void set_ena_admin_get_feature_link_desc_autoneg(struct ena_admin_get_feature_link_desc *p, uint32_t val)
1167 1.1 jdolecek {
1168 1.1 jdolecek p->flags |= val & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK;
1169 1.1 jdolecek }
1170 1.1 jdolecek
1171 1.1 jdolecek static inline uint32_t get_ena_admin_get_feature_link_desc_duplex(const struct ena_admin_get_feature_link_desc *p)
1172 1.1 jdolecek {
1173 1.1 jdolecek return (p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK) >> ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT;
1174 1.1 jdolecek }
1175 1.1 jdolecek
1176 1.1 jdolecek static inline void set_ena_admin_get_feature_link_desc_duplex(struct ena_admin_get_feature_link_desc *p, uint32_t val)
1177 1.1 jdolecek {
1178 1.1 jdolecek p->flags |= (val << ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT) & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK;
1179 1.1 jdolecek }
1180 1.1 jdolecek
1181 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc *p)
1182 1.1 jdolecek {
1183 1.1 jdolecek return p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK;
1184 1.1 jdolecek }
1185 1.1 jdolecek
1186 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)
1187 1.1 jdolecek {
1188 1.1 jdolecek p->tx |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK;
1189 1.1 jdolecek }
1190 1.1 jdolecek
1191 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(const struct ena_admin_feature_offload_desc *p)
1192 1.1 jdolecek {
1193 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT;
1194 1.1 jdolecek }
1195 1.1 jdolecek
1196 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(struct ena_admin_feature_offload_desc *p, uint32_t val)
1197 1.1 jdolecek {
1198 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK;
1199 1.1 jdolecek }
1200 1.1 jdolecek
1201 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(const struct ena_admin_feature_offload_desc *p)
1202 1.1 jdolecek {
1203 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT;
1204 1.1 jdolecek }
1205 1.1 jdolecek
1206 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(struct ena_admin_feature_offload_desc *p, uint32_t val)
1207 1.1 jdolecek {
1208 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK;
1209 1.1 jdolecek }
1210 1.1 jdolecek
1211 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(const struct ena_admin_feature_offload_desc *p)
1212 1.1 jdolecek {
1213 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT;
1214 1.1 jdolecek }
1215 1.1 jdolecek
1216 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(struct ena_admin_feature_offload_desc *p, uint32_t val)
1217 1.1 jdolecek {
1218 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK;
1219 1.1 jdolecek }
1220 1.1 jdolecek
1221 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(const struct ena_admin_feature_offload_desc *p)
1222 1.1 jdolecek {
1223 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT;
1224 1.1 jdolecek }
1225 1.1 jdolecek
1226 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(struct ena_admin_feature_offload_desc *p, uint32_t val)
1227 1.1 jdolecek {
1228 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK;
1229 1.1 jdolecek }
1230 1.1 jdolecek
1231 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_tso_ipv4(const struct ena_admin_feature_offload_desc *p)
1232 1.1 jdolecek {
1233 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT;
1234 1.1 jdolecek }
1235 1.1 jdolecek
1236 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_tso_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)
1237 1.1 jdolecek {
1238 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK;
1239 1.1 jdolecek }
1240 1.1 jdolecek
1241 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_tso_ipv6(const struct ena_admin_feature_offload_desc *p)
1242 1.1 jdolecek {
1243 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT;
1244 1.1 jdolecek }
1245 1.1 jdolecek
1246 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_tso_ipv6(struct ena_admin_feature_offload_desc *p, uint32_t val)
1247 1.1 jdolecek {
1248 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK;
1249 1.1 jdolecek }
1250 1.1 jdolecek
1251 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_tso_ecn(const struct ena_admin_feature_offload_desc *p)
1252 1.1 jdolecek {
1253 1.1 jdolecek return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT;
1254 1.1 jdolecek }
1255 1.1 jdolecek
1256 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_tso_ecn(struct ena_admin_feature_offload_desc *p, uint32_t val)
1257 1.1 jdolecek {
1258 1.1 jdolecek p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK;
1259 1.1 jdolecek }
1260 1.1 jdolecek
1261 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc *p)
1262 1.1 jdolecek {
1263 1.1 jdolecek return p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK;
1264 1.1 jdolecek }
1265 1.1 jdolecek
1266 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)
1267 1.1 jdolecek {
1268 1.1 jdolecek p->rx_supported |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK;
1269 1.1 jdolecek }
1270 1.1 jdolecek
1271 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(const struct ena_admin_feature_offload_desc *p)
1272 1.1 jdolecek {
1273 1.1 jdolecek return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT;
1274 1.1 jdolecek }
1275 1.1 jdolecek
1276 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(struct ena_admin_feature_offload_desc *p, uint32_t val)
1277 1.1 jdolecek {
1278 1.1 jdolecek p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK;
1279 1.1 jdolecek }
1280 1.1 jdolecek
1281 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(const struct ena_admin_feature_offload_desc *p)
1282 1.1 jdolecek {
1283 1.1 jdolecek return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT;
1284 1.1 jdolecek }
1285 1.1 jdolecek
1286 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(struct ena_admin_feature_offload_desc *p, uint32_t val)
1287 1.1 jdolecek {
1288 1.1 jdolecek p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK;
1289 1.1 jdolecek }
1290 1.1 jdolecek
1291 1.1 jdolecek static inline uint32_t get_ena_admin_feature_offload_desc_RX_hash(const struct ena_admin_feature_offload_desc *p)
1292 1.1 jdolecek {
1293 1.1 jdolecek return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT;
1294 1.1 jdolecek }
1295 1.1 jdolecek
1296 1.1 jdolecek static inline void set_ena_admin_feature_offload_desc_RX_hash(struct ena_admin_feature_offload_desc *p, uint32_t val)
1297 1.1 jdolecek {
1298 1.1 jdolecek p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK;
1299 1.1 jdolecek }
1300 1.1 jdolecek
1301 1.1 jdolecek static inline uint32_t get_ena_admin_feature_rss_flow_hash_function_funcs(const struct ena_admin_feature_rss_flow_hash_function *p)
1302 1.1 jdolecek {
1303 1.1 jdolecek return p->supported_func & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK;
1304 1.1 jdolecek }
1305 1.1 jdolecek
1306 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_function_funcs(struct ena_admin_feature_rss_flow_hash_function *p, uint32_t val)
1307 1.1 jdolecek {
1308 1.1 jdolecek p->supported_func |= val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK;
1309 1.1 jdolecek }
1310 1.1 jdolecek
1311 1.1 jdolecek static inline uint32_t get_ena_admin_feature_rss_flow_hash_function_selected_func(const struct ena_admin_feature_rss_flow_hash_function *p)
1312 1.1 jdolecek {
1313 1.1 jdolecek return p->selected_func & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK;
1314 1.1 jdolecek }
1315 1.1 jdolecek
1316 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_function_selected_func(struct ena_admin_feature_rss_flow_hash_function *p, uint32_t val)
1317 1.1 jdolecek {
1318 1.1 jdolecek p->selected_func |= val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK;
1319 1.1 jdolecek }
1320 1.1 jdolecek
1321 1.1 jdolecek static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_L3_sort(const struct ena_admin_feature_rss_flow_hash_input *p)
1322 1.1 jdolecek {
1323 1.1 jdolecek return (p->supported_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT;
1324 1.1 jdolecek }
1325 1.1 jdolecek
1326 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_input_L3_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val)
1327 1.1 jdolecek {
1328 1.1 jdolecek p->supported_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK;
1329 1.1 jdolecek }
1330 1.1 jdolecek
1331 1.1 jdolecek static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_L4_sort(const struct ena_admin_feature_rss_flow_hash_input *p)
1332 1.1 jdolecek {
1333 1.1 jdolecek return (p->supported_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT;
1334 1.1 jdolecek }
1335 1.1 jdolecek
1336 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_input_L4_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val)
1337 1.1 jdolecek {
1338 1.1 jdolecek p->supported_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK;
1339 1.1 jdolecek }
1340 1.1 jdolecek
1341 1.1 jdolecek static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(const struct ena_admin_feature_rss_flow_hash_input *p)
1342 1.1 jdolecek {
1343 1.1 jdolecek return (p->enabled_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT;
1344 1.1 jdolecek }
1345 1.1 jdolecek
1346 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val)
1347 1.1 jdolecek {
1348 1.1 jdolecek p->enabled_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK;
1349 1.1 jdolecek }
1350 1.1 jdolecek
1351 1.1 jdolecek static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(const struct ena_admin_feature_rss_flow_hash_input *p)
1352 1.1 jdolecek {
1353 1.1 jdolecek return (p->enabled_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT;
1354 1.1 jdolecek }
1355 1.1 jdolecek
1356 1.1 jdolecek static inline void set_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val)
1357 1.1 jdolecek {
1358 1.1 jdolecek p->enabled_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK;
1359 1.1 jdolecek }
1360 1.1 jdolecek
1361 1.1 jdolecek static inline uint32_t get_ena_admin_host_info_major(const struct ena_admin_host_info *p)
1362 1.1 jdolecek {
1363 1.1 jdolecek return p->driver_version & ENA_ADMIN_HOST_INFO_MAJOR_MASK;
1364 1.1 jdolecek }
1365 1.1 jdolecek
1366 1.1 jdolecek static inline void set_ena_admin_host_info_major(struct ena_admin_host_info *p, uint32_t val)
1367 1.1 jdolecek {
1368 1.1 jdolecek p->driver_version |= val & ENA_ADMIN_HOST_INFO_MAJOR_MASK;
1369 1.1 jdolecek }
1370 1.1 jdolecek
1371 1.1 jdolecek static inline uint32_t get_ena_admin_host_info_minor(const struct ena_admin_host_info *p)
1372 1.1 jdolecek {
1373 1.1 jdolecek return (p->driver_version & ENA_ADMIN_HOST_INFO_MINOR_MASK) >> ENA_ADMIN_HOST_INFO_MINOR_SHIFT;
1374 1.1 jdolecek }
1375 1.1 jdolecek
1376 1.1 jdolecek static inline void set_ena_admin_host_info_minor(struct ena_admin_host_info *p, uint32_t val)
1377 1.1 jdolecek {
1378 1.1 jdolecek p->driver_version |= (val << ENA_ADMIN_HOST_INFO_MINOR_SHIFT) & ENA_ADMIN_HOST_INFO_MINOR_MASK;
1379 1.1 jdolecek }
1380 1.1 jdolecek
1381 1.1 jdolecek static inline uint32_t get_ena_admin_host_info_sub_minor(const struct ena_admin_host_info *p)
1382 1.1 jdolecek {
1383 1.1 jdolecek return (p->driver_version & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK) >> ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT;
1384 1.1 jdolecek }
1385 1.1 jdolecek
1386 1.1 jdolecek static inline void set_ena_admin_host_info_sub_minor(struct ena_admin_host_info *p, uint32_t val)
1387 1.1 jdolecek {
1388 1.1 jdolecek p->driver_version |= (val << ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT) & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK;
1389 1.1 jdolecek }
1390 1.1 jdolecek
1391 1.1 jdolecek static inline uint8_t get_ena_admin_aenq_common_desc_phase(const struct ena_admin_aenq_common_desc *p)
1392 1.1 jdolecek {
1393 1.1 jdolecek return p->flags & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK;
1394 1.1 jdolecek }
1395 1.1 jdolecek
1396 1.1 jdolecek static inline void set_ena_admin_aenq_common_desc_phase(struct ena_admin_aenq_common_desc *p, uint8_t val)
1397 1.1 jdolecek {
1398 1.1 jdolecek p->flags |= val & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK;
1399 1.1 jdolecek }
1400 1.1 jdolecek
1401 1.1 jdolecek static inline uint32_t get_ena_admin_aenq_link_change_desc_link_status(const struct ena_admin_aenq_link_change_desc *p)
1402 1.1 jdolecek {
1403 1.1 jdolecek return p->flags & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK;
1404 1.1 jdolecek }
1405 1.1 jdolecek
1406 1.1 jdolecek static inline void set_ena_admin_aenq_link_change_desc_link_status(struct ena_admin_aenq_link_change_desc *p, uint32_t val)
1407 1.1 jdolecek {
1408 1.1 jdolecek p->flags |= val & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK;
1409 1.1 jdolecek }
1410 1.1 jdolecek
1411 1.1 jdolecek #endif /* !defined(ENA_DEFS_LINUX_MAINLINE) */
1412 1.1 jdolecek #endif /*_ENA_ADMIN_H_ */
1413