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