xref: /openbmc/linux/drivers/net/ethernet/amazon/ena/ena_admin_defs.h (revision 2612e3bbc0386368a850140a6c9b990cd496a5ec)
12246cbc2SShay Agroskin /* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */
21738cd3eSNetanel Belgazal /*
32246cbc2SShay Agroskin  * Copyright 2015-2020 Amazon.com, Inc. or its affiliates. All rights reserved.
41738cd3eSNetanel Belgazal  */
51738cd3eSNetanel Belgazal #ifndef _ENA_ADMIN_H_
61738cd3eSNetanel Belgazal #define _ENA_ADMIN_H_
71738cd3eSNetanel Belgazal 
80deca83fSShay Agroskin #define ENA_ADMIN_RSS_KEY_PARTS              10
9be26667cSArthur Kiyanovski 
101738cd3eSNetanel Belgazal enum ena_admin_aq_opcode {
111738cd3eSNetanel Belgazal 	ENA_ADMIN_CREATE_SQ                         = 1,
121738cd3eSNetanel Belgazal 	ENA_ADMIN_DESTROY_SQ                        = 2,
131738cd3eSNetanel Belgazal 	ENA_ADMIN_CREATE_CQ                         = 3,
141738cd3eSNetanel Belgazal 	ENA_ADMIN_DESTROY_CQ                        = 4,
151738cd3eSNetanel Belgazal 	ENA_ADMIN_GET_FEATURE                       = 8,
161738cd3eSNetanel Belgazal 	ENA_ADMIN_SET_FEATURE                       = 9,
171738cd3eSNetanel Belgazal 	ENA_ADMIN_GET_STATS                         = 11,
181738cd3eSNetanel Belgazal };
191738cd3eSNetanel Belgazal 
201738cd3eSNetanel Belgazal enum ena_admin_aq_completion_status {
211738cd3eSNetanel Belgazal 	ENA_ADMIN_SUCCESS                           = 0,
221738cd3eSNetanel Belgazal 	ENA_ADMIN_RESOURCE_ALLOCATION_FAILURE       = 1,
231738cd3eSNetanel Belgazal 	ENA_ADMIN_BAD_OPCODE                        = 2,
241738cd3eSNetanel Belgazal 	ENA_ADMIN_UNSUPPORTED_OPCODE                = 3,
251738cd3eSNetanel Belgazal 	ENA_ADMIN_MALFORMED_REQUEST                 = 4,
261738cd3eSNetanel Belgazal 	/* Additional status is provided in ACQ entry extended_status */
271738cd3eSNetanel Belgazal 	ENA_ADMIN_ILLEGAL_PARAMETER                 = 5,
281738cd3eSNetanel Belgazal 	ENA_ADMIN_UNKNOWN_ERROR                     = 6,
29095f2f1fSArthur Kiyanovski 	ENA_ADMIN_RESOURCE_BUSY                     = 7,
301738cd3eSNetanel Belgazal };
311738cd3eSNetanel Belgazal 
32bf2746e8SShay Agroskin /* subcommands for the set/get feature admin commands */
331738cd3eSNetanel Belgazal enum ena_admin_aq_feature_id {
341738cd3eSNetanel Belgazal 	ENA_ADMIN_DEVICE_ATTRIBUTES                 = 1,
351738cd3eSNetanel Belgazal 	ENA_ADMIN_MAX_QUEUES_NUM                    = 2,
3682ef30f1SNetanel Belgazal 	ENA_ADMIN_HW_HINTS                          = 3,
37a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LLQ                               = 4,
38ba8ef506SArthur Kiyanovski 	ENA_ADMIN_MAX_QUEUES_EXT                    = 7,
391738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_HASH_FUNCTION                 = 10,
401738cd3eSNetanel Belgazal 	ENA_ADMIN_STATELESS_OFFLOAD_CONFIG          = 11,
410deca83fSShay Agroskin 	ENA_ADMIN_RSS_INDIRECTION_TABLE_CONFIG      = 12,
421738cd3eSNetanel Belgazal 	ENA_ADMIN_MTU                               = 14,
431738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_HASH_INPUT                    = 18,
441738cd3eSNetanel Belgazal 	ENA_ADMIN_INTERRUPT_MODERATION              = 20,
451738cd3eSNetanel Belgazal 	ENA_ADMIN_AENQ_CONFIG                       = 26,
461738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_CONFIG                       = 27,
471738cd3eSNetanel Belgazal 	ENA_ADMIN_HOST_ATTR_CONFIG                  = 28,
481738cd3eSNetanel Belgazal 	ENA_ADMIN_FEATURES_OPCODE_NUM               = 32,
491738cd3eSNetanel Belgazal };
501738cd3eSNetanel Belgazal 
51a2d5d6a7SArthur Kiyanovski /* device capabilities */
52a2d5d6a7SArthur Kiyanovski enum ena_admin_aq_caps_id {
53a2d5d6a7SArthur Kiyanovski 	ENA_ADMIN_ENI_STATS                         = 0,
54a2d5d6a7SArthur Kiyanovski };
55a2d5d6a7SArthur Kiyanovski 
561738cd3eSNetanel Belgazal enum ena_admin_placement_policy_type {
571738cd3eSNetanel Belgazal 	/* descriptors and headers are in host memory */
581738cd3eSNetanel Belgazal 	ENA_ADMIN_PLACEMENT_POLICY_HOST             = 1,
591738cd3eSNetanel Belgazal 	/* descriptors and headers are in device memory (a.k.a Low Latency
601738cd3eSNetanel Belgazal 	 * Queue)
611738cd3eSNetanel Belgazal 	 */
621738cd3eSNetanel Belgazal 	ENA_ADMIN_PLACEMENT_POLICY_DEV              = 3,
631738cd3eSNetanel Belgazal };
641738cd3eSNetanel Belgazal 
651738cd3eSNetanel Belgazal enum ena_admin_link_types {
661738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_1G                     = 0x1,
671738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_2_HALF_G               = 0x2,
681738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_5G                     = 0x4,
691738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_10G                    = 0x8,
701738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_25G                    = 0x10,
711738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_40G                    = 0x20,
721738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_50G                    = 0x40,
731738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_100G                   = 0x80,
741738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_200G                   = 0x100,
751738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_SPEED_400G                   = 0x200,
761738cd3eSNetanel Belgazal };
771738cd3eSNetanel Belgazal 
781738cd3eSNetanel Belgazal enum ena_admin_completion_policy_type {
791738cd3eSNetanel Belgazal 	/* completion queue entry for each sq descriptor */
801738cd3eSNetanel Belgazal 	ENA_ADMIN_COMPLETION_POLICY_DESC            = 0,
811738cd3eSNetanel Belgazal 	/* completion queue entry upon request in sq descriptor */
821738cd3eSNetanel Belgazal 	ENA_ADMIN_COMPLETION_POLICY_DESC_ON_DEMAND  = 1,
831738cd3eSNetanel Belgazal 	/* current queue head pointer is updated in OS memory upon sq
841738cd3eSNetanel Belgazal 	 * descriptor request
851738cd3eSNetanel Belgazal 	 */
861738cd3eSNetanel Belgazal 	ENA_ADMIN_COMPLETION_POLICY_HEAD_ON_DEMAND  = 2,
871738cd3eSNetanel Belgazal 	/* current queue head pointer is updated in OS memory for each sq
881738cd3eSNetanel Belgazal 	 * descriptor
891738cd3eSNetanel Belgazal 	 */
901738cd3eSNetanel Belgazal 	ENA_ADMIN_COMPLETION_POLICY_HEAD            = 3,
911738cd3eSNetanel Belgazal };
921738cd3eSNetanel Belgazal 
931738cd3eSNetanel Belgazal /* basic stats return ena_admin_basic_stats while extanded stats return a
941738cd3eSNetanel Belgazal  * buffer (string format) with additional statistics per queue and per
951738cd3eSNetanel Belgazal  * device id
961738cd3eSNetanel Belgazal  */
971738cd3eSNetanel Belgazal enum ena_admin_get_stats_type {
981738cd3eSNetanel Belgazal 	ENA_ADMIN_GET_STATS_TYPE_BASIC              = 0,
991738cd3eSNetanel Belgazal 	ENA_ADMIN_GET_STATS_TYPE_EXTENDED           = 1,
100713865daSSameeh Jubran 	/* extra HW stats for specific network interface */
101713865daSSameeh Jubran 	ENA_ADMIN_GET_STATS_TYPE_ENI                = 2,
1021738cd3eSNetanel Belgazal };
1031738cd3eSNetanel Belgazal 
1041738cd3eSNetanel Belgazal enum ena_admin_get_stats_scope {
1051738cd3eSNetanel Belgazal 	ENA_ADMIN_SPECIFIC_QUEUE                    = 0,
1061738cd3eSNetanel Belgazal 	ENA_ADMIN_ETH_TRAFFIC                       = 1,
1071738cd3eSNetanel Belgazal };
1081738cd3eSNetanel Belgazal 
1091738cd3eSNetanel Belgazal struct ena_admin_aq_common_desc {
1101738cd3eSNetanel Belgazal 	/* 11:0 : command_id
1111738cd3eSNetanel Belgazal 	 * 15:12 : reserved12
1121738cd3eSNetanel Belgazal 	 */
1131738cd3eSNetanel Belgazal 	u16 command_id;
1141738cd3eSNetanel Belgazal 
1151738cd3eSNetanel Belgazal 	/* as appears in ena_admin_aq_opcode */
1161738cd3eSNetanel Belgazal 	u8 opcode;
1171738cd3eSNetanel Belgazal 
1181738cd3eSNetanel Belgazal 	/* 0 : phase
1191738cd3eSNetanel Belgazal 	 * 1 : ctrl_data - control buffer address valid
1201738cd3eSNetanel Belgazal 	 * 2 : ctrl_data_indirect - control buffer address
1211738cd3eSNetanel Belgazal 	 *    points to list of pages with addresses of control
1221738cd3eSNetanel Belgazal 	 *    buffers
1231738cd3eSNetanel Belgazal 	 * 7:3 : reserved3
1241738cd3eSNetanel Belgazal 	 */
1251738cd3eSNetanel Belgazal 	u8 flags;
1261738cd3eSNetanel Belgazal };
1271738cd3eSNetanel Belgazal 
1281738cd3eSNetanel Belgazal /* used in ena_admin_aq_entry. Can point directly to control data, or to a
1291738cd3eSNetanel Belgazal  * page list chunk. Used also at the end of indirect mode page list chunks,
1301738cd3eSNetanel Belgazal  * for chaining.
1311738cd3eSNetanel Belgazal  */
1321738cd3eSNetanel Belgazal struct ena_admin_ctrl_buff_info {
1331738cd3eSNetanel Belgazal 	u32 length;
1341738cd3eSNetanel Belgazal 
1351738cd3eSNetanel Belgazal 	struct ena_common_mem_addr address;
1361738cd3eSNetanel Belgazal };
1371738cd3eSNetanel Belgazal 
1381738cd3eSNetanel Belgazal struct ena_admin_sq {
1391738cd3eSNetanel Belgazal 	u16 sq_idx;
1401738cd3eSNetanel Belgazal 
1411738cd3eSNetanel Belgazal 	/* 4:0 : reserved
1421738cd3eSNetanel Belgazal 	 * 7:5 : sq_direction - 0x1 - Tx; 0x2 - Rx
1431738cd3eSNetanel Belgazal 	 */
1441738cd3eSNetanel Belgazal 	u8 sq_identity;
1451738cd3eSNetanel Belgazal 
1461738cd3eSNetanel Belgazal 	u8 reserved1;
1471738cd3eSNetanel Belgazal };
1481738cd3eSNetanel Belgazal 
1491738cd3eSNetanel Belgazal struct ena_admin_aq_entry {
1501738cd3eSNetanel Belgazal 	struct ena_admin_aq_common_desc aq_common_descriptor;
1511738cd3eSNetanel Belgazal 
1521738cd3eSNetanel Belgazal 	union {
1531738cd3eSNetanel Belgazal 		u32 inline_data_w1[3];
1541738cd3eSNetanel Belgazal 
1551738cd3eSNetanel Belgazal 		struct ena_admin_ctrl_buff_info control_buffer;
1561738cd3eSNetanel Belgazal 	} u;
1571738cd3eSNetanel Belgazal 
1581738cd3eSNetanel Belgazal 	u32 inline_data_w4[12];
1591738cd3eSNetanel Belgazal };
1601738cd3eSNetanel Belgazal 
1611738cd3eSNetanel Belgazal struct ena_admin_acq_common_desc {
1621738cd3eSNetanel Belgazal 	/* command identifier to associate it with the aq descriptor
1631738cd3eSNetanel Belgazal 	 * 11:0 : command_id
1641738cd3eSNetanel Belgazal 	 * 15:12 : reserved12
1651738cd3eSNetanel Belgazal 	 */
1661738cd3eSNetanel Belgazal 	u16 command;
1671738cd3eSNetanel Belgazal 
1681738cd3eSNetanel Belgazal 	u8 status;
1691738cd3eSNetanel Belgazal 
1701738cd3eSNetanel Belgazal 	/* 0 : phase
1711738cd3eSNetanel Belgazal 	 * 7:1 : reserved1
1721738cd3eSNetanel Belgazal 	 */
1731738cd3eSNetanel Belgazal 	u8 flags;
1741738cd3eSNetanel Belgazal 
1751738cd3eSNetanel Belgazal 	u16 extended_status;
1761738cd3eSNetanel Belgazal 
177be26667cSArthur Kiyanovski 	/* indicates to the driver which AQ entry has been consumed by the
178be26667cSArthur Kiyanovski 	 * device and could be reused
179be26667cSArthur Kiyanovski 	 */
1801738cd3eSNetanel Belgazal 	u16 sq_head_indx;
1811738cd3eSNetanel Belgazal };
1821738cd3eSNetanel Belgazal 
1831738cd3eSNetanel Belgazal struct ena_admin_acq_entry {
1841738cd3eSNetanel Belgazal 	struct ena_admin_acq_common_desc acq_common_descriptor;
1851738cd3eSNetanel Belgazal 
1861738cd3eSNetanel Belgazal 	u32 response_specific_data[14];
1871738cd3eSNetanel Belgazal };
1881738cd3eSNetanel Belgazal 
1891738cd3eSNetanel Belgazal struct ena_admin_aq_create_sq_cmd {
1901738cd3eSNetanel Belgazal 	struct ena_admin_aq_common_desc aq_common_descriptor;
1911738cd3eSNetanel Belgazal 
1921738cd3eSNetanel Belgazal 	/* 4:0 : reserved0_w1
1931738cd3eSNetanel Belgazal 	 * 7:5 : sq_direction - 0x1 - Tx, 0x2 - Rx
1941738cd3eSNetanel Belgazal 	 */
1951738cd3eSNetanel Belgazal 	u8 sq_identity;
1961738cd3eSNetanel Belgazal 
1971738cd3eSNetanel Belgazal 	u8 reserved8_w1;
1981738cd3eSNetanel Belgazal 
1991738cd3eSNetanel Belgazal 	/* 3:0 : placement_policy - Describing where the SQ
2001738cd3eSNetanel Belgazal 	 *    descriptor ring and the SQ packet headers reside:
2011738cd3eSNetanel Belgazal 	 *    0x1 - descriptors and headers are in OS memory,
2021738cd3eSNetanel Belgazal 	 *    0x3 - descriptors and headers in device memory
2031738cd3eSNetanel Belgazal 	 *    (a.k.a Low Latency Queue)
2041738cd3eSNetanel Belgazal 	 * 6:4 : completion_policy - Describing what policy
2051738cd3eSNetanel Belgazal 	 *    to use for generation completion entry (cqe) in
2061738cd3eSNetanel Belgazal 	 *    the CQ associated with this SQ: 0x0 - cqe for each
2071738cd3eSNetanel Belgazal 	 *    sq descriptor, 0x1 - cqe upon request in sq
2081738cd3eSNetanel Belgazal 	 *    descriptor, 0x2 - current queue head pointer is
2091738cd3eSNetanel Belgazal 	 *    updated in OS memory upon sq descriptor request
2101738cd3eSNetanel Belgazal 	 *    0x3 - current queue head pointer is updated in OS
2111738cd3eSNetanel Belgazal 	 *    memory for each sq descriptor
2121738cd3eSNetanel Belgazal 	 * 7 : reserved15_w1
2131738cd3eSNetanel Belgazal 	 */
2141738cd3eSNetanel Belgazal 	u8 sq_caps_2;
2151738cd3eSNetanel Belgazal 
2161738cd3eSNetanel Belgazal 	/* 0 : is_physically_contiguous - Described if the
2171738cd3eSNetanel Belgazal 	 *    queue ring memory is allocated in physical
2181738cd3eSNetanel Belgazal 	 *    contiguous pages or split.
2191738cd3eSNetanel Belgazal 	 * 7:1 : reserved17_w1
2201738cd3eSNetanel Belgazal 	 */
2211738cd3eSNetanel Belgazal 	u8 sq_caps_3;
2221738cd3eSNetanel Belgazal 
223bf2746e8SShay Agroskin 	/* associated completion queue id. This CQ must be created prior to SQ
224bf2746e8SShay Agroskin 	 * creation
2251738cd3eSNetanel Belgazal 	 */
2261738cd3eSNetanel Belgazal 	u16 cq_idx;
2271738cd3eSNetanel Belgazal 
2281738cd3eSNetanel Belgazal 	/* submission queue depth in entries */
2291738cd3eSNetanel Belgazal 	u16 sq_depth;
2301738cd3eSNetanel Belgazal 
2311738cd3eSNetanel Belgazal 	/* SQ physical base address in OS memory. This field should not be
2321738cd3eSNetanel Belgazal 	 * used for Low Latency queues. Has to be page aligned.
2331738cd3eSNetanel Belgazal 	 */
2341738cd3eSNetanel Belgazal 	struct ena_common_mem_addr sq_ba;
2351738cd3eSNetanel Belgazal 
2361738cd3eSNetanel Belgazal 	/* specifies queue head writeback location in OS memory. Valid if
2371738cd3eSNetanel Belgazal 	 * completion_policy is set to completion_policy_head_on_demand or
2381738cd3eSNetanel Belgazal 	 * completion_policy_head. Has to be cache aligned
2391738cd3eSNetanel Belgazal 	 */
2401738cd3eSNetanel Belgazal 	struct ena_common_mem_addr sq_head_writeback;
2411738cd3eSNetanel Belgazal 
2421738cd3eSNetanel Belgazal 	u32 reserved0_w7;
2431738cd3eSNetanel Belgazal 
2441738cd3eSNetanel Belgazal 	u32 reserved0_w8;
2451738cd3eSNetanel Belgazal };
2461738cd3eSNetanel Belgazal 
2471738cd3eSNetanel Belgazal enum ena_admin_sq_direction {
2481738cd3eSNetanel Belgazal 	ENA_ADMIN_SQ_DIRECTION_TX                   = 1,
2491738cd3eSNetanel Belgazal 	ENA_ADMIN_SQ_DIRECTION_RX                   = 2,
2501738cd3eSNetanel Belgazal };
2511738cd3eSNetanel Belgazal 
2521738cd3eSNetanel Belgazal struct ena_admin_acq_create_sq_resp_desc {
2531738cd3eSNetanel Belgazal 	struct ena_admin_acq_common_desc acq_common_desc;
2541738cd3eSNetanel Belgazal 
2551738cd3eSNetanel Belgazal 	u16 sq_idx;
2561738cd3eSNetanel Belgazal 
2571738cd3eSNetanel Belgazal 	u16 reserved;
2581738cd3eSNetanel Belgazal 
2591738cd3eSNetanel Belgazal 	/* queue doorbell address as an offset to PCIe MMIO REG BAR */
2601738cd3eSNetanel Belgazal 	u32 sq_doorbell_offset;
2611738cd3eSNetanel Belgazal 
2621738cd3eSNetanel Belgazal 	/* low latency queue ring base address as an offset to PCIe MMIO
2631738cd3eSNetanel Belgazal 	 * LLQ_MEM BAR
2641738cd3eSNetanel Belgazal 	 */
2651738cd3eSNetanel Belgazal 	u32 llq_descriptors_offset;
2661738cd3eSNetanel Belgazal 
2671738cd3eSNetanel Belgazal 	/* low latency queue headers' memory as an offset to PCIe MMIO
2681738cd3eSNetanel Belgazal 	 * LLQ_MEM BAR
2691738cd3eSNetanel Belgazal 	 */
2701738cd3eSNetanel Belgazal 	u32 llq_headers_offset;
2711738cd3eSNetanel Belgazal };
2721738cd3eSNetanel Belgazal 
2731738cd3eSNetanel Belgazal struct ena_admin_aq_destroy_sq_cmd {
2741738cd3eSNetanel Belgazal 	struct ena_admin_aq_common_desc aq_common_descriptor;
2751738cd3eSNetanel Belgazal 
2761738cd3eSNetanel Belgazal 	struct ena_admin_sq sq;
2771738cd3eSNetanel Belgazal };
2781738cd3eSNetanel Belgazal 
2791738cd3eSNetanel Belgazal struct ena_admin_acq_destroy_sq_resp_desc {
2801738cd3eSNetanel Belgazal 	struct ena_admin_acq_common_desc acq_common_desc;
2811738cd3eSNetanel Belgazal };
2821738cd3eSNetanel Belgazal 
2831738cd3eSNetanel Belgazal struct ena_admin_aq_create_cq_cmd {
2841738cd3eSNetanel Belgazal 	struct ena_admin_aq_common_desc aq_common_descriptor;
2851738cd3eSNetanel Belgazal 
2861738cd3eSNetanel Belgazal 	/* 4:0 : reserved5
2871738cd3eSNetanel Belgazal 	 * 5 : interrupt_mode_enabled - if set, cq operates
2881738cd3eSNetanel Belgazal 	 *    in interrupt mode, otherwise - polling
2891738cd3eSNetanel Belgazal 	 * 7:6 : reserved6
2901738cd3eSNetanel Belgazal 	 */
2911738cd3eSNetanel Belgazal 	u8 cq_caps_1;
2921738cd3eSNetanel Belgazal 
2931738cd3eSNetanel Belgazal 	/* 4:0 : cq_entry_size_words - size of CQ entry in
2941738cd3eSNetanel Belgazal 	 *    32-bit words, valid values: 4, 8.
2951738cd3eSNetanel Belgazal 	 * 7:5 : reserved7
2961738cd3eSNetanel Belgazal 	 */
2971738cd3eSNetanel Belgazal 	u8 cq_caps_2;
2981738cd3eSNetanel Belgazal 
2991738cd3eSNetanel Belgazal 	/* completion queue depth in # of entries. must be power of 2 */
3001738cd3eSNetanel Belgazal 	u16 cq_depth;
3011738cd3eSNetanel Belgazal 
3021738cd3eSNetanel Belgazal 	/* msix vector assigned to this cq */
3031738cd3eSNetanel Belgazal 	u32 msix_vector;
3041738cd3eSNetanel Belgazal 
3051738cd3eSNetanel Belgazal 	/* cq physical base address in OS memory. CQ must be physically
3061738cd3eSNetanel Belgazal 	 * contiguous
3071738cd3eSNetanel Belgazal 	 */
3081738cd3eSNetanel Belgazal 	struct ena_common_mem_addr cq_ba;
3091738cd3eSNetanel Belgazal };
3101738cd3eSNetanel Belgazal 
3111738cd3eSNetanel Belgazal struct ena_admin_acq_create_cq_resp_desc {
3121738cd3eSNetanel Belgazal 	struct ena_admin_acq_common_desc acq_common_desc;
3131738cd3eSNetanel Belgazal 
3141738cd3eSNetanel Belgazal 	u16 cq_idx;
3151738cd3eSNetanel Belgazal 
3161738cd3eSNetanel Belgazal 	/* actual cq depth in number of entries */
3171738cd3eSNetanel Belgazal 	u16 cq_actual_depth;
3181738cd3eSNetanel Belgazal 
3191738cd3eSNetanel Belgazal 	u32 numa_node_register_offset;
3201738cd3eSNetanel Belgazal 
3211738cd3eSNetanel Belgazal 	u32 cq_head_db_register_offset;
3221738cd3eSNetanel Belgazal 
3231738cd3eSNetanel Belgazal 	u32 cq_interrupt_unmask_register_offset;
3241738cd3eSNetanel Belgazal };
3251738cd3eSNetanel Belgazal 
3261738cd3eSNetanel Belgazal struct ena_admin_aq_destroy_cq_cmd {
3271738cd3eSNetanel Belgazal 	struct ena_admin_aq_common_desc aq_common_descriptor;
3281738cd3eSNetanel Belgazal 
3291738cd3eSNetanel Belgazal 	u16 cq_idx;
3301738cd3eSNetanel Belgazal 
3311738cd3eSNetanel Belgazal 	u16 reserved1;
3321738cd3eSNetanel Belgazal };
3331738cd3eSNetanel Belgazal 
3341738cd3eSNetanel Belgazal struct ena_admin_acq_destroy_cq_resp_desc {
3351738cd3eSNetanel Belgazal 	struct ena_admin_acq_common_desc acq_common_desc;
3361738cd3eSNetanel Belgazal };
3371738cd3eSNetanel Belgazal 
3381738cd3eSNetanel Belgazal /* ENA AQ Get Statistics command. Extended statistics are placed in control
3391738cd3eSNetanel Belgazal  * buffer pointed by AQ entry
3401738cd3eSNetanel Belgazal  */
3411738cd3eSNetanel Belgazal struct ena_admin_aq_get_stats_cmd {
3421738cd3eSNetanel Belgazal 	struct ena_admin_aq_common_desc aq_common_descriptor;
3431738cd3eSNetanel Belgazal 
3441738cd3eSNetanel Belgazal 	union {
3451738cd3eSNetanel Belgazal 		/* command specific inline data */
3461738cd3eSNetanel Belgazal 		u32 inline_data_w1[3];
3471738cd3eSNetanel Belgazal 
3481738cd3eSNetanel Belgazal 		struct ena_admin_ctrl_buff_info control_buffer;
3491738cd3eSNetanel Belgazal 	} u;
3501738cd3eSNetanel Belgazal 
3511738cd3eSNetanel Belgazal 	/* stats type as defined in enum ena_admin_get_stats_type */
3521738cd3eSNetanel Belgazal 	u8 type;
3531738cd3eSNetanel Belgazal 
3541738cd3eSNetanel Belgazal 	/* stats scope defined in enum ena_admin_get_stats_scope */
3551738cd3eSNetanel Belgazal 	u8 scope;
3561738cd3eSNetanel Belgazal 
3571738cd3eSNetanel Belgazal 	u16 reserved3;
3581738cd3eSNetanel Belgazal 
3591738cd3eSNetanel Belgazal 	/* queue id. used when scope is specific_queue */
3601738cd3eSNetanel Belgazal 	u16 queue_idx;
3611738cd3eSNetanel Belgazal 
3621738cd3eSNetanel Belgazal 	/* device id, value 0xFFFF means mine. only privileged device can get
3631738cd3eSNetanel Belgazal 	 * stats of other device
3641738cd3eSNetanel Belgazal 	 */
3651738cd3eSNetanel Belgazal 	u16 device_id;
3661738cd3eSNetanel Belgazal };
3671738cd3eSNetanel Belgazal 
3681738cd3eSNetanel Belgazal /* Basic Statistics Command. */
3691738cd3eSNetanel Belgazal struct ena_admin_basic_stats {
3701738cd3eSNetanel Belgazal 	u32 tx_bytes_low;
3711738cd3eSNetanel Belgazal 
3721738cd3eSNetanel Belgazal 	u32 tx_bytes_high;
3731738cd3eSNetanel Belgazal 
3741738cd3eSNetanel Belgazal 	u32 tx_pkts_low;
3751738cd3eSNetanel Belgazal 
3761738cd3eSNetanel Belgazal 	u32 tx_pkts_high;
3771738cd3eSNetanel Belgazal 
3781738cd3eSNetanel Belgazal 	u32 rx_bytes_low;
3791738cd3eSNetanel Belgazal 
3801738cd3eSNetanel Belgazal 	u32 rx_bytes_high;
3811738cd3eSNetanel Belgazal 
3821738cd3eSNetanel Belgazal 	u32 rx_pkts_low;
3831738cd3eSNetanel Belgazal 
3841738cd3eSNetanel Belgazal 	u32 rx_pkts_high;
3851738cd3eSNetanel Belgazal 
3861738cd3eSNetanel Belgazal 	u32 rx_drops_low;
3871738cd3eSNetanel Belgazal 
3881738cd3eSNetanel Belgazal 	u32 rx_drops_high;
3895c665f8cSSameeh Jubran 
3905c665f8cSSameeh Jubran 	u32 tx_drops_low;
3915c665f8cSSameeh Jubran 
3925c665f8cSSameeh Jubran 	u32 tx_drops_high;
3931738cd3eSNetanel Belgazal };
3941738cd3eSNetanel Belgazal 
395713865daSSameeh Jubran /* ENI Statistics Command. */
396713865daSSameeh Jubran struct ena_admin_eni_stats {
397713865daSSameeh Jubran 	/* The number of packets shaped due to inbound aggregate BW
398713865daSSameeh Jubran 	 * allowance being exceeded
399713865daSSameeh Jubran 	 */
400713865daSSameeh Jubran 	u64 bw_in_allowance_exceeded;
401713865daSSameeh Jubran 
402713865daSSameeh Jubran 	/* The number of packets shaped due to outbound aggregate BW
403713865daSSameeh Jubran 	 * allowance being exceeded
404713865daSSameeh Jubran 	 */
405713865daSSameeh Jubran 	u64 bw_out_allowance_exceeded;
406713865daSSameeh Jubran 
407713865daSSameeh Jubran 	/* The number of packets shaped due to PPS allowance being exceeded */
408713865daSSameeh Jubran 	u64 pps_allowance_exceeded;
409713865daSSameeh Jubran 
410713865daSSameeh Jubran 	/* The number of packets shaped due to connection tracking
411713865daSSameeh Jubran 	 * allowance being exceeded and leading to failure in establishment
412713865daSSameeh Jubran 	 * of new connections
413713865daSSameeh Jubran 	 */
414713865daSSameeh Jubran 	u64 conntrack_allowance_exceeded;
415713865daSSameeh Jubran 
416713865daSSameeh Jubran 	/* The number of packets shaped due to linklocal packet rate
417713865daSSameeh Jubran 	 * allowance being exceeded
418713865daSSameeh Jubran 	 */
419713865daSSameeh Jubran 	u64 linklocal_allowance_exceeded;
420713865daSSameeh Jubran };
421713865daSSameeh Jubran 
4221738cd3eSNetanel Belgazal struct ena_admin_acq_get_stats_resp {
4231738cd3eSNetanel Belgazal 	struct ena_admin_acq_common_desc acq_common_desc;
4241738cd3eSNetanel Belgazal 
425713865daSSameeh Jubran 	union {
426713865daSSameeh Jubran 		u64 raw[7];
427713865daSSameeh Jubran 
4281738cd3eSNetanel Belgazal 		struct ena_admin_basic_stats basic_stats;
429713865daSSameeh Jubran 
430713865daSSameeh Jubran 		struct ena_admin_eni_stats eni_stats;
431713865daSSameeh Jubran 	} u;
4321738cd3eSNetanel Belgazal };
4331738cd3eSNetanel Belgazal 
4341738cd3eSNetanel Belgazal struct ena_admin_get_set_feature_common_desc {
4351738cd3eSNetanel Belgazal 	/* 1:0 : select - 0x1 - current value; 0x3 - default
4361738cd3eSNetanel Belgazal 	 *    value
4371738cd3eSNetanel Belgazal 	 * 7:3 : reserved3
4381738cd3eSNetanel Belgazal 	 */
4391738cd3eSNetanel Belgazal 	u8 flags;
4401738cd3eSNetanel Belgazal 
4411738cd3eSNetanel Belgazal 	/* as appears in ena_admin_aq_feature_id */
4421738cd3eSNetanel Belgazal 	u8 feature_id;
4431738cd3eSNetanel Belgazal 
444ba8ef506SArthur Kiyanovski 	/* The driver specifies the max feature version it supports and the
445ba8ef506SArthur Kiyanovski 	 * device responds with the currently supported feature version. The
446ba8ef506SArthur Kiyanovski 	 * field is zero based
447ba8ef506SArthur Kiyanovski 	 */
448ba8ef506SArthur Kiyanovski 	u8 feature_version;
449ba8ef506SArthur Kiyanovski 
450ba8ef506SArthur Kiyanovski 	u8 reserved8;
4511738cd3eSNetanel Belgazal };
4521738cd3eSNetanel Belgazal 
4531738cd3eSNetanel Belgazal struct ena_admin_device_attr_feature_desc {
4541738cd3eSNetanel Belgazal 	u32 impl_id;
4551738cd3eSNetanel Belgazal 
4561738cd3eSNetanel Belgazal 	u32 device_version;
4571738cd3eSNetanel Belgazal 
458bf2746e8SShay Agroskin 	/* bitmap of ena_admin_aq_feature_id, which represents supported
459bf2746e8SShay Agroskin 	 * subcommands for the set/get feature admin commands.
460bf2746e8SShay Agroskin 	 */
4611738cd3eSNetanel Belgazal 	u32 supported_features;
4621738cd3eSNetanel Belgazal 
463a2d5d6a7SArthur Kiyanovski 	/* bitmap of ena_admin_aq_caps_id, which represents device
464a2d5d6a7SArthur Kiyanovski 	 * capabilities.
465a2d5d6a7SArthur Kiyanovski 	 */
466a2d5d6a7SArthur Kiyanovski 	u32 capabilities;
4671738cd3eSNetanel Belgazal 
4681738cd3eSNetanel Belgazal 	/* Indicates how many bits are used physical address access. */
4691738cd3eSNetanel Belgazal 	u32 phys_addr_width;
4701738cd3eSNetanel Belgazal 
4711738cd3eSNetanel Belgazal 	/* Indicates how many bits are used virtual address access. */
4721738cd3eSNetanel Belgazal 	u32 virt_addr_width;
4731738cd3eSNetanel Belgazal 
4741738cd3eSNetanel Belgazal 	/* unicast MAC address (in Network byte order) */
4751738cd3eSNetanel Belgazal 	u8 mac_addr[6];
4761738cd3eSNetanel Belgazal 
4771738cd3eSNetanel Belgazal 	u8 reserved7[2];
4781738cd3eSNetanel Belgazal 
4791738cd3eSNetanel Belgazal 	u32 max_mtu;
4801738cd3eSNetanel Belgazal };
4811738cd3eSNetanel Belgazal 
482a7982b8eSArthur Kiyanovski enum ena_admin_llq_header_location {
483a7982b8eSArthur Kiyanovski 	/* header is in descriptor list */
484a7982b8eSArthur Kiyanovski 	ENA_ADMIN_INLINE_HEADER                     = 1,
485a7982b8eSArthur Kiyanovski 	/* header in a separate ring, implies 16B descriptor list entry */
486a7982b8eSArthur Kiyanovski 	ENA_ADMIN_HEADER_RING                       = 2,
487a7982b8eSArthur Kiyanovski };
488a7982b8eSArthur Kiyanovski 
489a7982b8eSArthur Kiyanovski enum ena_admin_llq_ring_entry_size {
490a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LIST_ENTRY_SIZE_128B              = 1,
491a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LIST_ENTRY_SIZE_192B              = 2,
492a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LIST_ENTRY_SIZE_256B              = 4,
493a7982b8eSArthur Kiyanovski };
494a7982b8eSArthur Kiyanovski 
495a7982b8eSArthur Kiyanovski enum ena_admin_llq_num_descs_before_header {
496a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_0     = 0,
497a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_1     = 1,
498a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_2     = 2,
499a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_4     = 4,
500a7982b8eSArthur Kiyanovski 	ENA_ADMIN_LLQ_NUM_DESCS_BEFORE_HEADER_8     = 8,
501a7982b8eSArthur Kiyanovski };
502a7982b8eSArthur Kiyanovski 
503a7982b8eSArthur Kiyanovski /* packet descriptor list entry always starts with one or more descriptors,
504a7982b8eSArthur Kiyanovski  * followed by a header. The rest of the descriptors are located in the
505a7982b8eSArthur Kiyanovski  * beginning of the subsequent entry. Stride refers to how the rest of the
506a7982b8eSArthur Kiyanovski  * descriptors are placed. This field is relevant only for inline header
507a7982b8eSArthur Kiyanovski  * mode
508a7982b8eSArthur Kiyanovski  */
509a7982b8eSArthur Kiyanovski enum ena_admin_llq_stride_ctrl {
510a7982b8eSArthur Kiyanovski 	ENA_ADMIN_SINGLE_DESC_PER_ENTRY             = 1,
511a7982b8eSArthur Kiyanovski 	ENA_ADMIN_MULTIPLE_DESCS_PER_ENTRY          = 2,
512a7982b8eSArthur Kiyanovski };
513a7982b8eSArthur Kiyanovski 
5140e3a3f6dSArthur Kiyanovski enum ena_admin_accel_mode_feat {
5150e3a3f6dSArthur Kiyanovski 	ENA_ADMIN_DISABLE_META_CACHING              = 0,
5160e3a3f6dSArthur Kiyanovski 	ENA_ADMIN_LIMIT_TX_BURST                    = 1,
5170e3a3f6dSArthur Kiyanovski };
5180e3a3f6dSArthur Kiyanovski 
5190e3a3f6dSArthur Kiyanovski struct ena_admin_accel_mode_get {
5200e3a3f6dSArthur Kiyanovski 	/* bit field of enum ena_admin_accel_mode_feat */
5210e3a3f6dSArthur Kiyanovski 	u16 supported_flags;
5220e3a3f6dSArthur Kiyanovski 
5230e3a3f6dSArthur Kiyanovski 	/* maximum burst size between two doorbells. The size is in bytes */
5240e3a3f6dSArthur Kiyanovski 	u16 max_tx_burst_size;
5250e3a3f6dSArthur Kiyanovski };
5260e3a3f6dSArthur Kiyanovski 
5270e3a3f6dSArthur Kiyanovski struct ena_admin_accel_mode_set {
5280e3a3f6dSArthur Kiyanovski 	/* bit field of enum ena_admin_accel_mode_feat */
5290e3a3f6dSArthur Kiyanovski 	u16 enabled_flags;
5300e3a3f6dSArthur Kiyanovski 
5310e3a3f6dSArthur Kiyanovski 	u16 reserved;
5320e3a3f6dSArthur Kiyanovski };
5330e3a3f6dSArthur Kiyanovski 
5340e3a3f6dSArthur Kiyanovski struct ena_admin_accel_mode_req {
5350e3a3f6dSArthur Kiyanovski 	union {
5360e3a3f6dSArthur Kiyanovski 		u32 raw[2];
5370e3a3f6dSArthur Kiyanovski 
5380e3a3f6dSArthur Kiyanovski 		struct ena_admin_accel_mode_get get;
5390e3a3f6dSArthur Kiyanovski 
5400e3a3f6dSArthur Kiyanovski 		struct ena_admin_accel_mode_set set;
5410e3a3f6dSArthur Kiyanovski 	} u;
5420e3a3f6dSArthur Kiyanovski };
5430e3a3f6dSArthur Kiyanovski 
544a7982b8eSArthur Kiyanovski struct ena_admin_feature_llq_desc {
545a7982b8eSArthur Kiyanovski 	u32 max_llq_num;
546a7982b8eSArthur Kiyanovski 
547a7982b8eSArthur Kiyanovski 	u32 max_llq_depth;
548a7982b8eSArthur Kiyanovski 
549bf2746e8SShay Agroskin 	/* specify the header locations the device supports. bitfield of enum
550bf2746e8SShay Agroskin 	 * ena_admin_llq_header_location.
551a7982b8eSArthur Kiyanovski 	 */
552a7982b8eSArthur Kiyanovski 	u16 header_location_ctrl_supported;
553a7982b8eSArthur Kiyanovski 
554a7982b8eSArthur Kiyanovski 	/* the header location the driver selected to use. */
555a7982b8eSArthur Kiyanovski 	u16 header_location_ctrl_enabled;
556a7982b8eSArthur Kiyanovski 
557bf2746e8SShay Agroskin 	/* if inline header is specified - this is the size of descriptor list
558bf2746e8SShay Agroskin 	 * entry. If header in a separate ring is specified - this is the size
559bf2746e8SShay Agroskin 	 * of header ring entry. bitfield of enum ena_admin_llq_ring_entry_size.
560bf2746e8SShay Agroskin 	 * specify the entry sizes the device supports
561a7982b8eSArthur Kiyanovski 	 */
562a7982b8eSArthur Kiyanovski 	u16 entry_size_ctrl_supported;
563a7982b8eSArthur Kiyanovski 
564a7982b8eSArthur Kiyanovski 	/* the entry size the driver selected to use. */
565a7982b8eSArthur Kiyanovski 	u16 entry_size_ctrl_enabled;
566a7982b8eSArthur Kiyanovski 
567bf2746e8SShay Agroskin 	/* valid only if inline header is specified. First entry associated with
568bf2746e8SShay Agroskin 	 * the packet includes descriptors and header. Rest of the entries
569bf2746e8SShay Agroskin 	 * occupied by descriptors. This parameter defines the max number of
570bf2746e8SShay Agroskin 	 * descriptors precedding the header in the first entry. The field is
571bf2746e8SShay Agroskin 	 * bitfield of enum ena_admin_llq_num_descs_before_header and specify
572bf2746e8SShay Agroskin 	 * the values the device supports
573a7982b8eSArthur Kiyanovski 	 */
574a7982b8eSArthur Kiyanovski 	u16 desc_num_before_header_supported;
575a7982b8eSArthur Kiyanovski 
576a7982b8eSArthur Kiyanovski 	/* the desire field the driver selected to use */
577a7982b8eSArthur Kiyanovski 	u16 desc_num_before_header_enabled;
578a7982b8eSArthur Kiyanovski 
579a7982b8eSArthur Kiyanovski 	/* valid only if inline was chosen. bitfield of enum
580a7982b8eSArthur Kiyanovski 	 * ena_admin_llq_stride_ctrl
581a7982b8eSArthur Kiyanovski 	 */
582a7982b8eSArthur Kiyanovski 	u16 descriptors_stride_ctrl_supported;
583a7982b8eSArthur Kiyanovski 
584a7982b8eSArthur Kiyanovski 	/* the stride control the driver selected to use */
585a7982b8eSArthur Kiyanovski 	u16 descriptors_stride_ctrl_enabled;
58605d62ca2SSameeh Jubran 
5870e3a3f6dSArthur Kiyanovski 	/* reserved */
5880e3a3f6dSArthur Kiyanovski 	u32 reserved1;
5890e3a3f6dSArthur Kiyanovski 
5900e3a3f6dSArthur Kiyanovski 	/* accelerated low latency queues requirement. driver needs to
5910e3a3f6dSArthur Kiyanovski 	 * support those requirements in order to use accelerated llq
59205d62ca2SSameeh Jubran 	 */
5930e3a3f6dSArthur Kiyanovski 	struct ena_admin_accel_mode_req accel_mode;
594a7982b8eSArthur Kiyanovski };
595a7982b8eSArthur Kiyanovski 
596ba8ef506SArthur Kiyanovski struct ena_admin_queue_ext_feature_fields {
597ba8ef506SArthur Kiyanovski 	u32 max_tx_sq_num;
598ba8ef506SArthur Kiyanovski 
599ba8ef506SArthur Kiyanovski 	u32 max_tx_cq_num;
600ba8ef506SArthur Kiyanovski 
601ba8ef506SArthur Kiyanovski 	u32 max_rx_sq_num;
602ba8ef506SArthur Kiyanovski 
603ba8ef506SArthur Kiyanovski 	u32 max_rx_cq_num;
604ba8ef506SArthur Kiyanovski 
605ba8ef506SArthur Kiyanovski 	u32 max_tx_sq_depth;
606ba8ef506SArthur Kiyanovski 
607ba8ef506SArthur Kiyanovski 	u32 max_tx_cq_depth;
608ba8ef506SArthur Kiyanovski 
609ba8ef506SArthur Kiyanovski 	u32 max_rx_sq_depth;
610ba8ef506SArthur Kiyanovski 
611ba8ef506SArthur Kiyanovski 	u32 max_rx_cq_depth;
612ba8ef506SArthur Kiyanovski 
613ba8ef506SArthur Kiyanovski 	u32 max_tx_header_size;
614ba8ef506SArthur Kiyanovski 
615bf2746e8SShay Agroskin 	/* Maximum Descriptors number, including meta descriptor, allowed for a
616bf2746e8SShay Agroskin 	 * single Tx packet
617ba8ef506SArthur Kiyanovski 	 */
618ba8ef506SArthur Kiyanovski 	u16 max_per_packet_tx_descs;
619ba8ef506SArthur Kiyanovski 
620ba8ef506SArthur Kiyanovski 	/* Maximum Descriptors number allowed for a single Rx packet */
621ba8ef506SArthur Kiyanovski 	u16 max_per_packet_rx_descs;
622ba8ef506SArthur Kiyanovski };
623ba8ef506SArthur Kiyanovski 
6241738cd3eSNetanel Belgazal struct ena_admin_queue_feature_desc {
6251738cd3eSNetanel Belgazal 	u32 max_sq_num;
6261738cd3eSNetanel Belgazal 
6271738cd3eSNetanel Belgazal 	u32 max_sq_depth;
6281738cd3eSNetanel Belgazal 
6291738cd3eSNetanel Belgazal 	u32 max_cq_num;
6301738cd3eSNetanel Belgazal 
6311738cd3eSNetanel Belgazal 	u32 max_cq_depth;
6321738cd3eSNetanel Belgazal 
633a7982b8eSArthur Kiyanovski 	u32 max_legacy_llq_num;
6341738cd3eSNetanel Belgazal 
635a7982b8eSArthur Kiyanovski 	u32 max_legacy_llq_depth;
6361738cd3eSNetanel Belgazal 
6371738cd3eSNetanel Belgazal 	u32 max_header_size;
6381738cd3eSNetanel Belgazal 
639bf2746e8SShay Agroskin 	/* Maximum Descriptors number, including meta descriptor, allowed for a
640bf2746e8SShay Agroskin 	 * single Tx packet
6411738cd3eSNetanel Belgazal 	 */
6421738cd3eSNetanel Belgazal 	u16 max_packet_tx_descs;
6431738cd3eSNetanel Belgazal 
6441738cd3eSNetanel Belgazal 	/* Maximum Descriptors number allowed for a single Rx packet */
6451738cd3eSNetanel Belgazal 	u16 max_packet_rx_descs;
6461738cd3eSNetanel Belgazal };
6471738cd3eSNetanel Belgazal 
6481738cd3eSNetanel Belgazal struct ena_admin_set_feature_mtu_desc {
6491738cd3eSNetanel Belgazal 	/* exclude L2 */
6501738cd3eSNetanel Belgazal 	u32 mtu;
6511738cd3eSNetanel Belgazal };
6521738cd3eSNetanel Belgazal 
6531738cd3eSNetanel Belgazal struct ena_admin_set_feature_host_attr_desc {
6541738cd3eSNetanel Belgazal 	/* host OS info base address in OS memory. host info is 4KB of
6551738cd3eSNetanel Belgazal 	 * physically contiguous
6561738cd3eSNetanel Belgazal 	 */
6571738cd3eSNetanel Belgazal 	struct ena_common_mem_addr os_info_ba;
6581738cd3eSNetanel Belgazal 
6591738cd3eSNetanel Belgazal 	/* host debug area base address in OS memory. debug area must be
6601738cd3eSNetanel Belgazal 	 * physically contiguous
6611738cd3eSNetanel Belgazal 	 */
6621738cd3eSNetanel Belgazal 	struct ena_common_mem_addr debug_ba;
6631738cd3eSNetanel Belgazal 
6641738cd3eSNetanel Belgazal 	/* debug area size */
6651738cd3eSNetanel Belgazal 	u32 debug_area_size;
6661738cd3eSNetanel Belgazal };
6671738cd3eSNetanel Belgazal 
6681738cd3eSNetanel Belgazal struct ena_admin_feature_intr_moder_desc {
6691738cd3eSNetanel Belgazal 	/* interrupt delay granularity in usec */
6701738cd3eSNetanel Belgazal 	u16 intr_delay_resolution;
6711738cd3eSNetanel Belgazal 
6721738cd3eSNetanel Belgazal 	u16 reserved;
6731738cd3eSNetanel Belgazal };
6741738cd3eSNetanel Belgazal 
6751738cd3eSNetanel Belgazal struct ena_admin_get_feature_link_desc {
6761738cd3eSNetanel Belgazal 	/* Link speed in Mb */
6771738cd3eSNetanel Belgazal 	u32 speed;
6781738cd3eSNetanel Belgazal 
6791738cd3eSNetanel Belgazal 	/* bit field of enum ena_admin_link types */
6801738cd3eSNetanel Belgazal 	u32 supported;
6811738cd3eSNetanel Belgazal 
6821738cd3eSNetanel Belgazal 	/* 0 : autoneg
6831738cd3eSNetanel Belgazal 	 * 1 : duplex - Full Duplex
6841738cd3eSNetanel Belgazal 	 * 31:2 : reserved2
6851738cd3eSNetanel Belgazal 	 */
6861738cd3eSNetanel Belgazal 	u32 flags;
6871738cd3eSNetanel Belgazal };
6881738cd3eSNetanel Belgazal 
6891738cd3eSNetanel Belgazal struct ena_admin_feature_aenq_desc {
6901738cd3eSNetanel Belgazal 	/* bitmask for AENQ groups the device can report */
6911738cd3eSNetanel Belgazal 	u32 supported_groups;
6921738cd3eSNetanel Belgazal 
6931738cd3eSNetanel Belgazal 	/* bitmask for AENQ groups to report */
6941738cd3eSNetanel Belgazal 	u32 enabled_groups;
6951738cd3eSNetanel Belgazal };
6961738cd3eSNetanel Belgazal 
6971738cd3eSNetanel Belgazal struct ena_admin_feature_offload_desc {
6981738cd3eSNetanel Belgazal 	/* 0 : TX_L3_csum_ipv4
6991738cd3eSNetanel Belgazal 	 * 1 : TX_L4_ipv4_csum_part - The checksum field
7001738cd3eSNetanel Belgazal 	 *    should be initialized with pseudo header checksum
7011738cd3eSNetanel Belgazal 	 * 2 : TX_L4_ipv4_csum_full
7021738cd3eSNetanel Belgazal 	 * 3 : TX_L4_ipv6_csum_part - The checksum field
7031738cd3eSNetanel Belgazal 	 *    should be initialized with pseudo header checksum
7041738cd3eSNetanel Belgazal 	 * 4 : TX_L4_ipv6_csum_full
7051738cd3eSNetanel Belgazal 	 * 5 : tso_ipv4
7061738cd3eSNetanel Belgazal 	 * 6 : tso_ipv6
7071738cd3eSNetanel Belgazal 	 * 7 : tso_ecn
7081738cd3eSNetanel Belgazal 	 */
7091738cd3eSNetanel Belgazal 	u32 tx;
7101738cd3eSNetanel Belgazal 
7111738cd3eSNetanel Belgazal 	/* Receive side supported stateless offload
7121738cd3eSNetanel Belgazal 	 * 0 : RX_L3_csum_ipv4 - IPv4 checksum
7131738cd3eSNetanel Belgazal 	 * 1 : RX_L4_ipv4_csum - TCP/UDP/IPv4 checksum
7141738cd3eSNetanel Belgazal 	 * 2 : RX_L4_ipv6_csum - TCP/UDP/IPv6 checksum
7151738cd3eSNetanel Belgazal 	 * 3 : RX_hash - Hash calculation
7161738cd3eSNetanel Belgazal 	 */
7171738cd3eSNetanel Belgazal 	u32 rx_supported;
7181738cd3eSNetanel Belgazal 
7191738cd3eSNetanel Belgazal 	u32 rx_enabled;
7201738cd3eSNetanel Belgazal };
7211738cd3eSNetanel Belgazal 
7221738cd3eSNetanel Belgazal enum ena_admin_hash_functions {
7231738cd3eSNetanel Belgazal 	ENA_ADMIN_TOEPLITZ                          = 1,
7241738cd3eSNetanel Belgazal 	ENA_ADMIN_CRC32                             = 2,
7251738cd3eSNetanel Belgazal };
7261738cd3eSNetanel Belgazal 
7271738cd3eSNetanel Belgazal struct ena_admin_feature_rss_flow_hash_control {
7280deca83fSShay Agroskin 	u32 key_parts;
7291738cd3eSNetanel Belgazal 
7301738cd3eSNetanel Belgazal 	u32 reserved;
7311738cd3eSNetanel Belgazal 
7320deca83fSShay Agroskin 	u32 key[ENA_ADMIN_RSS_KEY_PARTS];
7331738cd3eSNetanel Belgazal };
7341738cd3eSNetanel Belgazal 
7351738cd3eSNetanel Belgazal struct ena_admin_feature_rss_flow_hash_function {
7361738cd3eSNetanel Belgazal 	/* 7:0 : funcs - bitmask of ena_admin_hash_functions */
7371738cd3eSNetanel Belgazal 	u32 supported_func;
7381738cd3eSNetanel Belgazal 
7391738cd3eSNetanel Belgazal 	/* 7:0 : selected_func - bitmask of
7401738cd3eSNetanel Belgazal 	 *    ena_admin_hash_functions
7411738cd3eSNetanel Belgazal 	 */
7421738cd3eSNetanel Belgazal 	u32 selected_func;
7431738cd3eSNetanel Belgazal 
7441738cd3eSNetanel Belgazal 	/* initial value */
7451738cd3eSNetanel Belgazal 	u32 init_val;
7461738cd3eSNetanel Belgazal };
7471738cd3eSNetanel Belgazal 
7481738cd3eSNetanel Belgazal /* RSS flow hash protocols */
7491738cd3eSNetanel Belgazal enum ena_admin_flow_hash_proto {
7501738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_TCP4                          = 0,
7511738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_UDP4                          = 1,
7521738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_TCP6                          = 2,
7531738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_UDP6                          = 3,
7541738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_IP4                           = 4,
7551738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_IP6                           = 5,
7561738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_IP4_FRAG                      = 6,
7571738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_NOT_IP                        = 7,
75858894d52SNetanel Belgazal 	/* TCPv6 with extension header */
75958894d52SNetanel Belgazal 	ENA_ADMIN_RSS_TCP6_EX                       = 8,
76058894d52SNetanel Belgazal 	/* IPv6 with extension header */
76158894d52SNetanel Belgazal 	ENA_ADMIN_RSS_IP6_EX                        = 9,
7621738cd3eSNetanel Belgazal 	ENA_ADMIN_RSS_PROTO_NUM                     = 16,
7631738cd3eSNetanel Belgazal };
7641738cd3eSNetanel Belgazal 
7651738cd3eSNetanel Belgazal /* RSS flow hash fields */
7661738cd3eSNetanel Belgazal enum ena_admin_flow_hash_fields {
7671738cd3eSNetanel Belgazal 	/* Ethernet Dest Addr */
7686e2de20dSNetanel Belgazal 	ENA_ADMIN_RSS_L2_DA                         = BIT(0),
7691738cd3eSNetanel Belgazal 	/* Ethernet Src Addr */
7706e2de20dSNetanel Belgazal 	ENA_ADMIN_RSS_L2_SA                         = BIT(1),
7711738cd3eSNetanel Belgazal 	/* ipv4/6 Dest Addr */
7726e2de20dSNetanel Belgazal 	ENA_ADMIN_RSS_L3_DA                         = BIT(2),
7731738cd3eSNetanel Belgazal 	/* ipv4/6 Src Addr */
7746e2de20dSNetanel Belgazal 	ENA_ADMIN_RSS_L3_SA                         = BIT(3),
7751738cd3eSNetanel Belgazal 	/* tcp/udp Dest Port */
7766e2de20dSNetanel Belgazal 	ENA_ADMIN_RSS_L4_DP                         = BIT(4),
7771738cd3eSNetanel Belgazal 	/* tcp/udp Src Port */
7786e2de20dSNetanel Belgazal 	ENA_ADMIN_RSS_L4_SP                         = BIT(5),
7791738cd3eSNetanel Belgazal };
7801738cd3eSNetanel Belgazal 
7811738cd3eSNetanel Belgazal struct ena_admin_proto_input {
7821738cd3eSNetanel Belgazal 	/* flow hash fields (bitwise according to ena_admin_flow_hash_fields) */
7831738cd3eSNetanel Belgazal 	u16 fields;
7841738cd3eSNetanel Belgazal 
7851738cd3eSNetanel Belgazal 	u16 reserved2;
7861738cd3eSNetanel Belgazal };
7871738cd3eSNetanel Belgazal 
7881738cd3eSNetanel Belgazal struct ena_admin_feature_rss_hash_control {
7891738cd3eSNetanel Belgazal 	struct ena_admin_proto_input supported_fields[ENA_ADMIN_RSS_PROTO_NUM];
7901738cd3eSNetanel Belgazal 
7911738cd3eSNetanel Belgazal 	struct ena_admin_proto_input selected_fields[ENA_ADMIN_RSS_PROTO_NUM];
7921738cd3eSNetanel Belgazal 
7931738cd3eSNetanel Belgazal 	struct ena_admin_proto_input reserved2[ENA_ADMIN_RSS_PROTO_NUM];
7941738cd3eSNetanel Belgazal 
7951738cd3eSNetanel Belgazal 	struct ena_admin_proto_input reserved3[ENA_ADMIN_RSS_PROTO_NUM];
7961738cd3eSNetanel Belgazal };
7971738cd3eSNetanel Belgazal 
7981738cd3eSNetanel Belgazal struct ena_admin_feature_rss_flow_hash_input {
7991738cd3eSNetanel Belgazal 	/* supported hash input sorting
8001738cd3eSNetanel Belgazal 	 * 1 : L3_sort - support swap L3 addresses if DA is
8011738cd3eSNetanel Belgazal 	 *    smaller than SA
8021738cd3eSNetanel Belgazal 	 * 2 : L4_sort - support swap L4 ports if DP smaller
8031738cd3eSNetanel Belgazal 	 *    SP
8041738cd3eSNetanel Belgazal 	 */
8051738cd3eSNetanel Belgazal 	u16 supported_input_sort;
8061738cd3eSNetanel Belgazal 
8071738cd3eSNetanel Belgazal 	/* enabled hash input sorting
8081738cd3eSNetanel Belgazal 	 * 1 : enable_L3_sort - enable swap L3 addresses if
8091738cd3eSNetanel Belgazal 	 *    DA smaller than SA
8101738cd3eSNetanel Belgazal 	 * 2 : enable_L4_sort - enable swap L4 ports if DP
8111738cd3eSNetanel Belgazal 	 *    smaller than SP
8121738cd3eSNetanel Belgazal 	 */
8131738cd3eSNetanel Belgazal 	u16 enabled_input_sort;
8141738cd3eSNetanel Belgazal };
8151738cd3eSNetanel Belgazal 
8161738cd3eSNetanel Belgazal enum ena_admin_os_type {
8171738cd3eSNetanel Belgazal 	ENA_ADMIN_OS_LINUX                          = 1,
8181738cd3eSNetanel Belgazal 	ENA_ADMIN_OS_WIN                            = 2,
8191738cd3eSNetanel Belgazal 	ENA_ADMIN_OS_DPDK                           = 3,
8201738cd3eSNetanel Belgazal 	ENA_ADMIN_OS_FREEBSD                        = 4,
8211738cd3eSNetanel Belgazal 	ENA_ADMIN_OS_IPXE                           = 5,
822095f2f1fSArthur Kiyanovski 	ENA_ADMIN_OS_ESXI                           = 6,
823095f2f1fSArthur Kiyanovski 	ENA_ADMIN_OS_GROUPS_NUM                     = 6,
8241738cd3eSNetanel Belgazal };
8251738cd3eSNetanel Belgazal 
8261738cd3eSNetanel Belgazal struct ena_admin_host_info {
8271738cd3eSNetanel Belgazal 	/* defined in enum ena_admin_os_type */
8281738cd3eSNetanel Belgazal 	u32 os_type;
8291738cd3eSNetanel Belgazal 
8301738cd3eSNetanel Belgazal 	/* os distribution string format */
8311738cd3eSNetanel Belgazal 	u8 os_dist_str[128];
8321738cd3eSNetanel Belgazal 
8331738cd3eSNetanel Belgazal 	/* OS distribution numeric format */
8341738cd3eSNetanel Belgazal 	u32 os_dist;
8351738cd3eSNetanel Belgazal 
8361738cd3eSNetanel Belgazal 	/* kernel version string format */
8371738cd3eSNetanel Belgazal 	u8 kernel_ver_str[32];
8381738cd3eSNetanel Belgazal 
8391738cd3eSNetanel Belgazal 	/* Kernel version numeric format */
8401738cd3eSNetanel Belgazal 	u32 kernel_ver;
8411738cd3eSNetanel Belgazal 
8421738cd3eSNetanel Belgazal 	/* 7:0 : major
8431738cd3eSNetanel Belgazal 	 * 15:8 : minor
8441738cd3eSNetanel Belgazal 	 * 23:16 : sub_minor
845095f2f1fSArthur Kiyanovski 	 * 31:24 : module_type
8461738cd3eSNetanel Belgazal 	 */
8471738cd3eSNetanel Belgazal 	u32 driver_version;
8481738cd3eSNetanel Belgazal 
8491738cd3eSNetanel Belgazal 	/* features bitmap */
850095f2f1fSArthur Kiyanovski 	u32 supported_network_features[2];
851095f2f1fSArthur Kiyanovski 
852095f2f1fSArthur Kiyanovski 	/* ENA spec version of driver */
853095f2f1fSArthur Kiyanovski 	u16 ena_spec_version;
854095f2f1fSArthur Kiyanovski 
855095f2f1fSArthur Kiyanovski 	/* ENA device's Bus, Device and Function
856095f2f1fSArthur Kiyanovski 	 * 2:0 : function
857095f2f1fSArthur Kiyanovski 	 * 7:3 : device
858095f2f1fSArthur Kiyanovski 	 * 15:8 : bus
859095f2f1fSArthur Kiyanovski 	 */
860095f2f1fSArthur Kiyanovski 	u16 bdf;
861095f2f1fSArthur Kiyanovski 
862095f2f1fSArthur Kiyanovski 	/* Number of CPUs */
863095f2f1fSArthur Kiyanovski 	u16 num_cpus;
864095f2f1fSArthur Kiyanovski 
865095f2f1fSArthur Kiyanovski 	u16 reserved;
866bd21b0ccSArthur Kiyanovski 
86768f236dfSArthur Kiyanovski 	/* 0 : reserved
86868f236dfSArthur Kiyanovski 	 * 1 : rx_offset
869bd21b0ccSArthur Kiyanovski 	 * 2 : interrupt_moderation
8700f505c60SArthur Kiyanovski 	 * 3 : rx_buf_mirroring
8710ee60edfSArthur Kiyanovski 	 * 4 : rss_configurable_function_key
872*f7d625adSDavid Arinzon 	 * 5 : reserved
873*f7d625adSDavid Arinzon 	 * 6 : rx_page_reuse
874*f7d625adSDavid Arinzon 	 * 31:7 : reserved
875bd21b0ccSArthur Kiyanovski 	 */
876bd21b0ccSArthur Kiyanovski 	u32 driver_supported_features;
8771738cd3eSNetanel Belgazal };
8781738cd3eSNetanel Belgazal 
8791738cd3eSNetanel Belgazal struct ena_admin_rss_ind_table_entry {
8801738cd3eSNetanel Belgazal 	u16 cq_idx;
8811738cd3eSNetanel Belgazal 
8821738cd3eSNetanel Belgazal 	u16 reserved;
8831738cd3eSNetanel Belgazal };
8841738cd3eSNetanel Belgazal 
8851738cd3eSNetanel Belgazal struct ena_admin_feature_rss_ind_table {
8861738cd3eSNetanel Belgazal 	/* min supported table size (2^min_size) */
8871738cd3eSNetanel Belgazal 	u16 min_size;
8881738cd3eSNetanel Belgazal 
8891738cd3eSNetanel Belgazal 	/* max supported table size (2^max_size) */
8901738cd3eSNetanel Belgazal 	u16 max_size;
8911738cd3eSNetanel Belgazal 
8921738cd3eSNetanel Belgazal 	/* table size (2^size) */
8931738cd3eSNetanel Belgazal 	u16 size;
8941738cd3eSNetanel Belgazal 
8951738cd3eSNetanel Belgazal 	u16 reserved;
8961738cd3eSNetanel Belgazal 
8971738cd3eSNetanel Belgazal 	/* index of the inline entry. 0xFFFFFFFF means invalid */
8981738cd3eSNetanel Belgazal 	u32 inline_index;
8991738cd3eSNetanel Belgazal 
9001738cd3eSNetanel Belgazal 	/* used for updating single entry, ignored when setting the entire
9011738cd3eSNetanel Belgazal 	 * table through the control buffer.
9021738cd3eSNetanel Belgazal 	 */
9031738cd3eSNetanel Belgazal 	struct ena_admin_rss_ind_table_entry inline_entry;
9041738cd3eSNetanel Belgazal };
9051738cd3eSNetanel Belgazal 
90682ef30f1SNetanel Belgazal /* When hint value is 0, driver should use it's own predefined value */
90782ef30f1SNetanel Belgazal struct ena_admin_ena_hw_hints {
90882ef30f1SNetanel Belgazal 	/* value in ms */
90982ef30f1SNetanel Belgazal 	u16 mmio_read_timeout;
91082ef30f1SNetanel Belgazal 
91182ef30f1SNetanel Belgazal 	/* value in ms */
91282ef30f1SNetanel Belgazal 	u16 driver_watchdog_timeout;
91382ef30f1SNetanel Belgazal 
91482ef30f1SNetanel Belgazal 	/* Per packet tx completion timeout. value in ms */
91582ef30f1SNetanel Belgazal 	u16 missing_tx_completion_timeout;
91682ef30f1SNetanel Belgazal 
91782ef30f1SNetanel Belgazal 	u16 missed_tx_completion_count_threshold_to_reset;
91882ef30f1SNetanel Belgazal 
91982ef30f1SNetanel Belgazal 	/* value in ms */
92082ef30f1SNetanel Belgazal 	u16 admin_completion_tx_timeout;
92182ef30f1SNetanel Belgazal 
92282ef30f1SNetanel Belgazal 	u16 netdev_wd_timeout;
92382ef30f1SNetanel Belgazal 
92482ef30f1SNetanel Belgazal 	u16 max_tx_sgl_size;
92582ef30f1SNetanel Belgazal 
92682ef30f1SNetanel Belgazal 	u16 max_rx_sgl_size;
92782ef30f1SNetanel Belgazal 
92882ef30f1SNetanel Belgazal 	u16 reserved[8];
92982ef30f1SNetanel Belgazal };
93082ef30f1SNetanel Belgazal 
9311738cd3eSNetanel Belgazal struct ena_admin_get_feat_cmd {
9321738cd3eSNetanel Belgazal 	struct ena_admin_aq_common_desc aq_common_descriptor;
9331738cd3eSNetanel Belgazal 
9341738cd3eSNetanel Belgazal 	struct ena_admin_ctrl_buff_info control_buffer;
9351738cd3eSNetanel Belgazal 
9361738cd3eSNetanel Belgazal 	struct ena_admin_get_set_feature_common_desc feat_common;
9371738cd3eSNetanel Belgazal 
9381738cd3eSNetanel Belgazal 	u32 raw[11];
9391738cd3eSNetanel Belgazal };
9401738cd3eSNetanel Belgazal 
941ba8ef506SArthur Kiyanovski struct ena_admin_queue_ext_feature_desc {
942ba8ef506SArthur Kiyanovski 	/* version */
943ba8ef506SArthur Kiyanovski 	u8 version;
944ba8ef506SArthur Kiyanovski 
945ba8ef506SArthur Kiyanovski 	u8 reserved1[3];
946ba8ef506SArthur Kiyanovski 
947ba8ef506SArthur Kiyanovski 	union {
948ba8ef506SArthur Kiyanovski 		struct ena_admin_queue_ext_feature_fields max_queue_ext;
949ba8ef506SArthur Kiyanovski 
950ba8ef506SArthur Kiyanovski 		u32 raw[10];
951ba8ef506SArthur Kiyanovski 	};
952ba8ef506SArthur Kiyanovski };
953ba8ef506SArthur Kiyanovski 
9541738cd3eSNetanel Belgazal struct ena_admin_get_feat_resp {
9551738cd3eSNetanel Belgazal 	struct ena_admin_acq_common_desc acq_common_desc;
9561738cd3eSNetanel Belgazal 
9571738cd3eSNetanel Belgazal 	union {
9581738cd3eSNetanel Belgazal 		u32 raw[14];
9591738cd3eSNetanel Belgazal 
9601738cd3eSNetanel Belgazal 		struct ena_admin_device_attr_feature_desc dev_attr;
9611738cd3eSNetanel Belgazal 
962a7982b8eSArthur Kiyanovski 		struct ena_admin_feature_llq_desc llq;
963a7982b8eSArthur Kiyanovski 
9641738cd3eSNetanel Belgazal 		struct ena_admin_queue_feature_desc max_queue;
9651738cd3eSNetanel Belgazal 
966ba8ef506SArthur Kiyanovski 		struct ena_admin_queue_ext_feature_desc max_queue_ext;
967ba8ef506SArthur Kiyanovski 
9681738cd3eSNetanel Belgazal 		struct ena_admin_feature_aenq_desc aenq;
9691738cd3eSNetanel Belgazal 
9701738cd3eSNetanel Belgazal 		struct ena_admin_get_feature_link_desc link;
9711738cd3eSNetanel Belgazal 
9721738cd3eSNetanel Belgazal 		struct ena_admin_feature_offload_desc offload;
9731738cd3eSNetanel Belgazal 
9741738cd3eSNetanel Belgazal 		struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
9751738cd3eSNetanel Belgazal 
9761738cd3eSNetanel Belgazal 		struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
9771738cd3eSNetanel Belgazal 
9781738cd3eSNetanel Belgazal 		struct ena_admin_feature_rss_ind_table ind_table;
9791738cd3eSNetanel Belgazal 
9801738cd3eSNetanel Belgazal 		struct ena_admin_feature_intr_moder_desc intr_moderation;
98182ef30f1SNetanel Belgazal 
98282ef30f1SNetanel Belgazal 		struct ena_admin_ena_hw_hints hw_hints;
9831738cd3eSNetanel Belgazal 	} u;
9841738cd3eSNetanel Belgazal };
9851738cd3eSNetanel Belgazal 
9861738cd3eSNetanel Belgazal struct ena_admin_set_feat_cmd {
9871738cd3eSNetanel Belgazal 	struct ena_admin_aq_common_desc aq_common_descriptor;
9881738cd3eSNetanel Belgazal 
9891738cd3eSNetanel Belgazal 	struct ena_admin_ctrl_buff_info control_buffer;
9901738cd3eSNetanel Belgazal 
9911738cd3eSNetanel Belgazal 	struct ena_admin_get_set_feature_common_desc feat_common;
9921738cd3eSNetanel Belgazal 
9931738cd3eSNetanel Belgazal 	union {
9941738cd3eSNetanel Belgazal 		u32 raw[11];
9951738cd3eSNetanel Belgazal 
9961738cd3eSNetanel Belgazal 		/* mtu size */
9971738cd3eSNetanel Belgazal 		struct ena_admin_set_feature_mtu_desc mtu;
9981738cd3eSNetanel Belgazal 
9991738cd3eSNetanel Belgazal 		/* host attributes */
10001738cd3eSNetanel Belgazal 		struct ena_admin_set_feature_host_attr_desc host_attr;
10011738cd3eSNetanel Belgazal 
10021738cd3eSNetanel Belgazal 		/* AENQ configuration */
10031738cd3eSNetanel Belgazal 		struct ena_admin_feature_aenq_desc aenq;
10041738cd3eSNetanel Belgazal 
10051738cd3eSNetanel Belgazal 		/* rss flow hash function */
10061738cd3eSNetanel Belgazal 		struct ena_admin_feature_rss_flow_hash_function flow_hash_func;
10071738cd3eSNetanel Belgazal 
10081738cd3eSNetanel Belgazal 		/* rss flow hash input */
10091738cd3eSNetanel Belgazal 		struct ena_admin_feature_rss_flow_hash_input flow_hash_input;
10101738cd3eSNetanel Belgazal 
10111738cd3eSNetanel Belgazal 		/* rss indirection table */
10121738cd3eSNetanel Belgazal 		struct ena_admin_feature_rss_ind_table ind_table;
1013a7982b8eSArthur Kiyanovski 
1014a7982b8eSArthur Kiyanovski 		/* LLQ configuration */
1015a7982b8eSArthur Kiyanovski 		struct ena_admin_feature_llq_desc llq;
10161738cd3eSNetanel Belgazal 	} u;
10171738cd3eSNetanel Belgazal };
10181738cd3eSNetanel Belgazal 
10191738cd3eSNetanel Belgazal struct ena_admin_set_feat_resp {
10201738cd3eSNetanel Belgazal 	struct ena_admin_acq_common_desc acq_common_desc;
10211738cd3eSNetanel Belgazal 
10221738cd3eSNetanel Belgazal 	union {
10231738cd3eSNetanel Belgazal 		u32 raw[14];
10241738cd3eSNetanel Belgazal 	} u;
10251738cd3eSNetanel Belgazal };
10261738cd3eSNetanel Belgazal 
10271738cd3eSNetanel Belgazal struct ena_admin_aenq_common_desc {
10281738cd3eSNetanel Belgazal 	u16 group;
10291738cd3eSNetanel Belgazal 
1030bf2746e8SShay Agroskin 	u16 syndrome;
10311738cd3eSNetanel Belgazal 
1032ba8ef506SArthur Kiyanovski 	/* 0 : phase
1033ba8ef506SArthur Kiyanovski 	 * 7:1 : reserved - MBZ
1034ba8ef506SArthur Kiyanovski 	 */
10351738cd3eSNetanel Belgazal 	u8 flags;
10361738cd3eSNetanel Belgazal 
10371738cd3eSNetanel Belgazal 	u8 reserved1[3];
10381738cd3eSNetanel Belgazal 
10391738cd3eSNetanel Belgazal 	u32 timestamp_low;
10401738cd3eSNetanel Belgazal 
10411738cd3eSNetanel Belgazal 	u32 timestamp_high;
10421738cd3eSNetanel Belgazal };
10431738cd3eSNetanel Belgazal 
10441738cd3eSNetanel Belgazal /* asynchronous event notification groups */
10451738cd3eSNetanel Belgazal enum ena_admin_aenq_group {
10461738cd3eSNetanel Belgazal 	ENA_ADMIN_LINK_CHANGE                       = 0,
10471738cd3eSNetanel Belgazal 	ENA_ADMIN_FATAL_ERROR                       = 1,
10481738cd3eSNetanel Belgazal 	ENA_ADMIN_WARNING                           = 2,
10491738cd3eSNetanel Belgazal 	ENA_ADMIN_NOTIFICATION                      = 3,
10501738cd3eSNetanel Belgazal 	ENA_ADMIN_KEEP_ALIVE                        = 4,
10511738cd3eSNetanel Belgazal 	ENA_ADMIN_AENQ_GROUPS_NUM                   = 5,
10521738cd3eSNetanel Belgazal };
10531738cd3eSNetanel Belgazal 
1054bf2746e8SShay Agroskin enum ena_admin_aenq_notification_syndrome {
105582ef30f1SNetanel Belgazal 	ENA_ADMIN_UPDATE_HINTS                      = 2,
10561738cd3eSNetanel Belgazal };
10571738cd3eSNetanel Belgazal 
10581738cd3eSNetanel Belgazal struct ena_admin_aenq_entry {
10591738cd3eSNetanel Belgazal 	struct ena_admin_aenq_common_desc aenq_common_desc;
10601738cd3eSNetanel Belgazal 
10611738cd3eSNetanel Belgazal 	/* command specific inline data */
10621738cd3eSNetanel Belgazal 	u32 inline_data_w4[12];
10631738cd3eSNetanel Belgazal };
10641738cd3eSNetanel Belgazal 
10651738cd3eSNetanel Belgazal struct ena_admin_aenq_link_change_desc {
10661738cd3eSNetanel Belgazal 	struct ena_admin_aenq_common_desc aenq_common_desc;
10671738cd3eSNetanel Belgazal 
10681738cd3eSNetanel Belgazal 	/* 0 : link_status */
10691738cd3eSNetanel Belgazal 	u32 flags;
10701738cd3eSNetanel Belgazal };
10711738cd3eSNetanel Belgazal 
1072d81db240SNetanel Belgazal struct ena_admin_aenq_keep_alive_desc {
1073d81db240SNetanel Belgazal 	struct ena_admin_aenq_common_desc aenq_common_desc;
1074d81db240SNetanel Belgazal 
1075d81db240SNetanel Belgazal 	u32 rx_drops_low;
1076d81db240SNetanel Belgazal 
1077d81db240SNetanel Belgazal 	u32 rx_drops_high;
10785c665f8cSSameeh Jubran 
10795c665f8cSSameeh Jubran 	u32 tx_drops_low;
10805c665f8cSSameeh Jubran 
10815c665f8cSSameeh Jubran 	u32 tx_drops_high;
1082d81db240SNetanel Belgazal };
1083d81db240SNetanel Belgazal 
10841738cd3eSNetanel Belgazal struct ena_admin_ena_mmio_req_read_less_resp {
10851738cd3eSNetanel Belgazal 	u16 req_id;
10861738cd3eSNetanel Belgazal 
10871738cd3eSNetanel Belgazal 	u16 reg_off;
10881738cd3eSNetanel Belgazal 
10891738cd3eSNetanel Belgazal 	/* value is valid when poll is cleared */
10901738cd3eSNetanel Belgazal 	u32 reg_val;
10911738cd3eSNetanel Belgazal };
10921738cd3eSNetanel Belgazal 
10931738cd3eSNetanel Belgazal /* aq_common_desc */
10941738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_COMMON_DESC_COMMAND_ID_MASK            GENMASK(11, 0)
10951738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_COMMON_DESC_PHASE_MASK                 BIT(0)
10961738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_SHIFT            1
10971738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_MASK             BIT(1)
10981738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_SHIFT   2
10991738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_COMMON_DESC_CTRL_DATA_INDIRECT_MASK    BIT(2)
11001738cd3eSNetanel Belgazal 
11011738cd3eSNetanel Belgazal /* sq */
11021738cd3eSNetanel Belgazal #define ENA_ADMIN_SQ_SQ_DIRECTION_SHIFT                     5
11031738cd3eSNetanel Belgazal #define ENA_ADMIN_SQ_SQ_DIRECTION_MASK                      GENMASK(7, 5)
11041738cd3eSNetanel Belgazal 
11051738cd3eSNetanel Belgazal /* acq_common_desc */
11061738cd3eSNetanel Belgazal #define ENA_ADMIN_ACQ_COMMON_DESC_COMMAND_ID_MASK           GENMASK(11, 0)
11071738cd3eSNetanel Belgazal #define ENA_ADMIN_ACQ_COMMON_DESC_PHASE_MASK                BIT(0)
11081738cd3eSNetanel Belgazal 
11091738cd3eSNetanel Belgazal /* aq_create_sq_cmd */
11101738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_SHIFT       5
11111738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_SQ_CMD_SQ_DIRECTION_MASK        GENMASK(7, 5)
11121738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_SQ_CMD_PLACEMENT_POLICY_MASK    GENMASK(3, 0)
11131738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_SHIFT  4
11141738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_SQ_CMD_COMPLETION_POLICY_MASK   GENMASK(6, 4)
11151738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_SQ_CMD_IS_PHYSICALLY_CONTIGUOUS_MASK BIT(0)
11161738cd3eSNetanel Belgazal 
11171738cd3eSNetanel Belgazal /* aq_create_cq_cmd */
11181738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_SHIFT 5
11191738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_CQ_CMD_INTERRUPT_MODE_ENABLED_MASK BIT(5)
11201738cd3eSNetanel Belgazal #define ENA_ADMIN_AQ_CREATE_CQ_CMD_CQ_ENTRY_SIZE_WORDS_MASK GENMASK(4, 0)
11211738cd3eSNetanel Belgazal 
11221738cd3eSNetanel Belgazal /* get_set_feature_common_desc */
11231738cd3eSNetanel Belgazal #define ENA_ADMIN_GET_SET_FEATURE_COMMON_DESC_SELECT_MASK   GENMASK(1, 0)
11241738cd3eSNetanel Belgazal 
11251738cd3eSNetanel Belgazal /* get_feature_link_desc */
11261738cd3eSNetanel Belgazal #define ENA_ADMIN_GET_FEATURE_LINK_DESC_AUTONEG_MASK        BIT(0)
11271738cd3eSNetanel Belgazal #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_SHIFT        1
11281738cd3eSNetanel Belgazal #define ENA_ADMIN_GET_FEATURE_LINK_DESC_DUPLEX_MASK         BIT(1)
11291738cd3eSNetanel Belgazal 
11301738cd3eSNetanel Belgazal /* feature_offload_desc */
11311738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L3_CSUM_IPV4_MASK BIT(0)
11321738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_SHIFT 1
11331738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_PART_MASK BIT(1)
11341738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_SHIFT 2
11351738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV4_CSUM_FULL_MASK BIT(2)
11361738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_SHIFT 3
11371738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_PART_MASK BIT(3)
11381738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_SHIFT 4
11391738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TX_L4_IPV6_CSUM_FULL_MASK BIT(4)
11401738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_SHIFT       5
11411738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV4_MASK        BIT(5)
11421738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_SHIFT       6
11431738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_IPV6_MASK        BIT(6)
11441738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_SHIFT        7
11451738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_TSO_ECN_MASK         BIT(7)
11461738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L3_CSUM_IPV4_MASK BIT(0)
11471738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_SHIFT 1
11481738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV4_CSUM_MASK BIT(1)
11491738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_SHIFT 2
11501738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_L4_IPV6_CSUM_MASK BIT(2)
11511738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_SHIFT        3
11521738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_OFFLOAD_DESC_RX_HASH_MASK         BIT(3)
11531738cd3eSNetanel Belgazal 
11541738cd3eSNetanel Belgazal /* feature_rss_flow_hash_function */
11551738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_FUNCS_MASK GENMASK(7, 0)
11561738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_FUNCTION_SELECTED_FUNC_MASK GENMASK(7, 0)
11571738cd3eSNetanel Belgazal 
11581738cd3eSNetanel Belgazal /* feature_rss_flow_hash_input */
11591738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_SHIFT 1
11601738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L3_SORT_MASK  BIT(1)
11611738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_SHIFT 2
11621738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_L4_SORT_MASK  BIT(2)
11631738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_SHIFT 1
11641738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L3_SORT_MASK BIT(1)
11651738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_SHIFT 2
11661738cd3eSNetanel Belgazal #define ENA_ADMIN_FEATURE_RSS_FLOW_HASH_INPUT_ENABLE_L4_SORT_MASK BIT(2)
11671738cd3eSNetanel Belgazal 
11681738cd3eSNetanel Belgazal /* host_info */
11691738cd3eSNetanel Belgazal #define ENA_ADMIN_HOST_INFO_MAJOR_MASK                      GENMASK(7, 0)
11701738cd3eSNetanel Belgazal #define ENA_ADMIN_HOST_INFO_MINOR_SHIFT                     8
11711738cd3eSNetanel Belgazal #define ENA_ADMIN_HOST_INFO_MINOR_MASK                      GENMASK(15, 8)
11721738cd3eSNetanel Belgazal #define ENA_ADMIN_HOST_INFO_SUB_MINOR_SHIFT                 16
11731738cd3eSNetanel Belgazal #define ENA_ADMIN_HOST_INFO_SUB_MINOR_MASK                  GENMASK(23, 16)
1174095f2f1fSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_MODULE_TYPE_SHIFT               24
1175095f2f1fSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_MODULE_TYPE_MASK                GENMASK(31, 24)
1176095f2f1fSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_FUNCTION_MASK                   GENMASK(2, 0)
1177095f2f1fSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_DEVICE_SHIFT                    3
1178095f2f1fSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_DEVICE_MASK                     GENMASK(7, 3)
1179095f2f1fSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_BUS_SHIFT                       8
1180095f2f1fSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_BUS_MASK                        GENMASK(15, 8)
118168f236dfSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_RX_OFFSET_SHIFT                 1
118268f236dfSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_RX_OFFSET_MASK                  BIT(1)
1183bd21b0ccSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_SHIFT      2
1184bd21b0ccSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_INTERRUPT_MODERATION_MASK       BIT(2)
11850f505c60SArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_SHIFT          3
11860f505c60SArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_RX_BUF_MIRRORING_MASK           BIT(3)
11870ee60edfSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_SHIFT 4
11880ee60edfSArthur Kiyanovski #define ENA_ADMIN_HOST_INFO_RSS_CONFIGURABLE_FUNCTION_KEY_MASK BIT(4)
1189*f7d625adSDavid Arinzon #define ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_SHIFT             6
1190*f7d625adSDavid Arinzon #define ENA_ADMIN_HOST_INFO_RX_PAGE_REUSE_MASK              BIT(6)
11911738cd3eSNetanel Belgazal 
11921738cd3eSNetanel Belgazal /* aenq_common_desc */
11931738cd3eSNetanel Belgazal #define ENA_ADMIN_AENQ_COMMON_DESC_PHASE_MASK               BIT(0)
11941738cd3eSNetanel Belgazal 
11951738cd3eSNetanel Belgazal /* aenq_link_change_desc */
11961738cd3eSNetanel Belgazal #define ENA_ADMIN_AENQ_LINK_CHANGE_DESC_LINK_STATUS_MASK    BIT(0)
11971738cd3eSNetanel Belgazal 
11981738cd3eSNetanel Belgazal #endif /* _ENA_ADMIN_H_ */
1199