Merge f608c16908 on remote branch

Change-Id: I86a911ca7563df7b48ffa2c7223f543ca1ffe055
This commit is contained in:
Linux Build Service Account 2024-07-21 14:03:28 -07:00
commit 1351c18d6f
54 changed files with 1200 additions and 500 deletions

View File

@ -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

View File

@ -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[];
};
/**

View File

@ -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;
}

View File

@ -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)

View File

@ -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, &param);

View File

@ -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;
}

View File

@ -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);
}

View File

@ -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",

View File

@ -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 =

View File

@ -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_ */

View File

@ -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;
}

View File

@ -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

View File

@ -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);
};
/**

View File

@ -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,

View File

@ -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

View File

@ -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);
}

View File

@ -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;

View File

@ -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)
{

View File

@ -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);
}

View 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

View 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

View File

@ -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

View File

@ -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;

View File

@ -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,

View File

@ -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);

View File

@ -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)

View File

@ -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[];
};

View File

@ -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;

View File

@ -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) {

View File

@ -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)

View File

@ -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 */

View File

@ -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 */

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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);
}

View File

@ -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

View File

@ -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);
}

View File

@ -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);

View File

@ -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)) {

View File

@ -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

View File

@ -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)

View File

@ -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;

View File

@ -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;
}

View File

@ -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
*/

View File

@ -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
*

View File

@ -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);

View File

@ -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;

View File

@ -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");

View File

@ -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

View File

@ -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);
}

View File

@ -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 {

View File

@ -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) \

View File

@ -18,6 +18,9 @@ _target_chipset_map = {
"volcano": [
"qca6750",
],
"parrot": [
"qca6750",
],
}
_chipset_hw_map = {