qcacmn: Add support for DP RX checksum offload

add support for TCP, UDP and IP checksum offload in RX path

Change-Id: Id148523419cc48d094e100f51d39e6f95b21928f
diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c
index a219791..abb6577 100644
--- a/dp/wifi3.0/dp_rx.c
+++ b/dp/wifi3.0/dp_rx.c
@@ -1131,6 +1131,17 @@
 			}
 
 			pdev = vdev->pdev;
+			if (qdf_likely(
+				!hal_rx_attn_tcp_udp_cksum_fail_get(rx_tlv_hdr)
+				&&
+				!hal_rx_attn_ip_cksum_fail_get(rx_tlv_hdr))) {
+				qdf_nbuf_rx_cksum_t cksum = {0};
+
+				cksum.l4_result =
+					QDF_NBUF_RX_CKSUM_TCP_UDP_UNNECESSARY;
+
+				qdf_nbuf_set_rx_cksum(nbuf, &cksum);
+			}
 
 			sgi = hal_rx_msdu_start_sgi_get(rx_tlv_hdr);
 			mcs = hal_rx_msdu_start_rate_mcs_get(rx_tlv_hdr);
diff --git a/dp/wifi3.0/hal_rx.h b/dp/wifi3.0/hal_rx.h
index 66adf4f..a5f4437 100644
--- a/dp/wifi3.0/hal_rx.h
+++ b/dp/wifi3.0/hal_rx.h
@@ -683,6 +683,56 @@
 	return first_mpdu;
 }
 
+#define HAL_RX_ATTN_TCP_UDP_CKSUM_FAIL_GET(_rx_attn)		\
+	(_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_attn,		\
+		RX_ATTENTION_1_TCP_UDP_CHKSUM_FAIL_OFFSET)),	\
+		RX_ATTENTION_1_TCP_UDP_CHKSUM_FAIL_MASK,	\
+		RX_ATTENTION_1_TCP_UDP_CHKSUM_FAIL_LSB))
+
+/*
+ * hal_rx_attn_tcp_udp_cksum_fail_get(): get tcp_udp cksum fail bit
+ * from rx attention
+ * @buf: pointer to rx_pkt_tlvs
+ *
+ * Return: tcp_udp_cksum_fail
+ */
+static inline bool
+hal_rx_attn_tcp_udp_cksum_fail_get(uint8_t *buf)
+{
+	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
+	struct rx_attention *rx_attn = &pkt_tlvs->attn_tlv.rx_attn;
+	bool tcp_udp_cksum_fail;
+
+	tcp_udp_cksum_fail = HAL_RX_ATTN_TCP_UDP_CKSUM_FAIL_GET(rx_attn);
+
+	return tcp_udp_cksum_fail;
+}
+
+#define HAL_RX_ATTN_IP_CKSUM_FAIL_GET(_rx_attn)		\
+	(_HAL_MS((*_OFFSET_TO_WORD_PTR(_rx_attn,	\
+		RX_ATTENTION_1_IP_CHKSUM_FAIL_OFFSET)),	\
+		RX_ATTENTION_1_IP_CHKSUM_FAIL_MASK,	\
+		RX_ATTENTION_1_IP_CHKSUM_FAIL_LSB))
+
+/*
+ * hal_rx_attn_ip_cksum_fail_get(): get ip cksum fail bit
+ * from rx attention
+ * @buf: pointer to rx_pkt_tlvs
+ *
+ * Return: ip_cksum_fail
+ */
+static inline bool
+hal_rx_attn_ip_cksum_fail_get(uint8_t *buf)
+{
+	struct rx_pkt_tlvs *pkt_tlvs = (struct rx_pkt_tlvs *)buf;
+	struct rx_attention *rx_attn = &pkt_tlvs->attn_tlv.rx_attn;
+	bool ip_cksum_fail;
+
+	ip_cksum_fail = HAL_RX_ATTN_IP_CKSUM_FAIL_GET(rx_attn);
+
+	return ip_cksum_fail;
+}
+
 /*
  * Get peer_meta_data from RX_MPDU_INFO within RX_MPDU_START
  */