4 * Copyright (c) 2015-2016 Amazon.com, Inc. or its affiliates.
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions
11 * * Redistributions of source code must retain the above copyright
12 * notice, this list of conditions and the following disclaimer.
13 * * Redistributions in binary form must reproduce the above copyright
14 * notice, this list of conditions and the following disclaimer in
15 * the documentation and/or other materials provided with the
17 * * Neither the name of copyright holder nor the names of its
18 * contributors may be used to endorse or promote products derived
19 * from this software without specific prior written permission.
21 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
22 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
23 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
24 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
25 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
26 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
27 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
28 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
29 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
30 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
31 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
37 /* admin commands opcodes */
38 enum ena_admin_aq_opcode {
39 /* create submission queue */
40 ENA_ADMIN_CREATE_SQ = 1,
42 /* destroy submission queue */
43 ENA_ADMIN_DESTROY_SQ = 2,
45 /* create completion queue */
46 ENA_ADMIN_CREATE_CQ = 3,
48 /* destroy completion queue */
49 ENA_ADMIN_DESTROY_CQ = 4,
51 /* get capabilities of particular feature */
52 ENA_ADMIN_GET_FEATURE = 8,
54 /* get capabilities of particular feature */
55 ENA_ADMIN_SET_FEATURE = 9,
58 ENA_ADMIN_GET_STATS = 11,
61 /* privileged amdin commands opcodes */
62 enum ena_admin_aq_opcode_privileged {
63 /* get device capabilities */
64 ENA_ADMIN_IDENTIFY = 48,
66 /* configure device */
67 ENA_ADMIN_CONFIGURE_PF_DEVICE = 49,
69 /* setup SRIOV PCIe Virtual Function capabilities */
70 ENA_ADMIN_SETUP_VF = 50,
72 /* load firmware to the controller */
73 ENA_ADMIN_LOAD_FIRMWARE = 52,
75 /* commit previously loaded firmare */
76 ENA_ADMIN_COMMIT_FIRMWARE = 53,
78 /* quiesce virtual function */
79 ENA_ADMIN_QUIESCE_VF = 54,
81 /* load virtual function from migrates context */
82 ENA_ADMIN_MIGRATE_VF = 55,
85 /* admin command completion status codes */
86 enum ena_admin_aq_completion_status {
87 /* Request completed successfully */
88 ENA_ADMIN_SUCCESS = 0,
90 /* no resources to satisfy request */
91 ENA_ADMIN_RESOURCE_ALLOCATION_FAILURE = 1,
93 /* Bad opcode in request descriptor */
94 ENA_ADMIN_BAD_OPCODE = 2,
96 /* Unsupported opcode in request descriptor */
97 ENA_ADMIN_UNSUPPORTED_OPCODE = 3,
99 /* Wrong request format */
100 ENA_ADMIN_MALFORMED_REQUEST = 4,
102 /* One of parameters is not valid. Provided in ACQ entry
105 ENA_ADMIN_ILLEGAL_PARAMETER = 5,
107 /* unexpected error */
108 ENA_ADMIN_UNKNOWN_ERROR = 6,
111 /* get/set feature subcommands opcodes */
112 enum ena_admin_aq_feature_id {
113 /* list of all supported attributes/capabilities in the ENA */
114 ENA_ADMIN_DEVICE_ATTRIBUTES = 1,
116 /* max number of supported queues per for every queues type */
117 ENA_ADMIN_MAX_QUEUES_NUM = 2,
119 /* low latency queues capabilities (max entry size, depth) */
120 ENA_ADMIN_LLQ_CONFIG = 3,
122 /* power management capabilities */
123 ENA_ADMIN_POWER_MANAGEMENT_CONFIG = 4,
125 /* MAC address filters support, multicast, broadcast, and
128 ENA_ADMIN_MAC_FILTERS_CONFIG = 5,
130 /* VLAN membership, frame format, etc. */
131 ENA_ADMIN_VLAN_CONFIG = 6,
133 /* Available size for various on-chip memory resources, accessible
136 ENA_ADMIN_ON_DEVICE_MEMORY_CONFIG = 7,
138 /* Receive Side Scaling (RSS) function */
139 ENA_ADMIN_RSS_HASH_FUNCTION = 10,
141 /* stateless TCP/UDP/IP offload capabilities. */
142 ENA_ADMIN_STATELESS_OFFLOAD_CONFIG = 11,
144 /* Multiple tuples flow table configuration */
145 ENA_ADMIN_RSS_REDIRECTION_TABLE_CONFIG = 12,
147 /* max MTU, current MTU */
150 /* Receive Side Scaling (RSS) hash input */
151 ENA_ADMIN_RSS_HASH_INPUT = 18,
153 /* overlay tunnels configuration */
154 ENA_ADMIN_TUNNEL_CONFIG = 19,
156 /* interrupt moderation parameters */
157 ENA_ADMIN_INTERRUPT_MODERATION = 20,
159 /* 1588v2 and Timing configuration */
160 ENA_ADMIN_1588_CONFIG = 21,
162 /* Packet Header format templates configuration for input and
165 ENA_ADMIN_PKT_HEADER_TEMPLATES_CONFIG = 23,
167 /* AENQ configuration */
168 ENA_ADMIN_AENQ_CONFIG = 26,
170 /* Link configuration */
171 ENA_ADMIN_LINK_CONFIG = 27,
173 /* Host attributes configuration */
174 ENA_ADMIN_HOST_ATTR_CONFIG = 28,
176 /* Number of valid opcodes */
177 ENA_ADMIN_FEATURES_OPCODE_NUM = 32,
180 /* descriptors and headers placement */
181 enum ena_admin_placement_policy_type {
182 /* descriptors and headers are in OS memory */
183 ENA_ADMIN_PLACEMENT_POLICY_HOST = 1,
185 /* descriptors and headers in device memory (a.k.a Low Latency
188 ENA_ADMIN_PLACEMENT_POLICY_DEV = 3,
192 enum ena_admin_link_types {
193 ENA_ADMIN_LINK_SPEED_1G = 0x1,
195 ENA_ADMIN_LINK_SPEED_2_HALF_G = 0x2,
197 ENA_ADMIN_LINK_SPEED_5G = 0x4,
199 ENA_ADMIN_LINK_SPEED_10G = 0x8,
201 ENA_ADMIN_LINK_SPEED_25G = 0x10,
203 ENA_ADMIN_LINK_SPEED_40G = 0x20,
205 ENA_ADMIN_LINK_SPEED_50G = 0x40,
207 ENA_ADMIN_LINK_SPEED_100G = 0x80,
209 ENA_ADMIN_LINK_SPEED_200G = 0x100,
211 ENA_ADMIN_LINK_SPEED_400G = 0x200,
214 /* completion queue update policy */
215 enum ena_admin_completion_policy_type {
216 /* cqe for each sq descriptor */
217 ENA_ADMIN_COMPLETION_POLICY_DESC = 0,
219 /* cqe upon request in sq descriptor */
220 ENA_ADMIN_COMPLETION_POLICY_DESC_ON_DEMAND = 1,
222 /* current queue head pointer is updated in OS memory upon sq
225 ENA_ADMIN_COMPLETION_POLICY_HEAD_ON_DEMAND = 2,
227 /* current queue head pointer is updated in OS memory for each sq
230 ENA_ADMIN_COMPLETION_POLICY_HEAD = 3,
233 /* type of get statistics command */
234 enum ena_admin_get_stats_type {
235 /* Basic statistics */
236 ENA_ADMIN_GET_STATS_TYPE_BASIC = 0,
238 /* Extended statistics */
239 ENA_ADMIN_GET_STATS_TYPE_EXTENDED = 1,
242 /* scope of get statistics command */
243 enum ena_admin_get_stats_scope {
244 ENA_ADMIN_SPECIFIC_QUEUE = 0,
246 ENA_ADMIN_ETH_TRAFFIC = 1,
249 /* ENA Admin Queue (AQ) common descriptor */
250 struct ena_admin_aq_common_desc {
252 /* command identificator to associate it with the completion
258 /* as appears in ena_aq_opcode */
262 * 1 : ctrl_data - control buffer address valid
263 * 2 : ctrl_data_indirect - control buffer address
264 * points to list of pages with addresses of control
271 /* used in ena_aq_entry. Can point directly to control data, or to a page
272 * list chunk. Used also at the end of indirect mode page list chunks, for
275 struct ena_admin_ctrl_buff_info {
276 /* word 0 : indicates length of the buffer pointed by
277 * control_buffer_address.
281 /* words 1:2 : points to control buffer (direct or indirect) */
282 struct ena_common_mem_addr address;
285 /* submission queue full identification */
286 struct ena_admin_sq {
292 * 7:5 : sq_direction - 0x1 - Tx; 0x2 - Rx
299 /* AQ entry format */
300 struct ena_admin_aq_entry {
302 struct ena_admin_aq_common_desc aq_common_descriptor;
306 /* command specific inline data */
307 uint32_t inline_data_w1[3];
309 /* words 1:3 : points to control buffer (direct or
310 * indirect, chained if needed)
312 struct ena_admin_ctrl_buff_info control_buffer;
315 /* command specific inline data */
316 uint32_t inline_data_w4[12];
319 /* ENA Admin Completion Queue (ACQ) common descriptor */
320 struct ena_admin_acq_common_desc {
322 /* command identifier to associate it with the aq descriptor
328 /* status of request execution */
337 /* provides additional info */
338 uint16_t extended_status;
340 /* submission queue head index, serves as a hint what AQ entries can
343 uint16_t sq_head_indx;
346 /* ACQ entry format */
347 struct ena_admin_acq_entry {
349 struct ena_admin_acq_common_desc acq_common_descriptor;
351 /* response type specific data */
352 uint32_t response_specific_data[14];
355 /* ENA AQ Create Submission Queue command. Placed in control buffer pointed
358 struct ena_admin_aq_create_sq_cmd {
360 struct ena_admin_aq_common_desc aq_common_descriptor;
363 /* 4:0 : reserved0_w1
364 * 7:5 : sq_direction - 0x1 - Tx, 0x2 - Rx
368 uint8_t reserved8_w1;
370 /* 3:0 : placement_policy - Describing where the SQ
371 * descriptor ring and the SQ packet headers reside:
372 * 0x1 - descriptors and headers are in OS memory,
373 * 0x3 - descriptors and headers in device memory
374 * (a.k.a Low Latency Queue)
375 * 6:4 : completion_policy - Describing what policy
376 * to use for generation completion entry (cqe) in
377 * the CQ associated with this SQ: 0x0 - cqe for each
378 * sq descriptor, 0x1 - cqe upon request in sq
379 * descriptor, 0x2 - current queue head pointer is
380 * updated in OS memory upon sq descriptor request
381 * 0x3 - current queue head pointer is updated in OS
382 * memory for each sq descriptor
387 /* 0 : is_physically_contiguous - Described if the
388 * queue ring memory is allocated in physical
389 * contiguous pages or split.
390 * 7:1 : reserved17_w1
395 /* associated completion queue id. This CQ must be created prior to
400 /* submission queue depth in entries */
403 /* words 3:4 : SQ physical base address in OS memory. This field
404 * should not be used for Low Latency queues. Has to be page
407 struct ena_common_mem_addr sq_ba;
409 /* words 5:6 : specifies queue head writeback location in OS
410 * memory. Valid if completion_policy is set to
411 * completion_policy_head_on_demand or completion_policy_head. Has
412 * to be cache aligned
414 struct ena_common_mem_addr sq_head_writeback;
416 /* word 7 : reserved word */
417 uint32_t reserved0_w7;
419 /* word 8 : reserved word */
420 uint32_t reserved0_w8;
423 /* submission queue direction */
424 enum ena_admin_sq_direction {
425 ENA_ADMIN_SQ_DIRECTION_TX = 1,
427 ENA_ADMIN_SQ_DIRECTION_RX = 2,
430 /* ENA Response for Create SQ Command. Appears in ACQ entry as
431 * response_specific_data
433 struct ena_admin_acq_create_sq_resp_desc {
434 /* words 0:1 : Common Admin Queue completion descriptor */
435 struct ena_admin_acq_common_desc acq_common_desc;
443 /* word 3 : queue doorbell address as and offset to PCIe MMIO REG
446 uint32_t sq_doorbell_offset;
448 /* word 4 : low latency queue ring base address as an offset to
449 * PCIe MMIO LLQ_MEM BAR
451 uint32_t llq_descriptors_offset;
453 /* word 5 : low latency queue headers' memory as an offset to PCIe
456 uint32_t llq_headers_offset;
459 /* ENA AQ Destroy Submission Queue command. Placed in control buffer
460 * pointed by AQ entry
462 struct ena_admin_aq_destroy_sq_cmd {
464 struct ena_admin_aq_common_desc aq_common_descriptor;
467 struct ena_admin_sq sq;
470 /* ENA Response for Destroy SQ Command. Appears in ACQ entry as
471 * response_specific_data
473 struct ena_admin_acq_destroy_sq_resp_desc {
474 /* words 0:1 : Common Admin Queue completion descriptor */
475 struct ena_admin_acq_common_desc acq_common_desc;
478 /* ENA AQ Create Completion Queue command */
479 struct ena_admin_aq_create_cq_cmd {
481 struct ena_admin_aq_common_desc aq_common_descriptor;
485 * 5 : interrupt_mode_enabled - if set, cq operates
486 * in interrupt mode, otherwise - polling
491 /* 4:0 : cq_entry_size_words - size of CQ entry in
492 * 32-bit words, valid values: 4, 8.
497 /* completion queue depth in # of entries. must be power of 2 */
500 /* word 2 : msix vector assigned to this cq */
501 uint32_t msix_vector;
503 /* words 3:4 : cq physical base address in OS memory. CQ must be
504 * physically contiguous
506 struct ena_common_mem_addr cq_ba;
509 /* ENA Response for Create CQ Command. Appears in ACQ entry as response
512 struct ena_admin_acq_create_cq_resp_desc {
513 /* words 0:1 : Common Admin Queue completion descriptor */
514 struct ena_admin_acq_common_desc acq_common_desc;
520 /* actual cq depth in # of entries */
521 uint16_t cq_actual_depth;
523 /* word 3 : doorbell address as an offset to PCIe MMIO REG BAR */
524 uint32_t cq_doorbell_offset;
526 /* word 4 : completion head doorbell address as an offset to PCIe
529 uint32_t cq_head_db_offset;
531 /* word 5 : interrupt unmask register address as an offset into
534 uint32_t cq_interrupt_unmask_register;
537 /* ENA AQ Destroy Completion Queue command. Placed in control buffer
538 * pointed by AQ entry
540 struct ena_admin_aq_destroy_cq_cmd {
542 struct ena_admin_aq_common_desc aq_common_descriptor;
545 /* associated queue id. */
551 /* ENA Response for Destroy CQ Command. Appears in ACQ entry as
552 * response_specific_data
554 struct ena_admin_acq_destroy_cq_resp_desc {
555 /* words 0:1 : Common Admin Queue completion descriptor */
556 struct ena_admin_acq_common_desc acq_common_desc;
559 /* ENA AQ Get Statistics command. Extended statistics are placed in control
560 * buffer pointed by AQ entry
562 struct ena_admin_aq_get_stats_cmd {
564 struct ena_admin_aq_common_desc aq_common_descriptor;
568 /* command specific inline data */
569 uint32_t inline_data_w1[3];
571 /* words 1:3 : points to control buffer (direct or
572 * indirect, chained if needed)
574 struct ena_admin_ctrl_buff_info control_buffer;
578 /* stats type as defined in enum ena_admin_get_stats_type */
581 /* stats scope defined in enum ena_admin_get_stats_scope */
587 /* queue id. used when scope is specific_queue */
590 /* device id, value 0xFFFF means mine. only privileged device can get
591 * stats of other device
596 /* Basic Statistics Command. */
597 struct ena_admin_basic_stats {
599 uint32_t tx_bytes_low;
602 uint32_t tx_bytes_high;
605 uint32_t tx_pkts_low;
608 uint32_t tx_pkts_high;
611 uint32_t rx_bytes_low;
614 uint32_t rx_bytes_high;
617 uint32_t rx_pkts_low;
620 uint32_t rx_pkts_high;
623 uint32_t rx_drops_low;
626 uint32_t rx_drops_high;
629 /* ENA Response for Get Statistics Command. Appears in ACQ entry as
630 * response_specific_data
632 struct ena_admin_acq_get_stats_resp {
633 /* words 0:1 : Common Admin Queue completion descriptor */
634 struct ena_admin_acq_common_desc acq_common_desc;
637 struct ena_admin_basic_stats basic_stats;
640 /* ENA Get/Set Feature common descriptor. Appears as inline word in
643 struct ena_admin_get_set_feature_common_desc {
645 /* 1:0 : select - 0x1 - current value; 0x3 - default
651 /* as appears in ena_feature_id */
658 /* ENA Device Attributes Feature descriptor. */
659 struct ena_admin_device_attr_feature_desc {
660 /* word 0 : implementation id */
663 /* word 1 : device version */
664 uint32_t device_version;
666 /* word 2 : bit map of which bits are supported value of 1
667 * indicated that this feature is supported and can perform SET/GET
670 uint32_t supported_features;
675 /* word 4 : Indicates how many bits are used physical address
678 uint32_t phys_addr_width;
680 /* word 5 : Indicates how many bits are used virtual address access. */
681 uint32_t virt_addr_width;
683 /* unicast MAC address (in Network byte order) */
686 uint8_t reserved7[2];
688 /* word 8 : Max supported MTU value */
692 /* ENA Max Queues Feature descriptor. */
693 struct ena_admin_queue_feature_desc {
694 /* word 0 : Max number of submission queues (including LLQs) */
697 /* word 1 : Max submission queue depth */
698 uint32_t max_sq_depth;
700 /* word 2 : Max number of completion queues */
703 /* word 3 : Max completion queue depth */
704 uint32_t max_cq_depth;
706 /* word 4 : Max number of LLQ submission queues */
707 uint32_t max_llq_num;
709 /* word 5 : Max submission queue depth of LLQ */
710 uint32_t max_llq_depth;
712 /* word 6 : Max header size */
713 uint32_t max_header_size;
716 /* Maximum Descriptors number, including meta descriptors, allowed
717 * for a single Tx packet
719 uint16_t max_packet_tx_descs;
721 /* Maximum Descriptors number allowed for a single Rx packet */
722 uint16_t max_packet_rx_descs;
725 /* ENA MTU Set Feature descriptor. */
726 struct ena_admin_set_feature_mtu_desc {
727 /* word 0 : mtu size including L2 */
731 /* ENA host attributes Set Feature descriptor. */
732 struct ena_admin_set_feature_host_attr_desc {
733 /* words 0:1 : host OS info base address in OS memory. host info is
734 * 4KB of physically contiguous
736 struct ena_common_mem_addr os_info_ba;
738 /* words 2:3 : host debug area base address in OS memory. debug
739 * area must be physically contiguous
741 struct ena_common_mem_addr debug_ba;
743 /* word 4 : debug area size */
744 uint32_t debug_area_size;
747 /* ENA Interrupt Moderation Get Feature descriptor. */
748 struct ena_admin_feature_intr_moder_desc {
750 /* interrupt delay granularity in usec */
751 uint16_t intr_delay_resolution;
756 /* ENA Link Get Feature descriptor. */
757 struct ena_admin_get_feature_link_desc {
758 /* word 0 : Link speed in Mb */
761 /* word 1 : supported speeds (bit field of enum ena_admin_link
767 /* 0 : autoneg - auto negotiation
768 * 1 : duplex - Full Duplex
774 /* ENA AENQ Feature descriptor. */
775 struct ena_admin_feature_aenq_desc {
776 /* word 0 : bitmask for AENQ groups the device can report */
777 uint32_t supported_groups;
779 /* word 1 : bitmask for AENQ groups to report */
780 uint32_t enabled_groups;
783 /* ENA Stateless Offload Feature descriptor. */
784 struct ena_admin_feature_offload_desc {
786 /* Trasmit side stateless offload
787 * 0 : TX_L3_csum_ipv4 - IPv4 checksum
788 * 1 : TX_L4_ipv4_csum_part - TCP/UDP over IPv4
789 * checksum, the checksum field should be initialized
790 * with pseudo header checksum
791 * 2 : TX_L4_ipv4_csum_full - TCP/UDP over IPv4
793 * 3 : TX_L4_ipv6_csum_part - TCP/UDP over IPv6
794 * checksum, the checksum field should be initialized
795 * with pseudo header checksum
796 * 4 : TX_L4_ipv6_csum_full - TCP/UDP over IPv6
798 * 5 : tso_ipv4 - TCP/IPv4 Segmentation Offloading
799 * 6 : tso_ipv6 - TCP/IPv6 Segmentation Offloading
800 * 7 : tso_ecn - TCP Segmentation with ECN
805 /* Receive side supported stateless offload
806 * 0 : RX_L3_csum_ipv4 - IPv4 checksum
807 * 1 : RX_L4_ipv4_csum - TCP/UDP/IPv4 checksum
808 * 2 : RX_L4_ipv6_csum - TCP/UDP/IPv6 checksum
809 * 3 : RX_hash - Hash calculation
811 uint32_t rx_supported;
814 /* Receive side enabled stateless offload */
819 enum ena_admin_hash_functions {
821 ENA_ADMIN_TOEPLITZ = 1,
827 /* ENA RSS flow hash control buffer structure */
828 struct ena_admin_feature_rss_flow_hash_control {
829 /* word 0 : number of valid keys */
839 /* ENA RSS Flow Hash Function */
840 struct ena_admin_feature_rss_flow_hash_function {
842 /* supported hash functions
843 * 7:0 : funcs - supported hash functions (bitmask
844 * accroding to ena_admin_hash_functions)
846 uint32_t supported_func;
849 /* selected hash func
850 * 7:0 : selected_func - selected hash function
851 * (bitmask accroding to ena_admin_hash_functions)
853 uint32_t selected_func;
855 /* word 2 : initial value */
859 /* RSS flow hash protocols */
860 enum ena_admin_flow_hash_proto {
862 ENA_ADMIN_RSS_TCP4 = 0,
865 ENA_ADMIN_RSS_UDP4 = 1,
868 ENA_ADMIN_RSS_TCP6 = 2,
871 ENA_ADMIN_RSS_UDP6 = 3,
873 /* ipv4 not tcp/udp */
874 ENA_ADMIN_RSS_IP4 = 4,
876 /* ipv6 not tcp/udp */
877 ENA_ADMIN_RSS_IP6 = 5,
879 /* fragmented ipv4 */
880 ENA_ADMIN_RSS_IP4_FRAG = 6,
883 ENA_ADMIN_RSS_NOT_IP = 7,
885 /* max number of protocols */
886 ENA_ADMIN_RSS_PROTO_NUM = 16,
889 /* RSS flow hash fields */
890 enum ena_admin_flow_hash_fields {
891 /* Ethernet Dest Addr */
892 ENA_ADMIN_RSS_L2_DA = 0,
894 /* Ethernet Src Addr */
895 ENA_ADMIN_RSS_L2_SA = 1,
897 /* ipv4/6 Dest Addr */
898 ENA_ADMIN_RSS_L3_DA = 2,
900 /* ipv4/6 Src Addr */
901 ENA_ADMIN_RSS_L3_SA = 5,
903 /* tcp/udp Dest Port */
904 ENA_ADMIN_RSS_L4_DP = 6,
906 /* tcp/udp Src Port */
907 ENA_ADMIN_RSS_L4_SP = 7,
910 /* hash input fields for flow protocol */
911 struct ena_admin_proto_input {
913 /* flow hash fields (bitwise according to ena_admin_flow_hash_fields) */
916 /* 0 : inner - for tunneled packet, select the fields
922 /* ENA RSS hash control buffer structure */
923 struct ena_admin_feature_rss_hash_control {
924 /* supported input fields */
925 struct ena_admin_proto_input supported_fields[ENA_ADMIN_RSS_PROTO_NUM];
927 /* selected input fields */
928 struct ena_admin_proto_input selected_fields[ENA_ADMIN_RSS_PROTO_NUM];
930 /* supported input fields for inner header */
931 struct ena_admin_proto_input supported_inner_fields[ENA_ADMIN_RSS_PROTO_NUM];
933 /* selected input fields */
934 struct ena_admin_proto_input selected_inner_fields[ENA_ADMIN_RSS_PROTO_NUM];
937 /* ENA RSS flow hash input */
938 struct ena_admin_feature_rss_flow_hash_input {
940 /* supported hash input sorting
941 * 1 : L3_sort - support swap L3 addresses if DA
943 * 2 : L4_sort - support swap L4 ports if DP smaller
946 uint16_t supported_input_sort;
948 /* enabled hash input sorting
949 * 1 : enable_L3_sort - enable swap L3 addresses if
951 * 2 : enable_L4_sort - enable swap L4 ports if DP
954 uint16_t enabled_input_sort;
957 /* Operating system type */
958 enum ena_admin_os_type {
960 ENA_ADMIN_OS_LINUX = 1,
963 ENA_ADMIN_OS_WIN = 2,
966 ENA_ADMIN_OS_DPDK = 3,
969 ENA_ADMIN_OS_FREE_BSD = 4,
972 ENA_ADMIN_OS_PXE = 5,
976 struct ena_admin_host_info {
977 /* word 0 : OS type defined in enum ena_os_type */
980 /* os distribution string format */
981 uint8_t os_dist_str[128];
983 /* word 33 : OS distribution numeric format */
986 /* kernel version string format */
987 uint8_t kernel_ver_str[32];
989 /* word 42 : Kernel version numeric format */
994 * 7:0 : major - major
995 * 15:8 : minor - minor
996 * 23:16 : sub_minor - sub minor
998 uint32_t driver_version;
1000 /* features bitmap */
1001 uint32_t supported_network_features[4];
1004 /* ENA RSS indirection table entry */
1005 struct ena_admin_rss_ind_table_entry {
1013 /* ENA RSS indirection table */
1014 struct ena_admin_feature_rss_ind_table {
1016 /* min supported table size (2^min_size) */
1019 /* max supported table size (2^max_size) */
1023 /* table size (2^size) */
1028 /* word 2 : index of the inline entry. 0xFFFFFFFF means invalid */
1029 uint32_t inline_index;
1031 /* words 3 : used for updating single entry, ignored when setting
1032 * the entire table through the control buffer.
1034 struct ena_admin_rss_ind_table_entry inline_entry;
1037 /* ENA Get Feature command */
1038 struct ena_admin_get_feat_cmd {
1040 struct ena_admin_aq_common_desc aq_common_descriptor;
1042 /* words 1:3 : points to control buffer (direct or indirect,
1043 * chained if needed)
1045 struct ena_admin_ctrl_buff_info control_buffer;
1048 struct ena_admin_get_set_feature_common_desc feat_common;
1057 /* ENA Get Feature command response */
1058 struct ena_admin_get_feat_resp {
1060 struct ena_admin_acq_common_desc acq_common_desc;
1067 /* words 2:10 : Get Device Attributes */
1068 struct ena_admin_device_attr_feature_desc dev_attr;
1070 /* words 2:5 : Max queues num */
1071 struct ena_admin_queue_feature_desc max_queue;
1073 /* words 2:3 : AENQ configuration */
1074 struct ena_admin_feature_aenq_desc aenq;
1076 /* words 2:4 : Get Link configuration */
1077 struct ena_admin_get_feature_link_desc link;
1079 /* words 2:4 : offload configuration */
1080 struct ena_admin_feature_offload_desc offload;
1082 /* words 2:4 : rss flow hash function */
1083 struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
1085 /* words 2 : rss flow hash input */
1086 struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
1088 /* words 2:3 : rss indirection table */
1089 struct ena_admin_feature_rss_ind_table ind_table;
1091 /* words 2 : interrupt moderation configuration */
1092 struct ena_admin_feature_intr_moder_desc intr_moderation;
1096 /* ENA Set Feature command */
1097 struct ena_admin_set_feat_cmd {
1099 struct ena_admin_aq_common_desc aq_common_descriptor;
1101 /* words 1:3 : points to control buffer (direct or indirect,
1102 * chained if needed)
1104 struct ena_admin_ctrl_buff_info control_buffer;
1107 struct ena_admin_get_set_feature_common_desc feat_common;
1114 /* words 5 : mtu size */
1115 struct ena_admin_set_feature_mtu_desc mtu;
1117 /* words 5:7 : host attributes */
1118 struct ena_admin_set_feature_host_attr_desc host_attr;
1120 /* words 5:6 : AENQ configuration */
1121 struct ena_admin_feature_aenq_desc aenq;
1123 /* words 5:7 : rss flow hash function */
1124 struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
1126 /* words 5 : rss flow hash input */
1127 struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
1129 /* words 5:6 : rss indirection table */
1130 struct ena_admin_feature_rss_ind_table ind_table;
1134 /* ENA Set Feature command response */
1135 struct ena_admin_set_feat_resp {
1137 struct ena_admin_acq_common_desc acq_common_desc;
1146 /* ENA Asynchronous Event Notification Queue descriptor. */
1147 struct ena_admin_aenq_common_desc {
1157 uint8_t reserved1[3];
1159 /* word 2 : Timestamp LSB */
1160 uint32_t timestamp_low;
1162 /* word 3 : Timestamp MSB */
1163 uint32_t timestamp_high;
1166 /* asynchronous event notification groups */
1167 enum ena_admin_aenq_group {
1168 /* Link State Change */
1169 ENA_ADMIN_LINK_CHANGE = 0,
1171 ENA_ADMIN_FATAL_ERROR = 1,
1173 ENA_ADMIN_WARNING = 2,
1175 ENA_ADMIN_NOTIFICATION = 3,
1177 ENA_ADMIN_KEEP_ALIVE = 4,
1179 ENA_ADMIN_AENQ_GROUPS_NUM = 5,
1182 /* syndorm of AENQ notification group */
1183 enum ena_admin_aenq_notification_syndrom {
1184 ENA_ADMIN_SUSPEND = 0,
1186 ENA_ADMIN_RESUME = 1,
1189 /* ENA Asynchronous Event Notification generic descriptor. */
1190 struct ena_admin_aenq_entry {
1192 struct ena_admin_aenq_common_desc aenq_common_desc;
1194 /* command specific inline data */
1195 uint32_t inline_data_w4[12];
1198 /* ENA Asynchronous Event Notification Queue Link Change descriptor. */
1199 struct ena_admin_aenq_link_change_desc {
1201 struct ena_admin_aenq_common_desc aenq_common_desc;
1204 /* 0 : link_status */
1208 /* ENA MMIO Readless response interface */
1209 struct ena_admin_ena_mmio_req_read_less_resp {
1214 /* register offset */
1217 /* word 1 : value is valid when poll is cleared */
1221 /* aq_common_desc */
1222 #define ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0)
1223 #define ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK BIT(0)
1224 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT 1
1225 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK BIT(1)
1226 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT 2
1227 #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK BIT(2)
1230 #define ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT 5
1231 #define ENA_ADMIN_SQ_SQ_DIRECTION_MASK GENMASK(7, 5)
1233 /* acq_common_desc */
1234 #define ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0)
1235 #define ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK BIT(0)
1237 /* aq_create_sq_cmd */
1238 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT 5
1239 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK GENMASK(7, 5)
1240 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK GENMASK(3, 0)
1241 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT 4
1242 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK GENMASK(6, 4)
1243 #define ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK BIT(0)
1245 /* aq_create_cq_cmd */
1246 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT 5
1247 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5)
1248 #define ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0)
1250 /* get_set_feature_common_desc */
1251 #define ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK GENMASK(1, 0)
1253 /* get_feature_link_desc */
1254 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK BIT(0)
1255 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT 1
1256 #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK BIT(1)
1258 /* feature_offload_desc */
1259 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK BIT(0)
1260 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT 1
1261 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK BIT(1)
1262 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT 2
1263 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK BIT(2)
1264 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT 3
1265 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK BIT(3)
1266 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT 4
1267 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK BIT(4)
1268 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT 5
1269 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK BIT(5)
1270 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT 6
1271 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK BIT(6)
1272 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT 7
1273 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK BIT(7)
1274 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK BIT(0)
1275 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT 1
1276 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK BIT(1)
1277 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT 2
1278 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK BIT(2)
1279 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT 3
1280 #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK BIT(3)
1282 /* feature_rss_flow_hash_function */
1283 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK GENMASK(7, 0)
1284 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK \
1288 #define ENA_ADMIN_PROTO_INPUT_INNER_MASK BIT(0)
1290 /* feature_rss_flow_hash_input */
1291 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT 1
1292 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK BIT(1)
1293 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT 2
1294 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK BIT(2)
1295 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT 1
1296 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK BIT(1)
1297 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT 2
1298 #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK BIT(2)
1301 #define ENA_ADMIN_HOST_INFO_MAJOR_MASK GENMASK(7, 0)
1302 #define ENA_ADMIN_HOST_INFO_MINOR_SHIFT 8
1303 #define ENA_ADMIN_HOST_INFO_MINOR_MASK GENMASK(15, 8)
1304 #define ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT 16
1305 #define ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK GENMASK(23, 16)
1307 /* aenq_common_desc */
1308 #define ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK BIT(0)
1310 /* aenq_link_change_desc */
1311 #define ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK BIT(0)
1313 #if !defined(ENA_DEFS_LINUX_MAINLINE)
1314 static inline uint16_t
1315 get_ena_admin_aq_common_desc_command_id(
1316 const struct ena_admin_aq_common_desc *p)
1318 return p->command_id & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;
1322 set_ena_admin_aq_common_desc_command_id(struct ena_admin_aq_common_desc *p,
1325 p->command_id |= val & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;
1328 static inline uint8_t
1329 get_ena_admin_aq_common_desc_phase(const struct ena_admin_aq_common_desc *p)
1331 return p->flags & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK;
1335 set_ena_admin_aq_common_desc_phase(struct ena_admin_aq_common_desc *p,
1338 p->flags |= val & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK;
1341 static inline uint8_t
1342 get_ena_admin_aq_common_desc_ctrl_data(
1343 const struct ena_admin_aq_common_desc *p)
1345 return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK) >>
1346 ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT;
1350 set_ena_admin_aq_common_desc_ctrl_data(struct ena_admin_aq_common_desc *p,
1353 p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT)
1354 & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK;
1357 static inline uint8_t
1358 get_ena_admin_aq_common_desc_ctrl_data_indirect(
1359 const struct ena_admin_aq_common_desc *p)
1361 return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK)
1362 >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT;
1366 set_ena_admin_aq_common_desc_ctrl_data_indirect(
1367 struct ena_admin_aq_common_desc *p,
1370 p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT)
1371 & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK;
1374 static inline uint8_t
1375 get_ena_admin_sq_sq_direction(const struct ena_admin_sq *p)
1377 return (p->sq_identity & ENA_ADMIN_SQ_SQ_DIRECTION_MASK)
1378 >> ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT;
1382 set_ena_admin_sq_sq_direction(struct ena_admin_sq *p, uint8_t val)
1384 p->sq_identity |= (val << ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT) &
1385 ENA_ADMIN_SQ_SQ_DIRECTION_MASK;
1388 static inline uint16_t
1389 get_ena_admin_acq_common_desc_command_id(
1390 const struct ena_admin_acq_common_desc *p)
1392 return p->command & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK;
1396 set_ena_admin_acq_common_desc_command_id(struct ena_admin_acq_common_desc *p,
1399 p->command |= val & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK;
1402 static inline uint8_t
1403 get_ena_admin_acq_common_desc_phase(const struct ena_admin_acq_common_desc *p)
1405 return p->flags & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK;
1409 set_ena_admin_acq_common_desc_phase(struct ena_admin_acq_common_desc *p,
1412 p->flags |= val & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK;
1415 static inline uint8_t
1416 get_ena_admin_aq_create_sq_cmd_sq_direction(
1417 const struct ena_admin_aq_create_sq_cmd *p)
1419 return (p->sq_identity & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK)
1420 >> ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT;
1424 set_ena_admin_aq_create_sq_cmd_sq_direction(
1425 struct ena_admin_aq_create_sq_cmd *p,
1428 p->sq_identity |= (val <<
1429 ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT)
1430 & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK;
1433 static inline uint8_t
1434 get_ena_admin_aq_create_sq_cmd_placement_policy(
1435 const struct ena_admin_aq_create_sq_cmd *p)
1437 return p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK;
1441 set_ena_admin_aq_create_sq_cmd_placement_policy(
1442 struct ena_admin_aq_create_sq_cmd *p,
1445 p->sq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK;
1448 static inline uint8_t
1449 get_ena_admin_aq_create_sq_cmd_completion_policy(
1450 const struct ena_admin_aq_create_sq_cmd *p)
1452 return (p->sq_caps_2
1453 & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK)
1454 >> ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT;
1458 set_ena_admin_aq_create_sq_cmd_completion_policy(
1459 struct ena_admin_aq_create_sq_cmd *p,
1463 (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT)
1464 & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK;
1467 static inline uint8_t
1468 get_ena_admin_aq_create_sq_cmd_is_physically_contiguous(
1469 const struct ena_admin_aq_create_sq_cmd *p)
1471 return p->sq_caps_3 &
1472 ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK;
1476 set_ena_admin_aq_create_sq_cmd_is_physically_contiguous(
1477 struct ena_admin_aq_create_sq_cmd *p,
1480 p->sq_caps_3 |= val &
1481 ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK;
1484 static inline uint8_t
1485 get_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(
1486 const struct ena_admin_aq_create_cq_cmd *p)
1488 return (p->cq_caps_1 &
1489 ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK)
1490 >> ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT;
1494 set_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(
1495 struct ena_admin_aq_create_cq_cmd *p,
1499 (val << ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT)
1500 & ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK;
1503 static inline uint8_t
1504 get_ena_admin_aq_create_cq_cmd_cq_entry_size_words(
1505 const struct ena_admin_aq_create_cq_cmd *p)
1508 & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK;
1512 set_ena_admin_aq_create_cq_cmd_cq_entry_size_words(
1513 struct ena_admin_aq_create_cq_cmd *p,
1517 val & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK;
1520 static inline uint8_t
1521 get_ena_admin_get_set_feature_common_desc_select(
1522 const struct ena_admin_get_set_feature_common_desc *p)
1524 return p->flags & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK;
1528 set_ena_admin_get_set_feature_common_desc_select(
1529 struct ena_admin_get_set_feature_common_desc *p,
1532 p->flags |= val & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK;
1535 static inline uint32_t
1536 get_ena_admin_get_feature_link_desc_autoneg(
1537 const struct ena_admin_get_feature_link_desc *p)
1539 return p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK;
1543 set_ena_admin_get_feature_link_desc_autoneg(
1544 struct ena_admin_get_feature_link_desc *p,
1547 p->flags |= val & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK;
1550 static inline uint32_t
1551 get_ena_admin_get_feature_link_desc_duplex(
1552 const struct ena_admin_get_feature_link_desc *p)
1554 return (p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK)
1555 >> ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT;
1559 set_ena_admin_get_feature_link_desc_duplex(
1560 struct ena_admin_get_feature_link_desc *p,
1563 p->flags |= (val << ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT)
1564 & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK;
1567 static inline uint32_t
1568 get_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(
1569 const struct ena_admin_feature_offload_desc *p)
1571 return p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK;
1575 set_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(
1576 struct ena_admin_feature_offload_desc *p,
1579 p->tx |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK;
1582 static inline uint32_t
1583 get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(
1584 const struct ena_admin_feature_offload_desc *p)
1587 ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK)
1588 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT;
1592 set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(
1593 struct ena_admin_feature_offload_desc *p,
1597 ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT)
1598 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK;
1601 static inline uint32_t
1602 get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(
1603 const struct ena_admin_feature_offload_desc *p)
1606 ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK)
1607 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT;
1611 set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(
1612 struct ena_admin_feature_offload_desc *p,
1616 ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT)
1617 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK;
1620 static inline uint32_t
1621 get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(
1622 const struct ena_admin_feature_offload_desc *p)
1625 ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK)
1626 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT;
1630 set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(
1631 struct ena_admin_feature_offload_desc *p,
1635 ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT)
1636 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK;
1639 static inline uint32_t
1640 get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(
1641 const struct ena_admin_feature_offload_desc *p)
1644 ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK)
1645 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT;
1649 set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(
1650 struct ena_admin_feature_offload_desc *p,
1654 ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT)
1655 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK;
1658 static inline uint32_t
1659 get_ena_admin_feature_offload_desc_tso_ipv4(
1660 const struct ena_admin_feature_offload_desc *p)
1662 return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK)
1663 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT;
1667 set_ena_admin_feature_offload_desc_tso_ipv4(
1668 struct ena_admin_feature_offload_desc *p,
1671 p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT)
1672 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK;
1675 static inline uint32_t
1676 get_ena_admin_feature_offload_desc_tso_ipv6(
1677 const struct ena_admin_feature_offload_desc *p)
1679 return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK)
1680 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT;
1684 set_ena_admin_feature_offload_desc_tso_ipv6(
1685 struct ena_admin_feature_offload_desc *p,
1688 p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT)
1689 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK;
1692 static inline uint32_t
1693 get_ena_admin_feature_offload_desc_tso_ecn(
1694 const struct ena_admin_feature_offload_desc *p)
1696 return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK)
1697 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT;
1701 set_ena_admin_feature_offload_desc_tso_ecn(
1702 struct ena_admin_feature_offload_desc *p,
1705 p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT)
1706 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK;
1709 static inline uint32_t
1710 get_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(
1711 const struct ena_admin_feature_offload_desc *p)
1713 return p->rx_supported &
1714 ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK;
1718 set_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(
1719 struct ena_admin_feature_offload_desc *p,
1723 val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK;
1726 static inline uint32_t
1727 get_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(
1728 const struct ena_admin_feature_offload_desc *p)
1730 return (p->rx_supported &
1731 ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK)
1732 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT;
1736 set_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(
1737 struct ena_admin_feature_offload_desc *p,
1741 (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT)
1742 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK;
1745 static inline uint32_t
1746 get_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(
1747 const struct ena_admin_feature_offload_desc *p)
1749 return (p->rx_supported &
1750 ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK)
1751 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT;
1755 set_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(
1756 struct ena_admin_feature_offload_desc *p,
1760 (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT)
1761 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK;
1764 static inline uint32_t
1765 get_ena_admin_feature_offload_desc_RX_hash(
1766 const struct ena_admin_feature_offload_desc *p)
1768 return (p->rx_supported &
1769 ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK)
1770 >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT;
1774 set_ena_admin_feature_offload_desc_RX_hash(
1775 struct ena_admin_feature_offload_desc *p,
1779 (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT)
1780 & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK;
1783 static inline uint32_t
1784 get_ena_admin_feature_rss_flow_hash_function_funcs(
1785 const struct ena_admin_feature_rss_flow_hash_function *p)
1787 return p->supported_func &
1788 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK;
1792 set_ena_admin_feature_rss_flow_hash_function_funcs(
1793 struct ena_admin_feature_rss_flow_hash_function *p,
1796 p->supported_func |=
1797 val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK;
1800 static inline uint32_t
1801 get_ena_admin_feature_rss_flow_hash_function_selected_func(
1802 const struct ena_admin_feature_rss_flow_hash_function *p)
1804 return p->selected_func &
1805 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK;
1809 set_ena_admin_feature_rss_flow_hash_function_selected_func(
1810 struct ena_admin_feature_rss_flow_hash_function *p,
1815 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK;
1818 static inline uint16_t
1819 get_ena_admin_proto_input_inner(const struct ena_admin_proto_input *p)
1821 return p->flags & ENA_ADMIN_PROTO_INPUT_INNER_MASK;
1825 set_ena_admin_proto_input_inner(struct ena_admin_proto_input *p, uint16_t val)
1827 p->flags |= val & ENA_ADMIN_PROTO_INPUT_INNER_MASK;
1830 static inline uint16_t
1831 get_ena_admin_feature_rss_flow_hash_input_L3_sort(
1832 const struct ena_admin_feature_rss_flow_hash_input *p)
1834 return (p->supported_input_sort &
1835 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK)
1836 >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT;
1840 set_ena_admin_feature_rss_flow_hash_input_L3_sort(
1841 struct ena_admin_feature_rss_flow_hash_input *p,
1844 p->supported_input_sort |=
1845 (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT)
1846 & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK;
1849 static inline uint16_t
1850 get_ena_admin_feature_rss_flow_hash_input_L4_sort(
1851 const struct ena_admin_feature_rss_flow_hash_input *p)
1853 return (p->supported_input_sort &
1854 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK)
1855 >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT;
1859 set_ena_admin_feature_rss_flow_hash_input_L4_sort(
1860 struct ena_admin_feature_rss_flow_hash_input *p,
1863 p->supported_input_sort |=
1864 (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT)
1865 & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK;
1868 static inline uint16_t
1869 get_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(
1870 const struct ena_admin_feature_rss_flow_hash_input *p)
1872 return (p->enabled_input_sort &
1873 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK)
1874 >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT;
1878 set_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(
1879 struct ena_admin_feature_rss_flow_hash_input *p,
1882 p->enabled_input_sort |=
1884 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT)
1885 & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK;
1888 static inline uint16_t
1889 get_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(
1890 const struct ena_admin_feature_rss_flow_hash_input *p)
1892 return (p->enabled_input_sort &
1893 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK)
1894 >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT;
1898 set_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(
1899 struct ena_admin_feature_rss_flow_hash_input *p,
1902 p->enabled_input_sort |=
1904 ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT)
1905 & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK;
1908 static inline uint32_t
1909 get_ena_admin_host_info_major(const struct ena_admin_host_info *p)
1911 return p->driver_version & ENA_ADMIN_HOST_INFO_MAJOR_MASK;
1915 set_ena_admin_host_info_major(struct ena_admin_host_info *p, uint32_t val)
1917 p->driver_version |= val & ENA_ADMIN_HOST_INFO_MAJOR_MASK;
1920 static inline uint32_t
1921 get_ena_admin_host_info_minor(const struct ena_admin_host_info *p)
1923 return (p->driver_version & ENA_ADMIN_HOST_INFO_MINOR_MASK)
1924 >> ENA_ADMIN_HOST_INFO_MINOR_SHIFT;
1928 set_ena_admin_host_info_minor(struct ena_admin_host_info *p, uint32_t val)
1930 p->driver_version |= (val << ENA_ADMIN_HOST_INFO_MINOR_SHIFT)
1931 & ENA_ADMIN_HOST_INFO_MINOR_MASK;
1934 static inline uint32_t
1935 get_ena_admin_host_info_sub_minor(const struct ena_admin_host_info *p)
1937 return (p->driver_version & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK)
1938 >> ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT;
1942 set_ena_admin_host_info_sub_minor(struct ena_admin_host_info *p, uint32_t val)
1944 p->driver_version |= (val << ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT)
1945 & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK;
1948 static inline uint8_t
1949 get_ena_admin_aenq_common_desc_phase(
1950 const struct ena_admin_aenq_common_desc *p)
1952 return p->flags & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK;
1956 set_ena_admin_aenq_common_desc_phase(
1957 struct ena_admin_aenq_common_desc *p,
1960 p->flags |= val & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK;
1963 static inline uint32_t
1964 get_ena_admin_aenq_link_change_desc_link_status(
1965 const struct ena_admin_aenq_link_change_desc *p)
1967 return p->flags & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK;
1971 set_ena_admin_aenq_link_change_desc_link_status(
1972 struct ena_admin_aenq_link_change_desc *p,
1975 p->flags |= val & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK;
1978 #endif /* !defined(ENA_DEFS_LINUX_MAINLINE) */
1979 #endif /*_ENA_ADMIN_H_ */