瀏覽代碼

qcacmn: Add proprietary status codes for disconnection

Host adds internal status code in enum wlan_status_code.

Change-Id: I17cdcee9f0df1e34cc13425a4f06985a418d5a8a
CRs-Fixed: 2799197
Abhishek Ambure 4 年之前
父節點
當前提交
58c169c64c

+ 14 - 1
os_if/linux/mlme/inc/osif_cm_util.h

@@ -31,7 +31,19 @@
 #include <cdp_txrx_mob_def.h>
 #endif
 
-#ifdef FEATURE_CM_ENABLE
+/**
+ * osif_cm_mac_to_qca_connect_fail_reason() - Convert to qca internal connect
+ * fail reason
+ * @internal_reason: Mac reason code of type @wlan_status_code
+ *
+ * Check if it is internal status code and convert it to the
+ * enum qca_sta_connect_fail_reason_codes.
+ *
+ * Return: Reason code of type enum qca_sta_connect_fail_reason_codes
+ */
+enum qca_sta_connect_fail_reason_codes
+osif_cm_mac_to_qca_connect_fail_reason(enum wlan_status_code internal_reason);
+
 /**
  * osif_cm_qca_reason_to_str() - return string conversion of qca reason code
  * @reason: enum qca_disconnect_reason_codes
@@ -56,6 +68,7 @@ osif_cm_qca_reason_to_str(enum qca_disconnect_reason_codes reason);
 enum qca_disconnect_reason_codes
 osif_cm_mac_to_qca_reason(enum wlan_reason_code internal_reason);
 
+#ifdef FEATURE_CM_ENABLE
 /**
  * osif_cm_register_cb() - API to register connection manager
  * callbacks.

+ 2 - 0
os_if/linux/mlme/src/osif_cm_rsp.h

@@ -24,6 +24,7 @@
 #ifndef __OSIF_CM_RSP_H
 #define __OSIF_CM_RSP_H
 
+#ifdef FEATURE_CM_ENABLE
 #include "wlan_objmgr_vdev_obj.h"
 #include "wlan_cm_public_struct.h"
 
@@ -71,4 +72,5 @@ QDF_STATUS osif_connect_handler(struct wlan_objmgr_vdev *vdev,
 QDF_STATUS osif_failed_candidate_handler(struct wlan_objmgr_vdev *vdev,
 					 struct wlan_cm_connect_rsp *rsp);
 
+#endif /* FEATURE_CM_ENABLE */
 #endif /* __OSIF_CM_RSP_H */

+ 43 - 6
os_if/linux/mlme/src/osif_cm_util.c

@@ -27,7 +27,43 @@
 #include "osif_cm_rsp.h"
 #include "wlan_cfg80211_scan.h"
 
-static struct osif_cm_ops *osif_cm_legacy_ops;
+enum qca_sta_connect_fail_reason_codes
+osif_cm_mac_to_qca_connect_fail_reason(enum wlan_status_code internal_reason)
+{
+	enum qca_sta_connect_fail_reason_codes reason = 0;
+
+	if (internal_reason < STATUS_PROP_START)
+		return reason;
+
+	switch (internal_reason) {
+	case STATUS_NO_NETWORK_FOUND:
+		reason = QCA_STA_CONNECT_FAIL_REASON_NO_BSS_FOUND;
+		break;
+	case STATUS_AUTH_TX_FAIL:
+		reason = QCA_STA_CONNECT_FAIL_REASON_AUTH_TX_FAIL;
+		break;
+	case STATUS_AUTH_NO_ACK_RECEIVED:
+		reason = QCA_STA_CONNECT_FAIL_REASON_AUTH_NO_ACK_RECEIVED;
+		break;
+	case STATUS_AUTH_NO_RESP_RECEIVED:
+		reason = QCA_STA_CONNECT_FAIL_REASON_AUTH_NO_RESP_RECEIVED;
+		break;
+	case STATUS_ASSOC_TX_FAIL:
+		reason = QCA_STA_CONNECT_FAIL_REASON_ASSOC_REQ_TX_FAIL;
+		break;
+	case STATUS_ASSOC_NO_ACK_RECEIVED:
+		reason = QCA_STA_CONNECT_FAIL_REASON_ASSOC_NO_ACK_RECEIVED;
+		break;
+	case STATUS_ASSOC_NO_RESP_RECEIVED:
+		reason = QCA_STA_CONNECT_FAIL_REASON_ASSOC_NO_RESP_RECEIVED;
+		break;
+	default:
+		osif_debug("QCA code not present for internal status code %d",
+			   internal_reason);
+	}
+
+	return reason;
+}
 
 const char *
 osif_cm_qca_reason_to_str(enum qca_disconnect_reason_codes reason)
