From 1d81e3cf3537298ca792bec6746dc86bbf37051d Mon Sep 17 00:00:00 2001 From: Sven Zehl Date: Tue, 27 Sep 2016 16:53:55 +0200 Subject: [PATCH] Update patch kernel 3.12.8 --- patch/ath9k-hmac-backports-3.12.8-1.patch | 438 ++++++++++------------ 1 file changed, 208 insertions(+), 230 deletions(-) diff --git a/patch/ath9k-hmac-backports-3.12.8-1.patch b/patch/ath9k-hmac-backports-3.12.8-1.patch index e8c39b3..2a7aaa7 100644 --- a/patch/ath9k-hmac-backports-3.12.8-1.patch +++ b/patch/ath9k-hmac-backports-3.12.8-1.patch @@ -1,48 +1,47 @@ -From b5b3d0efa2dcddb6cf3c7963e4fd38c56345a609 Mon Sep 17 00:00:00 2001 -From: Zehl -Date: Tue, 3 May 2016 14:25:36 +0200 -Subject: [PATCH] TID-Sleeping-patch +From 18281be4dac86a54ef42d82fa5f774238fe8677f Mon Sep 17 00:00:00 2001 +From: Sven Zehl +Date: Tue, 27 Sep 2016 16:49:30 +0200 +Subject: [PATCH] backports HMAC --- - backports/backports-3.12.8-1/Makefile | 2 + - backports/backports-3.12.8-1/defconfigs/ath9k | 11 + - .../drivers/net/wireless/ath/ath9k/ath9k.h | 20 ++ - .../drivers/net/wireless/ath/ath9k/main.c | 185 +++++++++++++++++ - .../drivers/net/wireless/ath/ath9k/xmit.c | 231 ++++++++++++++++++++- - .../drivers/net/wireless/ath/regd.c | 7 +- - .../backports-3.12.8-1/include/net/cfg80211.h | 7 + - .../backports-3.12.8-1/include/net/mac80211.h | 7 + - .../include/uapi/linux/nl80211.h | 11 +- - backports/backports-3.12.8-1/kconf/Makefile | 2 +- - backports/backports-3.12.8-1/net/mac80211/cfg.c | 17 ++ - .../backports-3.12.8-1/net/mac80211/driver-ops.h | 6 + - .../backports-3.12.8-1/net/wireless/nl80211.c | 83 ++++++++ - .../backports-3.12.8-1/net/wireless/rdev-ops.h | 12 ++ - 14 files changed, 596 insertions(+), 5 deletions(-) + backports-3.12.8-1/.local-symbols | 1 + + backports-3.12.8-1/defconfigs/ath9k | 10 + + .../drivers/net/wireless/ath/ath9k/Kconfig | 8 + + .../drivers/net/wireless/ath/ath9k/ath9k.h | 19 ++ + .../drivers/net/wireless/ath/ath9k/main.c | 183 ++++++++++++++++ + .../drivers/net/wireless/ath/ath9k/xmit.c | 229 ++++++++++++++++++++- + backports-3.12.8-1/drivers/net/wireless/ath/regd.c | 5 +- + backports-3.12.8-1/include/net/cfg80211.h | 6 + + backports-3.12.8-1/include/net/mac80211.h | 5 + + backports-3.12.8-1/include/uapi/linux/nl80211.h | 17 +- + backports-3.12.8-1/kconf/Makefile | 2 +- + backports-3.12.8-1/net/mac80211/cfg.c | 15 ++ + backports-3.12.8-1/net/mac80211/driver-ops.h | 4 + + backports-3.12.8-1/net/wireless/nl80211.c | 81 ++++++++ + backports-3.12.8-1/net/wireless/rdev-ops.h | 10 + + 15 files changed, 589 insertions(+), 6 deletions(-) -diff --git a/backports/backports-3.12.8-1/Makefile b/backports/backports-3.12.8-1/Makefile -index ca69f41..0ef8b67 100755 ---- a/backports/backports-3.12.8-1/Makefile -+++ b/backports/backports-3.12.8-1/Makefile -@@ -8,6 +8,8 @@ MAKEFLAGS += --no-print-directory - SHELL := /bin/bash - BACKPORT_PWD := $(shell pwd) - -+CFLAGS += -DTID_SLEEPING -+ - KMODDIR ?= updates - ifneq ($(origin KLIB), undefined) - KMODPATH_ARG := "INSTALL_MOD_PATH=$(KLIB)" -diff --git a/backports/backports-3.12.8-1/defconfigs/ath9k b/backports/backports-3.12.8-1/defconfigs/ath9k -index 0e935cc..3ce1a41 100755 ---- a/backports/backports-3.12.8-1/defconfigs/ath9k -+++ b/backports/backports-3.12.8-1/defconfigs/ath9k -@@ -7,3 +7,14 @@ CPTCFG_WLAN=y +diff --git a/backports-3.12.8-1/.local-symbols b/backports-3.12.8-1/.local-symbols +index 5e2f85a..2d98349 100755 +--- a/backports-3.12.8-1/.local-symbols ++++ b/backports-3.12.8-1/.local-symbols +@@ -137,6 +137,7 @@ ATH9K_DEBUGFS= + ATH9K_DFS_CERTIFIED= + ATH9K_LEGACY_RATE_CONTROL= + ATH9K_RFKILL= ++ATH9K_TID_SLEEPING= + ATH9K_HTC= + ATH9K_HTC_DEBUGFS= + CARL9170= +diff --git a/backports-3.12.8-1/defconfigs/ath9k b/backports-3.12.8-1/defconfigs/ath9k +index 0e935cc..5a0fc13 100755 +--- a/backports-3.12.8-1/defconfigs/ath9k ++++ b/backports-3.12.8-1/defconfigs/ath9k +@@ -7,3 +7,13 @@ CPTCFG_WLAN=y CPTCFG_ATH_CARDS=m CPTCFG_ATH9K=m CPTCFG_ATH9K_HTC=m +CPTCFG_ATH9K_TID_SLEEPING=y -+CPTCFG_ATH9K_TID_SLEEPING_DEBUG=n +CPTCFG_MAC80211_DEBUGFS=y +CPTCFG_MAC80211_DEBUG_MENU=y +CPTCFG_MAC80211_VERBOSE_DEBUG=y @@ -52,10 +51,26 @@ index 0e935cc..3ce1a41 100755 +CPTCFG_MAC80211_IBSS_DEBUG=y +CPTCFG_MAC80211_PS_DEBUG=y + -diff --git a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h b/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h -index d7f9e29..bbfb763 100755 ---- a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h -+++ b/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h +diff --git a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/Kconfig b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/Kconfig +index c758a70..b2db2e4 100755 +--- a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/Kconfig ++++ b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/Kconfig +@@ -132,3 +132,11 @@ config ATH9K_HTC_DEBUGFS + depends on ATH9K_HTC && DEBUG_FS + ---help--- + Say Y, if you need access to ath9k_htc's statistics. ++ ++config ATH9K_TID_SLEEPING ++ bool "Atheros ath9k TID sleeping support" ++ depends on ATH9K ++ default n ++ ---help--- ++ Say Y to have ath9k TID sleeping support. ++ +diff --git a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h +index d7f9e29..5011517 100755 +--- a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h ++++ b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h @@ -12,6 +12,7 @@ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF @@ -64,20 +79,19 @@ index d7f9e29..bbfb763 100755 */ #ifndef ATH9K_H -@@ -28,6 +29,8 @@ +@@ -28,6 +29,7 @@ #include "mci.h" #include "dfs.h" -+#define TID_SLEEPING + /* * Header for the ath9k.ko driver core *only* -- hw code nor any other driver * should rely on this file or its contents. -@@ -35,6 +38,12 @@ +@@ -35,6 +37,12 @@ struct ath_node; -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING +extern struct list_head tid_sleep_sta_sleep_ctl_list; +void ath_tx_aggr_sleep_tid_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, + struct ath_node *an); @@ -86,12 +100,12 @@ index d7f9e29..bbfb763 100755 /* Macro to expand scalars to 64-bit objects */ #define ito64(x) (sizeof(x) == 1) ? \ -@@ -189,6 +198,17 @@ struct ath_txq { +@@ -189,6 +197,17 @@ struct ath_txq { struct sk_buff_head complete_q; }; + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING +struct tid_sleep_sta_sleep_ctl { + struct list_head list; + struct ieee80211_hw *hw; @@ -104,10 +118,10 @@ index d7f9e29..bbfb763 100755 struct ath_atx_ac { struct ath_txq *txq; struct list_head list; -diff --git a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c b/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c -index 99ab0aa..9431bbb 100755 ---- a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c -+++ b/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c +diff --git a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c +index 99ab0aa..4f939d3 100755 +--- a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c ++++ b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c @@ -12,6 +12,7 @@ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF @@ -116,14 +130,12 @@ index 99ab0aa..9431bbb 100755 */ #include -@@ -19,6 +20,19 @@ +@@ -19,6 +20,17 @@ #include "ath9k.h" #include "btcoex.h" -+#define TID_SLEEPING -+//#define TID_SLEEPING_DEBUG + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING +struct list_head tid_sleep_sta_sleep_ctl_list; + +struct tid_sleep_tuple @@ -136,23 +148,23 @@ index 99ab0aa..9431bbb 100755 static void ath9k_set_assoc_state(struct ath_softc *sc, struct ieee80211_vif *vif); -@@ -660,6 +674,10 @@ static int ath9k_start(struct ieee80211_hw *hw) +@@ -660,6 +672,10 @@ static int ath9k_start(struct ieee80211_hw *hw) mutex_unlock(&sc->mutex); ath9k_ps_restore(sc); + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + INIT_LIST_HEAD(&tid_sleep_sta_sleep_ctl_list); +#endif return 0; } -@@ -1333,6 +1351,20 @@ static int ath9k_sta_add(struct ieee80211_hw *hw, +@@ -1333,6 +1349,20 @@ static int ath9k_sta_add(struct ieee80211_hw *hw, struct ath_node *an = (struct ath_node *) sta->drv_priv; struct ieee80211_key_conf ps_key = { }; int key; + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + int iter_sleep_sta; + struct tid_sleep_sta_sleep_ctl * new_sleep_sta; + new_sleep_sta = kmalloc(sizeof(struct tid_sleep_sta_sleep_ctl), GFP_USER); @@ -168,12 +180,12 @@ index 99ab0aa..9431bbb 100755 ath_node_attach(sc, sta, vif); -@@ -1366,10 +1398,28 @@ static int ath9k_sta_remove(struct ieee80211_hw *hw, +@@ -1366,10 +1396,28 @@ static int ath9k_sta_remove(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta) { + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n; +#endif + @@ -182,7 +194,7 @@ index 99ab0aa..9431bbb 100755 ath9k_del_ps_key(sc, vif, sta); ath_node_detach(sc, sta); + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + list_for_each_entry_safe(sta_pos, sta_n, + &tid_sleep_sta_sleep_ctl_list, list) + { @@ -197,11 +209,11 @@ index 99ab0aa..9431bbb 100755 return 0; } -@@ -1981,6 +2031,138 @@ static int ath9k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant) +@@ -1981,6 +2029,138 @@ static int ath9k_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant) return 0; } -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + +static int ath9k_tid_sleep_mode(char * tid_sleep_data_ptr, + u8 tid_sleep_data_len) @@ -215,14 +227,14 @@ index 99ab0aa..9431bbb 100755 + if(tid_sleep_data_len % sizeof(struct tid_sleep_tuple) == 0) + { + num_entries = tid_sleep_data_len / sizeof(struct tid_sleep_tuple); -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ATH9k:num_entries: %d, tid_sleep_data_len: %d, sizeof one:%lu\n", + num_entries,tid_sleep_data_len,sizeof(struct tid_sleep_tuple)); +#endif + for(j=0; jmac); + printk("TID wakeup mask: %d\n", tids_tuple_ptr->mask); @@ -255,7 +267,7 @@ index 99ab0aa..9431bbb 100755 + } + if(ff_cntr==6) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("Process all STAs activated\n"); +#endif + } @@ -272,7 +284,7 @@ index 99ab0aa..9431bbb 100755 + sta_pos->sta->addr[5]==tids_tuple_ptr->mac[5]) || + (ff_cntr==6)) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("STA MAC: %pM found\n",sta_pos->sta->addr); +#endif + for(tid_no=0; tid_no<8; tid_no++) @@ -280,14 +292,14 @@ index 99ab0aa..9431bbb 100755 + if(wakeup_tids[tid_no]) + { + sta_pos->sleeping_tids[tid_no]=false; -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("Wakeup TID: %d\n",tid_no); +#endif + } + else + { + sta_pos->sleeping_tids[tid_no]=true; -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("Sleeping TID: %d\n",tid_no); +#endif + } @@ -305,7 +317,7 @@ index 99ab0aa..9431bbb 100755 + } + if(num_entries==0) /*Allow nothing, set everything to sleep*/ + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("Global Sleep Mode Activated!\n"); + printk("Putting all STAs and all their TIDs into sleep mode\n"); +#endif @@ -314,7 +326,7 @@ index 99ab0aa..9431bbb 100755 + for(tid_no=0; tid_no<8; tid_no++) + { + sta_pos->sleeping_tids[tid_no]=true; -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("Sleeping TID: %d\n",tid_no); +#endif + } @@ -336,19 +348,19 @@ index 99ab0aa..9431bbb 100755 #ifdef CONFIG_PM_SLEEP static void ath9k_wow_map_triggers(struct ath_softc *sc, -@@ -2381,4 +2563,7 @@ struct ieee80211_ops ath9k_ops = { +@@ -2381,4 +2561,7 @@ struct ieee80211_ops ath9k_ops = { .sw_scan_start = ath9k_sw_scan_start, .sw_scan_complete = ath9k_sw_scan_complete, .channel_switch_beacon = ath9k_channel_switch_beacon, -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + .set_tid_sleep_mode = ath9k_tid_sleep_mode, +#endif }; -diff --git a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c b/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c -index 7fe6b59..c015a61 100755 ---- a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c -+++ b/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c -@@ -12,12 +12,16 @@ +diff --git a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c +index 7fe6b59..2ccd0bf 100755 +--- a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c ++++ b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c +@@ -12,12 +12,14 @@ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. @@ -359,18 +371,16 @@ index 7fe6b59..c015a61 100755 #include "ath9k.h" #include "ar9003_mac.h" -+#define TID_SLEEPING -+//#define TID_SLEEPING_DEBUG + #define BITS_PER_BYTE 8 #define OFDM_PLCP_BITS 22 #define HT_RC_2_STREAMS(_rc) ((((_rc) & 0x78) >> 3) + 1) -@@ -1453,9 +1457,47 @@ void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, +@@ -1453,9 +1455,47 @@ void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, struct ath_txq *txq; bool buffered; int tidno; + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found; + sta_found = 0; + sta_n = 0; @@ -379,7 +389,7 @@ index 7fe6b59..c015a61 100755 + list_for_each_entry_safe(sta_pos, sta_n, + &tid_sleep_sta_sleep_ctl_list, list) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_aggr_sleep: MAC searched: %pM \n", sta->addr); + printk("ath_tx_aggr_sleep: MAC saved: %pM \n", sta_pos->sta->addr); +#endif @@ -395,7 +405,7 @@ index 7fe6b59..c015a61 100755 for (tidno = 0, tid = &an->tid[tidno]; tidno < IEEE80211_NUM_TIDS; tidno++, tid++) { + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + if(sta_found) + { + if(sta_found->sleeping_tids[tidno]==false) @@ -403,7 +413,7 @@ index 7fe6b59..c015a61 100755 + /*Do not put a TID of a STA that is in global sleep mode + into sleep mode if the TID of the STA has set + sleep mode set to false*/ -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_aggr_sleep: Do no sleeo break!"); +#endif + continue; @@ -413,11 +423,11 @@ index 7fe6b59..c015a61 100755 if (!tid->sched) continue; -@@ -1481,16 +1523,121 @@ void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, +@@ -1481,16 +1521,121 @@ void ath_tx_aggr_sleep(struct ieee80211_sta *sta, struct ath_softc *sc, } } -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING +void ath_tx_aggr_sleep_tid_sleep(struct ieee80211_sta *sta, + struct ath_softc *sc, struct ath_node *an) +{ @@ -434,7 +444,7 @@ index 7fe6b59..c015a61 100755 + list_for_each_entry_safe(sta_pos, sta_n, + &tid_sleep_sta_sleep_ctl_list, list) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_aggr_sleep_tid_sleep: MAC searched: %pM \n", + sta->addr); + printk("ath_tx_aggr_sleep_tid_sleep: MAC saved: %pM \n", @@ -493,7 +503,7 @@ index 7fe6b59..c015a61 100755 struct ath_txq *txq; int tidno; + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found; + sta_found = 0; + sta_n = 0; @@ -502,7 +512,7 @@ index 7fe6b59..c015a61 100755 + list_for_each_entry_safe(sta_pos, sta_n, + &tid_sleep_sta_sleep_ctl_list, list) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_aggr_wakeup: MAC search: %pM \n", + an->sta->addr); + printk("ath_tx_aggr_wakeup: MAC saved: %pM \n", @@ -519,13 +529,13 @@ index 7fe6b59..c015a61 100755 for (tidno = 0, tid = &an->tid[tidno]; tidno < IEEE80211_NUM_TIDS; tidno++, tid++) { -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + if(sta_found) + { + if(sta_found->sleeping_tids[tidno]==true) + { + continue; -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_aggr_wakeup: Do no wake up, break!"); +#endif + } @@ -535,12 +545,12 @@ index 7fe6b59..c015a61 100755 ac = tid->ac; txq = ac->txq; -@@ -2178,6 +2325,14 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, +@@ -2178,6 +2323,14 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, struct ath_buf *bf; int q; int ret; + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found; + bool tid_sleep_tid_force_sleep=false; + sta_found = 0; @@ -550,16 +560,16 @@ index 7fe6b59..c015a61 100755 ret = ath_tx_prepare(hw, skb, txctl); if (ret) -@@ -2211,6 +2366,71 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, +@@ -2211,6 +2364,71 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT) tid->ac->clear_ps_filter = true; -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + if(txctl->an) + { + if(txctl->an->sta) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_start: MAC search: %pM \n", + txctl->an->sta->addr); +#endif @@ -569,14 +579,14 @@ index 7fe6b59..c015a61 100755 + { + if(sta_pos->sta == txctl->an->sta) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_start: MAC saved: %pM \n", + sta_pos->sta->addr); +#endif + sta_found=sta_pos; + if(tid) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_start:STA found 1"); +#endif + tid_sleep_tid_force_sleep=sta_found-> @@ -588,7 +598,7 @@ index 7fe6b59..c015a61 100755 + } + else if(txctl->sta) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_start: MAC search: %pM \n", + txctl->sta->addr); +#endif @@ -596,7 +606,7 @@ index 7fe6b59..c015a61 100755 + list_for_each_entry_safe(sta_pos, sta_n, + &tid_sleep_sta_sleep_ctl_list, list) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_start: MAC saved: %pM \n", + sta_pos->sta->addr); +#endif @@ -605,7 +615,7 @@ index 7fe6b59..c015a61 100755 + sta_found=sta_pos; + if(tid) + { -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_start: STA found 2"); +#endif + tid_sleep_tid_force_sleep=sta_found-> @@ -622,17 +632,17 @@ index 7fe6b59..c015a61 100755 /* * Add this frame to software queue for scheduling later -@@ -2218,9 +2438,16 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, +@@ -2218,9 +2436,16 @@ int ath_tx_start(struct ieee80211_hw *hw, struct sk_buff *skb, */ TX_STAT_INC(txq->axq_qnum, a_queued_sw); __skb_queue_tail(&tid->buf_q, skb); - if (!txctl->an->sleeping) -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + if (!txctl->an->sleeping && tid_sleep_tid_force_sleep==false) { +#else + if (!txctl->an->sleeping) { +#endif -+#ifdef TID_SLEEPING_DEBUG ++#ifdef CPTCFG_ATH_DEBUG + printk("ath_tx_start: This frame will be sent\n"); +#endif ath_tx_queue_tid(txq, tid); @@ -641,37 +651,33 @@ index 7fe6b59..c015a61 100755 ath_txq_schedule(sc, txq); goto out; } -diff --git a/backports/backports-3.12.8-1/drivers/net/wireless/ath/regd.c b/backports/backports-3.12.8-1/drivers/net/wireless/ath/regd.c -index 7d077c7..91a9170 100755 ---- a/backports/backports-3.12.8-1/drivers/net/wireless/ath/regd.c -+++ b/backports/backports-3.12.8-1/drivers/net/wireless/ath/regd.c -@@ -12,8 +12,11 @@ +diff --git a/backports-3.12.8-1/drivers/net/wireless/ath/regd.c b/backports-3.12.8-1/drivers/net/wireless/ath/regd.c +index 7d077c7..a1003e0 100755 +--- a/backports-3.12.8-1/drivers/net/wireless/ath/regd.c ++++ b/backports-3.12.8-1/drivers/net/wireless/ath/regd.c +@@ -12,6 +12,7 @@ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + * TID_SLEEPING PATCH 2015 Sven Zehl zehl@tkn.tu-berlin.de */ -+#define TID_SLEEPING -+ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt - - #include -@@ -568,7 +571,9 @@ static int __ath_regd_init(struct ath_regulatory *reg) +@@ -568,7 +569,9 @@ static int __ath_regd_init(struct ath_regulatory *reg) "country code should be used\n"); reg->country_code = CTRY_UNITED_STATES; } - -+#ifdef TID_SLEEPING -+ printk("ath: TID SLEEPING MODE ENABLED\n"); ++#ifdef CPTCFG_ATH9K_TID_SLEEPING ++ printk("ath: ATH9K HMAC ENABLED\n"); +#endif if (reg->country_code == CTRY_DEFAULT) { country = NULL; } else { -diff --git a/backports/backports-3.12.8-1/include/net/cfg80211.h b/backports/backports-3.12.8-1/include/net/cfg80211.h -index 9c4e228..153da60 100755 ---- a/backports/backports-3.12.8-1/include/net/cfg80211.h -+++ b/backports/backports-3.12.8-1/include/net/cfg80211.h +diff --git a/backports-3.12.8-1/include/net/cfg80211.h b/backports-3.12.8-1/include/net/cfg80211.h +index 9c4e228..428a5de 100755 +--- a/backports-3.12.8-1/include/net/cfg80211.h ++++ b/backports-3.12.8-1/include/net/cfg80211.h @@ -8,6 +8,7 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -680,30 +686,29 @@ index 9c4e228..153da60 100755 */ #include -@@ -22,6 +23,8 @@ +@@ -22,6 +23,7 @@ #include #include -+#define TID_SLEEPING + /** * DOC: Introduction * -@@ -2407,6 +2410,10 @@ struct cfg80211_ops { +@@ -2407,6 +2409,10 @@ struct cfg80211_ops { int (*channel_switch)(struct wiphy *wiphy, struct net_device *dev, struct cfg80211_csa_settings *params); -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + int (*tid_sleeping)(struct wiphy *wiphy, struct net_device *dev, + char * tid_sleep_data_ptr, u8 tid_sleep_data_len); +#endif }; /* -diff --git a/backports/backports-3.12.8-1/include/net/mac80211.h b/backports/backports-3.12.8-1/include/net/mac80211.h -index 1682fc3..d9a0e47 100755 ---- a/backports/backports-3.12.8-1/include/net/mac80211.h -+++ b/backports/backports-3.12.8-1/include/net/mac80211.h +diff --git a/backports-3.12.8-1/include/net/mac80211.h b/backports-3.12.8-1/include/net/mac80211.h +index 1682fc3..8dfdf39 100755 +--- a/backports-3.12.8-1/include/net/mac80211.h ++++ b/backports-3.12.8-1/include/net/mac80211.h @@ -8,6 +8,7 @@ * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as @@ -712,31 +717,22 @@ index 1682fc3..d9a0e47 100755 */ #ifndef MAC80211_H -@@ -21,6 +22,8 @@ - #include - #include - -+#define TID_SLEEPING -+ - /** - * DOC: Introduction - * -@@ -2867,6 +2870,10 @@ struct ieee80211_ops { +@@ -2867,6 +2868,10 @@ struct ieee80211_ops { void (*channel_switch_beacon)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct cfg80211_chan_def *chandef); -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + int (*set_tid_sleep_mode)(char * tid_sleep_data_ptr, + u8 tid_sleep_data_len); +#endif }; /** -diff --git a/backports/backports-3.12.8-1/include/uapi/linux/nl80211.h b/backports/backports-3.12.8-1/include/uapi/linux/nl80211.h -index fde2c02..9d351db 100755 ---- a/backports/backports-3.12.8-1/include/uapi/linux/nl80211.h -+++ b/backports/backports-3.12.8-1/include/uapi/linux/nl80211.h -@@ -22,12 +22,13 @@ +diff --git a/backports-3.12.8-1/include/uapi/linux/nl80211.h b/backports-3.12.8-1/include/uapi/linux/nl80211.h +index fde2c02..142f992 100755 +--- a/backports-3.12.8-1/include/uapi/linux/nl80211.h ++++ b/backports-3.12.8-1/include/uapi/linux/nl80211.h +@@ -22,7 +22,7 @@ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. @@ -745,48 +741,63 @@ index fde2c02..9d351db 100755 */ #include +@@ -685,6 +685,10 @@ + * width). %NL80211_ATTR_CH_SWITCH_BLOCK_TX may be supplied to inform + * other station that transmission must be blocked until the channel + * switch is complete. ++ * ++ * @NL80211_CMD_SET_TID_SLEEP: set the power save mode of a single TID ++ * of a distinct STA. ++ * + * + * @NL80211_CMD_MAX: highest used command number + * @__NL80211_CMD_AFTER_LAST: internal use +@@ -854,7 +858,9 @@ enum nl80211_commands { + NL80211_CMD_CHANNEL_SWITCH, - #define NL80211_GENL_NAME "nl80211" -+#define TID_SLEEPING - - /** - * DOC: Station handling -@@ -1496,6 +1497,9 @@ enum nl80211_commands { + /* add new commands above here */ +- ++#ifdef CPTCFG_ATH9K_TID_SLEEPING ++ NL80211_CMD_SET_TID_SLEEP, ++#endif + /* used to define NL80211_CMD_MAX below */ + __NL80211_CMD_AFTER_LAST, + NL80211_CMD_MAX = __NL80211_CMD_AFTER_LAST - 1 +@@ -1496,6 +1502,9 @@ enum nl80211_commands { * @NL80211_ATTR_RXMGMT_FLAGS: flags for nl80211_send_mgmt(), u32. * As specified in the &enum nl80211_rxmgmt_flags. * -+ * @NL80211_ATTR_TID_SLEEP_CTRL: change the power save mode of a single TID -+ * of a distinct STA. (TID_SLEEPING) ++ * @NL80211_ATTR_TID_SLEEP: payload for changing the power save mode of ++ * a single TID of a distinct STA. (TID_SLEEPING) + * * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use */ -@@ -1807,6 +1811,11 @@ enum nl80211_attrs { +@@ -1807,6 +1816,10 @@ enum nl80211_attrs { NL80211_ATTR_RXMGMT_FLAGS, /* add attributes here, update the policy in nl80211.c */ + -+#ifdef TID_SLEEPING -+ NL80211_ATTR_TID_SLEEP_CTRL, -+ NL80211_ATTR_TID_SLEEP_CTRL_DATA, ++#ifdef CPTCFG_ATH9K_TID_SLEEPING ++ NL80211_ATTR_TID_SLEEP, +#endif __NL80211_ATTR_AFTER_LAST, NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1 -diff --git a/backports/backports-3.12.8-1/kconf/Makefile b/backports/backports-3.12.8-1/kconf/Makefile -index dfd793a..98d00a1 100755 ---- a/backports/backports-3.12.8-1/kconf/Makefile -+++ b/backports/backports-3.12.8-1/kconf/Makefile +diff --git a/backports-3.12.8-1/kconf/Makefile b/backports-3.12.8-1/kconf/Makefile +index dfd793a..70e68a9 100755 +--- a/backports-3.12.8-1/kconf/Makefile ++++ b/backports-3.12.8-1/kconf/Makefile @@ -1,4 +1,4 @@ -CFLAGS=-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -+CFLAGS=-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer -DTID_SLEEPING ++CFLAGS=-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer LXDIALOG := lxdialog/checklist.o lxdialog/inputbox.o lxdialog/menubox.o lxdialog/textbox.o lxdialog/util.o lxdialog/yesno.o -diff --git a/backports/backports-3.12.8-1/net/mac80211/cfg.c b/backports/backports-3.12.8-1/net/mac80211/cfg.c -index cb09f6d..d315b4d 100755 ---- a/backports/backports-3.12.8-1/net/mac80211/cfg.c -+++ b/backports/backports-3.12.8-1/net/mac80211/cfg.c +diff --git a/backports-3.12.8-1/net/mac80211/cfg.c b/backports-3.12.8-1/net/mac80211/cfg.c +index cb09f6d..d19a338 100755 +--- a/backports-3.12.8-1/net/mac80211/cfg.c ++++ b/backports-3.12.8-1/net/mac80211/cfg.c @@ -4,6 +4,7 @@ * Copyright 2006-2010 Johannes Berg * @@ -795,20 +806,11 @@ index cb09f6d..d315b4d 100755 */ #include -@@ -20,6 +21,8 @@ - #include "rate.h" - #include "mesh.h" - -+#define TID_SLEEPING -+ - static struct wireless_dev *ieee80211_add_iface(struct wiphy *wiphy, - const char *name, - enum nl80211_iftype type, -@@ -1455,6 +1458,17 @@ static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev, +@@ -1455,6 +1456,17 @@ static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev, return 0; } -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING +static int ieee80211_tid_sleeping(struct wiphy *wiphy, + struct net_device *dev, char * tid_sleep_data_ptr, + u8 tid_sleep_data_len) @@ -822,19 +824,19 @@ index cb09f6d..d315b4d 100755 static int ieee80211_change_station(struct wiphy *wiphy, struct net_device *dev, u8 *mac, struct station_parameters *params) -@@ -3687,4 +3701,7 @@ struct cfg80211_ops mac80211_config_ops = { +@@ -3687,4 +3699,7 @@ struct cfg80211_ops mac80211_config_ops = { .get_channel = ieee80211_cfg_get_channel, .start_radar_detection = ieee80211_start_radar_detection, .channel_switch = ieee80211_channel_switch, -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + .tid_sleeping = ieee80211_tid_sleeping, +#endif }; -diff --git a/backports/backports-3.12.8-1/net/mac80211/driver-ops.h b/backports/backports-3.12.8-1/net/mac80211/driver-ops.h -index cb920c4..568d21c 100755 ---- a/backports/backports-3.12.8-1/net/mac80211/driver-ops.h -+++ b/backports/backports-3.12.8-1/net/mac80211/driver-ops.h -@@ -1,10 +1,16 @@ +diff --git a/backports-3.12.8-1/net/mac80211/driver-ops.h b/backports-3.12.8-1/net/mac80211/driver-ops.h +index cb920c4..6359ff1 100755 +--- a/backports-3.12.8-1/net/mac80211/driver-ops.h ++++ b/backports-3.12.8-1/net/mac80211/driver-ops.h +@@ -1,6 +1,10 @@ #ifndef __MAC80211_DRIVER_OPS #define __MAC80211_DRIVER_OPS @@ -845,16 +847,10 @@ index cb920c4..568d21c 100755 #include #include "ieee80211_i.h" #include "trace.h" - -+#define TID_SLEEPING -+ - static inline void check_sdata_in_driver(struct ieee80211_sub_if_data *sdata) - { - WARN(!(sdata->flags & IEEE80211_SDATA_IN_DRIVER), -diff --git a/backports/backports-3.12.8-1/net/wireless/nl80211.c b/backports/backports-3.12.8-1/net/wireless/nl80211.c -index 47f7e91..52fd011 100755 ---- a/backports/backports-3.12.8-1/net/wireless/nl80211.c -+++ b/backports/backports-3.12.8-1/net/wireless/nl80211.c +diff --git a/backports-3.12.8-1/net/wireless/nl80211.c b/backports-3.12.8-1/net/wireless/nl80211.c +index 47f7e91..2bff489 100755 +--- a/backports-3.12.8-1/net/wireless/nl80211.c ++++ b/backports-3.12.8-1/net/wireless/nl80211.c @@ -2,6 +2,7 @@ * This is the new netlink-based wireless configuration interface. * @@ -863,21 +859,12 @@ index 47f7e91..52fd011 100755 */ #include -@@ -25,6 +26,8 @@ - #include "reg.h" - #include "rdev-ops.h" - -+#define TID_SLEEPING -+ - static int nl80211_crypto_settings(struct cfg80211_registered_device *rdev, - struct genl_info *info, - struct cfg80211_crypto_settings *settings, -@@ -3914,6 +3917,76 @@ static int nl80211_set_station_tdls(struct genl_info *info, +@@ -3914,6 +3915,76 @@ static int nl80211_set_station_tdls(struct genl_info *info, return nl80211_parse_sta_wme(info, params); } + -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + +static int nl80211_dump_tid_sleeping(struct sk_buff *skb, + struct netlink_callback *cb) @@ -904,15 +891,15 @@ index 47f7e91..52fd011 100755 + + tid_sleep_data_len = 0; + tid_sleep_data_ptr = 0; -+ if (info->attrs[NL80211_ATTR_TID_SLEEP_CTRL_DATA]) { ++ if (info->attrs[NL80211_ATTR_TID_SLEEP]) { + tid_sleep_data_ptr = -+ nla_data(info->attrs[NL80211_ATTR_TID_SLEEP_CTRL_DATA]); ++ nla_data(info->attrs[NL80211_ATTR_TID_SLEEP]); + tid_sleep_data_len = -+ nla_len(info->attrs[NL80211_ATTR_TID_SLEEP_CTRL_DATA]); ++ nla_len(info->attrs[NL80211_ATTR_TID_SLEEP]); + } + else + { -+ printk("No data supplied for NL80211_ATTR_TID_SLEEP_CTRL\n"); ++ printk("No data supplied for NL80211_ATTR_TID_SLEEP\n"); + } + + switch (dev->ieee80211_ptr->iftype) { @@ -949,13 +936,13 @@ index 47f7e91..52fd011 100755 static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info) { struct cfg80211_registered_device *rdev = info->user_ptr[0]; -@@ -9498,6 +9571,16 @@ static struct genl_ops nl80211_ops[] = { +@@ -9498,6 +9569,16 @@ static struct genl_ops nl80211_ops[] = { .internal_flags = NL80211_FLAG_NEED_NETDEV_UP | NL80211_FLAG_NEED_RTNL, }, -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING + { -+ .cmd = NL80211_ATTR_TID_SLEEP_CTRL, ++ .cmd = NL80211_CMD_SET_TID_SLEEP, + .doit = nl80211_tid_sleeping, + .dumpit = nl80211_dump_tid_sleeping, + .policy = nl80211_policy, @@ -966,24 +953,15 @@ index 47f7e91..52fd011 100755 }; static struct genl_multicast_group nl80211_mlme_mcgrp = { -diff --git a/backports/backports-3.12.8-1/net/wireless/rdev-ops.h b/backports/backports-3.12.8-1/net/wireless/rdev-ops.h -index 725db21..f383baf 100755 ---- a/backports/backports-3.12.8-1/net/wireless/rdev-ops.h -+++ b/backports/backports-3.12.8-1/net/wireless/rdev-ops.h -@@ -1,6 +1,8 @@ - #ifndef __CFG80211_RDEV_OPS - #define __CFG80211_RDEV_OPS - -+#define TID_SLEEPING -+ - #include - #include - #include "core.h" -@@ -198,6 +200,16 @@ static inline int rdev_change_station(struct cfg80211_registered_device *rdev, +diff --git a/backports-3.12.8-1/net/wireless/rdev-ops.h b/backports-3.12.8-1/net/wireless/rdev-ops.h +index 725db21..898f099 100755 +--- a/backports-3.12.8-1/net/wireless/rdev-ops.h ++++ b/backports-3.12.8-1/net/wireless/rdev-ops.h +@@ -198,6 +198,16 @@ static inline int rdev_change_station(struct cfg80211_registered_device *rdev, return ret; } -+#ifdef TID_SLEEPING ++#ifdef CPTCFG_ATH9K_TID_SLEEPING +static inline int rdev_tid_sleeping(struct cfg80211_registered_device *rdev, + struct net_device *dev, char * tid_sleep_data_ptr, u8 tid_sleep_data_len) +{ @@ -997,5 +975,5 @@ index 725db21..f383baf 100755 struct net_device *dev, u8 *mac, struct station_info *sinfo) -- -1.9.1 +2.8.1