qcacmn: AFC device deployment type support
Add init sequence handling to support AFC device deployment type Set AFC device deployment type to regulatory private obj Change-Id: Ib041d2010552412aaaa41395915d948aa2ea2bba CRs-Fixed: 3190288
This commit is contained in:

committed by
Madan Koyyalamudi

parent
81f0e6a247
commit
627746d6bb
@@ -442,6 +442,7 @@ struct wlan_psoc_host_service_ext_param {
|
|||||||
* @max_users_ul_mumimo: Max number of users per-PPDU for Uplink MU-MIMO
|
* @max_users_ul_mumimo: Max number of users per-PPDU for Uplink MU-MIMO
|
||||||
* @twt_ack_support_cap: TWT ack capability support
|
* @twt_ack_support_cap: TWT ack capability support
|
||||||
* @target_cap_flags: Rx peer metadata version number used by target
|
* @target_cap_flags: Rx peer metadata version number used by target
|
||||||
|
* @afc_dev_type: AFC deployment type
|
||||||
*/
|
*/
|
||||||
struct wlan_psoc_host_service_ext2_param {
|
struct wlan_psoc_host_service_ext2_param {
|
||||||
uint8_t reg_db_version_major;
|
uint8_t reg_db_version_major;
|
||||||
@@ -459,6 +460,9 @@ struct wlan_psoc_host_service_ext2_param {
|
|||||||
uint16_t max_users_ul_mumimo;
|
uint16_t max_users_ul_mumimo;
|
||||||
uint32_t twt_ack_support_cap:1;
|
uint32_t twt_ack_support_cap:1;
|
||||||
uint32_t target_cap_flags;
|
uint32_t target_cap_flags;
|
||||||
|
#if defined(CONFIG_AFC_SUPPORT)
|
||||||
|
enum reg_afc_dev_deploy_type afc_dev_type;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* _SERVICE_READY_PARAM_H_*/
|
#endif /* _SERVICE_READY_PARAM_H_*/
|
||||||
|
@@ -414,6 +414,47 @@ next_mac_phy_cap:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_AFC_SUPPORT)
|
||||||
|
/**
|
||||||
|
* init_deinit_derive_afc_dev_type_param() - Derive AFC init deployment param
|
||||||
|
*
|
||||||
|
* @psoc: PSOC object
|
||||||
|
* @init_param: Pointer to init param
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
static void init_deinit_derive_afc_dev_type_param(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct wmi_init_cmd_param *init_param)
|
||||||
|
{
|
||||||
|
enum reg_afc_dev_deploy_type reg_afc_dev_type;
|
||||||
|
target_resource_config *tgt_cfg;
|
||||||
|
QDF_STATUS ret_val;
|
||||||
|
|
||||||
|
tgt_cfg = init_param->res_cfg;
|
||||||
|
|
||||||
|
ret_val = target_if_reg_get_afc_dev_type(psoc,
|
||||||
|
®_afc_dev_type);
|
||||||
|
|
||||||
|
if (QDF_IS_STATUS_ERROR(ret_val)) {
|
||||||
|
target_if_err("get afc dev type failed");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
tgt_cfg->afc_indoor_support = false;
|
||||||
|
tgt_cfg->afc_outdoor_support = false;
|
||||||
|
if (reg_afc_dev_type == AFC_DEPLOYMENT_INDOOR)
|
||||||
|
tgt_cfg->afc_indoor_support = true;
|
||||||
|
else if (reg_afc_dev_type == AFC_DEPLOYMENT_OUTDOOR)
|
||||||
|
tgt_cfg->afc_outdoor_support = true;
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void init_deinit_derive_afc_dev_type_param(
|
||||||
|
struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct wmi_init_cmd_param *init_param)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void init_deinit_prepare_send_init_cmd(
|
void init_deinit_prepare_send_init_cmd(
|
||||||
struct wlan_objmgr_psoc *psoc,
|
struct wlan_objmgr_psoc *psoc,
|
||||||
struct target_psoc_info *tgt_hdl)
|
struct target_psoc_info *tgt_hdl)
|
||||||
@@ -486,6 +527,9 @@ void init_deinit_prepare_send_init_cmd(
|
|||||||
target_if_debug("0x%x\n", info->target_caps.fw_version_1);
|
target_if_debug("0x%x\n", info->target_caps.fw_version_1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (wmi_service_enabled(wmi_handle, wmi_service_ext2_msg))
|
||||||
|
init_deinit_derive_afc_dev_type_param(psoc, &init_param);
|
||||||
|
|
||||||
target_if_ext_res_cfg_enable(psoc, tgt_hdl, NULL);
|
target_if_ext_res_cfg_enable(psoc, tgt_hdl, NULL);
|
||||||
|
|
||||||
target_if_set_reo_shared_qref_feature(psoc, info);
|
target_if_set_reo_shared_qref_feature(psoc, info);
|
||||||
|
@@ -483,6 +483,8 @@ static int init_deinit_service_ext2_ready_event_handler(ol_scn_t scn_handle,
|
|||||||
|
|
||||||
target_if_reg_set_disable_upper_6g_edge_ch_info(psoc);
|
target_if_reg_set_disable_upper_6g_edge_ch_info(psoc);
|
||||||
|
|
||||||
|
target_if_reg_set_afc_dev_type(psoc, tgt_hdl);
|
||||||
|
|
||||||
/* send init command */
|
/* send init command */
|
||||||
init_deinit_set_send_init_cmd(psoc, tgt_hdl);
|
init_deinit_set_send_init_cmd(psoc, tgt_hdl);
|
||||||
|
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
|
* Copyright (c) 2017-2021 The Linux Foundation. All rights reserved.
|
||||||
|
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
* Permission to use, copy, modify, and/or distribute this software for
|
* Permission to use, copy, modify, and/or distribute this software for
|
||||||
@@ -132,4 +133,34 @@ target_if_reg_set_disable_upper_6g_edge_ch_info(struct wlan_objmgr_psoc *psoc)
|
|||||||
return QDF_STATUS_E_FAILURE;
|
return QDF_STATUS_E_FAILURE;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_AFC_SUPPORT)
|
||||||
|
/**
|
||||||
|
* target_if_reg_set_afc_dev_type() - set afc device deployment type
|
||||||
|
* @psoc: psoc pointer
|
||||||
|
* @tgt_hdl: target handle
|
||||||
|
*
|
||||||
|
* Return: Success or Failure
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
target_if_reg_set_afc_dev_type(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct target_psoc_info *tgt_hdl);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* target_if_reg_get_afc_device_type() - get afc device deployment type
|
||||||
|
* @psoc: psoc pointer
|
||||||
|
* @reg_afc_dev_type:
|
||||||
|
* Return: Success or Failure
|
||||||
|
*/
|
||||||
|
QDF_STATUS
|
||||||
|
target_if_reg_get_afc_dev_type(struct wlan_objmgr_psoc *psoc,
|
||||||
|
enum reg_afc_dev_deploy_type *reg_afc_dev_type);
|
||||||
|
#else
|
||||||
|
static inline QDF_STATUS
|
||||||
|
target_if_reg_set_afc_dev_type(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct target_psoc_info *tgt_hdl)
|
||||||
|
{
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
#endif /* __TARGET_IF_REG_H__ */
|
#endif /* __TARGET_IF_REG_H__ */
|
||||||
|
@@ -1030,6 +1030,56 @@ tgt_if_regulatory_is_upper_6g_edge_ch_disabled(struct wlan_objmgr_psoc *psoc)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_AFC_SUPPORT)
|
||||||
|
QDF_STATUS
|
||||||
|
target_if_reg_set_afc_dev_type(struct wlan_objmgr_psoc *psoc,
|
||||||
|
struct target_psoc_info *tgt_hdl)
|
||||||
|
{
|
||||||
|
struct wlan_lmac_if_reg_rx_ops *reg_rx_ops;
|
||||||
|
struct tgt_info *info;
|
||||||
|
|
||||||
|
if (!tgt_hdl) {
|
||||||
|
target_if_err("target_psoc_info is null");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
reg_rx_ops = target_if_regulatory_get_rx_ops(psoc);
|
||||||
|
if (!reg_rx_ops) {
|
||||||
|
target_if_err("reg_rx_ops is NULL");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
info = (&tgt_hdl->info);
|
||||||
|
|
||||||
|
if (reg_rx_ops->reg_set_afc_dev_type)
|
||||||
|
reg_rx_ops->reg_set_afc_dev_type(
|
||||||
|
psoc,
|
||||||
|
info->service_ext2_param.afc_dev_type);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QDF_STATUS
|
||||||
|
target_if_reg_get_afc_dev_type(struct wlan_objmgr_psoc *psoc,
|
||||||
|
enum reg_afc_dev_deploy_type *reg_afc_dev_type)
|
||||||
|
{
|
||||||
|
struct wlan_lmac_if_reg_rx_ops *reg_rx_ops;
|
||||||
|
|
||||||
|
reg_rx_ops = target_if_regulatory_get_rx_ops(psoc);
|
||||||
|
if (!reg_rx_ops) {
|
||||||
|
target_if_err("reg_rx_ops is NULL");
|
||||||
|
return QDF_STATUS_E_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (reg_rx_ops->reg_get_afc_dev_type)
|
||||||
|
reg_rx_ops->reg_get_afc_dev_type(
|
||||||
|
psoc,
|
||||||
|
reg_afc_dev_type);
|
||||||
|
|
||||||
|
return QDF_STATUS_SUCCESS;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* tgt_if_reg_is_chip_11be_cap() - Finds out if the hardware is capable
|
* tgt_if_reg_is_chip_11be_cap() - Finds out if the hardware is capable
|
||||||
* of 11BE. The capability bit is read from mac_phy_cap populated by the
|
* of 11BE. The capability bit is read from mac_phy_cap populated by the
|
||||||
|
@@ -5827,6 +5827,8 @@ struct wmi_host_fw_abi_ver {
|
|||||||
* inclusive of SP power mode.
|
* inclusive of SP power mode.
|
||||||
* @afc_timer_check_disable: Disables AFC Timer related checks in FW
|
* @afc_timer_check_disable: Disables AFC Timer related checks in FW
|
||||||
* @afc_req_id_check_disable: Disables AFC Request ID check in FW
|
* @afc_req_id_check_disable: Disables AFC Request ID check in FW
|
||||||
|
* @afc_indoor_support: AFC support indoor deployment
|
||||||
|
* @afc_outdoor_support: AFC support outdoor deployment
|
||||||
* @carrier_profile_config: Configuration for per-carrier profile
|
* @carrier_profile_config: Configuration for per-carrier profile
|
||||||
* @reo_qdesc_shared_addr_table_enabled: Reo shared qref enhancement enabled
|
* @reo_qdesc_shared_addr_table_enabled: Reo shared qref enhancement enabled
|
||||||
*/
|
*/
|
||||||
@@ -5948,6 +5950,8 @@ typedef struct {
|
|||||||
bool is_6ghz_sp_pwrmode_supp_enabled;
|
bool is_6ghz_sp_pwrmode_supp_enabled;
|
||||||
bool afc_timer_check_disable;
|
bool afc_timer_check_disable;
|
||||||
bool afc_req_id_check_disable;
|
bool afc_req_id_check_disable;
|
||||||
|
bool afc_indoor_support;
|
||||||
|
bool afc_outdoor_support;
|
||||||
uint32_t carrier_profile_config;
|
uint32_t carrier_profile_config;
|
||||||
bool sawf;
|
bool sawf;
|
||||||
bool reo_qdesc_shared_addr_table_enabled;
|
bool reo_qdesc_shared_addr_table_enabled;
|
||||||
|
@@ -7872,6 +7872,27 @@ void wmi_set_nan_channel_support(wmi_resource_config *resource_cfg)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if defined(CONFIG_AFC_SUPPORT)
|
||||||
|
static
|
||||||
|
void wmi_copy_afc_deployment_config(wmi_resource_config *resource_cfg,
|
||||||
|
target_resource_config *tgt_res_cfg)
|
||||||
|
{
|
||||||
|
WMI_RSRC_CFG_HOST_SERVICE_FLAG_AFC_INDOOR_SUPPORT_CHECK_SET(
|
||||||
|
resource_cfg->host_service_flags,
|
||||||
|
tgt_res_cfg->afc_indoor_support);
|
||||||
|
|
||||||
|
WMI_RSRC_CFG_HOST_SERVICE_FLAG_AFC_OUTDOOR_SUPPORT_CHECK_SET(
|
||||||
|
resource_cfg->host_service_flags,
|
||||||
|
tgt_res_cfg->afc_outdoor_support);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static
|
||||||
|
void wmi_copy_afc_deployment_config(wmi_resource_config *resource_cfg,
|
||||||
|
target_resource_config *tgt_res_cfg)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static
|
static
|
||||||
void wmi_copy_resource_config(wmi_resource_config *resource_cfg,
|
void wmi_copy_resource_config(wmi_resource_config *resource_cfg,
|
||||||
target_resource_config *tgt_res_cfg)
|
target_resource_config *tgt_res_cfg)
|
||||||
@@ -8131,6 +8152,8 @@ void wmi_copy_resource_config(wmi_resource_config *resource_cfg,
|
|||||||
resource_cfg->host_service_flags,
|
resource_cfg->host_service_flags,
|
||||||
tgt_res_cfg->afc_req_id_check_disable);
|
tgt_res_cfg->afc_req_id_check_disable);
|
||||||
|
|
||||||
|
wmi_copy_afc_deployment_config(resource_cfg, tgt_res_cfg);
|
||||||
|
|
||||||
wmi_set_nan_channel_support(resource_cfg);
|
wmi_set_nan_channel_support(resource_cfg);
|
||||||
|
|
||||||
if (tgt_res_cfg->twt_ack_support_cap)
|
if (tgt_res_cfg->twt_ack_support_cap)
|
||||||
@@ -12424,6 +12447,50 @@ static QDF_STATUS extract_service_ready_ext_tlv(wmi_unified_t wmi_handle,
|
|||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if defined(CONFIG_AFC_SUPPORT)
|
||||||
|
/**
|
||||||
|
* extract_svc_rdy_ext2_afc_tlv() - extract service ready ext2 afc deployment
|
||||||
|
* type from event
|
||||||
|
* @ev: pointer to event fixed param
|
||||||
|
* @param: Pointer to hold the params
|
||||||
|
*
|
||||||
|
* Return: void
|
||||||
|
*/
|
||||||
|
static void
|
||||||
|
extract_svc_rdy_ext2_afc_tlv(wmi_service_ready_ext2_event_fixed_param *ev,
|
||||||
|
struct wlan_psoc_host_service_ext2_param *param)
|
||||||
|
{
|
||||||
|
WMI_AFC_FEATURE_6G_DEPLOYMENT_TYPE tgt_afc_dev_type;
|
||||||
|
enum reg_afc_dev_deploy_type reg_afc_dev_type;
|
||||||
|
|
||||||
|
tgt_afc_dev_type = ev->afc_deployment_type;
|
||||||
|
switch (tgt_afc_dev_type) {
|
||||||
|
case WMI_AFC_FEATURE_6G_DEPLOYMENT_UNSPECIFIED:
|
||||||
|
reg_afc_dev_type = AFC_DEPLOYMENT_INDOOR;
|
||||||
|
break;
|
||||||
|
case WMI_AFC_FEATURE_6G_DEPLOYMENT_INDOOR_ONLY:
|
||||||
|
reg_afc_dev_type = AFC_DEPLOYMENT_INDOOR;
|
||||||
|
break;
|
||||||
|
case WMI_AFC_FEATURE_6G_DEPLOYMENT_OUTDOOR_ONLY:
|
||||||
|
reg_afc_dev_type = AFC_DEPLOYMENT_OUTDOOR;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
wmi_err("invalid afc deloyment %d", tgt_afc_dev_type);
|
||||||
|
reg_afc_dev_type = AFC_DEPLOYMENT_UNKNOWN;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
param->afc_dev_type = reg_afc_dev_type;
|
||||||
|
|
||||||
|
wmi_debug("afc dev type:%d", ev->afc_deployment_type);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
static inline void
|
||||||
|
extract_svc_rdy_ext2_afc_tlv(wmi_service_ready_ext2_event_fixed_param *ev,
|
||||||
|
struct wlan_psoc_host_service_ext2_param *param)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* extract_service_ready_ext2_tlv() - extract service ready ext2 params from
|
* extract_service_ready_ext2_tlv() - extract service ready ext2 params from
|
||||||
* event
|
* event
|
||||||
@@ -12482,6 +12549,9 @@ extract_service_ready_ext2_tlv(wmi_unified_t wmi_handle, uint8_t *event,
|
|||||||
ev->max_user_per_ppdu_mumimo);
|
ev->max_user_per_ppdu_mumimo);
|
||||||
param->target_cap_flags = ev->target_cap_flags;
|
param->target_cap_flags = ev->target_cap_flags;
|
||||||
wmi_debug("htt peer data :%d", ev->target_cap_flags);
|
wmi_debug("htt peer data :%d", ev->target_cap_flags);
|
||||||
|
|
||||||
|
extract_svc_rdy_ext2_afc_tlv(ev, param);
|
||||||
|
|
||||||
return QDF_STATUS_SUCCESS;
|
return QDF_STATUS_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user