xref: /dpdk/drivers/net/ena/base/ena_defs/ena_admin_defs.h (revision 95eaa71c66eadb6a6924cc5241e02d3dcc58217c)
1 /* SPDX-License-Identifier: BSD-3-Clause */
2 /* Copyright (c) Amazon.com, Inc. or its affiliates.
3  * All rights reserved.
4  */
5 
6 #ifndef _ENA_ADMIN_H_
7 #define _ENA_ADMIN_H_
8 
9 #define ENA_ADMIN_EXTRA_PROPERTIES_STRING_LEN 32
10 #define ENA_ADMIN_EXTRA_PROPERTIES_COUNT     32
11 
12 #define ENA_ADMIN_RSS_KEY_PARTS              10
13 
14 #define ENA_ADMIN_CUSTOMER_METRICS_SUPPORT_MASK 0x3F
15 #define ENA_ADMIN_CUSTOMER_METRICS_MIN_SUPPORT_MASK 0x1F
16 
17  /* customer metrics - in correlation with
18   * ENA_ADMIN_CUSTOMER_METRICS_SUPPORT_MASK
19   */
20 enum ena_admin_customer_metrics_id {
21 	ENA_ADMIN_BW_IN_ALLOWANCE_EXCEEDED         = 0,
22 	ENA_ADMIN_BW_OUT_ALLOWANCE_EXCEEDED        = 1,
23 	ENA_ADMIN_PPS_ALLOWANCE_EXCEEDED           = 2,
24 	ENA_ADMIN_CONNTRACK_ALLOWANCE_EXCEEDED     = 3,
25 	ENA_ADMIN_LINKLOCAL_ALLOWANCE_EXCEEDED     = 4,
26 	ENA_ADMIN_CONNTRACK_ALLOWANCE_AVAILABLE    = 5,
27 };
28 
29 enum ena_admin_aq_opcode {
30 	ENA_ADMIN_CREATE_SQ                         = 1,
31 	ENA_ADMIN_DESTROY_SQ                        = 2,
32 	ENA_ADMIN_CREATE_CQ                         = 3,
33 	ENA_ADMIN_DESTROY_CQ                        = 4,
34 	ENA_ADMIN_GET_FEATURE                       = 8,
35 	ENA_ADMIN_SET_FEATURE                       = 9,
36 	ENA_ADMIN_GET_STATS                         = 11,
37 };
38 
39 enum ena_admin_aq_completion_status {
40 	ENA_ADMIN_SUCCESS                           = 0,
41 	ENA_ADMIN_RESOURCE_ALLOCATION_FAILURE       = 1,
42 	ENA_ADMIN_BAD_OPCODE                        = 2,
43 	ENA_ADMIN_UNSUPPORTED_OPCODE                = 3,
44 	ENA_ADMIN_MALFORMED_REQUEST                 = 4,
45 	/* Additional status is provided in ACQ entry extended_status */
46 	ENA_ADMIN_ILLEGAL_PARAMETER                 = 5,
47 	ENA_ADMIN_UNKNOWN_ERROR                     = 6,
48 	ENA_ADMIN_RESOURCE_BUSY                     = 7,
49 };
50 
51 /* subcommands for the set/get feature admin commands */
52 enum ena_admin_aq_feature_id {
53 	ENA_ADMIN_DEVICE_ATTRIBUTES                 = 1,
54 	ENA_ADMIN_MAX_QUEUES_NUM                    = 2,
55 	ENA_ADMIN_HW_HINTS                          = 3,
56 	ENA_ADMIN_LLQ                               = 4,
57 	ENA_ADMIN_EXTRA_PROPERTIES_STRINGS          = 5,
58 	ENA_ADMIN_EXTRA_PROPERTIES_FLAGS            = 6,
59 	ENA_ADMIN_MAX_QUEUES_EXT                    = 7,
60 	ENA_ADMIN_RSS_HASH_FUNCTION                 = 10,
61 	ENA_ADMIN_STATELESS_OFFLOAD_CONFIG          = 11,
62 	ENA_ADMIN_RSS_INDIRECTION_TABLE_CONFIG      = 12,
63 	ENA_ADMIN_MTU                               = 14,
64 	ENA_ADMIN_RSS_HASH_INPUT                    = 18,
65 	ENA_ADMIN_INTERRUPT_MODERATION              = 20,
66 	ENA_ADMIN_AENQ_CONFIG                       = 26,
67 	ENA_ADMIN_LINK_CONFIG                       = 27,
68 	ENA_ADMIN_HOST_ATTR_CONFIG                  = 28,
69 	ENA_ADMIN_PHC_CONFIG                        = 29,
70 	ENA_ADMIN_FEATURES_OPCODE_NUM               = 32,
71 };
72 
73 /* feature version for the set/get ENA_ADMIN_LLQ feature admin commands */
74 enum ena_admin_llq_feature_version {
75 	/* legacy base version in older drivers */
76 	ENA_ADMIN_LLQ_FEATURE_VERSION_0_LEGACY      = 0,
77 	/* support entry_size recommendation by device */
78 	ENA_ADMIN_LLQ_FEATURE_VERSION_1             = 1,
79 };
80 
81 /* device capabilities */
82 enum ena_admin_aq_caps_id {
83 	ENA_ADMIN_ENI_STATS                         = 0,
84 	/* ENA SRD customer metrics */
85 	ENA_ADMIN_ENA_SRD_INFO                      = 1,
86 	ENA_ADMIN_CUSTOMER_METRICS                  = 2,
87 	ENA_ADMIN_EXTENDED_RESET_REASONS	    = 3,
88 	ENA_ADMIN_CDESC_MBZ                         = 4,
89 };
90 
91 enum ena_admin_placement_policy_type {
92 	/* descriptors and headers are in host memory */
93 	ENA_ADMIN_PLACEMENT_POLICY_HOST             = 1,
94 	/* descriptors and headers are in device memory (a.k.a Low Latency
95 	 * Queue)
96 	 */
97 	ENA_ADMIN_PLACEMENT_POLICY_DEV              = 3,
98 };
99 
100 enum ena_admin_link_types {
101 	ENA_ADMIN_LINK_SPEED_1G                     = 0x1,
102 	ENA_ADMIN_LINK_SPEED_2_HALF_G               = 0x2,
103 	ENA_ADMIN_LINK_SPEED_5G                     = 0x4,
104 	ENA_ADMIN_LINK_SPEED_10G                    = 0x8,
105 	ENA_ADMIN_LINK_SPEED_25G                    = 0x10,
106 	ENA_ADMIN_LINK_SPEED_40G                    = 0x20,
107 	ENA_ADMIN_LINK_SPEED_50G                    = 0x40,
108 	ENA_ADMIN_LINK_SPEED_100G                   = 0x80,
109 	ENA_ADMIN_LINK_SPEED_200G                   = 0x100,
110 	ENA_ADMIN_LINK_SPEED_400G                   = 0x200,
111 };
112 
113 enum ena_admin_completion_policy_type {
114 	/* completion queue entry for each sq descriptor */
115 	ENA_ADMIN_COMPLETION_POLICY_DESC            = 0,
116 	/* completion queue entry upon request in sq descriptor */
117 	ENA_ADMIN_COMPLETION_POLICY_DESC_ON_DEMAND  = 1,
118 	/* current queue head pointer is updated in OS memory upon sq
119 	 * descriptor request
120 	 */
121 	ENA_ADMIN_COMPLETION_POLICY_HEAD_ON_DEMAND  = 2,
122 	/* current queue head pointer is updated in OS memory for each sq
123 	 * descriptor
124 	 */
125 	ENA_ADMIN_COMPLETION_POLICY_HEAD            = 3,
126 };
127 
128 /* basic stats return ena_admin_basic_stats while extanded stats return a
129  * buffer (string format) with additional statistics per queue and per
130  * device id
131  */
132 enum ena_admin_get_stats_type {
133 	ENA_ADMIN_GET_STATS_TYPE_BASIC              = 0,
134 	ENA_ADMIN_GET_STATS_TYPE_EXTENDED           = 1,
135 	/* extra HW stats for specific network interface */
136 	ENA_ADMIN_GET_STATS_TYPE_ENI                = 2,
137 	/* extra HW stats for ENA SRD */
138 	ENA_ADMIN_GET_STATS_TYPE_ENA_SRD            = 3,
139 	ENA_ADMIN_GET_STATS_TYPE_CUSTOMER_METRICS   = 4,
140 
141 };
142 
143 enum ena_admin_get_stats_scope {
144 	ENA_ADMIN_SPECIFIC_QUEUE                    = 0,
145 	ENA_ADMIN_ETH_TRAFFIC                       = 1,
146 };
147 
148 enum ena_admin_phc_feature_version {
149 	/* Readless with error_bound */
150 	ENA_ADMIN_PHC_FEATURE_VERSION_0             = 0,
151 };
152 
153 enum ena_admin_phc_error_flags {
154 	ENA_ADMIN_PHC_ERROR_FLAG_TIMESTAMP   = BIT(0),
155 	ENA_ADMIN_PHC_ERROR_FLAG_ERROR_BOUND = BIT(1),
156 };
157 
158 /* ENA SRD configuration for ENI */
159 enum ena_admin_ena_srd_flags {
160 	/* Feature enabled */
161 	ENA_ADMIN_ENA_SRD_ENABLED                   = BIT(0),
162 	/* UDP support enabled */
163 	ENA_ADMIN_ENA_SRD_UDP_ENABLED               = BIT(1),
164 	/* Bypass Rx UDP ordering */
165 	ENA_ADMIN_ENA_SRD_UDP_ORDERING_BYPASS_ENABLED = BIT(2),
166 };
167 
168 struct ena_admin_aq_common_desc {
169 	/* 11:0 : command_id
170 	 * 15:12 : reserved12
171 	 */
172 	uint16_t command_id;
173 
174 	/* as appears in ena_admin_aq_opcode */
175 	uint8_t opcode;
176 
177 	/* 0 : phase
178 	 * 1 : ctrl_data - control buffer address valid
179 	 * 2 : ctrl_data_indirect - control buffer address
180 	 *    points to list of pages with addresses of control
181 	 *    buffers
182 	 * 7:3 : reserved3
183 	 */
184 	uint8_t flags;
185 };
186 
187 /* used in ena_admin_aq_entry. Can point directly to control data, or to a
188  * page list chunk. Used also at the end of indirect mode page list chunks,
189  * for chaining.
190  */
191 struct ena_admin_ctrl_buff_info {
192 	uint32_t length;
193 
194 	struct ena_common_mem_addr address;
195 };
196 
197 struct ena_admin_sq {
198 	uint16_t sq_idx;
199 
200 	/* 4:0 : reserved
201 	 * 7:5 : sq_direction - 0x1 - Tx; 0x2 - Rx
202 	 */
203 	uint8_t sq_identity;
204 
205 	uint8_t reserved1;
206 };
207 
208 struct ena_admin_aq_entry {
209 	struct ena_admin_aq_common_desc aq_common_descriptor;
210 
211 	union {
212 		uint32_t inline_data_w1[3];
213 
214 		struct ena_admin_ctrl_buff_info control_buffer;
215 	} u;
216 
217 	uint32_t inline_data_w4[12];
218 };
219 
220 struct ena_admin_acq_common_desc {
221 	/* command identifier to associate it with the aq descriptor
222 	 * 11:0 : command_id
223 	 * 15:12 : reserved12
224 	 */
225 	uint16_t command;
226 
227 	uint8_t status;
228 
229 	/* 0 : phase
230 	 * 7:1 : reserved1
231 	 */
232 	uint8_t flags;
233 
234 	uint16_t extended_status;
235 
236 	/* indicates to the driver which AQ entry has been consumed by the
237 	 * device and could be reused
238 	 */
239 	uint16_t sq_head_indx;
240 };
241 
242 struct ena_admin_acq_entry {
243 	struct ena_admin_acq_common_desc acq_common_descriptor;
244 
245 	uint32_t response_specific_data[14];
246 };
247 
248 struct ena_admin_aq_create_sq_cmd {
249 	struct ena_admin_aq_common_desc aq_common_descriptor;
250 
251 	/* 4:0 : reserved0_w1
252 	 * 7:5 : sq_direction - 0x1 - Tx, 0x2 - Rx
253 	 */
254 	uint8_t sq_identity;
255 
256 	uint8_t reserved8_w1;
257 
258 	/* 3:0 : placement_policy - Describing where the SQ
259 	 *    descriptor ring and the SQ packet headers reside:
260 	 *    0x1 - descriptors and headers are in OS memory,
261 	 *    0x3 - descriptors and headers in device memory
262 	 *    (a.k.a Low Latency Queue)
263 	 * 6:4 : completion_policy - Describing what policy
264 	 *    to use for generation completion entry (cqe) in
265 	 *    the CQ associated with this SQ: 0x0 - cqe for each
266 	 *    sq descriptor, 0x1 - cqe upon request in sq
267 	 *    descriptor, 0x2 - current queue head pointer is
268 	 *    updated in OS memory upon sq descriptor request
269 	 *    0x3 - current queue head pointer is updated in OS
270 	 *    memory for each sq descriptor
271 	 * 7 : reserved15_w1
272 	 */
273 	uint8_t sq_caps_2;
274 
275 	/* 0 : is_physically_contiguous - Described if the
276 	 *    queue ring memory is allocated in physical
277 	 *    contiguous pages or split.
278 	 * 7:1 : reserved17_w1
279 	 */
280 	uint8_t sq_caps_3;
281 
282 	/* associated completion queue id. This CQ must be created prior to SQ
283 	 * creation
284 	 */
285 	uint16_t cq_idx;
286 
287 	/* submission queue depth in entries */
288 	uint16_t sq_depth;
289 
290 	/* SQ physical base address in OS memory. This field should not be
291 	 * used for Low Latency queues. Has to be page aligned.
292 	 */
293 	struct ena_common_mem_addr sq_ba;
294 
295 	/* specifies queue head writeback location in OS memory. Valid if
296 	 * completion_policy is set to completion_policy_head_on_demand or
297 	 * completion_policy_head. Has to be cache aligned
298 	 */
299 	struct ena_common_mem_addr sq_head_writeback;
300 
301 	uint32_t reserved0_w7;
302 
303 	uint32_t reserved0_w8;
304 };
305 
306 enum ena_admin_sq_direction {
307 	ENA_ADMIN_SQ_DIRECTION_TX                   = 1,
308 	ENA_ADMIN_SQ_DIRECTION_RX                   = 2,
309 };
310 
311 struct ena_admin_acq_create_sq_resp_desc {
312 	struct ena_admin_acq_common_desc acq_common_desc;
313 
314 	uint16_t sq_idx;
315 
316 	uint16_t reserved;
317 
318 	/* queue doorbell address as an offset to PCIe MMIO REG BAR */
319 	uint32_t sq_doorbell_offset;
320 
321 	/* low latency queue ring base address as an offset to PCIe MMIO
322 	 * LLQ_MEM BAR
323 	 */
324 	uint32_t llq_descriptors_offset;
325 
326 	/* low latency queue headers' memory as an offset to PCIe MMIO
327 	 * LLQ_MEM BAR
328 	 */
329 	uint32_t llq_headers_offset;
330 };
331 
332 struct ena_admin_aq_destroy_sq_cmd {
333 	struct ena_admin_aq_common_desc aq_common_descriptor;
334 
335 	struct ena_admin_sq sq;
336 };
337 
338 struct ena_admin_acq_destroy_sq_resp_desc {
339 	struct ena_admin_acq_common_desc acq_common_desc;
340 };
341 
342 struct ena_admin_aq_create_cq_cmd {
343 	struct ena_admin_aq_common_desc aq_common_descriptor;
344 
345 	/* 4:0 : reserved5
346 	 * 5 : interrupt_mode_enabled - if set, cq operates
347 	 *    in interrupt mode, otherwise - polling
348 	 * 7:6 : reserved6
349 	 */
350 	uint8_t cq_caps_1;
351 
352 	/* 4:0 : cq_entry_size_words - size of CQ entry in
353 	 *    32-bit words, valid values: 4, 8.
354 	 * 7:5 : reserved7
355 	 */
356 	uint8_t cq_caps_2;
357 
358 	/* completion queue depth in # of entries. must be power of 2 */
359 	uint16_t cq_depth;
360 
361 	/* msix vector assigned to this cq */
362 	uint32_t msix_vector;
363 
364 	/* cq physical base address in OS memory. CQ must be physically
365 	 * contiguous
366 	 */
367 	struct ena_common_mem_addr cq_ba;
368 };
369 
370 struct ena_admin_acq_create_cq_resp_desc {
371 	struct ena_admin_acq_common_desc acq_common_desc;
372 
373 	uint16_t cq_idx;
374 
375 	/* actual cq depth in number of entries */
376 	uint16_t cq_actual_depth;
377 
378 	uint32_t numa_node_register_offset;
379 
380 	uint32_t cq_head_db_register_offset;
381 
382 	uint32_t cq_interrupt_unmask_register_offset;
383 };
384 
385 struct ena_admin_aq_destroy_cq_cmd {
386 	struct ena_admin_aq_common_desc aq_common_descriptor;
387 
388 	uint16_t cq_idx;
389 
390 	uint16_t reserved1;
391 };
392 
393 struct ena_admin_acq_destroy_cq_resp_desc {
394 	struct ena_admin_acq_common_desc acq_common_desc;
395 };
396 
397 /* ENA AQ Get Statistics command. Extended statistics are placed in control
398  * buffer pointed by AQ entry
399  */
400 struct ena_admin_aq_get_stats_cmd {
401 	struct ena_admin_aq_common_desc aq_common_descriptor;
402 
403 	union {
404 		/* command specific inline data */
405 		uint32_t inline_data_w1[3];
406 
407 		struct ena_admin_ctrl_buff_info control_buffer;
408 	} u;
409 
410 	/* stats type as defined in enum ena_admin_get_stats_type */
411 	uint8_t type;
412 
413 	/* stats scope defined in enum ena_admin_get_stats_scope */
414 	uint8_t scope;
415 
416 	uint16_t reserved3;
417 
418 	/* queue id. used when scope is specific_queue */
419 	uint16_t queue_idx;
420 
421 	/* device id, value 0xFFFF means mine. only privileged device can get
422 	 * stats of other device
423 	 */
424 	uint16_t device_id;
425 
426 	/* a bitmap representing the requested metric values */
427 	uint64_t requested_metrics;
428 };
429 
430 /* Basic Statistics Command. */
431 struct ena_admin_basic_stats {
432 	uint32_t tx_bytes_low;
433 
434 	uint32_t tx_bytes_high;
435 
436 	uint32_t tx_pkts_low;
437 
438 	uint32_t tx_pkts_high;
439 
440 	uint32_t rx_bytes_low;
441 
442 	uint32_t rx_bytes_high;
443 
444 	uint32_t rx_pkts_low;
445 
446 	uint32_t rx_pkts_high;
447 
448 	uint32_t rx_drops_low;
449 
450 	uint32_t rx_drops_high;
451 
452 	uint32_t tx_drops_low;
453 
454 	uint32_t tx_drops_high;
455 
456 	uint32_t rx_overruns_low;
457 
458 	uint32_t rx_overruns_high;
459 };
460 
461 /* ENI Statistics Command. */
462 struct ena_admin_eni_stats {
463 	/* The number of packets shaped due to inbound aggregate BW
464 	 * allowance being exceeded
465 	 */
466 	uint64_t bw_in_allowance_exceeded;
467 
468 	/* The number of packets shaped due to outbound aggregate BW
469 	 * allowance being exceeded
470 	 */
471 	uint64_t bw_out_allowance_exceeded;
472 
473 	/* The number of packets shaped due to PPS allowance being exceeded */
474 	uint64_t pps_allowance_exceeded;
475 
476 	/* The number of packets shaped due to connection tracking
477 	 * allowance being exceeded and leading to failure in establishment
478 	 * of new connections
479 	 */
480 	uint64_t conntrack_allowance_exceeded;
481 
482 	/* The number of packets shaped due to linklocal packet rate
483 	 * allowance being exceeded
484 	 */
485 	uint64_t linklocal_allowance_exceeded;
486 };
487 
488 struct ena_admin_ena_srd_stats {
489 	/* Number of packets transmitted over ENA SRD */
490 	uint64_t ena_srd_tx_pkts;
491 
492 	/* Number of packets transmitted or could have been
493 	 * transmitted over ENA SRD
494 	 */
495 	uint64_t ena_srd_eligible_tx_pkts;
496 
497 	/* Number of packets received over ENA SRD */
498 	uint64_t ena_srd_rx_pkts;
499 
500 	/* Percentage of the ENA SRD resources that is in use */
501 	uint64_t ena_srd_resource_utilization;
502 };
503 
504 /* ENA SRD Statistics Command */
505 struct ena_admin_ena_srd_info {
506 	/* ENA SRD configuration bitmap. See ena_admin_ena_srd_flags for
507 	 * details
508 	 */
509 	uint64_t flags;
510 
511 	struct ena_admin_ena_srd_stats ena_srd_stats;
512 };
513 
514 /* Customer Metrics Command. */
515 struct ena_admin_customer_metrics {
516 	/* A bitmap representing the reported customer metrics according to
517 	 * the order they are reported
518 	 */
519 	uint64_t reported_metrics;
520 };
521 
522 struct ena_admin_acq_get_stats_resp {
523 	struct ena_admin_acq_common_desc acq_common_desc;
524 
525 	union {
526 		uint64_t raw[7];
527 
528 		struct ena_admin_basic_stats basic_stats;
529 
530 		struct ena_admin_eni_stats eni_stats;
531 
532 		struct ena_admin_ena_srd_info ena_srd_info;
533 
534 		struct ena_admin_customer_metrics customer_metrics;
535 	} u;
536 };
537 
538 struct ena_admin_get_set_feature_common_desc {
539 	/* 1:0 : select - 0x1 - current value; 0x3 - default
540 	 *    value
541 	 * 7:3 : reserved3
542 	 */
543 	uint8_t flags;
544 
545 	/* as appears in ena_admin_aq_feature_id */
546 	uint8_t feature_id;
547 
548 	/* The driver specifies the max feature version it supports and the
549 	 * device responds with the currently supported feature version. The
550 	 * field is zero based
551 	 */
552 	uint8_t feature_version;
553 
554 	uint8_t reserved8;
555 };
556 
557 struct ena_admin_device_attr_feature_desc {
558 	uint32_t impl_id;
559 
560 	uint32_t device_version;
561 
562 	/* bitmap of ena_admin_aq_feature_id, which represents supported
563 	 * subcommands for the set/get feature admin commands.
564 	 */
565 	uint32_t supported_features;
566 
567 	/* bitmap of ena_admin_aq_caps_id, which represents device
568 	 * capabilities.
569 	 */
570 	uint32_t capabilities;
571 
572 	/* Indicates how many bits are used physical address access. */
573 	uint32_t phys_addr_width;
574 
575 	/* Indicates how many bits are used virtual address access. */
576 	uint32_t virt_addr_width;
577 
578 	/* unicast MAC address (in Network byte order) */
579 	uint8_t mac_addr[6];
580 
581 	uint8_t reserved7[2];
582 
583 	uint32_t max_mtu;
584 };
585 
586 enum ena_admin_llq_header_location {
587 	/* header is in descriptor list */
588 	ENA_ADMIN_INLINE_HEADER                     = 1,
589 	/* header in a separate ring, implies 16B descriptor list entry */
590 	ENA_ADMIN_HEADER_RING                       = 2,
591 };
592 
593 enum ena_admin_llq_ring_entry_size {
594 	ENA_ADMIN_LIST_ENTRY_SIZE_128B              = 1,
595 	ENA_ADMIN_LIST_ENTRY_SIZE_192B              = 2,
596 	ENA_ADMIN_LIST_ENTRY_SIZE_256B              = 4,
597 };
598 
599 enum ena_admin_llq_num_descs_before_header {
600 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_0     = 0,
601 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_1     = 1,
602 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_2     = 2,
603 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_4     = 4,
604 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_8     = 8,
605 };
606 
607 /* packet descriptor list entry always starts with one or more descriptors,
608  * followed by a header. The rest of the descriptors are located in the
609  * beginning of the subsequent entry. Stride refers to how the rest of the
610  * descriptors are placed. This field is relevant only for inline header
611  * mode
612  */
613 enum ena_admin_llq_stride_ctrl {
614 	ENA_ADMIN_SINGLE_DESC_PER_ENTRY             = 1,
615 	ENA_ADMIN_MULTIPLE_DESCS_PER_ENTRY          = 2,
616 };
617 
618 enum ena_admin_accel_mode_feat {
619 	ENA_ADMIN_DISABLE_META_CACHING              = 0,
620 	ENA_ADMIN_LIMIT_TX_BURST                    = 1,
621 };
622 
623 struct ena_admin_accel_mode_get {
624 	/* bit field of enum ena_admin_accel_mode_feat */
625 	uint16_t supported_flags;
626 
627 	/* maximum burst size between two doorbells. The size is in bytes */
628 	uint16_t max_tx_burst_size;
629 };
630 
631 struct ena_admin_accel_mode_set {
632 	/* bit field of enum ena_admin_accel_mode_feat */
633 	uint16_t enabled_flags;
634 
635 	uint16_t reserved;
636 };
637 
638 struct ena_admin_accel_mode_req {
639 	union {
640 		uint32_t raw[2];
641 
642 		struct ena_admin_accel_mode_get get;
643 
644 		struct ena_admin_accel_mode_set set;
645 	} u;
646 };
647 
648 struct ena_admin_feature_llq_desc {
649 	uint32_t max_llq_num;
650 
651 	uint32_t max_llq_depth;
652 
653 	/* specify the header locations the device supports. bitfield of enum
654 	 * ena_admin_llq_header_location.
655 	 */
656 	uint16_t header_location_ctrl_supported;
657 
658 	/* the header location the driver selected to use. */
659 	uint16_t header_location_ctrl_enabled;
660 
661 	/* if inline header is specified - this is the size of descriptor list
662 	 * entry. If header in a separate ring is specified - this is the size
663 	 * of header ring entry. bitfield of enum ena_admin_llq_ring_entry_size.
664 	 * specify the entry sizes the device supports
665 	 */
666 	uint16_t entry_size_ctrl_supported;
667 
668 	/* the entry size the driver selected to use. */
669 	uint16_t entry_size_ctrl_enabled;
670 
671 	/* valid only if inline header is specified. First entry associated with
672 	 * the packet includes descriptors and header. Rest of the entries
673 	 * occupied by descriptors. This parameter defines the max number of
674 	 * descriptors precedding the header in the first entry. The field is
675 	 * bitfield of enum ena_admin_llq_num_descs_before_header and specify
676 	 * the values the device supports
677 	 */
678 	uint16_t desc_num_before_header_supported;
679 
680 	/* the desire field the driver selected to use */
681 	uint16_t desc_num_before_header_enabled;
682 
683 	/* valid only if inline was chosen. bitfield of enum
684 	 * ena_admin_llq_stride_ctrl
685 	 */
686 	uint16_t descriptors_stride_ctrl_supported;
687 
688 	/* the stride control the driver selected to use */
689 	uint16_t descriptors_stride_ctrl_enabled;
690 
691 	/* feature version of device resp to either GET/SET commands. */
692 	uint8_t feature_version;
693 
694 	/* llq entry size recommended by the device,
695 	 * values correlated to enum ena_admin_llq_ring_entry_size.
696 	 * used only for GET command.
697 	 */
698 	uint8_t entry_size_recommended;
699 
700 	/* max depth of wide llq, or 0 for N/A */
701 	uint16_t max_wide_llq_depth;
702 
703 	/* accelerated low latency queues requirement. driver needs to
704 	 * support those requirements in order to use accelerated llq
705 	 */
706 	struct ena_admin_accel_mode_req accel_mode;
707 };
708 
709 struct ena_admin_queue_ext_feature_fields {
710 	uint32_t max_tx_sq_num;
711 
712 	uint32_t max_tx_cq_num;
713 
714 	uint32_t max_rx_sq_num;
715 
716 	uint32_t max_rx_cq_num;
717 
718 	uint32_t max_tx_sq_depth;
719 
720 	uint32_t max_tx_cq_depth;
721 
722 	uint32_t max_rx_sq_depth;
723 
724 	uint32_t max_rx_cq_depth;
725 
726 	uint32_t max_tx_header_size;
727 
728 	/* Maximum Descriptors number, including meta descriptor, allowed for a
729 	 * single Tx packet
730 	 */
731 	uint16_t max_per_packet_tx_descs;
732 
733 	/* Maximum Descriptors number allowed for a single Rx packet */
734 	uint16_t max_per_packet_rx_descs;
735 };
736 
737 struct ena_admin_queue_feature_desc {
738 	uint32_t max_sq_num;
739 
740 	uint32_t max_sq_depth;
741 
742 	uint32_t max_cq_num;
743 
744 	uint32_t max_cq_depth;
745 
746 	uint32_t max_legacy_llq_num;
747 
748 	uint32_t max_legacy_llq_depth;
749 
750 	uint32_t max_header_size;
751 
752 	/* Maximum Descriptors number, including meta descriptor, allowed for a
753 	 * single Tx packet
754 	 */
755 	uint16_t max_packet_tx_descs;
756 
757 	/* Maximum Descriptors number allowed for a single Rx packet */
758 	uint16_t max_packet_rx_descs;
759 };
760 
761 struct ena_admin_set_feature_mtu_desc {
762 	/* exclude L2 */
763 	uint32_t mtu;
764 };
765 
766 struct ena_admin_get_extra_properties_strings_desc {
767 	uint32_t count;
768 };
769 
770 struct ena_admin_get_extra_properties_flags_desc {
771 	uint32_t flags;
772 };
773 
774 struct ena_admin_set_feature_host_attr_desc {
775 	/* host OS info base address in OS memory. host info is 4KB of
776 	 * physically contiguous
777 	 */
778 	struct ena_common_mem_addr os_info_ba;
779 
780 	/* host debug area base address in OS memory. debug area must be
781 	 * physically contiguous
782 	 */
783 	struct ena_common_mem_addr debug_ba;
784 
785 	/* debug area size */
786 	uint32_t debug_area_size;
787 };
788 
789 struct ena_admin_feature_intr_moder_desc {
790 	/* interrupt delay granularity in usec */
791 	uint16_t intr_delay_resolution;
792 
793 	uint16_t reserved;
794 };
795 
796 struct ena_admin_get_feature_link_desc {
797 	/* Link speed in Mb */
798 	uint32_t speed;
799 
800 	/* bit field of enum ena_admin_link types */
801 	uint32_t supported;
802 
803 	/* 0 : autoneg
804 	 * 1 : duplex - Full Duplex
805 	 * 31:2 : reserved2
806 	 */
807 	uint32_t flags;
808 };
809 
810 struct ena_admin_feature_aenq_desc {
811 	/* bitmask for AENQ groups the device can report */
812 	uint32_t supported_groups;
813 
814 	/* bitmask for AENQ groups to report */
815 	uint32_t enabled_groups;
816 };
817 
818 struct ena_admin_feature_offload_desc {
819 	/* 0 : TX_L3_csum_ipv4
820 	 * 1 : TX_L4_ipv4_csum_part - The checksum field
821 	 *    should be initialized with pseudo header checksum
822 	 * 2 : TX_L4_ipv4_csum_full
823 	 * 3 : TX_L4_ipv6_csum_part - The checksum field
824 	 *    should be initialized with pseudo header checksum
825 	 * 4 : TX_L4_ipv6_csum_full
826 	 * 5 : tso_ipv4
827 	 * 6 : tso_ipv6
828 	 * 7 : tso_ecn
829 	 */
830 	uint32_t tx;
831 
832 	/* Receive side supported stateless offload
833 	 * 0 : RX_L3_csum_ipv4 - IPv4 checksum
834 	 * 1 : RX_L4_ipv4_csum - TCP/UDP/IPv4 checksum
835 	 * 2 : RX_L4_ipv6_csum - TCP/UDP/IPv6 checksum
836 	 * 3 : RX_hash - Hash calculation
837 	 */
838 	uint32_t rx_supported;
839 
840 	uint32_t rx_enabled;
841 };
842 
843 enum ena_admin_hash_functions {
844 	ENA_ADMIN_TOEPLITZ                          = 1,
845 	ENA_ADMIN_CRC32                             = 2,
846 };
847 
848 struct ena_admin_feature_rss_flow_hash_control {
849 	uint32_t key_parts;
850 
851 	uint32_t reserved;
852 
853 	uint32_t key[ENA_ADMIN_RSS_KEY_PARTS];
854 };
855 
856 struct ena_admin_feature_rss_flow_hash_function {
857 	/* 7:0 : funcs - bitmask of ena_admin_hash_functions */
858 	uint32_t supported_func;
859 
860 	/* 7:0 : selected_func - bitmask of
861 	 *    ena_admin_hash_functions
862 	 */
863 	uint32_t selected_func;
864 
865 	/* initial value */
866 	uint32_t init_val;
867 };
868 
869 /* RSS flow hash protocols */
870 enum ena_admin_flow_hash_proto {
871 	ENA_ADMIN_RSS_TCP4                          = 0,
872 	ENA_ADMIN_RSS_UDP4                          = 1,
873 	ENA_ADMIN_RSS_TCP6                          = 2,
874 	ENA_ADMIN_RSS_UDP6                          = 3,
875 	ENA_ADMIN_RSS_IP4                           = 4,
876 	ENA_ADMIN_RSS_IP6                           = 5,
877 	ENA_ADMIN_RSS_IP4_FRAG                      = 6,
878 	ENA_ADMIN_RSS_NOT_IP                        = 7,
879 	/* TCPv6 with extension header */
880 	ENA_ADMIN_RSS_TCP6_EX                       = 8,
881 	/* IPv6 with extension header */
882 	ENA_ADMIN_RSS_IP6_EX                        = 9,
883 	ENA_ADMIN_RSS_PROTO_NUM                     = 16,
884 };
885 
886 /* RSS flow hash fields */
887 enum ena_admin_flow_hash_fields {
888 	/* Ethernet Dest Addr */
889 	ENA_ADMIN_RSS_L2_DA                         = BIT(0),
890 	/* Ethernet Src Addr */
891 	ENA_ADMIN_RSS_L2_SA                         = BIT(1),
892 	/* ipv4/6 Dest Addr */
893 	ENA_ADMIN_RSS_L3_DA                         = BIT(2),
894 	/* ipv4/6 Src Addr */
895 	ENA_ADMIN_RSS_L3_SA                         = BIT(3),
896 	/* tcp/udp Dest Port */
897 	ENA_ADMIN_RSS_L4_DP                         = BIT(4),
898 	/* tcp/udp Src Port */
899 	ENA_ADMIN_RSS_L4_SP                         = BIT(5),
900 };
901 
902 struct ena_admin_proto_input {
903 	/* flow hash fields (bitwise according to ena_admin_flow_hash_fields) */
904 	uint16_t fields;
905 
906 	uint16_t reserved2;
907 };
908 
909 struct ena_admin_feature_rss_hash_control {
910 	struct ena_admin_proto_input supported_fields[ENA_ADMIN_RSS_PROTO_NUM];
911 
912 	struct ena_admin_proto_input selected_fields[ENA_ADMIN_RSS_PROTO_NUM];
913 
914 	struct ena_admin_proto_input reserved2[ENA_ADMIN_RSS_PROTO_NUM];
915 
916 	struct ena_admin_proto_input reserved3[ENA_ADMIN_RSS_PROTO_NUM];
917 };
918 
919 struct ena_admin_feature_rss_flow_hash_input {
920 	/* supported hash input sorting
921 	 * 1 : L3_sort - support swap L3 addresses if DA is
922 	 *    smaller than SA
923 	 * 2 : L4_sort - support swap L4 ports if DP smaller
924 	 *    SP
925 	 */
926 	uint16_t supported_input_sort;
927 
928 	/* enabled hash input sorting
929 	 * 1 : enable_L3_sort - enable swap L3 addresses if
930 	 *    DA smaller than SA
931 	 * 2 : enable_L4_sort - enable swap L4 ports if DP
932 	 *    smaller than SP
933 	 */
934 	uint16_t enabled_input_sort;
935 };
936 
937 struct ena_admin_host_info {
938 	/* Host OS type defined as ENA_ADMIN_OS_* */
939 	uint32_t os_type;
940 
941 	/* os distribution string format */
942 	uint8_t os_dist_str[128];
943 
944 	/* OS distribution numeric format */
945 	uint32_t os_dist;
946 
947 	/* kernel version string format */
948 	uint8_t kernel_ver_str[32];
949 
950 	/* Kernel version numeric format */
951 	uint32_t kernel_ver;
952 
953 	/* 7:0 : major
954 	 * 15:8 : minor
955 	 * 23:16 : sub_minor
956 	 * 31:24 : module_type
957 	 */
958 	uint32_t driver_version;
959 
960 	/* features bitmap */
961 	uint32_t supported_network_features[2];
962 
963 	/* ENA spec version of driver */
964 	uint16_t ena_spec_version;
965 
966 	/* ENA device's Bus, Device and Function
967 	 * 2:0 : function
968 	 * 7:3 : device
969 	 * 15:8 : bus
970 	 */
971 	uint16_t bdf;
972 
973 	/* Number of CPUs */
974 	uint16_t num_cpus;
975 
976 	uint16_t reserved;
977 
978 	/* 0 : reserved
979 	 * 1 : rx_offset
980 	 * 2 : interrupt_moderation
981 	 * 3 : rx_buf_mirroring
982 	 * 4 : rss_configurable_function_key
983 	 * 5 : reserved
984 	 * 6 : rx_page_reuse
985 	 * 7 : tx_ipv6_csum_offload
986 	 * 8 : phc
987 	 * 31:9 : reserved
988 	 */
989 	uint32_t driver_supported_features;
990 };
991 
992 struct ena_admin_rss_ind_table_entry {
993 	uint16_t cq_idx;
994 
995 	uint16_t reserved;
996 };
997 
998 struct ena_admin_feature_rss_ind_table {
999 	/* min supported table size (2^min_size) */
1000 	uint16_t min_size;
1001 
1002 	/* max supported table size (2^max_size) */
1003 	uint16_t max_size;
1004 
1005 	/* table size (2^size) */
1006 	uint16_t size;
1007 
1008 	/* 0 : one_entry_update - The ENA device supports
1009 	 *    setting a single RSS table entry
1010 	 */
1011 	uint8_t flags;
1012 
1013 	uint8_t reserved;
1014 
1015 	/* index of the inline entry. 0xFFFFFFFF means invalid */
1016 	uint32_t inline_index;
1017 
1018 	/* used for updating single entry, ignored when setting the entire
1019 	 * table through the control buffer.
1020 	 */
1021 	struct ena_admin_rss_ind_table_entry inline_entry;
1022 };
1023 
1024 /* When hint value is 0, driver should use it's own predefined value */
1025 struct ena_admin_ena_hw_hints {
1026 	/* value in ms */
1027 	uint16_t mmio_read_timeout;
1028 
1029 	/* value in ms */
1030 	uint16_t driver_watchdog_timeout;
1031 
1032 	/* Per packet tx completion timeout. value in ms */
1033 	uint16_t missing_tx_completion_timeout;
1034 
1035 	uint16_t missed_tx_completion_count_threshold_to_reset;
1036 
1037 	/* value in ms */
1038 	uint16_t admin_completion_tx_timeout;
1039 
1040 	uint16_t netdev_wd_timeout;
1041 
1042 	uint16_t max_tx_sgl_size;
1043 
1044 	uint16_t max_rx_sgl_size;
1045 
1046 	uint16_t reserved[8];
1047 };
1048 
1049 struct ena_admin_get_feat_cmd {
1050 	struct ena_admin_aq_common_desc aq_common_descriptor;
1051 
1052 	struct ena_admin_ctrl_buff_info control_buffer;
1053 
1054 	struct ena_admin_get_set_feature_common_desc feat_common;
1055 
1056 	uint32_t raw[11];
1057 };
1058 
1059 struct ena_admin_queue_ext_feature_desc {
1060 	/* version */
1061 	uint8_t version;
1062 
1063 	uint8_t reserved1[3];
1064 
1065 	union {
1066 		struct ena_admin_queue_ext_feature_fields max_queue_ext;
1067 
1068 		uint32_t raw[10];
1069 	};
1070 };
1071 
1072 struct ena_admin_feature_phc_desc {
1073 	/* PHC version as defined in enum ena_admin_phc_feature_version,
1074 	 * used only for GET command as max supported PHC version by the device.
1075 	 */
1076 	uint8_t version;
1077 
1078 	/* Reserved - MBZ */
1079 	uint8_t reserved1[3];
1080 
1081 	/* PHC doorbell address as an offset to PCIe MMIO REG BAR,
1082 	 * used only for GET command.
1083 	 */
1084 	uint32_t doorbell_offset;
1085 
1086 	/* Max time for valid PHC retrieval, passing this threshold will
1087 	 * fail the get-time request and block PHC requests for
1088 	 * block_timeout_usec, used only for GET command.
1089 	 */
1090 	uint32_t expire_timeout_usec;
1091 
1092 	/* PHC requests block period, blocking starts if PHC request expired
1093 	 * in order to prevent floods on busy device,
1094 	 * used only for GET command.
1095 	 */
1096 	uint32_t block_timeout_usec;
1097 
1098 	/* Shared PHC physical address (ena_admin_phc_resp),
1099 	 * used only for SET command.
1100 	 */
1101 	struct ena_common_mem_addr output_address;
1102 
1103 	/* Shared PHC Size (ena_admin_phc_resp),
1104 	 * used only for SET command.
1105 	 */
1106 	uint32_t output_length;
1107 };
1108 
1109 struct ena_admin_get_feat_resp {
1110 	struct ena_admin_acq_common_desc acq_common_desc;
1111 
1112 	union {
1113 		uint32_t raw[14];
1114 
1115 		struct ena_admin_device_attr_feature_desc dev_attr;
1116 
1117 		struct ena_admin_feature_llq_desc llq;
1118 
1119 		struct ena_admin_queue_feature_desc max_queue;
1120 
1121 		struct ena_admin_queue_ext_feature_desc max_queue_ext;
1122 
1123 		struct ena_admin_feature_aenq_desc aenq;
1124 
1125 		struct ena_admin_get_feature_link_desc link;
1126 
1127 		struct ena_admin_feature_offload_desc offload;
1128 
1129 		struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
1130 
1131 		struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
1132 
1133 		struct ena_admin_feature_rss_ind_table ind_table;
1134 
1135 		struct ena_admin_feature_intr_moder_desc intr_moderation;
1136 
1137 		struct ena_admin_ena_hw_hints hw_hints;
1138 
1139 		struct ena_admin_feature_phc_desc phc;
1140 
1141 		struct ena_admin_get_extra_properties_strings_desc extra_properties_strings;
1142 
1143 		struct ena_admin_get_extra_properties_flags_desc extra_properties_flags;
1144 	} u;
1145 };
1146 
1147 struct ena_admin_set_feat_cmd {
1148 	struct ena_admin_aq_common_desc aq_common_descriptor;
1149 
1150 	struct ena_admin_ctrl_buff_info control_buffer;
1151 
1152 	struct ena_admin_get_set_feature_common_desc feat_common;
1153 
1154 	union {
1155 		uint32_t raw[11];
1156 
1157 		/* mtu size */
1158 		struct ena_admin_set_feature_mtu_desc mtu;
1159 
1160 		/* host attributes */
1161 		struct ena_admin_set_feature_host_attr_desc host_attr;
1162 
1163 		/* AENQ configuration */
1164 		struct ena_admin_feature_aenq_desc aenq;
1165 
1166 		/* rss flow hash function */
1167 		struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
1168 
1169 		/* rss flow hash input */
1170 		struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
1171 
1172 		/* rss indirection table */
1173 		struct ena_admin_feature_rss_ind_table ind_table;
1174 
1175 		/* LLQ configuration */
1176 		struct ena_admin_feature_llq_desc llq;
1177 
1178 		/* PHC configuration */
1179 		struct ena_admin_feature_phc_desc phc;
1180 	} u;
1181 };
1182 
1183 struct ena_admin_set_feat_resp {
1184 	struct ena_admin_acq_common_desc acq_common_desc;
1185 
1186 	union {
1187 		uint32_t raw[14];
1188 	} u;
1189 };
1190 
1191 struct ena_admin_aenq_common_desc {
1192 	uint16_t group;
1193 
1194 	uint16_t syndrome;
1195 
1196 	/* 0 : phase
1197 	 * 7:1 : reserved - MBZ
1198 	 */
1199 	uint8_t flags;
1200 
1201 	uint8_t reserved1[3];
1202 
1203 	uint32_t timestamp_low;
1204 
1205 	uint32_t timestamp_high;
1206 };
1207 
1208 /* asynchronous event notification groups */
1209 enum ena_admin_aenq_group {
1210 	ENA_ADMIN_LINK_CHANGE                       = 0,
1211 	ENA_ADMIN_FATAL_ERROR                       = 1,
1212 	ENA_ADMIN_WARNING                           = 2,
1213 	ENA_ADMIN_NOTIFICATION                      = 3,
1214 	ENA_ADMIN_KEEP_ALIVE                        = 4,
1215 	ENA_ADMIN_REFRESH_CAPABILITIES              = 5,
1216 	ENA_ADMIN_CONF_NOTIFICATIONS                = 6,
1217 	ENA_ADMIN_DEVICE_REQUEST_RESET              = 7,
1218 	ENA_ADMIN_AENQ_GROUPS_NUM                   = 8,
1219 };
1220 
1221 enum ena_admin_aenq_notification_syndrome {
1222 	ENA_ADMIN_UPDATE_HINTS                      = 2,
1223 };
1224 
1225 struct ena_admin_aenq_entry {
1226 	struct ena_admin_aenq_common_desc aenq_common_desc;
1227 
1228 	/* command specific inline data */
1229 	uint32_t inline_data_w4[12];
1230 };
1231 
1232 struct ena_admin_aenq_link_change_desc {
1233 	struct ena_admin_aenq_common_desc aenq_common_desc;
1234 
1235 	/* 0 : link_status */
1236 	uint32_t flags;
1237 };
1238 
1239 struct ena_admin_aenq_keep_alive_desc {
1240 	struct ena_admin_aenq_common_desc aenq_common_desc;
1241 
1242 	uint32_t rx_drops_low;
1243 
1244 	uint32_t rx_drops_high;
1245 
1246 	uint32_t tx_drops_low;
1247 
1248 	uint32_t tx_drops_high;
1249 
1250 	uint32_t rx_overruns_low;
1251 
1252 	uint32_t rx_overruns_high;
1253 };
1254 
1255 struct ena_admin_aenq_conf_notifications_desc {
1256 	struct ena_admin_aenq_common_desc aenq_common_desc;
1257 
1258 	uint64_t notifications_bitmap;
1259 
1260 	uint64_t reserved;
1261 };
1262 
1263 struct ena_admin_ena_mmio_req_read_less_resp {
1264 	uint16_t req_id;
1265 
1266 	uint16_t reg_off;
1267 
1268 	/* value is valid when poll is cleared */
1269 	uint32_t reg_val;
1270 };
1271 
1272 struct ena_admin_phc_resp {
1273 	/* Request Id, received from DB register */
1274 	uint16_t req_id;
1275 
1276 	uint8_t reserved1[6];
1277 
1278 	/* PHC timestamp (nsec) */
1279 	uint64_t timestamp;
1280 
1281 	uint8_t reserved2[8];
1282 
1283 	/* Timestamp error limit (nsec) */
1284 	uint32_t error_bound;
1285 
1286 	/* Bit field of enum ena_admin_phc_error_flags */
1287 	uint32_t error_flags;
1288 
1289 	uint8_t reserved3[32];
1290 };
1291 
1292 /* aq_common_desc */
1293 #define ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK            GENMASK(11, 0)
1294 #define ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK                 BIT(0)
1295 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT            1
1296 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK             BIT(1)
1297 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT   2
1298 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK    BIT(2)
1299 
1300 /* sq */
1301 #define ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT                     5
1302 #define ENA_ADMIN_SQ_SQ_DIRECTION_MASK                      GENMASK(7, 5)
1303 
1304 /* acq_common_desc */
1305 #define ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK           GENMASK(11, 0)
1306 #define ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK                BIT(0)
1307 
1308 /* aq_create_sq_cmd */
1309 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT       5
1310 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK        GENMASK(7, 5)
1311 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK    GENMASK(3, 0)
1312 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT  4
1313 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK   GENMASK(6, 4)
1314 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK BIT(0)
1315 
1316 /* aq_create_cq_cmd */
1317 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT 5
1318 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5)
1319 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0)
1320 
1321 /* get_set_feature_common_desc */
1322 #define ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK   GENMASK(1, 0)
1323 
1324 /* get_feature_link_desc */
1325 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK        BIT(0)
1326 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT        1
1327 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK         BIT(1)
1328 
1329 /* feature_offload_desc */
1330 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK BIT(0)
1331 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT 1
1332 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK BIT(1)
1333 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT 2
1334 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK BIT(2)
1335 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT 3
1336 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK BIT(3)
1337 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT 4
1338 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK BIT(4)
1339 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT       5
1340 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK        BIT(5)
1341 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT       6
1342 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK        BIT(6)
1343 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT        7
1344 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK         BIT(7)
1345 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK BIT(0)
1346 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT 1
1347 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK BIT(1)
1348 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT 2
1349 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK BIT(2)
1350 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT        3
1351 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK         BIT(3)
1352 
1353 /* feature_rss_flow_hash_function */
1354 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK GENMASK(7, 0)
1355 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK GENMASK(7, 0)
1356 
1357 /* feature_rss_flow_hash_input */
1358 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT 1
1359 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK  BIT(1)
1360 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT 2
1361 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK  BIT(2)
1362 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT 1
1363 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK BIT(1)
1364 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT 2
1365 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK BIT(2)
1366 
1367 /* host_info */
1368 #define ENA_ADMIN_HOST_INFO_MAJOR_MASK                      GENMASK(7, 0)
1369 #define ENA_ADMIN_HOST_INFO_MINOR_SHIFT                     8
1370 #define ENA_ADMIN_HOST_INFO_MINOR_MASK                      GENMASK(15, 8)
1371 #define ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT                 16
1372 #define ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK                  GENMASK(23, 16)
1373 #define ENA_ADMIN_HOST_INFO_MODULE_TYPE_SHIFT               24
1374 #define ENA_ADMIN_HOST_INFO_MODULE_TYPE_MASK                GENMASK(31, 24)
1375 #define ENA_ADMIN_HOST_INFO_FUNCTION_MASK                   GENMASK(2, 0)
1376 #define ENA_ADMIN_HOST_INFO_DEVICE_SHIFT                    3
1377 #define ENA_ADMIN_HOST_INFO_DEVICE_MASK                     GENMASK(7, 3)
1378 #define ENA_ADMIN_HOST_INFO_BUS_SHIFT                       8
1379 #define ENA_ADMIN_HOST_INFO_BUS_MASK                        GENMASK(15, 8)
1380 #define ENA_ADMIN_HOST_INFO_RX_OFFSET_SHIFT                 1
1381 #define ENA_ADMIN_HOST_INFO_RX_OFFSET_MASK                  BIT(1)
1382 #define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_SHIFT      2
1383 #define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK       BIT(2)
1384 #define ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_SHIFT          3
1385 #define ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_MASK           BIT(3)
1386 #define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT 4
1387 #define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK BIT(4)
1388 #define ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_SHIFT             6
1389 #define ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_MASK              BIT(6)
1390 #define ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_SHIFT      7
1391 #define ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_MASK       BIT(7)
1392 #define ENA_ADMIN_HOST_INFO_PHC_SHIFT                       8
1393 #define ENA_ADMIN_HOST_INFO_PHC_MASK                        BIT(8)
1394 
1395 /* feature_rss_ind_table */
1396 #define ENA_ADMIN_FEATURE_RSS_IND_TABLE_ONE_ENTRY_UPDATE_MASK BIT(0)
1397 
1398 /* aenq_common_desc */
1399 #define ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK               BIT(0)
1400 
1401 /* aenq_link_change_desc */
1402 #define ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK    BIT(0)
1403 
1404 #if !defined(DEFS_LINUX_MAINLINE)
get_ena_admin_aq_common_desc_command_id(const struct ena_admin_aq_common_desc * p)1405 static inline uint16_t get_ena_admin_aq_common_desc_command_id(const struct ena_admin_aq_common_desc *p)
1406 {
1407 	return p->command_id & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;
1408 }
1409 
set_ena_admin_aq_common_desc_command_id(struct ena_admin_aq_common_desc * p,uint16_t val)1410 static inline void set_ena_admin_aq_common_desc_command_id(struct ena_admin_aq_common_desc *p, uint16_t val)
1411 {
1412 	p->command_id |= val & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;
1413 }
1414 
get_ena_admin_aq_common_desc_phase(const struct ena_admin_aq_common_desc * p)1415 static inline uint8_t get_ena_admin_aq_common_desc_phase(const struct ena_admin_aq_common_desc *p)
1416 {
1417 	return p->flags & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK;
1418 }
1419 
set_ena_admin_aq_common_desc_phase(struct ena_admin_aq_common_desc * p,uint8_t val)1420 static inline void set_ena_admin_aq_common_desc_phase(struct ena_admin_aq_common_desc *p, uint8_t val)
1421 {
1422 	p->flags |= val & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK;
1423 }
1424 
get_ena_admin_aq_common_desc_ctrl_data(const struct ena_admin_aq_common_desc * p)1425 static inline uint8_t get_ena_admin_aq_common_desc_ctrl_data(const struct ena_admin_aq_common_desc *p)
1426 {
1427 	return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK) >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT;
1428 }
1429 
set_ena_admin_aq_common_desc_ctrl_data(struct ena_admin_aq_common_desc * p,uint8_t val)1430 static inline void set_ena_admin_aq_common_desc_ctrl_data(struct ena_admin_aq_common_desc *p, uint8_t val)
1431 {
1432 	p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT) & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK;
1433 }
1434 
get_ena_admin_aq_common_desc_ctrl_data_indirect(const struct ena_admin_aq_common_desc * p)1435 static inline uint8_t get_ena_admin_aq_common_desc_ctrl_data_indirect(const struct ena_admin_aq_common_desc *p)
1436 {
1437 	return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK) >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT;
1438 }
1439 
set_ena_admin_aq_common_desc_ctrl_data_indirect(struct ena_admin_aq_common_desc * p,uint8_t val)1440 static inline void set_ena_admin_aq_common_desc_ctrl_data_indirect(struct ena_admin_aq_common_desc *p, uint8_t val)
1441 {
1442 	p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT) & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK;
1443 }
1444 
get_ena_admin_sq_sq_direction(const struct ena_admin_sq * p)1445 static inline uint8_t get_ena_admin_sq_sq_direction(const struct ena_admin_sq *p)
1446 {
1447 	return (p->sq_identity & ENA_ADMIN_SQ_SQ_DIRECTION_MASK) >> ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT;
1448 }
1449 
set_ena_admin_sq_sq_direction(struct ena_admin_sq * p,uint8_t val)1450 static inline void set_ena_admin_sq_sq_direction(struct ena_admin_sq *p, uint8_t val)
1451 {
1452 	p->sq_identity |= (val << ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT) & ENA_ADMIN_SQ_SQ_DIRECTION_MASK;
1453 }
1454 
get_ena_admin_acq_common_desc_command_id(const struct ena_admin_acq_common_desc * p)1455 static inline uint16_t get_ena_admin_acq_common_desc_command_id(const struct ena_admin_acq_common_desc *p)
1456 {
1457 	return p->command & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK;
1458 }
1459 
set_ena_admin_acq_common_desc_command_id(struct ena_admin_acq_common_desc * p,uint16_t val)1460 static inline void set_ena_admin_acq_common_desc_command_id(struct ena_admin_acq_common_desc *p, uint16_t val)
1461 {
1462 	p->command |= val & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK;
1463 }
1464 
get_ena_admin_acq_common_desc_phase(const struct ena_admin_acq_common_desc * p)1465 static inline uint8_t get_ena_admin_acq_common_desc_phase(const struct ena_admin_acq_common_desc *p)
1466 {
1467 	return p->flags & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK;
1468 }
1469 
set_ena_admin_acq_common_desc_phase(struct ena_admin_acq_common_desc * p,uint8_t val)1470 static inline void set_ena_admin_acq_common_desc_phase(struct ena_admin_acq_common_desc *p, uint8_t val)
1471 {
1472 	p->flags |= val & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK;
1473 }
1474 
get_ena_admin_aq_create_sq_cmd_sq_direction(const struct ena_admin_aq_create_sq_cmd * p)1475 static inline uint8_t get_ena_admin_aq_create_sq_cmd_sq_direction(const struct ena_admin_aq_create_sq_cmd *p)
1476 {
1477 	return (p->sq_identity & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK) >> ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT;
1478 }
1479 
set_ena_admin_aq_create_sq_cmd_sq_direction(struct ena_admin_aq_create_sq_cmd * p,uint8_t val)1480 static inline void set_ena_admin_aq_create_sq_cmd_sq_direction(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)
1481 {
1482 	p->sq_identity |= (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT) & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK;
1483 }
1484 
get_ena_admin_aq_create_sq_cmd_placement_policy(const struct ena_admin_aq_create_sq_cmd * p)1485 static inline uint8_t get_ena_admin_aq_create_sq_cmd_placement_policy(const struct ena_admin_aq_create_sq_cmd *p)
1486 {
1487 	return p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK;
1488 }
1489 
set_ena_admin_aq_create_sq_cmd_placement_policy(struct ena_admin_aq_create_sq_cmd * p,uint8_t val)1490 static inline void set_ena_admin_aq_create_sq_cmd_placement_policy(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)
1491 {
1492 	p->sq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK;
1493 }
1494 
get_ena_admin_aq_create_sq_cmd_completion_policy(const struct ena_admin_aq_create_sq_cmd * p)1495 static inline uint8_t get_ena_admin_aq_create_sq_cmd_completion_policy(const struct ena_admin_aq_create_sq_cmd *p)
1496 {
1497 	return (p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK) >> ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT;
1498 }
1499 
set_ena_admin_aq_create_sq_cmd_completion_policy(struct ena_admin_aq_create_sq_cmd * p,uint8_t val)1500 static inline void set_ena_admin_aq_create_sq_cmd_completion_policy(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)
1501 {
1502 	p->sq_caps_2 |= (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT) & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK;
1503 }
1504 
get_ena_admin_aq_create_sq_cmd_is_physically_contiguous(const struct ena_admin_aq_create_sq_cmd * p)1505 static inline uint8_t get_ena_admin_aq_create_sq_cmd_is_physically_contiguous(const struct ena_admin_aq_create_sq_cmd *p)
1506 {
1507 	return p->sq_caps_3 & ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK;
1508 }
1509 
set_ena_admin_aq_create_sq_cmd_is_physically_contiguous(struct ena_admin_aq_create_sq_cmd * p,uint8_t val)1510 static inline void set_ena_admin_aq_create_sq_cmd_is_physically_contiguous(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)
1511 {
1512 	p->sq_caps_3 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK;
1513 }
1514 
get_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(const struct ena_admin_aq_create_cq_cmd * p)1515 static inline uint8_t get_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(const struct ena_admin_aq_create_cq_cmd *p)
1516 {
1517 	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;
1518 }
1519 
set_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(struct ena_admin_aq_create_cq_cmd * p,uint8_t val)1520 static inline void set_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(struct ena_admin_aq_create_cq_cmd *p, uint8_t val)
1521 {
1522 	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;
1523 }
1524 
get_ena_admin_aq_create_cq_cmd_cq_entry_size_words(const struct ena_admin_aq_create_cq_cmd * p)1525 static inline uint8_t get_ena_admin_aq_create_cq_cmd_cq_entry_size_words(const struct ena_admin_aq_create_cq_cmd *p)
1526 {
1527 	return p->cq_caps_2 & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK;
1528 }
1529 
set_ena_admin_aq_create_cq_cmd_cq_entry_size_words(struct ena_admin_aq_create_cq_cmd * p,uint8_t val)1530 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)
1531 {
1532 	p->cq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK;
1533 }
1534 
get_ena_admin_get_set_feature_common_desc_select(const struct ena_admin_get_set_feature_common_desc * p)1535 static inline uint8_t get_ena_admin_get_set_feature_common_desc_select(const struct ena_admin_get_set_feature_common_desc *p)
1536 {
1537 	return p->flags & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK;
1538 }
1539 
set_ena_admin_get_set_feature_common_desc_select(struct ena_admin_get_set_feature_common_desc * p,uint8_t val)1540 static inline void set_ena_admin_get_set_feature_common_desc_select(struct ena_admin_get_set_feature_common_desc *p, uint8_t val)
1541 {
1542 	p->flags |= val & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK;
1543 }
1544 
get_ena_admin_get_feature_link_desc_autoneg(const struct ena_admin_get_feature_link_desc * p)1545 static inline uint32_t get_ena_admin_get_feature_link_desc_autoneg(const struct ena_admin_get_feature_link_desc *p)
1546 {
1547 	return p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK;
1548 }
1549 
set_ena_admin_get_feature_link_desc_autoneg(struct ena_admin_get_feature_link_desc * p,uint32_t val)1550 static inline void set_ena_admin_get_feature_link_desc_autoneg(struct ena_admin_get_feature_link_desc *p, uint32_t val)
1551 {
1552 	p->flags |= val & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK;
1553 }
1554 
get_ena_admin_get_feature_link_desc_duplex(const struct ena_admin_get_feature_link_desc * p)1555 static inline uint32_t get_ena_admin_get_feature_link_desc_duplex(const struct ena_admin_get_feature_link_desc *p)
1556 {
1557 	return (p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK) >> ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT;
1558 }
1559 
set_ena_admin_get_feature_link_desc_duplex(struct ena_admin_get_feature_link_desc * p,uint32_t val)1560 static inline void set_ena_admin_get_feature_link_desc_duplex(struct ena_admin_get_feature_link_desc *p, uint32_t val)
1561 {
1562 	p->flags |= (val << ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT) & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK;
1563 }
1564 
get_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc * p)1565 static inline uint32_t get_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc *p)
1566 {
1567 	return p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK;
1568 }
1569 
set_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(struct ena_admin_feature_offload_desc * p,uint32_t val)1570 static inline void set_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)
1571 {
1572 	p->tx |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK;
1573 }
1574 
get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(const struct ena_admin_feature_offload_desc * p)1575 static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(const struct ena_admin_feature_offload_desc *p)
1576 {
1577 	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;
1578 }
1579 
set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(struct ena_admin_feature_offload_desc * p,uint32_t val)1580 static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(struct ena_admin_feature_offload_desc *p, uint32_t val)
1581 {
1582 	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;
1583 }
1584 
get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(const struct ena_admin_feature_offload_desc * p)1585 static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(const struct ena_admin_feature_offload_desc *p)
1586 {
1587 	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;
1588 }
1589 
set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(struct ena_admin_feature_offload_desc * p,uint32_t val)1590 static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(struct ena_admin_feature_offload_desc *p, uint32_t val)
1591 {
1592 	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;
1593 }
1594 
get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(const struct ena_admin_feature_offload_desc * p)1595 static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(const struct ena_admin_feature_offload_desc *p)
1596 {
1597 	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;
1598 }
1599 
set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(struct ena_admin_feature_offload_desc * p,uint32_t val)1600 static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(struct ena_admin_feature_offload_desc *p, uint32_t val)
1601 {
1602 	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;
1603 }
1604 
get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(const struct ena_admin_feature_offload_desc * p)1605 static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(const struct ena_admin_feature_offload_desc *p)
1606 {
1607 	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;
1608 }
1609 
set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(struct ena_admin_feature_offload_desc * p,uint32_t val)1610 static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(struct ena_admin_feature_offload_desc *p, uint32_t val)
1611 {
1612 	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;
1613 }
1614 
get_ena_admin_feature_offload_desc_tso_ipv4(const struct ena_admin_feature_offload_desc * p)1615 static inline uint32_t get_ena_admin_feature_offload_desc_tso_ipv4(const struct ena_admin_feature_offload_desc *p)
1616 {
1617 	return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT;
1618 }
1619 
set_ena_admin_feature_offload_desc_tso_ipv4(struct ena_admin_feature_offload_desc * p,uint32_t val)1620 static inline void set_ena_admin_feature_offload_desc_tso_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)
1621 {
1622 	p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK;
1623 }
1624 
get_ena_admin_feature_offload_desc_tso_ipv6(const struct ena_admin_feature_offload_desc * p)1625 static inline uint32_t get_ena_admin_feature_offload_desc_tso_ipv6(const struct ena_admin_feature_offload_desc *p)
1626 {
1627 	return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT;
1628 }
1629 
set_ena_admin_feature_offload_desc_tso_ipv6(struct ena_admin_feature_offload_desc * p,uint32_t val)1630 static inline void set_ena_admin_feature_offload_desc_tso_ipv6(struct ena_admin_feature_offload_desc *p, uint32_t val)
1631 {
1632 	p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK;
1633 }
1634 
get_ena_admin_feature_offload_desc_tso_ecn(const struct ena_admin_feature_offload_desc * p)1635 static inline uint32_t get_ena_admin_feature_offload_desc_tso_ecn(const struct ena_admin_feature_offload_desc *p)
1636 {
1637 	return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT;
1638 }
1639 
set_ena_admin_feature_offload_desc_tso_ecn(struct ena_admin_feature_offload_desc * p,uint32_t val)1640 static inline void set_ena_admin_feature_offload_desc_tso_ecn(struct ena_admin_feature_offload_desc *p, uint32_t val)
1641 {
1642 	p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK;
1643 }
1644 
get_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc * p)1645 static inline uint32_t get_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc *p)
1646 {
1647 	return p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK;
1648 }
1649 
set_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(struct ena_admin_feature_offload_desc * p,uint32_t val)1650 static inline void set_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)
1651 {
1652 	p->rx_supported |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK;
1653 }
1654 
get_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(const struct ena_admin_feature_offload_desc * p)1655 static inline uint32_t get_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(const struct ena_admin_feature_offload_desc *p)
1656 {
1657 	return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT;
1658 }
1659 
set_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(struct ena_admin_feature_offload_desc * p,uint32_t val)1660 static inline void set_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(struct ena_admin_feature_offload_desc *p, uint32_t val)
1661 {
1662 	p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK;
1663 }
1664 
get_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(const struct ena_admin_feature_offload_desc * p)1665 static inline uint32_t get_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(const struct ena_admin_feature_offload_desc *p)
1666 {
1667 	return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT;
1668 }
1669 
set_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(struct ena_admin_feature_offload_desc * p,uint32_t val)1670 static inline void set_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(struct ena_admin_feature_offload_desc *p, uint32_t val)
1671 {
1672 	p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK;
1673 }
1674 
get_ena_admin_feature_offload_desc_RX_hash(const struct ena_admin_feature_offload_desc * p)1675 static inline uint32_t get_ena_admin_feature_offload_desc_RX_hash(const struct ena_admin_feature_offload_desc *p)
1676 {
1677 	return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT;
1678 }
1679 
set_ena_admin_feature_offload_desc_RX_hash(struct ena_admin_feature_offload_desc * p,uint32_t val)1680 static inline void set_ena_admin_feature_offload_desc_RX_hash(struct ena_admin_feature_offload_desc *p, uint32_t val)
1681 {
1682 	p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK;
1683 }
1684 
get_ena_admin_feature_rss_flow_hash_function_funcs(const struct ena_admin_feature_rss_flow_hash_function * p)1685 static inline uint32_t get_ena_admin_feature_rss_flow_hash_function_funcs(const struct ena_admin_feature_rss_flow_hash_function *p)
1686 {
1687 	return p->supported_func & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK;
1688 }
1689 
set_ena_admin_feature_rss_flow_hash_function_funcs(struct ena_admin_feature_rss_flow_hash_function * p,uint32_t val)1690 static inline void set_ena_admin_feature_rss_flow_hash_function_funcs(struct ena_admin_feature_rss_flow_hash_function *p, uint32_t val)
1691 {
1692 	p->supported_func |= val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK;
1693 }
1694 
get_ena_admin_feature_rss_flow_hash_function_selected_func(const struct ena_admin_feature_rss_flow_hash_function * p)1695 static inline uint32_t get_ena_admin_feature_rss_flow_hash_function_selected_func(const struct ena_admin_feature_rss_flow_hash_function *p)
1696 {
1697 	return p->selected_func & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK;
1698 }
1699 
set_ena_admin_feature_rss_flow_hash_function_selected_func(struct ena_admin_feature_rss_flow_hash_function * p,uint32_t val)1700 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)
1701 {
1702 	p->selected_func |= val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK;
1703 }
1704 
get_ena_admin_feature_rss_flow_hash_input_L3_sort(const struct ena_admin_feature_rss_flow_hash_input * p)1705 static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_L3_sort(const struct ena_admin_feature_rss_flow_hash_input *p)
1706 {
1707 	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;
1708 }
1709 
set_ena_admin_feature_rss_flow_hash_input_L3_sort(struct ena_admin_feature_rss_flow_hash_input * p,uint16_t val)1710 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)
1711 {
1712 	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;
1713 }
1714 
get_ena_admin_feature_rss_flow_hash_input_L4_sort(const struct ena_admin_feature_rss_flow_hash_input * p)1715 static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_L4_sort(const struct ena_admin_feature_rss_flow_hash_input *p)
1716 {
1717 	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;
1718 }
1719 
set_ena_admin_feature_rss_flow_hash_input_L4_sort(struct ena_admin_feature_rss_flow_hash_input * p,uint16_t val)1720 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)
1721 {
1722 	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;
1723 }
1724 
get_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(const struct ena_admin_feature_rss_flow_hash_input * p)1725 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)
1726 {
1727 	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;
1728 }
1729 
set_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(struct ena_admin_feature_rss_flow_hash_input * p,uint16_t val)1730 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)
1731 {
1732 	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;
1733 }
1734 
get_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(const struct ena_admin_feature_rss_flow_hash_input * p)1735 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)
1736 {
1737 	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;
1738 }
1739 
set_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(struct ena_admin_feature_rss_flow_hash_input * p,uint16_t val)1740 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)
1741 {
1742 	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;
1743 }
1744 
get_ena_admin_host_info_major(const struct ena_admin_host_info * p)1745 static inline uint32_t get_ena_admin_host_info_major(const struct ena_admin_host_info *p)
1746 {
1747 	return p->driver_version & ENA_ADMIN_HOST_INFO_MAJOR_MASK;
1748 }
1749 
set_ena_admin_host_info_major(struct ena_admin_host_info * p,uint32_t val)1750 static inline void set_ena_admin_host_info_major(struct ena_admin_host_info *p, uint32_t val)
1751 {
1752 	p->driver_version |= val & ENA_ADMIN_HOST_INFO_MAJOR_MASK;
1753 }
1754 
get_ena_admin_host_info_minor(const struct ena_admin_host_info * p)1755 static inline uint32_t get_ena_admin_host_info_minor(const struct ena_admin_host_info *p)
1756 {
1757 	return (p->driver_version & ENA_ADMIN_HOST_INFO_MINOR_MASK) >> ENA_ADMIN_HOST_INFO_MINOR_SHIFT;
1758 }
1759 
set_ena_admin_host_info_minor(struct ena_admin_host_info * p,uint32_t val)1760 static inline void set_ena_admin_host_info_minor(struct ena_admin_host_info *p, uint32_t val)
1761 {
1762 	p->driver_version |= (val << ENA_ADMIN_HOST_INFO_MINOR_SHIFT) & ENA_ADMIN_HOST_INFO_MINOR_MASK;
1763 }
1764 
get_ena_admin_host_info_sub_minor(const struct ena_admin_host_info * p)1765 static inline uint32_t get_ena_admin_host_info_sub_minor(const struct ena_admin_host_info *p)
1766 {
1767 	return (p->driver_version & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK) >> ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT;
1768 }
1769 
set_ena_admin_host_info_sub_minor(struct ena_admin_host_info * p,uint32_t val)1770 static inline void set_ena_admin_host_info_sub_minor(struct ena_admin_host_info *p, uint32_t val)
1771 {
1772 	p->driver_version |= (val << ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT) & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK;
1773 }
1774 
get_ena_admin_host_info_module_type(const struct ena_admin_host_info * p)1775 static inline uint32_t get_ena_admin_host_info_module_type(const struct ena_admin_host_info *p)
1776 {
1777 	return (p->driver_version & ENA_ADMIN_HOST_INFO_MODULE_TYPE_MASK) >> ENA_ADMIN_HOST_INFO_MODULE_TYPE_SHIFT;
1778 }
1779 
set_ena_admin_host_info_module_type(struct ena_admin_host_info * p,uint32_t val)1780 static inline void set_ena_admin_host_info_module_type(struct ena_admin_host_info *p, uint32_t val)
1781 {
1782 	p->driver_version |= (val << ENA_ADMIN_HOST_INFO_MODULE_TYPE_SHIFT) & ENA_ADMIN_HOST_INFO_MODULE_TYPE_MASK;
1783 }
1784 
get_ena_admin_host_info_function(const struct ena_admin_host_info * p)1785 static inline uint16_t get_ena_admin_host_info_function(const struct ena_admin_host_info *p)
1786 {
1787 	return p->bdf & ENA_ADMIN_HOST_INFO_FUNCTION_MASK;
1788 }
1789 
set_ena_admin_host_info_function(struct ena_admin_host_info * p,uint16_t val)1790 static inline void set_ena_admin_host_info_function(struct ena_admin_host_info *p, uint16_t val)
1791 {
1792 	p->bdf |= val & ENA_ADMIN_HOST_INFO_FUNCTION_MASK;
1793 }
1794 
get_ena_admin_host_info_device(const struct ena_admin_host_info * p)1795 static inline uint16_t get_ena_admin_host_info_device(const struct ena_admin_host_info *p)
1796 {
1797 	return (p->bdf & ENA_ADMIN_HOST_INFO_DEVICE_MASK) >> ENA_ADMIN_HOST_INFO_DEVICE_SHIFT;
1798 }
1799 
set_ena_admin_host_info_device(struct ena_admin_host_info * p,uint16_t val)1800 static inline void set_ena_admin_host_info_device(struct ena_admin_host_info *p, uint16_t val)
1801 {
1802 	p->bdf |= (val << ENA_ADMIN_HOST_INFO_DEVICE_SHIFT) & ENA_ADMIN_HOST_INFO_DEVICE_MASK;
1803 }
1804 
get_ena_admin_host_info_bus(const struct ena_admin_host_info * p)1805 static inline uint16_t get_ena_admin_host_info_bus(const struct ena_admin_host_info *p)
1806 {
1807 	return (p->bdf & ENA_ADMIN_HOST_INFO_BUS_MASK) >> ENA_ADMIN_HOST_INFO_BUS_SHIFT;
1808 }
1809 
set_ena_admin_host_info_bus(struct ena_admin_host_info * p,uint16_t val)1810 static inline void set_ena_admin_host_info_bus(struct ena_admin_host_info *p, uint16_t val)
1811 {
1812 	p->bdf |= (val << ENA_ADMIN_HOST_INFO_BUS_SHIFT) & ENA_ADMIN_HOST_INFO_BUS_MASK;
1813 }
1814 
get_ena_admin_host_info_rx_offset(const struct ena_admin_host_info * p)1815 static inline uint32_t get_ena_admin_host_info_rx_offset(const struct ena_admin_host_info *p)
1816 {
1817 	return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RX_OFFSET_MASK) >> ENA_ADMIN_HOST_INFO_RX_OFFSET_SHIFT;
1818 }
1819 
set_ena_admin_host_info_rx_offset(struct ena_admin_host_info * p,uint32_t val)1820 static inline void set_ena_admin_host_info_rx_offset(struct ena_admin_host_info *p, uint32_t val)
1821 {
1822 	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RX_OFFSET_SHIFT) & ENA_ADMIN_HOST_INFO_RX_OFFSET_MASK;
1823 }
1824 
get_ena_admin_host_info_interrupt_moderation(const struct ena_admin_host_info * p)1825 static inline uint32_t get_ena_admin_host_info_interrupt_moderation(const struct ena_admin_host_info *p)
1826 {
1827 	return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK) >> ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_SHIFT;
1828 }
1829 
set_ena_admin_host_info_interrupt_moderation(struct ena_admin_host_info * p,uint32_t val)1830 static inline void set_ena_admin_host_info_interrupt_moderation(struct ena_admin_host_info *p, uint32_t val)
1831 {
1832 	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_SHIFT) & ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK;
1833 }
1834 
get_ena_admin_host_info_rx_buf_mirroring(const struct ena_admin_host_info * p)1835 static inline uint32_t get_ena_admin_host_info_rx_buf_mirroring(const struct ena_admin_host_info *p)
1836 {
1837 	return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_MASK) >> ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_SHIFT;
1838 }
1839 
set_ena_admin_host_info_rx_buf_mirroring(struct ena_admin_host_info * p,uint32_t val)1840 static inline void set_ena_admin_host_info_rx_buf_mirroring(struct ena_admin_host_info *p, uint32_t val)
1841 {
1842 	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_SHIFT) & ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_MASK;
1843 }
1844 
get_ena_admin_host_info_rss_configurable_function_key(const struct ena_admin_host_info * p)1845 static inline uint32_t get_ena_admin_host_info_rss_configurable_function_key(const struct ena_admin_host_info *p)
1846 {
1847 	return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK) >> ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT;
1848 }
1849 
set_ena_admin_host_info_rss_configurable_function_key(struct ena_admin_host_info * p,uint32_t val)1850 static inline void set_ena_admin_host_info_rss_configurable_function_key(struct ena_admin_host_info *p, uint32_t val)
1851 {
1852 	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT) & ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK;
1853 }
1854 
get_ena_admin_host_info_rx_page_reuse(const struct ena_admin_host_info * p)1855 static inline uint32_t get_ena_admin_host_info_rx_page_reuse(const struct ena_admin_host_info *p)
1856 {
1857 	return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_MASK) >>
1858 			ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_SHIFT;
1859 }
1860 
set_ena_admin_host_info_rx_page_reuse(struct ena_admin_host_info * p,uint32_t val)1861 static inline void set_ena_admin_host_info_rx_page_reuse(struct ena_admin_host_info *p,
1862 								    uint32_t val)
1863 {
1864 	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_SHIFT) &
1865 			ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_MASK;
1866 }
1867 
1868 static inline
get_ena_admin_host_info_tx_ipv6_csum_offload(const struct ena_admin_host_info * p)1869 uint32_t get_ena_admin_host_info_tx_ipv6_csum_offload(const struct ena_admin_host_info *p)
1870 {
1871 	return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_MASK) >>
1872 		ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_SHIFT;
1873 }
1874 
set_ena_admin_host_info_tx_ipv6_csum_offload(struct ena_admin_host_info * p,uint32_t val)1875 static inline void set_ena_admin_host_info_tx_ipv6_csum_offload(struct ena_admin_host_info *p,
1876 								 uint32_t val)
1877 {
1878 	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_SHIFT) &
1879 					 ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_MASK;
1880 }
1881 
get_ena_admin_feature_rss_ind_table_one_entry_update(const struct ena_admin_feature_rss_ind_table * p)1882 static inline uint8_t get_ena_admin_feature_rss_ind_table_one_entry_update(const struct ena_admin_feature_rss_ind_table *p)
1883 {
1884 	return p->flags & ENA_ADMIN_FEATURE_RSS_IND_TABLE_ONE_ENTRY_UPDATE_MASK;
1885 }
1886 
set_ena_admin_feature_rss_ind_table_one_entry_update(struct ena_admin_feature_rss_ind_table * p,uint8_t val)1887 static inline void set_ena_admin_feature_rss_ind_table_one_entry_update(struct ena_admin_feature_rss_ind_table *p, uint8_t val)
1888 {
1889 	p->flags |= val & ENA_ADMIN_FEATURE_RSS_IND_TABLE_ONE_ENTRY_UPDATE_MASK;
1890 }
1891 
get_ena_admin_host_info_phc(const struct ena_admin_host_info * p)1892 static inline uint32_t get_ena_admin_host_info_phc(const struct ena_admin_host_info *p)
1893 {
1894 	return (p->driver_supported_features &
1895 		ENA_ADMIN_HOST_INFO_PHC_MASK) >> ENA_ADMIN_HOST_INFO_PHC_SHIFT;
1896 }
1897 
set_ena_admin_host_info_phc(struct ena_admin_host_info * p,uint32_t val)1898 static inline void set_ena_admin_host_info_phc(struct ena_admin_host_info *p, uint32_t val)
1899 {
1900 	p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_PHC_SHIFT) &
1901 					 ENA_ADMIN_HOST_INFO_PHC_MASK;
1902 }
1903 
get_ena_admin_aenq_common_desc_phase(const struct ena_admin_aenq_common_desc * p)1904 static inline uint8_t get_ena_admin_aenq_common_desc_phase(const struct ena_admin_aenq_common_desc *p)
1905 {
1906 	return p->flags & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK;
1907 }
1908 
set_ena_admin_aenq_common_desc_phase(struct ena_admin_aenq_common_desc * p,uint8_t val)1909 static inline void set_ena_admin_aenq_common_desc_phase(struct ena_admin_aenq_common_desc *p, uint8_t val)
1910 {
1911 	p->flags |= val & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK;
1912 }
1913 
get_ena_admin_aenq_link_change_desc_link_status(const struct ena_admin_aenq_link_change_desc * p)1914 static inline uint32_t get_ena_admin_aenq_link_change_desc_link_status(const struct ena_admin_aenq_link_change_desc *p)
1915 {
1916 	return p->flags & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK;
1917 }
1918 
set_ena_admin_aenq_link_change_desc_link_status(struct ena_admin_aenq_link_change_desc * p,uint32_t val)1919 static inline void set_ena_admin_aenq_link_change_desc_link_status(struct ena_admin_aenq_link_change_desc *p, uint32_t val)
1920 {
1921 	p->flags |= val & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK;
1922 }
1923 
1924 #endif /* !defined(DEFS_LINUX_MAINLINE) */
1925 #endif /* _ENA_ADMIN_H_ */
1926