Kaynağa Gözat

qcacld-3.0: Send beacon miss disconnection logging event

Add support to send beacon miss disconnection logging event.
Fix the diag attribute end marker in the event table.

Change-Id: I11fc8859af383b69bcba42654fb3a2bc597fef83
CRs-Fixed: 3056266
Pragaspathi Thilagaraj 3 yıl önce
ebeveyn
işleme
ac1c7266fd

+ 40 - 3
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c

@@ -4837,10 +4837,15 @@ void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap,
 	qdf_mem_free(log_record);
 }
 
-void cm_roam_result_info_event(struct wmi_roam_result *res, uint8_t vdev_id,
-			       bool roam_abort)
+#define TYPE_ROAMED_AP 2
+void cm_roam_result_info_event(struct wmi_roam_result *res,
+			       struct wmi_roam_scan_data *scan_data,
+			       uint8_t vdev_id)
 {
 	struct wlan_log_record *log_record = NULL;
+	uint8_t i;
+	bool roam_abort = (res->fail_reason == ROAM_FAIL_REASON_SYNC ||
+			   res->fail_reason == ROAM_FAIL_REASON_INTERNAL_ABORT);
 
 	log_record = qdf_mem_malloc(sizeof(*log_record));
 	if (!log_record)
@@ -4856,7 +4861,16 @@ void cm_roam_result_info_event(struct wmi_roam_result *res, uint8_t vdev_id,
 		log_record->log_subtype = WLAN_ROAM_RESULT;
 		log_record->fw_timestamp_us = res->timestamp * 1000;
 		log_record->roam_result.roam_fail_reason = res->fail_reason;
-		log_record->roam_result.is_roam_successful = res->status;
+		log_record->roam_result.is_roam_successful = (res->status == 0);
+		for (i = 0; i < scan_data->num_ap; i++) {
+			if (i >= MAX_ROAM_CANDIDATE_AP)
+				break;
+
+			if (scan_data->ap[i].type == TYPE_ROAMED_AP) {
+				log_record->bssid = scan_data->ap[i].bssid;
+				break;
+			}
+		}
 	}
 
 	wlan_connectivity_log_enqueue(log_record);
@@ -5267,5 +5281,28 @@ cm_roam_mgmt_frame_event(struct roam_frame_info *frame_data, uint8_t vdev_id)
 
 	return status;
 }
+
+QDF_STATUS
+cm_roam_beacon_loss_disconnect_event(struct qdf_mac_addr bssid, int32_t rssi,
+				     uint8_t vdev_id)
+{
+	struct wlan_log_record *log_record = NULL;
+	QDF_STATUS status = QDF_STATUS_SUCCESS;
+
+	log_record = qdf_mem_malloc(sizeof(*log_record));
+	if (!log_record)
+		return QDF_STATUS_E_NOMEM;
+
+	log_record->timestamp_us = qdf_get_time_of_the_day_us();
+	log_record->vdev_id = vdev_id;
+	log_record->bssid = bssid;
+	log_record->log_subtype = WLAN_DISCONN_BMISS;
+	log_record->pkt_info.rssi = rssi;
+
+	status = wlan_connectivity_log_enqueue(log_record);
+	qdf_mem_free(log_record);
+
+	return status;
+}
 #endif /* WLAN_FEATURE_CONNECTIVITY_LOGGING */
 #endif  /* WLAN_FEATURE_ROAM_OFFLOAD */

+ 27 - 6
components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.h

@@ -62,13 +62,14 @@ void cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap,
 /**
  * cm_roam_result_info_event() - send scan results info to userspace
  * @res: roam result data
+ * @scan_data: Roam scan info
  * @vdev_id: vdev id
- * @roam_abort: Is roam abort
  *
  * Return: void
  */
-void cm_roam_result_info_event(struct wmi_roam_result *res, uint8_t vdev_id,
-			       bool roam_abort);
+void cm_roam_result_info_event(struct wmi_roam_result *res,
+			       struct wmi_roam_scan_data *scan_data,
+			       uint8_t vdev_id);
 #else
 static inline void
 cm_roam_scan_info_event(struct wmi_roam_scan_data *scan, uint8_t vdev_id)
