qcacmn: Fix htt_status & A_STATUS map dp status wrong issue

The packet tx complete status from wlan fw define in htt_tx_status
doesn't match with packet trace feature used in qdf_dp_tx_rx_status,
Meanwhile A_STATUS also doesn't convert to correct qdf_dp_tx_rx_status,
so add two according APIs to fix it

Change-Id: Ic250175dd270632f40af14ad9499ddcafbb3033b
This commit is contained in:
Chaoli Zhou
2020-05-12 16:50:09 +08:00
committed by nshrivas
parent 101c1fdeda
commit 47e9c6a997
4 changed files with 91 additions and 3 deletions

View File

@@ -3386,6 +3386,7 @@ void dp_tx_comp_process_tx_status(struct dp_tx_desc_s *tx_desc,
struct dp_soc *soc = NULL;
struct dp_vdev *vdev = tx_desc->vdev;
qdf_nbuf_t nbuf = tx_desc->nbuf;
uint8_t dp_status;
if (!vdev || !nbuf) {
dp_info_rl("invalid tx descriptor. vdev or nbuf NULL");
@@ -3394,13 +3395,14 @@ void dp_tx_comp_process_tx_status(struct dp_tx_desc_s *tx_desc,
eh = (qdf_ether_header_t *)qdf_nbuf_data(nbuf);
dp_status = qdf_dp_get_status_from_htt(ts->status);
DPTRACE(qdf_dp_trace_ptr(tx_desc->nbuf,
QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD,
QDF_TRACE_DEFAULT_PDEV_ID,
qdf_nbuf_data_addr(nbuf),
sizeof(qdf_nbuf_data(nbuf)),
tx_desc->id,
ts->status));
dp_status));
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
"-------------------- \n"

View File

@@ -773,6 +773,20 @@ qdf_dp_display_data_pkt_record(struct qdf_dp_trace_record_s *record,
uint16_t rec_index, uint8_t pdev_id,
uint8_t info);
/**
* qdf_dp_get_status_from_htt() - Convert htt tx status to qdf dp status
* @status : htt_tx_status which needs to be converted
*
* Return : the status that from qdf_dp_tx_rx_status
*/
enum qdf_dp_tx_rx_status qdf_dp_get_status_from_htt(uint8_t status);
/**
* qdf_dp_get_status_from_a_status() - Convert A_STATUS to qdf dp status
* @status : A_STATUS which needs to be converted
*
* Return : the status that from qdf_dp_tx_rx_status
*/
enum qdf_dp_tx_rx_status qdf_dp_get_status_from_a_status(uint8_t status);
void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
uint8_t pdev_id, uint8_t *data, uint8_t size,
uint16_t msdu_id, uint16_t status);
@@ -1033,6 +1047,18 @@ static inline
void qdf_dp_track_noack_check(qdf_nbuf_t nbuf, enum qdf_proto_subtype *subtype)
{
}
static inline
enum qdf_dp_tx_rx_status qdf_dp_get_status_from_htt(uint8_t status)
{
return QDF_TX_RX_STATUS_OK;
}
static inline
enum qdf_dp_tx_rx_status qdf_dp_get_status_from_a_status(uint8_t status)
{
return QDF_TX_RX_STATUS_OK;
}
#endif
void qdf_trace_display(void);

View File

