diff --git a/dp/wifi3.0/be/dp_be_rx.c b/dp/wifi3.0/be/dp_be_rx.c index 30814b027a..a52258229c 100644 --- a/dp/wifi3.0/be/dp_be_rx.c +++ b/dp/wifi3.0/be/dp_be_rx.c @@ -729,12 +729,15 @@ done: rx.raw, 1, msdu_len); } else { - dp_rx_nbuf_free(nbuf); DP_STATS_INC(soc, rx.err.scatter_msdu, 1); - dp_info_rl("scatter msdu len %d, dropped", - msdu_len); - nbuf = next; - continue; + + if (!dp_rx_is_sg_supported()) { + dp_rx_nbuf_free(nbuf); + dp_info_rl("sg msdu len %d, dropped", + msdu_len); + nbuf = next; + continue; + } } } else { msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf); diff --git a/dp/wifi3.0/dp_rx.c b/dp/wifi3.0/dp_rx.c index 8c0c917b27..3230eae791 100644 --- a/dp/wifi3.0/dp_rx.c +++ b/dp/wifi3.0/dp_rx.c @@ -1772,6 +1772,23 @@ qdf_nbuf_t dp_rx_sg_create(struct dp_soc *soc, qdf_nbuf_t nbuf) return parent; } +#ifdef DP_RX_SG_FRAME_SUPPORT +/** + * dp_rx_is_sg_supported() - SG packets processing supported or not. + * + * Return: returns true when processing is supported else false. + */ +bool dp_rx_is_sg_supported(void) +{ + return true; +} +#else +bool dp_rx_is_sg_supported(void) +{ + return false; +} +#endif + #endif /* QCA_HOST_MODE_WIFI_DISABLED */ #ifdef QCA_PEER_EXT_STATS diff --git a/dp/wifi3.0/dp_rx.h b/dp/wifi3.0/dp_rx.h index de5a27a037..0dc0d953f6 100644 --- a/dp/wifi3.0/dp_rx.h +++ b/dp/wifi3.0/dp_rx.h @@ -886,6 +886,12 @@ dp_rx_wbm_err_process(struct dp_intr *int_ctx, struct dp_soc *soc, */ qdf_nbuf_t dp_rx_sg_create(struct dp_soc *soc, qdf_nbuf_t nbuf); +/** + * dp_rx_is_sg_supported() - SG packets processing supported or not. + * + * Return: returns true when processing is supported else false. + */ +bool dp_rx_is_sg_supported(void); /* * dp_rx_desc_nbuf_and_pool_free() - free the sw rx desc pool called during diff --git a/dp/wifi3.0/li/dp_li_rx.c b/dp/wifi3.0/li/dp_li_rx.c index d96d6eeaec..d1cc803415 100644 --- a/dp/wifi3.0/li/dp_li_rx.c +++ b/dp/wifi3.0/li/dp_li_rx.c @@ -739,12 +739,15 @@ done: rx.raw, 1, msdu_len); } else { - dp_rx_nbuf_free(nbuf); DP_STATS_INC(soc, rx.err.scatter_msdu, 1); - dp_info_rl("scatter msdu len %d, dropped", - msdu_len); - nbuf = next; - continue; + + if (!dp_rx_is_sg_supported()) { + dp_rx_nbuf_free(nbuf); + dp_info_rl("sg msdu len %d, dropped", + msdu_len); + nbuf = next; + continue; + } } } else { msdu_len = QDF_NBUF_CB_RX_PKT_LEN(nbuf);