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:
@@ -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"
|
||||
|
@@ -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);
|
||||
|
@@ -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 */
|
||||
|
@@ -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;
|
||||
|
Reference in New Issue
Block a user