summaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2017-04-25 21:48:57 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2017-04-25 21:48:57 -0700
commitce6271aa372e9f9628bb2e649dd8fb4ef416f617 (patch)
treeab664d32df140369207ceb0129cc97c7da564331 /drivers/net
parentded611df058a90184c11f9657654944b27508726 (diff)
parent836015bad38d39d3f9c69fc96b9b7640b14f5a7a (diff)
Merge "ath10k: enable wlan hardware checksum for wcn3990"
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/ath/ath10k/htt.h13
-rw-r--r--drivers/net/wireless/ath/ath10k/htt_tx.c8
-rw-r--r--drivers/net/wireless/ath/ath10k/mac.c6
3 files changed, 22 insertions, 5 deletions
diff --git a/drivers/net/wireless/ath/ath10k/htt.h b/drivers/net/wireless/ath/ath10k/htt.h
index 6dd396430f19..b0d6c2614731 100644
--- a/drivers/net/wireless/ath/ath10k/htt.h
+++ b/drivers/net/wireless/ath/ath10k/htt.h
@@ -122,6 +122,19 @@ struct htt_msdu_ext_desc {
| HTT_MSDU_EXT_DESC_FLAG_TCP_IPV4_CSUM_ENABLE \
| HTT_MSDU_EXT_DESC_FLAG_TCP_IPV6_CSUM_ENABLE)
+#define HTT_TX_IPV4_CSUM_EN BIT(16)
+#define HTT_TX_UDP_IPV4_CSUM_EN BIT(17)
+#define HTT_TX_UDP_IPV6_CSUM_EN BIT(18)
+#define HTT_TX_TCP_IPV4_CSUM_EN BIT(19)
+#define HTT_TX_TCP_IPV6_CSUM_EN BIT(20)
+#define HTT_TX_PARTIAL_CSUM_EN BIT(21)
+
+#define HTT_TX_CHECKSUM_ENABLE (HTT_TX_IPV4_CSUM_EN \
+ | HTT_TX_UDP_IPV4_CSUM_EN \
+ | HTT_TX_UDP_IPV6_CSUM_EN \
+ | HTT_TX_TCP_IPV4_CSUM_EN \
+ | HTT_TX_TCP_IPV6_CSUM_EN)
+
enum htt_data_tx_desc_flags0 {
HTT_DATA_TX_DESC_FLAGS0_MAC_HDR_PRESENT = 1 << 0,
HTT_DATA_TX_DESC_FLAGS0_NO_AGGR = 1 << 1,
diff --git a/drivers/net/wireless/ath/ath10k/htt_tx.c b/drivers/net/wireless/ath/ath10k/htt_tx.c
index 62e7f5e4b6fc..1b59721a91ac 100644
--- a/drivers/net/wireless/ath/ath10k/htt_tx.c
+++ b/drivers/net/wireless/ath/ath10k/htt_tx.c
@@ -1051,8 +1051,14 @@ int ath10k_htt_tx(struct ath10k_htt *htt, enum ath10k_hw_txrx_mode txmode,
!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags)) {
flags1 |= HTT_DATA_TX_DESC_FLAGS1_CKSUM_L3_OFFLOAD;
flags1 |= HTT_DATA_TX_DESC_FLAGS1_CKSUM_L4_OFFLOAD;
- if (ar->hw_params.continuous_frag_desc)
+ if (ar->hw_params.continuous_frag_desc) {
ext_desc->flags |= HTT_MSDU_CHECKSUM_ENABLE;
+ if (QCA_REV_WCN3990(ar)) {
+ memset(ext_desc->tso_flag, 0,
+ sizeof(ext_desc->tso_flag));
+ ext_desc->tso_flag[3] |= HTT_TX_CHECKSUM_ENABLE;
+ }
+ }
}
/* Prevent firmware from sending up tx inspection requests. There's
diff --git a/drivers/net/wireless/ath/ath10k/mac.c b/drivers/net/wireless/ath/ath10k/mac.c
index d1775748a7cd..b9d08b4b4cc5 100644
--- a/drivers/net/wireless/ath/ath10k/mac.c
+++ b/drivers/net/wireless/ath/ath10k/mac.c
@@ -7998,10 +7998,8 @@ int ath10k_mac_register(struct ath10k *ar)
goto err_free;
}
- if (!QCA_REV_WCN3990(ar)) {
- if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
- ar->hw->netdev_features = NETIF_F_HW_CSUM;
- }
+ if (!test_bit(ATH10K_FLAG_RAW_MODE, &ar->dev_flags))
+ ar->hw->netdev_features = NETIF_F_HW_CSUM;
if (IS_ENABLED(CONFIG_ATH10K_DFS_CERTIFIED)) {
/* Init ath dfs pattern detector */