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