@@ -87,9 +88,10 @@ cm_roam_candidate_info_event(struct wmi_roam_candidate_info *ap,
 {
 }
 
-static inline void
-cm_roam_result_info_event(struct wmi_roam_result *res, uint8_t vdev_id,
-			  bool roam_abort)
+static inline
+void cm_roam_result_info_event(struct wmi_roam_result *res,
+			       struct wmi_roam_scan_data *scan_data,
+			       uint8_t vdev_id)
 {
 }
 #endif /* WLAN_FEATURE_CONNECTIVITY_LOGGING */
@@ -369,6 +371,18 @@ QDF_STATUS
 cm_roam_btm_query_event(struct wmi_neighbor_report_data *btm_data,
 			uint8_t vdev_id);
 
+/**
+ * cm_roam_beacon_loss_disconnect_event() - Send BMISS disconnection logging
+ * event
+ * @bssid: BSSID
+ * @rssi: RSSI
+ * @vdev_id: Vdev id
+ *
+ * Return: QDF_STATUS
+ */
+QDF_STATUS
+cm_roam_beacon_loss_disconnect_event(struct qdf_mac_addr bssid, int32_t rssi,
+				     uint8_t vdev_id);
 #else
 static inline QDF_STATUS
 cm_roam_mgmt_frame_event(struct roam_frame_info *frame_data, uint8_t vdev_id)
@@ -397,5 +411,12 @@ cm_roam_btm_query_event(struct wmi_neighbor_report_data *btm_data,
 {
 	return QDF_STATUS_E_NOSUPPORT;
 }
+
+static inline QDF_STATUS
+cm_roam_beacon_loss_disconnect_event(struct qdf_mac_addr bssid, int32_t rssi,
+				     uint8_t vdev_id)
+{
+	return QDF_STATUS_E_NOSUPPORT;
+}
 #endif /* FEATURE_CONNECTIVITY_LOGGING */
 #endif /* _WLAN_CM_ROAM_OFFLOAD_H_ */

+ 3 - 1
components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c

@@ -2884,13 +2884,14 @@ cm_roam_stats_print_scan_info(struct wmi_roam_scan_data *scan, uint8_t vdev_id,
  */
 static void
 cm_roam_stats_print_roam_result(struct wmi_roam_result *res,
+				struct wmi_roam_scan_data *scan_data,
 				uint8_t vdev_id)
 {
 	char *buf;
 	char time[TIME_STRING_LEN];
 
 	/* Update roam result info to userspace */
-	cm_roam_result_info_event(res, vdev_id, 0);
+	cm_roam_result_info_event(res, scan_data, vdev_id);
 
 	buf = qdf_mem_malloc(ROAM_FAILURE_BUF_SIZE);
 	if (!buf)
@@ -3006,6 +3007,7 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
 
 		if (stats_info->result[i].present) {
 			cm_roam_stats_print_roam_result(&stats_info->result[i],
+							&stats_info->scan[i],
 							stats_info->vdev_id);
 			status = wlan_cm_update_roam_states(psoc,
 					      stats_info->vdev_id,

+ 3 - 2
core/hdd/src/wlan_hdd_cfg80211.c

@@ -15232,8 +15232,9 @@ void hdd_bt_activity_cb(hdd_handle_t hdd_handle, uint32_t bt_activity)
 		return;
 
 	ucfg_scan_set_bt_activity(hdd_ctx->psoc, hdd_ctx->bt_a2dp_active);
-	hdd_debug("a2dp_active: %d vo_active: %d", hdd_ctx->bt_a2dp_active,
-		 hdd_ctx->bt_vo_active);
+	hdd_debug("a2dp_active: %d vo_active: %d connected:%d",
+		  hdd_ctx->bt_a2dp_active,
+		  hdd_ctx->bt_vo_active, hdd_ctx->bt_profile_con);
 }
 
 struct chain_rssi_priv {

+ 57 - 43
core/hdd/src/wlan_hdd_connectivity_logging.c

@@ -87,9 +87,11 @@ hdd_connectivity_log_attr_table[WLAN_TAG_MAX] = {
 	[WLAN_EAP_FAILURE] = QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_FAILURE,
 };
 
+#define WLAN_CONNECTIVITY_ATTR_END (QCA_WLAN_VENDOR_ATTR_DIAG_MAX + 1)
+
 static const struct connectivity_log_attr
 connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
-			[QCA_WLAN_VENDOR_ATTR_DIAG_MAX] = {
+			[WLAN_CONNECTIVITY_ATTR_END] = {
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING] = {
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE, NLA_U32,    sizeof(uint32_t),
 	 GET_ATTR_OFFSET(log_subtype)},
@@ -119,7 +121,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(conn_info.auth_type)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_BT_COEX_ACTIVE,   NLA_FLAG, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(conn_info.is_bt_coex_active)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING_FAIL] = {
@@ -135,7 +137,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(conn_info.freq)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_REASON_CODE, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(conn_info.conn_status)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_AUTH_REQ] = {
@@ -163,7 +165,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.is_retry_frame)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_AUTH_RESP] = {
@@ -185,7 +187,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.frame_status_code)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ASSOC_REQ] = {
@@ -207,7 +209,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.is_retry_frame)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ASSOC_RESP] = {
@@ -223,7 +225,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.seq_num)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_STATUS_CODE, NLA_U8,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.frame_status_code)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DEAUTH_RX] = {
@@ -241,7 +243,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.seq_num)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_REASON_CODE, NLA_U8,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.frame_status_code)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DEAUTH_TX] = {
@@ -259,7 +261,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.seq_num)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_REASON_CODE, NLA_U8,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.frame_status_code)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DISASSOC_RX] = {
@@ -277,7 +279,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.seq_num)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_REASON_CODE, NLA_U8,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.frame_status_code)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DISASSOC_TX] = {
@@ -295,7 +297,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.seq_num)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_REASON_CODE, NLA_U8,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.frame_status_code)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BEACON_LOSS_DISCONN] = {
@@ -311,7 +313,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.rssi)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_REASON_CODE, NLA_U8,  sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.frame_status_code)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCAN_START] = {
@@ -335,7 +337,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 sizeof(uint8_t), GET_ATTR_OFFSET(roam_trig.rssi_threshold)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCAN_DONE] = {
@@ -351,7 +353,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_FREQ_LIST, NLA_NESTED, sizeof(uint16_t),
 	 GET_ATTR_OFFSET(roam_scan.scan_freq)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCORE_CURR_AP] = {
@@ -373,7 +375,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(ap.total_score)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_SCORE_CAND_AP] = {
@@ -399,7 +401,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(ap.etp)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_RESULT] = {
@@ -414,8 +416,8 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_SUCCESSFUL, NLA_FLAG,
-	 sizeof(uint64_t), GET_ATTR_OFFSET(roam_result.is_roam_successful)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	 sizeof(uint8_t), GET_ATTR_OFFSET(roam_result.is_roam_successful)},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_ROAM_CANCEL] = {
@@ -429,7 +431,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_REASON_CODE, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(roam_result.roam_fail_reason)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_QUERY] = {
@@ -445,7 +447,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(btm_info.reason)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_REQ] = {
@@ -467,7 +469,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 sizeof(uint8_t), GET_ATTR_OFFSET(btm_info.candidate_list_count)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_WTC] = {
@@ -485,7 +487,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(btm_info.wtc_duration)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_REQ_CANDI] = {
@@ -501,7 +503,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(btm_cand.preference)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_BTM_RESP] = {
@@ -521,7 +523,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(btm_info.target_bssid)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_DISCOVER] = {
@@ -533,7 +535,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_OFFER] = {
@@ -543,7 +545,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_REQUEST] = {
@@ -555,7 +557,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_ACK] = {
@@ -565,7 +567,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_DHCP_NACK] = {
@@ -575,7 +577,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAPOL_M1] = {
@@ -587,7 +589,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAPOL_M2] = {
@@ -601,7 +603,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAPOL_M3] = {
@@ -613,7 +615,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAPOL_M4] = {
@@ -627,7 +629,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_GTK_M1] = {
@@ -639,7 +641,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(vdev_id)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_GTK_M2] = {
@@ -653,7 +655,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FIRMWARE_TIMESTAMP, NLA_U64,
 	 sizeof(uint64_t), GET_ATTR_OFFSET(fw_timestamp_us)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_REQUEST] = {
@@ -667,7 +669,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.eap_type)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_EAP_LEN,  NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.eap_len)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_RESPONSE] = {
@@ -683,7 +685,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(pkt_info.eap_len)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_FRAME_TX_STATUS, NLA_U8, sizeof(uint8_t),
 	 GET_ATTR_OFFSET(pkt_info.tx_status)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_SUCCESS] = {
@@ -693,7 +695,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 
 	[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_EAP_FAILURE] = {
@@ -703,7 +705,7 @@ connectivity_attr_table[QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1]
 	 GET_ATTR_OFFSET(timestamp_us)},
 	{QCA_WLAN_VENDOR_ATTR_DIAG_IFINDEX,    NLA_U8,   sizeof(uint8_t),
 	 GET_ATTR_OFFSET(vdev_id)},
-	{QCA_WLAN_VENDOR_ATTR_DIAG_MAX,   0, 0, 0},
+	{WLAN_CONNECTIVITY_ATTR_END,   0, 0, 0},
 	},
 };
 
