Bläddra i källkod

qcacld-3.0: Add hdd_ch_avoid_dyn_cbk as channel avoid callback

Currently channel avoid event is not handled, add hdd_ch_avoid_dyn_cbk
as channel change callback to handle channel avoid event.

Change-Id: I451eedf69fd5b91850ed82cf3ad8d7530e259176
CRs-Fixed: 2163673
Will Huang 7 år sedan
förälder
incheckning
93bc137ee1
1 ändrade filer med 33 tillägg och 1 borttagningar
  1. 33 1
      core/hdd/src/wlan_hdd_regulatory.c

+ 33 - 1
core/hdd/src/wlan_hdd_regulatory.c

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2018 The Linux Foundation. All rights reserved.
  *
  * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
  *
@@ -982,6 +982,35 @@ static void hdd_regulatory_dyn_cbk(struct wlan_objmgr_psoc *psoc,
 				&avoid_freq_ind->freq_list);
 }
 
+/**
+ * hdd_ch_avoid_dyn_cbk() - Callback of chan avoid event when reg non-offload
+ * @psoc: PSOC object
+ * @pdev: PDEV object
+ * @chan_list: Current reg channel list, not used in this callback
+ * @avoid_freq_ind: Frequency avoid data post from event handler
+ * @arg: Callback function context parameter
+ *
+ * Return: None.
+ */
+static void hdd_ch_avoid_dyn_cbk(struct wlan_objmgr_psoc *psoc,
+				 struct wlan_objmgr_pdev *pdev,
+				 struct regulatory_channel *chan_list,
+				 struct avoid_freq_ind_data *avoid_freq_ind,
+				 void *arg)
+{
+	struct wiphy *wiphy;
+	struct pdev_osif_priv *pdev_priv;
+	struct hdd_context *hdd_ctx;
+
+	pdev_priv = wlan_pdev_get_ospriv(pdev);
+	wiphy = pdev_priv->wiphy;
+	hdd_ctx = wiphy_priv(wiphy);
+
+	if (avoid_freq_ind)
+		hdd_ch_avoid_ind(hdd_ctx, &avoid_freq_ind->chan_list,
+				 &avoid_freq_ind->freq_list);
+}
+
 /**
  * hdd_regulatory_init_offload() - regulatory init
  * @hdd_ctx: hdd context
@@ -1032,6 +1061,9 @@ int hdd_regulatory_init(struct hdd_context *hdd_ctx, struct wiphy *wiphy)
 		wiphy->regulatory_flags |= REGULATORY_DISABLE_BEACON_HINTS;
 		wiphy->regulatory_flags |= REGULATORY_COUNTRY_IE_IGNORE;
 		hdd_regulatory_init_no_offload(hdd_ctx, wiphy);
+		ucfg_reg_register_chan_change_callback(hdd_ctx->hdd_psoc,
+						       hdd_ch_avoid_dyn_cbk,
+						       NULL);
 	}
 
 	return 0;