.. | .. |
---|
| 1 | +/* SPDX-License-Identifier: GPL-2.0 OR Linux-OpenIB */ |
---|
1 | 2 | /* |
---|
2 | | - * Copyright 2015 Amazon.com, Inc. or its affiliates. |
---|
3 | | - * |
---|
4 | | - * This software is available to you under a choice of one of two |
---|
5 | | - * licenses. You may choose to be licensed under the terms of the GNU |
---|
6 | | - * General Public License (GPL) Version 2, available from the file |
---|
7 | | - * COPYING in the main directory of this source tree, or the |
---|
8 | | - * BSD license below: |
---|
9 | | - * |
---|
10 | | - * Redistribution and use in source and binary forms, with or |
---|
11 | | - * without modification, are permitted provided that the following |
---|
12 | | - * conditions are met: |
---|
13 | | - * |
---|
14 | | - * - Redistributions of source code must retain the above |
---|
15 | | - * copyright notice, this list of conditions and the following |
---|
16 | | - * disclaimer. |
---|
17 | | - * |
---|
18 | | - * - Redistributions in binary form must reproduce the above |
---|
19 | | - * copyright notice, this list of conditions and the following |
---|
20 | | - * disclaimer in the documentation and/or other materials |
---|
21 | | - * provided with the distribution. |
---|
22 | | - * |
---|
23 | | - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, |
---|
24 | | - * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF |
---|
25 | | - * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND |
---|
26 | | - * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS |
---|
27 | | - * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN |
---|
28 | | - * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
---|
29 | | - * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
---|
30 | | - * SOFTWARE. |
---|
| 3 | + * Copyright 2015-2020 Amazon.com, Inc. or its affiliates. All rights reserved. |
---|
31 | 4 | */ |
---|
32 | 5 | |
---|
33 | 6 | #ifndef ENA_H |
---|
34 | 7 | #define ENA_H |
---|
35 | 8 | |
---|
36 | 9 | #include <linux/bitops.h> |
---|
| 10 | +#include <linux/dim.h> |
---|
37 | 11 | #include <linux/etherdevice.h> |
---|
| 12 | +#include <linux/if_vlan.h> |
---|
38 | 13 | #include <linux/inetdevice.h> |
---|
39 | 14 | #include <linux/interrupt.h> |
---|
40 | 15 | #include <linux/netdevice.h> |
---|
.. | .. |
---|
43 | 18 | #include "ena_com.h" |
---|
44 | 19 | #include "ena_eth_com.h" |
---|
45 | 20 | |
---|
46 | | -#define DRV_MODULE_VER_MAJOR 1 |
---|
47 | | -#define DRV_MODULE_VER_MINOR 5 |
---|
48 | | -#define DRV_MODULE_VER_SUBMINOR 0 |
---|
| 21 | +#define DRV_MODULE_GEN_MAJOR 2 |
---|
| 22 | +#define DRV_MODULE_GEN_MINOR 1 |
---|
| 23 | +#define DRV_MODULE_GEN_SUBMINOR 0 |
---|
49 | 24 | |
---|
50 | 25 | #define DRV_MODULE_NAME "ena" |
---|
51 | | -#ifndef DRV_MODULE_VERSION |
---|
52 | | -#define DRV_MODULE_VERSION \ |
---|
53 | | - __stringify(DRV_MODULE_VER_MAJOR) "." \ |
---|
54 | | - __stringify(DRV_MODULE_VER_MINOR) "." \ |
---|
55 | | - __stringify(DRV_MODULE_VER_SUBMINOR) "K" |
---|
56 | | -#endif |
---|
57 | 26 | |
---|
58 | 27 | #define DEVICE_NAME "Elastic Network Adapter (ENA)" |
---|
59 | 28 | |
---|
60 | 29 | /* 1 for AENQ + ADMIN */ |
---|
61 | 30 | #define ENA_ADMIN_MSIX_VEC 1 |
---|
62 | 31 | #define ENA_MAX_MSIX_VEC(io_queues) (ENA_ADMIN_MSIX_VEC + (io_queues)) |
---|
| 32 | + |
---|
| 33 | +/* The ENA buffer length fields is 16 bit long. So when PAGE_SIZE == 64kB the |
---|
| 34 | + * driver passes 0. |
---|
| 35 | + * Since the max packet size the ENA handles is ~9kB limit the buffer length to |
---|
| 36 | + * 16kB. |
---|
| 37 | + */ |
---|
| 38 | +#if PAGE_SIZE > SZ_16K |
---|
| 39 | +#define ENA_PAGE_SIZE (_AC(SZ_16K, UL)) |
---|
| 40 | +#else |
---|
| 41 | +#define ENA_PAGE_SIZE PAGE_SIZE |
---|
| 42 | +#endif |
---|
63 | 43 | |
---|
64 | 44 | #define ENA_MIN_MSIX_VEC 2 |
---|
65 | 45 | |
---|
.. | .. |
---|
68 | 48 | #define ENA_BAR_MASK (BIT(ENA_REG_BAR) | BIT(ENA_MEM_BAR)) |
---|
69 | 49 | |
---|
70 | 50 | #define ENA_DEFAULT_RING_SIZE (1024) |
---|
| 51 | +#define ENA_MIN_RING_SIZE (256) |
---|
| 52 | + |
---|
| 53 | +#define ENA_MIN_NUM_IO_QUEUES (1) |
---|
71 | 54 | |
---|
72 | 55 | #define ENA_TX_WAKEUP_THRESH (MAX_SKB_FRAGS + 2) |
---|
73 | | -#define ENA_DEFAULT_RX_COPYBREAK (128 - NET_IP_ALIGN) |
---|
| 56 | +#define ENA_DEFAULT_RX_COPYBREAK (256 - NET_IP_ALIGN) |
---|
74 | 57 | |
---|
75 | 58 | /* limit the buffer size to 600 bytes to handle MTU changes from very |
---|
76 | 59 | * small to very large, in which case the number of buffers per packet |
---|
.. | .. |
---|
88 | 71 | #define ENA_RX_RSS_TABLE_LOG_SIZE 7 |
---|
89 | 72 | #define ENA_RX_RSS_TABLE_SIZE (1 << ENA_RX_RSS_TABLE_LOG_SIZE) |
---|
90 | 73 | |
---|
91 | | -#define ENA_HASH_KEY_SIZE 40 |
---|
92 | | - |
---|
93 | 74 | /* The number of tx packet completions that will be handled each NAPI poll |
---|
94 | 75 | * cycle is ring_size / ENA_TX_POLL_BUDGET_DIVIDER. |
---|
95 | 76 | */ |
---|
96 | 77 | #define ENA_TX_POLL_BUDGET_DIVIDER 4 |
---|
97 | 78 | |
---|
98 | | -/* Refill Rx queue when number of available descriptors is below |
---|
99 | | - * QUEUE_SIZE / ENA_RX_REFILL_THRESH_DIVIDER |
---|
| 79 | +/* Refill Rx queue when number of required descriptors is above |
---|
| 80 | + * QUEUE_SIZE / ENA_RX_REFILL_THRESH_DIVIDER or ENA_RX_REFILL_THRESH_PACKET |
---|
100 | 81 | */ |
---|
101 | 82 | #define ENA_RX_REFILL_THRESH_DIVIDER 8 |
---|
| 83 | +#define ENA_RX_REFILL_THRESH_PACKET 256 |
---|
102 | 84 | |
---|
103 | 85 | /* Number of queues to check for missing queues per timer service */ |
---|
104 | 86 | #define ENA_MONITORED_TX_QUEUES 4 |
---|
.. | .. |
---|
120 | 102 | #define ENA_IO_IRQ_FIRST_IDX 1 |
---|
121 | 103 | #define ENA_IO_IRQ_IDX(q) (ENA_IO_IRQ_FIRST_IDX + (q)) |
---|
122 | 104 | |
---|
| 105 | +#define ENA_ADMIN_POLL_DELAY_US 100 |
---|
| 106 | + |
---|
123 | 107 | /* ENA device should send keep alive msg every 1 sec. |
---|
124 | 108 | * We wait for 6 sec just to be on the safe side. |
---|
125 | 109 | */ |
---|
.. | .. |
---|
127 | 111 | #define ENA_MAX_NO_INTERRUPT_ITERATIONS 3 |
---|
128 | 112 | |
---|
129 | 113 | #define ENA_MMIO_DISABLE_REG_READ BIT(0) |
---|
| 114 | + |
---|
| 115 | +/* The max MTU size is configured to be the ethernet frame size without |
---|
| 116 | + * the overhead of the ethernet header, which can have a VLAN header, and |
---|
| 117 | + * a frame check sequence (FCS). |
---|
| 118 | + * The buffer size we share with the device is defined to be ENA_PAGE_SIZE |
---|
| 119 | + */ |
---|
| 120 | + |
---|
| 121 | +#define ENA_XDP_MAX_MTU (ENA_PAGE_SIZE - ETH_HLEN - ETH_FCS_LEN - \ |
---|
| 122 | + VLAN_HLEN - XDP_PACKET_HEADROOM - \ |
---|
| 123 | + SKB_DATA_ALIGN(sizeof(struct skb_shared_info))) |
---|
| 124 | + |
---|
| 125 | +#define ENA_IS_XDP_INDEX(adapter, index) (((index) >= (adapter)->xdp_first_ring) && \ |
---|
| 126 | + ((index) < (adapter)->xdp_first_ring + (adapter)->xdp_num_queues)) |
---|
130 | 127 | |
---|
131 | 128 | struct ena_irq { |
---|
132 | 129 | irq_handler_t handler; |
---|
.. | .. |
---|
141 | 138 | struct napi_struct napi ____cacheline_aligned; |
---|
142 | 139 | struct ena_ring *tx_ring; |
---|
143 | 140 | struct ena_ring *rx_ring; |
---|
| 141 | + struct ena_ring *xdp_ring; |
---|
| 142 | + bool first_interrupt; |
---|
| 143 | + bool interrupts_masked; |
---|
144 | 144 | u32 qid; |
---|
| 145 | + struct dim dim; |
---|
| 146 | +}; |
---|
| 147 | + |
---|
| 148 | +struct ena_calc_queue_size_ctx { |
---|
| 149 | + struct ena_com_dev_get_features_ctx *get_feat_ctx; |
---|
| 150 | + struct ena_com_dev *ena_dev; |
---|
| 151 | + struct pci_dev *pdev; |
---|
| 152 | + u32 tx_queue_size; |
---|
| 153 | + u32 rx_queue_size; |
---|
| 154 | + u32 max_tx_queue_size; |
---|
| 155 | + u32 max_rx_queue_size; |
---|
| 156 | + u16 max_tx_sgl_size; |
---|
| 157 | + u16 max_rx_sgl_size; |
---|
145 | 158 | }; |
---|
146 | 159 | |
---|
147 | 160 | struct ena_tx_buffer { |
---|
.. | .. |
---|
152 | 165 | u32 tx_descs; |
---|
153 | 166 | /* num of buffers used by this skb */ |
---|
154 | 167 | u32 num_of_bufs; |
---|
| 168 | + |
---|
| 169 | + /* XDP buffer structure which is used for sending packets in |
---|
| 170 | + * the xdp queues |
---|
| 171 | + */ |
---|
| 172 | + struct xdp_frame *xdpf; |
---|
| 173 | + /* The rx page for the rx buffer that was received in rx and |
---|
| 174 | + * re transmitted on xdp tx queues as a result of XDP_TX action. |
---|
| 175 | + * We need to free the page once we finished cleaning the buffer in |
---|
| 176 | + * clean_xdp_irq() |
---|
| 177 | + */ |
---|
| 178 | + struct page *xdp_rx_page; |
---|
| 179 | + |
---|
| 180 | + /* Indicate if bufs[0] map the linear data of the skb. */ |
---|
| 181 | + u8 map_linear_data; |
---|
155 | 182 | |
---|
156 | 183 | /* Used for detect missing tx packets to limit the number of prints */ |
---|
157 | 184 | u32 print_once; |
---|
.. | .. |
---|
188 | 215 | u64 tx_poll; |
---|
189 | 216 | u64 doorbells; |
---|
190 | 217 | u64 bad_req_id; |
---|
| 218 | + u64 llq_buffer_copy; |
---|
191 | 219 | u64 missed_tx; |
---|
| 220 | + u64 unmask_interrupt; |
---|
192 | 221 | }; |
---|
193 | 222 | |
---|
194 | 223 | struct ena_stats_rx { |
---|
195 | 224 | u64 cnt; |
---|
196 | 225 | u64 bytes; |
---|
| 226 | + u64 rx_copybreak_pkt; |
---|
| 227 | + u64 csum_good; |
---|
197 | 228 | u64 refil_partial; |
---|
198 | 229 | u64 bad_csum; |
---|
199 | 230 | u64 page_alloc_fail; |
---|
200 | 231 | u64 skb_alloc_fail; |
---|
201 | 232 | u64 dma_mapping_err; |
---|
202 | 233 | u64 bad_desc_num; |
---|
203 | | - u64 rx_copybreak_pkt; |
---|
204 | 234 | u64 bad_req_id; |
---|
205 | 235 | u64 empty_rx_ring; |
---|
| 236 | + u64 csum_unchecked; |
---|
| 237 | + u64 xdp_aborted; |
---|
| 238 | + u64 xdp_drop; |
---|
| 239 | + u64 xdp_pass; |
---|
| 240 | + u64 xdp_tx; |
---|
| 241 | + u64 xdp_invalid; |
---|
206 | 242 | }; |
---|
207 | 243 | |
---|
208 | 244 | struct ena_ring { |
---|
209 | | - union { |
---|
210 | | - /* Holds the empty requests for TX/RX |
---|
211 | | - * out of order completions |
---|
212 | | - */ |
---|
213 | | - u16 *free_tx_ids; |
---|
214 | | - u16 *free_rx_ids; |
---|
215 | | - }; |
---|
| 245 | + /* Holds the empty requests for TX/RX |
---|
| 246 | + * out of order completions |
---|
| 247 | + */ |
---|
| 248 | + u16 *free_ids; |
---|
216 | 249 | |
---|
217 | 250 | union { |
---|
218 | 251 | struct ena_tx_buffer *tx_buffer_info; |
---|
.. | .. |
---|
228 | 261 | struct ena_adapter *adapter; |
---|
229 | 262 | struct ena_com_io_cq *ena_com_io_cq; |
---|
230 | 263 | struct ena_com_io_sq *ena_com_io_sq; |
---|
| 264 | + struct bpf_prog *xdp_bpf_prog; |
---|
| 265 | + struct xdp_rxq_info xdp_rxq; |
---|
231 | 266 | |
---|
232 | 267 | u16 next_to_use; |
---|
233 | 268 | u16 next_to_clean; |
---|
234 | 269 | u16 rx_copybreak; |
---|
| 270 | + u16 rx_headroom; |
---|
235 | 271 | u16 qid; |
---|
236 | 272 | u16 mtu; |
---|
237 | 273 | u16 sgl_size; |
---|
.. | .. |
---|
240 | 276 | u8 tx_max_header_size; |
---|
241 | 277 | |
---|
242 | 278 | bool first_interrupt; |
---|
| 279 | + bool disable_meta_caching; |
---|
243 | 280 | u16 no_interrupt_event_cnt; |
---|
244 | 281 | |
---|
245 | 282 | /* cpu for TPH */ |
---|
.. | .. |
---|
252 | 289 | struct ena_com_rx_buf_info ena_bufs[ENA_PKT_MAX_BUFS]; |
---|
253 | 290 | u32 smoothed_interval; |
---|
254 | 291 | u32 per_napi_packets; |
---|
255 | | - u32 per_napi_bytes; |
---|
256 | | - enum ena_intr_moder_level moder_tbl_idx; |
---|
| 292 | + u16 non_empty_napi_events; |
---|
257 | 293 | struct u64_stats_sync syncp; |
---|
258 | 294 | union { |
---|
259 | 295 | struct ena_stats_tx tx_stats; |
---|
260 | 296 | struct ena_stats_rx rx_stats; |
---|
261 | 297 | }; |
---|
| 298 | + |
---|
| 299 | + u8 *push_buf_intermediate_buf; |
---|
262 | 300 | int empty_rx_queue; |
---|
263 | 301 | } ____cacheline_aligned; |
---|
264 | 302 | |
---|
.. | .. |
---|
271 | 309 | u64 interface_down; |
---|
272 | 310 | u64 admin_q_pause; |
---|
273 | 311 | u64 rx_drops; |
---|
| 312 | + u64 tx_drops; |
---|
274 | 313 | }; |
---|
275 | 314 | |
---|
276 | 315 | enum ena_flags_t { |
---|
.. | .. |
---|
295 | 334 | u32 rx_copybreak; |
---|
296 | 335 | u32 max_mtu; |
---|
297 | 336 | |
---|
298 | | - int num_queues; |
---|
| 337 | + u32 num_io_queues; |
---|
| 338 | + u32 max_num_io_queues; |
---|
299 | 339 | |
---|
300 | 340 | int msix_vecs; |
---|
301 | 341 | |
---|
302 | 342 | u32 missing_tx_completion_threshold; |
---|
303 | 343 | |
---|
304 | | - u32 tx_usecs, rx_usecs; /* interrupt moderation */ |
---|
305 | | - u32 tx_frames, rx_frames; /* interrupt moderation */ |
---|
| 344 | + u32 requested_tx_ring_size; |
---|
| 345 | + u32 requested_rx_ring_size; |
---|
306 | 346 | |
---|
307 | | - u32 tx_ring_size; |
---|
308 | | - u32 rx_ring_size; |
---|
| 347 | + u32 max_tx_ring_size; |
---|
| 348 | + u32 max_rx_ring_size; |
---|
309 | 349 | |
---|
310 | 350 | u32 msg_enable; |
---|
311 | 351 | |
---|
.. | .. |
---|
338 | 378 | |
---|
339 | 379 | bool wd_state; |
---|
340 | 380 | bool dev_up_before_reset; |
---|
| 381 | + bool disable_meta_caching; |
---|
341 | 382 | unsigned long last_keep_alive_jiffies; |
---|
342 | 383 | |
---|
343 | 384 | struct u64_stats_sync syncp; |
---|
344 | 385 | struct ena_stats_dev dev_stats; |
---|
| 386 | + struct ena_admin_eni_stats eni_stats; |
---|
| 387 | + bool eni_stats_supported; |
---|
345 | 388 | |
---|
346 | 389 | /* last queue index that was checked for uncompleted tx packets */ |
---|
347 | 390 | u32 last_monitored_tx_qid; |
---|
348 | 391 | |
---|
349 | 392 | enum ena_regs_reset_reason_types reset_reason; |
---|
| 393 | + |
---|
| 394 | + struct bpf_prog *xdp_bpf_prog; |
---|
| 395 | + u32 xdp_first_ring; |
---|
| 396 | + u32 xdp_num_queues; |
---|
350 | 397 | }; |
---|
351 | 398 | |
---|
352 | 399 | void ena_set_ethtool_ops(struct net_device *netdev); |
---|
.. | .. |
---|
355 | 402 | |
---|
356 | 403 | void ena_dump_stats_to_buf(struct ena_adapter *adapter, u8 *buf); |
---|
357 | 404 | |
---|
| 405 | +int ena_update_hw_stats(struct ena_adapter *adapter); |
---|
| 406 | + |
---|
| 407 | +int ena_update_queue_sizes(struct ena_adapter *adapter, |
---|
| 408 | + u32 new_tx_size, |
---|
| 409 | + u32 new_rx_size); |
---|
| 410 | + |
---|
| 411 | +int ena_update_queue_count(struct ena_adapter *adapter, u32 new_channel_count); |
---|
| 412 | + |
---|
358 | 413 | int ena_get_sset_count(struct net_device *netdev, int sset); |
---|
359 | 414 | |
---|
360 | | -/* The ENA buffer length fields is 16 bit long. So when PAGE_SIZE == 64kB the |
---|
361 | | - * driver passas 0. |
---|
362 | | - * Since the max packet size the ENA handles is ~9kB limit the buffer length to |
---|
363 | | - * 16kB. |
---|
364 | | - */ |
---|
365 | | -#if PAGE_SIZE > SZ_16K |
---|
366 | | -#define ENA_PAGE_SIZE SZ_16K |
---|
367 | | -#else |
---|
368 | | -#define ENA_PAGE_SIZE PAGE_SIZE |
---|
369 | | -#endif |
---|
| 415 | +enum ena_xdp_errors_t { |
---|
| 416 | + ENA_XDP_ALLOWED = 0, |
---|
| 417 | + ENA_XDP_CURRENT_MTU_TOO_LARGE, |
---|
| 418 | + ENA_XDP_NO_ENOUGH_QUEUES, |
---|
| 419 | +}; |
---|
| 420 | + |
---|
| 421 | +static inline bool ena_xdp_queues_present(struct ena_adapter *adapter) |
---|
| 422 | +{ |
---|
| 423 | + return adapter->xdp_first_ring != 0; |
---|
| 424 | +} |
---|
| 425 | + |
---|
| 426 | +static inline bool ena_xdp_present(struct ena_adapter *adapter) |
---|
| 427 | +{ |
---|
| 428 | + return !!adapter->xdp_bpf_prog; |
---|
| 429 | +} |
---|
| 430 | + |
---|
| 431 | +static inline bool ena_xdp_present_ring(struct ena_ring *ring) |
---|
| 432 | +{ |
---|
| 433 | + return !!ring->xdp_bpf_prog; |
---|
| 434 | +} |
---|
| 435 | + |
---|
| 436 | +static inline int ena_xdp_legal_queue_count(struct ena_adapter *adapter, |
---|
| 437 | + u32 queues) |
---|
| 438 | +{ |
---|
| 439 | + return 2 * queues <= adapter->max_num_io_queues; |
---|
| 440 | +} |
---|
| 441 | + |
---|
| 442 | +static inline enum ena_xdp_errors_t ena_xdp_allowed(struct ena_adapter *adapter) |
---|
| 443 | +{ |
---|
| 444 | + enum ena_xdp_errors_t rc = ENA_XDP_ALLOWED; |
---|
| 445 | + |
---|
| 446 | + if (adapter->netdev->mtu > ENA_XDP_MAX_MTU) |
---|
| 447 | + rc = ENA_XDP_CURRENT_MTU_TOO_LARGE; |
---|
| 448 | + else if (!ena_xdp_legal_queue_count(adapter, adapter->num_io_queues)) |
---|
| 449 | + rc = ENA_XDP_NO_ENOUGH_QUEUES; |
---|
| 450 | + |
---|
| 451 | + return rc; |
---|
| 452 | +} |
---|
370 | 453 | |
---|
371 | 454 | #endif /* !(ENA_H) */ |
---|