Commit f40105e6 authored by Sriram R's avatar Sriram R Committed by Kalle Valo
Browse files

ath: add support to get the detected radar specifications



This enables ath10k/ath9k drivers to collect the specifications of the
radar type once it is detected by the dfs pattern detector unit.
Usage of the collected info is specific to driver implementation.
For example, collected radar info could be used by the host driver
to send to co-processors for additional processing/validation.

Note: 'radar_detector_specs' data containing the specifications of
different radar types which was private within dfs_pattern_detector/
dfs_pri_detector is now shared with drivers as well for making use
of this information.

Signed-off-by: default avatarSriram R <srirrama@codeaurora.org>
Signed-off-by: default avatarKalle Valo <kvalo@codeaurora.org>
parent ffbc9197
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -3757,7 +3757,7 @@ static void ath10k_dfs_radar_report(struct ath10k *ar,

	ATH10K_DFS_STAT_INC(ar, pulses_detected);

	if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe)) {
	if (!ar->dfs_detector->add_pulse(ar->dfs_detector, &pe, NULL)) {
		ath10k_dbg(ar, ATH10K_DBG_REGULATORY,
			   "dfs no pulse pattern detected, yet\n");
		return;
+1 −1
Original line number Diff line number Diff line
@@ -277,7 +277,7 @@ ath9k_dfs_process_radar_pulse(struct ath_softc *sc, struct pulse_event *pe)
	DFS_STAT_INC(sc, pulses_processed);
	if (pd == NULL)
		return;
	if (!pd->add_pulse(pd, pe))
	if (!pd->add_pulse(pd, pe, NULL))
		return;
	DFS_STAT_INC(sc, radar_detected);
	ieee80211_radar_detected(sc->hw);
+4 −1
Original line number Diff line number Diff line
@@ -268,7 +268,8 @@ static void dpd_exit(struct dfs_pattern_detector *dpd)
}

static bool
dpd_add_pulse(struct dfs_pattern_detector *dpd, struct pulse_event *event)
dpd_add_pulse(struct dfs_pattern_detector *dpd, struct pulse_event *event,
	      struct radar_detector_specs *rs)
{
	u32 i;
	struct channel_detector *cd;
@@ -294,6 +295,8 @@ dpd_add_pulse(struct dfs_pattern_detector *dpd, struct pulse_event *event)
		struct pri_detector *pd = cd->detectors[i];
		struct pri_sequence *ps = pd->add_pulse(pd, event);
		if (ps != NULL) {
			if (rs != NULL)
				memcpy(rs, pd->rs, sizeof(*rs));
			ath_dbg(dpd->common, DFS,
				"DFS: radar found on freq=%d: id=%d, pri=%d, "
				"count=%d, count_false=%d\n",
+2 −1
Original line number Diff line number Diff line
@@ -97,7 +97,8 @@ struct dfs_pattern_detector {
	bool (*set_dfs_domain)(struct dfs_pattern_detector *dpd,
			   enum nl80211_dfs_regions region);
	bool (*add_pulse)(struct dfs_pattern_detector *dpd,
			  struct pulse_event *pe);
			  struct pulse_event *pe,
			  struct radar_detector_specs *rs);

	struct ath_dfs_pool_stats (*get_stats)(struct dfs_pattern_detector *dpd);
	enum nl80211_dfs_regions region;
+2 −1
Original line number Diff line number Diff line
@@ -62,8 +62,9 @@ struct pri_detector {
	     (*add_pulse)(struct pri_detector *de, struct pulse_event *e);
	void (*reset)    (struct pri_detector *de, u64 ts);

/* private: internal use only */
	const struct radar_detector_specs *rs;

/* private: internal use only */
	u64 last_ts;
	struct list_head sequences;
	struct list_head pulses;