qcacmn: Extract tx complete status based on CDP_ARCH_TYPE
For the non standard htt tx completion, extract the tx completion status based on the CDP arch type. For Lithium based architecture, use HTT_TX_WBM_COMPLETION_V2 For Beryllium based architecture, use HTT_TX_WBM_COMPLETION_V3 Change-Id: I050e8a144d72c2a9fcb6174c690c38c4e2c88c25 CRs-Fixed: 3119153
This commit is contained in:

committed by
Madan Koyyalamudi

parent
ff60b352ba
commit
1cd2285eca
@@ -49,6 +49,7 @@
|
|||||||
#ifdef FEATURE_WDS
|
#ifdef FEATURE_WDS
|
||||||
#include "dp_txrx_wds.h"
|
#include "dp_txrx_wds.h"
|
||||||
#endif
|
#endif
|
||||||
|
#include "cdp_txrx_cmn_reg.h"
|
||||||
|
|
||||||
/* Flag to skip CCE classify when mesh or tid override enabled */
|
/* Flag to skip CCE classify when mesh or tid override enabled */
|
||||||
#define DP_TX_SKIP_CCE_CLASSIFY \
|
#define DP_TX_SKIP_CCE_CLASSIFY \
|
||||||
@@ -1766,18 +1767,41 @@ static void dp_tx_update_tdls_flags(struct dp_soc *soc,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static uint8_t dp_htt_tx_comp_get_status(struct dp_soc *soc, char *htt_desc)
|
||||||
|
{
|
||||||
|
uint8_t tx_status = HTT_TX_FW2WBM_TX_STATUS_MAX;
|
||||||
|
|
||||||
|
switch (soc->arch_id) {
|
||||||
|
case CDP_ARCH_TYPE_LI:
|
||||||
|
tx_status = HTT_TX_WBM_COMPLETION_V2_TX_STATUS_GET(htt_desc[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case CDP_ARCH_TYPE_BE:
|
||||||
|
tx_status = HTT_TX_WBM_COMPLETION_V3_TX_STATUS_GET(htt_desc[0]);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
dp_err("Incorrect CDP_ARCH %d", soc->arch_id);
|
||||||
|
QDF_BUG(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
return tx_status;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* dp_non_std_tx_comp_free_buff() - Free the non std tx packet buffer
|
* dp_non_std_htt_tx_comp_free_buff() - Free the non std tx packet buffer
|
||||||
* @soc: dp_soc handle
|
* @soc: dp_soc handle
|
||||||
* @tx_desc: TX descriptor
|
* @tx_desc: TX descriptor
|
||||||
* @vdev: datapath vdev handle
|
* @vdev: datapath vdev handle
|
||||||
*
|
*
|
||||||
* Return: None
|
* Return: None
|
||||||
*/
|
*/
|
||||||
static void dp_non_std_tx_comp_free_buff(struct dp_soc *soc,
|
static void dp_non_std_htt_tx_comp_free_buff(struct dp_soc *soc,
|
||||||
struct dp_tx_desc_s *tx_desc)
|
struct dp_tx_desc_s *tx_desc)
|
||||||
{
|
{
|
||||||
struct hal_tx_completion_status ts = {0};
|
uint8_t tx_status = 0;
|
||||||
|
uint8_t htt_tx_status[HAL_TX_COMP_HTT_STATUS_LEN];
|
||||||
|
|
||||||
qdf_nbuf_t nbuf = tx_desc->nbuf;
|
qdf_nbuf_t nbuf = tx_desc->nbuf;
|
||||||
struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, tx_desc->vdev_id,
|
struct dp_vdev *vdev = dp_vdev_get_ref_by_id(soc, tx_desc->vdev_id,
|
||||||
DP_MOD_ID_TDLS);
|
DP_MOD_ID_TDLS);
|
||||||
@@ -1787,12 +1811,15 @@ static void dp_non_std_tx_comp_free_buff(struct dp_soc *soc,
|
|||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
hal_tx_comp_get_status(&tx_desc->comp, &ts, vdev->pdev->soc->hal_soc);
|
hal_tx_comp_get_htt_desc(&tx_desc->comp, htt_tx_status);
|
||||||
|
tx_status = dp_htt_tx_comp_get_status(soc, htt_tx_status);
|
||||||
|
dp_debug("vdev_id: %d tx_status: %d", tx_desc->vdev_id, tx_status);
|
||||||
|
|
||||||
if (vdev->tx_non_std_data_callback.func) {
|
if (vdev->tx_non_std_data_callback.func) {
|
||||||
qdf_nbuf_set_next(nbuf, NULL);
|
qdf_nbuf_set_next(nbuf, NULL);
|
||||||
vdev->tx_non_std_data_callback.func(
|
vdev->tx_non_std_data_callback.func(
|
||||||
vdev->tx_non_std_data_callback.ctxt,
|
vdev->tx_non_std_data_callback.ctxt,
|
||||||
nbuf, ts.status);
|
nbuf, tx_status);
|
||||||
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_TDLS);
|
dp_vdev_unref_delete(soc, vdev, DP_MOD_ID_TDLS);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
@@ -1836,7 +1863,7 @@ static inline void dp_tx_update_tdls_flags(struct dp_soc *soc,
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void dp_non_std_tx_comp_free_buff(struct dp_soc *soc,
|
static inline void dp_non_std_htt_tx_comp_free_buff(struct dp_soc *soc,
|
||||||
struct dp_tx_desc_s *tx_desc)
|
struct dp_tx_desc_s *tx_desc)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
@@ -2143,7 +2170,7 @@ void dp_tx_comp_free_buf(struct dp_soc *soc, struct dp_tx_desc_s *desc)
|
|||||||
|
|
||||||
/* If it is TDLS mgmt, don't unmap or free the frame */
|
/* If it is TDLS mgmt, don't unmap or free the frame */
|
||||||
if (desc->flags & DP_TX_DESC_FLAG_TDLS_FRAME)
|
if (desc->flags & DP_TX_DESC_FLAG_TDLS_FRAME)
|
||||||
return dp_non_std_tx_comp_free_buff(soc, desc);
|
return dp_non_std_htt_tx_comp_free_buff(soc, desc);
|
||||||
|
|
||||||
/* 0 : MSDU buffer, 1 : MLE */
|
/* 0 : MSDU buffer, 1 : MLE */
|
||||||
if (desc->msdu_ext_desc) {
|
if (desc->msdu_ext_desc) {
|
||||||
@@ -4368,13 +4395,15 @@ void dp_tx_comp_process_tx_status(struct dp_soc *soc,
|
|||||||
"ppdu_id = %d \n"
|
"ppdu_id = %d \n"
|
||||||
"transmit_cnt = %d \n"
|
"transmit_cnt = %d \n"
|
||||||
"tid = %d \n"
|
"tid = %d \n"
|
||||||
"peer_id = %d\n",
|
"peer_id = %d\n"
|
||||||
|
"tx_status = %d\n",
|
||||||
ts->ack_frame_rssi, ts->first_msdu,
|
ts->ack_frame_rssi, ts->first_msdu,
|
||||||
ts->last_msdu, ts->msdu_part_of_amsdu,
|
ts->last_msdu, ts->msdu_part_of_amsdu,
|
||||||
ts->valid, ts->bw, ts->pkt_type, ts->stbc,
|
ts->valid, ts->bw, ts->pkt_type, ts->stbc,
|
||||||
ts->ldpc, ts->sgi, ts->mcs, ts->ofdma,
|
ts->ldpc, ts->sgi, ts->mcs, ts->ofdma,
|
||||||
ts->tones_in_ru, ts->tsf, ts->ppdu_id,
|
ts->tones_in_ru, ts->tsf, ts->ppdu_id,
|
||||||
ts->transmit_cnt, ts->tid, ts->peer_id);
|
ts->transmit_cnt, ts->tid, ts->peer_id,
|
||||||
|
ts->status);
|
||||||
|
|
||||||
/* Update SoC level stats */
|
/* Update SoC level stats */
|
||||||
DP_STATS_INCC(soc, tx.dropped_fw_removed, 1,
|
DP_STATS_INCC(soc, tx.dropped_fw_removed, 1,
|
||||||
@@ -4771,8 +4800,12 @@ more_data:
|
|||||||
if (qdf_unlikely(buffer_src ==
|
if (qdf_unlikely(buffer_src ==
|
||||||
HAL_TX_COMP_RELEASE_SOURCE_FW)) {
|
HAL_TX_COMP_RELEASE_SOURCE_FW)) {
|
||||||
uint8_t htt_tx_status[HAL_TX_COMP_HTT_STATUS_LEN];
|
uint8_t htt_tx_status[HAL_TX_COMP_HTT_STATUS_LEN];
|
||||||
|
|
||||||
hal_tx_comp_get_htt_desc(tx_comp_hal_desc,
|
hal_tx_comp_get_htt_desc(tx_comp_hal_desc,
|
||||||
htt_tx_status);
|
htt_tx_status);
|
||||||
|
/* Collect hw completion contents */
|
||||||
|
hal_tx_comp_desc_sync(tx_comp_hal_desc,
|
||||||
|
&tx_desc->comp, 1);
|
||||||
soc->arch_ops.dp_tx_process_htt_completion(
|
soc->arch_ops.dp_tx_process_htt_completion(
|
||||||
soc,
|
soc,
|
||||||
tx_desc,
|
tx_desc,
|
||||||
|
Reference in New Issue
Block a user