qcacld-3.0: Add bearer switch infra
When there are more than one audio transport mediums are available, there is a possibility to switch the audio transport medium from one medium to another medium. To provide this support to switch the audio transport medium, add a bearer switch infra in host driver. Change-Id: I9d828d52a2c03e8e4e2c0a284ff0dd7510798dbe CRs-Fixed: 3609864
This commit is contained in:

committed by
Rahul Choudhary

parent
e7b1f57b67
commit
44ac03a6ee
9
Kbuild
9
Kbuild
@@ -1643,8 +1643,10 @@ MLME_INC += $(LL_SAP_INC)
|
|||||||
|
|
||||||
ifeq ($(CONFIG_WLAN_FEATURE_LL_LT_SAP), y)
|
ifeq ($(CONFIG_WLAN_FEATURE_LL_LT_SAP), y)
|
||||||
MLME_OBJS += $(LL_SAP_DIR)/dispatcher/src/wlan_ll_sap_ucfg_api.o \
|
MLME_OBJS += $(LL_SAP_DIR)/dispatcher/src/wlan_ll_sap_ucfg_api.o \
|
||||||
|
$(LL_SAP_DIR)/dispatcher/src/wlan_ll_sap_api.o \
|
||||||
$(LL_SAP_DIR)/core/src/wlan_ll_sap_main.o \
|
$(LL_SAP_DIR)/core/src/wlan_ll_sap_main.o \
|
||||||
$(LL_SAP_DIR)/core/src/wlan_ll_lt_sap_main.o
|
$(LL_SAP_DIR)/core/src/wlan_ll_lt_sap_main.o \
|
||||||
|
$(LL_SAP_DIR)/core/src/wlan_ll_lt_sap_bearer_switch.o
|
||||||
endif
|
endif
|
||||||
|
|
||||||
$(call add-wlan-objs,mlme,$(MLME_OBJS))
|
$(call add-wlan-objs,mlme,$(MLME_OBJS))
|
||||||
@@ -1844,7 +1846,10 @@ POLICY_MGR_OBJS := $(POLICY_MGR_DIR)/src/wlan_policy_mgr_action.o \
|
|||||||
$(POLICY_MGR_DIR)/src/wlan_policy_mgr_get_set_utils.o \
|
$(POLICY_MGR_DIR)/src/wlan_policy_mgr_get_set_utils.o \
|
||||||
$(POLICY_MGR_DIR)/src/wlan_policy_mgr_init_deinit.o \
|
$(POLICY_MGR_DIR)/src/wlan_policy_mgr_init_deinit.o \
|
||||||
$(POLICY_MGR_DIR)/src/wlan_policy_mgr_ucfg.o \
|
$(POLICY_MGR_DIR)/src/wlan_policy_mgr_ucfg.o \
|
||||||
$(POLICY_MGR_DIR)/src/wlan_policy_mgr_pcl.o \
|
$(POLICY_MGR_DIR)/src/wlan_policy_mgr_pcl.o
|
||||||
|
ifeq ($(CONFIG_WLAN_FEATURE_LL_LT_SAP), y)
|
||||||
|
POLICY_MGR_OBJS += $(POLICY_MGR_DIR)/src/wlan_policy_mgr_ll_sap.o
|
||||||
|
endif
|
||||||
|
|
||||||
$(call add-wlan-objs,policy_mgr,$(POLICY_MGR_OBJS))
|
$(call add-wlan-objs,policy_mgr,$(POLICY_MGR_OBJS))
|
||||||
|
|
||||||
|
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: contains policy manager ll_sap definitions specific to the ll_sap module
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "wlan_objmgr_psoc_obj.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_policy_mgr_get_ll_lt_sap_vdev() - Get ll_lt_sap vdev
|
||||||
|
* @psoc: PSOC object
|
||||||
|
*
|
||||||
|
* API to find ll_lt_sap vdev pointer
|
||||||
|
*
|
||||||
|
* This API increments the ref count of the vdev object internally, the
|
||||||
|
* caller has to invoke the wlan_objmgr_vdev_release_ref() to decrement
|
||||||
|
* ref count
|
||||||
|
*
|
||||||
|
* Return: vdev pointer
|
||||||
|
* NULL on FAILURE
|
||||||
|
*/
|
||||||
|
struct wlan_objmgr_vdev *
|
||||||
|
wlan_policy_mgr_get_ll_lt_sap_vdev(struct wlan_objmgr_psoc *psoc);
|
@@ -0,0 +1,50 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: contains policy manager ll_sap definitions specific to the ll_sap module
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "wlan_policy_mgr_ll_sap.h"
|
||||||
|
#include "wlan_policy_mgr_public_struct.h"
|
||||||
|
#include "wlan_policy_mgr_api.h"
|
||||||
|
#include "wlan_policy_mgr_i.h"
|
||||||
|
#include "wlan_cmn.h"
|
||||||
|
|
||||||
|
struct wlan_objmgr_vdev *
|
||||||
|
wlan_policy_mgr_get_ll_lt_sap_vdev(struct wlan_objmgr_psoc *psoc)
|
||||||
|
{
|
||||||
|
uint8_t ll_lt_sap_cnt;
|
||||||
|
uint8_t vdev_id_list[MAX_NUMBER_OF_CONC_CONNECTIONS];
|
||||||
|
struct wlan_objmgr_vdev *vdev;
|
||||||
|
|
||||||
|
ll_lt_sap_cnt = policy_mgr_get_mode_specific_conn_info(
|
||||||
|
psoc, NULL,
|
||||||
|
vdev_id_list,
|
||||||
|
PM_LL_LT_SAP_MODE);
|
||||||
|
|
||||||
|
/* Currently only 1 ll_lt_sap is supported */
|
||||||
|
if (ll_lt_sap_cnt != 1) {
|
||||||
|
policy_mgr_err("invalid number of ll_lt_sap %d", ll_lt_sap_cnt);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
vdev = wlan_objmgr_get_vdev_by_id_from_psoc(psoc, vdev_id_list[0],
|
||||||
|
WLAN_LL_SAP_ID);
|
||||||
|
if (!vdev)
|
||||||
|
policy_mgr_err("vdev is NULL");
|
||||||
|
return vdev;
|
||||||
|
}
|
@@ -0,0 +1,39 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "wlan_ll_sap_main.h"
|
||||||
|
#include "wlan_ll_lt_sap_bearer_switch.h"
|
||||||
|
|
||||||
|
uint32_t ll_lt_sap_bearer_switch_get_id(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
uint32_t request_id;
|
||||||
|
struct ll_sap_vdev_priv_obj *ll_sap_obj;
|
||||||
|
|
||||||
|
ll_sap_obj = ll_sap_get_vdev_priv_obj(vdev);
|
||||||
|
|
||||||
|
if (!ll_sap_obj) {
|
||||||
|
ll_sap_err("vdev %d ll_sap obj null",
|
||||||
|
wlan_vdev_get_id(vdev));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
request_id = qdf_atomic_inc_return(
|
||||||
|
&ll_sap_obj->bearer_switch_ctx->request_id);
|
||||||
|
|
||||||
|
ll_sap_debug("bearer_switch request_id %d", request_id);
|
||||||
|
return request_id;
|
||||||
|
}
|
||||||
|
|
@@ -0,0 +1,83 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: contains ll_lt_sap declarations specific to the bearer
|
||||||
|
* switch functionalities
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _WLAN_LL_LT_SAP_BEARER_SWITCH_H_
|
||||||
|
#define _WLAN_LL_LT_SAP_BEARER_SWITCH_H_
|
||||||
|
|
||||||
|
#include "wlan_ll_sap_public_structs.h"
|
||||||
|
#include <qdf_atomic.h>
|
||||||
|
#include "wlan_cmn.h"
|
||||||
|
#include "wlan_ll_sap_main.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum bearer_switch_status: Bearer switch request status
|
||||||
|
* @XPAN_BLE_SWITCH_INIT: Init status
|
||||||
|
* @XPAN_BLE_SWITCH_SUCCESS: Bearer switch success
|
||||||
|
* @XPAN_BLE_SWITCH_REJECTED: Bearer switch is rejected
|
||||||
|
* @XPAN_BLE_SWITCH_TIMEOUT: Bearer switch request timed out
|
||||||
|
*/
|
||||||
|
enum bearer_switch_status {
|
||||||
|
XPAN_BLE_SWITCH_INIT,
|
||||||
|
XPAN_BLE_SWITCH_SUCCESS,
|
||||||
|
XPAN_BLE_SWITCH_REJECTED,
|
||||||
|
XPAN_BLE_SWITCH_TIMEOUT,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct bearer_switch_request - Data structure to store the bearer switch
|
||||||
|
* request
|
||||||
|
* @requester_cb: Callback which needs to be invoked to indicate the status of
|
||||||
|
* the request to the requester, this callback will be passed by the requester
|
||||||
|
* when requester will send the request.
|
||||||
|
* @arg: Argument passed by requester, this will be returned back in the
|
||||||
|
* callback
|
||||||
|
* @request_id: Unique value to identify the request
|
||||||
|
*/
|
||||||
|
|
||||||
|
struct bearer_switch_request {
|
||||||
|
requester_callback requester_cb;
|
||||||
|
void *arg;
|
||||||
|
uint32_t request_id;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct bearer_switch_info - Data structure to store the bearer switch
|
||||||
|
* requests and related information
|
||||||
|
* @request_id: Last allocated request id
|
||||||
|
* @ref_count: Reference count corresponding to each vdev and requester
|
||||||
|
* @last_status: last status of the bearer switch request
|
||||||
|
* @requests: Array of bearer_switch_requests to cache the request information
|
||||||
|
*/
|
||||||
|
struct bearer_switch_info {
|
||||||
|
qdf_atomic_t request_id;
|
||||||
|
uint8_t ref_count[WLAN_UMAC_PSOC_MAX_VDEVS][XPAN_BLE_SWITCH_REQUESTER_MAX];
|
||||||
|
enum bearer_switch_status last_status;
|
||||||
|
struct bearer_switch_request requests[MAX_BEARER_SWITCH_REQUESTERS];
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ll_lt_sap_bearer_switch_get_id() - Get the request id for bearer switch
|
||||||
|
* request
|
||||||
|
* @vdev: Pointer to vdev
|
||||||
|
* Return: Bearer switch request id
|
||||||
|
*/
|
||||||
|
uint32_t ll_lt_sap_bearer_switch_get_id(struct wlan_objmgr_vdev *vdev);
|
||||||
|
#endif /* _WLAN_LL_LT_SAP_BEARER_SWITCH_H_ */
|
@@ -17,6 +17,8 @@
|
|||||||
#include "wlan_ll_lt_sap_main.h"
|
#include "wlan_ll_lt_sap_main.h"
|
||||||
#include "wlan_scan_ucfg_api.h"
|
#include "wlan_scan_ucfg_api.h"
|
||||||
#include "wlan_mlme_vdev_mgr_interface.h"
|
#include "wlan_mlme_vdev_mgr_interface.h"
|
||||||
|
#include "wlan_ll_sap_main.h"
|
||||||
|
#include "wlan_ll_lt_sap_bearer_switch.h"
|
||||||
|
|
||||||
bool ll_lt_sap_is_supported(void)
|
bool ll_lt_sap_is_supported(void)
|
||||||
{
|
{
|
||||||
@@ -69,3 +71,45 @@ rel_ref:
|
|||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QDF_STATUS ll_lt_sap_init(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
struct ll_sap_vdev_priv_obj *ll_sap_obj;
|
||||||
|
|
||||||
|
ll_sap_obj = ll_sap_get_vdev_priv_obj(vdev);
|
||||||
|
|
||||||
|
if (!ll_sap_obj) {
|
||||||
|
ll_sap_err("vdev %d ll_sap obj null",
|
||||||
|
wlan_vdev_get_id(vdev));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
ll_sap_obj->bearer_switch_ctx =
|
||||||
|
qdf_mem_malloc(sizeof(struct bearer_switch_info));
|
||||||
|
if (!ll_sap_obj->bearer_switch_ctx)
|
||||||
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
|
||||||
|
qdf_atomic_init(&ll_sap_obj->bearer_switch_ctx->request_id);
|
||||||
|
ll_sap_debug("vdev %d", wlan_vdev_get_id(vdev));
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS ll_lt_sap_deinit(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
struct ll_sap_vdev_priv_obj *ll_sap_obj;
|
||||||
|
|
||||||
|
ll_sap_obj = ll_sap_get_vdev_priv_obj(vdev);
|
||||||
|
|
||||||
|
if (!ll_sap_obj) {
|
||||||
|
ll_sap_err("vdev %d ll_sap obj null",
|
||||||
|
wlan_vdev_get_id(vdev));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ll_sap_obj->bearer_switch_ctx)
|
||||||
|
qdf_mem_free(ll_sap_obj->bearer_switch_ctx);
|
||||||
|
ll_sap_debug("vdev %d", wlan_vdev_get_id(vdev));
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
@@ -23,6 +23,9 @@
|
|||||||
|
|
||||||
#include "wlan_ll_sap_main.h"
|
#include "wlan_ll_sap_main.h"
|
||||||
#include "wlan_mlme_public_struct.h"
|
#include "wlan_mlme_public_struct.h"
|
||||||
|
#include <i_qdf_types.h>
|
||||||
|
#include <qdf_types.h>
|
||||||
|
#include "wlan_ll_sap_main.h"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ll_lt_sap_is_supported() - Check if ll_lt_sap is supported or not
|
* ll_lt_sap_is_supported() - Check if ll_lt_sap is supported or not
|
||||||
@@ -44,4 +47,21 @@ QDF_STATUS ll_lt_sap_get_sorted_user_config_acs_ch_list(
|
|||||||
struct wlan_objmgr_psoc *psoc,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
uint8_t vdev_id,
|
uint8_t vdev_id,
|
||||||
struct sap_sel_ch_info *ch_info);
|
struct sap_sel_ch_info *ch_info);
|
||||||
|
/*
|
||||||
|
* ll_lt_sap_init() - Initialize ll_lt_sap infrastructure
|
||||||
|
* @vdev: Pointer to vdev
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS if ll_lt_sap infra initialized successfully else
|
||||||
|
* error code
|
||||||
|
*/
|
||||||
|
QDF_STATUS ll_lt_sap_init(struct wlan_objmgr_vdev *vdev);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ll_lt_sap_deinit() - De-initialize ll_lt_sap infrastructure
|
||||||
|
* @vdev: Pointer to vdev
|
||||||
|
*
|
||||||
|
* Return: QDF_STATUS_SUCCESS if ll_lt_sap infra de-initialized successfully
|
||||||
|
* else error code
|
||||||
|
*/
|
||||||
|
QDF_STATUS ll_lt_sap_deinit(struct wlan_objmgr_vdev *vdev);
|
||||||
#endif /* _WLAN_LL_SAP_MAIN_H_ */
|
#endif /* _WLAN_LL_SAP_MAIN_H_ */
|
||||||
|
@@ -17,6 +17,7 @@
|
|||||||
#include "wlan_ll_sap_main.h"
|
#include "wlan_ll_sap_main.h"
|
||||||
#include <wlan_objmgr_global_obj.h>
|
#include <wlan_objmgr_global_obj.h>
|
||||||
#include "qca_vendor.h"
|
#include "qca_vendor.h"
|
||||||
|
#include "wlan_ll_lt_sap_main.h"
|
||||||
|
|
||||||
static QDF_STATUS ll_sap_psoc_obj_created_notification(struct wlan_objmgr_psoc *psoc, void *arg_list)
|
static QDF_STATUS ll_sap_psoc_obj_created_notification(struct wlan_objmgr_psoc *psoc, void *arg_list)
|
||||||
{
|
{
|
||||||
@@ -39,6 +40,75 @@ static QDF_STATUS ll_sap_psoc_obj_destroyed_notification(struct wlan_objmgr_psoc
|
|||||||
/* detach ll_sap_psoc object which will contain cfg items,
|
/* detach ll_sap_psoc object which will contain cfg items,
|
||||||
* tx and rx ops
|
* tx and rx ops
|
||||||
*/
|
*/
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QDF_STATUS ll_sap_vdev_obj_created_notification(
|
||||||
|
struct wlan_objmgr_vdev *vdev, void *arg_list)
|
||||||
|
{
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
struct ll_sap_vdev_priv_obj *ll_sap_obj;
|
||||||
|
|
||||||
|
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_SAP_MODE)
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
ll_sap_obj = qdf_mem_malloc(sizeof(*ll_sap_obj));
|
||||||
|
if (!ll_sap_obj)
|
||||||
|
return QDF_STATUS_E_NOMEM;
|
||||||
|
|
||||||
|
status = wlan_objmgr_vdev_component_obj_attach(
|
||||||
|
vdev,
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
(void *)ll_sap_obj,
|
||||||
|
QDF_STATUS_SUCCESS);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
ll_sap_err("vdev %d obj attach failed", wlan_vdev_get_id(vdev));
|
||||||
|
goto ll_sap_vdev_attach_failed;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = ll_lt_sap_init(vdev);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
goto ll_sap_init_failed;
|
||||||
|
|
||||||
|
return status;
|
||||||
|
|
||||||
|
ll_sap_init_failed:
|
||||||
|
wlan_objmgr_vdev_component_obj_detach(vdev,
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_obj);
|
||||||
|
|
||||||
|
ll_sap_vdev_attach_failed:
|
||||||
|
qdf_mem_free(ll_sap_obj);
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
|
||||||
|
static QDF_STATUS ll_sap_vdev_obj_destroyed_notification(
|
||||||
|
struct wlan_objmgr_vdev *vdev, void *arg_list)
|
||||||
|
{
|
||||||
|
QDF_STATUS status = QDF_STATUS_SUCCESS;
|
||||||
|
struct ll_sap_vdev_priv_obj *ll_sap_obj;
|
||||||
|
|
||||||
|
if (wlan_vdev_mlme_get_opmode(vdev) != QDF_SAP_MODE)
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
|
||||||
|
ll_sap_obj = ll_sap_get_vdev_priv_obj(vdev);
|
||||||
|
|
||||||
|
if (!ll_sap_obj) {
|
||||||
|
ll_sap_err("vdev %d ll sap obj null",
|
||||||
|
wlan_vdev_get_id(vdev));
|
||||||
|
return QDF_STATUS_E_INVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
status = wlan_objmgr_vdev_component_obj_detach(vdev,
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_obj);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status))
|
||||||
|
ll_sap_err("vdev %d ll sap obj detach failed, status %d",
|
||||||
|
wlan_vdev_get_id(vdev), status);
|
||||||
|
|
||||||
|
ll_lt_sap_deinit(vdev);
|
||||||
|
|
||||||
|
qdf_mem_free(ll_sap_obj);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
@@ -62,10 +132,48 @@ QDF_STATUS ll_sap_init(void)
|
|||||||
NULL);
|
NULL);
|
||||||
if (QDF_IS_STATUS_ERROR(status)) {
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
ll_sap_err("objmgr_register_psoc_destroy_handler failed");
|
ll_sap_err("objmgr_register_psoc_destroy_handler failed");
|
||||||
wlan_objmgr_unregister_psoc_create_handler(WLAN_UMAC_COMP_LL_SAP,
|
goto err_psoc_destroy_reg;
|
||||||
ll_sap_psoc_obj_created_notification,
|
|
||||||
NULL);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* register vdev create handler functions. */
|
||||||
|
status = wlan_objmgr_register_vdev_create_handler(
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_vdev_obj_created_notification,
|
||||||
|
NULL);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
ll_sap_err("objmgr_register_vdev_create_handler failed");
|
||||||
|
goto err_vdev_create_reg;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* register vdev delete handler functions. */
|
||||||
|
status = wlan_objmgr_register_vdev_destroy_handler(
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_vdev_obj_destroyed_notification,
|
||||||
|
NULL);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
ll_sap_err("objmgr_register_vdev_destroy_handler failed");
|
||||||
|
goto err_vdev_destroy_reg;
|
||||||
|
}
|
||||||
|
|
||||||
|
return status;
|
||||||
|
err_vdev_destroy_reg:
|
||||||
|
wlan_objmgr_unregister_vdev_create_handler(
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_vdev_obj_created_notification,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
err_vdev_create_reg:
|
||||||
|
wlan_objmgr_unregister_psoc_destroy_handler(
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_psoc_obj_destroyed_notification,
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
err_psoc_destroy_reg:
|
||||||
|
wlan_objmgr_unregister_psoc_create_handler(
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_psoc_obj_created_notification,
|
||||||
|
NULL);
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -73,6 +181,26 @@ QDF_STATUS ll_sap_deinit(void)
|
|||||||
{
|
{
|
||||||
QDF_STATUS ret = QDF_STATUS_SUCCESS, status;
|
QDF_STATUS ret = QDF_STATUS_SUCCESS, status;
|
||||||
|
|
||||||
|
/* de-register vdev delete handler functions. */
|
||||||
|
status = wlan_objmgr_unregister_vdev_destroy_handler(
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_vdev_obj_destroyed_notification,
|
||||||
|
NULL);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
ll_sap_err("objmgr_unregister_vdev_destroy_handler failed");
|
||||||
|
ret = status;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* de-register vdev create handler functions. */
|
||||||
|
status = wlan_objmgr_unregister_vdev_create_handler(
|
||||||
|
WLAN_UMAC_COMP_LL_SAP,
|
||||||
|
ll_sap_vdev_obj_created_notification,
|
||||||
|
NULL);
|
||||||
|
if (QDF_IS_STATUS_ERROR(status)) {
|
||||||
|
ll_sap_err("objmgr_unregister_vdev_create_handler failed");
|
||||||
|
ret = status;
|
||||||
|
}
|
||||||
|
|
||||||
/* unregister psoc destroy handler functions. */
|
/* unregister psoc destroy handler functions. */
|
||||||
status = wlan_objmgr_unregister_psoc_destroy_handler(WLAN_UMAC_COMP_LL_SAP,
|
status = wlan_objmgr_unregister_psoc_destroy_handler(WLAN_UMAC_COMP_LL_SAP,
|
||||||
ll_sap_psoc_obj_destroyed_notification,
|
ll_sap_psoc_obj_destroyed_notification,
|
||||||
|
@@ -22,6 +22,7 @@
|
|||||||
#define _WLAN_LL_SAP_MAIN_H_
|
#define _WLAN_LL_SAP_MAIN_H_
|
||||||
|
|
||||||
#include "wlan_objmgr_psoc_obj.h"
|
#include "wlan_objmgr_psoc_obj.h"
|
||||||
|
#include "wlan_objmgr_vdev_obj.h"
|
||||||
|
|
||||||
#define ll_sap_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_LL_SAP, params)
|
#define ll_sap_err(params...) QDF_TRACE_ERROR(QDF_MODULE_ID_LL_SAP, params)
|
||||||
#define ll_sap_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_LL_SAP, params)
|
#define ll_sap_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_LL_SAP, params)
|
||||||
@@ -34,6 +35,36 @@
|
|||||||
#define ll_sap_nofl_debug(params...) \
|
#define ll_sap_nofl_debug(params...) \
|
||||||
QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_LL_SAP, params)
|
QDF_TRACE_DEBUG_NO_FL(QDF_MODULE_ID_LL_SAP, params)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* struct ll_sap_vdev_priv_obj - ll sap private vdev obj
|
||||||
|
* @bearer_switch_ctx: Bearer switch context
|
||||||
|
*/
|
||||||
|
struct ll_sap_vdev_priv_obj {
|
||||||
|
struct bearer_switch_info *bearer_switch_ctx;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ll_sap_get_vdev_priv_obj: get ll_sap priv object from vdev object
|
||||||
|
* @vdev: pointer to vdev object
|
||||||
|
*
|
||||||
|
* Return: pointer to ll_sap vdev private object
|
||||||
|
*/
|
||||||
|
static inline
|
||||||
|
struct ll_sap_vdev_priv_obj *ll_sap_get_vdev_priv_obj(
|
||||||
|
struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
struct ll_sap_vdev_priv_obj *obj;
|
||||||
|
|
||||||
|
if (!vdev) {
|
||||||
|
ll_sap_err("vdev is null");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
obj = wlan_objmgr_vdev_get_comp_private_obj(vdev,
|
||||||
|
WLAN_UMAC_COMP_LL_SAP);
|
||||||
|
|
||||||
|
return obj;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ll_sap_init() - initializes ll_sap component
|
* ll_sap_init() - initializes ll_sap component
|
||||||
*
|
*
|
||||||
|
@@ -0,0 +1,45 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: contains ll_lt_sap API definitions specific to the bearer
|
||||||
|
* switch functionalities
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _WLAN_LL_LT_SAP_API_H_
|
||||||
|
#define _WLAN_LL_LT_SAP_API_H_
|
||||||
|
|
||||||
|
#include <wlan_cmn.h>
|
||||||
|
#include <wlan_objmgr_vdev_obj.h>
|
||||||
|
|
||||||
|
#ifdef WLAN_FEATURE_LL_LT_SAP
|
||||||
|
|
||||||
|
/**
|
||||||
|
* wlan_ll_lt_sap_bearer_switch_get_id() - Get the request id for bearer switch
|
||||||
|
* request
|
||||||
|
* @vdev: Pointer to vdev
|
||||||
|
* Return: Bearer switch request id
|
||||||
|
*/
|
||||||
|
uint32_t wlan_ll_lt_sap_bearer_switch_get_id(struct wlan_objmgr_vdev *vdev);
|
||||||
|
#else
|
||||||
|
|
||||||
|
static inline uint32_t
|
||||||
|
wlan_ll_lt_sap_bearer_switch_get_id(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif /* WLAN_FEATURE_LL_LT_SAP */
|
||||||
|
#endif /* _WLAN_LL_LT_SAP_API_H_ */
|
@@ -0,0 +1,61 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* DOC: contains ll_lt_sap structure definitions specific to the bearer
|
||||||
|
* switch functionalities
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _WLAN_LL_LT_SAP_BEARER_SWITCH_PUBLIC_STRUCTS_H_
|
||||||
|
#define _WLAN_LL_LT_SAP_BEARER_SWITCH_PUBLIC_STRUCTS_H_
|
||||||
|
|
||||||
|
#include "wlan_objmgr_psoc_obj.h"
|
||||||
|
#include <qdf_status.h>
|
||||||
|
|
||||||
|
/* Indicates MAX bearer switch requesters at a time */
|
||||||
|
#define MAX_BEARER_SWITCH_REQUESTERS 5
|
||||||
|
|
||||||
|
/**
|
||||||
|
* enum bearer_switch_requester_source: Bearer switch requester source
|
||||||
|
* @XPAN_BLE_SWITCH_REQUESTER_CONNECT: Bearer switch requester is connect
|
||||||
|
* @XPAN_BLE_SWITCH_REQUESTER_CSA: Bearer switch requester is CSA
|
||||||
|
* @XPAN_BLE_SWITCH_REQUESTER_FW: Bearer switch requester is FW
|
||||||
|
* @XPAN_BLE_SWITCH_REQUESTER_MAX: Indicates MAX bearer switch requester
|
||||||
|
*/
|
||||||
|
enum bearer_switch_requester_source {
|
||||||
|
XPAN_BLE_SWITCH_REQUESTER_CONNECT,
|
||||||
|
XPAN_BLE_SWITCH_REQUESTER_CSA,
|
||||||
|
XPAN_BLE_SWITCH_REQUESTER_FW,
|
||||||
|
XPAN_BLE_SWITCH_REQUESTER_MAX,
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* typedef requester_callback() - Callback function, which will be invoked with
|
||||||
|
* the bearer switch request status.
|
||||||
|
* @psoc: Psoc pointer
|
||||||
|
* @request_id: Request ID
|
||||||
|
* @status: Status of the bearer switch request
|
||||||
|
* @request_params: Request params for the bearer switch request
|
||||||
|
*
|
||||||
|
* Return: None
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef void (*requester_callback)(struct wlan_objmgr_psoc *psoc,
|
||||||
|
uint8_t vdev_id, uint32_t request_id,
|
||||||
|
QDF_STATUS status,
|
||||||
|
void *request_params);
|
||||||
|
|
||||||
|
#endif /* _WLAN_LL_LT_SAP_BEARER_SWITCH_PUBLIC_STRUCTS_H_ */
|
@@ -0,0 +1,24 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2023 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
|
||||||
|
* copyright notice and this permission notice appear in all copies.
|
||||||
|
*
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||||
|
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||||
|
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||||
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "wlan_ll_sap_api.h"
|
||||||
|
#include <../../core/src/wlan_ll_lt_sap_bearer_switch.h>
|
||||||
|
#include <../../core/src/wlan_ll_lt_sap_main.h>
|
||||||
|
|
||||||
|
uint32_t wlan_ll_lt_sap_bearer_switch_get_id(struct wlan_objmgr_vdev *vdev)
|
||||||
|
{
|
||||||
|
return ll_lt_sap_bearer_switch_get_id(vdev);
|
||||||
|
}
|
@@ -2091,9 +2091,12 @@ _conditional_srcs = {
|
|||||||
},
|
},
|
||||||
"CONFIG_WLAN_FEATURE_LL_LT_SAP": {
|
"CONFIG_WLAN_FEATURE_LL_LT_SAP": {
|
||||||
True: [
|
True: [
|
||||||
|
"components/umac/mlme/sap/ll_sap/dispatcher/src/wlan_ll_sap_api.c",
|
||||||
"components/umac/mlme/sap/ll_sap/dispatcher/src/wlan_ll_sap_ucfg_api.c",
|
"components/umac/mlme/sap/ll_sap/dispatcher/src/wlan_ll_sap_ucfg_api.c",
|
||||||
|
"components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_bearer_switch.c",
|
||||||
"components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.c",
|
"components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.c",
|
||||||
"components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.c",
|
"components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.c",
|
||||||
|
"components/cmn_services/policy_mgr/src/wlan_policy_mgr_ll_sap.c",
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user