diff --git a/target_if/init_deinit/src/service_ready_event_handler.c b/target_if/init_deinit/src/service_ready_event_handler.c index c46441d6cb62..c016ed29bc71 100644 --- a/target_if/init_deinit/src/service_ready_event_handler.c +++ b/target_if/init_deinit/src/service_ready_event_handler.c @@ -22,6 +22,7 @@ * WMI common event handler implementation source file */ #include "service_ready_event_handler.h" +#include "wlan_objmgr_psoc_service_ready_api.h" static int populate_service_bitmap(void *wmi_handle, uint8_t *event, uint32_t *service_bitmap) @@ -109,14 +110,12 @@ int init_deinit_service_ready_event_handler(ol_scn_t scn_handle, if (err_code) goto free_param_and_exit; - /* populate wmi_service_ready_param in common psoc object using - * object manager api once its available - */ legacy_callback = target_if_get_psoc_legacy_service_ready_cb(); - err_code = legacy_callback(wmi_service_ready_event_id, scn_handle, event, data_len); + wlan_objmgr_populate_service_ready_data(psoc, service_param); + free_param_and_exit: qdf_mem_free(service_param); @@ -292,15 +291,12 @@ int init_deinit_service_ext_ready_event_handler(ol_scn_t scn_handle, if (err_code) goto free_param_and_exit; - /* populate wmi_ext_service_ready_param in common psoc object using - * object manager api once its available - */ - legacy_callback = target_if_get_psoc_legacy_service_ready_cb(); - err_code = legacy_callback(wmi_service_ready_ext_event_id, scn_handle, event, data_len); + wlan_objmgr_populate_ext_service_ready_data(psoc, service_param); + free_param_and_exit: qdf_mem_free(service_param); diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h index 2b753e65ae70..37b6b86108e7 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_obj.h @@ -22,6 +22,7 @@ #ifndef _WLAN_OBJMGR_PSOC_OBJ_H_ #define _WLAN_OBJMGR_PSOC_OBJ_H_ +#include "wlan_objmgr_psoc_service_ready_api.h" #include "wlan_objmgr_cmn.h" #include "wlan_lmac_if_def.h" @@ -262,6 +263,8 @@ struct wlan_objmgr_psoc { WLAN_OBJ_STATE obj_state; void *tgt_if_handle; uint8_t total_mac_phy; + struct wlan_objmgr_psoc_service_ready_param service_param; + struct wlan_objmgr_psoc_ext_service_ready_param ext_service_param; qdf_spinlock_t psoc_lock; }; diff --git a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_service_ready_api.h b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_service_ready_api.h index 52423ad07019..6cd14aa65528 100644 --- a/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_service_ready_api.h +++ b/umac/cmn_services/obj_mgr/inc/wlan_objmgr_psoc_service_ready_api.h @@ -34,8 +34,11 @@ #define OBJMGR_MAX_MAC_PHY_CAP (5) #define OBJMGR_MAX_PHY_REG_CAP (3) +/* forward declaration of object manager psoc object type */ +struct wlan_objmgr_psoc; + /** - * struct wlan_objmgr_hal_reg_capability - hal reg table in psoc + * struct wlan_psoc_hal_reg_capability - hal reg table in psoc * @eeprom_rd: regdomain value specified in EEPROM * @eeprom_rd_ext: regdomain * @regcap1: CAP1 capabilities bit map @@ -46,12 +49,12 @@ * @low_5ghz_chan: lower 5 GHz channels * @high_5ghz_chan: higher 5 GHz channels * - * wlan_objmgr_hal_reg_capability is derived from TARGET_HAL_REG_CAPABILITIES + * wlan_psoc_hal_reg_capability is derived from TARGET_HAL_REG_CAPABILITIES * because of WIN direct attach limitation which blocks WMI data structures and * WMI APIs direct usage in common code. So whenever TARGET_HAL_REG_CAPABILITIES - * changes wlan_objmgr_hal_reg_capability also needs to be updated accordingly. + * changes wlan_psoc_hal_reg_capability also needs to be updated accordingly. */ -struct wlan_objmgr_hal_reg_capability { +struct wlan_psoc_hal_reg_capability { uint32_t eeprom_rd; uint32_t eeprom_rd_ext; uint32_t regcap1; @@ -64,7 +67,7 @@ struct wlan_objmgr_hal_reg_capability { }; /** - * struct wlan_objmgr_target_capability_info - target capabilities in psoc + * struct wlan_psoc_target_capability_info - target capabilities in psoc * @phy_capability: PHY capabilities * @max_frag_entry: Maximum frag entries * @num_rf_chains: Number of RF chains supported @@ -83,13 +86,13 @@ struct wlan_objmgr_hal_reg_capability { * @default_dbs_hw_mode_index: DBS hw mode index * @num_msdu_desc: number of msdu desc * - * wlan_objmgr_target_capability_info is derived from target_capability_info + * wlan_psoc_target_capability_info is derived from target_capability_info * because of WIN direct attach limitation which blocks WMI data structures and * WMI APIs direct usage in common code. So whenever target_capability_info - * changes wlan_objmgr_target_capability_info also needs to be updated + * changes wlan_psoc_target_capability_info also needs to be updated * accordingly. */ -struct wlan_objmgr_target_capability_info { +struct wlan_psoc_target_capability_info { uint32_t phy_capability; uint32_t max_frag_entry; uint32_t num_rf_chains; @@ -123,12 +126,12 @@ struct wlan_objmgr_target_capability_info { */ struct wlan_objmgr_psoc_service_ready_param { uint32_t service_bitmap[OBJMGR_SERVICE_BM_SIZE]; - struct wlan_objmgr_target_capability_info target_caps; - struct wlan_objmgr_hal_reg_capability hal_reg_cap; + struct wlan_psoc_target_capability_info target_caps; + struct wlan_psoc_hal_reg_capability hal_reg_cap; }; /** - * struct wlan_objmgr_host_hal_reg_capabilities_ext: Below are Reg caps per PHY. + * struct wlan_psoc_host_hal_reg_capabilities_ext: Below are Reg caps per PHY. * Please note PHY ID starts with 0. * @phy_id: phy id starts with 0. * @eeprom_reg_domain: regdomain value specified in EEPROM @@ -141,14 +144,14 @@ struct wlan_objmgr_psoc_service_ready_param { * @low_5ghz_chan: 5G channel low * @high_5ghz_chan: 5G channel High * - * wlan_objmgr_host_hal_reg_capabilities_ext is derived from + * wlan_psoc_host_hal_reg_capabilities_ext is derived from * WMI_HOST_HAL_REG_CAPABILITIES_EXT because of WIN direct attach limitation * which blocks WMI data structures and WMI APIs direct usage in common code. * So whenever WMI_HOST_HAL_REG_CAPABILITIES_EXT changes - * wlan_objmgr_host_hal_reg_capabilities_ext also needs to be updated + * wlan_psoc_host_hal_reg_capabilities_ext also needs to be updated * accordingly. */ -struct wlan_objmgr_host_hal_reg_capabilities_ext { +struct wlan_psoc_host_hal_reg_capabilities_ext { uint32_t phy_id; uint32_t eeprom_reg_domain; uint32_t eeprom_reg_domain_ext; @@ -162,7 +165,7 @@ struct wlan_objmgr_host_hal_reg_capabilities_ext { }; /** - * struct wlan_objmgr_host_mac_phy_caps - Phy caps recvd in EXT service + * struct wlan_psoc_host_mac_phy_caps - Phy caps recvd in EXT service * @hw_mode_id: identify a particular set of HW characteristics, * as specified by the subsequent fields. WMI_MAC_PHY_CAPABILITIES * element must be mapped to its parent WMI_HW_MODE_CAPABILITIES @@ -206,13 +209,13 @@ struct wlan_objmgr_host_hal_reg_capabilities_ext { * @tx_chain_mask_5G: Valid Transmit chain mask * @rx_chain_mask_5G: Valid Receive chain mask * - * wlan_objmgr_host_mac_phy_caps is derived from wmi_host_mac_phy_caps + * wlan_psoc_host_mac_phy_caps is derived from wmi_host_mac_phy_caps * because of WIN direct attach limitation which blocks WMI data structures and * WMI APIs direct usage in common code. So whenever wmi_host_mac_phy_caps - * changes wlan_objmgr_host_mac_phy_caps also needs to be updated + * changes wlan_psoc_host_mac_phy_caps also needs to be updated * accordingly. */ -struct wlan_objmgr_host_mac_phy_caps { +struct wlan_psoc_host_mac_phy_caps { uint32_t hw_mode_id; uint32_t pdev_id; uint32_t phy_id; @@ -243,13 +246,13 @@ struct wlan_objmgr_host_mac_phy_caps { }; /** - * struct wlan_objmgr_host_hw_mode_caps - HW mode capabilities in EXT event + * struct wlan_psoc_host_hw_mode_caps - HW mode capabilities in EXT event * @hw_mode_id: identify a particular set of HW characteristics, * as specified by the subsequent fields * @phy_id_map: BIT0 represents phy_id 0, BIT1 represent phy_id 1 and so on * @hw_mode_config_type: HW mode config type */ -struct wlan_objmgr_host_hw_mode_caps { +struct wlan_psoc_host_hw_mode_caps { uint32_t hw_mode_id; uint32_t phy_id_map; uint32_t hw_mode_config_type; @@ -274,7 +277,7 @@ struct wlan_objmgr_host_ppe_threshold { }; /** - * struct wlan_objmgr_host_service_ext_param - EXT service base params in event + * struct wlan_psoc_host_service_ext_param - EXT service base params in event * @default_conc_scan_config_bits: Default concurrenct scan config * @default_fw_config_bits: Default HW config bits * @wlan_objmgr_host_ppe_threshold ppet: Host PPE threshold struct @@ -285,13 +288,13 @@ struct wlan_objmgr_host_ppe_threshold { * @num_hw_modes: Number of HW modes in event * @num_phy: Number of Phy mode. * - * wlan_objmgr_host_service_ext_param is derived from wmi_host_service_ext_param + * wlan_psoc_host_service_ext_param is derived from wmi_host_service_ext_param * because of WIN direct attach limitation which blocks WMI data structures and * WMI APIs direct usage in common code. So whenever wmi_host_service_ext_param - * changes wlan_objmgr_host_service_ext_param also needs to be updated + * changes wlan_psoc_host_service_ext_param also needs to be updated * accordingly. */ -struct wlan_objmgr_host_service_ext_param { +struct wlan_psoc_host_service_ext_param { uint32_t default_conc_scan_config_bits; uint32_t default_fw_config_bits; struct wlan_objmgr_host_ppe_threshold ppet; @@ -303,25 +306,56 @@ struct wlan_objmgr_host_service_ext_param { }; /** - * struct wlan_objmgr_ext_service_ready_param - psoc ext service ready structure + * struct wlan_objmgr_psoc_ext_service_ready_param - psoc ext service ready * @service_ext_param: service ext param * @hw_mode_caps: hw mode caps * @mac_phy_cap: mac phy cap * @reg_cap: regulatory capability * - * wlan_objmgr_ext_service_ready_param is derived from + * wlan_objmgr_psoc_ext_service_ready_param is derived from * wmi_ext_service_ready_param because of WIN direct attach limitation which * blocks WMI data structures and WMI APIs direct usage in common code. * So whenever wmi_ext_service_ready_param changes - * wlan_objmgr_ext_service_ready_param also needs to be updated accordingly. + * wlan_objmgr_psoc_ext_service_ready_param also needs to be updated + * accordingly. */ -struct wlan_objmgr_ext_service_ready_param { - struct wlan_objmgr_host_service_ext_param service_ext_param; - struct wlan_objmgr_host_hw_mode_caps hw_mode_caps[OBJMGR_MAX_HW_MODE]; - struct wlan_objmgr_host_mac_phy_caps +struct wlan_objmgr_psoc_ext_service_ready_param { + struct wlan_psoc_host_service_ext_param service_ext_param; + struct wlan_psoc_host_hw_mode_caps hw_mode_caps[OBJMGR_MAX_HW_MODE]; + struct wlan_psoc_host_mac_phy_caps mac_phy_cap[OBJMGR_MAX_MAC_PHY_CAP]; - struct wlan_objmgr_host_hal_reg_capabilities_ext + struct wlan_psoc_host_hal_reg_capabilities_ext reg_cap[OBJMGR_MAX_PHY_REG_CAP]; }; +/** + * wlan_objmgr_populate_service_ready_data() - populate wmi service ready data + * in psoc + * @psoc: psoc object pointer + * @service_ready_data: opaque pointer to wmi service ready data, it is + * intentionally taken opaque because WMI service ready + * type can't be used in common umac component because + * of WIN direct target limitation + * + * Return: QDF status + */ +void +wlan_objmgr_populate_service_ready_data(struct wlan_objmgr_psoc *psoc, + void *service_ready_data); + +/** + * wlan_objmgr_populate_ext_service_ready_data() - populate wmi ext service + * ready data in psoc + * @psoc: psoc object pointer + * @ext_service_data: opaque pointer to ext wmi service ready data, it is + * intentionally taken opaque because WMI service ready + * type can't be used in common umac component because + * of WIN direct target limitation + * + * Return: QDF status + */ +void +wlan_objmgr_populate_ext_service_ready_data(struct wlan_objmgr_psoc *psoc, + void *ext_service_data); + #endif /* _WLAN_OBJMGR_PSOC_SERVICE_READY_API_H_*/ diff --git a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_service_ready_api.c b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_service_ready_api.c index 8a95117861ae..7fb0b022666a 100644 --- a/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_service_ready_api.c +++ b/umac/cmn_services/obj_mgr/src/wlan_objmgr_psoc_service_ready_api.c @@ -21,4 +21,29 @@ * Public APIs implementation source file for accessing (ext)service ready * data from psoc object */ +#include "wlan_objmgr_psoc_obj.h" #include "wlan_objmgr_psoc_service_ready_api.h" + +void +wlan_objmgr_populate_service_ready_data(struct wlan_objmgr_psoc *psoc, + void *data) +{ + struct wlan_objmgr_psoc_service_ready_param *service_ready_data = data; + + wlan_psoc_obj_lock(psoc); + qdf_mem_copy(&psoc->service_param, service_ready_data, + sizeof(psoc->service_param)); + wlan_psoc_obj_unlock(psoc); +} + +void +wlan_objmgr_populate_ext_service_ready_data(struct wlan_objmgr_psoc *psoc, + void *data) +{ + struct wlan_objmgr_psoc_ext_service_ready_param *ext_data = data; + + wlan_psoc_obj_lock(psoc); + qdf_mem_copy(&psoc->ext_service_param, ext_data, + sizeof(psoc->ext_service_param)); + wlan_psoc_obj_unlock(psoc); +}