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
这个提交包含在:
Ashish Kumar Dhanotiya
2023-08-23 00:26:17 +05:30
提交者 Rahul Choudhary
父节点 e7b1f57b67
当前提交 44ac03a6ee
修改 13 个文件,包含 575 行新增5 行删除

9
Kbuild
查看文件

@@ -1643,8 +1643,10 @@ MLME_INC += $(LL_SAP_INC)
ifeq ($(CONFIG_WLAN_FEATURE_LL_LT_SAP), y)
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_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
$(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_init_deinit.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))

查看文件

@@ -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_scan_ucfg_api.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)
{
@@ -69,3 +71,45 @@ rel_ref:
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_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
@@ -44,4 +47,21 @@ QDF_STATUS ll_lt_sap_get_sorted_user_config_acs_ch_list(
struct wlan_objmgr_psoc *psoc,
uint8_t vdev_id,
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_ */

查看文件

@@ -17,6 +17,7 @@
#include "wlan_ll_sap_main.h"
#include <wlan_objmgr_global_obj.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)
{
@@ -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,
* 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;
}
@@ -62,10 +132,48 @@ QDF_STATUS ll_sap_init(void)
NULL);
if (QDF_IS_STATUS_ERROR(status)) {
ll_sap_err("objmgr_register_psoc_destroy_handler failed");
wlan_objmgr_unregister_psoc_create_handler(WLAN_UMAC_COMP_LL_SAP,
ll_sap_psoc_obj_created_notification,
NULL);
goto err_psoc_destroy_reg;
}
/* 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;
}
@@ -73,6 +181,26 @@ QDF_STATUS ll_sap_deinit(void)
{
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. */
status = wlan_objmgr_unregister_psoc_destroy_handler(WLAN_UMAC_COMP_LL_SAP,
ll_sap_psoc_obj_destroyed_notification,

查看文件

@@ -22,6 +22,7 @@
#define _WLAN_LL_SAP_MAIN_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_info(params...) QDF_TRACE_INFO(QDF_MODULE_ID_LL_SAP, params)
@@ -34,6 +35,36 @@
#define ll_sap_nofl_debug(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
*

查看文件

@@ -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": {
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/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_sap_main.c",
"components/cmn_services/policy_mgr/src/wlan_policy_mgr_ll_sap.c",
],
},
}