qcacmn: Add logic for allocation and reset of vdev_stats_id
In BE architecture, HW provides basic vdev stats support for upto 48 vdevs. For each vdev, there is vdev_stats_id which represents the id of this vdev on HW. This vdev_stats_id is assigned by host and is conveyed to HW at the time of REO TID Queue setup for the peer. Add logic for allocation and deallocation of vdev_stats_id and convey this id to HW. Change-Id: If5611bf54d057ccf71c6444b5c79a26eb28df87e CRs-Fixed: 3067843
此提交包含在:
@@ -6052,6 +6052,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
|
||||
uint8_t vdev_id = vdev_info->vdev_id;
|
||||
enum wlan_op_mode op_mode = vdev_info->op_mode;
|
||||
enum wlan_op_subtype subtype = vdev_info->subtype;
|
||||
uint8_t vdev_stats_id = vdev_info->vdev_stats_id;
|
||||
|
||||
vdev_context_size =
|
||||
soc->arch_ops.txrx_get_context_size(DP_CONTEXT_TYPE_VDEV);
|
||||
@@ -6075,6 +6076,7 @@ static QDF_STATUS dp_vdev_attach_wifi3(struct cdp_soc_t *cdp_soc,
|
||||
|
||||
vdev->pdev = pdev;
|
||||
vdev->vdev_id = vdev_id;
|
||||
vdev->vdev_stats_id = vdev_stats_id;
|
||||
vdev->opmode = op_mode;
|
||||
vdev->subtype = subtype;
|
||||
vdev->osdev = soc->osdev;
|
||||
@@ -6332,6 +6334,60 @@ static void dp_vdev_flush_peers(struct cdp_vdev *vdev_handle, bool unmap_only)
|
||||
|
||||
}
|
||||
|
||||
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
|
||||
/*
|
||||
* dp_txrx_alloc_vdev_stats_id()- Allocate vdev_stats_id
|
||||
* @soc_hdl: Datapath soc handle
|
||||
* @vdev_stats_id: Address of vdev_stats_id
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS dp_txrx_alloc_vdev_stats_id(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t *vdev_stats_id)
|
||||
{
|
||||
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
|
||||
uint8_t id = 0;
|
||||
|
||||
if (!wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx)) {
|
||||
*vdev_stats_id = DP_INVALID_VDEV_STATS_ID;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
while (id < DP_MAX_VDEV_STATS_ID) {
|
||||
if (!qdf_atomic_test_and_set_bit(id, &soc->vdev_stats_id_map)) {
|
||||
*vdev_stats_id = id;
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
id++;
|
||||
}
|
||||
|
||||
*vdev_stats_id = DP_INVALID_VDEV_STATS_ID;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
/*
|
||||
* dp_txrx_reset_vdev_stats_id() - Reset vdev_stats_id in dp_soc
|
||||
* @soc_hdl: Datapath soc handle
|
||||
* @vdev_stats_id: vdev_stats_id to reset in dp_soc
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
static void dp_txrx_reset_vdev_stats_id(struct cdp_soc_t *soc_hdl,
|
||||
uint8_t vdev_stats_id)
|
||||
{
|
||||
struct dp_soc *soc = cdp_soc_t_to_dp_soc(soc_hdl);
|
||||
|
||||
if ((!wlan_cfg_get_vdev_stats_hw_offload_config(soc->wlan_cfg_ctx)) ||
|
||||
(vdev_stats_id >= DP_MAX_VDEV_STATS_ID))
|
||||
return;
|
||||
|
||||
qdf_atomic_clear_bit(vdev_stats_id, &soc->vdev_stats_id_map);
|
||||
}
|
||||
#else
|
||||
static void dp_txrx_reset_vdev_stats_id(struct cdp_soc_t *soc,
|
||||
uint8_t vdev_stats_id)
|
||||
{}
|
||||
#endif
|
||||
/*
|
||||
* dp_vdev_detach_wifi3() - Detach txrx vdev
|
||||
* @cdp_soc: Datapath soc handle
|
||||
@@ -6396,6 +6452,8 @@ static QDF_STATUS dp_vdev_detach_wifi3(struct cdp_soc_t *cdp_soc,
|
||||
|
||||
dp_monitor_neighbour_peer_list_remove(pdev, vdev, peer);
|
||||
|
||||
dp_txrx_reset_vdev_stats_id(cdp_soc, vdev->vdev_stats_id);
|
||||
|
||||
dp_tx_vdev_multipass_deinit(vdev);
|
||||
|
||||
if (vdev->vdev_dp_ext_handle) {
|
||||
@@ -11696,6 +11754,10 @@ static struct cdp_host_stats_ops dp_ops_host_stats = {
|
||||
.txrx_update_vdev_stats = dp_txrx_update_vdev_host_stats,
|
||||
.txrx_get_peer_delay_stats = dp_txrx_get_peer_delay_stats,
|
||||
.txrx_get_peer_jitter_stats = dp_txrx_get_peer_jitter_stats,
|
||||
#ifdef QCA_VDEV_STATS_HW_OFFLOAD_SUPPORT
|
||||
.txrx_alloc_vdev_stats_id = dp_txrx_alloc_vdev_stats_id,
|
||||
.txrx_reset_vdev_stats_id = dp_txrx_reset_vdev_stats_id,
|
||||
#endif
|
||||
/* TODO */
|
||||
};
|
||||
|
||||
@@ -12852,6 +12914,8 @@ void *dp_soc_init(struct dp_soc *soc, HTC_HANDLE htc_handle,
|
||||
qdf_heap_mem_stats_read(),
|
||||
qdf_skb_total_mem_stats_read());
|
||||
|
||||
soc->vdev_stats_id_map = 0;
|
||||
|
||||
return soc;
|
||||
fail6:
|
||||
htt_soc_htc_dealloc(soc->htt_handle);
|
||||
|
新增問題並參考
封鎖使用者