diff --git a/qdf/inc/qdf_trace.h b/qdf/inc/qdf_trace.h index 5929b51b43..dcd450f2f2 100644 --- a/qdf/inc/qdf_trace.h +++ b/qdf/inc/qdf_trace.h @@ -181,6 +181,52 @@ typedef struct s_qdf_trace_data { uint16_t dump_count; } t_qdf_trace_data; +#ifdef CONNECTIVITY_DIAG_EVENT +/** + * enum diag_dp_tx_rx_status - TX/RX packet status + * @DIAG_TX_RX_STATUS_INVALID: default invalid status + * @DIAG_TX_RX_STATUS_OK: successfully sent + acked + * @DIAG_TX_RX_STATUS_DISCARD: queued but not sent over air + * @DIAG_TX_RX_STATUS_NO_ACK: packet sent but no ack received + * @DIAG_TX_RX_STATUS_DROP: packet dropped due to congestion + * @DIAG_TX_RX_STATUS_DOWNLOAD_SUCC: packet delivered to target + * @DIAG_TX_RX_STATUS_DEFAULT: default status + * @DIAG_TX_RX_STATUS_MAX: + */ +enum diag_dp_tx_rx_status { + DIAG_TX_RX_STATUS_INVALID, + DIAG_TX_RX_STATUS_OK, + DIAG_TX_RX_STATUS_FW_DISCARD, + DIAG_TX_RX_STATUS_NO_ACK, + DIAG_TX_RX_STATUS_DROP, + DIAG_TX_RX_STATUS_DOWNLOAD_SUCC, + DIAG_TX_RX_STATUS_DEFAULT, + DIAG_TX_RX_STATUS_MAX +}; + +/** + * enum diag_tx_status - Used by attribute + * @DIAG_TX_STATUS_FAIL: Indicates frame is not sent over the air. + * @DIAG_TX_STATUS_NO_ACK: Indicates packet sent but acknowledgment + * is not received. + * @DIAG_TX_STATUS_ACK: Indicates the frame is successfully sent and + * acknowledged. + */ +enum diag_tx_status { + DIAG_TX_STATUS_FAIL = 1, + DIAG_TX_STATUS_NO_ACK = 2, + DIAG_TX_STATUS_ACK = 3 +}; + +/** + * wlan_get_diag_tx_status() - Gives the diag logging specific tx status + * @tx_status: fw specific TX status + * + * Returns TX status specified in enum diag_tx_status + */ +enum diag_tx_status wlan_get_diag_tx_status(enum qdf_dp_tx_rx_status tx_status); +#endif + #define CASE_RETURN_STRING(str) case ((str)): return (uint8_t *)(# str); #ifndef MAX_QDF_DP_TRACE_RECORDS diff --git a/qdf/linux/src/qdf_trace.c b/qdf/linux/src/qdf_trace.c index da170af0d7..de769f5412 100644 --- a/qdf/linux/src/qdf_trace.c +++ b/qdf/linux/src/qdf_trace.c @@ -1728,6 +1728,25 @@ static bool qdf_log_icmp_pkt(uint8_t vdev_id, struct sk_buff *skb, } #ifdef CONNECTIVITY_DIAG_EVENT +enum diag_tx_status wlan_get_diag_tx_status(enum qdf_dp_tx_rx_status tx_status) +{ + switch (tx_status) { + case DIAG_TX_RX_STATUS_FW_DISCARD: + case DIAG_TX_RX_STATUS_INVALID: + case DIAG_TX_RX_STATUS_DROP: + case DIAG_TX_RX_STATUS_DOWNLOAD_SUCC: + case DIAG_TX_RX_STATUS_DEFAULT: + default: + return DIAG_TX_STATUS_FAIL; + case DIAG_TX_RX_STATUS_NO_ACK: + return DIAG_TX_STATUS_NO_ACK; + case DIAG_TX_RX_STATUS_OK: + return DIAG_TX_STATUS_ACK; + } + + return DIAG_TX_STATUS_FAIL; +} + /** * qdf_subtype_to_wlan_main_tag() - Convert qdf subtype to wlan main tag * @subtype: EAPoL key subtype @@ -1884,7 +1903,8 @@ void qdf_fill_wlan_connectivity_log(enum qdf_proto_type type, /*Tx completion status needs to be logged*/ if (dir == QDF_TX) - wlan_diag_event.tx_status = qdf_tx_status; + wlan_diag_event.tx_status = + wlan_get_diag_tx_status(qdf_tx_status); WLAN_HOST_DIAG_EVENT_REPORT(&wlan_diag_event, EVENT_WLAN_CONN_DP); }