Add a "channel change helper" callback to the mac80211 package and
export the ath9k kernel API for other packages.

Signed-off-by: Stefan Rompf <ste...@loplof.de>
---
Index: package/kernel/mac80211/Makefile
===================================================================
--- package/kernel/mac80211/Makefile    (Revision 45695)
+++ package/kernel/mac80211/Makefile    (Arbeitskopie)
@@ -1737,11 +1737,13 @@
                $(1)/usr/include/mac80211 \
                $(1)/usr/include/mac80211-backport \
                $(1)/usr/include/mac80211/ath \
+               $(1)/usr/include/mac80211/ath/ath9k \
                $(1)/usr/include/net/mac80211
        $(CP) $(PKG_BUILD_DIR)/net/mac80211/*.h $(PKG_BUILD_DIR)/include/* 
$(1)/usr/include/mac80211/
        $(CP) $(PKG_BUILD_DIR)/backport-include/* 
$(1)/usr/include/mac80211-backport/
        $(CP) $(PKG_BUILD_DIR)/net/mac80211/rate.h 
$(1)/usr/include/net/mac80211/
        $(CP) $(PKG_BUILD_DIR)/drivers/net/wireless/ath/*.h 
$(1)/usr/include/mac80211/ath/
+       $(CP) $(PKG_BUILD_DIR)/drivers/net/wireless/ath/ath9k/*.h 
$(1)/usr/include/mac80211/ath/ath9k/
        rm -f $(1)/usr/include/mac80211-backport/linux/module.h
 endef
 
Index: package/kernel/mac80211/patches/930-ath9k_add_channel_set_helper.patch
===================================================================
--- package/kernel/mac80211/patches/930-ath9k_add_channel_set_helper.patch      
(Revision 0)
+++ package/kernel/mac80211/patches/930-ath9k_add_channel_set_helper.patch      
(Arbeitskopie)
@@ -0,0 +1,46 @@
+diff -X diffign -Npur kernel/drivers/net/wireless/ath/ath9k.orig/ath9k.h 
kernel/drivers/net/wireless/ath/ath9k/ath9k.h
+--- kernel/drivers/net/wireless/ath/ath9k.orig/ath9k.h 2015-06-04 
21:19:11.000000000 +0200
++++ kernel/drivers/net/wireless/ath/ath9k/ath9k.h      2015-06-06 
10:23:05.000000000 +0200
+@@ -1110,4 +1110,10 @@ static inline int ath_ahb_init(void) { r
+ static inline void ath_ahb_exit(void) {};
+ #endif
+ 
++/*
++ * OpenWrt channel set helper helper, needed f.e. for Ubiquiti UniFi Outdoor 
Plus
++ */
++typedef void (set_channel_helper_fn)(struct ath_hw* ah, int bw, int fq);
++void ath9k_register_set_channel_helper(set_channel_helper_fn *); /* call 
inside RTNL lock to guard against parallel channel change */
++
+ #endif /* ATH9K_H */
+diff -X diffign -Npur kernel/drivers/net/wireless/ath/ath9k.orig/channel.c 
kernel/drivers/net/wireless/ath/ath9k/channel.c
+--- kernel/drivers/net/wireless/ath/ath9k.orig/channel.c       2015-03-10 
04:37:15.000000000 +0100
++++ kernel/drivers/net/wireless/ath/ath9k/channel.c    2015-06-06 
10:23:05.000000000 +0200
+@@ -16,6 +16,18 @@
+ 
+ #include "ath9k.h"
+ 
++/*
++ * OpenWrt channel set helper helper
++ */
++static set_channel_helper_fn *ath9k_set_channel_helper;
++
++void ath9k_register_set_channel_helper(set_channel_helper_fn *chanfn)
++{
++      ath9k_set_channel_helper = chanfn;
++}
++EXPORT_SYMBOL(ath9k_register_set_channel_helper);
++
++
+ /* Set/change channels.  If the channel is really being changed, it's done
+  * by reseting the chip.  To accomplish this we must first cleanup any pending
+  * DMA, then restart stuff.
+@@ -41,6 +53,9 @@ static int ath_set_channel(struct ath_so
+       ath_dbg(common, CONFIG, "Set channel: %d MHz width: %d\n",
+               chan->center_freq, chandef->width);
+ 
++      if (ath9k_set_channel_helper)
++              ath9k_set_channel_helper(ah, chandef->width, chan->center_freq);
++
+       /* update survey stats for the old channel before switching */
+       spin_lock_bh(&common->cc_lock);
+       ath_update_survey_stats(sc);
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel

Reply via email to