qcacmn: Add TX global desc pool per arch type

As cookie format is different between LI and BE have
different global descriptor pool for Lithium and
Beryllium

Change-Id: Idd222f4009c017a1bc4bc4b14043b36d927a9e27
CRs-Fixed: 3608792
This commit is contained in:
Chaithanya Garrepalli
2023-09-08 02:20:37 +05:30
committed by Rahul Choudhary
parent e762867930
commit 31c9403303
4 changed files with 49 additions and 36 deletions

View File

@@ -175,18 +175,18 @@ typedef void (*ipa_uc_op_cb_type)(uint8_t *op_msg,
/* Global level structure for win contexts */
struct dp_global_context {
struct dp_rx_fst *fst_ctx;
struct dp_tx_desc_pool_s *tx_desc[4];
struct dp_tx_desc_pool_s *tx_desc[2][4];
struct dp_hw_cookie_conversion_t *tx_cc_ctx[4];
struct dp_tx_desc_pool_s *spcl_tx_desc[4];
struct dp_tx_desc_pool_s *spcl_tx_desc[2][4];
struct dp_hw_cookie_conversion_t *spcl_tx_cc_ctx[4];
qdf_atomic_t rx_fst_ref_cnt;
qdf_atomic_t global_descriptor_in_use;
int tx_cookie_ctx_alloc_cnt;
int tx_desc_pool_alloc_cnt;
int tx_desc_pool_init_cnt;
int tx_desc_pool_alloc_cnt[2];
int tx_desc_pool_init_cnt[2];
int spcl_tx_cookie_ctx_alloc_cnt;
int spcl_tx_desc_pool_alloc_cnt;
int spcl_tx_desc_pool_init_cnt;
int spcl_tx_desc_pool_alloc_cnt[2];
int spcl_tx_desc_pool_init_cnt[2];
};
/**

View File

@@ -6525,7 +6525,7 @@ static QDF_STATUS dp_tx_alloc_static_pools(struct dp_soc *soc, int num_pool,
/* Allocate software Tx descriptor pools */
if (dp_global->tx_desc_pool_alloc_cnt == 0) {
if (dp_global->tx_desc_pool_alloc_cnt[soc->arch_id] == 0) {
for (i = 0; i < num_pool; i++) {
if (dp_tx_desc_pool_alloc(soc, i, num_desc, false)) {
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_ERROR,
@@ -6535,7 +6535,7 @@ static QDF_STATUS dp_tx_alloc_static_pools(struct dp_soc *soc, int num_pool,
}
}
}
dp_global->tx_desc_pool_alloc_cnt++;
dp_global->tx_desc_pool_alloc_cnt[soc->arch_id]++;
return QDF_STATUS_SUCCESS;
fail:
@@ -6554,7 +6554,7 @@ static QDF_STATUS dp_tx_spcl_alloc_static_pools(struct dp_soc *soc,
dp_global = wlan_objmgr_get_global_ctx();
/* Allocate software Tx descriptor pools */
if (dp_global->spcl_tx_desc_pool_alloc_cnt == 0) {
if (dp_global->spcl_tx_desc_pool_alloc_cnt[soc->arch_id] == 0) {
for (j = 0; j < num_pool; j++) {
if (dp_tx_desc_pool_alloc(soc, j, num_spcl_desc, true)) {
QDF_TRACE(QDF_MODULE_ID_DP,
@@ -6565,7 +6565,7 @@ static QDF_STATUS dp_tx_spcl_alloc_static_pools(struct dp_soc *soc,
}
}
}
dp_global->spcl_tx_desc_pool_alloc_cnt++;
dp_global->spcl_tx_desc_pool_alloc_cnt[soc->arch_id]++;
return QDF_STATUS_SUCCESS;
fail:
@@ -6582,7 +6582,7 @@ static QDF_STATUS dp_tx_init_static_pools(struct dp_soc *soc, int num_pool,
dp_global = wlan_objmgr_get_global_ctx();
if (dp_global->tx_desc_pool_init_cnt == 0) {
if (dp_global->tx_desc_pool_init_cnt[soc->arch_id] == 0) {
for (i = 0; i < num_pool; i++) {
if (dp_tx_desc_pool_init(soc, i, num_desc, false)) {
QDF_TRACE(QDF_MODULE_ID_DP,
@@ -6593,7 +6593,7 @@ static QDF_STATUS dp_tx_init_static_pools(struct dp_soc *soc, int num_pool,
}
}
}
dp_global->tx_desc_pool_init_cnt++;
dp_global->tx_desc_pool_init_cnt[soc->arch_id]++;
return QDF_STATUS_SUCCESS;
}
@@ -6605,7 +6605,7 @@ static QDF_STATUS dp_tx_spcl_init_static_pools(struct dp_soc *soc, int num_pool,
dp_global = wlan_objmgr_get_global_ctx();
if (dp_global->spcl_tx_desc_pool_init_cnt == 0) {
if (dp_global->spcl_tx_desc_pool_init_cnt[soc->arch_id] == 0) {
for (i = 0; i < num_pool; i++) {
if (dp_tx_desc_pool_init(soc, i, num_spcl_desc, true)) {
QDF_TRACE(QDF_MODULE_ID_DP,
@@ -6616,7 +6616,7 @@ static QDF_STATUS dp_tx_spcl_init_static_pools(struct dp_soc *soc, int num_pool,
}
}
}
dp_global->spcl_tx_desc_pool_init_cnt++;
dp_global->spcl_tx_desc_pool_init_cnt[soc->arch_id]++;
return QDF_STATUS_SUCCESS;
}
@@ -6627,8 +6627,8 @@ static void dp_tx_deinit_static_pools(struct dp_soc *soc, int num_pool)
dp_global = wlan_objmgr_get_global_ctx();
dp_global->tx_desc_pool_init_cnt--;
if (dp_global->tx_desc_pool_init_cnt == 0) {
dp_global->tx_desc_pool_init_cnt[soc->arch_id]--;
if (dp_global->tx_desc_pool_init_cnt[soc->arch_id] == 0) {
for (i = 0; i < num_pool; i++)
dp_tx_desc_pool_deinit(soc, i, false);
}
@@ -6641,8 +6641,8 @@ static void dp_tx_spcl_deinit_static_pools(struct dp_soc *soc, int num_pool)
dp_global = wlan_objmgr_get_global_ctx();
dp_global->spcl_tx_desc_pool_init_cnt--;
if (dp_global->spcl_tx_desc_pool_init_cnt == 0) {
dp_global->spcl_tx_desc_pool_init_cnt[soc->arch_id]--;
if (dp_global->spcl_tx_desc_pool_init_cnt[soc->arch_id] == 0) {
for (i = 0; i < num_pool; i++)
dp_tx_desc_pool_deinit(soc, i, true);
}
@@ -6655,8 +6655,8 @@ static void dp_tx_delete_static_pools(struct dp_soc *soc, int num_pool)
dp_global = wlan_objmgr_get_global_ctx();
dp_global->tx_desc_pool_alloc_cnt--;
if (dp_global->tx_desc_pool_alloc_cnt == 0) {
dp_global->tx_desc_pool_alloc_cnt[soc->arch_id]--;
if (dp_global->tx_desc_pool_alloc_cnt[soc->arch_id] == 0) {
for (i = 0; i < num_pool; i++)
dp_tx_desc_pool_free(soc, i, false);
}
@@ -6669,8 +6669,8 @@ static void dp_tx_spcl_delete_static_pools(struct dp_soc *soc, int num_pool)
dp_global = wlan_objmgr_get_global_ctx();
dp_global->spcl_tx_desc_pool_alloc_cnt--;
if (dp_global->spcl_tx_desc_pool_alloc_cnt == 0) {
dp_global->spcl_tx_desc_pool_alloc_cnt[soc->arch_id]--;
if (dp_global->spcl_tx_desc_pool_alloc_cnt[soc->arch_id] == 0) {
for (i = 0; i < num_pool; i++)
dp_tx_desc_pool_free(soc, i, true);
}

View File

@@ -1597,7 +1597,7 @@ struct dp_tx_desc_pool_s *dp_get_tx_desc_pool(struct dp_soc *soc,
struct dp_global_context *dp_global = NULL;
dp_global = wlan_objmgr_get_global_ctx();
return dp_global->tx_desc[pool_id];
return dp_global->tx_desc[soc->arch_id][pool_id];
}
static inline
@@ -1607,7 +1607,7 @@ struct dp_tx_desc_pool_s *dp_get_spcl_tx_desc_pool(struct dp_soc *soc,
struct dp_global_context *dp_global = NULL;
dp_global = wlan_objmgr_get_global_ctx();
return dp_global->spcl_tx_desc[pool_id];
return dp_global->spcl_tx_desc[soc->arch_id][pool_id];
}
#else
static inline

View File

@@ -116,37 +116,50 @@ void dp_tx_desc_pool_cleanup(struct dp_soc *soc, qdf_nbuf_t *nbuf_list)
#endif
#ifdef QCA_SUPPORT_DP_GLOBAL_CTX
static void dp_tx_desc_pool_alloc_mem(int8_t pool_id, bool spcl_tx_desc)
static void dp_tx_desc_pool_alloc_mem(struct dp_soc *soc, int8_t pool_id,
bool spcl_tx_desc)
{
struct dp_global_context *dp_global = NULL;
dp_global = wlan_objmgr_get_global_ctx();
if (spcl_tx_desc) {
dp_global->spcl_tx_desc[pool_id] =
dp_global->spcl_tx_desc[soc->arch_id][pool_id] =
qdf_mem_malloc(sizeof(struct dp_tx_desc_pool_s));
} else {
dp_global->tx_desc[pool_id] =
dp_global->tx_desc[soc->arch_id][pool_id] =
qdf_mem_malloc(sizeof(struct dp_tx_desc_pool_s));
}
}
static void dp_tx_desc_pool_free_mem(int8_t pool_id, bool spcl_tx_desc)
static void dp_tx_desc_pool_free_mem(struct dp_soc *soc, int8_t pool_id,
bool spcl_tx_desc)
{
struct dp_global_context *dp_global = NULL;
dp_global = wlan_objmgr_get_global_ctx();
if (spcl_tx_desc)
qdf_mem_free(dp_global->spcl_tx_desc[pool_id]);
else
qdf_mem_free(dp_global->tx_desc[pool_id]);
if (spcl_tx_desc) {
if (!dp_global->spcl_tx_desc[soc->arch_id][pool_id])
return;
qdf_mem_free(dp_global->spcl_tx_desc[soc->arch_id][pool_id]);
dp_global->spcl_tx_desc[soc->arch_id][pool_id] = NULL;
} else {
if (!dp_global->tx_desc[soc->arch_id][pool_id])
return;
qdf_mem_free(dp_global->tx_desc[soc->arch_id][pool_id]);
dp_global->tx_desc[soc->arch_id][pool_id] = NULL;
}
}
#else
static void dp_tx_desc_pool_alloc_mem(int8_t pool_id, bool spcl_tx_desc)
static void dp_tx_desc_pool_alloc_mem(struct dp_soc *soc, int8_t pool_id,
bool spcl_tx_desc)
{
}
static void dp_tx_desc_pool_free_mem(int8_t pool_id, bool spcl_tx_desc)
static void dp_tx_desc_pool_free_mem(struct dp_soc *soc, int8_t pool_id,
bool spcl_tx_desc)
{
}
#endif
@@ -161,7 +174,7 @@ QDF_STATUS dp_tx_desc_pool_alloc(struct dp_soc *soc, uint8_t pool_id,
desc_size = DP_TX_DESC_SIZE(sizeof(struct dp_tx_desc_s));
dp_tx_desc_pool_alloc_mem(pool_id, spcl_tx_desc);
dp_tx_desc_pool_alloc_mem(soc, pool_id, spcl_tx_desc);
if (spcl_tx_desc) {
tx_desc_pool = dp_get_spcl_tx_desc_pool(soc, pool_id);
desc_type = QDF_DP_TX_SPCL_DESC_TYPE;
@@ -214,7 +227,7 @@ void dp_tx_desc_pool_free(struct dp_soc *soc, uint8_t pool_id,
/* Free arch specific TX descriptor */
soc->arch_ops.dp_tx_desc_pool_free(soc, pool_id);
dp_tx_desc_pool_free_mem(pool_id, spcl_tx_desc);
dp_tx_desc_pool_free_mem(soc, pool_id, spcl_tx_desc);
}
QDF_STATUS dp_tx_desc_pool_init(struct dp_soc *soc, uint8_t pool_id,