diff --git a/dp/inc/cdp_txrx_cmn.h b/dp/inc/cdp_txrx_cmn.h index f9184f72c1..2dd78c2012 100644 --- a/dp/inc/cdp_txrx_cmn.h +++ b/dp/inc/cdp_txrx_cmn.h @@ -1022,33 +1022,6 @@ static inline void cdp_flush_cache_rx_queue(ol_txrx_soc_handle soc) soc->ops->cmn_drv_ops->flush_cache_rx_queue(); } -/** - * cdp_txrx_stats(): function to map to host and firmware statistics - * Deprecated, use cdp_txrx_stats_request() instead. - * @soc: soc handle - * @vdev: virtual device - * @stats: statistics option - * - * return: status - */ -static inline -int cdp_txrx_stats(ol_txrx_soc_handle soc, struct cdp_vdev *vdev, - enum cdp_stats stats) -{ - if (!soc || !soc->ops) { - QDF_TRACE(QDF_MODULE_ID_CDP, QDF_TRACE_LEVEL_DEBUG, - "%s: Invalid Instance:", __func__); - QDF_BUG(0); - return 0; - } - - if (!soc->ops->cmn_drv_ops || - !soc->ops->cmn_drv_ops->txrx_stats) - return 0; - - return soc->ops->cmn_drv_ops->txrx_stats(vdev, stats); -} - /** * cdp_txrx_stats_request(): function to map to host and firmware statistics * @soc: soc handle diff --git a/dp/inc/cdp_txrx_cmn_struct.h b/dp/inc/cdp_txrx_cmn_struct.h index 7a12a85e15..5fefa5236c 100644 --- a/dp/inc/cdp_txrx_cmn_struct.h +++ b/dp/inc/cdp_txrx_cmn_struct.h @@ -1118,6 +1118,7 @@ struct cdp_config_params { * @param1: opaque argument 1 to be passed to htt * @param2: opaque argument 2 to be passed to htt * @param3: opaque argument 3 to be passed to htt + * @channel_param: Channel Information */ struct cdp_txrx_stats_req { enum cdp_stats stats; @@ -1126,6 +1127,7 @@ struct cdp_txrx_stats_req { uint32_t param2; uint32_t param3; uint32_t cookie_val; + uint8_t channel; }; /** diff --git a/dp/inc/cdp_txrx_ops.h b/dp/inc/cdp_txrx_ops.h index f423e985aa..7d0d48c5ba 100644 --- a/dp/inc/cdp_txrx_ops.h +++ b/dp/inc/cdp_txrx_ops.h @@ -275,8 +275,6 @@ struct cdp_cmn_ops { void (*set_pdev_dscp_tid_map)(struct cdp_pdev *pdev, uint8_t map_id, uint8_t tos, uint8_t tid); - int (*txrx_stats)(struct cdp_vdev *vdev, enum cdp_stats stats); - int (*txrx_stats_request)(struct cdp_vdev *vdev, struct cdp_txrx_stats_req *req); diff --git a/dp/wifi3.0/dp_htt.c b/dp/wifi3.0/dp_htt.c index efa99d6eab..f4a82d78a5 100644 --- a/dp/wifi3.0/dp_htt.c +++ b/dp/wifi3.0/dp_htt.c @@ -2869,6 +2869,31 @@ htt_soc_detach(void *htt_soc) qdf_mem_free(soc); } +/* + * dp_get_pdev_mask_for_channel_id() - Retrieve pdev_id mask based on channel + * information + * @pdev - DP PDEV Handle + * @channel - frequency + * + * Return - Pdev_id mask + */ +static inline +uint8_t dp_get_pdev_mask_for_channel_id(struct dp_pdev *pdev, uint8_t channel) +{ + uint8_t pdev_mask = 0; + + if (!channel) + return 1 << (pdev->pdev_id + 1); + + else if (channel && WLAN_CHAN_IS_5GHZ(channel)) + pdev_mask = 0; + + else if (channel && WLAN_CHAN_IS_2GHZ(channel)) + pdev_mask = 1; + + return 1 << (pdev_mask + 1); +} + /** * dp_h2t_ext_stats_msg_send(): function to contruct HTT message to pass to FW * @pdev: DP PDEV handle @@ -2883,13 +2908,14 @@ htt_soc_detach(void *htt_soc) QDF_STATUS dp_h2t_ext_stats_msg_send(struct dp_pdev *pdev, uint32_t stats_type_upload_mask, uint32_t config_param_0, uint32_t config_param_1, uint32_t config_param_2, - uint32_t config_param_3, int cookie_val, int cookie_msb) + uint32_t config_param_3, int cookie_val, int cookie_msb, + uint8_t channel) { struct htt_soc *soc = pdev->soc->htt_handle; struct dp_htt_htc_pkt *pkt; qdf_nbuf_t msg; uint32_t *msg_word; - uint8_t pdev_mask; + uint8_t pdev_mask = 0; msg = qdf_nbuf_alloc( soc->osdev, @@ -2905,7 +2931,7 @@ QDF_STATUS dp_h2t_ext_stats_msg_send(struct dp_pdev *pdev, * Bit 2: Pdev stats for pdev id 1 * Bit 3: Pdev stats for pdev id 2 */ - pdev_mask = 1 << (pdev->pdev_id + 1); + pdev_mask = dp_get_pdev_mask_for_channel_id(pdev, channel); /* * Set the length of the message. diff --git a/dp/wifi3.0/dp_internal.h b/dp/wifi3.0/dp_internal.h index d3be856c63..127f1ee719 100644 --- a/dp/wifi3.0/dp_internal.h +++ b/dp/wifi3.0/dp_internal.h @@ -383,7 +383,8 @@ void dp_tx_me_free_descriptor(struct cdp_pdev *pdev); QDF_STATUS dp_h2t_ext_stats_msg_send(struct dp_pdev *pdev, uint32_t stats_type_upload_mask, uint32_t config_param_0, uint32_t config_param_1, uint32_t config_param_2, - uint32_t config_param_3, int cookie, int cookie_msb); + uint32_t config_param_3, int cookie, int cookie_msb, + uint8_t channel); void dp_htt_stats_print_tag(uint8_t tag_type, uint32_t *tag_buf); void dp_htt_stats_copy_tag(struct dp_pdev *pdev, uint8_t tag_type, uint32_t *tag_buf); void dp_peer_rxtid_stats(struct dp_peer *peer, void (*callback_fn), diff --git a/dp/wifi3.0/dp_main.c b/dp/wifi3.0/dp_main.c index 350d9a6ec8..11095852a1 100644 --- a/dp/wifi3.0/dp_main.c +++ b/dp/wifi3.0/dp_main.c @@ -5708,7 +5708,7 @@ dp_get_fw_peer_stats(struct cdp_pdev *pdev_handle, uint8_t *mac_addr, dp_h2t_ext_stats_msg_send(pdev, HTT_DBG_EXT_STATS_PEER_INFO, config_param0, config_param1, config_param2, - config_param3, 0, 0); + config_param3, 0, 0, 0); } @@ -5741,7 +5741,7 @@ dp_get_htt_stats(struct cdp_pdev *pdev_handle, void *data, uint32_t data_len) dp_h2t_ext_stats_msg_send(pdev, req->stats_id, req->config_param0, req->config_param1, req->config_param2, req->config_param3, - req->cookie, 0); + req->cookie, 0, 0); } /* * dp_set_pdev_param: function to set parameters in pdev @@ -5863,13 +5863,17 @@ dp_txrx_stats_publish(struct cdp_pdev *pdev_handle, void *buf) req.stats = HTT_DBG_EXT_STATS_PDEV_TX; req.cookie_val = 1; dp_h2t_ext_stats_msg_send(pdev, req.stats, req.param0, - req.param1, req.param2, req.param3, 0, req.cookie_val); + req.param1, req.param2, req.param3, 0, + req.cookie_val, 0); + msleep(DP_MAX_SLEEP_TIME); req.stats = HTT_DBG_EXT_STATS_PDEV_RX; req.cookie_val = 1; dp_h2t_ext_stats_msg_send(pdev, req.stats, req.param0, - req.param1, req.param2, req.param3, 0, req.cookie_val); + req.param1, req.param2, req.param3, 0, + req.cookie_val, 0); + msleep(DP_MAX_SLEEP_TIME); qdf_mem_copy(buffer, &pdev->stats, sizeof(pdev->stats)); @@ -5911,6 +5915,7 @@ static int dp_fw_stats_process(struct cdp_vdev *vdev_handle, struct dp_vdev *vdev = (struct dp_vdev *)vdev_handle; struct dp_pdev *pdev = NULL; uint32_t stats = req->stats; + uint8_t channel = req->channel; if (!vdev) { DP_TRACE(NONE, "VDEV not found"); @@ -5936,7 +5941,8 @@ static int dp_fw_stats_process(struct cdp_vdev *vdev_handle, } return dp_h2t_ext_stats_msg_send(pdev, stats, req->param0, - req->param1, req->param2, req->param3, 0, 0); + req->param1, req->param2, req->param3, + 0, 0, channel); } /** @@ -5958,6 +5964,7 @@ static int dp_txrx_stats_request(struct cdp_vdev *vdev, "Invalid vdev/req instance"); return 0; } + stats = req->stats; if (stats >= CDP_TXRX_MAX_STATS) return 0; @@ -5991,22 +5998,6 @@ static int dp_txrx_stats_request(struct cdp_vdev *vdev, return 0; } -/** - * dp_txrx_stats() - function to map to firmware and host stats - * @vdev: virtual handle - * @stats: type of statistics requested - * - * Return: integer - */ -static int dp_txrx_stats(struct cdp_vdev *vdev, enum cdp_stats stats) -{ - struct cdp_txrx_stats_req req = {0,}; - - req.stats = stats; - - return dp_txrx_stats_request(vdev, &req); -} - /* * dp_print_napi_stats(): NAPI stats * @soc - soc handle @@ -6563,7 +6554,6 @@ static struct cdp_cmn_ops dp_ops_cmn = { /* TODO: get API's for dscp-tid need to be added*/ .set_vdev_dscp_tid_map = dp_set_vdev_dscp_tid_map_wifi3, .set_pdev_dscp_tid_map = dp_set_pdev_dscp_tid_map_wifi3, - .txrx_stats = dp_txrx_stats, .txrx_stats_request = dp_txrx_stats_request, .txrx_set_monitor_mode = dp_vdev_set_monitor_mode, .txrx_get_pdev_id_frm_pdev = dp_get_pdev_id_frm_pdev,