qcacld-3.0: Handle SAP concurrency in CSA and NAN/NDI case
TWT is supported in STA/SAP vdevs and it's allowed only in DBS/Standalone case and not in SCC/MCC. Disable SAP TWT if 1. Concurrency occurs in SAP + NAN/NDI vdev 2. SCC/MCC occurs after CSA Change-Id: Id1400bd5555d2f48590d7d3ad7c70162d1dd92fb CRs-Fixed: 2942959
Tento commit je obsažen v:

odevzdal
Madan Koyyalamudi

rodič
4301f71222
revize
7b38805edc
@@ -787,6 +787,7 @@ struct nan_datapath_host_event {
|
||||
* @ndp_delete_peers: LIM callback for deleting NDP peer
|
||||
* @delete_peers_by_addr: LIM callback for deleting peer by MAC address
|
||||
* @update_ndi_conn: WMA callback to update NDI's connection info
|
||||
* @nan_concurrency_update: Callback to handle nan concurrency
|
||||
*/
|
||||
struct nan_callbacks {
|
||||
/* callback to os_if layer from umac */
|
||||
@@ -811,6 +812,7 @@ struct nan_callbacks {
|
||||
QDF_STATUS (*update_ndi_conn)(uint8_t vdev_id,
|
||||
struct nan_datapath_channel_info
|
||||
*chan_info);
|
||||
void (*nan_concurrency_update)(void);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@@ -827,6 +827,7 @@ static QDF_STATUS nan_handle_enable_rsp(struct nan_event_params *nan_event)
|
||||
QDF_STATUS status;
|
||||
void (*call_back)(void *cookie);
|
||||
uint8_t vdev_id;
|
||||
void (*nan_conc_callback)(void);
|
||||
|
||||
psoc = nan_event->psoc;
|
||||
psoc_nan_obj = nan_get_psoc_priv_obj(psoc);
|
||||
@@ -874,6 +875,9 @@ fail:
|
||||
policy_mgr_check_n_start_opportunistic_timer(psoc);
|
||||
|
||||
done:
|
||||
nan_conc_callback = psoc_nan_obj->cb_obj.nan_concurrency_update;
|
||||
if (nan_conc_callback)
|
||||
nan_conc_callback();
|
||||
call_back = psoc_nan_obj->cb_obj.ucfg_nan_request_process_cb;
|
||||
if (call_back)
|
||||
call_back(psoc_nan_obj->nan_disc_request_ctx);
|
||||
@@ -886,6 +890,7 @@ QDF_STATUS nan_disable_cleanup(struct wlan_objmgr_psoc *psoc)
|
||||
struct nan_psoc_priv_obj *psoc_nan_obj;
|
||||
QDF_STATUS status;
|
||||
uint8_t vdev_id;
|
||||
void (*nan_conc_callback)(void);
|
||||
|
||||
if (!psoc) {
|
||||
nan_err("psoc is NULL");
|
||||
@@ -917,6 +922,9 @@ QDF_STATUS nan_disable_cleanup(struct wlan_objmgr_psoc *psoc)
|
||||
nan_err("Cannot set NAN state to disabled!");
|
||||
return QDF_STATUS_E_FAILURE;
|
||||
}
|
||||
nan_conc_callback = psoc_nan_obj->cb_obj.nan_concurrency_update;
|
||||
if (nan_conc_callback)
|
||||
nan_conc_callback();
|
||||
|
||||
return status;
|
||||
}
|
||||
|
@@ -532,6 +532,8 @@ int ucfg_nan_register_hdd_callbacks(struct wlan_objmgr_psoc *psoc,
|
||||
cb_obj->os_if_nan_event_handler;
|
||||
psoc_obj->cb_obj.ucfg_nan_request_process_cb =
|
||||
ucfg_nan_request_process_cb;
|
||||
psoc_obj->cb_obj.nan_concurrency_update =
|
||||
cb_obj->nan_concurrency_update;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright (c) 2014-2020 The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2014-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
|
||||
@@ -79,4 +79,12 @@ static inline bool wlan_hdd_nan_is_supported(struct hdd_context *hdd_ctx)
|
||||
return false;
|
||||
}
|
||||
#endif /* WLAN_FEATURE_NAN */
|
||||
|
||||
/**
|
||||
* hdd_nan_concurrency_update() - NAN concurrency
|
||||
*
|
||||
* Return: None
|
||||
*/
|
||||
void hdd_nan_concurrency_update(void);
|
||||
|
||||
#endif /* __WLAN_HDD_NAN_H */
|
||||
|
@@ -87,6 +87,8 @@
|
||||
#include "wlan_hdd_bootup_marker.h"
|
||||
#include "wlan_roam_debug.h"
|
||||
|
||||
#include "wlan_hdd_twt.h"
|
||||
|
||||
/* These are needed to recognize WPA and RSN suite types */
|
||||
#define HDD_WPA_OUI_SIZE 4
|
||||
#define HDD_RSN_OUI_SIZE 4
|
||||
@@ -4044,6 +4046,7 @@ static void hdd_roam_channel_switch_handler(struct hdd_adapter *adapter,
|
||||
hdd_debug("set hw mode change not done");
|
||||
|
||||
policy_mgr_check_concurrent_intf_and_restart_sap(hdd_ctx->psoc);
|
||||
wlan_twt_concurrency_update(hdd_ctx);
|
||||
}
|
||||
|
||||
#ifdef WLAN_FEATURE_HOST_ROAM
|
||||
|
@@ -3705,6 +3705,8 @@ static void hdd_nan_register_callbacks(struct hdd_context *hdd_ctx)
|
||||
cb_obj.new_peer_ind = hdd_ndp_new_peer_handler;
|
||||
cb_obj.peer_departed_ind = hdd_ndp_peer_departed_handler;
|
||||
|
||||
cb_obj.nan_concurrency_update = hdd_nan_concurrency_update;
|
||||
|
||||
os_if_nan_register_hdd_callbacks(hdd_ctx->psoc, &cb_obj);
|
||||
}
|
||||
#else
|
||||
|
@@ -112,3 +112,17 @@ int wlan_hdd_cfg80211_nan_ext_request(struct wiphy *wiphy,
|
||||
|
||||
return errno;
|
||||
}
|
||||
|
||||
void hdd_nan_concurrency_update(void)
|
||||
{
|
||||
struct hdd_context *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
|
||||
int ret;
|
||||
|
||||
hdd_enter();
|
||||
ret = wlan_hdd_validate_context(hdd_ctx);
|
||||
if (ret)
|
||||
return;
|
||||
|
||||
wlan_twt_concurrency_update(hdd_ctx);
|
||||
hdd_exit();
|
||||
}
|
||||
|
@@ -885,13 +885,15 @@ void hdd_ndp_session_end_handler(struct hdd_adapter *adapter)
|
||||
|
||||
/**
|
||||
* hdd_ndp_new_peer_handler() - NDP new peer indication handler
|
||||
* @adapter: pointer to adapter context
|
||||
* @ind_params: indication parameters
|
||||
* @vdev_id: vdev id
|
||||
* @sta_id: station id
|
||||
* @peer_mac_addr: peer mac address
|
||||
* @first_peer: first peer
|
||||
*
|
||||
* Return: none
|
||||
*/
|
||||
int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id,
|
||||
struct qdf_mac_addr *peer_mac_addr, bool fist_peer)
|
||||
struct qdf_mac_addr *peer_mac_addr, bool first_peer)
|
||||
{
|
||||
struct hdd_context *hdd_ctx;
|
||||
struct hdd_adapter *adapter;
|
||||
@@ -930,7 +932,7 @@ int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id,
|
||||
roam_info->fAuthRequired);
|
||||
|
||||
/* perform following steps for first new peer ind */
|
||||
if (fist_peer) {
|
||||
if (first_peer) {
|
||||
hdd_debug("Set ctx connection state to connected");
|
||||
/* Disable LRO/GRO for NDI Mode */
|
||||
if (hdd_ctx->ol_enable &&
|
||||
@@ -953,6 +955,8 @@ int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id,
|
||||
*/
|
||||
if (!NDI_CONCURRENCY_SUPPORTED(hdd_ctx->psoc))
|
||||
hdd_indicate_active_ndp_cnt(hdd_ctx->psoc, vdev_id, 1);
|
||||
|
||||
wlan_twt_concurrency_update(hdd_ctx);
|
||||
}
|
||||
qdf_mem_free(roam_info);
|
||||
return 0;
|
||||
@@ -1031,5 +1035,7 @@ void hdd_ndp_peer_departed_handler(uint8_t vdev_id, uint16_t sta_id,
|
||||
*/
|
||||
if (!NDI_CONCURRENCY_SUPPORTED(hdd_ctx->psoc))
|
||||
hdd_indicate_active_ndp_cnt(hdd_ctx->psoc, vdev_id, 0);
|
||||
|
||||
wlan_twt_concurrency_update(hdd_ctx);
|
||||
}
|
||||
}
|
||||
|
@@ -131,7 +131,7 @@ void hdd_ndi_drv_ndi_create_rsp_handler(uint8_t vdev_id,
|
||||
struct nan_datapath_inf_create_rsp *ndi_rsp);
|
||||
void hdd_ndi_drv_ndi_delete_rsp_handler(uint8_t vdev_id);
|
||||
int hdd_ndp_new_peer_handler(uint8_t vdev_id, uint16_t sta_id,
|
||||
struct qdf_mac_addr *peer_mac_addr, bool fist_peer);
|
||||
struct qdf_mac_addr *peer_mac_addr, bool first_peer);
|
||||
void hdd_ndp_peer_departed_handler(uint8_t vdev_id, uint16_t sta_id,
|
||||
struct qdf_mac_addr *peer_mac_addr, bool last_peer);
|
||||
#endif /* __WLAN_HDD_NAN_DATAPATH_H */
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele