1702928afSMaciej Bielski /* SPDX-License-Identifier: BSD-3-Clause 238364c26SMichal Krawczyk * Copyright (c) 2015-2020 Amazon.com, Inc. or its affiliates. 31173fca2SJan Medala * All rights reserved. 41173fca2SJan Medala */ 51173fca2SJan Medala 61173fca2SJan Medala #ifndef _ENA_ETHDEV_H_ 71173fca2SJan Medala #define _ENA_ETHDEV_H_ 81173fca2SJan Medala 934d5e97eSMichal Krawczyk #include <rte_atomic.h> 1034d5e97eSMichal Krawczyk #include <rte_ether.h> 1134d5e97eSMichal Krawczyk #include <ethdev_driver.h> 1234d5e97eSMichal Krawczyk #include <ethdev_pci.h> 13d9b8b106SMichal Krawczyk #include <rte_cycles.h> 141173fca2SJan Medala #include <rte_pci.h> 1592401abfSShai Brandes #include <rte_bus_pci.h> 16d9b8b106SMichal Krawczyk #include <rte_timer.h> 1792401abfSShai Brandes #include <rte_dev.h> 1834d5e97eSMichal Krawczyk #include <rte_net.h> 191173fca2SJan Medala 201173fca2SJan Medala #include "ena_com.h" 211173fca2SJan Medala 221173fca2SJan Medala #define ENA_REGS_BAR 0 231173fca2SJan Medala #define ENA_MEM_BAR 2 241173fca2SJan Medala 251173fca2SJan Medala #define ENA_MAX_NUM_QUEUES 128 261173fca2SJan Medala #define ENA_MIN_FRAME_LEN 64 271173fca2SJan Medala #define ENA_NAME_MAX_LEN 20 281173fca2SJan Medala #define ENA_PKT_MAX_BUFS 17 2938364c26SMichal Krawczyk #define ENA_RX_BUF_MIN_SIZE 1400 305920d930SMichal Krawczyk #define ENA_DEFAULT_RING_SIZE 1024 311173fca2SJan Medala 32e3595539SStanislaw Kardach #define ENA_RX_RSS_TABLE_LOG_SIZE 7 33e3595539SStanislaw Kardach #define ENA_RX_RSS_TABLE_SIZE (1 << ENA_RX_RSS_TABLE_LOG_SIZE) 34e3595539SStanislaw Kardach 35241da076SRafal Kozik #define ENA_MIN_MTU 128 36241da076SRafal Kozik 37c4144557SJan Medala #define ENA_MMIO_DISABLE_REG_READ BIT(0) 38c4144557SJan Medala 39d9b8b106SMichal Krawczyk #define ENA_WD_TIMEOUT_SEC 3 40d9b8b106SMichal Krawczyk #define ENA_DEVICE_KALIVE_TIMEOUT (ENA_WD_TIMEOUT_SEC * rte_get_timer_hz()) 41d9b8b106SMichal Krawczyk 42f93e20e5SMichal Krawczyk #define ENA_TX_TIMEOUT (5 * rte_get_timer_hz()) 43cc0c5d25SMichal Krawczyk #define ENA_MAX_TX_TIMEOUT_SECONDS 60 44f93e20e5SMichal Krawczyk #define ENA_MONITORED_TX_QUEUES 3 45f93e20e5SMichal Krawczyk #define ENA_DEFAULT_MISSING_COMP 256U 46f93e20e5SMichal Krawczyk 47ca1dfa85SShai Brandes #define ENA_MAX_CONTROL_PATH_POLL_INTERVAL_MSEC 1000 48ca1dfa85SShai Brandes 4977550607SMichal Krawczyk /* While processing submitted and completed descriptors (rx and tx path 5077550607SMichal Krawczyk * respectively) in a loop it is desired to: 517be78d02SJosh Soref * - perform batch submissions while populating submission queue 5277550607SMichal Krawczyk * - avoid blocking transmission of other packets during cleanup phase 5377550607SMichal Krawczyk * Hence the utilization ratio of 1/8 of a queue size or max value if the size 5477550607SMichal Krawczyk * of the ring is very big - like 8k Rx rings. 5577550607SMichal Krawczyk */ 5677550607SMichal Krawczyk #define ENA_REFILL_THRESH_DIVIDER 8 5777550607SMichal Krawczyk #define ENA_REFILL_THRESH_PACKET 256 5877550607SMichal Krawczyk 5992401abfSShai Brandes /* 6092401abfSShai Brandes * The max customer metrics is equal or bigger than the ENI metrics. That 6192401abfSShai Brandes * assumption simplifies the fallback to the legacy metrics mechanism. 6292401abfSShai Brandes */ 6392401abfSShai Brandes #define ENA_MAX_CUSTOMER_METRICS 6 6492401abfSShai Brandes 65c0006061SMichal Krawczyk #define ENA_IDX_NEXT_MASKED(idx, mask) (((idx) + 1) & (mask)) 66c0006061SMichal Krawczyk #define ENA_IDX_ADD_MASKED(idx, n, mask) (((idx) + (n)) & (mask)) 67c0006061SMichal Krawczyk 6834d5e97eSMichal Krawczyk #define ENA_RX_RSS_TABLE_LOG_SIZE 7 6934d5e97eSMichal Krawczyk #define ENA_RX_RSS_TABLE_SIZE (1 << ENA_RX_RSS_TABLE_LOG_SIZE) 7034d5e97eSMichal Krawczyk 7134d5e97eSMichal Krawczyk #define ENA_HASH_KEY_SIZE 40 7234d5e97eSMichal Krawczyk 73295968d1SFerruh Yigit #define ENA_ALL_RSS_HF (RTE_ETH_RSS_NONFRAG_IPV4_TCP | RTE_ETH_RSS_NONFRAG_IPV4_UDP | \ 74295968d1SFerruh Yigit RTE_ETH_RSS_NONFRAG_IPV6_TCP | RTE_ETH_RSS_NONFRAG_IPV6_UDP) 7534d5e97eSMichal Krawczyk 7634d5e97eSMichal Krawczyk #define ENA_IO_TXQ_IDX(q) (2 * (q)) 7734d5e97eSMichal Krawczyk #define ENA_IO_RXQ_IDX(q) (2 * (q) + 1) 7834d5e97eSMichal Krawczyk /* Reversed version of ENA_IO_RXQ_IDX */ 7934d5e97eSMichal Krawczyk #define ENA_IO_RXQ_IDX_REV(q) (((q) - 1) / 2) 8034d5e97eSMichal Krawczyk 8134d5e97eSMichal Krawczyk extern struct ena_shared_data *ena_shared_data; 8234d5e97eSMichal Krawczyk 831173fca2SJan Medala struct ena_adapter; 841173fca2SJan Medala 851173fca2SJan Medala enum ena_ring_type { 861173fca2SJan Medala ENA_RING_TYPE_RX = 1, 871173fca2SJan Medala ENA_RING_TYPE_TX = 2, 881173fca2SJan Medala }; 891173fca2SJan Medala 901f11149dSShai Brandes typedef enum ena_llq_policy_t { 911f11149dSShai Brandes ENA_LLQ_POLICY_DISABLED = 0, /* Host queues */ 921f11149dSShai Brandes ENA_LLQ_POLICY_RECOMMENDED = 1, /* Device recommendation */ 931f11149dSShai Brandes ENA_LLQ_POLICY_NORMAL = 2, /* 128B long LLQ entry */ 941f11149dSShai Brandes ENA_LLQ_POLICY_LARGE = 3, /* 256B long LLQ entry */ 951f11149dSShai Brandes ENA_LLQ_POLICY_LAST, 961f11149dSShai Brandes } ena_llq_policy; 971f11149dSShai Brandes 981173fca2SJan Medala struct ena_tx_buffer { 991173fca2SJan Medala struct rte_mbuf *mbuf; 1001173fca2SJan Medala unsigned int tx_descs; 1011173fca2SJan Medala unsigned int num_of_bufs; 102f93e20e5SMichal Krawczyk uint64_t timestamp; 103f93e20e5SMichal Krawczyk bool print_once; 1041173fca2SJan Medala struct ena_com_buf bufs[ENA_PKT_MAX_BUFS]; 1051173fca2SJan Medala }; 1061173fca2SJan Medala 1071be097dcSMichal Krawczyk /* Rx buffer holds only pointer to the mbuf - may be expanded in the future */ 1081be097dcSMichal Krawczyk struct ena_rx_buffer { 1091be097dcSMichal Krawczyk struct rte_mbuf *mbuf; 1101be097dcSMichal Krawczyk struct ena_com_buf ena_buf; 1111be097dcSMichal Krawczyk }; 1121be097dcSMichal Krawczyk 113ea93d37eSRafal Kozik struct ena_calc_queue_size_ctx { 114ea93d37eSRafal Kozik struct ena_com_dev_get_features_ctx *get_feat_ctx; 115ea93d37eSRafal Kozik struct ena_com_dev *ena_dev; 1165920d930SMichal Krawczyk u32 max_rx_queue_size; 1175920d930SMichal Krawczyk u32 max_tx_queue_size; 118ea93d37eSRafal Kozik u16 max_tx_sgl_size; 119ea93d37eSRafal Kozik u16 max_rx_sgl_size; 120ea93d37eSRafal Kozik }; 121ea93d37eSRafal Kozik 12245b6d861SMichal Krawczyk struct ena_stats_tx { 12345b6d861SMichal Krawczyk u64 cnt; 12445b6d861SMichal Krawczyk u64 bytes; 12545b6d861SMichal Krawczyk u64 prepare_ctx_err; 12645b6d861SMichal Krawczyk u64 tx_poll; 12745b6d861SMichal Krawczyk u64 doorbells; 12845b6d861SMichal Krawczyk u64 bad_req_id; 1297830e905SSolganik Alexander u64 available_desc; 130f93e20e5SMichal Krawczyk u64 missed_tx; 13145b6d861SMichal Krawczyk }; 13245b6d861SMichal Krawczyk 13345b6d861SMichal Krawczyk struct ena_stats_rx { 13445b6d861SMichal Krawczyk u64 cnt; 13545b6d861SMichal Krawczyk u64 bytes; 1367830e905SSolganik Alexander u64 refill_partial; 13784daba99SMichal Krawczyk u64 l3_csum_bad; 13884daba99SMichal Krawczyk u64 l4_csum_bad; 13984daba99SMichal Krawczyk u64 l4_csum_good; 1407830e905SSolganik Alexander u64 mbuf_alloc_fail; 14145b6d861SMichal Krawczyk u64 bad_desc_num; 14245b6d861SMichal Krawczyk u64 bad_req_id; 143*7a166990SShai Brandes u64 bad_desc; 144*7a166990SShai Brandes u64 unknown_error; 14545b6d861SMichal Krawczyk }; 14645b6d861SMichal Krawczyk 14727595cd8STyler Retzlaff struct __rte_cache_aligned ena_ring { 1481173fca2SJan Medala u16 next_to_use; 1491173fca2SJan Medala u16 next_to_clean; 150f93e20e5SMichal Krawczyk uint64_t last_cleanup_ticks; 1511173fca2SJan Medala 1521173fca2SJan Medala enum ena_ring_type type; 1531173fca2SJan Medala enum ena_admin_placement_policy_type tx_mem_queue_type; 1541d973d8fSIgor Chauskin 1551d973d8fSIgor Chauskin /* Indicate there are Tx packets pushed to the device and wait for db */ 1561d973d8fSIgor Chauskin bool pkts_without_db; 1571d973d8fSIgor Chauskin 158c2034976SMichal Krawczyk /* Holds the empty requests for TX/RX OOO completions */ 159c2034976SMichal Krawczyk union { 1601173fca2SJan Medala uint16_t *empty_tx_reqs; 161c2034976SMichal Krawczyk uint16_t *empty_rx_reqs; 162c2034976SMichal Krawczyk }; 163c2034976SMichal Krawczyk 1641173fca2SJan Medala union { 1651173fca2SJan Medala struct ena_tx_buffer *tx_buffer_info; /* contex of tx packet */ 1661be097dcSMichal Krawczyk struct ena_rx_buffer *rx_buffer_info; /* contex of rx packet */ 1671173fca2SJan Medala }; 16879405ee1SRafal Kozik struct rte_mbuf **rx_refill_buffer; 1691173fca2SJan Medala unsigned int ring_size; /* number of tx/rx_buffer_info's entries */ 170c0006061SMichal Krawczyk unsigned int size_mask; 1711173fca2SJan Medala 1721173fca2SJan Medala struct ena_com_io_cq *ena_com_io_cq; 1731173fca2SJan Medala struct ena_com_io_sq *ena_com_io_sq; 1741173fca2SJan Medala 175005064e5SMichal Krawczyk union { 176005064e5SMichal Krawczyk uint16_t tx_free_thresh; 177005064e5SMichal Krawczyk uint16_t rx_free_thresh; 178005064e5SMichal Krawczyk }; 179005064e5SMichal Krawczyk 18027595cd8STyler Retzlaff alignas(RTE_CACHE_LINE_SIZE) struct ena_com_rx_buf_info ena_bufs[ENA_PKT_MAX_BUFS]; 1811173fca2SJan Medala 1821173fca2SJan Medala struct rte_mempool *mb_pool; 1831173fca2SJan Medala unsigned int port_id; 1841173fca2SJan Medala unsigned int id; 1851173fca2SJan Medala /* Max length PMD can push to device for LLQ */ 1861173fca2SJan Medala uint8_t tx_max_header_size; 1871173fca2SJan Medala int configured; 1882fca2a98SMichal Krawczyk 1892fca2a98SMichal Krawczyk uint8_t *push_buf_intermediate_buf; 1902fca2a98SMichal Krawczyk 1911173fca2SJan Medala struct ena_adapter *adapter; 19256b8b9b7SRafal Kozik uint64_t offloads; 1932061fe41SRafal Kozik u16 sgl_size; 19445b6d861SMichal Krawczyk 19533dde075SMichal Krawczyk bool disable_meta_caching; 19633dde075SMichal Krawczyk 19745b6d861SMichal Krawczyk union { 19845b6d861SMichal Krawczyk struct ena_stats_rx rx_stats; 19945b6d861SMichal Krawczyk struct ena_stats_tx tx_stats; 20045b6d861SMichal Krawczyk }; 2014217cb0bSMichal Krawczyk 2024217cb0bSMichal Krawczyk unsigned int numa_socket_id; 203f93e20e5SMichal Krawczyk 204f93e20e5SMichal Krawczyk uint32_t missing_tx_completion_threshold; 20527595cd8STyler Retzlaff }; 2061173fca2SJan Medala 2071173fca2SJan Medala enum ena_adapter_state { 2081173fca2SJan Medala ENA_ADAPTER_STATE_FREE = 0, 2091173fca2SJan Medala ENA_ADAPTER_STATE_INIT = 1, 2101173fca2SJan Medala ENA_ADAPTER_STATE_RUNNING = 2, 2111173fca2SJan Medala ENA_ADAPTER_STATE_STOPPED = 3, 2121173fca2SJan Medala ENA_ADAPTER_STATE_CONFIG = 4, 213eb0ef49dSMichal Krawczyk ENA_ADAPTER_STATE_CLOSED = 5, 2141173fca2SJan Medala }; 2151173fca2SJan Medala 2161173fca2SJan Medala struct ena_driver_stats { 2171173fca2SJan Medala rte_atomic64_t ierrors; 2181173fca2SJan Medala rte_atomic64_t oerrors; 2191173fca2SJan Medala rte_atomic64_t rx_nombuf; 220e1e73e32SMichal Krawczyk u64 rx_drops; 2211173fca2SJan Medala }; 2221173fca2SJan Medala 223372c1af5SJan Medala struct ena_stats_dev { 224372c1af5SJan Medala u64 wd_expired; 2257830e905SSolganik Alexander u64 dev_start; 2267830e905SSolganik Alexander u64 dev_stop; 227e1e73e32SMichal Krawczyk /* 228e1e73e32SMichal Krawczyk * Tx drops cannot be reported as the driver statistic, because DPDK 229e1e73e32SMichal Krawczyk * rte_eth_stats structure isn't providing appropriate field for that. 230e1e73e32SMichal Krawczyk * As a workaround it is being published as an extended statistic. 231e1e73e32SMichal Krawczyk */ 232e1e73e32SMichal Krawczyk u64 tx_drops; 233372c1af5SJan Medala }; 234372c1af5SJan Medala 23592401abfSShai Brandes struct ena_stats_metrics { 23645718adaSMichal Krawczyk /* 23745718adaSMichal Krawczyk * The number of packets shaped due to inbound aggregate BW 23845718adaSMichal Krawczyk * allowance being exceeded 23945718adaSMichal Krawczyk */ 24045718adaSMichal Krawczyk uint64_t bw_in_allowance_exceeded; 24145718adaSMichal Krawczyk /* 24245718adaSMichal Krawczyk * The number of packets shaped due to outbound aggregate BW 24345718adaSMichal Krawczyk * allowance being exceeded 24445718adaSMichal Krawczyk */ 24545718adaSMichal Krawczyk uint64_t bw_out_allowance_exceeded; 24645718adaSMichal Krawczyk /* The number of packets shaped due to PPS allowance being exceeded */ 24745718adaSMichal Krawczyk uint64_t pps_allowance_exceeded; 24845718adaSMichal Krawczyk /* 24945718adaSMichal Krawczyk * The number of packets shaped due to connection tracking 25045718adaSMichal Krawczyk * allowance being exceeded and leading to failure in establishment 25145718adaSMichal Krawczyk * of new connections 25245718adaSMichal Krawczyk */ 25345718adaSMichal Krawczyk uint64_t conntrack_allowance_exceeded; 25445718adaSMichal Krawczyk /* 25545718adaSMichal Krawczyk * The number of packets shaped due to linklocal packet rate 25645718adaSMichal Krawczyk * allowance being exceeded 25745718adaSMichal Krawczyk */ 25845718adaSMichal Krawczyk uint64_t linklocal_allowance_exceeded; 25992401abfSShai Brandes /* 26092401abfSShai Brandes * The number of available connections 26192401abfSShai Brandes */ 26292401abfSShai Brandes uint64_t conntrack_allowance_available; 26345718adaSMichal Krawczyk }; 26445718adaSMichal Krawczyk 265a73dd098SShai Brandes struct ena_stats_srd { 266a73dd098SShai Brandes /* Describes which ENA Express features are enabled */ 267a73dd098SShai Brandes uint64_t ena_srd_mode; 268a73dd098SShai Brandes 269a73dd098SShai Brandes /* Number of packets transmitted over ENA SRD */ 270a73dd098SShai Brandes uint64_t ena_srd_tx_pkts; 271a73dd098SShai Brandes 272a73dd098SShai Brandes /* Number of packets transmitted or could have been transmitted over ENA SRD */ 273a73dd098SShai Brandes uint64_t ena_srd_eligible_tx_pkts; 274a73dd098SShai Brandes 275a73dd098SShai Brandes /* Number of packets received over ENA SRD */ 276a73dd098SShai Brandes uint64_t ena_srd_rx_pkts; 277a73dd098SShai Brandes 278a73dd098SShai Brandes /* Percentage of the ENA SRD resources that is in use */ 279a73dd098SShai Brandes uint64_t ena_srd_resource_utilization; 280a73dd098SShai Brandes }; 281a73dd098SShai Brandes 282117ba4a6SMichal Krawczyk struct ena_offloads { 283e8c838fdSMichal Krawczyk uint32_t tx_offloads; 284e8c838fdSMichal Krawczyk uint32_t rx_offloads; 285117ba4a6SMichal Krawczyk }; 286117ba4a6SMichal Krawczyk 2871173fca2SJan Medala /* board specific private data structure */ 2881173fca2SJan Medala struct ena_adapter { 2891173fca2SJan Medala /* OS defined structs */ 290aab58857SStanislaw Kardach struct rte_eth_dev_data *edev_data; 2911173fca2SJan Medala 29227595cd8STyler Retzlaff alignas(RTE_CACHE_LINE_SIZE) struct ena_com_dev ena_dev; 2931173fca2SJan Medala 2941173fca2SJan Medala /* TX */ 29527595cd8STyler Retzlaff alignas(RTE_CACHE_LINE_SIZE) struct ena_ring tx_ring[ENA_MAX_NUM_QUEUES]; 2965920d930SMichal Krawczyk u32 max_tx_ring_size; 2972061fe41SRafal Kozik u16 max_tx_sgl_size; 2981173fca2SJan Medala 2991173fca2SJan Medala /* RX */ 30027595cd8STyler Retzlaff alignas(RTE_CACHE_LINE_SIZE) struct ena_ring rx_ring[ENA_MAX_NUM_QUEUES]; 3015920d930SMichal Krawczyk u32 max_rx_ring_size; 302ea93d37eSRafal Kozik u16 max_rx_sgl_size; 3031173fca2SJan Medala 3045920d930SMichal Krawczyk u32 max_num_io_queues; 3051173fca2SJan Medala u16 max_mtu; 306117ba4a6SMichal Krawczyk struct ena_offloads offloads; 3071173fca2SJan Medala 3081343c415SMichal Krawczyk /* The admin queue isn't protected by the lock and is used to 3091343c415SMichal Krawczyk * retrieve statistics from the device. As there is no guarantee that 3101343c415SMichal Krawczyk * application won't try to get statistics from multiple threads, it is 3111343c415SMichal Krawczyk * safer to lock the queue to avoid admin queue failure. 3121343c415SMichal Krawczyk */ 3131343c415SMichal Krawczyk rte_spinlock_t admin_lock; 3141343c415SMichal Krawczyk 3151173fca2SJan Medala int id_number; 3161173fca2SJan Medala char name[ENA_NAME_MAX_LEN]; 31735b2d13fSOlivier Matz u8 mac_addr[RTE_ETHER_ADDR_LEN]; 3181173fca2SJan Medala 3191173fca2SJan Medala void *regs; 3201173fca2SJan Medala void *dev_mem_base; 3211173fca2SJan Medala 3221173fca2SJan Medala struct ena_driver_stats *drv_stats; 3231173fca2SJan Medala enum ena_adapter_state state; 3241173fca2SJan Medala 325ca148440SMichal Krawczyk bool link_status; 3262081d5e2SMichal Krawczyk 3272081d5e2SMichal Krawczyk enum ena_regs_reset_reason_types reset_reason; 328d9b8b106SMichal Krawczyk 329d9b8b106SMichal Krawczyk struct rte_timer timer_wd; 330d9b8b106SMichal Krawczyk uint64_t timestamp_wd; 331d9b8b106SMichal Krawczyk uint64_t keep_alive_timeout; 3325efb9fc7SMichal Krawczyk 3337830e905SSolganik Alexander struct ena_stats_dev dev_stats; 334e3595539SStanislaw Kardach struct ena_admin_basic_stats basic_stats; 335e3595539SStanislaw Kardach 336e3595539SStanislaw Kardach u32 indirect_table[ENA_RX_RSS_TABLE_SIZE]; 3377830e905SSolganik Alexander 338b9b05d6fSMichal Krawczyk uint32_t all_aenq_groups; 339b9b05d6fSMichal Krawczyk uint32_t active_aenq_groups; 340e859d2b8SRafal Kozik 341b9b05d6fSMichal Krawczyk bool trigger_reset; 3421f11149dSShai Brandes ena_llq_policy llq_header_policy; 343f93e20e5SMichal Krawczyk 344f93e20e5SMichal Krawczyk uint32_t last_tx_comp_qid; 345f93e20e5SMichal Krawczyk uint64_t missing_tx_completion_to; 346f93e20e5SMichal Krawczyk uint64_t missing_tx_completion_budget; 347f93e20e5SMichal Krawczyk uint64_t tx_cleanup_stall_delay; 348850e1bb1SMichal Krawczyk 349850e1bb1SMichal Krawczyk uint64_t memzone_cnt; 35092401abfSShai Brandes 351ca1dfa85SShai Brandes /* Time (in microseconds) of the control path queues monitoring interval */ 352ca1dfa85SShai Brandes uint64_t control_path_poll_interval; 353ca1dfa85SShai Brandes 35492401abfSShai Brandes /* 35592401abfSShai Brandes * Helper variables for holding the information about the supported 35692401abfSShai Brandes * metrics. 35792401abfSShai Brandes */ 35827595cd8STyler Retzlaff alignas(RTE_CACHE_LINE_SIZE) uint64_t metrics_stats[ENA_MAX_CUSTOMER_METRICS]; 35992401abfSShai Brandes uint16_t metrics_num; 36027595cd8STyler Retzlaff alignas(RTE_CACHE_LINE_SIZE) struct ena_stats_srd srd_stats; 3611173fca2SJan Medala }; 3621173fca2SJan Medala 363e3595539SStanislaw Kardach int ena_mp_indirect_table_set(struct ena_adapter *adapter); 364e3595539SStanislaw Kardach int ena_mp_indirect_table_get(struct ena_adapter *adapter, 365e3595539SStanislaw Kardach uint32_t *indirect_table); 36634d5e97eSMichal Krawczyk int ena_rss_reta_update(struct rte_eth_dev *dev, 36734d5e97eSMichal Krawczyk struct rte_eth_rss_reta_entry64 *reta_conf, 36834d5e97eSMichal Krawczyk uint16_t reta_size); 36934d5e97eSMichal Krawczyk int ena_rss_reta_query(struct rte_eth_dev *dev, 37034d5e97eSMichal Krawczyk struct rte_eth_rss_reta_entry64 *reta_conf, 37134d5e97eSMichal Krawczyk uint16_t reta_size); 37234d5e97eSMichal Krawczyk int ena_rss_hash_update(struct rte_eth_dev *dev, 37334d5e97eSMichal Krawczyk struct rte_eth_rss_conf *rss_conf); 37434d5e97eSMichal Krawczyk int ena_rss_hash_conf_get(struct rte_eth_dev *dev, 37534d5e97eSMichal Krawczyk struct rte_eth_rss_conf *rss_conf); 37634d5e97eSMichal Krawczyk int ena_rss_configure(struct ena_adapter *adapter); 37734d5e97eSMichal Krawczyk 3781173fca2SJan Medala #endif /* _ENA_ETHDEV_H_ */ 379