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
此提交包含在:
@@ -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
|
||||
|
新增問題並參考
封鎖使用者