mirror of https://github.com/Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
47 lines
1.6 KiB
47 lines
1.6 KiB
/* SPDX-License-Identifier: GPL-2.0-only */ |
|
/**************************************************************************** |
|
* Driver for Solarflare network controllers and boards |
|
* Copyright 2005-2006 Fen Systems Ltd. |
|
* Copyright 2006-2015 Solarflare Communications Inc. |
|
*/ |
|
|
|
#ifndef EFX_TX_H |
|
#define EFX_TX_H |
|
|
|
#include <linux/types.h> |
|
|
|
/* Driver internal tx-path related declarations. */ |
|
|
|
unsigned int efx_tx_limit_len(struct efx_tx_queue *tx_queue, |
|
dma_addr_t dma_addr, unsigned int len); |
|
|
|
u8 *efx_tx_get_copy_buffer_limited(struct efx_tx_queue *tx_queue, |
|
struct efx_tx_buffer *buffer, size_t len); |
|
|
|
/* What TXQ type will satisfy the checksum offloads required for this skb? */ |
|
static inline unsigned int efx_tx_csum_type_skb(struct sk_buff *skb) |
|
{ |
|
if (skb->ip_summed != CHECKSUM_PARTIAL) |
|
return 0; /* no checksum offload */ |
|
|
|
if (skb->encapsulation && |
|
skb_checksum_start_offset(skb) == skb_inner_transport_offset(skb)) { |
|
/* we only advertise features for IPv4 and IPv6 checksums on |
|
* encapsulated packets, so if the checksum is for the inner |
|
* packet, it must be one of them; no further checking required. |
|
*/ |
|
|
|
/* Do we also need to offload the outer header checksum? */ |
|
if (skb_shinfo(skb)->gso_segs > 1 && |
|
!(skb_shinfo(skb)->gso_type & SKB_GSO_PARTIAL) && |
|
(skb_shinfo(skb)->gso_type & SKB_GSO_UDP_TUNNEL_CSUM)) |
|
return EFX_TXQ_TYPE_OUTER_CSUM | EFX_TXQ_TYPE_INNER_CSUM; |
|
return EFX_TXQ_TYPE_INNER_CSUM; |
|
} |
|
|
|
/* similarly, we only advertise features for IPv4 and IPv6 checksums, |
|
* so it must be one of them. No need for further checks. |
|
*/ |
|
return EFX_TXQ_TYPE_OUTER_CSUM; |
|
} |
|
#endif /* EFX_TX_H */
|
|
|