From ac1c7266fdf7bc72e97bb665dae3b421f1d983a1 Mon Sep 17 00:00:00 2001 From: Pragaspathi Thilagaraj Date: Wed, 20 Oct 2021 00:03:10 +0530 Subject: [PATCH] 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 --- .../core/src/wlan_cm_roam_offload.c | 43 +++++++- .../core/src/wlan_cm_roam_offload.h | 33 ++++-- .../dispatcher/src/wlan_cm_roam_api.c | 4 +- core/hdd/src/wlan_hdd_cfg80211.c | 5 +- core/hdd/src/wlan_hdd_connectivity_logging.c | 100 ++++++++++-------- core/wma/src/wma_mgmt.c | 6 ++ 6 files changed, 136 insertions(+), 55 deletions(-) diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c index 86ee8a249b..4d48bfa571 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.c +++ b/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 */ diff --git a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.h b/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.h index 9aa63d0a35..da5e168ce9 100644 --- a/components/umac/mlme/connection_mgr/core/src/wlan_cm_roam_offload.h +++ b/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_ */ diff --git a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c b/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c index a86c42dd04..35786f2254 100644 --- a/components/umac/mlme/connection_mgr/dispatcher/src/wlan_cm_roam_api.c +++ b/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, diff --git a/core/hdd/src/wlan_hdd_cfg80211.c b/core/hdd/src/wlan_hdd_cfg80211.c index a12ccde486..f7db1a3a21 100644 --- a/core/hdd/src/wlan_hdd_cfg80211.c +++ b/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 { diff --git a/core/hdd/src/wlan_hdd_connectivity_logging.c b/core/hdd/src/wlan_hdd_connectivity_logging.c index ab4743f14c..7df245d4a3 100644 --- a/core/hdd/src/wlan_hdd_connectivity_logging.c +++ b/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) diff --git a/core/wma/src/wma_mgmt.c b/core/wma/src/wma_mgmt.c index 44d06e7e2e..c0c171a44e 100644 --- a/core/wma/src/wma_mgmt.c +++ b/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)