ath10k: add TCP/UDP Checksum offload support for QCA99x0
The patch adds support to offload TCP/UDP checksum calculations for QCA99x0. Signed-off-by: Manikanta Pubbisetty <c_mpubbi@qti.qualcomm.com> Signed-off-by: Kalle Valo <kvalo@qca.qualcomm.com>
This commit is contained in:
parent
19be9e9a7a
commit
b963519509
|
@ -97,10 +97,25 @@ struct htt_data_tx_desc_frag {
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
struct htt_msdu_ext_desc {
|
struct htt_msdu_ext_desc {
|
||||||
__le32 tso_flag[4];
|
__le32 tso_flag[3];
|
||||||
|
__le16 ip_identification;
|
||||||
|
u8 flags;
|
||||||
|
u8 reserved;
|
||||||
struct htt_data_tx_desc_frag frags[6];
|
struct htt_data_tx_desc_frag frags[6];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define HTT_MSDU_EXT_DESC_FLAG_IPV4_CSUM_ENABLE BIT(0)
|
||||||
|
#define HTT_MSDU_EXT_DESC_FLAG_UDP_IPV4_CSUM_ENABLE BIT(1)
|
||||||
|
#define HTT_MSDU_EXT_DESC_FLAG_UDP_IPV6_CSUM_ENABLE BIT(2)
|
||||||
|
#define HTT_MSDU_EXT_DESC_FLAG_TCP_IPV4_CSUM_ENABLE BIT(3)
|
||||||
|
#define HTT_MSDU_EXT_DESC_FLAG_TCP_IPV6_CSUM_ENABLE BIT(4)
|
||||||
|
|
||||||
|
#define HTT_MSDU_CHECKSUM_ENABLE (HTT_MSDU_EXT_DESC_FLAG_IPV4_CSUM_ENABLE \
|
||||||
|
| HTT_MSDU_EXT_DESC_FLAG_UDP_IPV4_CSUM_ENABLE \
|
||||||
|
| HTT_MSDU_EXT_DESC_FLAG_UDP_IPV6_CSUM_ENABLE \
|
||||||
|
| HTT_MSDU_EXT_DESC_FLAG_TCP_IPV4_CSUM_ENABLE \
|
||||||
|
| HTT_MSDU_EXT_DESC_FLAG_TCP_IPV6_CSUM_ENABLE)
|
||||||
|
|
||||||
enum htt_data_tx_desc_flags0 {
|
enum htt_data_tx_desc_flags0 {
|
||||||
HTT_DATA_TX_DESC_FLAGS0_MAC_HDR_PRESENT = 1 << 0,
|
HTT_DATA_TX_DESC_FLAGS0_MAC_HDR_PRESENT = 1 << 0,
|
||||||
HTT_DATA_TX_DESC_FLAGS0_NO_AGGR = 1 << 1,
|
HTT_DATA_TX_DESC_FLAGS0_NO_AGGR = 1 << 1,
|
||||||
|
|
|
@ -496,6 +496,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, struct sk_buff *msdu)
|
||||||
u16 msdu_id, flags1 = 0;
|
u16 msdu_id, flags1 = 0;
|
||||||
dma_addr_t paddr = 0;
|
dma_addr_t paddr = 0;
|
||||||
u32 frags_paddr = 0;
|
u32 frags_paddr = 0;
|
||||||
|
struct htt_msdu_ext_desc *ext_desc = NULL;
|
||||||
|
|
||||||
res = ath10k_htt_tx_inc_pending(htt);
|
res = ath10k_htt_tx_inc_pending(htt);
|
||||||
if (res)
|
if (res)
|
||||||
|
@ -542,6 +543,7 @@ int ath10k_htt_tx(struct ath10k_htt *htt, struct sk_buff *msdu)
|
||||||
if (ar->hw_params.continuous_frag_desc) {
|
if (ar->hw_params.continuous_frag_desc) {
|
||||||
frags = (struct htt_data_tx_desc_frag *)
|
frags = (struct htt_data_tx_desc_frag *)
|
||||||
&htt->frag_desc.vaddr[msdu_id].frags;
|
&htt->frag_desc.vaddr[msdu_id].frags;
|
||||||
|
ext_desc = &htt->frag_desc.vaddr[msdu_id];
|
||||||
frags[0].tword_addr.paddr_lo =
|
frags[0].tword_addr.paddr_lo =
|
||||||
__cpu_to_le32(skb_cb->paddr);
|
__cpu_to_le32(skb_cb->paddr);
|
||||||
frags[0].tword_addr.paddr_hi = 0;
|
frags[0].tword_addr.paddr_hi = 0;
|
||||||
|
@ -603,6 +605,8 @@ int ath10k_htt_tx(struct ath10k_htt *htt, struct sk_buff *msdu)
|
||||||
if (msdu->ip_summed == CHECKSUM_PARTIAL) {
|
if (msdu->ip_summed == CHECKSUM_PARTIAL) {
|
||||||
flags1 |= HTT_DATA_TX_DESC_FLAGS1_CKSUM_L3_OFFLOAD;
|
flags1 |= HTT_DATA_TX_DESC_FLAGS1_CKSUM_L3_OFFLOAD;
|
||||||
flags1 |= HTT_DATA_TX_DESC_FLAGS1_CKSUM_L4_OFFLOAD;
|
flags1 |= HTT_DATA_TX_DESC_FLAGS1_CKSUM_L4_OFFLOAD;
|
||||||
|
if (ar->hw_params.continuous_frag_desc)
|
||||||
|
ext_desc->flags |= HTT_MSDU_CHECKSUM_ENABLE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Prevent firmware from sending up tx inspection requests. There's
|
/* Prevent firmware from sending up tx inspection requests. There's
|
||||||
|
|
Loading…
Reference in New Issue