@@ -746,6 +748,15 @@ wlan_hdd_convert_roam_reason(enum roam_trigger_reason roam_reason)
 	return QCA_ROAM_REASON_UNKNOWN;
 }
 
+static enum qca_roam_scan_scheme
+wlan_hdd_convert_roam_scan_type(uint8_t roam_scan_type)
+{
+	if (roam_scan_type)
+		return QCA_ROAM_SCAN_SCHEME_FULL_SCAN;
+
+	return QCA_ROAM_SCAN_SCHEME_PARTIAL_SCAN;
+}
+
 static enum qca_roam_sub_reason
 wlan_hdd_get_converted_roam_sub_reason(enum roam_trigger_sub_reason sub_reason)
 {
@@ -813,10 +824,10 @@ wlan_hdd_get_connectivity_log_tlv_len(struct wlan_log_record *rec)
 	if (log_evt_type >= (QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_MAX + 1))
 			return 0;
 
-	for (j = 0; j < QCA_WLAN_VENDOR_ATTR_DIAG_MAX; j++) {
+	for (j = 0; j < WLAN_CONNECTIVITY_ATTR_END; j++) {
 		attr_id =
 			connectivity_attr_table[log_evt_type][j].attribute_id;
-		if (attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_MAX)
+		if (attr_id == WLAN_CONNECTIVITY_ATTR_END)
 			break;
 
 		if (log_evt_type ==
@@ -970,10 +981,10 @@ wlan_hdd_fill_connectivity_logging_data(struct sk_buff *skb,
 	 * QCA_WLAN_VENDOR_ATTR_DIAG_EVENT_TYPE. So
 	 * start the loop from first index.
 	 */
-	for (i = 1; i < QCA_WLAN_VENDOR_ATTR_DIAG_MAX; i++) {
+	for (i = 1; i < WLAN_CONNECTIVITY_ATTR_END; i++) {
 		attr = connectivity_attr_table[evt_type][i];
 		attr_id = attr.attribute_id;
-		if (attr_id == QCA_WLAN_VENDOR_ATTR_DIAG_MAX)
+		if (attr_id == WLAN_CONNECTIVITY_ATTR_END)
 			break;
 
 		if (evt_type == QCA_WLAN_VENDOR_DIAG_EVENT_TYPE_CONNECTING &&
@@ -1011,6 +1022,9 @@ wlan_hdd_fill_connectivity_logging_data(struct sk_buff *skb,
 			else if (attr.attribute_id ==
 				 QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_TRIGGER_REASON)
 				attr_val8 = wlan_hdd_convert_roam_reason(val8);
+			else if (attr.attribute_id ==
+				 QCA_WLAN_VENDOR_ATTR_DIAG_ROAM_SCAN_TYPE)
+				attr_val8 = wlan_hdd_convert_roam_scan_type(val8);
 
 			errno = nla_put_u8(skb, attr.attribute_id, attr_val8);
 			if (errno)

+ 6 - 0
core/wma/src/wma_mgmt.c

@@ -2537,6 +2537,7 @@ void wma_set_keepalive_req(tp_wma_handle wma,
 void wma_beacon_miss_handler(tp_wma_handle wma, uint32_t vdev_id, int32_t rssi)
 {
 	struct missed_beacon_ind *beacon_miss_ind;
+	struct qdf_mac_addr connected_bssid;
 	struct mac_context *mac = cds_get_context(QDF_MODULE_ID_PE);
 
 	beacon_miss_ind = qdf_mem_malloc(sizeof(*beacon_miss_ind));
@@ -2556,6 +2557,11 @@ void wma_beacon_miss_handler(tp_wma_handle wma, uint32_t vdev_id, int32_t rssi)
 				 wmi_service_hw_db2dbm_support))
 		rssi += WMA_TGT_NOISE_FLOOR_DBM;
 	wma_lost_link_info_handler(wma, vdev_id, rssi);
+
+	/* Send BMISS Logging event */
+	wlan_vdev_get_bss_peer_mac(wma->interfaces[vdev_id].vdev,
+				   &connected_bssid);
+	cm_roam_beacon_loss_disconnect_event(connected_bssid, rssi, vdev_id);
 }
 
 void wlan_cm_send_beacon_miss(uint8_t vdev_id, int32_t rssi)