Merge f608c16908
on remote branch
Change-Id: I86a911ca7563df7b48ffa2c7223f543ca1ffe055
This commit is contained in:
commit
1351c18d6f
@ -35,6 +35,13 @@ LOCAL_MODULE_DDK_BUILD := true
|
||||
LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := true
|
||||
endif
|
||||
|
||||
ifeq ($(TARGET_BOARD_PLATFORM),parrot)
|
||||
ifeq ($(TARGET_BOARD_SUFFIX),66)
|
||||
LOCAL_MODULE_DDK_BUILD := true
|
||||
LOCAL_MODULE_DDK_ALLOW_UNSAFE_HEADERS := true
|
||||
endif
|
||||
endif
|
||||
|
||||
LOCAL_PATH := $(call my-dir)
|
||||
$(call wlog,LOCAL_PATH=$(LOCAL_PATH))
|
||||
BOARD_OPENSOURCE_DIR ?= vendor/qcom/opensource
|
||||
|
@ -231,7 +231,7 @@ struct action_oui_request {
|
||||
enum action_oui_id action_id;
|
||||
uint32_t no_oui_extensions;
|
||||
uint32_t total_no_oui_extensions;
|
||||
struct action_oui_extension extension[0];
|
||||
struct action_oui_extension extension[];
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -6718,6 +6718,7 @@ policy_mgr_link_switch_notifier_cb(struct wlan_objmgr_vdev *vdev,
|
||||
info[MAX_NUMBER_OF_CONC_CONNECTIONS] = { {0} };
|
||||
uint8_t num_del = 0;
|
||||
struct ml_nlink_change_event data;
|
||||
uint16_t dyn_inact_bmap = 0, force_inact_bmap = 0;
|
||||
|
||||
if (notify_reason > MLO_LINK_SWITCH_NOTIFY_REASON_PRE_START_POST_SER)
|
||||
return QDF_STATUS_SUCCESS;
|
||||
@ -6749,7 +6750,11 @@ policy_mgr_link_switch_notifier_cb(struct wlan_objmgr_vdev *vdev,
|
||||
psoc, vdev_id, info, &num_del);
|
||||
conc_ext_flags.value =
|
||||
policy_mgr_get_conc_ext_flags(vdev, true);
|
||||
if (!policy_mgr_is_concurrency_allowed(psoc, PM_STA_MODE,
|
||||
ml_nlink_get_dynamic_inactive_links(psoc, vdev, &dyn_inact_bmap,
|
||||
&force_inact_bmap);
|
||||
|
||||
if (!(dyn_inact_bmap & BIT(new_ieee_link_id)) &&
|
||||
!policy_mgr_is_concurrency_allowed(psoc, PM_STA_MODE,
|
||||
new_primary_freq,
|
||||
HW_MODE_20_MHZ,
|
||||
conc_ext_flags.value,
|
||||
@ -7789,7 +7794,7 @@ policy_mgr_is_ml_links_in_mcc_allowed(struct wlan_objmgr_psoc *psoc,
|
||||
if (*num_ml_sta < 2 || *num_ml_sta > MAX_NUMBER_OF_CONC_CONNECTIONS ||
|
||||
num_disabled_ml_sta) {
|
||||
policy_mgr_debug("num_ml_sta invalid %d or link already disabled%d",
|
||||
num_ml_sta, num_disabled_ml_sta);
|
||||
*num_ml_sta, num_disabled_ml_sta);
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2023-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@ -80,7 +80,7 @@ policy_mgr_check_scc:
|
||||
policy_mgr_check_scc_channel(psoc, new_sap_freq, sap_ch_freq, vdev_id,
|
||||
cc_switch_mode);
|
||||
policy_mgr_debug("vdev_id %d old_freq %d new_freq %d", vdev_id,
|
||||
sap_ch_freq, new_sap_freq);
|
||||
sap_ch_freq, *new_sap_freq);
|
||||
}
|
||||
|
||||
uint8_t wlan_policy_mgr_get_ll_lt_sap_vdev_id(struct wlan_objmgr_psoc *psoc)
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@ -157,7 +157,7 @@ ucfg_coex_send_logging_config(struct wlan_objmgr_psoc *psoc,
|
||||
param.config_arg5 = apps_args[5];
|
||||
param.config_arg6 = apps_args[6];
|
||||
|
||||
coex_debug("send logging_config arg: %d for vdev %d", apps_args,
|
||||
coex_debug("send logging_config arg: %u for vdev %d", *apps_args,
|
||||
param.vdev_id);
|
||||
|
||||
status = wlan_coex_config_send(vdev, ¶m);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -27,6 +27,7 @@
|
||||
#include <wlan_scan_utils_api.h>
|
||||
#include "wlan_dlm_tgt_api.h"
|
||||
#include <wlan_cm_bss_score_param.h>
|
||||
#include <wlan_dlm_public_struct.h>
|
||||
|
||||
#define SECONDS_TO_MS(params) ((params) * 1000)
|
||||
#define MINUTES_TO_MS(params) (SECONDS_TO_MS(params) * 60)
|
||||
@ -197,8 +198,15 @@ dlm_prune_old_entries_and_get_action(struct dlm_reject_ap *dlm_entry,
|
||||
dlm_entry->reject_ap_type);
|
||||
|
||||
if (DLM_IS_AP_DENYLISTED_BY_USERSPACE(dlm_entry) ||
|
||||
DLM_IS_AP_IN_RSSI_REJECT_LIST(dlm_entry))
|
||||
return CM_DLM_FORCE_REMOVE;
|
||||
DLM_IS_AP_IN_RSSI_REJECT_LIST(dlm_entry)) {
|
||||
if (dlm_entry->reject_ap_reason == REASON_UNKNOWN ||
|
||||
dlm_entry->reject_ap_reason == REASON_NUD_FAILURE ||
|
||||
dlm_entry->reject_ap_reason == REASON_STA_KICKOUT ||
|
||||
dlm_entry->reject_ap_reason == REASON_ROAM_HO_FAILURE)
|
||||
return CM_DLM_REMOVE;
|
||||
else
|
||||
return CM_DLM_FORCE_REMOVE;
|
||||
}
|
||||
|
||||
return CM_DLM_REMOVE;
|
||||
}
|
||||
@ -1388,6 +1396,11 @@ dlm_update_bssid_connect_params(struct wlan_objmgr_pdev *pdev,
|
||||
&next_node);
|
||||
dlm_entry = qdf_container_of(cur_node, struct dlm_reject_ap,
|
||||
node);
|
||||
if (!dlm_entry && next_node) {
|
||||
cur_node = next_node;
|
||||
next_node = NULL;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!qdf_mem_cmp(dlm_entry->bssid.bytes, bssid.bytes,
|
||||
QDF_MAC_ADDR_SIZE)) {
|
||||
@ -1402,7 +1415,7 @@ dlm_update_bssid_connect_params(struct wlan_objmgr_pdev *pdev,
|
||||
}
|
||||
|
||||
/* This means that the BSSID was not added in the reject list of DLM */
|
||||
if (!entry_found) {
|
||||
if (!entry_found || !dlm_entry) {
|
||||
qdf_mutex_release(&dlm_ctx->reject_ap_list_lock);
|
||||
return;
|
||||
}
|
||||
|
@ -2194,6 +2194,32 @@ end:
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_update_freqs() - Send roam frequencies to fw
|
||||
* @vdev: vdev object
|
||||
* @req: roam channels to update to firmware
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static QDF_STATUS
|
||||
target_if_cm_roam_update_freqs(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_scan_channel_list *req)
|
||||
{
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
wmi_unified_t wmi_handle;
|
||||
|
||||
wmi_handle = target_if_cm_roam_get_wmi_handle_from_vdev(vdev);
|
||||
if (!wmi_handle)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
|
||||
status = target_if_cm_roam_offload_chan_list(wmi_handle, req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
target_if_err("vdev:%d Send channel list command failed",
|
||||
req->vdev_id);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
/**
|
||||
* target_if_cm_roam_abort() - Send roam abort to wmi
|
||||
* @vdev: vdev object
|
||||
@ -2305,6 +2331,7 @@ target_if_cm_roam_register_rso_req_ops(struct wlan_cm_roam_tx_ops *tx_ops)
|
||||
tx_ops->send_roam_triggers = target_if_cm_roam_triggers;
|
||||
tx_ops->send_roam_disable_config =
|
||||
target_if_cm_roam_send_disable_config;
|
||||
tx_ops->send_roam_frequencies = target_if_cm_roam_update_freqs;
|
||||
target_if_cm_roam_register_mlo_req_ops(tx_ops);
|
||||
}
|
||||
|
||||
|
@ -561,6 +561,8 @@ static QDF_STATUS tdls_process_rx_mgmt(
|
||||
tdls_vdev =
|
||||
wlan_objmgr_vdev_get_comp_private_obj(vdev,
|
||||
WLAN_UMAC_COMP_TDLS);
|
||||
if (!tdls_vdev)
|
||||
return QDF_STATUS_E_EXISTS;
|
||||
rx_mgmt = tdls_vdev->rx_mgmt;
|
||||
tdls_vdev_select = true;
|
||||
tdls_debug("choice vdev %d as tdls vdev",
|
||||
|
@ -857,6 +857,8 @@ QDF_STATUS cm_roam_update_vendor_handoff_config(struct wlan_objmgr_psoc *psoc,
|
||||
case VENDOR_CONTROL_PARAM_ROAM_TRIGGER:
|
||||
cfg_params->neighbor_lookup_threshold =
|
||||
abs(param_value);
|
||||
cfg_params->next_rssi_threshold =
|
||||
cfg_params->neighbor_lookup_threshold;
|
||||
break;
|
||||
case VENDOR_CONTROL_PARAM_ROAM_DELTA:
|
||||
cfg_params->roam_rssi_diff = param_value;
|
||||
@ -2275,12 +2277,11 @@ static void cm_update_rso_freq_list_from_partner_link(
|
||||
}
|
||||
#endif
|
||||
|
||||
static void
|
||||
cm_fill_rso_channel_list(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct rso_config *rso_cfg,
|
||||
struct wlan_roam_scan_channel_list *chan_info,
|
||||
uint8_t reason)
|
||||
void cm_fill_rso_channel_list(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct rso_config *rso_cfg,
|
||||
struct wlan_roam_scan_channel_list *chan_info,
|
||||
uint8_t reason)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
uint8_t ch_cache_str[128] = {0};
|
||||
@ -5312,6 +5313,7 @@ QDF_STATUS cm_neighbor_roam_update_config(struct wlan_objmgr_pdev *pdev,
|
||||
case REASON_LOOKUP_THRESH_CHANGED:
|
||||
old_value = cfg_params->neighbor_lookup_threshold;
|
||||
cfg_params->neighbor_lookup_threshold = value;
|
||||
cfg_params->next_rssi_threshold = value;
|
||||
break;
|
||||
case REASON_OPPORTUNISTIC_THRESH_DIFF_CHANGED:
|
||||
old_value = cfg_params->opportunistic_threshold_diff;
|
||||
@ -5377,6 +5379,8 @@ cm_restore_default_roaming_params(struct wlan_mlme_psoc_ext_obj *mlme_obj,
|
||||
mlme_obj->cfg.lfr.neighbor_scan_timer_period;
|
||||
cfg_params->neighbor_lookup_threshold =
|
||||
mlme_obj->cfg.lfr.neighbor_lookup_rssi_threshold;
|
||||
cfg_params->next_rssi_threshold =
|
||||
mlme_obj->cfg.lfr.neighbor_lookup_rssi_threshold;
|
||||
cfg_params->roam_rssi_diff =
|
||||
mlme_obj->cfg.lfr.roam_rssi_diff;
|
||||
cfg_params->roam_rssi_diff_6ghz =
|
||||
|
@ -757,4 +757,20 @@ cm_roam_btm_block_event(uint8_t vdev_id, uint8_t token,
|
||||
* Return: True if connected AP is MBO capable without PMF
|
||||
*/
|
||||
bool cm_is_mbo_ap_without_pmf(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id);
|
||||
|
||||
/**
|
||||
* cm_fill_rso_channel_list() - Fill roam frequencies in chan_info
|
||||
* @psoc: PSOC pointer
|
||||
* @vdev: vdev pointer
|
||||
* @rso_cfg: roam config
|
||||
* @chan_info: roam scan channel list
|
||||
* @reason: Channel update reason
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void cm_fill_rso_channel_list(struct wlan_objmgr_psoc *psoc,
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct rso_config *rso_cfg,
|
||||
struct wlan_roam_scan_channel_list *chan_info,
|
||||
uint8_t reason);
|
||||
#endif /* _WLAN_CM_ROAM_OFFLOAD_H_ */
|
||||
|
@ -564,15 +564,14 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
|
||||
!is_multi_link_roam(sync_ind)) {
|
||||
mlme_err("vdev:%d Ignoring RSI as its already in progress on roamed vdev:%d",
|
||||
vdev_id, sync_ind->roamed_vdev_id);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
status = cm_fw_roam_sync_start_ind(vdev, sync_ind);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
mlme_err("LFR3: vdev:%d CSR Roam synch cb failed", vdev_id);
|
||||
wlan_cm_free_roam_synch_frame_ind(rso_cfg);
|
||||
goto err;
|
||||
return status;
|
||||
}
|
||||
|
||||
/* 24 byte MAC header and 12 byte to ssid IE */
|
||||
@ -585,8 +584,7 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
|
||||
} else {
|
||||
mlme_err("LFR3: MLO: vdev:%d Invalid link Beacon Length",
|
||||
vdev_id);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
} else if (sync_ind->beacon_probe_resp_length >
|
||||
(QDF_IEEE80211_3ADDR_HDR_LEN + MAC_B_PR_SSID_OFFSET)) {
|
||||
@ -613,18 +611,18 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
|
||||
} else {
|
||||
mlme_err("LFR3: vdev:%d Invalid Beacon Length:%d", vdev_id,
|
||||
sync_ind->beacon_probe_resp_length);
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto err;
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(cm_roam_pe_sync_callback(sync_ind, vdev_id,
|
||||
ie_len))) {
|
||||
mlme_err("LFR3: vdev:%d PE roam synch cb failed", vdev_id);
|
||||
status = QDF_STATUS_E_BUSY;
|
||||
goto err;
|
||||
return QDF_STATUS_E_BUSY;
|
||||
}
|
||||
|
||||
cm_roam_update_vdev(vdev, sync_ind);
|
||||
status = cm_roam_update_vdev(vdev, sync_ind);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
return status;
|
||||
|
||||
/*
|
||||
* update phy_mode in wma to avoid mismatch in phymode between host and
|
||||
@ -640,6 +638,5 @@ QDF_STATUS cm_roam_sync_event_handler_cb(struct wlan_objmgr_vdev *vdev,
|
||||
vdev_id,
|
||||
sync_ind);
|
||||
|
||||
err:
|
||||
return status;
|
||||
}
|
||||
|
@ -1343,6 +1343,22 @@ QDF_STATUS
|
||||
wlan_cm_roam_stats_info_get(struct wlan_objmgr_vdev *vdev,
|
||||
struct enhance_roam_info **roam_info,
|
||||
uint32_t *roam_num);
|
||||
|
||||
/**
|
||||
* wlan_cm_roam_info_get() - get vdev roam info
|
||||
*
|
||||
* @vdev: pointer to vdev
|
||||
* @roam_info: pointer to buffer to copy roam stats info
|
||||
* @idx: index of roam stats cache buffer
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
|
||||
QDF_STATUS
|
||||
wlan_cm_roam_info_get(struct wlan_objmgr_vdev *vdev,
|
||||
struct enhance_roam_info **roam_info,
|
||||
uint8_t idx);
|
||||
|
||||
#else
|
||||
static inline
|
||||
void mlme_cm_alloc_roam_stats_info(struct vdev_mlme_obj *vdev_mlme)
|
||||
@ -1973,10 +1989,10 @@ cm_roam_vendor_handoff_event_handler(struct wlan_objmgr_psoc *psoc,
|
||||
* respect to the self sta and the peer after roaming and completes
|
||||
* the roam synch propagation with respect to WMA layer.
|
||||
*
|
||||
* Return: None
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
void cm_roam_update_vdev(struct wlan_objmgr_vdev *vdev,
|
||||
struct roam_offload_synch_ind *sync_ind);
|
||||
QDF_STATUS cm_roam_update_vdev(struct wlan_objmgr_vdev *vdev,
|
||||
struct roam_offload_synch_ind *sync_ind);
|
||||
|
||||
/**
|
||||
* cm_roam_pe_sync_callback() - Callback registered at pe, gets invoked when
|
||||
|
@ -293,6 +293,7 @@ struct rso_chan_info {
|
||||
* @neighbor_scan_min_period:
|
||||
* @specific_chan_info:
|
||||
* @neighbor_lookup_threshold:
|
||||
* @next_rssi_threshold: Next roam can trigger rssi threshold
|
||||
* @rssi_thresh_offset_5g:
|
||||
* @min_chan_scan_time:
|
||||
* @max_chan_scan_time:
|
||||
@ -323,6 +324,7 @@ struct rso_cfg_params {
|
||||
uint32_t neighbor_scan_min_period;
|
||||
struct rso_chan_info specific_chan_info;
|
||||
uint8_t neighbor_lookup_threshold;
|
||||
uint8_t next_rssi_threshold;
|
||||
int8_t rssi_thresh_offset_5g;
|
||||
uint32_t min_chan_scan_time;
|
||||
uint32_t max_chan_scan_time;
|
||||
@ -756,6 +758,7 @@ struct rso_config_params {
|
||||
* @ROAM_SPECIFIC_CHAN: specific channel list
|
||||
* @ROAM_RSSI_DIFF: rssi diff
|
||||
* @NEIGHBOUR_LOOKUP_THRESHOLD: lookup threshold
|
||||
* @NEXT_RSSI_THRESHOLD: Next roam can trigger rssi threshold
|
||||
* @SCAN_N_PROBE: scan n probe
|
||||
* @SCAN_HOME_AWAY: scan and away
|
||||
* @NEIGHBOUR_SCAN_REFRESH_PERIOD: scan refresh
|
||||
@ -788,6 +791,7 @@ enum roam_cfg_param {
|
||||
ROAM_SPECIFIC_CHAN,
|
||||
ROAM_RSSI_DIFF,
|
||||
NEIGHBOUR_LOOKUP_THRESHOLD,
|
||||
NEXT_RSSI_THRESHOLD,
|
||||
SCAN_N_PROBE,
|
||||
SCAN_HOME_AWAY,
|
||||
NEIGHBOUR_SCAN_REFRESH_PERIOD,
|
||||
@ -1069,6 +1073,7 @@ enum roam_scan_dwell_type {
|
||||
/**
|
||||
* enum eroam_frame_subtype - Enhanced roam frame subtypes.
|
||||
*
|
||||
* @WLAN_ROAM_STATS_FRAME_SUBTYPE_INVALID: Invalid subtype
|
||||
* @WLAN_ROAM_STATS_FRAME_SUBTYPE_AUTH_RESP: Authentication resp frame
|
||||
* @WLAN_ROAM_STATS_FRAME_SUBTYPE_REASSOC_RESP: Reassociation resp frame
|
||||
* @WLAN_ROAM_STATS_FRAME_SUBTYPE_EAPOL_M1: EAPOL-Key M1 frame
|
||||
@ -1081,6 +1086,7 @@ enum roam_scan_dwell_type {
|
||||
* @WLAN_ROAM_STATS_FRAME_SUBTYPE_REASSOC_REQ: Reassociation req frame
|
||||
*/
|
||||
enum eroam_frame_subtype {
|
||||
WLAN_ROAM_STATS_FRAME_SUBTYPE_INVALID = 0,
|
||||
WLAN_ROAM_STATS_FRAME_SUBTYPE_AUTH_RESP = 1,
|
||||
WLAN_ROAM_STATS_FRAME_SUBTYPE_REASSOC_RESP = 2,
|
||||
WLAN_ROAM_STATS_FRAME_SUBTYPE_EAPOL_M1 = 3,
|
||||
@ -2553,6 +2559,8 @@ struct roam_frame_stats {
|
||||
* @vdev_id: vdev id
|
||||
* @num_tlv: Number of roam scans triggered
|
||||
* @num_roam_msg_info: Number of roam_msg_info present in event
|
||||
* @enhance_roam_rt_event: flag of whether we need send event for
|
||||
* real time enhance roam stats info to user space
|
||||
* @trigger: Roam trigger related details
|
||||
* @scan: Roam scan event details
|
||||
* @result: Roam result related info
|
||||
@ -2567,6 +2575,7 @@ struct roam_stats_event {
|
||||
uint8_t vdev_id;
|
||||
uint8_t num_tlv;
|
||||
uint8_t num_roam_msg_info;
|
||||
bool enhance_roam_rt_event;
|
||||
struct wmi_roam_trigger_info trigger[MAX_ROAM_SCAN_STATS_TLV];
|
||||
struct wmi_roam_scan_data scan[MAX_ROAM_SCAN_STATS_TLV];
|
||||
struct wmi_roam_result result[MAX_ROAM_SCAN_STATS_TLV];
|
||||
@ -2635,6 +2644,7 @@ struct roam_pmkid_req_event {
|
||||
* @send_roam_mlo_config: send MLO config to FW
|
||||
* @send_roam_scan_offload_rssi_params: Set the RSSI parameters for roam
|
||||
* offload scan
|
||||
* @send_roam_frequencies: send roam frequencies to FW
|
||||
*/
|
||||
struct wlan_cm_roam_tx_ops {
|
||||
QDF_STATUS (*send_vdev_set_pcl_cmd)(struct wlan_objmgr_vdev *vdev,
|
||||
@ -2693,6 +2703,9 @@ struct wlan_cm_roam_tx_ops {
|
||||
QDF_STATUS (*send_roam_mlo_config)(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_mlo_config *req);
|
||||
#endif
|
||||
QDF_STATUS (*send_roam_frequencies)(
|
||||
struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_roam_scan_channel_list *rso_ch_info);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -777,6 +777,24 @@ ucfg_cm_roam_stats_info_put(struct enhance_roam_info *roam_info)
|
||||
{
|
||||
qdf_mem_free(roam_info);
|
||||
}
|
||||
|
||||
/**
|
||||
* ucfg_cm_roam_info_get() - get vdev roam info
|
||||
*
|
||||
* @vdev: pointer to vdev
|
||||
* @roam_info: pointer to buffer to copy roam stats info
|
||||
* @idx: index of roam stats cache buffer
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static inline QDF_STATUS
|
||||
ucfg_cm_roam_info_get(struct wlan_objmgr_vdev *vdev,
|
||||
struct enhance_roam_info **roam_info,
|
||||
uint8_t idx)
|
||||
{
|
||||
return wlan_cm_roam_info_get(vdev, roam_info, idx);
|
||||
}
|
||||
|
||||
#else
|
||||
static inline QDF_STATUS
|
||||
ucfg_cm_roam_stats_info_get(struct wlan_objmgr_vdev *vdev,
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@ -255,6 +255,18 @@ QDF_STATUS wlan_cm_tgt_send_roam_stop_req(struct wlan_objmgr_psoc *psoc,
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_update_config *req);
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_freqs() - Send roam frequencies to firmware
|
||||
* @psoc: psoc pointer
|
||||
* @vdev_id: vdev id
|
||||
* @req: roam frequency list to be sent to fw
|
||||
*
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
QDF_STATUS
|
||||
wlan_cm_tgt_send_roam_freqs(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_scan_channel_list *req);
|
||||
|
||||
/**
|
||||
* wlan_cm_tgt_send_roam_abort_req() - Send roam abort command to firmware
|
||||
|
@ -829,6 +829,9 @@ QDF_STATUS wlan_cm_roam_cfg_get_value(struct wlan_objmgr_psoc *psoc,
|
||||
case NEIGHBOUR_LOOKUP_THRESHOLD:
|
||||
dst_config->uint_value = src_cfg->neighbor_lookup_threshold;
|
||||
break;
|
||||
case NEXT_RSSI_THRESHOLD:
|
||||
dst_config->uint_value = src_cfg->next_rssi_threshold;
|
||||
break;
|
||||
case SCAN_N_PROBE:
|
||||
dst_config->uint_value = src_cfg->roam_scan_n_probes;
|
||||
break;
|
||||
@ -1285,6 +1288,7 @@ wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
struct rso_config *rso_cfg;
|
||||
struct rso_cfg_params *dst_cfg;
|
||||
struct wlan_mlme_psoc_ext_obj *mlme_obj;
|
||||
struct wlan_roam_scan_channel_list chan_info = {0};
|
||||
|
||||
mlme_obj = mlme_get_psoc_ext_obj(psoc);
|
||||
if (!mlme_obj)
|
||||
@ -1378,9 +1382,30 @@ wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
src_config->chan_info.num_chan, true);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
break;
|
||||
if (mlme_obj->cfg.lfr.roam_scan_offload_enabled)
|
||||
cm_roam_update_cfg(psoc, vdev_id,
|
||||
REASON_CHANNEL_LIST_CHANGED);
|
||||
if (!mlme_obj->cfg.lfr.roam_scan_offload_enabled)
|
||||
break;
|
||||
|
||||
chan_info.vdev_id = vdev_id;
|
||||
chan_info.chan_count = dst_cfg->pref_chan_info.num_chan;
|
||||
qdf_mem_copy(chan_info.chan_freq_list,
|
||||
dst_cfg->pref_chan_info.freq_list,
|
||||
chan_info.chan_count * sizeof(uint32_t));
|
||||
chan_info.chan_cache_type = CHANNEL_LIST_DYNAMIC;
|
||||
|
||||
status = cm_roam_acquire_lock(vdev);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
break;
|
||||
if (!MLME_IS_ROAM_STATE_RSO_ENABLED(psoc, vdev_id)) {
|
||||
mlme_debug("PREF_CHAN received while ROAM RSO not started");
|
||||
cm_roam_release_lock(vdev);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
break;
|
||||
}
|
||||
cm_fill_rso_channel_list(psoc, vdev, rso_cfg,
|
||||
&chan_info,
|
||||
REASON_CHANNEL_LIST_CHANGED);
|
||||
wlan_cm_tgt_send_roam_freqs(psoc, vdev_id, &chan_info);
|
||||
cm_roam_release_lock(vdev);
|
||||
break;
|
||||
case ROAM_SPECIFIC_CHAN:
|
||||
status = cm_update_roam_scan_channel_list(psoc, vdev, rso_cfg,
|
||||
@ -1390,9 +1415,30 @@ wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
false);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
break;
|
||||
if (mlme_obj->cfg.lfr.roam_scan_offload_enabled)
|
||||
cm_roam_update_cfg(psoc, vdev_id,
|
||||
REASON_CHANNEL_LIST_CHANGED);
|
||||
if (!mlme_obj->cfg.lfr.roam_scan_offload_enabled)
|
||||
break;
|
||||
|
||||
chan_info.vdev_id = vdev_id;
|
||||
chan_info.chan_count = dst_cfg->specific_chan_info.num_chan;
|
||||
qdf_mem_copy(chan_info.chan_freq_list,
|
||||
dst_cfg->specific_chan_info.freq_list,
|
||||
chan_info.chan_count * sizeof(uint32_t));
|
||||
chan_info.chan_cache_type = CHANNEL_LIST_DYNAMIC;
|
||||
|
||||
status = cm_roam_acquire_lock(vdev);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
break;
|
||||
if (!MLME_IS_ROAM_STATE_RSO_ENABLED(psoc, vdev_id)) {
|
||||
mlme_debug("SPECIFIC_CHAN received while ROAM RSO not started");
|
||||
cm_roam_release_lock(vdev);
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
break;
|
||||
}
|
||||
cm_fill_rso_channel_list(psoc, vdev, rso_cfg,
|
||||
&chan_info,
|
||||
REASON_CHANNEL_LIST_CHANGED);
|
||||
wlan_cm_tgt_send_roam_freqs(psoc, vdev_id, &chan_info);
|
||||
cm_roam_release_lock(vdev);
|
||||
break;
|
||||
case ROAM_RSSI_DIFF:
|
||||
dst_cfg->roam_rssi_diff = src_config->uint_value;
|
||||
@ -1405,6 +1451,9 @@ wlan_cm_roam_cfg_set_value(struct wlan_objmgr_psoc *psoc, uint8_t vdev_id,
|
||||
break;
|
||||
case NEIGHBOUR_LOOKUP_THRESHOLD:
|
||||
dst_cfg->neighbor_lookup_threshold = src_config->uint_value;
|
||||
fallthrough;
|
||||
case NEXT_RSSI_THRESHOLD:
|
||||
dst_cfg->next_rssi_threshold = src_config->uint_value;
|
||||
break;
|
||||
case SCAN_N_PROBE:
|
||||
dst_cfg->roam_scan_n_probes = src_config->uint_value;
|
||||
@ -1566,6 +1615,8 @@ QDF_STATUS wlan_cm_rso_config_init(struct wlan_objmgr_vdev *vdev,
|
||||
mlme_obj->cfg.lfr.neighbor_scan_min_chan_time;
|
||||
cfg_params->neighbor_lookup_threshold =
|
||||
mlme_obj->cfg.lfr.neighbor_lookup_rssi_threshold;
|
||||
cfg_params->next_rssi_threshold =
|
||||
mlme_obj->cfg.lfr.neighbor_lookup_rssi_threshold;
|
||||
cfg_params->rssi_thresh_offset_5g =
|
||||
mlme_obj->cfg.lfr.rssi_threshold_offset_5g;
|
||||
cfg_params->opportunistic_threshold_diff =
|
||||
@ -3131,7 +3182,36 @@ cm_roam_stats_print_roam_initial_info(struct roam_initial_data *data,
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_stats_print_roam_msg_info - Roaming related message details
|
||||
* cm_roam_update_next_rssi_threshold() - Update neighbor_lookup_threshold
|
||||
* @psoc: Pointer to psoc object
|
||||
* @next_rssi_threshold: value of next rssi threshold coming from FW
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
* Host updates the configured RSSI threshold from INI
|
||||
* "gNeighborLookupThreshold RoamRSSI_Trigger" over the
|
||||
* GETROAMTRIGGER command. But this RSSI threshold is reduced by
|
||||
* firmware in steps for reasons like candidate not found during
|
||||
* roam scan. So, the expectation is to print the next RSSI
|
||||
* threshold at which the roam scan will be triggered. This value
|
||||
* is received from firmware via the WMI_ROAM_SCAN_STATS_EVENTID.
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void
|
||||
cm_roam_update_next_rssi_threshold(struct wlan_objmgr_psoc *psoc,
|
||||
uint32_t next_rssi_threshold,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
struct cm_roam_values_copy src_config = {};
|
||||
|
||||
src_config.uint_value = next_rssi_threshold;
|
||||
wlan_cm_roam_cfg_set_value(psoc, vdev_id, NEXT_RSSI_THRESHOLD,
|
||||
&src_config);
|
||||
}
|
||||
|
||||
/**
|
||||
* cm_roam_stats_process_roam_msg_info - Roaming related message details
|
||||
* @psoc: Pointer to psoc object
|
||||
* @data: Pointer to the btm rsp data
|
||||
* @vdev_id: vdev id
|
||||
*
|
||||
@ -3139,8 +3219,9 @@ cm_roam_stats_print_roam_initial_info(struct roam_initial_data *data,
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
static void cm_roam_stats_print_roam_msg_info(struct roam_msg_info *data,
|
||||
uint8_t vdev_id)
|
||||
static void cm_roam_stats_process_roam_msg_info(struct wlan_objmgr_psoc *psoc,
|
||||
struct roam_msg_info *data,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
char time[TIME_STRING_LEN];
|
||||
static const char msg_id1_str[] = "Roam RSSI TH Reset";
|
||||
@ -3150,6 +3231,8 @@ static void cm_roam_stats_print_roam_msg_info(struct roam_msg_info *data,
|
||||
mlme_nofl_info("%s [ROAM MSG INFO]: VDEV[%d] %s, Current rssi: %d dbm, next_rssi_threshold: %d dbm",
|
||||
time, vdev_id, msg_id1_str, data->msg_param1,
|
||||
data->msg_param2);
|
||||
cm_roam_update_next_rssi_threshold(psoc, data->msg_param2,
|
||||
vdev_id);
|
||||
}
|
||||
}
|
||||
|
||||
@ -3688,9 +3771,9 @@ log_btm_frames_only:
|
||||
if (stats_info->roam_msg_info && stats_info->roam_msg_info[i].present &&
|
||||
i < stats_info->num_roam_msg_info) {
|
||||
*rem_tlv_len = *rem_tlv_len + 1;
|
||||
cm_roam_stats_print_roam_msg_info(
|
||||
&stats_info->roam_msg_info[i],
|
||||
stats_info->vdev_id);
|
||||
cm_roam_stats_process_roam_msg_info(psoc,
|
||||
&stats_info->roam_msg_info[i],
|
||||
stats_info->vdev_id);
|
||||
}
|
||||
|
||||
cm_report_roam_rt_stats(psoc, stats_info->vdev_id,
|
||||
@ -4185,7 +4268,7 @@ wlan_cm_update_roam_frame_info(struct mlme_legacy_priv *mlme_priv,
|
||||
for (i = 0; i < frame_data->num_frame; i++) {
|
||||
if (!wlan_cm_get_valid_frame_type(&frame_data->frame_info[i]))
|
||||
continue;
|
||||
j++;
|
||||
|
||||
if (j >= WLAN_ROAM_MAX_FRAME_INFO)
|
||||
break;
|
||||
/*
|
||||
@ -4210,6 +4293,7 @@ wlan_cm_update_roam_frame_info(struct mlme_legacy_priv *mlme_priv,
|
||||
info->timestamp[j].timestamp,
|
||||
info->timestamp[j].status,
|
||||
QDF_MAC_ADDR_REF(info->timestamp[j].bssid.bytes));
|
||||
j++;
|
||||
}
|
||||
}
|
||||
|
||||
@ -4337,6 +4421,10 @@ wlan_cm_update_roam_stats_info(struct wlan_objmgr_psoc *psoc,
|
||||
wlan_cm_update_roam_bssid(mlme_priv,
|
||||
&stats_info->scan[index]);
|
||||
|
||||
stats_info->enhance_roam_rt_event = true;
|
||||
mlme_cm_osif_roam_rt_stats(stats_info,
|
||||
mlme_priv->roam_write_index);
|
||||
|
||||
mlme_priv->roam_write_index += 1;
|
||||
if (mlme_priv->roam_write_index == mlme_priv->roam_cache_num)
|
||||
mlme_priv->roam_write_index = 0;
|
||||
@ -4423,6 +4511,28 @@ wlan_cm_roam_stats_info_get(struct wlan_objmgr_vdev *vdev,
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_cm_roam_info_get(struct wlan_objmgr_vdev *vdev,
|
||||
struct enhance_roam_info **roam_info,
|
||||
uint8_t idx)
|
||||
{
|
||||
struct mlme_legacy_priv *mlme_priv;
|
||||
|
||||
mlme_priv = wlan_vdev_mlme_get_ext_hdl(vdev);
|
||||
if (!mlme_priv) {
|
||||
mlme_err("vdev legacy private object is NULL");
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
if (mlme_priv->roam_cache_num == 0) {
|
||||
mlme_debug("Enhanced roam stats not supported");
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
*roam_info = &mlme_priv->roam_info[idx];
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
#else
|
||||
static void
|
||||
wlan_cm_update_roam_stats_info(struct wlan_objmgr_psoc *psoc,
|
||||
@ -4573,6 +4683,8 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
|
||||
bool is_wtc = false;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
uint32_t trigger;
|
||||
struct wmi_roam_scan_data *scan = NULL;
|
||||
|
||||
if (!stats_info)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
@ -4613,8 +4725,18 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
|
||||
stats_info->vdev_id,
|
||||
stats_info->trigger[i].trigger_reason,
|
||||
stats_info->trigger[i].timestamp);
|
||||
|
||||
cm_cp_stats_cstats_roam_scan_done
|
||||
(vdev, &stats_info->scan[i], is_full_scan);
|
||||
|
||||
trigger = stats_info->trigger[i].trigger_reason;
|
||||
scan = &stats_info->scan[i];
|
||||
if (trigger == ROAM_TRIGGER_REASON_LOW_RSSI ||
|
||||
trigger == ROAM_TRIGGER_REASON_PERIODIC) {
|
||||
cm_roam_update_next_rssi_threshold(
|
||||
psoc, scan->next_rssi_threshold,
|
||||
stats_info->vdev_id);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -4662,9 +4784,9 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
|
||||
i < stats_info->num_roam_msg_info &&
|
||||
stats_info->roam_msg_info[i].present) {
|
||||
rem_tlv++;
|
||||
cm_roam_stats_print_roam_msg_info(
|
||||
&stats_info->roam_msg_info[i],
|
||||
stats_info->vdev_id);
|
||||
cm_roam_stats_process_roam_msg_info(psoc,
|
||||
&stats_info->roam_msg_info[i],
|
||||
stats_info->vdev_id);
|
||||
}
|
||||
|
||||
cm_report_roam_rt_stats(psoc, stats_info->vdev_id,
|
||||
@ -4730,7 +4852,7 @@ cm_roam_stats_event_handler(struct wlan_objmgr_psoc *psoc,
|
||||
stats_info->num_roam_msg_info - rem_tlv) {
|
||||
for (i = 0; i < (stats_info->num_roam_msg_info-rem_tlv); i++) {
|
||||
if (stats_info->roam_msg_info[rem_tlv + i].present)
|
||||
cm_roam_stats_print_roam_msg_info(
|
||||
cm_roam_stats_process_roam_msg_info(psoc,
|
||||
&stats_info->roam_msg_info[rem_tlv + i],
|
||||
stats_info->vdev_id);
|
||||
}
|
||||
|
@ -571,8 +571,7 @@ ucfg_cm_get_neighbor_lookup_rssi_threshold(struct wlan_objmgr_psoc *psoc,
|
||||
{
|
||||
struct cm_roam_values_copy temp;
|
||||
|
||||
wlan_cm_roam_cfg_get_value(psoc, vdev_id,
|
||||
NEIGHBOUR_LOOKUP_THRESHOLD, &temp);
|
||||
wlan_cm_roam_cfg_get_value(psoc, vdev_id, NEXT_RSSI_THRESHOLD, &temp);
|
||||
*lookup_threshold = temp.uint_value;
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2020-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@ -553,6 +553,37 @@ QDF_STATUS wlan_cm_tgt_send_roam_update_req(struct wlan_objmgr_psoc *psoc,
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
wlan_cm_tgt_send_roam_freqs(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id,
|
||||
struct wlan_roam_scan_channel_list *req)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
struct wlan_cm_roam_tx_ops *roam_tx_ops;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id,
|
||||
WLAN_MLME_NB_ID);
|
||||
if (!vdev)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
roam_tx_ops = wlan_cm_roam_get_tx_ops_from_vdev(vdev);
|
||||
if (!roam_tx_ops || !roam_tx_ops->send_roam_frequencies) {
|
||||
mlme_err("CM_RSO: vdev %d send_roam_frequencies is NULL",
|
||||
vdev_id);
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
status = roam_tx_ops->send_roam_frequencies(vdev, req);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
mlme_err("CM_RSO: vdev %d fail to send roam freqs", vdev_id);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_NB_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
QDF_STATUS wlan_cm_tgt_send_roam_abort_req(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t vdev_id)
|
||||
{
|
||||
|
@ -2353,6 +2353,7 @@ wmi_fill_roam_sync_buffer(wmi_unified_t wmi_handle,
|
||||
QDF_STATUS status = QDF_STATUS_E_FAILURE;
|
||||
uint8_t kck_len;
|
||||
uint8_t kek_len;
|
||||
struct roam_scan_candidate_frame roam_candidate = {0};
|
||||
|
||||
synch_event = param_buf->fixed_param;
|
||||
roam_sync_ind->roamed_vdev_id = synch_event->vdev_id;
|
||||
@ -2403,6 +2404,16 @@ wmi_fill_roam_sync_buffer(wmi_unified_t wmi_handle,
|
||||
wmi_fill_data_synch_frame_event(rso_cfg, roam_sync_ind);
|
||||
} else {
|
||||
wmi_fill_data_synch_event(roam_sync_ind, param_buf);
|
||||
|
||||
roam_candidate.vdev_id = roam_sync_ind->roamed_vdev_id;
|
||||
roam_candidate.frame_length =
|
||||
roam_sync_ind->beacon_probe_resp_length;
|
||||
roam_candidate.frame = (uint8_t *)roam_sync_ind +
|
||||
roam_sync_ind->beacon_probe_resp_offset;
|
||||
roam_candidate.rssi = roam_sync_ind->rssi;
|
||||
roam_candidate.roam_offload_candidate_frm = false;
|
||||
wlan_cm_add_all_link_probe_rsp_to_scan_db(wlan_vdev_get_psoc(vdev),
|
||||
&roam_candidate);
|
||||
}
|
||||
chan = param_buf->chan;
|
||||
if (chan) {
|
||||
@ -2648,34 +2659,8 @@ extract_roam_sync_event_tlv(wmi_unified_t wmi_handle, void *evt_buf,
|
||||
reassoc_req_len = synch_event->reassoc_req_len;
|
||||
reassoc_rsp_len = synch_event->reassoc_rsp_len;
|
||||
|
||||
if (synch_event->bcn_probe_rsp_len > WMI_SVC_MSG_MAX_SIZE) {
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto abort_roam;
|
||||
}
|
||||
if (synch_event->reassoc_rsp_len >
|
||||
(WMI_SVC_MSG_MAX_SIZE - synch_event->bcn_probe_rsp_len)) {
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto abort_roam;
|
||||
}
|
||||
if (synch_event->reassoc_req_len >
|
||||
WMI_SVC_MSG_MAX_SIZE - (synch_event->bcn_probe_rsp_len +
|
||||
synch_event->reassoc_rsp_len)) {
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto abort_roam;
|
||||
}
|
||||
roam_synch_data_len = bcn_probe_rsp_len +
|
||||
reassoc_rsp_len + reassoc_req_len;
|
||||
|
||||
/*
|
||||
* Below is the check for the entire size of the message
|
||||
* received from the firmware.
|
||||
*/
|
||||
if (roam_synch_data_len > WMI_SVC_MSG_MAX_SIZE -
|
||||
(sizeof(*synch_event) + sizeof(wmi_channel) +
|
||||
sizeof(wmi_key_material) + sizeof(uint32_t))) {
|
||||
status = QDF_STATUS_E_FAILURE;
|
||||
goto abort_roam;
|
||||
}
|
||||
roam_synch_data_len += sizeof(struct roam_offload_synch_ind);
|
||||
}
|
||||
|
||||
|
28
configs/parrot_consolidate_qca6750_defconfig
Normal file
28
configs/parrot_consolidate_qca6750_defconfig
Normal file
@ -0,0 +1,28 @@
|
||||
CONFIG_ALLOW_PKT_DROPPING=y
|
||||
CONFIG_ATH_DIAG_EXT_DIRECT=y
|
||||
CONFIG_DESC_TIMESTAMP_DEBUG_INFO=y
|
||||
CONFIG_DP_RX_REFILL_CPU_PERF_AFFINE_MASK=y
|
||||
CONFIG_DP_TX_HW_DESC_HISTORY=y
|
||||
CONFIG_DSC_DEBUG=y
|
||||
CONFIG_DSC_TEST=y
|
||||
CONFIG_ENABLE_QDF_PTR_HASH_DEBUG=y
|
||||
CONFIG_FEATURE_HIF_LATENCY_PROFILE_ENABLE=y
|
||||
CONFIG_FEATURE_UNIT_TEST_SUSPEND=y
|
||||
CONFIG_HAL_DEBUG=y
|
||||
CONFIG_HIF_CE_DEBUG_DATA_BUF=y
|
||||
CONFIG_HIF_CPU_PERF_AFFINE_MASK=y
|
||||
CONFIG_LEAK_DETECTION=y
|
||||
CONFIG_MAX_LOGS_PER_SEC=500
|
||||
CONFIG_ENABLE_MAX_LOGS_PER_SEC=y
|
||||
CONFIG_QDF_NBUF_HISTORY_SIZE=16384
|
||||
CONFIG_SCHED_HISTORY_SIZE=256
|
||||
CONFIG_REGISTER_OP_DEBUG=y
|
||||
CONFIG_REO_QDESC_HISTORY=y
|
||||
CONFIG_RX_DESC_DEBUG_CHECK=y
|
||||
CONFIG_TALLOC_DEBUG=y
|
||||
CONFIG_UNIT_TEST=y
|
||||
CONFIG_WLAN_FEATURE_DP_RX_RING_HISTORY=y
|
||||
CONFIG_WLAN_FEATURE_DP_TX_DESC_HISTORY=y
|
||||
CONFIG_WLAN_RECORD_RX_PADDR=y
|
||||
CONFIG_QDF_TEST=y
|
||||
CONFIG_FEATURE_WLM_STATS=y
|
331
configs/parrot_gki_qca6750_defconfig
Normal file
331
configs/parrot_gki_qca6750_defconfig
Normal file
@ -0,0 +1,331 @@
|
||||
CONFIG_QCA_CLD_WLAN=y
|
||||
CONFIG_160MHZ_SUPPORT=y
|
||||
CONFIG_6G_SCAN_CHAN_SORT_ALGO=y
|
||||
CONFIG_ADAPTIVE_11R=y
|
||||
CONFIG_ANI_LEVEL_REQUEST=y
|
||||
CONFIG_AR900B=y
|
||||
CONFIG_ATH_11AC_TXCOMPACT=y
|
||||
CONFIG_ATH_BUS_PM=y
|
||||
CONFIG_ATH_PERF_PWR_OFFLOAD=y
|
||||
CONFIG_BAND_6GHZ=y
|
||||
CONFIG_BCN_RATECODE_ENABLE=y
|
||||
CONFIG_BUS_AUTO_SUSPEND=y
|
||||
CONFIG_CHECKSUM_OFFLOAD=y
|
||||
CONFIG_CNSS2_MODULE=y
|
||||
CONFIG_CNSS_GENL_MODULE=y
|
||||
CONFIG_CNSS_UTILS_MODULE=y
|
||||
CONFIG_CONNECTIVITY_PKTLOG=y
|
||||
CONFIG_CONVERGED_P2P_ENABLE=y
|
||||
CONFIG_CP_STATS=y
|
||||
CONFIG_DDP_MON_RSSI_IN_DBM=y
|
||||
CONFIG_DEBUG_RX_RING_BUFFER=y
|
||||
CONFIG_DELIVERY_TO_STACK_STATUS_CHECK=y
|
||||
CONFIG_DESC_DUP_DETECT_DEBUG=y
|
||||
CONFIG_DIRECT_BUF_RX_ENABLE=y
|
||||
CONFIG_DISABLE_CHANNEL_LIST=y
|
||||
CONFIG_WLAN_BCN_RECV_FEATURE=y
|
||||
CONFIG_DISABLE_EAPOL_INTRABSS_FWD=y
|
||||
CONFIG_DP_HW_TX_DELAY_STATS_ENABLE=y
|
||||
CONFIG_DP_INTR_POLL_BASED=y
|
||||
CONFIG_DP_LEGACY_MODE_CSM_DEFAULT_DISABLE=1
|
||||
CONFIG_DP_LFR=y
|
||||
CONFIG_DP_MEM_PRE_ALLOC=y
|
||||
CONFIG_DP_PKT_ADD_TIMESTAMP=y
|
||||
CONFIG_DP_RX_BUFFER_POOL_ALLOC_THRES=5
|
||||
CONFIG_DP_RX_BUFFER_POOL_SIZE=128
|
||||
CONFIG_DP_RX_DROP_RAW_FRM=y
|
||||
CONFIG_DP_RX_PKT_NO_PEER_DELIVER=y
|
||||
CONFIG_DP_RX_REFILL_BUFF_POOL_SIZE=2048
|
||||
CONFIG_DP_RX_REFILL_THRD_THRESHOLD=512
|
||||
CONFIG_DP_RX_SPECIAL_FRAME_NEED=y
|
||||
CONFIG_DP_SWLM=y
|
||||
CONFIG_DP_TRACE=y
|
||||
CONFIG_DP_TRAFFIC_END_INDICATION=y
|
||||
CONFIG_DP_TXRX_SOC_ATTACH=y
|
||||
CONFIG_DP_TX_TRACKING=y
|
||||
CONFIG_DP_WAR_VALIDATE_RX_ERR_MSDU_COOKIE=y
|
||||
CONFIG_DUP_RX_DESC_WAR=y
|
||||
CONFIG_DYNAMIC_RX_AGGREGATION=y
|
||||
CONFIG_ENABLE_CE4_COMP_DISABLE_HTT_HTC_MISC_LIST=y
|
||||
CONFIG_ENABLE_HAL_REG_WR_HISTORY=y
|
||||
CONFIG_ENABLE_HAL_SOC_STATS=y
|
||||
CONFIG_ENABLE_MTRACE_LOG=y
|
||||
CONFIG_FEATURE_ACTIVE_TOS=y
|
||||
CONFIG_FEATURE_ALIGN_STATS_FROM_DP=y
|
||||
CONFIG_FEATURE_AST=y
|
||||
CONFIG_FEATURE_BECN_STATS=y
|
||||
CONFIG_FEATURE_BSS_TRANSITION=y
|
||||
CONFIG_FEATURE_CLUB_LL_STATS_AND_GET_STATION=y
|
||||
CONFIG_FEATURE_CONCURRENCY_MATRIX=y
|
||||
CONFIG_FEATURE_DELAYED_PEER_OBJ_DESTROY=y
|
||||
CONFIG_FEATURE_DENYLIST_MGR=y
|
||||
CONFIG_FEATURE_EPPING=y
|
||||
CONFIG_FEATURE_FORCE_WAKE=y
|
||||
CONFIG_FEATURE_FW_LOG_PARSING=y
|
||||
CONFIG_FEATURE_GPIO_CFG=y
|
||||
CONFIG_FEATURE_HAL_DELAYED_REG_WRITE=y
|
||||
CONFIG_FEATURE_HTC_CREDIT_HISTORY=y
|
||||
CONFIG_FEATURE_INTEROP_ISSUES_AP=y
|
||||
CONFIG_FEATURE_MEMDUMP_ENABLE=y
|
||||
CONFIG_FEATURE_MONITOR_MODE_SUPPORT=y
|
||||
CONFIG_FEATURE_MSCS=y
|
||||
CONFIG_FEATURE_NO_DBS_INTRABAND_MCC_SUPPORT=y
|
||||
CONFIG_FEATURE_OEM_DATA=y
|
||||
CONFIG_FEATURE_OTA_TEST=y
|
||||
CONFIG_FEATURE_P2P_LISTEN_OFFLOAD=y
|
||||
CONFIG_FEATURE_PKTLOG=y
|
||||
CONFIG_FEATURE_RADAR_HISTORY=y
|
||||
CONFIG_FEATURE_ROAM_DEBUG=y
|
||||
CONFIG_FEATURE_RSSI_MONITOR=y
|
||||
CONFIG_FEATURE_RX_LINKSPEED_ROAM_TRIGGER=y
|
||||
CONFIG_FEATURE_SAP_COND_CHAN_SWITCH=y
|
||||
CONFIG_FEATURE_SAR_LIMITS=y
|
||||
CONFIG_FEATURE_SET=y
|
||||
CONFIG_FEATURE_STATION_INFO=y
|
||||
CONFIG_FEATURE_STATS_EXT=y
|
||||
CONFIG_FEATURE_STATS_EXT_V2=y
|
||||
CONFIG_FEATURE_TSO=y
|
||||
CONFIG_FEATURE_TSO_STATS=y
|
||||
CONFIG_FEATURE_TX_POWER=y
|
||||
CONFIG_FEATURE_VDEV_OPS_WAKELOCK=y
|
||||
CONFIG_FEATURE_WLAN_LPHB=y
|
||||
CONFIG_FEATURE_WLAN_PRE_CAC=y
|
||||
CONFIG_FEATURE_WLAN_RA_FILTERING=y
|
||||
CONFIG_FEATURE_WLAN_SCAN_PNO=y
|
||||
CONFIG_FEATURE_WLAN_WAPI=y
|
||||
CONFIG_FIX_TXDMA_LIMITATION=y
|
||||
CONFIG_FOURTH_CONNECTION=y
|
||||
CONFIG_FW_THERMAL_THROTTLE=y
|
||||
CONFIG_GTK_OFFLOAD=y
|
||||
CONFIG_HAL_DISABLE_NON_BA_2K_JUMP_ERROR=y
|
||||
CONFIG_HANDLE_BC_EAP_TX_FRM=y
|
||||
CONFIG_HANDLE_RX_REROUTE_ERR=y
|
||||
CONFIG_HASTINGS_BT_WAR=y
|
||||
CONFIG_HDD_INIT_WITH_RTNL_LOCK=y
|
||||
CONFIG_HIF_DEBUG=y
|
||||
CONFIG_HIF_IPCI=y
|
||||
CONFIG_HOST_OPCLASS=y
|
||||
CONFIG_HOST_WAKEUP_OVER_QMI=y
|
||||
CONFIG_HTT_PADDR64=y
|
||||
CONFIG_IPA_SET_RESET_TX_DB_PA=y
|
||||
CONFIG_LFR_SUBNET_DETECTION=y
|
||||
CONFIG_LINUX_QCMBR=y
|
||||
CONFIG_LITHIUM=y
|
||||
CONFIG_LITTLE_ENDIAN=y
|
||||
CONFIG_LL_DP_SUPPORT=y
|
||||
CONFIG_LTE_COEX=y
|
||||
CONFIG_MARK_ICMP_REQ_TO_FW=y
|
||||
CONFIG_MAX_ALLOC_PAGE_SIZE=y
|
||||
CONFIG_MCC_TO_SCC_SWITCH=y
|
||||
CONFIG_MON_ENABLE_DROP_FOR_MAC=y
|
||||
CONFIG_MORE_TX_DESC=y
|
||||
CONFIG_MULTI_CLIENT_LL_SUPPORT=y
|
||||
CONFIG_PANIC_ON_BUG=y
|
||||
CONFIG_PCI_LINK_STATUS_SANITY=y
|
||||
CONFIG_PEER_PROTECTED_ACCESS=y
|
||||
CONFIG_PKTLOG_HAS_SPECIFIC_DATA=y
|
||||
CONFIG_POWER_MANAGEMENT_OFFLOAD=y
|
||||
CONFIG_PTT_SOCK_SVC_ENABLE=y
|
||||
CONFIG_QCA6750_HEADERS_DEF=y
|
||||
CONFIG_QCACLD_FEATURE_APF=y
|
||||
CONFIG_QCACLD_FEATURE_FW_STATE=y
|
||||
CONFIG_QCACLD_FEATURE_GREEN_AP=y
|
||||
CONFIG_QCACLD_FEATURE_NAN=y
|
||||
CONFIG_QCACLD_RX_DESC_MULTI_PAGE_ALLOC=y
|
||||
CONFIG_QCACLD_WLAN_CONNECTIVITY_DIAG_EVENT=y
|
||||
CONFIG_QCACLD_WLAN_LFR3=y
|
||||
CONFIG_QCA_MONITOR_PKT_SUPPORT=y
|
||||
CONFIG_QCA_SUPPORT_TX_THROTTLE=y
|
||||
CONFIG_QCA_TARGET_IF_MLME=y
|
||||
CONFIG_QCA_WIFI_FTM=y
|
||||
CONFIG_QCA_WIFI_FTM_NL80211=y
|
||||
CONFIG_QCA_WIFI_QCA6750=y
|
||||
CONFIG_QCA_WIFI_QCA8074=y
|
||||
CONFIG_QCA_WIFI_QCA8074_VP=y
|
||||
CONFIG_QCOM_ESE=y
|
||||
CONFIG_QCOM_LTE_COEX=y
|
||||
CONFIG_QCOM_TDLS=y
|
||||
CONFIG_QCOM_VOWIFI_11R=y
|
||||
CONFIG_QMI_SUPPORT=y
|
||||
CONFIG_REG_CLIENT=y
|
||||
CONFIG_REMOVE_PKT_LOG=y
|
||||
CONFIG_REO_DESC_DEFER_FREE=y
|
||||
CONFIG_ROME_IF="ipci"
|
||||
CONFIG_PLD_IPCI_ICNSS_FLAG=y
|
||||
CONFIG_RXDMA_ERR_PKT_DROP=y
|
||||
CONFIG_RX_DEFRAG_DO_NOT_REINJECT=y
|
||||
CONFIG_RX_DESC_SANITY_WAR=y
|
||||
CONFIG_RX_FISA=y
|
||||
CONFIG_RX_HASH_DEBUG=y
|
||||
CONFIG_RX_OL=y
|
||||
CONFIG_SAE_SINGLE_PMK=y
|
||||
CONFIG_SAP_AVOID_ACS_FREQ_LIST=y
|
||||
CONFIG_SAP_DHCP_FW_IND=y
|
||||
CONFIG_SAR_SAFETY_FEATURE=y
|
||||
CONFIG_SCALE_INCLUDES=y
|
||||
CONFIG_SERIALIZE_QUEUE_SETUP=y
|
||||
CONFIG_SHADOW_V2=y
|
||||
CONFIG_SOFTAP_CHANNEL_RANGE=y
|
||||
CONFIG_SUPPORT_11AX=y
|
||||
CONFIG_SYSTEM_PM_CHECK=y
|
||||
CONFIG_TARGET_11D_SCAN=y
|
||||
CONFIG_TARGET_RAMDUMP_AFTER_KERNEL_PANIC=y
|
||||
CONFIG_THERMAL_STATS_SUPPORT=y
|
||||
CONFIG_TRACE_RECORD_FEATURE=y
|
||||
CONFIG_TSO_DEBUG_LOG_ENABLE=y
|
||||
CONFIG_TX_MULTIQ_PER_AC=y
|
||||
CONFIG_TX_MULTI_TCL=y
|
||||
CONFIG_TX_PER_PDEV_DESC_POOL=y
|
||||
CONFIG_TX_TID_OVERRIDE=y
|
||||
CONFIG_VERBOSE_DEBUG=y
|
||||
CONFIG_WAPI_BIG_ENDIAN=y
|
||||
CONFIG_WCNSS_MEM_PRE_ALLOC_MODULE=y
|
||||
CONFIG_WDI3_IPA_OVER_GSI=y
|
||||
CONFIG_WDI_EVENT_ENABLE=y
|
||||
CONFIG_WIFI_MONITOR_SUPPORT=y
|
||||
CONFIG_WIFI_POS_CONVERGED=y
|
||||
CONFIG_WLAN_BMISS=y
|
||||
CONFIG_WLAN_CE_INTERRUPT_THRESHOLD_CONFIG=y
|
||||
CONFIG_WLAN_CFR_ENABLE=y
|
||||
CONFIG_WLAN_CLD_DEV_PM_QOS=y
|
||||
CONFIG_WLAN_CLD_PM_QOS=y
|
||||
CONFIG_WLAN_CONV_SPECTRAL_ENABLE=y
|
||||
CONFIG_WLAN_CUSTOM_DSCP_UP_MAP=y
|
||||
CONFIG_WLAN_DEBUGFS=y
|
||||
CONFIG_WLAN_DEBUG_CRASH_INJECT=y
|
||||
CONFIG_WLAN_DEBUG_LINK_VOTE=y
|
||||
CONFIG_WLAN_DEBUG_VERSION=y
|
||||
CONFIG_WLAN_DFS_MASTER_ENABLE=y
|
||||
CONFIG_WLAN_DFS_STATIC_MEM_ALLOC=y
|
||||
CONFIG_WLAN_DIAG_VERSION=y
|
||||
CONFIG_WLAN_DL_MODES=y
|
||||
CONFIG_WLAN_DP_FEATURE_DEFERRED_REO_QDESC_DESTROY=y
|
||||
CONFIG_WLAN_DP_PENDING_MEM_FLUSH=y
|
||||
CONFIG_WLAN_DP_PER_RING_TYPE_CONFIG=y
|
||||
CONFIG_WLAN_DP_PROFILE_SUPPORT=y
|
||||
CONFIG_WLAN_DYNAMIC_CVM=y
|
||||
CONFIG_WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY=y
|
||||
CONFIG_WLAN_ENH_CFR_ENABLE=y
|
||||
CONFIG_WLAN_FEATURE_11AX=y
|
||||
CONFIG_WLAN_FEATURE_ACTION_OUI=y
|
||||
CONFIG_WLAN_FEATURE_BIG_DATA_STATS=y
|
||||
CONFIG_WLAN_FEATURE_CAL_FAILURE_TRIGGER=y
|
||||
CONFIG_WLAN_FEATURE_CE_RX_BUFFER_REUSE=y
|
||||
CONFIG_WLAN_FEATURE_DFS_OFFLOAD=y
|
||||
CONFIG_WLAN_FEATURE_DISA=y
|
||||
CONFIG_WLAN_FEATURE_DP_BUS_BANDWIDTH=y
|
||||
CONFIG_WLAN_FEATURE_DP_EVENT_HISTORY=y
|
||||
CONFIG_WLAN_FEATURE_DP_RX_THREADS=y
|
||||
CONFIG_WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE=y
|
||||
CONFIG_WLAN_FEATURE_ELNA=y
|
||||
CONFIG_WLAN_FEATURE_FILS=y
|
||||
CONFIG_WLAN_FEATURE_FIPS=y
|
||||
CONFIG_WLAN_FEATURE_GET_USABLE_CHAN_LIST=y
|
||||
CONFIG_WLAN_FEATURE_ICMP_OFFLOAD=y
|
||||
CONFIG_WLAN_FEATURE_IGMP_OFFLOAD=y
|
||||
CONFIG_WLAN_FEATURE_LINK_LAYER_STATS=y
|
||||
CONFIG_WLAN_FEATURE_LPSS=y
|
||||
CONFIG_WLAN_FEATURE_LRO_CTX_IN_CB=y
|
||||
CONFIG_WLAN_FEATURE_MBSSID=y
|
||||
CONFIG_WLAN_FEATURE_MDNS_OFFLOAD=y
|
||||
CONFIG_WLAN_FEATURE_MEDIUM_ASSESS=y
|
||||
CONFIG_WLAN_FEATURE_MIB_STATS=y
|
||||
CONFIG_WLAN_FEATURE_P2P_DEBUG=y
|
||||
CONFIG_WLAN_FEATURE_P2P_P2P_STA=y
|
||||
CONFIG_WLAN_FEATURE_PACKET_FILTERING=y
|
||||
CONFIG_WLAN_FEATURE_PEER_TXQ_FLUSH_CONF=y
|
||||
CONFIG_WLAN_FEATURE_RX_BUFFER_POOL=y
|
||||
CONFIG_WLAN_FEATURE_RX_SOFTIRQ_TIME_LIMIT=y
|
||||
CONFIG_WLAN_FEATURE_SAE=y
|
||||
CONFIG_WLAN_FEATURE_SAP_ACS_OPTIMIZE=y
|
||||
CONFIG_WLAN_FEATURE_SARV1_TO_SARV2=y
|
||||
CONFIG_WLAN_FEATURE_SR=y
|
||||
CONFIG_WLAN_FEATURE_TWT=y
|
||||
CONFIG_WLAN_FEATURE_WMI_DIAG_OVER_CE7=y
|
||||
CONFIG_WLAN_FREQ_LIST=y
|
||||
CONFIG_WLAN_FW_OFFLOAD=y
|
||||
CONFIG_WLAN_GTX_BW_MASK=y
|
||||
CONFIG_WLAN_HANG_EVENT=y
|
||||
CONFIG_WLAN_LOGGING_SOCK_SVC=y
|
||||
CONFIG_WLAN_LOG_DEBUG=y
|
||||
CONFIG_WLAN_LOG_ENTER=y
|
||||
CONFIG_WLAN_LOG_ERROR=y
|
||||
CONFIG_WLAN_LOG_EXIT=y
|
||||
CONFIG_WLAN_LOG_FATAL=y
|
||||
CONFIG_WLAN_LOG_INFO=y
|
||||
CONFIG_WLAN_LOG_WARN=y
|
||||
CONFIG_WLAN_MWS_INFO_DEBUGFS=y
|
||||
CONFIG_WLAN_NAPI=y
|
||||
CONFIG_WLAN_NS_OFFLOAD=y
|
||||
CONFIG_WLAN_NUD_TRACKING=y
|
||||
CONFIG_WLAN_OBJMGR_DEBUG=y
|
||||
CONFIG_WLAN_OBJMGR_REF_ID_TRACE=y
|
||||
CONFIG_WLAN_OFFLOAD_PACKETS=y
|
||||
CONFIG_WLAN_OPEN_P2P_INTERFACE=y
|
||||
CONFIG_WLAN_OPEN_SOURCE=y
|
||||
CONFIG_WLAN_PDEV_VDEV_SEND_MULTI_PARAM=y
|
||||
CONFIG_WLAN_PMO_ENABLE=y
|
||||
CONFIG_WLAN_POLICY_MGR_ENABLE=y
|
||||
CONFIG_WLAN_POWER_DEBUG=y
|
||||
CONFIG_WLAN_REASSOC=y
|
||||
CONFIG_WLAN_SCAN_DISABLE=y
|
||||
CONFIG_WLAN_SKIP_BAR_UPDATE=y
|
||||
CONFIG_WLAN_SPECTRAL_ENABLE=y
|
||||
CONFIG_WLAN_SUPPORT_DATA_STALL=y
|
||||
CONFIG_WLAN_SYNC_TSF=y
|
||||
CONFIG_WLAN_SYSFS=y
|
||||
CONFIG_WLAN_SYSFS_CHANNEL=y
|
||||
CONFIG_WLAN_SYSFS_CONNECT_INFO=y
|
||||
CONFIG_WLAN_SYSFS_DCM=y
|
||||
CONFIG_WLAN_SYSFS_DFSNOL=y
|
||||
CONFIG_WLAN_SYSFS_DP_TRACE=y
|
||||
CONFIG_WLAN_SYSFS_FW_MODE_CFG=y
|
||||
CONFIG_WLAN_SYSFS_HE_BSS_COLOR=y
|
||||
CONFIG_WLAN_SYSFS_LOG_BUFFER=y
|
||||
CONFIG_WLAN_SYSFS_MEM_STATS=y
|
||||
CONFIG_WLAN_SYSFS_MONITOR_MODE_CHANNEL=y
|
||||
CONFIG_WLAN_SYSFS_RADAR=y
|
||||
CONFIG_WLAN_SYSFS_RANGE_EXT=y
|
||||
CONFIG_WLAN_SYSFS_RF_TEST_MODE=y
|
||||
CONFIG_WLAN_SYSFS_ROAM_TRIGGER_BITMAP=y
|
||||
CONFIG_WLAN_SYSFS_RTS_CTS=y
|
||||
CONFIG_WLAN_SYSFS_SCAN_CFG=y
|
||||
CONFIG_WLAN_SYSFS_STATS=y
|
||||
CONFIG_WLAN_SYSFS_STA_INFO=y
|
||||
CONFIG_WLAN_SYSFS_TDLS_PEERS=y
|
||||
CONFIG_WLAN_SYSFS_TEMPERATURE=y
|
||||
CONFIG_WLAN_SYSFS_TX_STBC=y
|
||||
CONFIG_WLAN_SYSFS_WDS_MODE=y
|
||||
CONFIG_WLAN_SYSFS_WLAN_DBG=y
|
||||
CONFIG_WLAN_THERMAL_CFG=y
|
||||
CONFIG_WLAN_THERMAL_MULTI_CLIENT_SUPPORT=y
|
||||
CONFIG_WLAN_TRACEPOINTS=y
|
||||
CONFIG_WLAN_TRACE_HIDE_MAC_ADDRESS=y
|
||||
CONFIG_WLAN_TWT_CONVERGED=y
|
||||
CONFIG_WLAN_TXRX_FW_STATS=y
|
||||
CONFIG_WLAN_TXRX_FW_ST_RST=y
|
||||
CONFIG_WLAN_TXRX_STATS=y
|
||||
CONFIG_WLAN_TX_FLOW_CONTROL_V2=y
|
||||
CONFIG_WLAN_VENDOR_HANDOFF_CONTROL=y
|
||||
CONFIG_WLAN_WARN_ON_ASSERT=y
|
||||
CONFIG_WLAN_WBUFF=y
|
||||
CONFIG_WLAN_WOWL_ADD_PTRN=y
|
||||
CONFIG_WLAN_WOWL_DEL_PTRN=y
|
||||
CONFIG_WLAN_WOW_ITO=y
|
||||
CONFIG_WMI_BCN_OFFLOAD=y
|
||||
CONFIG_WMI_CMD_STRINGS=y
|
||||
CONFIG_WMI_CONCURRENCY_SUPPORT=y
|
||||
CONFIG_WMI_DBR_SUPPORT=y
|
||||
CONFIG_WMI_INTERFACE_EVENT_LOGGING=y
|
||||
CONFIG_WMI_ROAM_SUPPORT=y
|
||||
CONFIG_WMI_SEND_RECV_QMI=y
|
||||
CONFIG_WMI_STA_SUPPORT=y
|
||||
CONFIG_WLAN_CTRL_NAME="wlan"
|
||||
CONFIG_NUM_SOC_PERF_CLUSTER=2
|
||||
CONFIG_MULTI_IF_NAME="qca6750"
|
||||
CONFIG_CNSS_QCA6750=y
|
||||
CONFIG_BUILD_TAG=y
|
||||
CONFIG_DP_RX_DESC_COOKIE_INVALIDATE=y
|
||||
CONFIG_FEATURE_COEX=y
|
||||
CONFIG_WLAN_FEATURE_COEX_DBAM=y
|
||||
CONFIG_CFG80211_MLD_AP_STA_CONNECT_UPSTREAM_SUPPORT=y
|
@ -2841,15 +2841,18 @@ wlan_hdd_get_link_info_from_objmgr(struct wlan_objmgr_vdev *vdev);
|
||||
/**
|
||||
* hdd_adapter_disable_all_links() - Reset the links on stop adapter.
|
||||
* @adapter: HDD adapter
|
||||
* @clear_macaddr: Clears mac address if set to true
|
||||
*
|
||||
* Resets the MAC address in each link info and resets the link info
|
||||
* mapping in adapter array.
|
||||
*
|
||||
* Return: void
|
||||
*/
|
||||
void hdd_adapter_disable_all_links(struct hdd_adapter *adapter);
|
||||
void
|
||||
hdd_adapter_disable_all_links(struct hdd_adapter *adapter, bool clear_macaddr);
|
||||
#else
|
||||
static inline void hdd_adapter_disable_all_links(struct hdd_adapter *adapter)
|
||||
static inline void
|
||||
hdd_adapter_disable_all_links(struct hdd_adapter *adapter, bool clear_macaddr)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
@ -355,6 +355,22 @@ QDF_STATUS hdd_derive_link_address_from_mld(struct wlan_objmgr_psoc *psoc,
|
||||
uint8_t max_idx);
|
||||
|
||||
#ifdef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
|
||||
/**
|
||||
* hdd_adapter_restore_link_vdev_map() - Change the VDEV to link info mapping
|
||||
* in adapter.
|
||||
* @adapter: HDD adapter pointer
|
||||
* @same_vdev_mac_map: Maintain VDEV to MAC address mapping during the restore.
|
||||
*
|
||||
* This API restores the VDEV to HDD link info mapping to its initial order
|
||||
* which could have got remapped in the process of link switch. If
|
||||
* @same_vdev_mac_map is set to %true then the MAC address to VDEV mapping is
|
||||
* preserved.
|
||||
*
|
||||
* Returns: %true if any mapping changes or %false otherwise.
|
||||
*/
|
||||
bool hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter,
|
||||
bool same_vdev_mac_map);
|
||||
|
||||
/**
|
||||
* hdd_mlo_mgr_register_osif_ops() - Register OSIF ops with global MLO manager
|
||||
* for callback to notify.
|
||||
@ -376,6 +392,13 @@ QDF_STATUS hdd_mlo_mgr_register_osif_ops(void);
|
||||
*/
|
||||
QDF_STATUS hdd_mlo_mgr_unregister_osif_ops(void);
|
||||
#else
|
||||
static inline bool
|
||||
hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter,
|
||||
bool same_vdev_mac_map)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline QDF_STATUS hdd_mlo_mgr_register_osif_ops(void)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
@ -2912,6 +2912,7 @@ void hdd_roam_profile_init(struct wlan_hdd_link_info *link_info)
|
||||
}
|
||||
|
||||
struct osif_cm_ops osif_ops = {
|
||||
.connect_active_notify_cb = hdd_cm_connect_active_notify,
|
||||
.connect_complete_cb = hdd_cm_connect_complete,
|
||||
.disconnect_complete_cb = hdd_cm_disconnect_complete,
|
||||
.netif_queue_control_cb = hdd_cm_netif_queue_control,
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@ -81,6 +81,23 @@ QDF_STATUS hdd_cm_netif_queue_control(struct wlan_objmgr_vdev *vdev,
|
||||
enum netif_action_type action,
|
||||
enum netif_reason_type reason);
|
||||
|
||||
#if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
|
||||
/**
|
||||
* hdd_cm_connect_active_notify() - Callback to HDD on connection request
|
||||
* becomes active.
|
||||
* @vdev_id: VDEV ID on which connection became active.
|
||||
*
|
||||
* The callback to make sure connection related fields are properly set
|
||||
* from HDD.
|
||||
*
|
||||
* Returns: void
|
||||
*/
|
||||
void hdd_cm_connect_active_notify(uint8_t vdev_id);
|
||||
#else
|
||||
static inline void hdd_cm_connect_active_notify(uint8_t vdev_id)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
QDF_STATUS hdd_cm_connect_complete(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_connect_resp *rsp,
|
||||
enum osif_cb_type type);
|
||||
|
@ -23,6 +23,7 @@
|
||||
*/
|
||||
|
||||
#include "wlan_hdd_main.h"
|
||||
#include <wlan_hdd_mlo.h>
|
||||
#include "wlan_hdd_cm_api.h"
|
||||
#include "wlan_hdd_trace.h"
|
||||
#include "wlan_hdd_object_manager.h"
|
||||
@ -1868,6 +1869,28 @@ static void hdd_cm_connect_success(struct wlan_objmgr_vdev *vdev,
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC)
|
||||
void hdd_cm_connect_active_notify(uint8_t vdev_id)
|
||||
{
|
||||
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
struct wlan_hdd_link_info *link_info;
|
||||
|
||||
if (!hdd_ctx) {
|
||||
hdd_err("HDD context is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
link_info = hdd_get_link_info_by_vdev(hdd_ctx, vdev_id);
|
||||
if (!link_info) {
|
||||
hdd_err("Link info not found for vdev %d", vdev_id);
|
||||
return;
|
||||
}
|
||||
|
||||
if (hdd_adapter_restore_link_vdev_map(link_info->adapter, true))
|
||||
hdd_adapter_update_mlo_mgr_mac_addr(link_info->adapter);
|
||||
}
|
||||
#endif
|
||||
|
||||
QDF_STATUS hdd_cm_connect_complete(struct wlan_objmgr_vdev *vdev,
|
||||
struct wlan_cm_connect_resp *rsp,
|
||||
enum osif_cb_type type)
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2017 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -39,13 +39,13 @@ struct iw_fips_test_request {
|
||||
uint32_t key_len;
|
||||
uint8_t key[FIPS_KEY_LEN];
|
||||
uint32_t data_len;
|
||||
uint8_t data[0];
|
||||
uint8_t data[];
|
||||
};
|
||||
|
||||
struct iw_fips_test_response {
|
||||
uint32_t status;
|
||||
uint32_t data_len;
|
||||
uint8_t data[0];
|
||||
uint8_t data[];
|
||||
};
|
||||
|
||||
|
||||
|
@ -594,8 +594,7 @@ wlan_hdd_lpc_del_monitor_interface(struct hdd_context *hdd_ctx,
|
||||
void wlan_hdd_lpc_handle_concurrency(struct hdd_context *hdd_ctx,
|
||||
bool is_virtual_iface)
|
||||
{
|
||||
if (policy_mgr_is_sta_mon_concurrency(hdd_ctx->psoc))
|
||||
wlan_hdd_lpc_del_monitor_interface(hdd_ctx, is_virtual_iface);
|
||||
wlan_hdd_lpc_del_monitor_interface(hdd_ctx, is_virtual_iface);
|
||||
}
|
||||
|
||||
bool hdd_lpc_is_work_scheduled(struct hdd_context *hdd_ctx)
|
||||
@ -8856,21 +8855,21 @@ wlan_hdd_set_ml_cap_for_sap_intf(struct hdd_adapter_create_param *create_params,
|
||||
|
||||
#if defined(WLAN_FEATURE_11BE_MLO) && defined(CFG80211_11BE_BASIC) && \
|
||||
defined(WLAN_HDD_MULTI_VDEV_SINGLE_NDEV)
|
||||
void hdd_adapter_disable_all_links(struct hdd_adapter *adapter)
|
||||
void
|
||||
hdd_adapter_disable_all_links(struct hdd_adapter *adapter, bool clear_macaddr)
|
||||
{
|
||||
uint8_t idx_pos;
|
||||
struct wlan_hdd_link_info *link_info;
|
||||
|
||||
hdd_adapter_for_each_link_info(adapter, link_info) {
|
||||
qdf_zero_macaddr(&link_info->link_addr);
|
||||
if (clear_macaddr)
|
||||
qdf_zero_macaddr(&link_info->link_addr);
|
||||
idx_pos = hdd_adapter_get_index_of_link_info(link_info);
|
||||
adapter->curr_link_info_map[idx_pos] = idx_pos;
|
||||
}
|
||||
|
||||
adapter->deflink = &adapter->link_info[WLAN_HDD_DEFLINK_IDX];
|
||||
if (adapter->device_mode == QDF_STA_MODE)
|
||||
adapter->active_links = (1 << adapter->num_links_on_create) - 1;
|
||||
else
|
||||
adapter->active_links = 0x1;
|
||||
adapter->active_links = (1 << adapter->num_links_on_create) - 1;
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -9920,7 +9919,7 @@ QDF_STATUS hdd_stop_adapter_ext(struct hdd_context *hdd_ctx,
|
||||
/* Disable all links (expect default index) in adapter.
|
||||
* Set link address to NULL
|
||||
*/
|
||||
hdd_adapter_disable_all_links(adapter);
|
||||
hdd_adapter_disable_all_links(adapter, true);
|
||||
|
||||
/* This function should be invoked at the end of this api*/
|
||||
hdd_dump_func_call_map();
|
||||
@ -17817,7 +17816,7 @@ static QDF_STATUS hdd_ssr_on_pagefault_cb(struct hdd_context *hdd_ctx)
|
||||
|
||||
if (!hdd_ctx->last_pagefault_ssr_time ||
|
||||
(curr_time - hdd_ctx->last_pagefault_ssr_time) >= ssr_threshold) {
|
||||
hdd_info("curr_time %lu last_pagefault_ssr_time %lu ssr_frequency %d",
|
||||
hdd_info("curr_time %lu last_pagefault_ssr_time %lu ssr_frequency %lu",
|
||||
curr_time, hdd_ctx->last_pagefault_ssr_time,
|
||||
ssr_threshold);
|
||||
hdd_ctx->last_pagefault_ssr_time = curr_time;
|
||||
|
@ -377,14 +377,17 @@ QDF_STATUS hdd_derive_link_address_from_mld(struct wlan_objmgr_psoc *psoc,
|
||||
|
||||
#ifdef WLAN_FEATURE_DYNAMIC_MAC_ADDR_UPDATE
|
||||
#ifdef WLAN_HDD_MULTI_VDEV_SINGLE_NDEV
|
||||
static void hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter)
|
||||
bool hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter,
|
||||
bool same_vdev_mac_map)
|
||||
{
|
||||
int i;
|
||||
bool mapping_changed = false;
|
||||
unsigned long link_flags;
|
||||
uint8_t vdev_id, cur_link_idx, temp_link_idx;
|
||||
struct vdev_osif_priv *osif_priv;
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_hdd_link_info *temp_link_info, *link_info;
|
||||
struct qdf_mac_addr temp_mac;
|
||||
|
||||
hdd_adapter_for_each_link_info(adapter, link_info) {
|
||||
cur_link_idx = hdd_adapter_get_index_of_link_info(link_info);
|
||||
@ -437,6 +440,14 @@ static void hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter)
|
||||
osif_priv->legacy_osif_priv = link_info;
|
||||
}
|
||||
|
||||
/* Preserve the VDEV-MAC mapping if requested */
|
||||
if (same_vdev_mac_map) {
|
||||
qdf_copy_macaddr(&temp_mac, &temp_link_info->link_addr);
|
||||
qdf_copy_macaddr(&temp_link_info->link_addr,
|
||||
&link_info->link_addr);
|
||||
qdf_copy_macaddr(&link_info->link_addr, &temp_mac);
|
||||
}
|
||||
|
||||
/* Swap link flags */
|
||||
link_flags = temp_link_info->link_flags;
|
||||
temp_link_info->link_flags = link_info->link_flags;
|
||||
@ -448,8 +459,14 @@ static void hdd_adapter_restore_link_vdev_map(struct hdd_adapter *adapter)
|
||||
adapter->curr_link_info_map[temp_link_idx] =
|
||||
adapter->curr_link_info_map[cur_link_idx];
|
||||
adapter->curr_link_info_map[cur_link_idx] = cur_link_idx;
|
||||
|
||||
if (!mapping_changed)
|
||||
mapping_changed = true;
|
||||
}
|
||||
hdd_adapter_disable_all_links(adapter);
|
||||
|
||||
hdd_adapter_disable_all_links(adapter, !same_vdev_mac_map);
|
||||
|
||||
return mapping_changed;
|
||||
}
|
||||
|
||||
int hdd_update_vdev_mac_address(struct hdd_adapter *adapter,
|
||||
@ -483,7 +500,7 @@ int hdd_update_vdev_mac_address(struct hdd_adapter *adapter,
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
return qdf_status_to_os_return(status);
|
||||
|
||||
hdd_adapter_restore_link_vdev_map(adapter);
|
||||
hdd_adapter_restore_link_vdev_map(adapter, false);
|
||||
|
||||
i = 0;
|
||||
hdd_adapter_for_each_active_link_info(adapter, link_info) {
|
||||
|
@ -729,13 +729,24 @@ static void
|
||||
wlan_hdd_get_mlo_links_count(struct hdd_adapter *adapter, uint32_t *count)
|
||||
{
|
||||
struct wlan_hdd_link_info *link_info;
|
||||
struct hdd_station_ctx *sta_ctx;
|
||||
struct hdd_station_ctx *sta_ctx = NULL;
|
||||
u32 num_links = 0;
|
||||
|
||||
hdd_adapter_for_each_link_info(adapter, link_info) {
|
||||
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
|
||||
if (sta_ctx->conn_info.ieee_link_id != WLAN_INVALID_LINK_ID)
|
||||
num_links++;
|
||||
if (link_info->adapter->device_mode == QDF_P2P_CLIENT_MODE ||
|
||||
link_info->adapter->device_mode == QDF_STA_MODE) {
|
||||
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
|
||||
if (sta_ctx->conn_info.ieee_link_id !=
|
||||
WLAN_INVALID_LINK_ID) {
|
||||
num_links++;
|
||||
}
|
||||
} else if (link_info->adapter->device_mode == QDF_SAP_MODE ||
|
||||
link_info->adapter->device_mode == QDF_P2P_GO_MODE) {
|
||||
if (test_bit(SOFTAP_BSS_STARTED,
|
||||
&link_info->link_flags)) {
|
||||
num_links++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
*count = num_links;
|
||||
@ -956,23 +967,34 @@ wlan_hdd_put_mlo_link_iface_info(struct wlan_hdd_mlo_iface_stats_info *info,
|
||||
* @link_info: Link info pointerin adapter
|
||||
* @info: Pointer to wlan_hdd_mlo_iface_stats_info struct
|
||||
*
|
||||
* Return: True on success, False on failure
|
||||
* Return: void
|
||||
*/
|
||||
static void
|
||||
wlan_hdd_get_connected_link_info(struct wlan_hdd_link_info *link_info,
|
||||
struct wlan_hdd_mlo_iface_stats_info *info)
|
||||
{
|
||||
struct hdd_station_ctx *sta_ctx;
|
||||
struct hdd_station_ctx *sta_ctx = NULL;
|
||||
struct hdd_ap_ctx *ap_ctx = NULL;
|
||||
|
||||
info->link_id = WLAN_INVALID_LINK_ID;
|
||||
|
||||
if (!link_info) {
|
||||
hdd_err("Invalid link_info");
|
||||
info->link_id = WLAN_INVALID_LINK_ID;
|
||||
return;
|
||||
}
|
||||
|
||||
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
|
||||
info->link_id = sta_ctx->conn_info.ieee_link_id;
|
||||
info->freq = sta_ctx->conn_info.chan_freq;
|
||||
if (link_info->adapter->device_mode == QDF_P2P_CLIENT_MODE ||
|
||||
link_info->adapter->device_mode == QDF_STA_MODE) {
|
||||
sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(link_info);
|
||||
info->link_id = sta_ctx->conn_info.ieee_link_id;
|
||||
info->freq = sta_ctx->conn_info.chan_freq;
|
||||
} else if ((link_info->adapter->device_mode == QDF_SAP_MODE ||
|
||||
link_info->adapter->device_mode == QDF_P2P_GO_MODE) &&
|
||||
test_bit(SOFTAP_BSS_STARTED, &link_info->link_flags)) {
|
||||
ap_ctx = WLAN_HDD_GET_AP_CTX_PTR(link_info);
|
||||
info->link_id = ap_ctx->sap_config.link_id;
|
||||
info->freq = ap_ctx->sap_config.chan_freq;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1070,21 +1092,30 @@ static bool put_wifi_wmm_ac_stat(wmi_wmm_ac_stats *stats,
|
||||
* put_wifi_interface_info() - put wifi interface info
|
||||
* @stats: Pointer to stats context
|
||||
* @vendor_event: Pointer to vendor event
|
||||
* @link_info: Pointer to link_info
|
||||
*
|
||||
* Return: bool
|
||||
*/
|
||||
static bool put_wifi_interface_info(struct wifi_interface_info *stats,
|
||||
struct sk_buff *vendor_event)
|
||||
struct sk_buff *vendor_event,
|
||||
struct wlan_hdd_link_info *link_info)
|
||||
{
|
||||
if (link_info->adapter->device_mode == QDF_P2P_CLIENT_MODE ||
|
||||
link_info->adapter->device_mode == QDF_STA_MODE) {
|
||||
if (nla_put_u32(vendor_event,
|
||||
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_INFO_STATE,
|
||||
stats->state)) {
|
||||
hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (nla_put_u32(vendor_event,
|
||||
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_INFO_MODE,
|
||||
stats->mode) ||
|
||||
nla_put(vendor_event,
|
||||
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_INFO_MAC_ADDR,
|
||||
QDF_MAC_ADDR_SIZE, stats->macAddr.bytes) ||
|
||||
nla_put_u32(vendor_event,
|
||||
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_INFO_STATE,
|
||||
stats->state) ||
|
||||
nla_put_u32(vendor_event,
|
||||
QCA_WLAN_VENDOR_ATTR_LL_STATS_IFACE_INFO_ROAMING,
|
||||
stats->roaming) ||
|
||||
@ -1118,11 +1149,13 @@ static bool put_wifi_interface_info(struct wifi_interface_info *stats,
|
||||
* @if_stat: Pointer to interface stats context
|
||||
* @num_peers: Number of peers
|
||||
* @vendor_event: Pointer to vendor event
|
||||
* @link_info: Pointer to link_info
|
||||
*
|
||||
* Return: bool
|
||||
*/
|
||||
static bool put_wifi_iface_stats(struct wifi_interface_stats *if_stat,
|
||||
u32 num_peers, struct sk_buff *vendor_event)
|
||||
u32 num_peers, struct sk_buff *vendor_event,
|
||||
struct wlan_hdd_link_info *link_info)
|
||||
{
|
||||
int i = 0;
|
||||
struct nlattr *wmm_info;
|
||||
@ -1130,7 +1163,7 @@ static bool put_wifi_iface_stats(struct wifi_interface_stats *if_stat,
|
||||
u64 average_tsf_offset;
|
||||
wmi_iface_link_stats *link_stats = &if_stat->link_stats;
|
||||
|
||||
if (!put_wifi_interface_info(&if_stat->info, vendor_event)) {
|
||||
if (!put_wifi_interface_info(&if_stat->info, vendor_event, link_info)) {
|
||||
hdd_err("QCA_WLAN_VENDOR_ATTR put fail");
|
||||
return false;
|
||||
|
||||
@ -1856,7 +1889,8 @@ wlan_hdd_send_mlo_ll_iface_stats_to_user(struct hdd_adapter *adapter)
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err_rl("mlo_iface_stats: failed to get bss peer_mld_mac");
|
||||
|
||||
if (!put_wifi_iface_stats(&cumulative_if_stat, num_links, skb)) {
|
||||
if (!put_wifi_iface_stats(&cumulative_if_stat, num_links, skb,
|
||||
ml_adapter->deflink)) {
|
||||
hdd_err("put_wifi_iface_stats fail");
|
||||
goto err;
|
||||
}
|
||||
@ -1886,7 +1920,7 @@ wlan_hdd_send_mlo_ll_iface_stats_to_user(struct hdd_adapter *adapter)
|
||||
goto err;
|
||||
|
||||
if (!put_wifi_iface_stats(&link_if_stat[i],
|
||||
per_link_peers, skb)) {
|
||||
per_link_peers, skb, link_info)) {
|
||||
hdd_err("put_wifi_iface_stats failed for link[%u]", i);
|
||||
goto err;
|
||||
}
|
||||
@ -1921,6 +1955,7 @@ wlan_hdd_send_mlo_ll_iface_stats_to_user(struct hdd_adapter *adapter)
|
||||
struct sk_buff *skb;
|
||||
struct wlan_hdd_link_info *link_info;
|
||||
struct qdf_mac_addr *netdev_addr;
|
||||
int8_t rssi_data;
|
||||
|
||||
if (!wlan_hdd_is_mlo_connection(adapter->deflink))
|
||||
return;
|
||||
@ -1944,11 +1979,25 @@ wlan_hdd_send_mlo_ll_iface_stats_to_user(struct hdd_adapter *adapter)
|
||||
|
||||
hdd_adapter_for_each_link_info(adapter, link_info) {
|
||||
wlan_hdd_get_connected_link_info(link_info, &info);
|
||||
|
||||
if (info.link_id == WLAN_INVALID_LINK_ID)
|
||||
continue;
|
||||
|
||||
if ((link_info->rssi != 0) && (rssi <= link_info->rssi)) {
|
||||
rssi = link_info->rssi;
|
||||
rssi_data = link_info->ll_iface_stats.link_stats.rssi_data;
|
||||
|
||||
if ((link_info->adapter->device_mode == QDF_P2P_GO_MODE ||
|
||||
link_info->adapter->device_mode == QDF_SAP_MODE) &&
|
||||
rssi <= rssi_data) {
|
||||
rssi = rssi_data;
|
||||
update_stats = true;
|
||||
if (!hdd_get_interface_info(link_info,
|
||||
&cumulative_if_stat.info)) {
|
||||
hdd_err("failed to get iface info for link %u",
|
||||
info.link_id);
|
||||
goto err;
|
||||
}
|
||||
} else if (rssi_data != 0 && (rssi <= rssi_data)) {
|
||||
rssi = rssi_data;
|
||||
update_stats = true;
|
||||
if (!hdd_get_interface_info(link_info,
|
||||
&cumulative_if_stat.info)) {
|
||||
@ -1978,7 +2027,8 @@ wlan_hdd_send_mlo_ll_iface_stats_to_user(struct hdd_adapter *adapter)
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
hdd_err_rl("mlo_iface_stats: failed to get bss peer_mld_mac");
|
||||
|
||||
if (!put_wifi_iface_stats(&cumulative_if_stat, num_links, skb)) {
|
||||
if (!put_wifi_iface_stats(&cumulative_if_stat, num_links, skb,
|
||||
adapter->deflink)) {
|
||||
hdd_err("put_wifi_iface_stats fail");
|
||||
goto err;
|
||||
}
|
||||
@ -1993,6 +2043,7 @@ wlan_hdd_send_mlo_ll_iface_stats_to_user(struct hdd_adapter *adapter)
|
||||
|
||||
hdd_adapter_for_each_link_info(adapter, link_info) {
|
||||
wlan_hdd_get_connected_link_info(link_info, &info);
|
||||
|
||||
if (info.link_id == WLAN_INVALID_LINK_ID)
|
||||
continue;
|
||||
|
||||
@ -2008,7 +2059,8 @@ wlan_hdd_send_mlo_ll_iface_stats_to_user(struct hdd_adapter *adapter)
|
||||
if (!wlan_hdd_put_mlo_link_iface_info(&info, skb))
|
||||
goto err;
|
||||
|
||||
if (!put_wifi_iface_stats(stats, per_link_peers, skb)) {
|
||||
if (!put_wifi_iface_stats(stats, per_link_peers, skb,
|
||||
link_info)) {
|
||||
hdd_err("put iface stats failed for link[%u]", info.link_id);
|
||||
goto err;
|
||||
}
|
||||
@ -2215,7 +2267,7 @@ hdd_link_layer_process_iface_stats(struct wlan_hdd_link_info *link_info,
|
||||
return;
|
||||
}
|
||||
|
||||
if (!put_wifi_iface_stats(if_stat, num_peers, skb)) {
|
||||
if (!put_wifi_iface_stats(if_stat, num_peers, skb, link_info)) {
|
||||
hdd_err("put_wifi_iface_stats fail");
|
||||
wlan_cfg80211_vendor_free_skb(skb);
|
||||
return;
|
||||
@ -5576,34 +5628,20 @@ roam_rt_stats_fill_cand_info(struct sk_buff *vendor_event, uint8_t idx,
|
||||
nla_nest_end(vendor_event, nl_array);
|
||||
}
|
||||
|
||||
void
|
||||
wlan_hdd_cfg80211_roam_events_callback(struct roam_stats_event *roam_stats,
|
||||
uint8_t idx)
|
||||
static void
|
||||
wlan_hdd_cfg80211_typical_roam_events_callback(struct wlan_hdd_link_info *link_info,
|
||||
struct roam_stats_event *roam_stats,
|
||||
uint8_t idx)
|
||||
{
|
||||
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
int status;
|
||||
uint32_t data_size, roam_event_type = 0;
|
||||
struct sk_buff *vendor_event;
|
||||
struct wlan_hdd_link_info *link_info;
|
||||
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
|
||||
status = wlan_hdd_validate_context(hdd_ctx);
|
||||
if (status) {
|
||||
if (wlan_hdd_validate_context(hdd_ctx)) {
|
||||
hdd_err("Invalid hdd_ctx");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!roam_stats) {
|
||||
hdd_err("msg received here is null");
|
||||
return;
|
||||
}
|
||||
|
||||
link_info = hdd_get_link_info_by_vdev(hdd_ctx, roam_stats->vdev_id);
|
||||
if (!link_info) {
|
||||
hdd_err("vdev_id %d does not exist with host",
|
||||
roam_stats->vdev_id);
|
||||
return;
|
||||
}
|
||||
|
||||
data_size = hdd_get_roam_rt_stats_event_len(roam_stats, idx);
|
||||
if (!data_size) {
|
||||
hdd_err("No data requested");
|
||||
@ -9136,7 +9174,7 @@ int wlan_hdd_get_sap_go_peer_linkspeed(struct wlan_hdd_link_info *link_info,
|
||||
struct hdd_station_info *sta_info, *tmp = NULL;
|
||||
|
||||
value = value + command_len;
|
||||
ret = sscanf(value, "%17s", &macaddr_string);
|
||||
ret = sscanf(value, "%17s", macaddr_string);
|
||||
|
||||
if (ret != 1)
|
||||
return -EINVAL;
|
||||
@ -9639,6 +9677,8 @@ void wlan_hdd_register_cp_stats_cb(struct hdd_context *hdd_ctx)
|
||||
QCA_WLAN_VENDOR_ATTR_ROAM_STATS_FRAME_STATUS
|
||||
#define ROAM_STATS_FRAME_TIMESTAMP \
|
||||
QCA_WLAN_VENDOR_ATTR_ROAM_STATS_FRAME_TIMESTAMP
|
||||
#define ROAM_STATS_EVENT_INDEX \
|
||||
QCA_NL80211_VENDOR_SUBCMD_ROAM_STATS_INDEX
|
||||
|
||||
static enum qca_roam_reason
|
||||
hdd_convert_roam_trigger_reason(enum roam_trigger_reason reason)
|
||||
@ -9921,8 +9961,9 @@ hdd_convert_roam_failures_reason(enum wlan_roam_failure_reason_code fail)
|
||||
*
|
||||
* Return: required length of an individual record of roaming stats
|
||||
*/
|
||||
static uint32_t hdd_get_roam_stats_individual_record_len(struct enhance_roam_info *roam_info,
|
||||
uint32_t index)
|
||||
static uint32_t
|
||||
hdd_get_roam_stats_individual_record_len(struct enhance_roam_info *roam_info,
|
||||
uint32_t index)
|
||||
{
|
||||
struct enhance_roam_info *info;
|
||||
enum qca_roam_reason vendor_trigger_reason;
|
||||
@ -10452,6 +10493,9 @@ static int hdd_nla_put_roam_stats_info(struct sk_buff *skb,
|
||||
}
|
||||
|
||||
for (i = 0; i < WLAN_ROAM_MAX_FRAME_INFO; i++) {
|
||||
if (info->timestamp[i].frame_type ==
|
||||
WLAN_ROAM_STATS_FRAME_SUBTYPE_INVALID)
|
||||
break;
|
||||
roam_frame = nla_nest_start(skb, i);
|
||||
if (!roam_frame) {
|
||||
hdd_err("nla_nest_start fail");
|
||||
@ -10690,6 +10734,100 @@ int wlan_hdd_cfg80211_get_roam_stats(struct wiphy *wiphy,
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
#ifdef WLAN_FEATURE_ROAM_INFO_STATS
|
||||
static void
|
||||
wlan_hdd_cfg80211_enhance_roam_events_callback(struct wlan_hdd_link_info *link_info,
|
||||
struct roam_stats_event *roam_stats,
|
||||
uint8_t idx)
|
||||
{
|
||||
int status;
|
||||
uint32_t data_size = 0;
|
||||
struct sk_buff *vendor_event;
|
||||
struct wlan_objmgr_vdev *vdev = NULL;
|
||||
struct enhance_roam_info *roam_info = NULL;
|
||||
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
|
||||
status = wlan_hdd_validate_context(hdd_ctx);
|
||||
if (status) {
|
||||
hdd_err("Invalid hdd_ctx");
|
||||
return;
|
||||
}
|
||||
|
||||
vdev = hdd_objmgr_get_vdev_by_user(link_info, WLAN_OSIF_STATS_ID);
|
||||
if (!vdev)
|
||||
return;
|
||||
ucfg_cm_roam_info_get(vdev, &roam_info, idx);
|
||||
hdd_objmgr_put_vdev_by_user(vdev, WLAN_OSIF_STATS_ID);
|
||||
|
||||
/* QCA_WLAN_VENDOR_ATTR_ROAM_STATS_INFO */
|
||||
data_size += nla_total_size(0);
|
||||
/* nest attribute */
|
||||
data_size += nla_total_size(0);
|
||||
|
||||
data_size += hdd_get_roam_stats_individual_record_len(roam_info, idx);
|
||||
|
||||
data_size += NLMSG_HDRLEN;
|
||||
|
||||
vendor_event =
|
||||
wlan_cfg80211_vendor_event_alloc(hdd_ctx->wiphy,
|
||||
&link_info->adapter->wdev,
|
||||
data_size,
|
||||
ROAM_STATS_EVENT_INDEX,
|
||||
GFP_KERNEL);
|
||||
|
||||
if (hdd_nla_put_roam_stats_info(vendor_event, roam_info, 0)) {
|
||||
wlan_cfg80211_vendor_free_skb(vendor_event);
|
||||
hdd_err("nla put failure");
|
||||
return;
|
||||
}
|
||||
|
||||
roam_stats->enhance_roam_rt_event = false;
|
||||
|
||||
wlan_cfg80211_vendor_event(vendor_event, GFP_KERNEL);
|
||||
}
|
||||
#else
|
||||
static void
|
||||
wlan_hdd_cfg80211_enhance_roam_events_callback(struct wlan_hdd_link_info *link_info,
|
||||
struct roam_stats_event *roam_stats,
|
||||
uint8_t idx)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
void
|
||||
wlan_hdd_cfg80211_roam_events_callback(struct roam_stats_event *roam_stats,
|
||||
uint8_t idx)
|
||||
{
|
||||
int status;
|
||||
struct wlan_hdd_link_info *link_info;
|
||||
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
|
||||
status = wlan_hdd_validate_context(hdd_ctx);
|
||||
if (status) {
|
||||
hdd_err("Invalid hdd_ctx");
|
||||
return;
|
||||
}
|
||||
|
||||
if (!roam_stats) {
|
||||
hdd_err("msg received here is null");
|
||||
return;
|
||||
}
|
||||
|
||||
link_info = hdd_get_link_info_by_vdev(hdd_ctx, roam_stats->vdev_id);
|
||||
if (!link_info) {
|
||||
hdd_err("vdev_id %d does not exist with host",
|
||||
roam_stats->vdev_id);
|
||||
return;
|
||||
}
|
||||
if (roam_stats->enhance_roam_rt_event)
|
||||
wlan_hdd_cfg80211_enhance_roam_events_callback(link_info,
|
||||
roam_stats, idx);
|
||||
else
|
||||
wlan_hdd_cfg80211_typical_roam_events_callback(link_info,
|
||||
roam_stats, idx);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef WLAN_FEATURE_TX_LATENCY_STATS
|
||||
#define TX_LATENCY_BUCKET_DISTRIBUTION_LEN \
|
||||
(sizeof(uint32_t) * CDP_TX_LATENCY_TYPE_MAX)
|
||||
|
@ -32,9 +32,9 @@
|
||||
#define QWLAN_VERSION_MAJOR 5
|
||||
#define QWLAN_VERSION_MINOR 2
|
||||
#define QWLAN_VERSION_PATCH 1
|
||||
#define QWLAN_VERSION_EXTRA "N"
|
||||
#define QWLAN_VERSION_BUILD 91
|
||||
#define QWLAN_VERSION_EXTRA "C"
|
||||
#define QWLAN_VERSION_BUILD 92
|
||||
|
||||
#define QWLAN_VERSIONSTR "5.2.1.91N"
|
||||
#define QWLAN_VERSIONSTR "5.2.1.92C"
|
||||
|
||||
#endif /* QWLAN_VERSION_H */
|
||||
|
@ -2873,7 +2873,7 @@ typedef struct {
|
||||
|
||||
uint32_t peer_event_number;
|
||||
/* Variable length field - Do not add anything after this */
|
||||
uint8_t results[0];
|
||||
uint8_t results[];
|
||||
} tSirLLStatsResults, *tpSirLLStatsResults;
|
||||
|
||||
#ifdef WLAN_FEATURE_LINK_LAYER_STATS
|
||||
@ -3107,7 +3107,7 @@ struct wifi_peer_info {
|
||||
uint32_t power_saving;
|
||||
uint32_t num_rate;
|
||||
};
|
||||
struct wifi_rate_stat rate_stats[0];
|
||||
struct wifi_rate_stat rate_stats[];
|
||||
};
|
||||
|
||||
/**
|
||||
@ -3151,7 +3151,7 @@ struct wifi_interface_stats {
|
||||
*/
|
||||
struct wifi_peer_stat {
|
||||
uint32_t num_peers;
|
||||
struct wifi_peer_info peer_info[0];
|
||||
struct wifi_peer_info peer_info[];
|
||||
};
|
||||
|
||||
/* wifi statistics bitmap for getting statistics */
|
||||
|
@ -904,12 +904,11 @@ lim_cm_fill_link_session(struct mac_context *mac_ctx,
|
||||
*
|
||||
* This api will create mlo peer called during mlo roaming scenario
|
||||
*
|
||||
* Return: none
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
void lim_roam_mlo_create_peer(struct mac_context *mac,
|
||||
struct roam_offload_synch_ind *sync_ind,
|
||||
uint8_t vdev_id,
|
||||
uint8_t *peer_mac);
|
||||
QDF_STATUS lim_roam_mlo_create_peer(struct mac_context *mac,
|
||||
struct roam_offload_synch_ind *sync_ind,
|
||||
uint8_t vdev_id, uint8_t *peer_mac);
|
||||
|
||||
/**
|
||||
* lim_mlo_roam_delete_link_peer() - Delete mlo link peer
|
||||
@ -951,12 +950,12 @@ lim_cm_fill_link_session(struct mac_context *mac_ctx,
|
||||
return QDF_STATUS_E_NOSUPPORT;
|
||||
}
|
||||
|
||||
static inline void
|
||||
static inline QDF_STATUS
|
||||
lim_roam_mlo_create_peer(struct mac_context *mac,
|
||||
struct roam_offload_synch_ind *sync_ind,
|
||||
uint8_t vdev_id,
|
||||
uint8_t *peer_mac)
|
||||
uint8_t vdev_id, uint8_t *peer_mac)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
static inline void
|
||||
|
@ -1856,12 +1856,8 @@ static void pe_update_crypto_params(struct mac_context *mac_ctx,
|
||||
hdr = (tpSirMacMgmtHdr)((uint8_t *)roam_synch +
|
||||
roam_synch->reassoc_req_offset);
|
||||
if (hdr->fc.type == SIR_MAC_MGMT_FRAME &&
|
||||
hdr->fc.subType == SIR_MAC_MGMT_ASSOC_REQ) {
|
||||
hdr->fc.subType == SIR_MAC_MGMT_ASSOC_REQ)
|
||||
ies_offset = WLAN_ASSOC_REQ_IES_OFFSET;
|
||||
pe_debug("roam assoc req frm");
|
||||
} else {
|
||||
pe_debug("roam reassoc req frm");
|
||||
}
|
||||
|
||||
if (roam_synch->reassoc_req_length <
|
||||
(sizeof(tSirMacMgmtHdr) + ies_offset)) {
|
||||
@ -1869,10 +1865,6 @@ static void pe_update_crypto_params(struct mac_context *mac_ctx,
|
||||
roam_synch->reassoc_req_length);
|
||||
return;
|
||||
}
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG,
|
||||
(uint8_t *)roam_synch +
|
||||
roam_synch->reassoc_req_offset,
|
||||
roam_synch->reassoc_req_length);
|
||||
|
||||
ft_session->limRmfEnabled = false;
|
||||
|
||||
@ -2227,10 +2219,7 @@ lim_roam_fill_bss_descr(struct mac_context *mac,
|
||||
roam_synch_ind->is_beacon,
|
||||
QDF_MAC_ADDR_REF(bssid.bytes),
|
||||
QDF_MAC_ADDR_REF(mac_hdr->bssId));
|
||||
|
||||
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG,
|
||||
bcn_proberesp_ptr,
|
||||
bcn_proberesp_len);
|
||||
mgmt_txrx_frame_hex_dump(bcn_proberesp_ptr, bcn_proberesp_len, false);
|
||||
|
||||
status = lim_roam_gen_beacon_descr(mac, bcn_proberesp_ptr,
|
||||
bcn_proberesp_len, is_mlo_link,
|
||||
@ -3043,7 +3032,8 @@ pe_roam_synch_callback(struct mac_context *mac_ctx,
|
||||
|
||||
reassoc_resp = (uint8_t *)roam_sync_ind_ptr +
|
||||
roam_sync_ind_ptr->reassoc_resp_offset;
|
||||
|
||||
mgmt_txrx_frame_hex_dump(reassoc_resp,
|
||||
roam_sync_ind_ptr->reassoc_resp_length, false);
|
||||
if (wlan_vdev_mlme_get_is_mlo_link(mac_ctx->psoc, vdev_id)) {
|
||||
status = lim_gen_link_specific_assoc_rsp(mac_ctx,
|
||||
ft_session_ptr,
|
||||
@ -3710,23 +3700,22 @@ fail:
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
void lim_roam_mlo_create_peer(struct mac_context *mac,
|
||||
struct roam_offload_synch_ind *sync_ind,
|
||||
uint8_t vdev_id,
|
||||
uint8_t *peer_mac)
|
||||
QDF_STATUS lim_roam_mlo_create_peer(struct mac_context *mac,
|
||||
struct roam_offload_synch_ind *sync_ind,
|
||||
uint8_t vdev_id, uint8_t *peer_mac)
|
||||
{
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
struct wlan_objmgr_peer *link_peer = NULL;
|
||||
uint8_t link_id;
|
||||
struct mlo_partner_info partner_info;
|
||||
struct qdf_mac_addr link_addr;
|
||||
QDF_STATUS status;
|
||||
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||
|
||||
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(mac->psoc,
|
||||
vdev_id,
|
||||
WLAN_LEGACY_MAC_ID);
|
||||
if (!vdev)
|
||||
return;
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
if (!wlan_vdev_mlme_is_mlo_vdev(vdev))
|
||||
goto end;
|
||||
@ -3750,19 +3739,21 @@ void lim_roam_mlo_create_peer(struct mac_context *mac,
|
||||
/* Get the bss peer obj */
|
||||
link_peer = wlan_objmgr_get_peer_by_mac(mac->psoc, peer_mac,
|
||||
WLAN_LEGACY_MAC_ID);
|
||||
if (!link_peer)
|
||||
if (!link_peer) {
|
||||
status = QDF_STATUS_E_INVAL;
|
||||
goto end;
|
||||
}
|
||||
|
||||
status = wlan_mlo_peer_create(vdev, link_peer,
|
||||
&partner_info, NULL, 0);
|
||||
|
||||
status = wlan_mlo_peer_create(vdev, link_peer, &partner_info, NULL, 0);
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
pe_err("Peer creation failed");
|
||||
pe_err("MLO peer creation failed");
|
||||
|
||||
wlan_objmgr_peer_release_ref(link_peer, WLAN_LEGACY_MAC_ID);
|
||||
|
||||
end:
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -1575,7 +1575,7 @@ QDF_STATUS lim_populate_own_rate_set(struct mac_context *mac_ctx,
|
||||
lim_populate_he_mcs_set(mac_ctx, rates, he_caps,
|
||||
session_entry, session_entry->nss);
|
||||
lim_populate_eht_mcs_set(mac_ctx, rates, eht_caps,
|
||||
session_entry, session_entry->nss);
|
||||
session_entry, session_entry->ch_width);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
@ -1830,7 +1830,7 @@ QDF_STATUS lim_populate_peer_rate_set(struct mac_context *mac,
|
||||
lim_populate_he_mcs_set(mac, pRates, peer_he_caps,
|
||||
pe_session, pe_session->nss);
|
||||
lim_populate_eht_mcs_set(mac, pRates, eht_caps,
|
||||
pe_session, pe_session->nss);
|
||||
pe_session, pe_session->ch_width);
|
||||
|
||||
pe_debug("nss 1x1 %d nss %d", pe_session->supported_nss_1x1,
|
||||
pe_session->nss);
|
||||
@ -2066,7 +2066,7 @@ QDF_STATUS lim_populate_matching_rate_set(struct mac_context *mac_ctx,
|
||||
lim_populate_he_mcs_set(mac_ctx, &sta_ds->supportedRates, he_caps,
|
||||
session_entry, session_entry->nss);
|
||||
lim_populate_eht_mcs_set(mac_ctx, &sta_ds->supportedRates, eht_caps,
|
||||
session_entry, session_entry->nss);
|
||||
session_entry, sta_ds->ch_width);
|
||||
/*
|
||||
* Set the erpEnabled bit if the phy is in G mode and at least
|
||||
* one A rate is supported
|
||||
|
@ -609,7 +609,9 @@ lim_process_beacon_frame(struct mac_context *mac_ctx, uint8_t *rx_pkt_info,
|
||||
qdf_mem_copy(session->beacon,
|
||||
WMA_GET_RX_MAC_HEADER(rx_pkt_info),
|
||||
session->bcnLen);
|
||||
|
||||
mgmt_txrx_frame_hex_dump((uint8_t *)mac_hdr,
|
||||
WMA_GET_RX_MPDU_LEN(rx_pkt_info),
|
||||
false);
|
||||
lim_check_and_announce_join_success(mac_ctx, bcn_ptr,
|
||||
mac_hdr, session);
|
||||
}
|
||||
|
@ -1346,16 +1346,10 @@ lim_handle80211_frames(struct mac_context *mac, struct scheduler_msg *limMsg,
|
||||
(fc.subType != SIR_MAC_MGMT_PROBE_REQ) &&
|
||||
(fc.subType != SIR_MAC_MGMT_PROBE_RSP) &&
|
||||
(fc.subType != SIR_MAC_MGMT_BEACON) &&
|
||||
(fc.subType != SIR_MAC_MGMT_ACTION)) {
|
||||
pe_debug("RX MGMT - Type %hu, SubType %hu, seq num[%d]",
|
||||
fc.type, fc.subType,
|
||||
((pHdr->seqControl.seqNumHi << HIGH_SEQ_NUM_OFFSET) |
|
||||
pHdr->seqControl.seqNumLo));
|
||||
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE,
|
||||
QDF_TRACE_LEVEL_DEBUG, pHdr,
|
||||
WMA_GET_RX_PAYLOAD_LEN(pRxPacketInfo)
|
||||
+ SIR_MAC_HDR_LEN_3A);
|
||||
}
|
||||
(fc.subType != SIR_MAC_MGMT_ACTION))
|
||||
mgmt_txrx_frame_hex_dump((uint8_t *)pHdr,
|
||||
WMA_GET_RX_MPDU_LEN(pRxPacketInfo),
|
||||
false);
|
||||
}
|
||||
|
||||
#ifdef FEATURE_WLAN_EXTSCAN
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -424,58 +424,6 @@ end:
|
||||
lim_send_start_bss_confirm(mac_ctx, &mlm_start_cnf);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_11BE_MLO
|
||||
static void
|
||||
lim_send_peer_create_resp_mlo(struct wlan_objmgr_vdev *vdev,
|
||||
struct mac_context *mac,
|
||||
uint8_t *peer_mac,
|
||||
QDF_STATUS status)
|
||||
{
|
||||
uint8_t link_id;
|
||||
struct mlo_partner_info partner_info;
|
||||
struct wlan_objmgr_peer *link_peer = NULL;
|
||||
|
||||
if (!wlan_vdev_mlme_is_mlo_vdev(vdev))
|
||||
return;
|
||||
|
||||
link_id = vdev->vdev_mlme.mlo_link_id;
|
||||
/* currently only 2 link MLO supported */
|
||||
partner_info.num_partner_links = 1;
|
||||
qdf_mem_copy(partner_info.partner_link_info[0].link_addr.bytes,
|
||||
vdev->vdev_mlme.macaddr, QDF_MAC_ADDR_SIZE);
|
||||
partner_info.partner_link_info[0].link_id = link_id;
|
||||
pe_debug("link_addr " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(
|
||||
partner_info.partner_link_info[0].link_addr.bytes));
|
||||
|
||||
if (QDF_IS_STATUS_SUCCESS(status)) {
|
||||
/* Get the bss peer obj */
|
||||
link_peer = wlan_objmgr_get_peer_by_mac(mac->psoc, peer_mac,
|
||||
WLAN_LEGACY_MAC_ID);
|
||||
if (!link_peer) {
|
||||
pe_err("Link peer is NULL");
|
||||
return;
|
||||
}
|
||||
|
||||
status = wlan_mlo_peer_create(vdev, link_peer,
|
||||
&partner_info, NULL, 0);
|
||||
|
||||
if (QDF_IS_STATUS_ERROR(status))
|
||||
pe_err("Peer creation failed");
|
||||
|
||||
wlan_objmgr_peer_release_ref(link_peer, WLAN_LEGACY_MAC_ID);
|
||||
}
|
||||
}
|
||||
#else /* WLAN_FEATURE_11BE_MLO */
|
||||
static inline void
|
||||
lim_send_peer_create_resp_mlo(struct wlan_objmgr_vdev *vdev,
|
||||
struct mac_context *mac,
|
||||
uint8_t *peer_mac,
|
||||
QDF_STATUS status)
|
||||
{
|
||||
}
|
||||
#endif /* WLAN_FEATURE_11BE_MLO */
|
||||
|
||||
#if defined(WIFI_POS_CONVERGED) && defined(WLAN_FEATURE_RTT_11AZ_SUPPORT)
|
||||
void
|
||||
lim_pasn_peer_del_all_resp_vdev_delete_resume(struct mac_context *mac,
|
||||
@ -516,7 +464,6 @@ void lim_send_peer_create_resp(struct mac_context *mac, uint8_t vdev_id,
|
||||
return;
|
||||
status = wlan_cm_bss_peer_create_rsp(vdev, qdf_status,
|
||||
(struct qdf_mac_addr *)peer_mac);
|
||||
lim_send_peer_create_resp_mlo(vdev, mac, peer_mac, status);
|
||||
|
||||
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
|
||||
}
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -343,9 +343,6 @@ lim_process_probe_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_Packet_info
|
||||
if (!lim_validate_probe_rsp_mld_addr(session_entry, probe_rsp))
|
||||
goto mem_free;
|
||||
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, body,
|
||||
frame_len);
|
||||
|
||||
lim_update_mlo_mgr_prb_info(mac_ctx, session_entry,
|
||||
(struct qdf_mac_addr *)header->bssId,
|
||||
probe_rsp);
|
||||
@ -394,7 +391,10 @@ lim_process_probe_rsp_frame(struct mac_context *mac_ctx, uint8_t *rx_Packet_info
|
||||
(rx_Packet_info),
|
||||
session_entry->bcnLen);
|
||||
}
|
||||
/* STA in WT_JOIN_BEACON_STATE */
|
||||
/* STA in WT_JOIN_BEACON_STATE */
|
||||
mgmt_txrx_frame_hex_dump((uint8_t *)header,
|
||||
WMA_GET_RX_MPDU_LEN(rx_Packet_info),
|
||||
false);
|
||||
lim_check_and_announce_join_success(mac_ctx, probe_rsp,
|
||||
header,
|
||||
session_entry);
|
||||
|
@ -4530,11 +4530,9 @@ lim_fill_session_params(struct mac_context *mac_ctx,
|
||||
|
||||
pe_join_req = session->lim_join_req;
|
||||
bss_desc = &session->lim_join_req->bssDescription;
|
||||
pe_debug("Beacon/probe frame received:");
|
||||
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG,
|
||||
util_scan_entry_frame_ptr(req->entry),
|
||||
util_scan_entry_frame_len(req->entry));
|
||||
|
||||
mgmt_txrx_frame_hex_dump(util_scan_entry_frame_ptr(req->entry),
|
||||
util_scan_entry_frame_len(req->entry),
|
||||
false);
|
||||
status = wlan_fill_bss_desc_from_scan_entry(mac_ctx, bss_desc,
|
||||
req->entry);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
|
@ -3333,7 +3333,7 @@ lim_tdls_populate_eht_mcs(struct mac_context *mac_ctx, tpDphHashNode stads,
|
||||
{
|
||||
lim_populate_eht_mcs_set(mac_ctx, &stads->supportedRates,
|
||||
&stads->eht_config, session_entry,
|
||||
session_entry->nss);
|
||||
session_entry->ch_width);
|
||||
}
|
||||
#else
|
||||
static void
|
||||
|
@ -483,8 +483,7 @@ lim_send_probe_req_mgmt_frame(struct mac_context *mac_ctx,
|
||||
vdev_id, mac_ctx->mgmtSeqNum,
|
||||
QDF_MAC_ADDR_REF(bssid),
|
||||
(int)sizeof(tSirMacMgmtHdr) + payload);
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, frame,
|
||||
sizeof(tSirMacMgmtHdr) + payload);
|
||||
mgmt_txrx_frame_hex_dump(frame, sizeof(tSirMacMgmtHdr) + payload, true);
|
||||
|
||||
/* If this probe request is sent during P2P Search State, then we need
|
||||
* to send it at OFDM rate.
|
||||
@ -6680,10 +6679,9 @@ lim_send_epcs_action_req_frame(struct wlan_objmgr_vdev *vdev,
|
||||
frm.Action.action = args->action;
|
||||
frm.DialogToken.token = args->arg1;
|
||||
|
||||
pe_debug("Sending a EPCS negotiation Request from " QDF_MAC_ADDR_FMT " to " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(session->self_mac_addr),
|
||||
pe_debug("Sending a EPCS negotiation Request token %d from " QDF_MAC_ADDR_FMT " to " QDF_MAC_ADDR_FMT,
|
||||
frm.DialogToken.token, QDF_MAC_ADDR_REF(session->self_mac_addr),
|
||||
QDF_MAC_ADDR_REF(peer_mac));
|
||||
pe_debug("Dialog token %d", frm.DialogToken.token);
|
||||
|
||||
status = dot11f_get_packed_epcs_neg_reqSize(mac_ctx, &frm,
|
||||
&payload_size);
|
||||
@ -6729,10 +6727,6 @@ lim_send_epcs_action_req_frame(struct wlan_objmgr_vdev *vdev,
|
||||
status);
|
||||
}
|
||||
|
||||
pe_debug("Dump EPCS TX req action frame");
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, frame_ptr,
|
||||
num_bytes);
|
||||
|
||||
if (!wlan_reg_is_24ghz_ch_freq(session->curr_op_freq) ||
|
||||
session->opmode == QDF_P2P_CLIENT_MODE ||
|
||||
session->opmode == QDF_P2P_GO_MODE)
|
||||
@ -6840,10 +6834,6 @@ lim_send_epcs_action_teardown_frame(struct wlan_objmgr_vdev *vdev,
|
||||
status);
|
||||
}
|
||||
|
||||
pe_debug("Dump EPCS TX tear down action frame");
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, frame_ptr,
|
||||
num_bytes);
|
||||
|
||||
if (!wlan_reg_is_24ghz_ch_freq(session->curr_op_freq) ||
|
||||
session->opmode == QDF_P2P_CLIENT_MODE ||
|
||||
session->opmode == QDF_P2P_GO_MODE)
|
||||
@ -7171,11 +7161,6 @@ lim_send_t2lm_action_req_frame(struct wlan_objmgr_vdev *vdev,
|
||||
}
|
||||
|
||||
frm.t2lm_ie[0].num_data = ie_buf->elem_len - 1;
|
||||
|
||||
pe_debug("Dump T2LM IE buff len %d", ie_buf->elem_len);
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, ie_buf,
|
||||
ie_buf->elem_len + sizeof(struct ie_header));
|
||||
|
||||
qdf_mem_copy(&frm.t2lm_ie[0].data, ie_buf->data,
|
||||
frm.t2lm_ie[0].num_data);
|
||||
|
||||
@ -7187,10 +7172,9 @@ lim_send_t2lm_action_req_frame(struct wlan_objmgr_vdev *vdev,
|
||||
frm.num_t2lm_ie = 1;
|
||||
frm.t2lm_ie[0].present = 1;
|
||||
|
||||
pe_debug("Sending a T2LM negotiation Request from " QDF_MAC_ADDR_FMT " to " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(session->self_mac_addr),
|
||||
pe_debug("Sending a T2LM negotiation Request token %d from " QDF_MAC_ADDR_FMT " to " QDF_MAC_ADDR_FMT,
|
||||
frm.DialogToken.token, QDF_MAC_ADDR_REF(session->self_mac_addr),
|
||||
QDF_MAC_ADDR_REF(peer_mac));
|
||||
pe_debug("Dialog token %d", frm.DialogToken.token);
|
||||
|
||||
status = dot11f_get_packed_t2lm_neg_reqSize(mac_ctx, &frm,
|
||||
&payload_size);
|
||||
@ -7237,10 +7221,6 @@ lim_send_t2lm_action_req_frame(struct wlan_objmgr_vdev *vdev,
|
||||
status);
|
||||
}
|
||||
|
||||
pe_debug("Dump T2LM TX req action frame");
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG, frame_ptr,
|
||||
num_bytes);
|
||||
|
||||
if (!wlan_reg_is_24ghz_ch_freq(session->curr_op_freq) ||
|
||||
session->opmode == QDF_P2P_CLIENT_MODE ||
|
||||
session->opmode == QDF_P2P_GO_MODE)
|
||||
|
@ -8553,7 +8553,7 @@ QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
|
||||
struct supported_rates *rates,
|
||||
tDot11fIEeht_cap *peer_eht_caps,
|
||||
struct pe_session *session_entry,
|
||||
uint8_t nss)
|
||||
enum phy_ch_width ch_width)
|
||||
{
|
||||
if ((!peer_eht_caps) || (!peer_eht_caps->present)) {
|
||||
pe_debug("peer not eht capable or eht_caps NULL");
|
||||
@ -8564,7 +8564,7 @@ QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
switch (session_entry->ch_width) {
|
||||
switch (ch_width) {
|
||||
case CH_WIDTH_320MHZ:
|
||||
lim_populate_eht_320_mcs_set(mac_ctx, rates, peer_eht_caps);
|
||||
fallthrough;
|
||||
|
@ -1827,7 +1827,7 @@ QDF_STATUS lim_strip_eht_cap_ie(struct mac_context *mac_ctx,
|
||||
* @rates: pointer to supported rate set
|
||||
* @peer_eht_caps: pointer to peer EHT capabilities
|
||||
* @session_entry: pe session entry
|
||||
* @nss: number of spatial streams
|
||||
* @ch_width: channel width of the association
|
||||
*
|
||||
* Populates EHT mcs rate set based on peer and self capabilities
|
||||
*
|
||||
@ -1837,7 +1837,7 @@ QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
|
||||
struct supported_rates *rates,
|
||||
tDot11fIEeht_cap *peer_eht_caps,
|
||||
struct pe_session *session_entry,
|
||||
uint8_t nss);
|
||||
enum phy_ch_width ch_width);
|
||||
|
||||
/**
|
||||
* lim_update_eht_bw_cap_mcs(): Update eht mcs map per bandwidth
|
||||
@ -2204,7 +2204,7 @@ QDF_STATUS lim_populate_eht_mcs_set(struct mac_context *mac_ctx,
|
||||
struct supported_rates *rates,
|
||||
tDot11fIEeht_cap *peer_eht_caps,
|
||||
struct pe_session *session_entry,
|
||||
uint8_t nss)
|
||||
enum phy_ch_width ch_width)
|
||||
{
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
@ -61,20 +61,13 @@
|
||||
/* Max passive scan dwell for wide band rrm scan, in milliseconds */
|
||||
#define RRM_SCAN_MAX_DWELL_TIME 110
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/**
|
||||
* rrm_cache_mgmt_tx_power
|
||||
**
|
||||
* FUNCTION: Store Tx power for management frames.
|
||||
* rrm_cache_mgmt_tx_power() - Store Tx power for management frames.
|
||||
* @mac: pointer to mac context
|
||||
* @txPower: TX power
|
||||
* @pe_session: per vdev pe context
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param pe_session session entry.
|
||||
* @return None
|
||||
* Return: None
|
||||
*/
|
||||
void
|
||||
rrm_cache_mgmt_tx_power(struct mac_context *mac, int8_t txPower,
|
||||
@ -88,20 +81,12 @@ rrm_cache_mgmt_tx_power(struct mac_context *mac, int8_t txPower,
|
||||
pe_session->txMgmtPower = txPower;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/**
|
||||
* rrm_get_mgmt_tx_power
|
||||
* rrm_get_mgmt_tx_power() - Get the Tx power for management frames.
|
||||
* @mac: pointer to mac context
|
||||
* @pe_session: per vdev pe context
|
||||
*
|
||||
* FUNCTION: Get the Tx power for management frames.
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param pe_session session entry.
|
||||
* @return txPower
|
||||
* Return: TX power
|
||||
*/
|
||||
int8_t rrm_get_mgmt_tx_power(struct mac_context *mac, struct pe_session *pe_session)
|
||||
{
|
||||
@ -113,21 +98,14 @@ int8_t rrm_get_mgmt_tx_power(struct mac_context *mac, struct pe_session *pe_sess
|
||||
return pe_session->txMgmtPower;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/**
|
||||
* rrm_send_set_max_tx_power_req
|
||||
* rrm_send_set_max_tx_power_req() - Send WMA_SET_MAX_TX_POWER_REQ message
|
||||
* to change the max tx power.
|
||||
* @mac: pointer to mac context
|
||||
* @txPower: TX power to be set
|
||||
* @pe_session: per vdev pe context
|
||||
*
|
||||
* FUNCTION: Send WMA_SET_MAX_TX_POWER_REQ message to change the max tx power.
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param txPower txPower to be set.
|
||||
* @param pe_session session entry.
|
||||
* @return None
|
||||
* Return: None
|
||||
*/
|
||||
QDF_STATUS
|
||||
rrm_send_set_max_tx_power_req(struct mac_context *mac, int8_t txPower,
|
||||
@ -171,21 +149,12 @@ rrm_send_set_max_tx_power_req(struct mac_context *mac, int8_t txPower,
|
||||
return retCode;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/**
|
||||
* rrm_set_max_tx_power_rsp
|
||||
* rrm_set_max_tx_power_rsp() - Process WMA_SET_MAX_TX_POWER_RSP message
|
||||
* @mac: pointer to mac context
|
||||
* @limMsgQ: pointer to scheduler message
|
||||
*
|
||||
* FUNCTION: Process WMA_SET_MAX_TX_POWER_RSP message.
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param txPower txPower to be set.
|
||||
* @param pe_session session entry.
|
||||
* @return None
|
||||
* Return: None
|
||||
*/
|
||||
QDF_STATUS rrm_set_max_tx_power_rsp(struct mac_context *mac,
|
||||
struct scheduler_msg *limMsgQ)
|
||||
@ -238,22 +207,15 @@ static void rrm_calculate_and_fill_rcpi(uint8_t *rcpi, int8_t cur_rssi)
|
||||
*rcpi = RCPI_MAX_VALUE;
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/**
|
||||
* rrm_process_link_measurement_request
|
||||
* rrm_process_link_measurement_request() - Processes the Link measurement
|
||||
* request and send the report.
|
||||
* @mac: pointer to mac context
|
||||
* @pRxPacketInfo: pointer to packet info structure
|
||||
* @pLinkReq: pointer to the Link request frame structure.
|
||||
* @pe_session: session entry.
|
||||
*
|
||||
* FUNCTION: Processes the Link measurement request and send the report.
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param pBd pointer to BD to extract RSSI and SNR
|
||||
* @param pLinkReq pointer to the Link request frame structure.
|
||||
* @param pe_session session entry.
|
||||
* @return None
|
||||
* Return: None
|
||||
*/
|
||||
QDF_STATUS
|
||||
rrm_process_link_measurement_request(struct mac_context *mac,
|
||||
@ -366,21 +328,14 @@ rrm_process_link_measurement_request(struct mac_context *mac,
|
||||
pe_session);
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/**
|
||||
* rrm_process_neighbor_report_response
|
||||
* rrm_process_neighbor_report_response() - Processes the Neighbor Report
|
||||
* response from the peer AP.
|
||||
* @mac: pointer to mac context
|
||||
* @pNeighborRep: pointer to the Neighbor report frame structure.
|
||||
* @pe_session: session entry.
|
||||
*
|
||||
* FUNCTION: Processes the Neighbor Report response from the peer AP.
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param pNeighborRep pointer to the Neighbor report frame structure.
|
||||
* @param pe_session session entry.
|
||||
* @return None
|
||||
* Return: None
|
||||
*/
|
||||
QDF_STATUS
|
||||
rrm_process_neighbor_report_response(struct mac_context *mac,
|
||||
@ -494,20 +449,13 @@ rrm_process_neighbor_report_response(struct mac_context *mac,
|
||||
|
||||
}
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/**
|
||||
* rrm_process_neighbor_report_req
|
||||
* rrm_process_neighbor_report_req() - Create a Neighbor report request
|
||||
* and send it to peer.
|
||||
* @mac: pointer to mac context
|
||||
* @pNeighborReq: Neighbor report request params
|
||||
*
|
||||
* FUNCTION:
|
||||
*
|
||||
* LOGIC: Create a Neighbor report request and send it to peer.
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param pNeighborReq Neighbor report request params .
|
||||
* @return None
|
||||
* Return: None
|
||||
*/
|
||||
QDF_STATUS
|
||||
rrm_process_neighbor_report_req(struct mac_context *mac,
|
||||
@ -797,7 +745,7 @@ rrm_update_vdev_stats(tpSirMacRadioMeasureReport rrm_report, uint8_t vdev_id)
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
|
||||
pe_nofl_debug("counter stats count: fragment (tx: %d rx: %d) group tx: %d mac stats count: retry : %d multiple retry: %d frame duplicate %d",
|
||||
pe_nofl_debug("counter stats count: fragment (tx: %d rx: %d) group tx: %llu mac stats count: retry : %d multiple retry: %d frame duplicate %d",
|
||||
stats->tx.fragment_count, stats->rx.fragment_count,
|
||||
stats->tx.mcast.num, stats->tx.retry_count,
|
||||
stats->tx.multiple_retry_count,
|
||||
@ -942,7 +890,7 @@ static uint16_t rrm_get_max_meas_duration(struct mac_context *mac,
|
||||
* rrm_process_sta_stats_report_req: Process RRM sta stats request
|
||||
* @mac: mac context
|
||||
* @pCurrentReq: Current RRM request
|
||||
* @pStaStatsReq: RRM Measurement Request
|
||||
* @sta_stats_req: RRM Measurement Request
|
||||
* @pe_session: pe session
|
||||
*
|
||||
* Return: rrm status
|
||||
@ -1102,6 +1050,7 @@ rrm_check_other_sta_sats_req_in_progress(
|
||||
/**
|
||||
* rrm_process_sta_stats_req: Process RRM sta stats request
|
||||
* @mac: mac context
|
||||
* @peer: peer mac
|
||||
* @session_entry: pe session
|
||||
* @radiomes_report: measurement report
|
||||
* @rrm_req: measurement request
|
||||
@ -1178,20 +1127,14 @@ failure:
|
||||
}
|
||||
|
||||
/**
|
||||
* rrm_process_beacon_report_req
|
||||
* rrm_process_beacon_report_req() - Processes the Beacon report request
|
||||
* from the peer AP
|
||||
* @mac: pointer to mac context
|
||||
* @pCurrentReq: pointer to the current Req comtext
|
||||
* @pBeaconReq: pointer to the beacon report request IE from the peer
|
||||
* @pe_session: session entry
|
||||
*
|
||||
* FUNCTION: Processes the Beacon report request from the peer AP.
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param pCurrentReq pointer to the current Req comtext.
|
||||
* @param pBeaconReq pointer to the beacon report request IE from the peer.
|
||||
* @param pe_session session entry.
|
||||
* @return None
|
||||
* Return: None
|
||||
*/
|
||||
static tRrmRetStatus
|
||||
rrm_process_beacon_report_req(struct mac_context *mac,
|
||||
@ -1488,7 +1431,8 @@ rrm_check_ml_ie(uint8_t *ies, uint16_t len, uint8_t *mlie_copy_len)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
mlo_debug("[802.11 BCN_RPT]: ML IE is present ml_ie_total_len:%d", ml_ie_total_len);
|
||||
mlo_debug("[802.11 BCN_RPT]: ML IE is present ml_ie_total_len:%zu",
|
||||
ml_ie_total_len);
|
||||
|
||||
util_get_mlie_common_info_len(ml_ie, ml_ie_total_len,
|
||||
&ml_common_info_length);
|
||||
@ -1539,13 +1483,17 @@ rrm_copy_ml_ie(uint8_t eid, uint8_t extn_eid, uint8_t *ml_ie,
|
||||
/**
|
||||
* rrm_fill_beacon_ies() - Fills fixed fields and Ies in bss description to an
|
||||
* array of uint8_t.
|
||||
* @pIes - pointer to the buffer that should be populated with ies.
|
||||
* @pNumIes - returns the num of ies filled in this param.
|
||||
* @pIesMaxSize - Max size of the buffer pIes.
|
||||
* @eids - pointer to array of eids. If NULL, all ies will be populated.
|
||||
* @numEids - number of elements in array eids.
|
||||
* @mac: pointer to mac context
|
||||
* @pIes: pointer to the buffer that should be populated with ies.
|
||||
* @pNumIes: returns the num of ies filled in this param.
|
||||
* @pIesMaxSize: Max size of the buffer pIes.
|
||||
* @eids: pointer to array of eids. If NULL, all ies will be populated.
|
||||
* @numEids: number of elements in array eids.
|
||||
* @eid: EID
|
||||
* @extn_eids: pointer to array of ext eids
|
||||
* @extn_eids_count: count of elements in array extn_eids
|
||||
* @start_offset: Offset from where the IEs in the bss_desc should be parsed
|
||||
* @bss_desc - pointer to Bss Description.
|
||||
* @bss_desc: pointer to Bss Description.
|
||||
*
|
||||
* Return: Remaining length of IEs in current bss_desc which are not included
|
||||
* in pIes.
|
||||
@ -2337,7 +2285,7 @@ rrm_process_chan_load_report_xmit(struct mac_context *mac_ctx,
|
||||
sizeof(channel_load_report->bw_ind));
|
||||
qdf_mem_copy(&channel_load_report->wide_bw, &chan_load_ind->wide_bw,
|
||||
sizeof(channel_load_report->wide_bw));
|
||||
pe_err("send chan load report for bssId:"QDF_MAC_ADDR_FMT" reg_class:%d, channel:%d, measStartTime:%llu, measDuration:%d, chan_load:%d",
|
||||
pe_err("send chan load report for bssId:" QDF_MAC_ADDR_FMT " reg_class:%d, channel:%d, measStartTime:%lu, measDuration:%d, chan_load:%d",
|
||||
QDF_MAC_ADDR_REF(sessionBssId.bytes),
|
||||
channel_load_report->op_class,
|
||||
channel_load_report->channel,
|
||||
@ -2628,18 +2576,11 @@ end:
|
||||
}
|
||||
|
||||
/**
|
||||
* rrm_get_start_tsf
|
||||
* rrm_get_start_tsf() - Get the Start TSF.
|
||||
* @mac: pointer to mac context
|
||||
* @pStartTSF: store star TSF in this buffer.
|
||||
*
|
||||
* FUNCTION: Get the Start TSF.
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param startTSF - store star TSF in this buffer.
|
||||
* @return txPower
|
||||
* Return: None
|
||||
*/
|
||||
void rrm_get_start_tsf(struct mac_context *mac, uint32_t *pStartTSF)
|
||||
{
|
||||
@ -2650,19 +2591,12 @@ void rrm_get_start_tsf(struct mac_context *mac, uint32_t *pStartTSF)
|
||||
|
||||
/* -------------------------------------------------------------------- */
|
||||
/**
|
||||
* rrm_get_capabilities
|
||||
* rrm_get_capabilities() - Returns a pointer to tpRRMCaps with all the
|
||||
* caps enabled in RRM
|
||||
* @mac: pointer to mac context
|
||||
* @pe_session: pointer to pe session
|
||||
*
|
||||
* FUNCTION:
|
||||
* Returns a pointer to tpRRMCaps with all the caps enabled in RRM
|
||||
*
|
||||
* LOGIC:
|
||||
*
|
||||
* ASSUMPTIONS:
|
||||
*
|
||||
* NOTE:
|
||||
*
|
||||
* @param pe_session
|
||||
* @return pointer to tRRMCaps
|
||||
* Return: pointer to tRRMCaps
|
||||
*/
|
||||
tpRRMCaps rrm_get_capabilities(struct mac_context *mac, struct pe_session *pe_session)
|
||||
{
|
||||
@ -2741,9 +2675,8 @@ void rrm_cleanup(struct mac_context *mac, uint8_t idx)
|
||||
/**
|
||||
* lim_update_rrm_capability() - Update PE context's rrm capability
|
||||
* @mac_ctx: Global pointer to MAC context
|
||||
* @join_req: Pointer to SME join request.
|
||||
*
|
||||
* Update PE context's rrm capability based on SME join request.
|
||||
* Update PE context's rrm capability
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
|
@ -759,9 +759,9 @@ out:
|
||||
|
||||
/**
|
||||
* populate_dot11f_ds_params() - To populate DS IE params
|
||||
* mac_ctx: Pointer to global mac context
|
||||
* dot11f_param: pointer to DS params IE
|
||||
* freq: freq
|
||||
* @mac_ctx: Pointer to global mac context
|
||||
* @dot11f_param: pointer to DS params IE
|
||||
* @freq: freq
|
||||
*
|
||||
* This routine will populate DS param in management frame like
|
||||
* beacon, probe response, and etc.
|
||||
@ -2174,10 +2174,10 @@ populate_dot11f_supp_rates(struct mac_context *mac,
|
||||
/**
|
||||
* populate_dot11f_rates_tdls() - populate supported rates and
|
||||
* extended supported rates IE.
|
||||
* @p_mac global - header.
|
||||
* @p_supp_rates - pointer to supported rates IE
|
||||
* @p_ext_supp_rates - pointer to extended supported rates IE
|
||||
* @curr_oper_channel - current operating channel
|
||||
* @p_mac: Pointer to global mac context
|
||||
* @p_supp_rates: pointer to supported rates IE
|
||||
* @p_ext_supp_rates: pointer to extended supported rates IE
|
||||
* @curr_oper_channel: current operating channel
|
||||
*
|
||||
* This function populates the supported rates and extended supported
|
||||
* rates IE based in the STA capability. If the number of rates
|
||||
@ -7135,7 +7135,7 @@ populate_dot11f_chan_load_report(struct mac_context *mac,
|
||||
dot11f->report.channel_load_report.bw_indication.ccfs1 = channel_load_report->bw_ind.center_freq_seg1;
|
||||
}
|
||||
|
||||
pe_debug("regClass %d chan %d meas_time %d meas_dur %d, chan_load %d",
|
||||
pe_debug("regClass %d chan %d meas_time %lu meas_dur %d, chan_load %d",
|
||||
dot11f->report.channel_load_report.op_class,
|
||||
dot11f->report.channel_load_report.channel,
|
||||
channel_load_report->rrm_scan_tsf,
|
||||
@ -7509,7 +7509,7 @@ void populate_dot11f_timeout_interval(struct mac_context *mac,
|
||||
|
||||
/**
|
||||
* populate_dot11f_timing_advert_frame() - Populate the TA mgmt frame fields
|
||||
* @mac: the MAC context
|
||||
* @mac_ctx: the MAC context
|
||||
* @frame: pointer to the TA frame
|
||||
*
|
||||
* Return: The SIR status.
|
||||
@ -7860,6 +7860,8 @@ populate_dot11f_he_bss_color_change(struct mac_context *mac_ctx,
|
||||
* lim_get_ext_ie_ptr_from_ext_id() - Find out ext ie
|
||||
* @ie: source ie address
|
||||
* @ie_len: source ie length
|
||||
* @oui: oui buffer
|
||||
* @oui_size: oui size
|
||||
*
|
||||
* This API is used to find out ext ie from ext id
|
||||
*
|
||||
@ -8936,6 +8938,7 @@ QDF_STATUS lim_ieee80211_unpack_ehtcap(const uint8_t *eht_cap_ie,
|
||||
ehtcap_ie_get(ehtcap->mcs_nss_map_bytes[idx],
|
||||
EHTCAP_TX_MCS_NSS_MAP_IDX,
|
||||
EHTCAP_TX_MCS_NSS_MAP_BITS);
|
||||
idx++;
|
||||
|
||||
dot11f_eht_cap->bw_20_rx_max_nss_for_mcs_8_and_9 =
|
||||
ehtcap_ie_get(ehtcap->mcs_nss_map_bytes[idx],
|
||||
@ -11426,6 +11429,7 @@ QDF_STATUS populate_dot11f_twt_extended_caps(struct mac_context *mac_ctx,
|
||||
/**
|
||||
* wlan_fill_single_pmk_ap_cap_from_scan_entry() - WAP3_SPMK VSIE from scan
|
||||
* entry
|
||||
* @mac_ctx: pointer to mac_context
|
||||
* @bss_desc: BSS Descriptor
|
||||
* @scan_entry: scan entry
|
||||
*
|
||||
|
@ -5536,11 +5536,6 @@ static void csr_fill_connected_profile(struct mac_context *mac_ctx,
|
||||
goto purge_list;
|
||||
|
||||
wlan_fill_bss_desc_from_scan_entry(mac_ctx, bss_desc, cur_node->entry);
|
||||
pe_debug("Dump scan entry frm:");
|
||||
QDF_TRACE_HEX_DUMP(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_DEBUG,
|
||||
cur_node->entry->raw_frame.ptr,
|
||||
cur_node->entry->raw_frame.len);
|
||||
|
||||
src_cfg.uint_value = bss_desc->mbo_oce_enabled_ap;
|
||||
wlan_cm_roam_cfg_set_value(mac_ctx->psoc, vdev_id, MBO_OCE_ENABLED_AP,
|
||||
&src_cfg);
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -2686,31 +2686,16 @@ QDF_STATUS wma_tx_packet(void *wma_context, void *tx_frame, uint16_t frmLen,
|
||||
}
|
||||
|
||||
if (pFc->type == SIR_MAC_MGMT_FRAME) {
|
||||
if ((mac->mlme_cfg->gen.debug_packet_log &
|
||||
if (((mac->mlme_cfg->gen.debug_packet_log &
|
||||
DEBUG_PKTLOG_TYPE_MGMT) &&
|
||||
(pFc->subType != SIR_MAC_MGMT_PROBE_REQ) &&
|
||||
(pFc->subType != SIR_MAC_MGMT_PROBE_RSP) &&
|
||||
(pFc->subType != SIR_MAC_MGMT_ACTION)) {
|
||||
wma_debug("TX MGMT - Type %hu, SubType %hu seq_num[%d]",
|
||||
pFc->type, pFc->subType,
|
||||
((mHdr->seqControl.seqNumHi << 4) |
|
||||
mHdr->seqControl.seqNumLo));
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_WMA,
|
||||
QDF_TRACE_LEVEL_DEBUG, pData,
|
||||
frmLen);
|
||||
} else if ((mac->mlme_cfg->gen.debug_packet_log &
|
||||
DEBUG_PKTLOG_TYPE_ACTION) &&
|
||||
(pFc->subType == SIR_MAC_MGMT_ACTION)) {
|
||||
wma_debug("TX MGMT - Type %hu, SubType %hu seq_num[%d]",
|
||||
pFc->type, pFc->subType,
|
||||
((mHdr->seqControl.seqNumHi << 4) |
|
||||
mHdr->seqControl.seqNumLo));
|
||||
qdf_trace_hex_dump(QDF_MODULE_ID_WMA,
|
||||
QDF_TRACE_LEVEL_DEBUG, pData,
|
||||
frmLen);
|
||||
}
|
||||
(pFc->subType != SIR_MAC_MGMT_ACTION)) ||
|
||||
((mac->mlme_cfg->gen.debug_packet_log &
|
||||
DEBUG_PKTLOG_TYPE_ACTION) &&
|
||||
(pFc->subType == SIR_MAC_MGMT_ACTION)))
|
||||
mgmt_txrx_frame_hex_dump(pData, frmLen, true);
|
||||
}
|
||||
|
||||
if (wlan_reg_is_5ghz_ch_freq(wma_handle->interfaces[vdev_id].ch_freq))
|
||||
is_5g = true;
|
||||
|
||||
|
@ -473,6 +473,10 @@ wma_release_vdev_ref(struct wma_txrx_node *iface)
|
||||
struct wlan_objmgr_vdev *vdev;
|
||||
|
||||
vdev = iface->vdev;
|
||||
if (!vdev) {
|
||||
wma_debug("vdev context is NULL");
|
||||
return;
|
||||
}
|
||||
wma_debug("vdev state: %d", vdev->obj_state);
|
||||
if (vdev->obj_state != WLAN_OBJ_STATE_LOGICALLY_DELETED) {
|
||||
wma_debug("no vdev delete");
|
||||
|
@ -689,9 +689,9 @@ wma_delete_all_peers(tp_wma_handle wma,
|
||||
* respect to the self sta and the peer after roaming and completes
|
||||
* the roam synch propagation with respect to WMA layer.
|
||||
*
|
||||
* Return: None
|
||||
* Return: QDF_STATUS
|
||||
*/
|
||||
static void
|
||||
static QDF_STATUS
|
||||
wma_roam_update_vdev(tp_wma_handle wma,
|
||||
struct roam_offload_synch_ind *roam_synch_ind_ptr,
|
||||
uint8_t roamed_vdev_id)
|
||||
@ -707,8 +707,7 @@ wma_roam_update_vdev(tp_wma_handle wma,
|
||||
wma->interfaces[vdev_id].nss = roam_synch_ind_ptr->nss;
|
||||
|
||||
/* update channel width */
|
||||
wma->interfaces[vdev_id].chan_width =
|
||||
roam_synch_ind_ptr->chan_width;
|
||||
wma->interfaces[vdev_id].chan_width = roam_synch_ind_ptr->chan_width;
|
||||
/* Fill link freq from roam_synch_ind */
|
||||
if (is_multi_link_roam(roam_synch_ind_ptr))
|
||||
wma->interfaces[vdev_id].ch_freq =
|
||||
@ -718,9 +717,8 @@ wma_roam_update_vdev(tp_wma_handle wma,
|
||||
roam_synch_ind_ptr->chan_freq;
|
||||
|
||||
add_sta_params = qdf_mem_malloc(sizeof(*add_sta_params));
|
||||
if (!add_sta_params) {
|
||||
return;
|
||||
}
|
||||
if (!add_sta_params)
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
if (is_multi_link_roam(roam_synch_ind_ptr))
|
||||
mlo_get_sta_link_mac_addr(vdev_id, roam_synch_ind_ptr,
|
||||
@ -745,35 +743,45 @@ wma_roam_update_vdev(tp_wma_handle wma,
|
||||
|
||||
add_sta_params->staType = STA_ENTRY_SELF;
|
||||
add_sta_params->smesessionId = vdev_id;
|
||||
qdf_mem_copy(&add_sta_params->bssId, &mac_addr,
|
||||
QDF_MAC_ADDR_SIZE);
|
||||
qdf_mem_copy(&add_sta_params->bssId, &mac_addr, QDF_MAC_ADDR_SIZE);
|
||||
add_sta_params->assocId = roam_synch_ind_ptr->aid;
|
||||
|
||||
bssid = wma_get_vdev_bssid(wma->interfaces[vdev_id].vdev);
|
||||
if (!bssid) {
|
||||
wma_err("Failed to get bssid for vdev_%d", vdev_id);
|
||||
return;
|
||||
return QDF_STATUS_E_INVAL;
|
||||
}
|
||||
|
||||
is_assoc_peer = wlan_vdev_mlme_get_is_mlo_vdev(wma->psoc, vdev_id);
|
||||
if (is_multi_link_roam(roam_synch_ind_ptr)) {
|
||||
wma_create_peer(wma, mac_addr.bytes,
|
||||
WMI_PEER_TYPE_DEFAULT, vdev_id,
|
||||
roam_synch_ind_ptr->bssid.bytes,
|
||||
is_assoc_peer);
|
||||
status = wma_create_peer(wma, mac_addr.bytes,
|
||||
WMI_PEER_TYPE_DEFAULT, vdev_id,
|
||||
roam_synch_ind_ptr->bssid.bytes,
|
||||
is_assoc_peer);
|
||||
} else {
|
||||
wma_create_peer(wma, mac_addr.bytes,
|
||||
WMI_PEER_TYPE_DEFAULT,
|
||||
vdev_id,
|
||||
NULL,
|
||||
is_assoc_peer);
|
||||
status = wma_create_peer(wma, mac_addr.bytes,
|
||||
WMI_PEER_TYPE_DEFAULT, vdev_id, NULL,
|
||||
is_assoc_peer);
|
||||
}
|
||||
|
||||
if (is_multi_link_roam(roam_synch_ind_ptr))
|
||||
lim_roam_mlo_create_peer(wma->mac_context,
|
||||
roam_synch_ind_ptr,
|
||||
vdev_id,
|
||||
mac_addr.bytes);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
wma_err("Failed to create peer " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(mac_addr.bytes));
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (is_multi_link_roam(roam_synch_ind_ptr)) {
|
||||
status = lim_roam_mlo_create_peer(wma->mac_context,
|
||||
roam_synch_ind_ptr, vdev_id,
|
||||
mac_addr.bytes);
|
||||
|
||||
/* The created peer will be destroyed on HO failure cleanup */
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
wma_err("Failed to attach MLO peer " QDF_MAC_ADDR_FMT,
|
||||
QDF_MAC_ADDR_REF(mac_addr.bytes));
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
|
||||
if (wlan_vdev_mlme_get_opmode(wma->interfaces[vdev_id].vdev) ==
|
||||
QDF_STA_MODE)
|
||||
@ -796,6 +804,7 @@ wma_roam_update_vdev(tp_wma_handle wma,
|
||||
roam_synch_ind_ptr);
|
||||
end:
|
||||
qdf_mem_free(add_sta_params);
|
||||
return status;
|
||||
}
|
||||
|
||||
static void wma_update_phymode_on_roam(tp_wma_handle wma,
|
||||
@ -3148,19 +3157,24 @@ QDF_STATUS wma_send_ht40_obss_scanind(tp_wma_handle wma,
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
|
||||
void cm_roam_update_vdev(struct wlan_objmgr_vdev *vdev,
|
||||
struct roam_offload_synch_ind *sync_ind)
|
||||
QDF_STATUS cm_roam_update_vdev(struct wlan_objmgr_vdev *vdev,
|
||||
struct roam_offload_synch_ind *sync_ind)
|
||||
{
|
||||
QDF_STATUS status;
|
||||
tp_wma_handle wma = cds_get_context(QDF_MODULE_ID_WMA);
|
||||
struct qdf_mac_addr *self_mac_addr;
|
||||
uint8_t vdev_id;
|
||||
|
||||
if (!wma)
|
||||
return;
|
||||
return QDF_STATUS_E_INVAL;
|
||||
|
||||
vdev_id = wlan_vdev_get_id(vdev);
|
||||
|
||||
wma_roam_update_vdev(wma, sync_ind, vdev_id);
|
||||
status = wma_roam_update_vdev(wma, sync_ind, vdev_id);
|
||||
if (QDF_IS_STATUS_ERROR(status)) {
|
||||
wma_debug("VDEV update failed for roam on %d", vdev_id);
|
||||
return status;
|
||||
}
|
||||
|
||||
if (!wlan_vdev_mlme_is_mlo_vdev(vdev)) {
|
||||
self_mac_addr =
|
||||
@ -3170,13 +3184,15 @@ void cm_roam_update_vdev(struct wlan_objmgr_vdev *vdev,
|
||||
|
||||
if (wlan_vdev_mlme_is_mlo_vdev(vdev) &&
|
||||
wlan_vdev_mlme_is_mlo_link_vdev(vdev))
|
||||
return;
|
||||
return QDF_STATUS_SUCCESS;
|
||||
|
||||
self_mac_addr = (struct qdf_mac_addr *)wlan_vdev_mlme_get_mldaddr(vdev);
|
||||
|
||||
update_deflink:
|
||||
/* Set the assoc vdev as DP deflink after roaming */
|
||||
wlan_dp_update_def_link(wma->psoc, self_mac_addr, vdev);
|
||||
|
||||
return QDF_STATUS_SUCCESS;
|
||||
}
|
||||
|
||||
QDF_STATUS
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2013-2021 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2021-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2021-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -4449,6 +4449,8 @@ void wma_remove_bss_peer_on_failure(tp_wma_handle wma, uint8_t vdev_id)
|
||||
return;
|
||||
}
|
||||
|
||||
wma_delete_peer_mlo(wma->psoc, bss_peer.bytes);
|
||||
|
||||
wma_remove_peer(wma, bss_peer.bytes, vdev_id, false);
|
||||
}
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2011, 2014-2015 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -94,7 +94,7 @@ struct wlan_diag_data {
|
||||
unsigned int word0; /* type, length */
|
||||
unsigned int target_time;
|
||||
unsigned int code; /* Diag log or event Code */
|
||||
uint8_t payload[0];
|
||||
uint8_t payload[];
|
||||
};
|
||||
|
||||
struct dbglog_slot {
|
||||
@ -103,7 +103,7 @@ struct dbglog_slot {
|
||||
unsigned int length;
|
||||
unsigned int dropped;
|
||||
/* max ATH6KL_FWLOG_PAYLOAD_SIZE bytes */
|
||||
uint8_t payload[0];
|
||||
uint8_t payload[];
|
||||
} __packed;
|
||||
|
||||
typedef struct event_report_s {
|
||||
|
@ -1,6 +1,6 @@
|
||||
/*
|
||||
* Copyright (c) 2012-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*
|
||||
* Permission to use, copy, modify, and/or distribute this software for
|
||||
* any purpose with or without fee is hereby granted, provided that the
|
||||
@ -207,7 +207,7 @@ struct ath_pktlog_txctl {
|
||||
struct ath_pktlog_tx_status {
|
||||
struct ath_pktlog_hdr pl_hdr;
|
||||
void *ds_status;
|
||||
int32_t misc[0]; /* Can be used for HT specific or other misc info */
|
||||
int32_t misc[]; /* Can be used for HT specific or other misc info */
|
||||
} __ATTRIB_PACK;
|
||||
|
||||
struct ath_pktlog_msdu_info {
|
||||
@ -282,7 +282,7 @@ struct ath_pktlog_buf {
|
||||
uint32_t msg_index;
|
||||
/* Offset for read */
|
||||
loff_t offset;
|
||||
char log_data[0];
|
||||
char log_data[];
|
||||
};
|
||||
|
||||
#define PKTLOG_MOV_RD_IDX(_rd_offset, _log_buf, _log_size) \
|
||||
|
@ -18,6 +18,9 @@ _target_chipset_map = {
|
||||
"volcano": [
|
||||
"qca6750",
|
||||
],
|
||||
"parrot": [
|
||||
"qca6750",
|
||||
],
|
||||
}
|
||||
|
||||
_chipset_hw_map = {
|
||||
|
Loading…
Reference in New Issue
Block a user