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:

committed by
Madan Koyyalamudi

parent
fcebc684e9
commit
45be95484a
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user