qcacmn: Support AoA with RCC

Changes to derive AoA phase values in RCC mode.
Add AoA phase calibration parameters to pdev_cfr. These
gets filled upon FW WMI event for every channel change.
HW reported AGC gain & these values are used to derive per
chain phase values.
FW to advertise support of this via service flag.

Change-Id: Ie239b939e50c60c5658ed0a82bae3243e5028e77
此提交包含在:
Shwetha G K
2021-07-08 19:45:38 +05:30
提交者 Madan Koyyalamudi
父節點 ea157e3a14
當前提交 5986e5eeee
共有 5 個檔案被更改,包括 63 行新增0 行删除

查看文件

@@ -121,6 +121,16 @@ tgt_cfr_capture_count_support_set(struct wlan_objmgr_psoc *psoc,
QDF_STATUS
tgt_cfr_mo_marking_support_set(struct wlan_objmgr_psoc *psoc, uint32_t value);
/**
* tgt_cfr_aoa_for_rcc_support_set() - API to set AoA for RCC support
* @psoc: pointer to psoc_object
* @value: value to be set
*
* Return: success/failure
*/
QDF_STATUS
tgt_cfr_aoa_for_rcc_support_set(struct wlan_objmgr_psoc *psoc, uint32_t value);
/**
* tgt_cfr_info_send() - API to send cfr info
* @pdev: pointer to pdev_object

查看文件

@@ -65,6 +65,8 @@
#define MAX_CFR_PRD (10 * 60 * 1000) /* 10 minutes */
#define CFR_MOD_PRD 10 /* CFR period to be multiples of 10ms */
#define MAX_AGC_GAIN 62
enum cfrmetaversion {
CFR_META_VERSION_NONE,
CFR_META_VERSION_1, /* initial version for leg_cfr_metadata */
@@ -279,6 +281,7 @@ struct psoc_cfr {
#ifdef WLAN_ENH_CFR_ENABLE
uint8_t is_cap_interval_mode_sel_support;
uint8_t is_mo_marking_support;
uint8_t is_aoa_for_rcc_support;
#endif
};
@@ -553,6 +556,7 @@ struct nl_event_cb {
* cfr_dma_aborts: No. of CFR DMA aborts in ucode
* is_cap_interval_mode_sel_support: flag to determine if target supports both
* is_mo_marking_support: flag to determine if MO marking is supported or not
* is_aoa_for_rcc_support: flag to determine if AoA is available for RCC or not
* capture_count and capture_duration modes with a nob provided to configure.
* unassoc_pool: Pool of un-associated clients used when capture method is
* CFR_CAPTURE_METHOD_PROBE_RESPONSE
@@ -561,6 +565,12 @@ struct nl_event_cb {
* is_prevent_suspend: CFR wake lock acquired or not
* wake_lock: wake lock for cfr
* runtime_lock: runtime lock for cfr
* freq: current operating freq for which AoA Phase delta values reported by FW
* max_aoa_chains: Indicate the max number of chains to which target supports
* AoA data.
* phase_delta: per chain phase delta associated with 62 gain values reported by
* FW via WMI_PDEV_AOA_PHASEDELTA_EVENTID.
* ibf_cal_val: Per chain IBF cal value from FW.
*/
/*
* To be extended if we get more capbality info
@@ -605,6 +615,7 @@ struct pdev_cfr {
uint64_t cfr_dma_aborts;
uint8_t is_cap_interval_mode_sel_support;
uint8_t is_mo_marking_support;
uint8_t is_aoa_for_rcc_support;
#endif
struct unassoc_pool_entry unassoc_pool[MAX_CFR_ENABLED_CLIENTS];
struct nl_event_cb nl_cb;
@@ -614,6 +625,12 @@ struct pdev_cfr {
qdf_wake_lock_t wake_lock;
qdf_runtime_lock_t runtime_lock;
#endif
#ifdef WLAN_ENH_CFR_ENABLE
uint32_t freq;
uint32_t max_aoa_chains;
uint16_t phase_delta[HOST_MAX_CHAINS][MAX_AGC_GAIN];
uint32_t ibf_cal_val[HOST_MAX_CHAINS];
#endif
};
/**

查看文件

@@ -429,6 +429,31 @@ tgt_cfr_mo_marking_support_set(struct wlan_objmgr_psoc *psoc, uint32_t value)
return QDF_STATUS_SUCCESS;
}
QDF_STATUS
tgt_cfr_aoa_for_rcc_support_set(struct wlan_objmgr_psoc *psoc, uint32_t value)
{
struct psoc_cfr *cfr_sc;
if (!psoc) {
cfr_err("CFR: NULL PSOC!!");
return QDF_STATUS_E_INVAL;
}
cfr_sc = wlan_objmgr_psoc_get_comp_private_obj(psoc,
WLAN_UMAC_COMP_CFR);
if (!cfr_sc) {
cfr_err("Failed to get CFR component priv obj!!");
return QDF_STATUS_E_INVAL;
}
cfr_sc->is_aoa_for_rcc_support = !!value;
cfr_debug("CFR: aoa_for_rcc_support is %s\n",
(cfr_sc->is_aoa_for_rcc_support) ? "enabled" : "disabled");
return QDF_STATUS_SUCCESS;
}
#else
QDF_STATUS
tgt_cfr_capture_count_support_set(struct wlan_objmgr_psoc *psoc,
@@ -443,4 +468,10 @@ tgt_cfr_mo_marking_support_set(struct wlan_objmgr_psoc *psoc,
{
return QDF_STATUS_E_NOSUPPORT;
}
QDF_STATUS
tgt_cfr_aoa_for_rcc_support_set(struct wlan_objmgr_psoc *psoc, uint32_t value)
{
return QDF_STATUS_E_NOSUPPORT;
}
#endif