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_soc *soc = NULL;
|
||||||
struct dp_vdev *vdev = tx_desc->vdev;
|
struct dp_vdev *vdev = tx_desc->vdev;
|
||||||
qdf_nbuf_t nbuf = tx_desc->nbuf;
|
qdf_nbuf_t nbuf = tx_desc->nbuf;
|
||||||
|
uint8_t dp_status;
|
||||||
|
|
||||||
if (!vdev || !nbuf) {
|
if (!vdev || !nbuf) {
|
||||||
dp_info_rl("invalid tx descriptor. vdev or nbuf NULL");
|
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);
|
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,
|
DPTRACE(qdf_dp_trace_ptr(tx_desc->nbuf,
|
||||||
QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD,
|
QDF_DP_TRACE_LI_DP_FREE_PACKET_PTR_RECORD,
|
||||||
QDF_TRACE_DEFAULT_PDEV_ID,
|
QDF_TRACE_DEFAULT_PDEV_ID,
|
||||||
qdf_nbuf_data_addr(nbuf),
|
qdf_nbuf_data_addr(nbuf),
|
||||||
sizeof(qdf_nbuf_data(nbuf)),
|
sizeof(qdf_nbuf_data(nbuf)),
|
||||||
tx_desc->id,
|
tx_desc->id,
|
||||||
ts->status));
|
dp_status));
|
||||||
|
|
||||||
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
QDF_TRACE(QDF_MODULE_ID_DP, QDF_TRACE_LEVEL_DEBUG,
|
||||||
"-------------------- \n"
|
"-------------------- \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,
|
uint16_t rec_index, uint8_t pdev_id,
|
||||||
uint8_t info);
|
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,
|
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,
|
uint8_t pdev_id, uint8_t *data, uint8_t size,
|
||||||
uint16_t msdu_id, uint16_t status);
|
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)
|
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
|
#endif
|
||||||
|
|
||||||
void qdf_trace_display(void);
|
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_FW_DISCARD,
|
||||||
QDF_TX_RX_STATUS_NO_ACK,
|
QDF_TX_RX_STATUS_NO_ACK,
|
||||||
QDF_TX_RX_STATUS_DROP,
|
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 */
|
#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);
|
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
|
* qdf_dp_trace_ptr() - record dptrace
|
||||||
* @code: dptrace code
|
* @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);
|
pkt_type = qdf_dp_get_pkt_proto_type(nbuf);
|
||||||
if ((code == QDF_DP_TRACE_FREE_PACKET_PTR_RECORD ||
|
if ((code == QDF_DP_TRACE_FREE_PACKET_PTR_RECORD ||
|
||||||
code == QDF_DP_TRACE_LI_DP_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,
|
qdf_dp_log_proto_pkt_info(nbuf->data + QDF_NBUF_SRC_MAC_OFFSET,
|
||||||
nbuf->data + QDF_NBUF_DEST_MAC_OFFSET,
|
nbuf->data + QDF_NBUF_DEST_MAC_OFFSET,
|
||||||
pkt_type,
|
pkt_type,
|
||||||
qdf_dp_get_pkt_subtype(nbuf, 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)
|
if (qdf_dp_enable_check(nbuf, code, QDF_TX) == false)
|
||||||
return;
|
return;
|
||||||
|
Reference in New Issue
Block a user