Path: blob/main/sys/contrib/ena-com/ena_defs/ena_admin_defs.h
48262 views
/*-1* SPDX-License-Identifier: BSD-3-Clause2*3* Copyright (c) 2015-2023 Amazon.com, Inc. or its affiliates.4* All rights reserved.5*6* Redistribution and use in source and binary forms, with or without7* modification, are permitted provided that the following conditions8* are met:9*10* * Redistributions of source code must retain the above copyright11* notice, this list of conditions and the following disclaimer.12* * Redistributions in binary form must reproduce the above copyright13* notice, this list of conditions and the following disclaimer in14* the documentation and/or other materials provided with the15* distribution.16* * Neither the name of copyright holder nor the names of its17* contributors may be used to endorse or promote products derived18* from this software without specific prior written permission.19*20* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS21* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT22* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR23* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT24* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,25* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT26* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,27* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY28* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT29* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE30* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.31*/3233#ifndef _ENA_ADMIN_H_34#define _ENA_ADMIN_H_3536#define ENA_ADMIN_EXTRA_PROPERTIES_STRING_LEN 3237#define ENA_ADMIN_EXTRA_PROPERTIES_COUNT 323839#define ENA_ADMIN_RSS_KEY_PARTS 104041#define ENA_ADMIN_CUSTOMER_METRICS_SUPPORT_MASK 0x3F42#define ENA_ADMIN_CUSTOMER_METRICS_MIN_SUPPORT_MASK 0x1F4344/* customer metrics - in correlation with45* ENA_ADMIN_CUSTOMER_METRICS_SUPPORT_MASK46*/47enum ena_admin_customer_metrics_id {48ENA_ADMIN_BW_IN_ALLOWANCE_EXCEEDED = 0,49ENA_ADMIN_BW_OUT_ALLOWANCE_EXCEEDED = 1,50ENA_ADMIN_PPS_ALLOWANCE_EXCEEDED = 2,51ENA_ADMIN_CONNTRACK_ALLOWANCE_EXCEEDED = 3,52ENA_ADMIN_LINKLOCAL_ALLOWANCE_EXCEEDED = 4,53ENA_ADMIN_CONNTRACK_ALLOWANCE_AVAILABLE = 5,54};5556enum ena_admin_aq_opcode {57ENA_ADMIN_CREATE_SQ = 1,58ENA_ADMIN_DESTROY_SQ = 2,59ENA_ADMIN_CREATE_CQ = 3,60ENA_ADMIN_DESTROY_CQ = 4,61ENA_ADMIN_GET_FEATURE = 8,62ENA_ADMIN_SET_FEATURE = 9,63ENA_ADMIN_GET_STATS = 11,64};6566enum ena_admin_aq_completion_status {67ENA_ADMIN_SUCCESS = 0,68ENA_ADMIN_RESOURCE_ALLOCATION_FAILURE = 1,69ENA_ADMIN_BAD_OPCODE = 2,70ENA_ADMIN_UNSUPPORTED_OPCODE = 3,71ENA_ADMIN_MALFORMED_REQUEST = 4,72/* Additional status is provided in ACQ entry extended_status */73ENA_ADMIN_ILLEGAL_PARAMETER = 5,74ENA_ADMIN_UNKNOWN_ERROR = 6,75ENA_ADMIN_RESOURCE_BUSY = 7,76};7778/* subcommands for the set/get feature admin commands */79enum ena_admin_aq_feature_id {80ENA_ADMIN_DEVICE_ATTRIBUTES = 1,81ENA_ADMIN_MAX_QUEUES_NUM = 2,82ENA_ADMIN_HW_HINTS = 3,83ENA_ADMIN_LLQ = 4,84ENA_ADMIN_EXTRA_PROPERTIES_STRINGS = 5,85ENA_ADMIN_EXTRA_PROPERTIES_FLAGS = 6,86ENA_ADMIN_MAX_QUEUES_EXT = 7,87ENA_ADMIN_RSS_HASH_FUNCTION = 10,88ENA_ADMIN_STATELESS_OFFLOAD_CONFIG = 11,89ENA_ADMIN_RSS_INDIRECTION_TABLE_CONFIG = 12,90ENA_ADMIN_MTU = 14,91ENA_ADMIN_RSS_HASH_INPUT = 18,92ENA_ADMIN_INTERRUPT_MODERATION = 20,93ENA_ADMIN_AENQ_CONFIG = 26,94ENA_ADMIN_LINK_CONFIG = 27,95ENA_ADMIN_HOST_ATTR_CONFIG = 28,96ENA_ADMIN_PHC_CONFIG = 29,97ENA_ADMIN_FEATURES_OPCODE_NUM = 32,98};99100/* feature version for the set/get ENA_ADMIN_LLQ feature admin commands */101enum ena_admin_llq_feature_version {102/* legacy base version in older drivers */103ENA_ADMIN_LLQ_FEATURE_VERSION_0_LEGACY = 0,104/* support entry_size recommendation by device */105ENA_ADMIN_LLQ_FEATURE_VERSION_1 = 1,106};107108/* device capabilities */109enum ena_admin_aq_caps_id {110ENA_ADMIN_ENI_STATS = 0,111/* ENA SRD customer metrics */112ENA_ADMIN_ENA_SRD_INFO = 1,113ENA_ADMIN_CUSTOMER_METRICS = 2,114ENA_ADMIN_EXTENDED_RESET_REASONS = 3,115ENA_ADMIN_CDESC_MBZ = 4,116};117118enum ena_admin_placement_policy_type {119/* descriptors and headers are in host memory */120ENA_ADMIN_PLACEMENT_POLICY_HOST = 1,121/* descriptors and headers are in device memory (a.k.a Low Latency122* Queue)123*/124ENA_ADMIN_PLACEMENT_POLICY_DEV = 3,125};126127enum ena_admin_link_types {128ENA_ADMIN_LINK_SPEED_1G = 0x1,129ENA_ADMIN_LINK_SPEED_2_HALF_G = 0x2,130ENA_ADMIN_LINK_SPEED_5G = 0x4,131ENA_ADMIN_LINK_SPEED_10G = 0x8,132ENA_ADMIN_LINK_SPEED_25G = 0x10,133ENA_ADMIN_LINK_SPEED_40G = 0x20,134ENA_ADMIN_LINK_SPEED_50G = 0x40,135ENA_ADMIN_LINK_SPEED_100G = 0x80,136ENA_ADMIN_LINK_SPEED_200G = 0x100,137ENA_ADMIN_LINK_SPEED_400G = 0x200,138};139140enum ena_admin_completion_policy_type {141/* completion queue entry for each sq descriptor */142ENA_ADMIN_COMPLETION_POLICY_DESC = 0,143/* completion queue entry upon request in sq descriptor */144ENA_ADMIN_COMPLETION_POLICY_DESC_ON_DEMAND = 1,145/* current queue head pointer is updated in OS memory upon sq146* descriptor request147*/148ENA_ADMIN_COMPLETION_POLICY_HEAD_ON_DEMAND = 2,149/* current queue head pointer is updated in OS memory for each sq150* descriptor151*/152ENA_ADMIN_COMPLETION_POLICY_HEAD = 3,153};154155/* basic stats return ena_admin_basic_stats while extanded stats return a156* buffer (string format) with additional statistics per queue and per157* device id158*/159enum ena_admin_get_stats_type {160ENA_ADMIN_GET_STATS_TYPE_BASIC = 0,161ENA_ADMIN_GET_STATS_TYPE_EXTENDED = 1,162/* extra HW stats for specific network interface */163ENA_ADMIN_GET_STATS_TYPE_ENI = 2,164/* extra HW stats for ENA SRD */165ENA_ADMIN_GET_STATS_TYPE_ENA_SRD = 3,166ENA_ADMIN_GET_STATS_TYPE_CUSTOMER_METRICS = 4,167168};169170enum ena_admin_get_stats_scope {171ENA_ADMIN_SPECIFIC_QUEUE = 0,172ENA_ADMIN_ETH_TRAFFIC = 1,173};174175enum ena_admin_phc_feature_version {176/* Readless with error_bound */177ENA_ADMIN_PHC_FEATURE_VERSION_0 = 0,178};179180enum ena_admin_phc_error_flags {181ENA_ADMIN_PHC_ERROR_FLAG_TIMESTAMP = BIT(0),182ENA_ADMIN_PHC_ERROR_FLAG_ERROR_BOUND = BIT(1),183};184185/* ENA SRD configuration for ENI */186enum ena_admin_ena_srd_flags {187/* Feature enabled */188ENA_ADMIN_ENA_SRD_ENABLED = BIT(0),189/* UDP support enabled */190ENA_ADMIN_ENA_SRD_UDP_ENABLED = BIT(1),191/* Bypass Rx UDP ordering */192ENA_ADMIN_ENA_SRD_UDP_ORDERING_BYPASS_ENABLED = BIT(2),193};194195struct ena_admin_aq_common_desc {196/* 11:0 : command_id197* 15:12 : reserved12198*/199uint16_t command_id;200201/* as appears in ena_admin_aq_opcode */202uint8_t opcode;203204/* 0 : phase205* 1 : ctrl_data - control buffer address valid206* 2 : ctrl_data_indirect - control buffer address207* points to list of pages with addresses of control208* buffers209* 7:3 : reserved3210*/211uint8_t flags;212};213214/* used in ena_admin_aq_entry. Can point directly to control data, or to a215* page list chunk. Used also at the end of indirect mode page list chunks,216* for chaining.217*/218struct ena_admin_ctrl_buff_info {219uint32_t length;220221struct ena_common_mem_addr address;222};223224struct ena_admin_sq {225uint16_t sq_idx;226227/* 4:0 : reserved228* 7:5 : sq_direction - 0x1 - Tx; 0x2 - Rx229*/230uint8_t sq_identity;231232uint8_t reserved1;233};234235struct ena_admin_aq_entry {236struct ena_admin_aq_common_desc aq_common_descriptor;237238union {239uint32_t inline_data_w1[3];240241struct ena_admin_ctrl_buff_info control_buffer;242} u;243244uint32_t inline_data_w4[12];245};246247struct ena_admin_acq_common_desc {248/* command identifier to associate it with the aq descriptor249* 11:0 : command_id250* 15:12 : reserved12251*/252uint16_t command;253254uint8_t status;255256/* 0 : phase257* 7:1 : reserved1258*/259uint8_t flags;260261uint16_t extended_status;262263/* indicates to the driver which AQ entry has been consumed by the264* device and could be reused265*/266uint16_t sq_head_indx;267};268269struct ena_admin_acq_entry {270struct ena_admin_acq_common_desc acq_common_descriptor;271272uint32_t response_specific_data[14];273};274275struct ena_admin_aq_create_sq_cmd {276struct ena_admin_aq_common_desc aq_common_descriptor;277278/* 4:0 : reserved0_w1279* 7:5 : sq_direction - 0x1 - Tx, 0x2 - Rx280*/281uint8_t sq_identity;282283uint8_t reserved8_w1;284285/* 3:0 : placement_policy - Describing where the SQ286* descriptor ring and the SQ packet headers reside:287* 0x1 - descriptors and headers are in OS memory,288* 0x3 - descriptors and headers in device memory289* (a.k.a Low Latency Queue)290* 6:4 : completion_policy - Describing what policy291* to use for generation completion entry (cqe) in292* the CQ associated with this SQ: 0x0 - cqe for each293* sq descriptor, 0x1 - cqe upon request in sq294* descriptor, 0x2 - current queue head pointer is295* updated in OS memory upon sq descriptor request296* 0x3 - current queue head pointer is updated in OS297* memory for each sq descriptor298* 7 : reserved15_w1299*/300uint8_t sq_caps_2;301302/* 0 : is_physically_contiguous - Described if the303* queue ring memory is allocated in physical304* contiguous pages or split.305* 7:1 : reserved17_w1306*/307uint8_t sq_caps_3;308309/* associated completion queue id. This CQ must be created prior to SQ310* creation311*/312uint16_t cq_idx;313314/* submission queue depth in entries */315uint16_t sq_depth;316317/* SQ physical base address in OS memory. This field should not be318* used for Low Latency queues. Has to be page aligned.319*/320struct ena_common_mem_addr sq_ba;321322/* specifies queue head writeback location in OS memory. Valid if323* completion_policy is set to completion_policy_head_on_demand or324* completion_policy_head. Has to be cache aligned325*/326struct ena_common_mem_addr sq_head_writeback;327328uint32_t reserved0_w7;329330uint32_t reserved0_w8;331};332333enum ena_admin_sq_direction {334ENA_ADMIN_SQ_DIRECTION_TX = 1,335ENA_ADMIN_SQ_DIRECTION_RX = 2,336};337338struct ena_admin_acq_create_sq_resp_desc {339struct ena_admin_acq_common_desc acq_common_desc;340341uint16_t sq_idx;342343uint16_t reserved;344345/* queue doorbell address as an offset to PCIe MMIO REG BAR */346uint32_t sq_doorbell_offset;347348/* low latency queue ring base address as an offset to PCIe MMIO349* LLQ_MEM BAR350*/351uint32_t llq_descriptors_offset;352353/* low latency queue headers' memory as an offset to PCIe MMIO354* LLQ_MEM BAR355*/356uint32_t llq_headers_offset;357};358359struct ena_admin_aq_destroy_sq_cmd {360struct ena_admin_aq_common_desc aq_common_descriptor;361362struct ena_admin_sq sq;363};364365struct ena_admin_acq_destroy_sq_resp_desc {366struct ena_admin_acq_common_desc acq_common_desc;367};368369struct ena_admin_aq_create_cq_cmd {370struct ena_admin_aq_common_desc aq_common_descriptor;371372/* 4:0 : reserved5373* 5 : interrupt_mode_enabled - if set, cq operates374* in interrupt mode, otherwise - polling375* 7:6 : reserved6376*/377uint8_t cq_caps_1;378379/* 4:0 : cq_entry_size_words - size of CQ entry in380* 32-bit words, valid values: 4, 8.381* 7:5 : reserved7382*/383uint8_t cq_caps_2;384385/* completion queue depth in # of entries. must be power of 2 */386uint16_t cq_depth;387388/* msix vector assigned to this cq */389uint32_t msix_vector;390391/* cq physical base address in OS memory. CQ must be physically392* contiguous393*/394struct ena_common_mem_addr cq_ba;395};396397struct ena_admin_acq_create_cq_resp_desc {398struct ena_admin_acq_common_desc acq_common_desc;399400uint16_t cq_idx;401402/* actual cq depth in number of entries */403uint16_t cq_actual_depth;404405uint32_t numa_node_register_offset;406407uint32_t cq_head_db_register_offset;408409uint32_t cq_interrupt_unmask_register_offset;410};411412struct ena_admin_aq_destroy_cq_cmd {413struct ena_admin_aq_common_desc aq_common_descriptor;414415uint16_t cq_idx;416417uint16_t reserved1;418};419420struct ena_admin_acq_destroy_cq_resp_desc {421struct ena_admin_acq_common_desc acq_common_desc;422};423424/* ENA AQ Get Statistics command. Extended statistics are placed in control425* buffer pointed by AQ entry426*/427struct ena_admin_aq_get_stats_cmd {428struct ena_admin_aq_common_desc aq_common_descriptor;429430union {431/* command specific inline data */432uint32_t inline_data_w1[3];433434struct ena_admin_ctrl_buff_info control_buffer;435} u;436437/* stats type as defined in enum ena_admin_get_stats_type */438uint8_t type;439440/* stats scope defined in enum ena_admin_get_stats_scope */441uint8_t scope;442443uint16_t reserved3;444445/* queue id. used when scope is specific_queue */446uint16_t queue_idx;447448/* device id, value 0xFFFF means mine. only privileged device can get449* stats of other device450*/451uint16_t device_id;452453/* a bitmap representing the requested metric values */454uint64_t requested_metrics;455};456457/* Basic Statistics Command. */458struct ena_admin_basic_stats {459uint32_t tx_bytes_low;460461uint32_t tx_bytes_high;462463uint32_t tx_pkts_low;464465uint32_t tx_pkts_high;466467uint32_t rx_bytes_low;468469uint32_t rx_bytes_high;470471uint32_t rx_pkts_low;472473uint32_t rx_pkts_high;474475uint32_t rx_drops_low;476477uint32_t rx_drops_high;478479uint32_t tx_drops_low;480481uint32_t tx_drops_high;482483uint32_t rx_overruns_low;484485uint32_t rx_overruns_high;486};487488/* ENI Statistics Command. */489struct ena_admin_eni_stats {490/* The number of packets shaped due to inbound aggregate BW491* allowance being exceeded492*/493uint64_t bw_in_allowance_exceeded;494495/* The number of packets shaped due to outbound aggregate BW496* allowance being exceeded497*/498uint64_t bw_out_allowance_exceeded;499500/* The number of packets shaped due to PPS allowance being exceeded */501uint64_t pps_allowance_exceeded;502503/* The number of packets shaped due to connection tracking504* allowance being exceeded and leading to failure in establishment505* of new connections506*/507uint64_t conntrack_allowance_exceeded;508509/* The number of packets shaped due to linklocal packet rate510* allowance being exceeded511*/512uint64_t linklocal_allowance_exceeded;513};514515struct ena_admin_ena_srd_stats {516/* Number of packets transmitted over ENA SRD */517uint64_t ena_srd_tx_pkts;518519/* Number of packets transmitted or could have been520* transmitted over ENA SRD521*/522uint64_t ena_srd_eligible_tx_pkts;523524/* Number of packets received over ENA SRD */525uint64_t ena_srd_rx_pkts;526527/* Percentage of the ENA SRD resources that is in use */528uint64_t ena_srd_resource_utilization;529};530531/* ENA SRD Statistics Command */532struct ena_admin_ena_srd_info {533/* ENA SRD configuration bitmap. See ena_admin_ena_srd_flags for534* details535*/536uint64_t flags;537538struct ena_admin_ena_srd_stats ena_srd_stats;539};540541/* Customer Metrics Command. */542struct ena_admin_customer_metrics {543/* A bitmap representing the reported customer metrics according to544* the order they are reported545*/546uint64_t reported_metrics;547};548549struct ena_admin_acq_get_stats_resp {550struct ena_admin_acq_common_desc acq_common_desc;551552union {553uint64_t raw[7];554555struct ena_admin_basic_stats basic_stats;556557struct ena_admin_eni_stats eni_stats;558559struct ena_admin_ena_srd_info ena_srd_info;560561struct ena_admin_customer_metrics customer_metrics;562} u;563};564565struct ena_admin_get_set_feature_common_desc {566/* 1:0 : select - 0x1 - current value; 0x3 - default567* value568* 7:3 : reserved3569*/570uint8_t flags;571572/* as appears in ena_admin_aq_feature_id */573uint8_t feature_id;574575/* The driver specifies the max feature version it supports and the576* device responds with the currently supported feature version. The577* field is zero based578*/579uint8_t feature_version;580581uint8_t reserved8;582};583584struct ena_admin_device_attr_feature_desc {585uint32_t impl_id;586587uint32_t device_version;588589/* bitmap of ena_admin_aq_feature_id, which represents supported590* subcommands for the set/get feature admin commands.591*/592uint32_t supported_features;593594/* bitmap of ena_admin_aq_caps_id, which represents device595* capabilities.596*/597uint32_t capabilities;598599/* Indicates how many bits are used physical address access. */600uint32_t phys_addr_width;601602/* Indicates how many bits are used virtual address access. */603uint32_t virt_addr_width;604605/* unicast MAC address (in Network byte order) */606uint8_t mac_addr[6];607608uint8_t reserved7[2];609610uint32_t max_mtu;611};612613enum ena_admin_llq_header_location {614/* header is in descriptor list */615ENA_ADMIN_INLINE_HEADER = 1,616/* header in a separate ring, implies 16B descriptor list entry */617ENA_ADMIN_HEADER_RING = 2,618};619620enum ena_admin_llq_ring_entry_size {621ENA_ADMIN_LIST_ENTRY_SIZE_128B = 1,622ENA_ADMIN_LIST_ENTRY_SIZE_192B = 2,623ENA_ADMIN_LIST_ENTRY_SIZE_256B = 4,624};625626enum ena_admin_llq_num_descs_before_header {627ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_0 = 0,628ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_1 = 1,629ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_2 = 2,630ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_4 = 4,631ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_8 = 8,632};633634/* packet descriptor list entry always starts with one or more descriptors,635* followed by a header. The rest of the descriptors are located in the636* beginning of the subsequent entry. Stride refers to how the rest of the637* descriptors are placed. This field is relevant only for inline header638* mode639*/640enum ena_admin_llq_stride_ctrl {641ENA_ADMIN_SINGLE_DESC_PER_ENTRY = 1,642ENA_ADMIN_MULTIPLE_DESCS_PER_ENTRY = 2,643};644645enum ena_admin_accel_mode_feat {646ENA_ADMIN_DISABLE_META_CACHING = 0,647ENA_ADMIN_LIMIT_TX_BURST = 1,648};649650struct ena_admin_accel_mode_get {651/* bit field of enum ena_admin_accel_mode_feat */652uint16_t supported_flags;653654/* maximum burst size between two doorbells. The size is in bytes */655uint16_t max_tx_burst_size;656};657658struct ena_admin_accel_mode_set {659/* bit field of enum ena_admin_accel_mode_feat */660uint16_t enabled_flags;661662uint16_t reserved;663};664665struct ena_admin_accel_mode_req {666union {667uint32_t raw[2];668669struct ena_admin_accel_mode_get get;670671struct ena_admin_accel_mode_set set;672} u;673};674675struct ena_admin_feature_llq_desc {676uint32_t max_llq_num;677678uint32_t max_llq_depth;679680/* specify the header locations the device supports. bitfield of enum681* ena_admin_llq_header_location.682*/683uint16_t header_location_ctrl_supported;684685/* the header location the driver selected to use. */686uint16_t header_location_ctrl_enabled;687688/* if inline header is specified - this is the size of descriptor list689* entry. If header in a separate ring is specified - this is the size690* of header ring entry. bitfield of enum ena_admin_llq_ring_entry_size.691* specify the entry sizes the device supports692*/693uint16_t entry_size_ctrl_supported;694695/* the entry size the driver selected to use. */696uint16_t entry_size_ctrl_enabled;697698/* valid only if inline header is specified. First entry associated with699* the packet includes descriptors and header. Rest of the entries700* occupied by descriptors. This parameter defines the max number of701* descriptors precedding the header in the first entry. The field is702* bitfield of enum ena_admin_llq_num_descs_before_header and specify703* the values the device supports704*/705uint16_t desc_num_before_header_supported;706707/* the desire field the driver selected to use */708uint16_t desc_num_before_header_enabled;709710/* valid only if inline was chosen. bitfield of enum711* ena_admin_llq_stride_ctrl712*/713uint16_t descriptors_stride_ctrl_supported;714715/* the stride control the driver selected to use */716uint16_t descriptors_stride_ctrl_enabled;717718/* feature version of device resp to either GET/SET commands. */719uint8_t feature_version;720721/* llq entry size recommended by the device,722* values correlated to enum ena_admin_llq_ring_entry_size.723* used only for GET command.724*/725uint8_t entry_size_recommended;726727/* max depth of wide llq, or 0 for N/A */728uint16_t max_wide_llq_depth;729730/* accelerated low latency queues requirement. driver needs to731* support those requirements in order to use accelerated llq732*/733struct ena_admin_accel_mode_req accel_mode;734};735736struct ena_admin_queue_ext_feature_fields {737uint32_t max_tx_sq_num;738739uint32_t max_tx_cq_num;740741uint32_t max_rx_sq_num;742743uint32_t max_rx_cq_num;744745uint32_t max_tx_sq_depth;746747uint32_t max_tx_cq_depth;748749uint32_t max_rx_sq_depth;750751uint32_t max_rx_cq_depth;752753uint32_t max_tx_header_size;754755/* Maximum Descriptors number, including meta descriptor, allowed for a756* single Tx packet757*/758uint16_t max_per_packet_tx_descs;759760/* Maximum Descriptors number allowed for a single Rx packet */761uint16_t max_per_packet_rx_descs;762};763764struct ena_admin_queue_feature_desc {765uint32_t max_sq_num;766767uint32_t max_sq_depth;768769uint32_t max_cq_num;770771uint32_t max_cq_depth;772773uint32_t max_legacy_llq_num;774775uint32_t max_legacy_llq_depth;776777uint32_t max_header_size;778779/* Maximum Descriptors number, including meta descriptor, allowed for a780* single Tx packet781*/782uint16_t max_packet_tx_descs;783784/* Maximum Descriptors number allowed for a single Rx packet */785uint16_t max_packet_rx_descs;786};787788struct ena_admin_set_feature_mtu_desc {789/* exclude L2 */790uint32_t mtu;791};792793struct ena_admin_get_extra_properties_strings_desc {794uint32_t count;795};796797struct ena_admin_get_extra_properties_flags_desc {798uint32_t flags;799};800801struct ena_admin_set_feature_host_attr_desc {802/* host OS info base address in OS memory. host info is 4KB of803* physically contiguous804*/805struct ena_common_mem_addr os_info_ba;806807/* host debug area base address in OS memory. debug area must be808* physically contiguous809*/810struct ena_common_mem_addr debug_ba;811812/* debug area size */813uint32_t debug_area_size;814};815816struct ena_admin_feature_intr_moder_desc {817/* interrupt delay granularity in usec */818uint16_t intr_delay_resolution;819820uint16_t reserved;821};822823struct ena_admin_get_feature_link_desc {824/* Link speed in Mb */825uint32_t speed;826827/* bit field of enum ena_admin_link types */828uint32_t supported;829830/* 0 : autoneg831* 1 : duplex - Full Duplex832* 31:2 : reserved2833*/834uint32_t flags;835};836837struct ena_admin_feature_aenq_desc {838/* bitmask for AENQ groups the device can report */839uint32_t supported_groups;840841/* bitmask for AENQ groups to report */842uint32_t enabled_groups;843};844845struct ena_admin_feature_offload_desc {846/* 0 : TX_L3_csum_ipv4847* 1 : TX_L4_ipv4_csum_part - The checksum field848* should be initialized with pseudo header checksum849* 2 : TX_L4_ipv4_csum_full850* 3 : TX_L4_ipv6_csum_part - The checksum field851* should be initialized with pseudo header checksum852* 4 : TX_L4_ipv6_csum_full853* 5 : tso_ipv4854* 6 : tso_ipv6855* 7 : tso_ecn856*/857uint32_t tx;858859/* Receive side supported stateless offload860* 0 : RX_L3_csum_ipv4 - IPv4 checksum861* 1 : RX_L4_ipv4_csum - TCP/UDP/IPv4 checksum862* 2 : RX_L4_ipv6_csum - TCP/UDP/IPv6 checksum863* 3 : RX_hash - Hash calculation864*/865uint32_t rx_supported;866867uint32_t rx_enabled;868};869870enum ena_admin_hash_functions {871ENA_ADMIN_TOEPLITZ = 1,872ENA_ADMIN_CRC32 = 2,873};874875struct ena_admin_feature_rss_flow_hash_control {876uint32_t key_parts;877878uint32_t reserved;879880uint32_t key[ENA_ADMIN_RSS_KEY_PARTS];881};882883struct ena_admin_feature_rss_flow_hash_function {884/* 7:0 : funcs - bitmask of ena_admin_hash_functions */885uint32_t supported_func;886887/* 7:0 : selected_func - bitmask of888* ena_admin_hash_functions889*/890uint32_t selected_func;891892/* initial value */893uint32_t init_val;894};895896/* RSS flow hash protocols */897enum ena_admin_flow_hash_proto {898ENA_ADMIN_RSS_TCP4 = 0,899ENA_ADMIN_RSS_UDP4 = 1,900ENA_ADMIN_RSS_TCP6 = 2,901ENA_ADMIN_RSS_UDP6 = 3,902ENA_ADMIN_RSS_IP4 = 4,903ENA_ADMIN_RSS_IP6 = 5,904ENA_ADMIN_RSS_IP4_FRAG = 6,905ENA_ADMIN_RSS_NOT_IP = 7,906/* TCPv6 with extension header */907ENA_ADMIN_RSS_TCP6_EX = 8,908/* IPv6 with extension header */909ENA_ADMIN_RSS_IP6_EX = 9,910ENA_ADMIN_RSS_PROTO_NUM = 16,911};912913/* RSS flow hash fields */914enum ena_admin_flow_hash_fields {915/* Ethernet Dest Addr */916ENA_ADMIN_RSS_L2_DA = BIT(0),917/* Ethernet Src Addr */918ENA_ADMIN_RSS_L2_SA = BIT(1),919/* ipv4/6 Dest Addr */920ENA_ADMIN_RSS_L3_DA = BIT(2),921/* ipv4/6 Src Addr */922ENA_ADMIN_RSS_L3_SA = BIT(3),923/* tcp/udp Dest Port */924ENA_ADMIN_RSS_L4_DP = BIT(4),925/* tcp/udp Src Port */926ENA_ADMIN_RSS_L4_SP = BIT(5),927};928929struct ena_admin_proto_input {930/* flow hash fields (bitwise according to ena_admin_flow_hash_fields) */931uint16_t fields;932933uint16_t reserved2;934};935936struct ena_admin_feature_rss_hash_control {937struct ena_admin_proto_input supported_fields[ENA_ADMIN_RSS_PROTO_NUM];938939struct ena_admin_proto_input selected_fields[ENA_ADMIN_RSS_PROTO_NUM];940941struct ena_admin_proto_input reserved2[ENA_ADMIN_RSS_PROTO_NUM];942943struct ena_admin_proto_input reserved3[ENA_ADMIN_RSS_PROTO_NUM];944};945946struct ena_admin_feature_rss_flow_hash_input {947/* supported hash input sorting948* 1 : L3_sort - support swap L3 addresses if DA is949* smaller than SA950* 2 : L4_sort - support swap L4 ports if DP smaller951* SP952*/953uint16_t supported_input_sort;954955/* enabled hash input sorting956* 1 : enable_L3_sort - enable swap L3 addresses if957* DA smaller than SA958* 2 : enable_L4_sort - enable swap L4 ports if DP959* smaller than SP960*/961uint16_t enabled_input_sort;962};963964struct ena_admin_host_info {965/* Host OS type defined as ENA_ADMIN_OS_* */966uint32_t os_type;967968/* os distribution string format */969uint8_t os_dist_str[128];970971/* OS distribution numeric format */972uint32_t os_dist;973974/* kernel version string format */975uint8_t kernel_ver_str[32];976977/* Kernel version numeric format */978uint32_t kernel_ver;979980/* 7:0 : major981* 15:8 : minor982* 23:16 : sub_minor983* 31:24 : module_type984*/985uint32_t driver_version;986987/* features bitmap */988uint32_t supported_network_features[2];989990/* ENA spec version of driver */991uint16_t ena_spec_version;992993/* ENA device's Bus, Device and Function994* 2:0 : function995* 7:3 : device996* 15:8 : bus997*/998uint16_t bdf;9991000/* Number of CPUs */1001uint16_t num_cpus;10021003uint16_t reserved;10041005/* 0 : reserved1006* 1 : rx_offset1007* 2 : interrupt_moderation1008* 3 : rx_buf_mirroring1009* 4 : rss_configurable_function_key1010* 5 : reserved1011* 6 : rx_page_reuse1012* 7 : tx_ipv6_csum_offload1013* 8 : phc1014* 31:9 : reserved1015*/1016uint32_t driver_supported_features;1017};10181019struct ena_admin_rss_ind_table_entry {1020uint16_t cq_idx;10211022uint16_t reserved;1023};10241025struct ena_admin_feature_rss_ind_table {1026/* min supported table size (2^min_size) */1027uint16_t min_size;10281029/* max supported table size (2^max_size) */1030uint16_t max_size;10311032/* table size (2^size) */1033uint16_t size;10341035/* 0 : one_entry_update - The ENA device supports1036* setting a single RSS table entry1037*/1038uint8_t flags;10391040uint8_t reserved;10411042/* index of the inline entry. 0xFFFFFFFF means invalid */1043uint32_t inline_index;10441045/* used for updating single entry, ignored when setting the entire1046* table through the control buffer.1047*/1048struct ena_admin_rss_ind_table_entry inline_entry;1049};10501051/* When hint value is 0, driver should use it's own predefined value */1052struct ena_admin_ena_hw_hints {1053/* value in ms */1054uint16_t mmio_read_timeout;10551056/* value in ms */1057uint16_t driver_watchdog_timeout;10581059/* Per packet tx completion timeout. value in ms */1060uint16_t missing_tx_completion_timeout;10611062uint16_t missed_tx_completion_count_threshold_to_reset;10631064/* value in ms */1065uint16_t admin_completion_tx_timeout;10661067uint16_t netdev_wd_timeout;10681069uint16_t max_tx_sgl_size;10701071uint16_t max_rx_sgl_size;10721073uint16_t reserved[8];1074};10751076struct ena_admin_get_feat_cmd {1077struct ena_admin_aq_common_desc aq_common_descriptor;10781079struct ena_admin_ctrl_buff_info control_buffer;10801081struct ena_admin_get_set_feature_common_desc feat_common;10821083uint32_t raw[11];1084};10851086struct ena_admin_queue_ext_feature_desc {1087/* version */1088uint8_t version;10891090uint8_t reserved1[3];10911092union {1093struct ena_admin_queue_ext_feature_fields max_queue_ext;10941095uint32_t raw[10];1096};1097};10981099struct ena_admin_feature_phc_desc {1100/* PHC version as defined in enum ena_admin_phc_feature_version,1101* used only for GET command as max supported PHC version by the device.1102*/1103uint8_t version;11041105/* Reserved - MBZ */1106uint8_t reserved1[3];11071108/* PHC doorbell address as an offset to PCIe MMIO REG BAR,1109* used only for GET command.1110*/1111uint32_t doorbell_offset;11121113/* Max time for valid PHC retrieval, passing this threshold will1114* fail the get-time request and block PHC requests for1115* block_timeout_usec, used only for GET command.1116*/1117uint32_t expire_timeout_usec;11181119/* PHC requests block period, blocking starts if PHC request expired1120* in order to prevent floods on busy device,1121* used only for GET command.1122*/1123uint32_t block_timeout_usec;11241125/* Shared PHC physical address (ena_admin_phc_resp),1126* used only for SET command.1127*/1128struct ena_common_mem_addr output_address;11291130/* Shared PHC Size (ena_admin_phc_resp),1131* used only for SET command.1132*/1133uint32_t output_length;1134};11351136struct ena_admin_get_feat_resp {1137struct ena_admin_acq_common_desc acq_common_desc;11381139union {1140uint32_t raw[14];11411142struct ena_admin_device_attr_feature_desc dev_attr;11431144struct ena_admin_feature_llq_desc llq;11451146struct ena_admin_queue_feature_desc max_queue;11471148struct ena_admin_queue_ext_feature_desc max_queue_ext;11491150struct ena_admin_feature_aenq_desc aenq;11511152struct ena_admin_get_feature_link_desc link;11531154struct ena_admin_feature_offload_desc offload;11551156struct ena_admin_feature_rss_flow_hash_function flow_hash_func;11571158struct ena_admin_feature_rss_flow_hash_input flow_hash_input;11591160struct ena_admin_feature_rss_ind_table ind_table;11611162struct ena_admin_feature_intr_moder_desc intr_moderation;11631164struct ena_admin_ena_hw_hints hw_hints;11651166struct ena_admin_feature_phc_desc phc;11671168struct ena_admin_get_extra_properties_strings_desc extra_properties_strings;11691170struct ena_admin_get_extra_properties_flags_desc extra_properties_flags;1171} u;1172};11731174struct ena_admin_set_feat_cmd {1175struct ena_admin_aq_common_desc aq_common_descriptor;11761177struct ena_admin_ctrl_buff_info control_buffer;11781179struct ena_admin_get_set_feature_common_desc feat_common;11801181union {1182uint32_t raw[11];11831184/* mtu size */1185struct ena_admin_set_feature_mtu_desc mtu;11861187/* host attributes */1188struct ena_admin_set_feature_host_attr_desc host_attr;11891190/* AENQ configuration */1191struct ena_admin_feature_aenq_desc aenq;11921193/* rss flow hash function */1194struct ena_admin_feature_rss_flow_hash_function flow_hash_func;11951196/* rss flow hash input */1197struct ena_admin_feature_rss_flow_hash_input flow_hash_input;11981199/* rss indirection table */1200struct ena_admin_feature_rss_ind_table ind_table;12011202/* LLQ configuration */1203struct ena_admin_feature_llq_desc llq;12041205/* PHC configuration */1206struct ena_admin_feature_phc_desc phc;1207} u;1208};12091210struct ena_admin_set_feat_resp {1211struct ena_admin_acq_common_desc acq_common_desc;12121213union {1214uint32_t raw[14];1215} u;1216};12171218struct ena_admin_aenq_common_desc {1219uint16_t group;12201221uint16_t syndrome;12221223/* 0 : phase1224* 7:1 : reserved - MBZ1225*/1226uint8_t flags;12271228uint8_t reserved1[3];12291230uint32_t timestamp_low;12311232uint32_t timestamp_high;1233};12341235/* asynchronous event notification groups */1236enum ena_admin_aenq_group {1237ENA_ADMIN_LINK_CHANGE = 0,1238ENA_ADMIN_FATAL_ERROR = 1,1239ENA_ADMIN_WARNING = 2,1240ENA_ADMIN_NOTIFICATION = 3,1241ENA_ADMIN_KEEP_ALIVE = 4,1242ENA_ADMIN_REFRESH_CAPABILITIES = 5,1243ENA_ADMIN_CONF_NOTIFICATIONS = 6,1244ENA_ADMIN_DEVICE_REQUEST_RESET = 7,1245ENA_ADMIN_AENQ_GROUPS_NUM = 8,1246};12471248enum ena_admin_aenq_notification_syndrome {1249ENA_ADMIN_UPDATE_HINTS = 2,1250};12511252struct ena_admin_aenq_entry {1253struct ena_admin_aenq_common_desc aenq_common_desc;12541255/* command specific inline data */1256uint32_t inline_data_w4[12];1257};12581259struct ena_admin_aenq_link_change_desc {1260struct ena_admin_aenq_common_desc aenq_common_desc;12611262/* 0 : link_status */1263uint32_t flags;1264};12651266struct ena_admin_aenq_keep_alive_desc {1267struct ena_admin_aenq_common_desc aenq_common_desc;12681269uint32_t rx_drops_low;12701271uint32_t rx_drops_high;12721273uint32_t tx_drops_low;12741275uint32_t tx_drops_high;12761277uint32_t rx_overruns_low;12781279uint32_t rx_overruns_high;1280};12811282struct ena_admin_aenq_conf_notifications_desc {1283struct ena_admin_aenq_common_desc aenq_common_desc;12841285uint64_t notifications_bitmap;12861287uint64_t reserved;1288};12891290struct ena_admin_ena_mmio_req_read_less_resp {1291uint16_t req_id;12921293uint16_t reg_off;12941295/* value is valid when poll is cleared */1296uint32_t reg_val;1297};12981299struct ena_admin_phc_resp {1300/* Request Id, received from DB register */1301uint16_t req_id;13021303uint8_t reserved1[6];13041305/* PHC timestamp (nsec) */1306uint64_t timestamp;13071308uint8_t reserved2[8];13091310/* Timestamp error limit (nsec) */1311uint32_t error_bound;13121313/* Bit field of enum ena_admin_phc_error_flags */1314uint32_t error_flags;13151316uint8_t reserved3[32];1317};13181319/* aq_common_desc */1320#define ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0)1321#define ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK BIT(0)1322#define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT 11323#define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK BIT(1)1324#define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT 21325#define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK BIT(2)13261327/* sq */1328#define ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT 51329#define ENA_ADMIN_SQ_SQ_DIRECTION_MASK GENMASK(7, 5)13301331/* acq_common_desc */1332#define ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK GENMASK(11, 0)1333#define ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK BIT(0)13341335/* aq_create_sq_cmd */1336#define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT 51337#define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK GENMASK(7, 5)1338#define ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK GENMASK(3, 0)1339#define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT 41340#define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK GENMASK(6, 4)1341#define ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK BIT(0)13421343/* aq_create_cq_cmd */1344#define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT 51345#define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5)1346#define ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0)13471348/* get_set_feature_common_desc */1349#define ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK GENMASK(1, 0)13501351/* get_feature_link_desc */1352#define ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK BIT(0)1353#define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT 11354#define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK BIT(1)13551356/* feature_offload_desc */1357#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK BIT(0)1358#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT 11359#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK BIT(1)1360#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT 21361#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK BIT(2)1362#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT 31363#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK BIT(3)1364#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT 41365#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK BIT(4)1366#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT 51367#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK BIT(5)1368#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT 61369#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK BIT(6)1370#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT 71371#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK BIT(7)1372#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK BIT(0)1373#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT 11374#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK BIT(1)1375#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT 21376#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK BIT(2)1377#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT 31378#define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK BIT(3)13791380/* feature_rss_flow_hash_function */1381#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK GENMASK(7, 0)1382#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK GENMASK(7, 0)13831384/* feature_rss_flow_hash_input */1385#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT 11386#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK BIT(1)1387#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT 21388#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK BIT(2)1389#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT 11390#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK BIT(1)1391#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT 21392#define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK BIT(2)13931394/* host_info */1395#define ENA_ADMIN_HOST_INFO_MAJOR_MASK GENMASK(7, 0)1396#define ENA_ADMIN_HOST_INFO_MINOR_SHIFT 81397#define ENA_ADMIN_HOST_INFO_MINOR_MASK GENMASK(15, 8)1398#define ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT 161399#define ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK GENMASK(23, 16)1400#define ENA_ADMIN_HOST_INFO_MODULE_TYPE_SHIFT 241401#define ENA_ADMIN_HOST_INFO_MODULE_TYPE_MASK GENMASK(31, 24)1402#define ENA_ADMIN_HOST_INFO_FUNCTION_MASK GENMASK(2, 0)1403#define ENA_ADMIN_HOST_INFO_DEVICE_SHIFT 31404#define ENA_ADMIN_HOST_INFO_DEVICE_MASK GENMASK(7, 3)1405#define ENA_ADMIN_HOST_INFO_BUS_SHIFT 81406#define ENA_ADMIN_HOST_INFO_BUS_MASK GENMASK(15, 8)1407#define ENA_ADMIN_HOST_INFO_RX_OFFSET_SHIFT 11408#define ENA_ADMIN_HOST_INFO_RX_OFFSET_MASK BIT(1)1409#define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_SHIFT 21410#define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK BIT(2)1411#define ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_SHIFT 31412#define ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_MASK BIT(3)1413#define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT 41414#define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK BIT(4)1415#define ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_SHIFT 61416#define ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_MASK BIT(6)1417#define ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_SHIFT 71418#define ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_MASK BIT(7)1419#define ENA_ADMIN_HOST_INFO_PHC_SHIFT 81420#define ENA_ADMIN_HOST_INFO_PHC_MASK BIT(8)14211422/* feature_rss_ind_table */1423#define ENA_ADMIN_FEATURE_RSS_IND_TABLE_ONE_ENTRY_UPDATE_MASK BIT(0)14241425/* aenq_common_desc */1426#define ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK BIT(0)14271428/* aenq_link_change_desc */1429#define ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK BIT(0)14301431#if !defined(DEFS_LINUX_MAINLINE)1432static inline uint16_t get_ena_admin_aq_common_desc_command_id(const struct ena_admin_aq_common_desc *p)1433{1434return p->command_id & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;1435}14361437static inline void set_ena_admin_aq_common_desc_command_id(struct ena_admin_aq_common_desc *p, uint16_t val)1438{1439p->command_id |= val & ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK;1440}14411442static inline uint8_t get_ena_admin_aq_common_desc_phase(const struct ena_admin_aq_common_desc *p)1443{1444return p->flags & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK;1445}14461447static inline void set_ena_admin_aq_common_desc_phase(struct ena_admin_aq_common_desc *p, uint8_t val)1448{1449p->flags |= val & ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK;1450}14511452static inline uint8_t get_ena_admin_aq_common_desc_ctrl_data(const struct ena_admin_aq_common_desc *p)1453{1454return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK) >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT;1455}14561457static inline void set_ena_admin_aq_common_desc_ctrl_data(struct ena_admin_aq_common_desc *p, uint8_t val)1458{1459p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT) & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK;1460}14611462static inline uint8_t get_ena_admin_aq_common_desc_ctrl_data_indirect(const struct ena_admin_aq_common_desc *p)1463{1464return (p->flags & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK) >> ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT;1465}14661467static inline void set_ena_admin_aq_common_desc_ctrl_data_indirect(struct ena_admin_aq_common_desc *p, uint8_t val)1468{1469p->flags |= (val << ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT) & ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK;1470}14711472static inline uint8_t get_ena_admin_sq_sq_direction(const struct ena_admin_sq *p)1473{1474return (p->sq_identity & ENA_ADMIN_SQ_SQ_DIRECTION_MASK) >> ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT;1475}14761477static inline void set_ena_admin_sq_sq_direction(struct ena_admin_sq *p, uint8_t val)1478{1479p->sq_identity |= (val << ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT) & ENA_ADMIN_SQ_SQ_DIRECTION_MASK;1480}14811482static inline uint16_t get_ena_admin_acq_common_desc_command_id(const struct ena_admin_acq_common_desc *p)1483{1484return p->command & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK;1485}14861487static inline void set_ena_admin_acq_common_desc_command_id(struct ena_admin_acq_common_desc *p, uint16_t val)1488{1489p->command |= val & ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK;1490}14911492static inline uint8_t get_ena_admin_acq_common_desc_phase(const struct ena_admin_acq_common_desc *p)1493{1494return p->flags & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK;1495}14961497static inline void set_ena_admin_acq_common_desc_phase(struct ena_admin_acq_common_desc *p, uint8_t val)1498{1499p->flags |= val & ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK;1500}15011502static inline uint8_t get_ena_admin_aq_create_sq_cmd_sq_direction(const struct ena_admin_aq_create_sq_cmd *p)1503{1504return (p->sq_identity & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK) >> ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT;1505}15061507static inline void set_ena_admin_aq_create_sq_cmd_sq_direction(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)1508{1509p->sq_identity |= (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT) & ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK;1510}15111512static inline uint8_t get_ena_admin_aq_create_sq_cmd_placement_policy(const struct ena_admin_aq_create_sq_cmd *p)1513{1514return p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK;1515}15161517static inline void set_ena_admin_aq_create_sq_cmd_placement_policy(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)1518{1519p->sq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK;1520}15211522static inline uint8_t get_ena_admin_aq_create_sq_cmd_completion_policy(const struct ena_admin_aq_create_sq_cmd *p)1523{1524return (p->sq_caps_2 & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK) >> ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT;1525}15261527static inline void set_ena_admin_aq_create_sq_cmd_completion_policy(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)1528{1529p->sq_caps_2 |= (val << ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT) & ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK;1530}15311532static inline uint8_t get_ena_admin_aq_create_sq_cmd_is_physically_contiguous(const struct ena_admin_aq_create_sq_cmd *p)1533{1534return p->sq_caps_3 & ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK;1535}15361537static inline void set_ena_admin_aq_create_sq_cmd_is_physically_contiguous(struct ena_admin_aq_create_sq_cmd *p, uint8_t val)1538{1539p->sq_caps_3 |= val & ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK;1540}15411542static inline uint8_t get_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(const struct ena_admin_aq_create_cq_cmd *p)1543{1544return (p->cq_caps_1 & ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK) >> ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT;1545}15461547static inline void set_ena_admin_aq_create_cq_cmd_interrupt_mode_enabled(struct ena_admin_aq_create_cq_cmd *p, uint8_t val)1548{1549p->cq_caps_1 |= (val << ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT) & ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK;1550}15511552static inline uint8_t get_ena_admin_aq_create_cq_cmd_cq_entry_size_words(const struct ena_admin_aq_create_cq_cmd *p)1553{1554return p->cq_caps_2 & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK;1555}15561557static inline void set_ena_admin_aq_create_cq_cmd_cq_entry_size_words(struct ena_admin_aq_create_cq_cmd *p, uint8_t val)1558{1559p->cq_caps_2 |= val & ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK;1560}15611562static inline uint8_t get_ena_admin_get_set_feature_common_desc_select(const struct ena_admin_get_set_feature_common_desc *p)1563{1564return p->flags & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK;1565}15661567static inline void set_ena_admin_get_set_feature_common_desc_select(struct ena_admin_get_set_feature_common_desc *p, uint8_t val)1568{1569p->flags |= val & ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK;1570}15711572static inline uint32_t get_ena_admin_get_feature_link_desc_autoneg(const struct ena_admin_get_feature_link_desc *p)1573{1574return p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK;1575}15761577static inline void set_ena_admin_get_feature_link_desc_autoneg(struct ena_admin_get_feature_link_desc *p, uint32_t val)1578{1579p->flags |= val & ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK;1580}15811582static inline uint32_t get_ena_admin_get_feature_link_desc_duplex(const struct ena_admin_get_feature_link_desc *p)1583{1584return (p->flags & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK) >> ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT;1585}15861587static inline void set_ena_admin_get_feature_link_desc_duplex(struct ena_admin_get_feature_link_desc *p, uint32_t val)1588{1589p->flags |= (val << ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT) & ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK;1590}15911592static inline uint32_t get_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc *p)1593{1594return p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK;1595}15961597static inline void set_ena_admin_feature_offload_desc_TX_L3_csum_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)1598{1599p->tx |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK;1600}16011602static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(const struct ena_admin_feature_offload_desc *p)1603{1604return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT;1605}16061607static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_part(struct ena_admin_feature_offload_desc *p, uint32_t val)1608{1609p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK;1610}16111612static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(const struct ena_admin_feature_offload_desc *p)1613{1614return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT;1615}16161617static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv4_csum_full(struct ena_admin_feature_offload_desc *p, uint32_t val)1618{1619p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK;1620}16211622static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(const struct ena_admin_feature_offload_desc *p)1623{1624return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT;1625}16261627static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_part(struct ena_admin_feature_offload_desc *p, uint32_t val)1628{1629p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK;1630}16311632static inline uint32_t get_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(const struct ena_admin_feature_offload_desc *p)1633{1634return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT;1635}16361637static inline void set_ena_admin_feature_offload_desc_TX_L4_ipv6_csum_full(struct ena_admin_feature_offload_desc *p, uint32_t val)1638{1639p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK;1640}16411642static inline uint32_t get_ena_admin_feature_offload_desc_tso_ipv4(const struct ena_admin_feature_offload_desc *p)1643{1644return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT;1645}16461647static inline void set_ena_admin_feature_offload_desc_tso_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)1648{1649p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK;1650}16511652static inline uint32_t get_ena_admin_feature_offload_desc_tso_ipv6(const struct ena_admin_feature_offload_desc *p)1653{1654return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT;1655}16561657static inline void set_ena_admin_feature_offload_desc_tso_ipv6(struct ena_admin_feature_offload_desc *p, uint32_t val)1658{1659p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK;1660}16611662static inline uint32_t get_ena_admin_feature_offload_desc_tso_ecn(const struct ena_admin_feature_offload_desc *p)1663{1664return (p->tx & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT;1665}16661667static inline void set_ena_admin_feature_offload_desc_tso_ecn(struct ena_admin_feature_offload_desc *p, uint32_t val)1668{1669p->tx |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK;1670}16711672static inline uint32_t get_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(const struct ena_admin_feature_offload_desc *p)1673{1674return p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK;1675}16761677static inline void set_ena_admin_feature_offload_desc_RX_L3_csum_ipv4(struct ena_admin_feature_offload_desc *p, uint32_t val)1678{1679p->rx_supported |= val & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK;1680}16811682static inline uint32_t get_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(const struct ena_admin_feature_offload_desc *p)1683{1684return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT;1685}16861687static inline void set_ena_admin_feature_offload_desc_RX_L4_ipv4_csum(struct ena_admin_feature_offload_desc *p, uint32_t val)1688{1689p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK;1690}16911692static inline uint32_t get_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(const struct ena_admin_feature_offload_desc *p)1693{1694return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT;1695}16961697static inline void set_ena_admin_feature_offload_desc_RX_L4_ipv6_csum(struct ena_admin_feature_offload_desc *p, uint32_t val)1698{1699p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK;1700}17011702static inline uint32_t get_ena_admin_feature_offload_desc_RX_hash(const struct ena_admin_feature_offload_desc *p)1703{1704return (p->rx_supported & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK) >> ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT;1705}17061707static inline void set_ena_admin_feature_offload_desc_RX_hash(struct ena_admin_feature_offload_desc *p, uint32_t val)1708{1709p->rx_supported |= (val << ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT) & ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK;1710}17111712static inline uint32_t get_ena_admin_feature_rss_flow_hash_function_funcs(const struct ena_admin_feature_rss_flow_hash_function *p)1713{1714return p->supported_func & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK;1715}17161717static inline void set_ena_admin_feature_rss_flow_hash_function_funcs(struct ena_admin_feature_rss_flow_hash_function *p, uint32_t val)1718{1719p->supported_func |= val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK;1720}17211722static inline uint32_t get_ena_admin_feature_rss_flow_hash_function_selected_func(const struct ena_admin_feature_rss_flow_hash_function *p)1723{1724return p->selected_func & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK;1725}17261727static inline void set_ena_admin_feature_rss_flow_hash_function_selected_func(struct ena_admin_feature_rss_flow_hash_function *p, uint32_t val)1728{1729p->selected_func |= val & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK;1730}17311732static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_L3_sort(const struct ena_admin_feature_rss_flow_hash_input *p)1733{1734return (p->supported_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT;1735}17361737static inline void set_ena_admin_feature_rss_flow_hash_input_L3_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val)1738{1739p->supported_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK;1740}17411742static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_L4_sort(const struct ena_admin_feature_rss_flow_hash_input *p)1743{1744return (p->supported_input_sort & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK) >> ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT;1745}17461747static inline void set_ena_admin_feature_rss_flow_hash_input_L4_sort(struct ena_admin_feature_rss_flow_hash_input *p, uint16_t val)1748{1749p->supported_input_sort |= (val << ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT) & ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK;1750}17511752static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_enable_L3_sort(const struct ena_admin_feature_rss_flow_hash_input *p)1753{1754return (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;1755}17561757static 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)1758{1759p->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;1760}17611762static inline uint16_t get_ena_admin_feature_rss_flow_hash_input_enable_L4_sort(const struct ena_admin_feature_rss_flow_hash_input *p)1763{1764return (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;1765}17661767static 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)1768{1769p->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;1770}17711772static inline uint32_t get_ena_admin_host_info_major(const struct ena_admin_host_info *p)1773{1774return p->driver_version & ENA_ADMIN_HOST_INFO_MAJOR_MASK;1775}17761777static inline void set_ena_admin_host_info_major(struct ena_admin_host_info *p, uint32_t val)1778{1779p->driver_version |= val & ENA_ADMIN_HOST_INFO_MAJOR_MASK;1780}17811782static inline uint32_t get_ena_admin_host_info_minor(const struct ena_admin_host_info *p)1783{1784return (p->driver_version & ENA_ADMIN_HOST_INFO_MINOR_MASK) >> ENA_ADMIN_HOST_INFO_MINOR_SHIFT;1785}17861787static inline void set_ena_admin_host_info_minor(struct ena_admin_host_info *p, uint32_t val)1788{1789p->driver_version |= (val << ENA_ADMIN_HOST_INFO_MINOR_SHIFT) & ENA_ADMIN_HOST_INFO_MINOR_MASK;1790}17911792static inline uint32_t get_ena_admin_host_info_sub_minor(const struct ena_admin_host_info *p)1793{1794return (p->driver_version & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK) >> ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT;1795}17961797static inline void set_ena_admin_host_info_sub_minor(struct ena_admin_host_info *p, uint32_t val)1798{1799p->driver_version |= (val << ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT) & ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK;1800}18011802static inline uint32_t get_ena_admin_host_info_module_type(const struct ena_admin_host_info *p)1803{1804return (p->driver_version & ENA_ADMIN_HOST_INFO_MODULE_TYPE_MASK) >> ENA_ADMIN_HOST_INFO_MODULE_TYPE_SHIFT;1805}18061807static inline void set_ena_admin_host_info_module_type(struct ena_admin_host_info *p, uint32_t val)1808{1809p->driver_version |= (val << ENA_ADMIN_HOST_INFO_MODULE_TYPE_SHIFT) & ENA_ADMIN_HOST_INFO_MODULE_TYPE_MASK;1810}18111812static inline uint16_t get_ena_admin_host_info_function(const struct ena_admin_host_info *p)1813{1814return p->bdf & ENA_ADMIN_HOST_INFO_FUNCTION_MASK;1815}18161817static inline void set_ena_admin_host_info_function(struct ena_admin_host_info *p, uint16_t val)1818{1819p->bdf |= val & ENA_ADMIN_HOST_INFO_FUNCTION_MASK;1820}18211822static inline uint16_t get_ena_admin_host_info_device(const struct ena_admin_host_info *p)1823{1824return (p->bdf & ENA_ADMIN_HOST_INFO_DEVICE_MASK) >> ENA_ADMIN_HOST_INFO_DEVICE_SHIFT;1825}18261827static inline void set_ena_admin_host_info_device(struct ena_admin_host_info *p, uint16_t val)1828{1829p->bdf |= (val << ENA_ADMIN_HOST_INFO_DEVICE_SHIFT) & ENA_ADMIN_HOST_INFO_DEVICE_MASK;1830}18311832static inline uint16_t get_ena_admin_host_info_bus(const struct ena_admin_host_info *p)1833{1834return (p->bdf & ENA_ADMIN_HOST_INFO_BUS_MASK) >> ENA_ADMIN_HOST_INFO_BUS_SHIFT;1835}18361837static inline void set_ena_admin_host_info_bus(struct ena_admin_host_info *p, uint16_t val)1838{1839p->bdf |= (val << ENA_ADMIN_HOST_INFO_BUS_SHIFT) & ENA_ADMIN_HOST_INFO_BUS_MASK;1840}18411842static inline uint32_t get_ena_admin_host_info_rx_offset(const struct ena_admin_host_info *p)1843{1844return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RX_OFFSET_MASK) >> ENA_ADMIN_HOST_INFO_RX_OFFSET_SHIFT;1845}18461847static inline void set_ena_admin_host_info_rx_offset(struct ena_admin_host_info *p, uint32_t val)1848{1849p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RX_OFFSET_SHIFT) & ENA_ADMIN_HOST_INFO_RX_OFFSET_MASK;1850}18511852static inline uint32_t get_ena_admin_host_info_interrupt_moderation(const struct ena_admin_host_info *p)1853{1854return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK) >> ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_SHIFT;1855}18561857static inline void set_ena_admin_host_info_interrupt_moderation(struct ena_admin_host_info *p, uint32_t val)1858{1859p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_SHIFT) & ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK;1860}18611862static inline uint32_t get_ena_admin_host_info_rx_buf_mirroring(const struct ena_admin_host_info *p)1863{1864return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_MASK) >> ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_SHIFT;1865}18661867static inline void set_ena_admin_host_info_rx_buf_mirroring(struct ena_admin_host_info *p, uint32_t val)1868{1869p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_SHIFT) & ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_MASK;1870}18711872static inline uint32_t get_ena_admin_host_info_rss_configurable_function_key(const struct ena_admin_host_info *p)1873{1874return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK) >> ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT;1875}18761877static inline void set_ena_admin_host_info_rss_configurable_function_key(struct ena_admin_host_info *p, uint32_t val)1878{1879p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT) & ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK;1880}18811882static inline uint32_t get_ena_admin_host_info_rx_page_reuse(const struct ena_admin_host_info *p)1883{1884return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_MASK) >> ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_SHIFT;1885}18861887static inline void set_ena_admin_host_info_rx_page_reuse(struct ena_admin_host_info *p, uint32_t val)1888{1889p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_SHIFT) & ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_MASK;1890}18911892static inline uint32_t get_ena_admin_host_info_tx_ipv6_csum_offload(const struct ena_admin_host_info *p)1893{1894return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_MASK) >> ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_SHIFT;1895}18961897static inline void set_ena_admin_host_info_tx_ipv6_csum_offload(struct ena_admin_host_info *p, uint32_t val)1898{1899p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_SHIFT) & ENA_ADMIN_HOST_INFO_TX_IPV6_CSUM_OFFLOAD_MASK;1900}19011902static inline uint8_t get_ena_admin_feature_rss_ind_table_one_entry_update(const struct ena_admin_feature_rss_ind_table *p)1903{1904return p->flags & ENA_ADMIN_FEATURE_RSS_IND_TABLE_ONE_ENTRY_UPDATE_MASK;1905}19061907static inline void set_ena_admin_feature_rss_ind_table_one_entry_update(struct ena_admin_feature_rss_ind_table *p, uint8_t val)1908{1909p->flags |= val & ENA_ADMIN_FEATURE_RSS_IND_TABLE_ONE_ENTRY_UPDATE_MASK;1910}19111912static inline uint32_t get_ena_admin_host_info_phc(const struct ena_admin_host_info *p)1913{1914return (p->driver_supported_features & ENA_ADMIN_HOST_INFO_PHC_MASK) >> ENA_ADMIN_HOST_INFO_PHC_SHIFT;1915}19161917static inline void set_ena_admin_host_info_phc(struct ena_admin_host_info *p, uint32_t val)1918{1919p->driver_supported_features |= (val << ENA_ADMIN_HOST_INFO_PHC_SHIFT) & ENA_ADMIN_HOST_INFO_PHC_MASK;1920}19211922static inline uint8_t get_ena_admin_aenq_common_desc_phase(const struct ena_admin_aenq_common_desc *p)1923{1924return p->flags & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK;1925}19261927static inline void set_ena_admin_aenq_common_desc_phase(struct ena_admin_aenq_common_desc *p, uint8_t val)1928{1929p->flags |= val & ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK;1930}19311932static inline uint32_t get_ena_admin_aenq_link_change_desc_link_status(const struct ena_admin_aenq_link_change_desc *p)1933{1934return p->flags & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK;1935}19361937static inline void set_ena_admin_aenq_link_change_desc_link_status(struct ena_admin_aenq_link_change_desc *p, uint32_t val)1938{1939p->flags |= val & ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK;1940}19411942#endif /* !defined(DEFS_LINUX_MAINLINE) */1943#endif /* _ENA_ADMIN_H_ */194419451946