Commit | Line | Data |
---|---|---|
d2912cb1 | 1 | /* SPDX-License-Identifier: GPL-2.0-only */ |
e9117e50 BK |
2 | /**************************************************************************** |
3 | * Driver for Solarflare network controllers and boards | |
4 | * Copyright 2005-2006 Fen Systems Ltd. | |
5 | * Copyright 2006-2015 Solarflare Communications Inc. | |
e9117e50 BK |
6 | */ |
7 | ||
8 | #ifndef EFX_TX_H | |
9 | #define EFX_TX_H | |
10 | ||
11 | #include <linux/types.h> | |
12 | ||
13 | /* Driver internal tx-path related declarations. */ | |
14 | ||
15 | unsigned int efx_tx_limit_len(struct efx_tx_queue *tx_queue, | |
16 | dma_addr_t dma_addr, unsigned int len); | |
17 | ||
18 | u8 *efx_tx_get_copy_buffer_limited(struct efx_tx_queue *tx_queue, | |
19 | struct efx_tx_buffer *buffer, size_t len); | |
20 | ||
fe0c4060 EC |
21 | /* What TXQ type will satisfy the checksum offloads required for this skb? */ |
22 | static inline unsigned int efx_tx_csum_type_skb(struct sk_buff *skb) | |
23 | { | |
24 | if (skb->ip_summed != CHECKSUM_PARTIAL) | |
25 | return 0; /* no checksum offload */ | |
26 | ||
27 | if (skb->encapsulation && | |
28 | skb_checksum_start_offset(skb) == skb_inner_transport_offset(skb)) { | |
29 | /* we only advertise features for IPv4 and IPv6 checksums on | |
30 | * encapsulated packets, so if the checksum is for the inner | |
31 | * packet, it must be one of them; no further checking required. | |
32 | */ | |
33 | ||
34 | /* Do we also need to offload the outer header checksum? */ | |
35 | if (skb_shinfo(skb)->gso_segs > 1 && | |
36 | !(skb_shinfo(skb)->gso_type & SKB_GSO_PARTIAL) && | |
37 | (skb_shinfo(skb)->gso_type & SKB_GSO_UDP_TUNNEL_CSUM)) | |
38 | return EFX_TXQ_TYPE_OUTER_CSUM | EFX_TXQ_TYPE_INNER_CSUM; | |
39 | return EFX_TXQ_TYPE_INNER_CSUM; | |
40 | } | |
41 | ||
42 | /* similarly, we only advertise features for IPv4 and IPv6 checksums, | |
43 | * so it must be one of them. No need for further checks. | |
44 | */ | |
45 | return EFX_TXQ_TYPE_OUTER_CSUM; | |
46 | } | |
e9117e50 | 47 | #endif /* EFX_TX_H */ |