qcacld-3.0: Replace the CSR API with connection mgr API

Replace the CSR API to get connect info with cnx mgr API.

Change-Id: Ia037016a6eab0fd4ebec6cbbb991ff255b43bb2d
CRs-Fixed: 2847585
Cette révision appartient à :
gaurank kathpalia
2021-01-04 15:33:28 +05:30
révisé par snandini
Parent d231335ecb
révision deceac79c3
8 fichiers modifiés avec 334 ajouts et 184 suppressions

Voir le fichier

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2015, 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2012-2015, 2020-2021, The Linux Foundation. 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
@@ -178,6 +178,14 @@ QDF_STATUS
cm_csr_connect_done_ind(struct wlan_objmgr_vdev *vdev,
struct wlan_cm_connect_resp *rsp);
/**
* cm_is_vdevid_connected() - check if vdev_id is in conneted state
* @vdev: vdev pointer
*
* Return: bool
*/
bool cm_is_vdevid_connected(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id);
/**
* cm_disconnect_start_ind() - Connection manager ext disconnect start
* indication

Voir le fichier

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2015, 2020, The Linux Foundation. All rights reserved.
* Copyright (c) 2012-2015, 2020-2021, The Linux Foundation. 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
@@ -286,3 +286,21 @@ void wlan_cm_free_connect_rsp(struct cm_vdev_join_rsp *rsp)
qdf_mem_zero(rsp, sizeof(*rsp));
qdf_mem_free(rsp);
}
bool cm_is_vdevid_connected(struct wlan_objmgr_pdev *pdev, uint8_t vdev_id)
{
struct wlan_objmgr_vdev *vdev;
bool connected;
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(pdev, vdev_id,
WLAN_MLME_CM_ID);
if (!vdev) {
mlme_err("vdev_id: %d: vdev not found", vdev_id);
return false;
}
connected = cm_is_vdev_connected(vdev);
wlan_objmgr_vdev_release_ref(vdev, WLAN_MLME_CM_ID);
return connected;
}

Voir le fichier

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2011-2021 The Linux Foundation. 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
@@ -102,8 +102,6 @@ enum csr_scan_reason {
enum csr_roam_reason {
/* Roaming because we've not established the initial connection. */
eCsrNoConnection,
/* roaming because LIM reported a cap change in the associated AP. */
eCsrCapsChange,
#ifndef FEATURE_CM_ENABLE
/* roaming because someone asked us to Disassoc & stay disassociated. */
eCsrForcedDisassoc,
@@ -854,13 +852,14 @@ void csr_set_global_cfgs(struct mac_context *mac);
void csr_set_default_dot11_mode(struct mac_context *mac);
bool csr_is_conn_state_disconnected(struct mac_context *mac,
uint32_t sessionId);
bool csr_is_conn_state_connected_infra(struct mac_context *mac,
uint32_t sessionId);
bool csr_is_conn_state_connected(struct mac_context *mac,
uint32_t sessionId);
#ifndef FEATURE_CM_ENABLE
bool csr_is_conn_state_connected_infra(struct mac_context *mac,
uint32_t sessionId);
bool csr_is_conn_state_infra(struct mac_context *mac,
uint32_t sessionId);
#endif
bool csr_is_conn_state_wds(struct mac_context *mac, uint32_t sessionId);
bool csr_is_conn_state_connected_wds(struct mac_context *mac,
uint32_t sessionId);
@@ -869,17 +868,6 @@ bool csr_is_conn_state_disconnected_wds(struct mac_context *mac,
bool csr_is_any_session_in_connect_state(struct mac_context *mac);
bool csr_is_all_session_disconnected(struct mac_context *mac);
/**
* csr_get_connected_infra() - get the session id of the connected infra
* @mac_ctx: pointer to global mac structure
*
* The function check if any infra is present in connected state and if present
* return the session id of the connected infra else if no infra is in connected
* state return WLAN_UMAC_VDEV_ID_MAX
*
* Return: session id of the connected infra
*/
uint8_t csr_get_connected_infra(struct mac_context *mac_ctx);
bool csr_is_concurrent_session_running(struct mac_context *mac);
bool csr_is_infra_ap_started(struct mac_context *mac);
bool csr_is_valid_mc_concurrent_session(struct mac_context *mac,
@@ -913,18 +901,18 @@ void csr_set_cfg_privacy(struct mac_context *mac,
bool fPrivacy);
/**
* csr_get_infra_operation_chan_freq() - get operating chan freq of
* csr_get_operation_chan_freq() - get operating chan freq of
* given vdev id
* @mac_ctx: Pointer to mac context
* @vdev: vdev
* @vdev_id: vdev id
*
* Return: chan freq of given vdev id
*/
uint32_t csr_get_infra_operation_chan_freq(
struct mac_context *mac, uint8_t vdev_id);
qdf_freq_t csr_get_operation_chan_freq(struct mac_context *mac,
struct wlan_objmgr_vdev *vdev,
uint8_t vdev_id);
bool csr_is_session_client_and_connected(struct mac_context *mac,
uint8_t sessionId);
/**
* csr_get_concurrent_operation_freq() - To get concurrent operating freq
* @mac_ctx: Pointer to mac context

Voir le fichier

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2012-2021 The Linux Foundation. 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
@@ -5450,27 +5450,40 @@ static bool sme_search_in_base_ch_freq_lst(
static void sme_disconnect_connected_sessions(struct mac_context *mac_ctx,
enum wlan_reason_code reason)
{
uint8_t session_id, found = false;
uint32_t chan_freq;
uint8_t vdev_id, found = false;
qdf_freq_t chan_freq;
struct wlan_objmgr_vdev *vdev;
enum QDF_OPMODE op_mode;
for (session_id = 0; session_id < WLAN_MAX_VDEVS; session_id++) {
if (!csr_is_session_client_and_connected(mac_ctx, session_id))
for (vdev_id = 0; vdev_id < WLAN_MAX_VDEVS; vdev_id++) {
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac_ctx->pdev,
vdev_id,
WLAN_LEGACY_MAC_ID);
if (!vdev)
continue;
op_mode = wlan_vdev_mlme_get_opmode(vdev);
/* check only for STA and CLI */
if (op_mode != QDF_STA_MODE && op_mode != QDF_P2P_CLIENT_MODE) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
continue;
}
chan_freq = csr_get_operation_chan_freq(mac_ctx, vdev, vdev_id);
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
if (!chan_freq)
continue;
found = false;
/* Session is connected.Check the channel */
chan_freq = csr_get_infra_operation_chan_freq(
mac_ctx, session_id);
sme_debug("Current Operating channel : %d, session :%d",
chan_freq, session_id);
sme_debug("Current Operating channel : %d, vdev_id :%d",
chan_freq, vdev_id);
found = sme_search_in_base_ch_freq_lst(mac_ctx, chan_freq);
if (!found) {
sme_debug("Disconnect Session: %d", session_id);
sme_debug("Disconnect Session: %d", vdev_id);
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
cm_disconnect(mac_ctx->psoc, session_id,
cm_disconnect(mac_ctx->psoc, vdev_id,
CM_MLME_DISCONNECT, reason, NULL);
#else
csr_roam_disconnect(mac_ctx, session_id,
sme_debug("Disconnect Session: %d", vdev_id);
csr_roam_disconnect(mac_ctx, vdev_id,
eCSR_DISCONNECT_REASON_UNSPECIFIED,
reason);
#endif
@@ -5495,8 +5508,13 @@ QDF_STATUS sme_8023_multicast_list(mac_handle_t mac_handle, uint8_t sessionId,
/* Find the connected Infra / P2P_client connected session */
pSession = CSR_GET_SESSION(mac, sessionId);
if (!CSR_IS_SESSION_VALID(mac, sessionId) ||
(!csr_is_conn_state_infra(mac, sessionId) &&
!csr_is_ndi_started(mac, sessionId))) {
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
(!cm_is_vdevid_connected(mac->pdev, sessionId) &&
#else
(!csr_is_conn_state_infra(mac, sessionId) &&
#endif
!csr_is_ndi_started(mac, sessionId))) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
"%s: Unable to find the session Id: %d", __func__,
sessionId);
@@ -5507,14 +5525,24 @@ QDF_STATUS sme_8023_multicast_list(mac_handle_t mac_handle, uint8_t sessionId,
if (!request_buf)
return QDF_STATUS_E_NOMEM;
if (!csr_is_conn_state_connected_infra(mac, sessionId) &&
!csr_is_ndi_started(mac, sessionId)) {
QDF_TRACE(QDF_MODULE_ID_SME, QDF_TRACE_LEVEL_ERROR,
"%s: Request ignored, session %d is not connected or started",
__func__, sessionId);
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (!cm_is_vdevid_connected(mac->pdev, sessionId) &&
!csr_is_ndi_started(mac, sessionId)) {
sme_err("Request ignored, session %d is not connected or started",
sessionId);
qdf_mem_free(request_buf);
return QDF_STATUS_E_FAILURE;
}
#else
if (!csr_is_conn_state_connected_infra(mac, sessionId) &&
!csr_is_ndi_started(mac, sessionId)) {
sme_err("Request ignored, session %d is not connected or started",
sessionId);
qdf_mem_free(request_buf);
return QDF_STATUS_E_FAILURE;
}
#endif
qdf_mem_copy(request_buf, pMulticastAddrs,
sizeof(tSirRcvFltMcAddrList));
@@ -8364,11 +8392,20 @@ int sme_send_addba_req(mac_handle_t mac_handle, uint8_t session_id, uint8_t tid,
struct send_add_ba_req *send_ba_req;
struct csr_roam_session *csr_session = NULL;
if (!csr_is_conn_state_connected_infra(mac_ctx, session_id)) {
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (!cm_is_vdevid_connected(mac_ctx->pdev, session_id)) {
sme_err("STA not infra/connected state session_id: %d",
session_id);
session_id);
return -EINVAL;
}
#else
if (!csr_is_conn_state_connected_infra(mac_ctx, session_id)) {
sme_err("STA not infra/connected state session_id: %d",
session_id);
return -EINVAL;
}
#endif
csr_session = CSR_GET_SESSION(mac_ctx, session_id);
if (!csr_session) {
sme_err("CSR session is NULL");
@@ -11554,10 +11591,18 @@ sme_validate_session_for_cap_update(struct mac_context *mac_ctx,
sme_err("Session does not exist, Session_id: %d", session_id);
return QDF_STATUS_E_INVAL;
}
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (!cm_is_vdevid_connected(mac_ctx->pdev, session_id)) {
sme_debug("STA is not connected, Session_id: %d", session_id);
return QDF_STATUS_E_INVAL;
}
#else
if (!csr_is_conn_state_connected_infra(mac_ctx, session_id)) {
sme_debug("STA is not connected, Session_id: %d", session_id);
return QDF_STATUS_E_INVAL;
}
#endif
return QDF_STATUS_SUCCESS;
}
@@ -11708,12 +11753,18 @@ int sme_config_action_tx_in_tb_ppdu(mac_handle_t mac_handle, uint8_t session_id,
struct scheduler_msg msg = {0};
struct sir_cfg_action_frm_tb_ppdu *cfg_msg;
if (!csr_is_conn_state_connected_infra(mac_ctx, session_id)) {
sme_debug("STA not in connected state Session_id: %d",
session_id);
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (!cm_is_vdevid_connected(mac_ctx->pdev, session_id)) {
sme_debug("STA is not connected, Session_id: %d", session_id);
return -EINVAL;
}
#else
if (!csr_is_conn_state_connected_infra(mac_ctx, session_id)) {
sme_debug("STA is not connected, Session_id: %d", session_id);
return -EINVAL;
}
#endif
cfg_msg = qdf_mem_malloc(sizeof(*cfg_msg));
if (!cfg_msg)
return -EIO;
@@ -15139,7 +15190,7 @@ int16_t sme_get_oper_chan_freq(struct wlan_objmgr_vdev *vdev)
session = CSR_GET_SESSION(mac_ctx, vdev_id);
return csr_get_infra_operation_chan_freq(mac_ctx, vdev_id);
return csr_get_operation_chan_freq(mac_ctx, vdev, vdev_id);
}
enum phy_ch_width sme_get_oper_ch_width(struct wlan_objmgr_vdev *vdev)

Voir le fichier

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2015-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2015-2021 The Linux Foundation. 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
@@ -354,11 +354,20 @@ QDF_STATUS sme_enable_sta_ps_check(struct mac_context *mac_ctx,
* also if command is power save disable there is not need to check
* for connected state as firmware can handle this
*/
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (!cm_is_vdevid_connected(mac_ctx->pdev, session_id)) {
sme_debug("STA not infra/connected state Session_id: %d",
session_id);
return QDF_STATUS_E_FAILURE;
}
#else
if (!csr_is_conn_state_connected_infra(mac_ctx, session_id)) {
sme_debug("STA not infra/connected state Session_id: %d",
session_id);
return QDF_STATUS_E_FAILURE;
}
#endif
return QDF_STATUS_SUCCESS;
}
@@ -392,7 +401,12 @@ QDF_STATUS sme_ps_enable_disable(mac_handle_t mac_handle, uint32_t session_id,
* But kernel expects return status success even
* in the disconnected state.
*/
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (!cm_is_vdevid_connected(mac_ctx->pdev, session_id))
#else
if (!csr_is_conn_state_connected_infra(mac_ctx, session_id))
#endif
status = QDF_STATUS_SUCCESS;
return status;
}

Voir le fichier

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2012-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2012-2021 The Linux Foundation. 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
@@ -364,10 +364,11 @@ static void csr_roaming_state_config_cnf_processor(struct mac_context *mac,
tSmeCmd *pCommand, uint8_t session_id);
static QDF_STATUS csr_roam_open(struct mac_context *mac);
static QDF_STATUS csr_roam_close(struct mac_context *mac);
#ifndef FEATURE_CM_ENABLE
static bool csr_roam_is_same_profile_keys(struct mac_context *mac,
tCsrRoamConnectedProfile *pConnProfile,
struct csr_roam_profile *pProfile2);
#endif
static QDF_STATUS csr_roam_start_roaming_timer(struct mac_context *mac,
uint32_t vdev_id,
uint32_t interval);
@@ -475,6 +476,7 @@ bool csr_roam_is_handoff_in_progress(struct mac_context *mac, uint8_t sessionId)
return csr_neighbor_roam_is_handoff_in_progress(mac, sessionId);
}
#ifndef FEATURE_CM_ENABLE
static QDF_STATUS
csr_roam_issue_disassociate(struct mac_context *mac, uint32_t sessionId,
enum csr_roam_substate NewSubstate,
@@ -545,6 +547,7 @@ csr_roam_issue_disassociate(struct mac_context *mac, uint32_t sessionId,
return status;
}
#endif
static void csr_roam_de_init_globals(struct mac_context *mac)
{
@@ -3881,6 +3884,7 @@ QDF_STATUS csr_roam_save_connected_bss_desc(struct mac_context *mac,
return status;
}
#ifndef FEATURE_CM_ENABLE
static
QDF_STATUS csr_roam_prepare_bss_config(struct mac_context *mac,
struct csr_roam_profile *pProfile,
@@ -4054,6 +4058,7 @@ QDF_STATUS csr_roam_prepare_bss_config(struct mac_context *mac,
return QDF_STATUS_SUCCESS;
}
#endif
QDF_STATUS csr_roam_prepare_bss_config_from_profile(
struct mac_context *mac, struct csr_roam_profile *pProfile,
@@ -4831,6 +4836,7 @@ QDF_STATUS csr_roam_set_bss_config_cfg(struct mac_context *mac, uint32_t session
return QDF_STATUS_SUCCESS;
}
#ifndef FEATURE_CM_ENABLE
/**
* csr_check_for_hidden_ssid_match() - Check if the current connected SSID
* is hidden ssid and if it matches with the roamed AP ssid.
@@ -5141,6 +5147,7 @@ static enum csr_join_state csr_roam_join(struct mac_context *mac,
qdf_mem_free(pIesLocal);
return eRoamState;
}
#endif
static QDF_STATUS
csr_roam_should_roam(struct mac_context *mac, uint32_t sessionId,
@@ -5316,6 +5323,7 @@ static bool csr_roam_select_bss(struct mac_context *mac_ctx,
return status;
}
#ifdef FEATURE_CM_ENABLE
/**
* csr_roam_join_handle_profile() - Handle join scenario based on profile
* @mac_ctx: Global MAC Context
@@ -5328,6 +5336,47 @@ static bool csr_roam_select_bss(struct mac_context *mac_ctx,
*
* Return: None
*/
static void csr_roam_join_handle_profile(struct mac_context *mac_ctx,
uint32_t session_id, tSmeCmd *cmd,
struct csr_roam_info *roam_info_ptr,
enum csr_join_state *roam_state, tCsrScanResultInfo *result,
struct tag_csrscan_result *scan_result)
{
QDF_STATUS status;
struct csr_roam_session *session;
struct csr_roam_profile *profile = &cmd->u.roamCmd.roamProfile;
if (!CSR_IS_SESSION_VALID(mac_ctx, session_id)) {
sme_err("Invalid session id %d", session_id);
return;
}
session = CSR_GET_SESSION(mac_ctx, session_id);
if (CSR_IS_INFRA_AP(profile)) {
/* Attempt to start this WDS... */
csr_roam_assign_default_param(mac_ctx, cmd);
/* For AP WDS, we dont have any BSSDescription */
status = csr_roam_start_wds(mac_ctx, session_id, profile, NULL);
if (QDF_IS_STATUS_SUCCESS(status))
*roam_state = eCsrContinueRoaming;
else
*roam_state = eCsrStopRoaming;
} else if (CSR_IS_NDI(profile)) {
csr_roam_assign_default_param(mac_ctx, cmd);
status = csr_roam_start_ndi(mac_ctx, session_id, profile);
if (QDF_IS_STATUS_SUCCESS(status))
*roam_state = eCsrContinueRoaming;
else
*roam_state = eCsrStopRoaming;
} else {
/* Nothing we can do */
sme_warn("cannot continue without BSS list");
*roam_state = eCsrStopRoaming;
return;
}
}
#else
static void csr_roam_join_handle_profile(struct mac_context *mac_ctx,
uint32_t session_id, tSmeCmd *cmd,
struct csr_roam_info *roam_info_ptr,
@@ -5398,9 +5447,6 @@ static void csr_roam_join_handle_profile(struct mac_context *mac_ctx,
qdf_mem_free(ies_local);
roam_info_ptr->pProfile = profile;
session->bRefAssocStartCnt++;
csr_roam_call_callback(mac_ctx, session_id, roam_info_ptr,
cmd->u.roamCmd.roamId, eCSR_ROAM_ASSOCIATION_START,
eCSR_ROAM_RESULT_NONE);
}
if (cmd->u.roamCmd.pRoamBssEntry) {
/*
@@ -5465,6 +5511,8 @@ static void csr_roam_join_handle_profile(struct mac_context *mac_ctx,
}
}
#endif
/**
* csr_roam_join_next_bss() - Pick the next BSS for join
* @mac_ctx: Global MAC Context
@@ -5592,6 +5640,8 @@ static QDF_STATUS csr_roam(struct mac_context *mac, tSmeCmd *pCommand,
if ((eCsrStopRoaming == RoamState) ||
(eCsrStopRoamingDueToConcurrency == RoamState)) {
bool fComplete = false;
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
/* and if connected in Infrastructure mode... */
if (csr_is_conn_state_infra(mac, sessionId)) {
/* ... then we need to issue a disassociation */
@@ -5607,7 +5657,9 @@ static QDF_STATUS csr_roam(struct mac_context *mac, tSmeCmd *pCommand,
*/
fComplete = true;
}
} else if (csr_is_conn_state_connected_infra_ap(mac,
} else
#endif
if (csr_is_conn_state_connected_infra_ap(mac,
sessionId)) {
substate = eCSR_ROAM_SUBSTATE_STOP_BSS_REQ;
status = csr_roam_issue_stop_bss(mac, sessionId,
@@ -5724,10 +5776,6 @@ csr_roam_trigger_reassociate(struct mac_context *mac_ctx, tSmeCmd *cmd,
roam_info->bss_desc = session_ptr->pConnectBssDesc;
roam_info->pProfile = &cmd->u.roamCmd.roamProfile;
session_ptr->bRefAssocStartCnt++;
csr_roam_call_callback(mac_ctx, session_id, roam_info,
cmd->u.roamCmd.roamId,
eCSR_ROAM_ASSOCIATION_START,
eCSR_ROAM_RESULT_NONE);
sme_debug("calling csr_roam_issue_reassociate");
status = csr_roam_issue_reassociate(mac_ctx, session_id,
@@ -5920,14 +5968,6 @@ QDF_STATUS csr_roam_process_command(struct mac_context *mac, tSmeCmd *pCommand)
status = csr_roam_trigger_reassociate(mac, pCommand,
pSession, sessionId);
break;
case eCsrCapsChange:
sme_err("received eCsrCapsChange ");
csr_roam_state_change(mac, eCSR_ROAMING_STATE_JOINING,
sessionId);
status = csr_roam_issue_disassociate(mac, sessionId,
eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING,
false);
break;
case eCsrSmeIssuedFTReassoc:
sme_debug("received FT Reassoc Req");
status = csr_process_ft_reassoc_roam_command(mac, pCommand);
@@ -9197,7 +9237,13 @@ csr_roaming_state_config_cnf_processor(struct mac_context *mac_ctx,
is_ies_malloced = true;
}
if (csr_is_conn_state_connected_infra(mac_ctx, session_id)) {
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (cm_is_vdevid_connected(mac_ctx->pdev, session_id))
#else
if (csr_is_conn_state_connected_infra(mac_ctx, session_id))
#endif
{
if (csr_is_ssid_equal(mac_ctx, session->pConnectBssDesc,
bss_desc, local_ies)) {
cmd->u.roamCmd.fReassoc = true;
@@ -9366,6 +9412,7 @@ static void csr_roam_roaming_state_reassoc_rsp_processor(struct mac_context *mac
return;
}
}
#ifndef FEATURE_CM_ENABLE
/* In the event that the Reassociation fails, then we need to
* Disassociate the current association and keep roaming. Note
* that we will attempt to Join the AP instead of a Reassoc
@@ -9381,6 +9428,7 @@ static void csr_roam_roaming_state_reassoc_rsp_processor(struct mac_context *mac
csr_roam_complete(mac, eCsrJoinFailure, NULL,
pSmeJoinRsp->vdev_id);
}
#endif
}
}
@@ -9453,6 +9501,7 @@ csr_dequeue_command(struct mac_context *mac_ctx)
cmd->u.roamCmd.roamReason);
}
#ifndef FEATURE_CM_ENABLE
/**
* csr_post_roam_failure() - post roam failure back to csr and issues a disassoc
* @mac: mac global context
@@ -9498,7 +9547,7 @@ csr_post_roam_failure(struct mac_context *mac_ctx,
csr_roam_complete(mac_ctx, eCsrJoinFailure, NULL, session_id);
}
}
#endif
/**
* csr_check_profile_in_scan_cache() - finds if roam profile is present in scan
* cache or not
@@ -9629,7 +9678,9 @@ purge_scan_result:
csr_scan_result_purge(mac, scan_handle_roam_ap);
POST_ROAM_FAILURE:
#ifndef FEATURE_CM_ENABLE
csr_post_roam_failure(mac, session_id, roam_info, NULL);
#endif
qdf_mem_free(roam_info);
return status;
}
@@ -9719,7 +9770,9 @@ void csr_handle_disassoc_ho(struct mac_context *mac, uint32_t session_id)
POST_ROAM_FAILURE:
mlme_set_discon_reason_n_from_ap(mac->psoc, session_id, false,
REASON_HOST_TRIGGERED_ROAM_FAILURE);
#ifndef FEATURE_CM_ENABLE
csr_post_roam_failure(mac, session_id, roam_info, NULL);
#endif
qdf_mem_free(roam_info);
}
#else
@@ -9740,11 +9793,13 @@ void csr_roam_roaming_state_disassoc_rsp_processor(struct mac_context *mac,
sessionId = rsp->sessionId;
sme_debug("sessionId %d", sessionId);
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
if (csr_is_conn_state_infra(mac, sessionId)) {
mac->roam.roamSession[sessionId].connectState =
eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED;
}
#endif
pSession = CSR_GET_SESSION(mac, sessionId);
if (!pSession) {
sme_err("session %d not found", sessionId);
@@ -10245,12 +10300,15 @@ csr_roam_chk_lnk_set_ctx_rsp(struct mac_context *mac_ctx, tSirSmeRsp *msg_ptr)
/* We are done with authentication, whethere succeed or not */
csr_roam_substate_change(mac_ctx, eCSR_ROAM_SUBSTATE_NONE,
sessionId);
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
/* We do it here because this linkup function is not called
* after association when a key needs to be set.
*/
if (csr_is_conn_state_connected_infra(mac_ctx, sessionId))
csr_roam_link_up(mac_ctx,
session->connectedProfile.bssid);
#endif
}
if (eSIR_SME_SUCCESS == pRsp->status_code) {
qdf_copy_macaddr(&roam_info->peerMac, &pRsp->peer_macaddr);
@@ -11514,8 +11572,11 @@ csr_roam_chk_lnk_disassoc_ind(struct mac_context *mac_ctx, tSirSmeRsp *msg_ptr)
session->disconnect_stats.disconnection_cnt++;
session->disconnect_stats.disassoc_by_peer++;
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
if (csr_is_conn_state_infra(mac_ctx, sessionId))
session->connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED;
#endif
#ifndef WLAN_MDM_CODE_REDUCTION_OPT
sme_qos_csr_event_ind(mac_ctx, (uint8_t) sessionId,
SME_QOS_CSR_DISCONNECT_IND, NULL);
@@ -11613,8 +11674,11 @@ csr_roam_chk_lnk_deauth_ind(struct mac_context *mac_ctx, tSirSmeRsp *msg_ptr)
break;
}
/* This is temp ifdef will be removed in near future */
#ifndef FEATURE_CM_ENABLE
if (csr_is_conn_state_infra(mac_ctx, sessionId))
session->connectState = eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED;
#endif
#ifndef WLAN_MDM_CODE_REDUCTION_OPT
sme_qos_csr_event_ind(mac_ctx, (uint8_t) sessionId,
SME_QOS_CSR_DISCONNECT_IND, NULL);
@@ -12337,7 +12401,13 @@ void csr_roam_wait_for_key_time_out_handler(void *pv)
sme_debug("SME pre-auth state timeout");
status = sme_acquire_global_lock(&mac->sme);
if (csr_is_conn_state_connected_infra(mac, vdev_id)) {
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (cm_is_vdevid_connected(mac->pdev, vdev_id))
#else
if (csr_is_conn_state_connected_infra(mac, vdev_id))
#endif
{
csr_roam_link_up(mac,
pSession->connectedProfile.bssid);
if (QDF_IS_STATUS_SUCCESS(status)) {
@@ -13217,6 +13287,7 @@ exit:
return fCheck;
}
#ifndef FEATURE_CM_ENABLE
static bool csr_roam_is_same_profile_keys(struct mac_context *mac,
tCsrRoamConnectedProfile *pConnProfile,
struct csr_roam_profile *pProfile2)
@@ -13257,6 +13328,7 @@ static bool csr_roam_is_same_profile_keys(struct mac_context *mac,
} while (0);
return fCheck;
}
#endif
/**
* csr_populate_basic_rates() - populates OFDM or CCK rates
@@ -14117,46 +14189,39 @@ static QDF_STATUS csr_roam_start_wds(struct mac_context *mac, uint32_t sessionId
return QDF_STATUS_E_FAILURE;
}
if (csr_is_conn_state_connected_infra(mac, sessionId)) {
/* Disassociate from the connected Infrastructure network.*/
status = csr_roam_issue_disassociate(mac, sessionId,
eCSR_ROAM_SUBSTATE_DISCONNECT_CONTINUE_ROAMING,
false);
} else {
if (csr_is_conn_state_wds(mac, sessionId)) {
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
qdf_mem_zero(&bssConfig, sizeof(struct bss_config_param));
/* Assume HDD provide bssid in profile */
qdf_copy_macaddr(&pSession->bssParams.bssid,
pProfile->BSSIDs.bssid);
/* there is no Bss description before we start an WDS so we
* need to adopt all Bss configuration parameters from the
* Profile.
*/
status = csr_roam_prepare_bss_config_from_profile(mac,
pProfile,
&bssConfig,
bss_desc);
if (QDF_IS_STATUS_SUCCESS(status)) {
/* Save profile for late use */
csr_free_roam_profile(mac, sessionId);
pSession->pCurRoamProfile =
qdf_mem_malloc(sizeof(struct csr_roam_profile));
if (pSession->pCurRoamProfile) {
csr_roam_copy_profile(mac,
pSession->pCurRoamProfile,
pProfile, sessionId);
}
/* Prepare some more parameters for this WDS */
csr_roam_prepare_bss_params(mac, sessionId, pProfile,
NULL, &bssConfig, NULL);
status = csr_roam_set_bss_config_cfg(mac, sessionId,
pProfile, NULL,
&bssConfig, NULL,
false);
if (csr_is_conn_state_wds(mac, sessionId)) {
QDF_ASSERT(0);
return QDF_STATUS_E_FAILURE;
}
qdf_mem_zero(&bssConfig, sizeof(struct bss_config_param));
/* Assume HDD provide bssid in profile */
qdf_copy_macaddr(&pSession->bssParams.bssid,
pProfile->BSSIDs.bssid);
/* there is no Bss description before we start an WDS so we
* need to adopt all Bss configuration parameters from the
* Profile.
*/
status = csr_roam_prepare_bss_config_from_profile(mac,
pProfile,
&bssConfig,
bss_desc);
if (QDF_IS_STATUS_SUCCESS(status)) {
/* Save profile for late use */
csr_free_roam_profile(mac, sessionId);
pSession->pCurRoamProfile =
qdf_mem_malloc(sizeof(struct csr_roam_profile));
if (pSession->pCurRoamProfile) {
csr_roam_copy_profile(mac,
pSession->pCurRoamProfile,
pProfile, sessionId);
}
/* Prepare some more parameters for this WDS */
csr_roam_prepare_bss_params(mac, sessionId, pProfile,
NULL, &bssConfig, NULL);
status = csr_roam_set_bss_config_cfg(mac, sessionId,
pProfile, NULL,
&bssConfig, NULL,
false);
}
return status;
@@ -20374,11 +20439,13 @@ csr_process_roam_sync_callback(struct mac_context *mac_ctx,
}
conn_profile = &session->connectedProfile;
#ifndef FEATURE_CM_ENABLE
status = csr_roam_stop_network(mac_ctx, session_id,
session->pCurRoamProfile,
bss_desc, ies_local);
if (!QDF_IS_STATUS_SUCCESS(status))
goto end;
#endif
ps_global_info->remain_in_power_active_till_dhcp = false;
session->connectState = eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED;

Voir le fichier

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2011-2021 The Linux Foundation. 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
@@ -34,6 +34,7 @@
#include "wlan_reg_services_api.h"
#include "wlan_crypto_global_api.h"
#include "wlan_cm_roam_api.h"
#include <../../core/src/wlan_cm_vdev_api.h>
uint8_t csr_wpa_oui[][CSR_WPA_OUI_SIZE] = {
{0x00, 0x50, 0xf2, 0x00}
@@ -245,7 +246,6 @@ const char *get_e_roam_cmd_status_str(eRoamCmdStatus val)
CASE_RETURN_STR(eCSR_ROAM_ROAMING_START);
CASE_RETURN_STR(eCSR_ROAM_ROAMING_COMPLETION);
CASE_RETURN_STR(eCSR_ROAM_CONNECT_COMPLETION);
CASE_RETURN_STR(eCSR_ROAM_ASSOCIATION_START);
CASE_RETURN_STR(eCSR_ROAM_ASSOCIATION_COMPLETION);
CASE_RETURN_STR(eCSR_ROAM_DISASSOCIATED);
CASE_RETURN_STR(eCSR_ROAM_ASSOCIATION_FAILURE);
@@ -540,6 +540,19 @@ static bool csr_is_conn_state(struct mac_context *mac_ctx, uint32_t session_id,
return mac_ctx->roam.roamSession[session_id].connectState == state;
}
bool csr_is_conn_state_connected(struct mac_context *mac, uint32_t sessionId)
{
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
return cm_is_vdevid_connected(mac->pdev, sessionId) ||
csr_is_conn_state_connected_wds(mac, sessionId);
#else
return csr_is_conn_state_connected_infra(mac, sessionId) ||
csr_is_conn_state_connected_wds(mac, sessionId);
#endif
}
#ifndef FEATURE_CM_ENABLE
bool csr_is_conn_state_connected_infra(struct mac_context *mac_ctx,
uint32_t session_id)
{
@@ -547,16 +560,11 @@ bool csr_is_conn_state_connected_infra(struct mac_context *mac_ctx,
eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED);
}
bool csr_is_conn_state_connected(struct mac_context *mac, uint32_t sessionId)
{
return csr_is_conn_state_connected_infra(mac, sessionId) ||
csr_is_conn_state_connected_wds(mac, sessionId);
}
bool csr_is_conn_state_infra(struct mac_context *mac, uint32_t sessionId)
{
return csr_is_conn_state_connected_infra(mac, sessionId);
}
#endif
static tSirMacCapabilityInfo csr_get_bss_capabilities(struct bss_description *
pSirBssDesc)
@@ -677,7 +685,12 @@ bool csr_is_any_session_in_connect_state(struct mac_context *mac)
for (i = 0; i < WLAN_MAX_VDEVS; i++) {
if (CSR_IS_SESSION_VALID(mac, i) &&
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
(cm_is_vdevid_connected(mac->pdev, i) ||
#else
(csr_is_conn_state_infra(mac, i) ||
#endif
csr_is_conn_state_ap(mac, i))) {
return true;
}
@@ -686,63 +699,54 @@ bool csr_is_any_session_in_connect_state(struct mac_context *mac)
return false;
}
uint32_t csr_get_infra_operation_chan_freq(
struct mac_context *mac, uint8_t vdev_id)
qdf_freq_t csr_get_operation_chan_freq(struct mac_context *mac,
struct wlan_objmgr_vdev *vdev,
uint8_t vdev_id)
{
uint32_t chan_freq = 0;
struct csr_roam_session *session;
qdf_freq_t chan_freq = 0;
struct wlan_channel *chan;
session = CSR_GET_SESSION(mac, vdev_id);
if (!session)
if (!CSR_IS_SESSION_VALID(mac, vdev_id))
return chan_freq;
if (CSR_IS_SESSION_VALID(mac, vdev_id))
chan_freq = session->connectedProfile.op_freq;
if (wlan_vdev_mlme_is_active(vdev) != QDF_STATUS_SUCCESS)
return chan_freq;
chan = wlan_vdev_get_active_channel(vdev);
if (chan)
chan_freq = chan->ch_freq;
return chan_freq;
}
bool csr_is_session_client_and_connected(struct mac_context *mac, uint8_t sessionId)
qdf_freq_t csr_get_concurrent_operation_freq(struct mac_context *mac_ctx)
{
struct csr_roam_session *pSession = NULL;
if (CSR_IS_SESSION_VALID(mac, sessionId)
&& csr_is_conn_state_infra(mac, sessionId)) {
pSession = CSR_GET_SESSION(mac, sessionId);
if (pSession->pCurRoamProfile) {
if ((pSession->pCurRoamProfile->csrPersona ==
QDF_STA_MODE)
|| (pSession->pCurRoamProfile->csrPersona ==
QDF_P2P_CLIENT_MODE))
return true;
}
}
return false;
}
uint32_t csr_get_concurrent_operation_freq(struct mac_context *mac_ctx)
{
struct csr_roam_session *session = NULL;
uint8_t i = 0;
enum QDF_OPMODE persona;
qdf_freq_t freq;
struct wlan_objmgr_vdev *vdev;
enum QDF_OPMODE op_mode;
for (i = 0; i < WLAN_MAX_VDEVS; i++) {
if (!CSR_IS_SESSION_VALID(mac_ctx, i))
vdev = wlan_objmgr_get_vdev_by_id_from_pdev(mac_ctx->pdev,
i,
WLAN_LEGACY_MAC_ID);
if (!vdev)
continue;
session = CSR_GET_SESSION(mac_ctx, i);
if (!session->pCurRoamProfile)
op_mode = wlan_vdev_mlme_get_opmode(vdev);
/* check only for STA, CLI, GO and SAP */
if (op_mode != QDF_STA_MODE && op_mode != QDF_P2P_CLIENT_MODE &&
op_mode != QDF_P2P_GO_MODE && op_mode != QDF_SAP_MODE) {
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
continue;
persona = session->pCurRoamProfile->csrPersona;
if ((((persona == QDF_STA_MODE) ||
(persona == QDF_P2P_CLIENT_MODE)) &&
(session->connectState ==
eCSR_ASSOC_STATE_TYPE_INFRA_ASSOCIATED)) ||
(((persona == QDF_P2P_GO_MODE) ||
(persona == QDF_SAP_MODE))
&& (session->connectState !=
eCSR_ASSOC_STATE_TYPE_NOT_CONNECTED)))
return session->connectedProfile.op_freq;
}
freq = csr_get_operation_chan_freq(mac_ctx, vdev, i);
wlan_objmgr_vdev_release_ref(vdev, WLAN_LEGACY_MAC_ID);
if (!freq)
continue;
return freq;
}
return 0;
}
@@ -1151,22 +1155,6 @@ bool csr_is_all_session_disconnected(struct mac_context *mac)
return fRc;
}
uint8_t csr_get_connected_infra(struct mac_context *mac_ctx)
{
uint32_t i;
uint8_t connected_session = WLAN_UMAC_VDEV_ID_MAX;
for (i = 0; i < WLAN_MAX_VDEVS; i++) {
if (CSR_IS_SESSION_VALID(mac_ctx, i)
&& csr_is_conn_state_connected_infra(mac_ctx, i)) {
connected_session = i;
break;
}
}
return connected_session;
}
bool csr_is_concurrent_session_running(struct mac_context *mac)
{
uint32_t sessionId, noOfCocurrentSession = 0;
@@ -2376,7 +2364,12 @@ static bool csr_validate_p2pgo_bcn_intrvl(struct mac_context *mac_ctx,
(conn_profile->beaconInterval == 0))
return false;
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (cm_is_vdevid_connected(mac_ctx->pdev, session_id) &&
#else
if (csr_is_conn_state_connected_infra(mac_ctx, session_id) &&
#endif
conn_profile->op_freq != ch_freq &&
conn_profile->beaconInterval != *bcn_interval) {
/*

Voir le fichier

@@ -1,5 +1,5 @@
/*
* Copyright (c) 2011-2020 The Linux Foundation. All rights reserved.
* Copyright (c) 2011-2021 The Linux Foundation. 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
@@ -38,6 +38,7 @@
#include <wlan_scan_utils_api.h>
#include <wlan_reg_services_api.h>
#include <wlan_utility.h>
#include <../../core/src/wlan_cm_vdev_api.h>
/* Roam score for a neighbor AP will be calculated based on the below
* definitions. The calculated roam score will be used to select the
@@ -579,14 +580,24 @@ static QDF_STATUS sme_rrm_send_scan_result(struct mac_context *mac_ctx,
}
session = CSR_GET_SESSION(mac_ctx, session_id);
if ((!session) || (!csr_is_conn_state_connected_infra(
mac_ctx, session_id)) ||
(!session->pConnectBssDesc)) {
/* This is temp ifdef will be removed in near future */
#ifdef FEATURE_CM_ENABLE
if (!session || !cm_is_vdevid_connected(mac_ctx->pdev, session_id) ||
!session->pConnectBssDesc) {
sme_err("Invaild session");
status = QDF_STATUS_E_FAILURE;
goto rrm_send_scan_results_done;
}
#else
if (!session ||
!csr_is_conn_state_connected_infra(mac_ctx, session_id) ||
!session->pConnectBssDesc) {
sme_err("Invaild session");
status = QDF_STATUS_E_FAILURE;
goto rrm_send_scan_results_done;
}
#endif
while (scan_results) {
/*