فهرست منبع

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 4 سال پیش
والد
کامیت
5986e5eeee

+ 10 - 0
umac/cfr/dispatcher/inc/wlan_cfr_tgt_api.h

@@ -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

+ 17 - 0
umac/cfr/dispatcher/inc/wlan_cfr_utils_api.h

@@ -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
 };
 
 /**

+ 31 - 0
umac/cfr/dispatcher/src/wlan_cfr_tgt_api.c

@@ -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

+ 3 - 0
umac/global_umac_dispatcher/lmac_if/inc/wlan_lmac_if_def.h

@@ -1441,6 +1441,7 @@ struct wlan_lmac_if_sa_api_rx_ops {
  * @cfr_capture_count_support_set: Set the capture_count support based on FW
  * advert
  * @cfr_mo_marking_support_set: Set MO marking supported based on FW advert
+ * @cfr_aoa_for_rcc_support_set: Set AoA for RCC support based on FW advert
  */
 struct wlan_lmac_if_cfr_rx_ops {
 	void (*cfr_support_set)(struct wlan_objmgr_psoc *psoc, uint32_t value);
@@ -1451,6 +1452,8 @@ struct wlan_lmac_if_cfr_rx_ops {
 			struct wlan_objmgr_psoc *psoc, uint32_t value);
 	QDF_STATUS (*cfr_mo_marking_support_set)(struct wlan_objmgr_psoc *psoc,
 						 uint32_t value);
+	QDF_STATUS (*cfr_aoa_for_rcc_support_set)(
+			struct wlan_objmgr_psoc *psoc, uint32_t value);
 };
 #endif
 

+ 2 - 0
umac/global_umac_dispatcher/lmac_if/src/wlan_lmac_if.c

@@ -255,6 +255,8 @@ wlan_lmac_if_cfr_rx_ops_register(struct wlan_lmac_if_rx_ops *rx_ops)
 	cfr_rx_ops->cfr_capture_count_support_set =
 		tgt_cfr_capture_count_support_set;
 	cfr_rx_ops->cfr_mo_marking_support_set = tgt_cfr_mo_marking_support_set;
+	cfr_rx_ops->cfr_aoa_for_rcc_support_set =
+		tgt_cfr_aoa_for_rcc_support_set;
 }
 #else
 static void