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