qcacmn: Updating the bank config in RAW mode

In the case of RAW mode, VAP parameters encap type, dscp_to_tid map id
and cipher are not updating in bank register.
Added a API to update vdev param.

Change-Id: I702bee563e7451f403fa32292bf20680cd66e213
CRs-Fixed: 3078687
This commit is contained in:
Sai Rupesh Chevuru
2021-11-10 19:34:12 +05:30
committed by Madan Koyyalamudi
부모 fcebc684e9
커밋 45be95484a
6개의 변경된 파일69개의 추가작업 그리고 7개의 파일을 삭제

파일 보기

@@ -1235,6 +1235,7 @@ enum cdp_pdev_param_type {
* @cdp_vdev_param_peer_authorize: set peer authorize * @cdp_vdev_param_peer_authorize: set peer authorize
* @cdp_vdev_param_peer_tid_latency_enable: set peer tid latency enable flag * @cdp_vdev_param_peer_tid_latency_enable: set peer tid latency enable flag
* @cdp_vdev_param_mesh_tid: config tatency tid on vdev * @cdp_vdev_param_mesh_tid: config tatency tid on vdev
* @cdp_vdev_param_dscp_tid_map_id: set dscp to tid map id
* *
* @cdp_pdev_param_dbg_snf: Enable debug sniffer feature * @cdp_pdev_param_dbg_snf: Enable debug sniffer feature
* @cdp_pdev_param_bpr_enable: Enable bcast probe feature * @cdp_pdev_param_bpr_enable: Enable bcast probe feature
@@ -1304,6 +1305,7 @@ typedef union cdp_config_param_t {
uint8_t cdp_vdev_param_peer_authorize; uint8_t cdp_vdev_param_peer_authorize;
uint8_t cdp_vdev_param_peer_tid_latency_enable; uint8_t cdp_vdev_param_peer_tid_latency_enable;
uint8_t cdp_vdev_param_mesh_tid; uint8_t cdp_vdev_param_mesh_tid;
uint8_t cdp_vdev_param_dscp_tid_map_id;
/* pdev params */ /* pdev params */
bool cdp_pdev_param_cptr_latcy; bool cdp_pdev_param_cptr_latcy;
@@ -1421,6 +1423,7 @@ enum cdp_pdev_bpr_param {
* @CDP_ENABLE_PEER_AUTHORIZE: enable peer authorize flag * @CDP_ENABLE_PEER_AUTHORIZE: enable peer authorize flag
* @CDP_ENABLE_PEER_TID_LATENCY: set peer tid latency enable flag * @CDP_ENABLE_PEER_TID_LATENCY: set peer tid latency enable flag
* @CDP_SET_VAP_MESH_TID : Set latency tid in vap * @CDP_SET_VAP_MESH_TID : Set latency tid in vap
* @CDP_UPDATE_DSCP_TO_TID_MAP: Set DSCP to TID map id
*/ */
enum cdp_vdev_param_type { enum cdp_vdev_param_type {
CDP_ENABLE_NAWDS, CDP_ENABLE_NAWDS,
@@ -1458,6 +1461,7 @@ enum cdp_vdev_param_type {
#ifdef WLAN_VENDOR_SPECIFIC_BAR_UPDATE #ifdef WLAN_VENDOR_SPECIFIC_BAR_UPDATE
CDP_SKIP_BAR_UPDATE_AP, CDP_SKIP_BAR_UPDATE_AP,
#endif #endif
CDP_UPDATE_DSCP_TO_TID_MAP
}; };
/* /*

파일 보기

@@ -1314,6 +1314,31 @@ static bool dp_reo_remap_config_be(struct dp_soc *soc,
} }
#endif #endif
QDF_STATUS dp_txrx_set_vdev_param_be(struct dp_soc *soc,
struct dp_vdev *vdev,
enum cdp_vdev_param_type param,
cdp_config_param_type val)
{
struct dp_soc_be *be_soc = dp_get_be_soc_from_dp_soc(soc);
struct dp_vdev_be *be_vdev = dp_get_be_vdev_from_dp_vdev(vdev);
switch (param) {
case CDP_TX_ENCAP_TYPE:
case CDP_UPDATE_DSCP_TO_TID_MAP:
dp_tx_update_bank_profile(be_soc, be_vdev);
break;
case CDP_ENABLE_CIPHER:
if (vdev->tx_encap_type == htt_cmn_pkt_type_raw)
dp_tx_update_bank_profile(be_soc, be_vdev);
break;
default:
dp_warn("invalid param %d", param);
break;
}
return QDF_STATUS_SUCCESS;
}
void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops) void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
{ {
#ifndef QCA_HOST_MODE_WIFI_DISABLED #ifndef QCA_HOST_MODE_WIFI_DISABLED
@@ -1351,6 +1376,7 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
arch_ops->tx_implicit_rbm_set = dp_tx_implicit_rbm_set_be; arch_ops->tx_implicit_rbm_set = dp_tx_implicit_rbm_set_be;
arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_be; arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_be;
arch_ops->reo_remap_config = dp_reo_remap_config_be; arch_ops->reo_remap_config = dp_reo_remap_config_be;
arch_ops->txrx_set_vdev_param = dp_txrx_set_vdev_param_be;
#ifdef WLAN_FEATURE_11BE_MLO #ifdef WLAN_FEATURE_11BE_MLO
arch_ops->mlo_peer_find_hash_detach = arch_ops->mlo_peer_find_hash_detach =
@@ -1361,5 +1387,6 @@ void dp_initialize_arch_ops_be(struct dp_arch_ops *arch_ops)
arch_ops->mlo_peer_find_hash_remove = dp_mlo_peer_find_hash_remove_be; arch_ops->mlo_peer_find_hash_remove = dp_mlo_peer_find_hash_remove_be;
arch_ops->mlo_peer_find_hash_find = dp_mlo_peer_find_hash_find_be; arch_ops->mlo_peer_find_hash_find = dp_mlo_peer_find_hash_find_be;
#endif #endif
dp_init_near_full_arch_ops_be(arch_ops); dp_init_near_full_arch_ops_be(arch_ops);
} }

파일 보기

@@ -187,7 +187,7 @@ struct dp_tx_bank_profile {
struct dp_soc_be { struct dp_soc_be {
struct dp_soc soc; struct dp_soc soc;
uint8_t num_bank_profiles; uint8_t num_bank_profiles;
qdf_mutex_t tx_bank_lock; qdf_spinlock_t tx_bank_lock;
struct dp_tx_bank_profile *bank_profiles; struct dp_tx_bank_profile *bank_profiles;
struct dp_spt_page_desc *page_desc_base; struct dp_spt_page_desc *page_desc_base;
uint32_t cc_cmem_base; uint32_t cc_cmem_base;
@@ -617,4 +617,19 @@ void dp_pdev_mlo_fill_params(struct dp_pdev *pdev,
{ {
} }
#endif #endif
/*
* dp_txrx_set_vdev_param_be: target specific ops while setting vdev params
* @soc : DP soc handle
* @vdev: pointer to vdev structure
* @param: parameter type to get value
* @val: value
*
* return: QDF_STATUS
*/
QDF_STATUS dp_txrx_set_vdev_param_be(struct dp_soc *soc,
struct dp_vdev *vdev,
enum cdp_vdev_param_type param,
cdp_config_param_type val);
#endif #endif

파일 보기

@@ -286,7 +286,7 @@ QDF_STATUS dp_tx_init_bank_profiles(struct dp_soc_be *be_soc)
return QDF_STATUS_E_NOMEM; return QDF_STATUS_E_NOMEM;
} }
qdf_mutex_create(&be_soc->tx_bank_lock); qdf_spinlock_create(&be_soc->tx_bank_lock);
for (i = 0; i < num_tcl_banks; i++) { for (i = 0; i < num_tcl_banks; i++) {
be_soc->bank_profiles[i].is_configured = false; be_soc->bank_profiles[i].is_configured = false;
@@ -299,7 +299,7 @@ QDF_STATUS dp_tx_init_bank_profiles(struct dp_soc_be *be_soc)
void dp_tx_deinit_bank_profiles(struct dp_soc_be *be_soc) void dp_tx_deinit_bank_profiles(struct dp_soc_be *be_soc)
{ {
qdf_mem_free(be_soc->bank_profiles); qdf_mem_free(be_soc->bank_profiles);
qdf_mutex_destroy(&be_soc->tx_bank_lock); qdf_spinlock_destroy(&be_soc->tx_bank_lock);
} }
static static
@@ -364,7 +364,7 @@ int dp_tx_get_bank_profile(struct dp_soc_be *be_soc,
/* convert vdev params into hal_tx_bank_config */ /* convert vdev params into hal_tx_bank_config */
dp_tx_get_vdev_bank_config(be_vdev, &vdev_config); dp_tx_get_vdev_bank_config(be_vdev, &vdev_config);
qdf_mutex_acquire(&be_soc->tx_bank_lock); qdf_spin_lock_bh(&be_soc->tx_bank_lock);
/* go over all banks and find a matching/unconfigured/unsed bank */ /* go over all banks and find a matching/unconfigured/unsed bank */
for (i = 0; i < be_soc->num_bank_profiles; i++) { for (i = 0; i < be_soc->num_bank_profiles; i++) {
if (be_soc->bank_profiles[i].is_configured && if (be_soc->bank_profiles[i].is_configured &&
@@ -410,7 +410,7 @@ configure_and_return:
bank_id); bank_id);
inc_ref_and_return: inc_ref_and_return:
qdf_atomic_inc(&be_soc->bank_profiles[bank_id].ref_count); qdf_atomic_inc(&be_soc->bank_profiles[bank_id].ref_count);
qdf_mutex_release(&be_soc->tx_bank_lock); qdf_spin_unlock_bh(&be_soc->tx_bank_lock);
dp_info("found %s slot at index %d, input:0x%x match:0x%x ref_count %u", dp_info("found %s slot at index %d, input:0x%x match:0x%x ref_count %u",
temp_str, bank_id, vdev_config.val, temp_str, bank_id, vdev_config.val,
@@ -436,9 +436,9 @@ inc_ref_and_return:
void dp_tx_put_bank_profile(struct dp_soc_be *be_soc, void dp_tx_put_bank_profile(struct dp_soc_be *be_soc,
struct dp_vdev_be *be_vdev) struct dp_vdev_be *be_vdev)
{ {
qdf_mutex_acquire(&be_soc->tx_bank_lock); qdf_spin_lock_bh(&be_soc->tx_bank_lock);
qdf_atomic_dec(&be_soc->bank_profiles[be_vdev->bank_id].ref_count); qdf_atomic_dec(&be_soc->bank_profiles[be_vdev->bank_id].ref_count);
qdf_mutex_release(&be_soc->tx_bank_lock); qdf_spin_unlock_bh(&be_soc->tx_bank_lock);
} }
void dp_tx_update_bank_profile(struct dp_soc_be *be_soc, void dp_tx_update_bank_profile(struct dp_soc_be *be_soc,

파일 보기

@@ -9287,6 +9287,7 @@ dp_set_vdev_param(struct cdp_soc_t *cdp_soc, uint8_t vdev_id,
break; break;
} }
dsoc->arch_ops.txrx_set_vdev_param(dsoc, vdev, param, val);
dp_tx_vdev_update_search_flags((struct dp_vdev *)vdev); dp_tx_vdev_update_search_flags((struct dp_vdev *)vdev);
dp_vdev_unref_delete(dsoc, vdev, DP_MOD_ID_CDP); dp_vdev_unref_delete(dsoc, vdev, DP_MOD_ID_CDP);
@@ -9396,11 +9397,17 @@ static QDF_STATUS dp_set_vdev_dscp_tid_map_wifi3(ol_txrx_soc_handle cdp_soc,
uint8_t vdev_id, uint8_t vdev_id,
uint8_t map_id) uint8_t map_id)
{ {
cdp_config_param_type val;
struct dp_soc *soc = cdp_soc_t_to_dp_soc(cdp_soc); struct dp_soc *soc = cdp_soc_t_to_dp_soc(cdp_soc);
struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id, struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, vdev_id,
DP_MOD_ID_CDP); DP_MOD_ID_CDP);
if (vdev) { if (vdev) {
vdev->dscp_tid_map_id = map_id; vdev->dscp_tid_map_id = map_id;
val.cdp_vdev_param_dscp_tid_map_id = map_id;
soc->arch_ops.txrx_set_vdev_param(soc,
vdev,
CDP_UPDATE_DSCP_TO_TID_MAP,
val);
/* Updatr flag for transmit tid classification */ /* Updatr flag for transmit tid classification */
if (vdev->dscp_tid_map_id < soc->num_hw_dscp_tid_map) if (vdev->dscp_tid_map_id < soc->num_hw_dscp_tid_map)
vdev->skip_sw_tid_classification |= vdev->skip_sw_tid_classification |=

파일 보기

@@ -358,6 +358,14 @@ static bool dp_reo_remap_config_li(struct dp_soc *soc,
return dp_reo_remap_config(soc, remap0, remap1, remap2); return dp_reo_remap_config(soc, remap0, remap1, remap2);
} }
static QDF_STATUS dp_txrx_set_vdev_param_li(struct dp_soc *soc,
struct dp_vdev *vdev,
enum cdp_vdev_param_type param,
cdp_config_param_type val)
{
return QDF_STATUS_SUCCESS;
}
void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops) void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
{ {
#ifndef QCA_HOST_MODE_WIFI_DISABLED #ifndef QCA_HOST_MODE_WIFI_DISABLED
@@ -401,5 +409,6 @@ void dp_initialize_arch_ops_li(struct dp_arch_ops *arch_ops)
arch_ops->tx_implicit_rbm_set = dp_tx_implicit_rbm_set_li; arch_ops->tx_implicit_rbm_set = dp_tx_implicit_rbm_set_li;
arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_li; arch_ops->peer_get_reo_hash = dp_peer_get_reo_hash_li;
arch_ops->reo_remap_config = dp_reo_remap_config_li; arch_ops->reo_remap_config = dp_reo_remap_config_li;
arch_ops->txrx_set_vdev_param = dp_txrx_set_vdev_param_li;
} }