diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index 246e3f0dcd..9a583e6c19 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -1035,6 +1035,30 @@ static inline int dp_get_mac_id_for_mac(struct dp_soc *soc, uint32_t mac_id) bool dp_is_soc_reinit(struct dp_soc *soc); +/* + * dp_is_subtype_data() - check if the frame subtype is data + * + * @frame_ctrl: Frame control field + * + * check the frame control field and verify if the packet + * is a data packet. + * + * Return: true or false + */ +static inline bool dp_is_subtype_data(uint16_t frame_ctrl) +{ + if (((qdf_cpu_to_le16(frame_ctrl) & QDF_IEEE80211_FC0_TYPE_MASK) == + QDF_IEEE80211_FC0_TYPE_DATA) && + (((qdf_cpu_to_le16(frame_ctrl) & QDF_IEEE80211_FC0_SUBTYPE_MASK) == + QDF_IEEE80211_FC0_SUBTYPE_DATA) || + ((qdf_cpu_to_le16(frame_ctrl) & QDF_IEEE80211_FC0_SUBTYPE_MASK) == + QDF_IEEE80211_FC0_SUBTYPE_QOS))) { + return true; + } + + return false; +} + #ifdef WDI_EVENT_ENABLE QDF_STATUS dp_h2t_cfg_stats_msg_send(struct dp_pdev *pdev, uint32_t stats_type_upload_mask, diff --git a/dp/wifi3.0/dp_rx_mon_status.c b/dp/wifi3.0/dp_rx_mon_status.c index de5de6d492..eb02142223 100644 --- a/dp/wifi3.0/dp_rx_mon_status.c +++ b/dp/wifi3.0/dp_rx_mon_status.c @@ -281,7 +281,8 @@ static void dp_rx_stats_update(struct dp_pdev *pdev, struct dp_peer *peer, if (is_invalid_peer) return; - dp_rx_rate_stats_update(peer, ppdu); + if (dp_is_subtype_data(ppdu->frame_ctrl)) + dp_rx_rate_stats_update(peer, ppdu); #if defined(FEATURE_PERPKT_INFO) && WDI_EVENT_ENABLE dp_wdi_event_handler(WDI_EVENT_UPDATE_DP_STATS, pdev->soc, diff --git a/qdf/inc/qdf_net_types.h b/qdf/inc/qdf_net_types.h index fdf61628bc..bad9ba4d85 100644 --- a/qdf/inc/qdf_net_types.h +++ b/qdf/inc/qdf_net_types.h @@ -67,6 +67,13 @@ typedef __in6_addr_t in6_addr_t; #define QDF_IEEE80211_FC1_TODS 0x01 #define QDF_IEEE80211_FC1_FROMDS 0x02 +#define QDF_IEEE80211_FC0_TYPE_MASK 0x0c +#define QDF_IEEE80211_FC0_SUBTYPE_MASK 0xf0 + +#define QDF_IEEE80211_FC0_TYPE_DATA 0x08 +#define QDF_IEEE80211_FC0_SUBTYPE_DATA 0x00 +#define QDF_IEEE80211_FC0_SUBTYPE_QOS 0x80 + #define QDF_NET_IS_MAC_MULTICAST(_a) (*(_a) & 0x01) /**