diff --git a/Kbuild b/Kbuild index 22f46e9587..54d350c8d5 100644 --- a/Kbuild +++ b/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)) diff --git a/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ll_sap.h b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ll_sap.h new file mode 100644 index 0000000000..9f71dac17e --- /dev/null +++ b/components/cmn_services/policy_mgr/inc/wlan_policy_mgr_ll_sap.h @@ -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); diff --git a/components/cmn_services/policy_mgr/src/wlan_policy_mgr_ll_sap.c b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_ll_sap.c new file mode 100644 index 0000000000..893c12bcdd --- /dev/null +++ b/components/cmn_services/policy_mgr/src/wlan_policy_mgr_ll_sap.c @@ -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; +} diff --git a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_bearer_switch.c b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_bearer_switch.c new file mode 100644 index 0000000000..3a49f3e209 --- /dev/null +++ b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_bearer_switch.c @@ -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; +} + diff --git a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_bearer_switch.h b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_bearer_switch.h new file mode 100644 index 0000000000..ff325e821e --- /dev/null +++ b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_bearer_switch.h @@ -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 +#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_ */ diff --git a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.c b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.c index 3c5f82a3a7..4ea1572b42 100644 --- a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.c +++ b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.c @@ -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; +} diff --git a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.h b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.h index d95b7c2751..0a5c83325a 100644 --- a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.h +++ b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_lt_sap_main.h @@ -23,6 +23,9 @@ #include "wlan_ll_sap_main.h" #include "wlan_mlme_public_struct.h" +#include +#include +#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_ */ diff --git a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.c b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.c index fde88539a3..30ff35b53e 100644 --- a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.c +++ b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.c @@ -17,6 +17,7 @@ #include "wlan_ll_sap_main.h" #include #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, diff --git a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.h b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.h index a89da4a7a3..674b0c0a43 100644 --- a/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.h +++ b/components/umac/mlme/sap/ll_sap/core/src/wlan_ll_sap_main.h @@ -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 * diff --git a/components/umac/mlme/sap/ll_sap/dispatcher/inc/wlan_ll_sap_api.h b/components/umac/mlme/sap/ll_sap/dispatcher/inc/wlan_ll_sap_api.h new file mode 100644 index 0000000000..77337b79af --- /dev/null +++ b/components/umac/mlme/sap/ll_sap/dispatcher/inc/wlan_ll_sap_api.h @@ -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 +#include + +#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_ */ diff --git a/components/umac/mlme/sap/ll_sap/dispatcher/inc/wlan_ll_sap_public_structs.h b/components/umac/mlme/sap/ll_sap/dispatcher/inc/wlan_ll_sap_public_structs.h new file mode 100644 index 0000000000..c110fb49c6 --- /dev/null +++ b/components/umac/mlme/sap/ll_sap/dispatcher/inc/wlan_ll_sap_public_structs.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 + +/* 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_ */ diff --git a/components/umac/mlme/sap/ll_sap/dispatcher/src/wlan_ll_sap_api.c b/components/umac/mlme/sap/ll_sap/dispatcher/src/wlan_ll_sap_api.c new file mode 100644 index 0000000000..6ed3b2ca1d --- /dev/null +++ b/components/umac/mlme/sap/ll_sap/dispatcher/src/wlan_ll_sap_api.c @@ -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); +} diff --git a/wlan_qcacld3_modules.bzl b/wlan_qcacld3_modules.bzl index dc1fa1df48..3281be968e 100644 --- a/wlan_qcacld3_modules.bzl +++ b/wlan_qcacld3_modules.bzl @@ -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", ], }, }