.. | .. |
---|
18 | 18 | #define I40E_ITR_DYNAMIC 0x8000 /* use top bit as a flag */ |
---|
19 | 19 | #define I40E_ITR_MASK 0x1FFE /* mask for ITR register value */ |
---|
20 | 20 | #define I40E_MIN_ITR 2 /* reg uses 2 usec resolution */ |
---|
21 | | -#define I40E_ITR_100K 10 /* all values below must be even */ |
---|
22 | | -#define I40E_ITR_50K 20 |
---|
23 | 21 | #define I40E_ITR_20K 50 |
---|
24 | | -#define I40E_ITR_18K 60 |
---|
25 | 22 | #define I40E_ITR_8K 122 |
---|
26 | 23 | #define I40E_MAX_ITR 8160 /* maximum value as per datasheet */ |
---|
27 | 24 | #define ITR_TO_REG(setting) ((setting) & ~I40E_ITR_DYNAMIC) |
---|
.. | .. |
---|
52 | 49 | else |
---|
53 | 50 | return 0; |
---|
54 | 51 | } |
---|
55 | | -#define I40E_INTRL_8K 125 /* 8000 ints/sec */ |
---|
56 | | -#define I40E_INTRL_62K 16 /* 62500 ints/sec */ |
---|
57 | | -#define I40E_INTRL_83K 12 /* 83333 ints/sec */ |
---|
58 | 52 | |
---|
59 | 53 | #define I40E_QUEUE_END_OF_LIST 0x7FF |
---|
60 | 54 | |
---|
.. | .. |
---|
73 | 67 | /* these are indexes into ITRN registers */ |
---|
74 | 68 | #define I40E_RX_ITR I40E_IDX_ITR0 |
---|
75 | 69 | #define I40E_TX_ITR I40E_IDX_ITR1 |
---|
76 | | -#define I40E_PE_ITR I40E_IDX_ITR2 |
---|
77 | 70 | |
---|
78 | 71 | /* Supported RSS offloads */ |
---|
79 | 72 | #define I40E_DEFAULT_RSS_HENA ( \ |
---|
.. | .. |
---|
117 | 110 | */ |
---|
118 | 111 | #define I40E_RX_HDR_SIZE I40E_RXBUFFER_256 |
---|
119 | 112 | #define I40E_PACKET_HDR_PAD (ETH_HLEN + ETH_FCS_LEN + (VLAN_HLEN * 2)) |
---|
120 | | -#define i40e_rx_desc i40e_32byte_rx_desc |
---|
| 113 | +#define i40e_rx_desc i40e_16byte_rx_desc |
---|
121 | 114 | |
---|
122 | 115 | #define I40E_RX_DMA_ATTR \ |
---|
123 | 116 | (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_WEAK_ORDERING) |
---|
.. | .. |
---|
193 | 186 | |
---|
194 | 187 | /* How many Rx Buffers do we bundle into one write to the hardware ? */ |
---|
195 | 188 | #define I40E_RX_BUFFER_WRITE 32 /* Must be power of 2 */ |
---|
196 | | -#define I40E_RX_INCREMENT(r, i) \ |
---|
197 | | - do { \ |
---|
198 | | - (i)++; \ |
---|
199 | | - if ((i) == (r)->count) \ |
---|
200 | | - i = 0; \ |
---|
201 | | - r->next_to_clean = i; \ |
---|
202 | | - } while (0) |
---|
203 | 189 | |
---|
204 | 190 | #define I40E_RX_NEXT_DESC(r, i, n) \ |
---|
205 | 191 | do { \ |
---|
.. | .. |
---|
209 | 195 | (n) = I40E_RX_DESC((r), (i)); \ |
---|
210 | 196 | } while (0) |
---|
211 | 197 | |
---|
212 | | -#define I40E_RX_NEXT_DESC_PREFETCH(r, i, n) \ |
---|
213 | | - do { \ |
---|
214 | | - I40E_RX_NEXT_DESC((r), (i), (n)); \ |
---|
215 | | - prefetch((n)); \ |
---|
216 | | - } while (0) |
---|
217 | 198 | |
---|
218 | 199 | #define I40E_MAX_BUFFER_TXD 8 |
---|
219 | 200 | #define I40E_MIN_TX_LEN 17 |
---|
.. | .. |
---|
262 | 243 | |
---|
263 | 244 | /* Tx Descriptors needed, worst case */ |
---|
264 | 245 | #define DESC_NEEDED (MAX_SKB_FRAGS + 6) |
---|
265 | | -#define I40E_MIN_DESC_PENDING 4 |
---|
266 | 246 | |
---|
267 | 247 | #define I40E_TX_FLAGS_HW_VLAN BIT(1) |
---|
268 | 248 | #define I40E_TX_FLAGS_SW_VLAN BIT(2) |
---|
269 | 249 | #define I40E_TX_FLAGS_TSO BIT(3) |
---|
270 | 250 | #define I40E_TX_FLAGS_IPV4 BIT(4) |
---|
271 | 251 | #define I40E_TX_FLAGS_IPV6 BIT(5) |
---|
272 | | -#define I40E_TX_FLAGS_FCCRC BIT(6) |
---|
273 | | -#define I40E_TX_FLAGS_FSO BIT(7) |
---|
274 | 252 | #define I40E_TX_FLAGS_TSYN BIT(8) |
---|
275 | 253 | #define I40E_TX_FLAGS_FD_SB BIT(9) |
---|
276 | 254 | #define I40E_TX_FLAGS_UDP_TUNNEL BIT(10) |
---|
.. | .. |
---|
297 | 275 | struct i40e_rx_buffer { |
---|
298 | 276 | dma_addr_t dma; |
---|
299 | 277 | struct page *page; |
---|
300 | | -#if (BITS_PER_LONG > 32) || (PAGE_SIZE >= 65536) |
---|
301 | 278 | __u32 page_offset; |
---|
302 | | -#else |
---|
303 | | - __u16 page_offset; |
---|
304 | | -#endif |
---|
305 | 279 | __u16 pagecnt_bias; |
---|
306 | 280 | }; |
---|
307 | 281 | |
---|
.. | .. |
---|
336 | 310 | /* some useful defines for virtchannel interface, which |
---|
337 | 311 | * is the only remaining user of header split |
---|
338 | 312 | */ |
---|
339 | | -#define I40E_RX_DTYPE_NO_SPLIT 0 |
---|
340 | 313 | #define I40E_RX_DTYPE_HEADER_SPLIT 1 |
---|
341 | | -#define I40E_RX_DTYPE_SPLIT_ALWAYS 2 |
---|
342 | 314 | #define I40E_RX_SPLIT_L2 0x1 |
---|
343 | 315 | #define I40E_RX_SPLIT_IP 0x2 |
---|
344 | 316 | #define I40E_RX_SPLIT_TCP_UDP 0x4 |
---|
.. | .. |
---|
354 | 326 | union { |
---|
355 | 327 | struct i40e_tx_buffer *tx_bi; |
---|
356 | 328 | struct i40e_rx_buffer *rx_bi; |
---|
| 329 | + struct xdp_buff **rx_bi_zc; |
---|
357 | 330 | }; |
---|
358 | 331 | DECLARE_BITMAP(state, __I40E_RING_STATE_NBITS); |
---|
359 | 332 | u16 queue_index; /* Queue number of ring */ |
---|
.. | .. |
---|
374 | 347 | /* used in interrupt processing */ |
---|
375 | 348 | u16 next_to_use; |
---|
376 | 349 | u16 next_to_clean; |
---|
| 350 | + u16 xdp_tx_active; |
---|
377 | 351 | |
---|
378 | 352 | u8 atr_sample_rate; |
---|
379 | 353 | u8 atr_count; |
---|
.. | .. |
---|
414 | 388 | |
---|
415 | 389 | struct i40e_channel *ch; |
---|
416 | 390 | struct xdp_rxq_info xdp_rxq; |
---|
| 391 | + struct xsk_buff_pool *xsk_pool; |
---|
417 | 392 | } ____cacheline_internodealigned_in_smp; |
---|
418 | 393 | |
---|
419 | 394 | static inline bool ring_uses_build_skb(struct i40e_ring *ring) |
---|
.. | .. |
---|
446 | 421 | #define I40E_ITR_ADAPTIVE_MAX_USECS 0x007e |
---|
447 | 422 | #define I40E_ITR_ADAPTIVE_LATENCY 0x8000 |
---|
448 | 423 | #define I40E_ITR_ADAPTIVE_BULK 0x0000 |
---|
449 | | -#define ITR_IS_BULK(x) (!((x) & I40E_ITR_ADAPTIVE_LATENCY)) |
---|
450 | 424 | |
---|
451 | 425 | struct i40e_ring_container { |
---|
452 | 426 | struct i40e_ring *ring; /* pointer to linked list of ring(s) */ |
---|
.. | .. |
---|
475 | 449 | |
---|
476 | 450 | bool i40e_alloc_rx_buffers(struct i40e_ring *rxr, u16 cleaned_count); |
---|
477 | 451 | netdev_tx_t i40e_lan_xmit_frame(struct sk_buff *skb, struct net_device *netdev); |
---|
| 452 | +u16 i40e_lan_select_queue(struct net_device *netdev, struct sk_buff *skb, |
---|
| 453 | + struct net_device *sb_dev); |
---|
478 | 454 | void i40e_clean_tx_ring(struct i40e_ring *tx_ring); |
---|
479 | 455 | void i40e_clean_rx_ring(struct i40e_ring *rx_ring); |
---|
480 | 456 | int i40e_setup_tx_descriptors(struct i40e_ring *tx_ring); |
---|
.. | .. |
---|
507 | 483 | /** |
---|
508 | 484 | * i40e_xmit_descriptor_count - calculate number of Tx descriptors needed |
---|
509 | 485 | * @skb: send buffer |
---|
510 | | - * @tx_ring: ring to send buffer on |
---|
511 | 486 | * |
---|
512 | 487 | * Returns number of data descriptors needed for this skb. Returns 0 to indicate |
---|
513 | 488 | * there is not enough descriptors available in this ring since we need at least |
---|
.. | .. |
---|
515 | 490 | **/ |
---|
516 | 491 | static inline int i40e_xmit_descriptor_count(struct sk_buff *skb) |
---|
517 | 492 | { |
---|
518 | | - const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[0]; |
---|
| 493 | + const skb_frag_t *frag = &skb_shinfo(skb)->frags[0]; |
---|
519 | 494 | unsigned int nr_frags = skb_shinfo(skb)->nr_frags; |
---|
520 | 495 | int count = 0, size = skb_headlen(skb); |
---|
521 | 496 | |
---|