@@ -1378,6 +1378,37 @@ enum qdf_dp_tx_rx_status {
QDF_TX_RX_STATUS_FW_DISCARD,
QDF_TX_RX_STATUS_NO_ACK,
QDF_TX_RX_STATUS_DROP,
QDF_TX_RX_STATUS_MAX,
};
/**
* enum qdf_dp_tx_comp_status - TX COMPL packet status
* @QDF_TX_COMP_STATUS_OK: successfully sent + acked
* @QDF_TX_COMP_STATUS_STAT_DISCARD: packet not sent in FW
* @QDF_TX_COMP_STATUS_STAT_NO_ACK: packet sent but no ack
* @QDF_TX_COMP_STATUS_STAT_POSTPONE: equal HTT_TX_COMPL_IND_STAT_POSTPONE
* @QDF_TX_COMP_STATUS_STAT_PEER_DEL: equal HTT_TX_COMPL_IND_STAT_PEER_DEL
* @QDF_TX_COMP_STATUS_STAT_DROP: packet dropped in FW
* @QDF_TX_COMP_STATUS_STAT_INSPECT: equal HTT_TX_COMPL_IND_STAT_HOST_INSPECT
*/
enum qdf_dp_tx_comp_status {
QDF_TX_COMP_STATUS_OK,
QDF_TX_COMP_STATUS_STAT_DISCARD,
QDF_TX_COMP_STATUS_STAT_NO_ACK,
QDF_TX_COMP_STATUS_STAT_POSTPONE,
QDF_TX_COMP_STATUS_STAT_PEER_DEL,
QDF_TX_COMP_STATUS_STAT_DROP,
QDF_TX_COMP_STATUS_STAT_INSPECT,
QDF_TX_COMP_STATUS_STAT_MAX,
};
/**
* enum qdf_dp_a_status - A_STATUS
* @QDF_A_STATUS_ERROR: Generic error return
* @QDF_A_STATUS_OK: success
*/
enum qdf_dp_a_status {
QDF_A_STATUS_ERROR = -1,
QDF_A_STATUS_OK,
};
#endif /* __QDF_TYPES_H */

View File

@@ -2265,6 +2265,35 @@ void qdf_dp_track_noack_check(qdf_nbuf_t nbuf, enum qdf_proto_subtype *subtype)
}
qdf_export_symbol(qdf_dp_track_noack_check);
enum qdf_dp_tx_rx_status qdf_dp_get_status_from_htt(uint8_t status)
{
switch (status) {
case QDF_TX_COMP_STATUS_OK:
return QDF_TX_RX_STATUS_OK;
case QDF_TX_COMP_STATUS_STAT_DISCARD:
case QDF_TX_COMP_STATUS_STAT_DROP:
return QDF_TX_RX_STATUS_FW_DISCARD;
case QDF_TX_COMP_STATUS_STAT_NO_ACK:
return QDF_TX_RX_STATUS_NO_ACK;
default:
return QDF_TX_RX_STATUS_MAX;
}
}
qdf_export_symbol(qdf_dp_get_status_from_htt);
enum qdf_dp_tx_rx_status qdf_dp_get_status_from_a_status(uint8_t status)
{
if (status == QDF_A_STATUS_ERROR)
return QDF_TX_RX_STATUS_INVALID;
else if (status == QDF_A_STATUS_OK)
return QDF_TX_RX_STATUS_OK;
else
return QDF_TX_RX_STATUS_MAX;
}
qdf_export_symbol(qdf_dp_get_status_from_a_status);
/**
* qdf_dp_trace_ptr() - record dptrace
* @code: dptrace code
@@ -2287,12 +2316,12 @@ void qdf_dp_trace_ptr(qdf_nbuf_t nbuf, enum QDF_DP_TRACE_ID code,
pkt_type = qdf_dp_get_pkt_proto_type(nbuf);
if ((code == QDF_DP_TRACE_FREE_PACKET_PTR_RECORD ||
code == QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD) &&
qdf_dp_proto_log_enable_check(pkt_type, status + 1))
qdf_dp_proto_log_enable_check(pkt_type, status))
qdf_dp_log_proto_pkt_info(nbuf->data + QDF_NBUF_SRC_MAC_OFFSET,
nbuf->data + QDF_NBUF_DEST_MAC_OFFSET,
pkt_type,
qdf_dp_get_pkt_subtype(nbuf, pkt_type),
QDF_TX, msdu_id, status + 1);
QDF_TX, msdu_id, status);
if (qdf_dp_enable_check(nbuf, code, QDF_TX) == false)
return;