diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index a219791e8720..abb6577e6aad 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -1131,6 +1131,17 @@ done: } 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 66adf4f039d5..a5f4437232cb 100644 --- a/dp/wifi3.0/hal_rx.h +++ b/dp/wifi3.0/hal_rx.h @@ -683,6 +683,56 @@ hal_rx_attn_first_mpdu_get(uint8_t *buf) 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 */