@@ -67,9 +103,10 @@ osif_cm_mac_to_qca_reason(enum wlan_reason_code internal_reason)
 
 	switch (internal_reason) {
 	case REASON_HOST_TRIGGERED_ROAM_FAILURE:
+	case REASON_FW_TRIGGERED_ROAM_FAILURE:
 		reason = QCA_DISCONNECT_REASON_INTERNAL_ROAM_FAILURE;
 		break;
-	case REASON_FW_TRIGGERED_ROAM_FAILURE:
+	case REASON_USER_TRIGGERED_ROAM_FAILURE:
 		reason = QCA_DISCONNECT_REASON_EXTERNAL_ROAM_FAILURE;
 		break;
 	case REASON_GATEWAY_REACHABILITY_FAILURE:
@@ -114,9 +151,6 @@ osif_cm_mac_to_qca_reason(enum wlan_reason_code internal_reason)
 	case REASON_BEACON_MISSED:
 		reason = QCA_DISCONNECT_REASON_BEACON_MISS_FAILURE;
 		break;
-	case REASON_USER_TRIGGERED_ROAM_FAILURE:
-		reason = QCA_DISCONNECT_REASON_USER_TRIGGERED;
-		break;
 	default:
 		osif_debug("No QCA reason code for mac reason: %u",
 			   internal_reason);
@@ -126,6 +160,9 @@ osif_cm_mac_to_qca_reason(enum wlan_reason_code internal_reason)
 	return reason;
 }
 
+#ifdef FEATURE_CM_ENABLE
+static struct osif_cm_ops *osif_cm_legacy_ops;
+
 void osif_cm_reset_id_and_src_no_lock(struct vdev_osif_priv *osif_priv)
 {
 	osif_priv->cm_info.last_id = CM_ID_INVALID;
@@ -401,4 +438,4 @@ void osif_cm_reset_legacy_cb(void)
 {
 	osif_cm_legacy_ops = NULL;
 }
-
+#endif

+ 23 - 0
umac/cmn_services/cmn_defs/inc/wlan_cmn_ieee80211.h

@@ -746,6 +746,19 @@ enum wlan_reason_code {
  * listen interval is too large.
  * @STATUS_INVALID_FT_ACTION_FRAME_COUNT: Invalid FT Action frame count.
  * @STATUS_INVALID_PMKID: Invalid pairwise master key identifier (PMKID).
+ *
+ * Internal status codes: Add any internal status code just after
+ * STATUS_PROP_START and decrease the value of STATUS_PROP_START
+ * accordingly.
+ *
+ * @STATUS_PROP_START: Start of prop status codes.
+ * @STATUS_NO_NETWORK_FOUND: No network found
+ * @STATUS_AUTH_TX_FAIL: Failed to sent AUTH on air
+ * @STATUS_AUTH_NO_ACK_RECEIVED: No ack received for Auth tx
+ * @STATUS_AUTH_NO_RESP_RECEIVED: No Auth response for Auth tx
+ * @STATUS_ASSOC_TX_FAIL: Failed to sent Assoc on air
+ * @STATUS_ASSOC_NO_ACK_RECEIVED: No ack received for Assoc tx
+ * @STATUS_ASSOC_NO_RESP_RECEIVED: No Assoc response for Assoc tx
  */
 enum wlan_status_code {
 	STATUS_SUCCESS = 0,
@@ -794,6 +807,16 @@ enum wlan_status_code {
 	STATUS_ASSOC_DENIED_LISTEN_INT_TOO_LARGE = 51,
 	STATUS_INVALID_FT_ACTION_FRAME_COUNT = 52,
 	STATUS_INVALID_PMKID = 53,
+
+	/* Error STATUS code for intenal usage*/
+	STATUS_PROP_START = 65528,
+	STATUS_NO_NETWORK_FOUND = 65528,
+	STATUS_AUTH_TX_FAIL = 65529,
+	STATUS_AUTH_NO_ACK_RECEIVED = 65530,
+	STATUS_AUTH_NO_RESP_RECEIVED = 65531,
+	STATUS_ASSOC_TX_FAIL = 65532,
+	STATUS_ASSOC_NO_ACK_RECEIVED = 65533,
+	STATUS_ASSOC_NO_RESP_RECEIVED = 65534,
 };
 
 #define WLAN_OUI_SIZE 4