qcacmn: Add support to print vdev req/resp string

Add support to print vdev req/resp string
on target_if timer start conflict and timer
timeout handler

Change-Id: I0116c03089f4ab80623596bb9e8d0268efb0dd87
CRs-Fixed: 2495018
diff --git a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_rx_ops.c b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_rx_ops.c
index 4213cea..f78f75f 100644
--- a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_rx_ops.c
+++ b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_rx_ops.c
@@ -45,6 +45,7 @@
 	struct vdev_delete_response del_rsp = {0};
 	struct peer_delete_all_response peer_del_all_rsp = {0};
 	uint8_t vdev_id;
+	uint16_t rsp_pos = RESPONSE_BIT_MAX;
 
 	vdev_id = wlan_vdev_get_id(vdev);
 	mlme_debug("Response timer expired for VDEV %d", vdev_id);
@@ -77,10 +78,13 @@
 	    qdf_is_fw_down()) {
 		/* this ensures stop timer will not be done in target_if */
 		vdev_rsp->timer_status = QDF_STATUS_E_TIMEOUT;
-		if (qdf_atomic_test_bit(START_RESPONSE_BIT,
-					&vdev_rsp->rsp_status) ||
-		    qdf_atomic_test_bit(RESTART_RESPONSE_BIT,
-					&vdev_rsp->rsp_status)) {
+	}
+
+	if (qdf_atomic_test_bit(START_RESPONSE_BIT,
+				&vdev_rsp->rsp_status) ||
+	    qdf_atomic_test_bit(RESTART_RESPONSE_BIT,
+				&vdev_rsp->rsp_status)) {
+		if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
 			start_rsp.vdev_id = wlan_vdev_get_id(vdev);
 			start_rsp.status = WLAN_MLME_HOST_VDEV_START_TIMEOUT;
 			if (qdf_atomic_test_bit(START_RESPONSE_BIT,
@@ -92,39 +96,57 @@
 					WMI_HOST_VDEV_RESTART_RESP_EVENT;
 
 			rx_ops->vdev_mgr_start_response(psoc, &start_rsp);
+		} else {
+			if (qdf_atomic_test_bit(START_RESPONSE_BIT,
+						&vdev_rsp->rsp_status))
+				rsp_pos = START_RESPONSE_BIT;
+			else
+				rsp_pos = RESTART_RESPONSE_BIT;
 		}
-
-		if (qdf_atomic_test_bit(STOP_RESPONSE_BIT,
-					&vdev_rsp->rsp_status)) {
+	} else if (qdf_atomic_test_bit(STOP_RESPONSE_BIT,
+				       &vdev_rsp->rsp_status)) {
+		if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
 			stop_rsp.vdev_id = wlan_vdev_get_id(vdev);
 			rx_ops->vdev_mgr_stop_response(psoc, &stop_rsp);
+		} else {
+			rsp_pos = STOP_RESPONSE_BIT;
 		}
-
-		if (qdf_atomic_test_bit(DELETE_RESPONSE_BIT,
-					&vdev_rsp->rsp_status)) {
+	} else if (qdf_atomic_test_bit(DELETE_RESPONSE_BIT,
+				       &vdev_rsp->rsp_status)) {
+		if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
 			del_rsp.vdev_id = wlan_vdev_get_id(vdev);
 			rx_ops->vdev_mgr_delete_response(psoc, &del_rsp);
+		} else {
+			rsp_pos = DELETE_RESPONSE_BIT;
 		}
 
-		if (qdf_atomic_test_bit(PEER_DELETE_ALL_RESPONSE_BIT,
-					&vdev_rsp->rsp_status)) {
+	} else if (qdf_atomic_test_bit(PEER_DELETE_ALL_RESPONSE_BIT,
+				&vdev_rsp->rsp_status)) {
+		if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT) {
 			peer_del_all_rsp.vdev_id = wlan_vdev_get_id(vdev);
 			rx_ops->vdev_mgr_peer_delete_all_response(
-							psoc,
-							&peer_del_all_rsp);
+					psoc,
+					&peer_del_all_rsp);
+		} else {
+			rsp_pos = PEER_DELETE_ALL_RESPONSE_BIT;
 		}
-
+	} else {
+		mlme_err("PSOC_%d VDEV_%d: Unknown error",
+			 wlan_psoc_get_id(psoc), vdev_id);
 		return;
 	}
 
+	if (vdev_rsp->timer_status == QDF_STATUS_E_TIMEOUT)
+		return;
+
 	if (target_if_vdev_mgr_is_panic_on_bug()) {
-		QDF_DEBUG_PANIC("PSOC_%d VDEV_%d: Panic on bug, rsp status:%d",
+		QDF_DEBUG_PANIC("PSOC_%d VDEV_%d: Panic, %s response timeout",
 				wlan_psoc_get_id(psoc),
-				vdev_id, vdev_rsp->rsp_status);
+				vdev_id, string_from_rsp_bit(rsp_pos));
 	} else {
-		mlme_err("PSOC_%d VDEV_%d: Trigger Self recovery, rsp status%d",
+		mlme_err("PSOC_%d VDEV_%d: Self recovery, %s response timeout",
 			 wlan_psoc_get_id(psoc),
-			 vdev_id, vdev_rsp->rsp_status);
+			 vdev_id, string_from_rsp_bit(rsp_pos));
 		wmi_handle = target_if_vdev_mgr_wmi_handle_get(vdev);
 
 		qdf_mem_set(&param, sizeof(param), 0);
diff --git a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c
index c84e2fd..49b6dda 100644
--- a/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c
+++ b/target_if/mlme/vdev_mgr/src/target_if_vdev_mgr_tx_ops.c
@@ -109,10 +109,10 @@
 		if (rsp_pos != set_bit) {
 			if (qdf_atomic_test_bit(rsp_pos,
 						&vdev_rsp->rsp_status)) {
-				mlme_err("PSOC_%d VDEV_%d: Request bit %d, response bit %d",
+				mlme_err("PSOC_%d VDEV_%d: %s requested, waiting for %s response",
 					 wlan_psoc_get_id(psoc),
-					 vdev_id, set_bit,
-					 vdev_rsp->rsp_status);
+					 vdev_id, string_from_rsp_bit(set_bit),
+					 string_from_rsp_bit(rsp_pos));
 				target_if_vdev_mgr_assert_mgmt(vdev, vdev_rsp,
 							       rsp_pos);
 				target_if_vdev_mgr_rsp_timer_stop(vdev,
@@ -123,9 +123,10 @@
 	}
 
 	if (qdf_atomic_test_and_set_bit(set_bit, &vdev_rsp->rsp_status)) {
-		mlme_err("PSOC_%d VDEV_%d: Request bit: %d, response bit %d",
+		mlme_err("PSOC_%d VDEV_%d: %s requested, waiting for %s response",
 			 wlan_psoc_get_id(psoc),
-			 vdev_id, set_bit, vdev_rsp->rsp_status);
+			 vdev_id, string_from_rsp_bit(set_bit),
+			 string_from_rsp_bit(set_bit));
 		target_if_vdev_mgr_assert_mgmt(vdev, vdev_rsp,
 					       set_bit);
 		target_if_vdev_mgr_rsp_timer_stop(vdev, vdev_rsp, set_bit);
diff --git a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_rx_defs.h b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_rx_defs.h
index a237b58..15283e6 100644
--- a/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_rx_defs.h
+++ b/umac/mlme/vdev_mgr/dispatcher/inc/wlan_vdev_mgr_tgt_if_rx_defs.h
@@ -28,12 +28,40 @@
 
 #include <qdf_timer.h>
 
-#define START_RESPONSE_BIT  0x1
-#define RESTART_RESPONSE_BIT  0x2
-#define STOP_RESPONSE_BIT   0x3
-#define DELETE_RESPONSE_BIT 0x4
-#define PEER_DELETE_ALL_RESPONSE_BIT 0x5
-#define RESPONSE_BIT_MAX PEER_DELETE_ALL_RESPONSE_BIT
+/**
+ * enum wlan_vdev_mgr_tgt_if_rsp_bit - response status bit
+ * START_RESPONSE_BIT: vdev start response bit
+ * RESTART_RESPONSE_BIT: vdev restart response bit
+ * STOP_RESPONSE_BIT: vdev stop response bit
+ * DELETE_RESPONSE_BIT:  vdev delete response bit
+ * PEER_DELETE_ALL_RESPONSE_BIT: vdev peer delete all response bit
+ */
+enum wlan_vdev_mgr_tgt_if_rsp_bit {
+	START_RESPONSE_BIT = 0,
+	RESTART_RESPONSE_BIT = 1,
+	STOP_RESPONSE_BIT = 2,
+	DELETE_RESPONSE_BIT = 3,
+	PEER_DELETE_ALL_RESPONSE_BIT = 4,
+	RESPONSE_BIT_MAX,
+};
+
+/**
+ * string_from_rsp_bit() - Convert response bit to string
+ * @bit - response bit as in wlan_vdev_mgr_tgt_if_rsp_bit
+ *
+ * Please note to add new string in the array at index equal to
+ * its enum value in wlan_vdev_mgr_tgt_if_rsp_bit.
+ */
+static inline char *string_from_rsp_bit(enum wlan_vdev_mgr_tgt_if_rsp_bit bit)
+{
+	static const char *strings[] = { "START",
+					"RESTART",
+					"STOP",
+					"DELETE",
+					"PEER DELETE ALL",
+					"RESPONE MAX"};
+	return (char *)strings[bit];
+}
 
 #define START_RESPONSE_TIMER 6000 /* 6 seconds */
 #define STOP_RESPONSE_TIMER  3000 /* 3 seconds */