mirror of
https://github.com/szehl/ath9k-hmac.git
synced 2024-12-18 21:37:51 +00:00
Update patch kernel 3.12.8
This commit is contained in:
parent
832eaf8282
commit
1d81e3cf35
@ -1,48 +1,47 @@
|
|||||||
From b5b3d0efa2dcddb6cf3c7963e4fd38c56345a609 Mon Sep 17 00:00:00 2001
|
From 18281be4dac86a54ef42d82fa5f774238fe8677f Mon Sep 17 00:00:00 2001
|
||||||
From: Zehl <zehl@tkn.tu-berlin.de>
|
From: Sven Zehl <zehl@tu-berlin.de>
|
||||||
Date: Tue, 3 May 2016 14:25:36 +0200
|
Date: Tue, 27 Sep 2016 16:49:30 +0200
|
||||||
Subject: [PATCH] TID-Sleeping-patch
|
Subject: [PATCH] backports HMAC
|
||||||
|
|
||||||
---
|
---
|
||||||
backports/backports-3.12.8-1/Makefile | 2 +
|
backports-3.12.8-1/.local-symbols | 1 +
|
||||||
backports/backports-3.12.8-1/defconfigs/ath9k | 11 +
|
backports-3.12.8-1/defconfigs/ath9k | 10 +
|
||||||
.../drivers/net/wireless/ath/ath9k/ath9k.h | 20 ++
|
.../drivers/net/wireless/ath/ath9k/Kconfig | 8 +
|
||||||
.../drivers/net/wireless/ath/ath9k/main.c | 185 +++++++++++++++++
|
.../drivers/net/wireless/ath/ath9k/ath9k.h | 19 ++
|
||||||
.../drivers/net/wireless/ath/ath9k/xmit.c | 231 ++++++++++++++++++++-
|
.../drivers/net/wireless/ath/ath9k/main.c | 183 ++++++++++++++++
|
||||||
.../drivers/net/wireless/ath/regd.c | 7 +-
|
.../drivers/net/wireless/ath/ath9k/xmit.c | 229 ++++++++++++++++++++-
|
||||||
.../backports-3.12.8-1/include/net/cfg80211.h | 7 +
|
backports-3.12.8-1/drivers/net/wireless/ath/regd.c | 5 +-
|
||||||
.../backports-3.12.8-1/include/net/mac80211.h | 7 +
|
backports-3.12.8-1/include/net/cfg80211.h | 6 +
|
||||||
.../include/uapi/linux/nl80211.h | 11 +-
|
backports-3.12.8-1/include/net/mac80211.h | 5 +
|
||||||
backports/backports-3.12.8-1/kconf/Makefile | 2 +-
|
backports-3.12.8-1/include/uapi/linux/nl80211.h | 17 +-
|
||||||
backports/backports-3.12.8-1/net/mac80211/cfg.c | 17 ++
|
backports-3.12.8-1/kconf/Makefile | 2 +-
|
||||||
.../backports-3.12.8-1/net/mac80211/driver-ops.h | 6 +
|
backports-3.12.8-1/net/mac80211/cfg.c | 15 ++
|
||||||
.../backports-3.12.8-1/net/wireless/nl80211.c | 83 ++++++++
|
backports-3.12.8-1/net/mac80211/driver-ops.h | 4 +
|
||||||
.../backports-3.12.8-1/net/wireless/rdev-ops.h | 12 ++
|
backports-3.12.8-1/net/wireless/nl80211.c | 81 ++++++++
|
||||||
14 files changed, 596 insertions(+), 5 deletions(-)
|
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
|
diff --git a/backports-3.12.8-1/.local-symbols b/backports-3.12.8-1/.local-symbols
|
||||||
index ca69f41..0ef8b67 100755
|
index 5e2f85a..2d98349 100755
|
||||||
--- a/backports/backports-3.12.8-1/Makefile
|
--- a/backports-3.12.8-1/.local-symbols
|
||||||
+++ b/backports/backports-3.12.8-1/Makefile
|
+++ b/backports-3.12.8-1/.local-symbols
|
||||||
@@ -8,6 +8,8 @@ MAKEFLAGS += --no-print-directory
|
@@ -137,6 +137,7 @@ ATH9K_DEBUGFS=
|
||||||
SHELL := /bin/bash
|
ATH9K_DFS_CERTIFIED=
|
||||||
BACKPORT_PWD := $(shell pwd)
|
ATH9K_LEGACY_RATE_CONTROL=
|
||||||
|
ATH9K_RFKILL=
|
||||||
+CFLAGS += -DTID_SLEEPING
|
+ATH9K_TID_SLEEPING=
|
||||||
+
|
ATH9K_HTC=
|
||||||
KMODDIR ?= updates
|
ATH9K_HTC_DEBUGFS=
|
||||||
ifneq ($(origin KLIB), undefined)
|
CARL9170=
|
||||||
KMODPATH_ARG := "INSTALL_MOD_PATH=$(KLIB)"
|
diff --git a/backports-3.12.8-1/defconfigs/ath9k b/backports-3.12.8-1/defconfigs/ath9k
|
||||||
diff --git a/backports/backports-3.12.8-1/defconfigs/ath9k b/backports/backports-3.12.8-1/defconfigs/ath9k
|
index 0e935cc..5a0fc13 100755
|
||||||
index 0e935cc..3ce1a41 100755
|
--- a/backports-3.12.8-1/defconfigs/ath9k
|
||||||
--- a/backports/backports-3.12.8-1/defconfigs/ath9k
|
+++ b/backports-3.12.8-1/defconfigs/ath9k
|
||||||
+++ b/backports/backports-3.12.8-1/defconfigs/ath9k
|
@@ -7,3 +7,13 @@ CPTCFG_WLAN=y
|
||||||
@@ -7,3 +7,14 @@ CPTCFG_WLAN=y
|
|
||||||
CPTCFG_ATH_CARDS=m
|
CPTCFG_ATH_CARDS=m
|
||||||
CPTCFG_ATH9K=m
|
CPTCFG_ATH9K=m
|
||||||
CPTCFG_ATH9K_HTC=m
|
CPTCFG_ATH9K_HTC=m
|
||||||
+CPTCFG_ATH9K_TID_SLEEPING=y
|
+CPTCFG_ATH9K_TID_SLEEPING=y
|
||||||
+CPTCFG_ATH9K_TID_SLEEPING_DEBUG=n
|
|
||||||
+CPTCFG_MAC80211_DEBUGFS=y
|
+CPTCFG_MAC80211_DEBUGFS=y
|
||||||
+CPTCFG_MAC80211_DEBUG_MENU=y
|
+CPTCFG_MAC80211_DEBUG_MENU=y
|
||||||
+CPTCFG_MAC80211_VERBOSE_DEBUG=y
|
+CPTCFG_MAC80211_VERBOSE_DEBUG=y
|
||||||
@ -52,10 +51,26 @@ index 0e935cc..3ce1a41 100755
|
|||||||
+CPTCFG_MAC80211_IBSS_DEBUG=y
|
+CPTCFG_MAC80211_IBSS_DEBUG=y
|
||||||
+CPTCFG_MAC80211_PS_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
|
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 d7f9e29..bbfb763 100755
|
index c758a70..b2db2e4 100755
|
||||||
--- a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h
|
--- a/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/Kconfig
|
||||||
+++ b/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/ath9k.h
|
+++ 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 @@
|
@@ -12,6 +12,7 @@
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
@ -64,20 +79,19 @@ index d7f9e29..bbfb763 100755
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef ATH9K_H
|
#ifndef ATH9K_H
|
||||||
@@ -28,6 +29,8 @@
|
@@ -28,6 +29,7 @@
|
||||||
#include "mci.h"
|
#include "mci.h"
|
||||||
#include "dfs.h"
|
#include "dfs.h"
|
||||||
|
|
||||||
+#define TID_SLEEPING
|
|
||||||
+
|
+
|
||||||
/*
|
/*
|
||||||
* Header for the ath9k.ko driver core *only* -- hw code nor any other driver
|
* Header for the ath9k.ko driver core *only* -- hw code nor any other driver
|
||||||
* should rely on this file or its contents.
|
* should rely on this file or its contents.
|
||||||
@@ -35,6 +38,12 @@
|
@@ -35,6 +37,12 @@
|
||||||
|
|
||||||
struct ath_node;
|
struct ath_node;
|
||||||
|
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+extern struct list_head tid_sleep_sta_sleep_ctl_list;
|
+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,
|
+void ath_tx_aggr_sleep_tid_sleep(struct ieee80211_sta *sta, struct ath_softc *sc,
|
||||||
+ struct ath_node *an);
|
+ struct ath_node *an);
|
||||||
@ -86,12 +100,12 @@ index d7f9e29..bbfb763 100755
|
|||||||
/* Macro to expand scalars to 64-bit objects */
|
/* Macro to expand scalars to 64-bit objects */
|
||||||
|
|
||||||
#define ito64(x) (sizeof(x) == 1) ? \
|
#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;
|
struct sk_buff_head complete_q;
|
||||||
};
|
};
|
||||||
|
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+struct tid_sleep_sta_sleep_ctl {
|
+struct tid_sleep_sta_sleep_ctl {
|
||||||
+ struct list_head list;
|
+ struct list_head list;
|
||||||
+ struct ieee80211_hw *hw;
|
+ struct ieee80211_hw *hw;
|
||||||
@ -104,10 +118,10 @@ index d7f9e29..bbfb763 100755
|
|||||||
struct ath_atx_ac {
|
struct ath_atx_ac {
|
||||||
struct ath_txq *txq;
|
struct ath_txq *txq;
|
||||||
struct list_head list;
|
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
|
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..9431bbb 100755
|
index 99ab0aa..4f939d3 100755
|
||||||
--- a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c
|
--- a/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
|
+++ b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/main.c
|
||||||
@@ -12,6 +12,7 @@
|
@@ -12,6 +12,7 @@
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
@ -116,14 +130,12 @@ index 99ab0aa..9431bbb 100755
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/nl80211.h>
|
#include <linux/nl80211.h>
|
||||||
@@ -19,6 +20,19 @@
|
@@ -19,6 +20,17 @@
|
||||||
#include "ath9k.h"
|
#include "ath9k.h"
|
||||||
#include "btcoex.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 list_head tid_sleep_sta_sleep_ctl_list;
|
||||||
+
|
+
|
||||||
+struct tid_sleep_tuple
|
+struct tid_sleep_tuple
|
||||||
@ -136,23 +148,23 @@ index 99ab0aa..9431bbb 100755
|
|||||||
static void ath9k_set_assoc_state(struct ath_softc *sc,
|
static void ath9k_set_assoc_state(struct ath_softc *sc,
|
||||||
struct ieee80211_vif *vif);
|
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);
|
mutex_unlock(&sc->mutex);
|
||||||
|
|
||||||
ath9k_ps_restore(sc);
|
ath9k_ps_restore(sc);
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ INIT_LIST_HEAD(&tid_sleep_sta_sleep_ctl_list);
|
+ INIT_LIST_HEAD(&tid_sleep_sta_sleep_ctl_list);
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
return 0;
|
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 ath_node *an = (struct ath_node *) sta->drv_priv;
|
||||||
struct ieee80211_key_conf ps_key = { };
|
struct ieee80211_key_conf ps_key = { };
|
||||||
int key;
|
int key;
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ int iter_sleep_sta;
|
+ int iter_sleep_sta;
|
||||||
+ struct tid_sleep_sta_sleep_ctl * new_sleep_sta;
|
+ struct tid_sleep_sta_sleep_ctl * new_sleep_sta;
|
||||||
+ new_sleep_sta = kmalloc(sizeof(struct tid_sleep_sta_sleep_ctl), GFP_USER);
|
+ 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);
|
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_vif *vif,
|
||||||
struct ieee80211_sta *sta)
|
struct ieee80211_sta *sta)
|
||||||
{
|
{
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n;
|
+ struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n;
|
||||||
+#endif
|
+#endif
|
||||||
+
|
+
|
||||||
@ -182,7 +194,7 @@ index 99ab0aa..9431bbb 100755
|
|||||||
ath9k_del_ps_key(sc, vif, sta);
|
ath9k_del_ps_key(sc, vif, sta);
|
||||||
ath_node_detach(sc, sta);
|
ath_node_detach(sc, sta);
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ list_for_each_entry_safe(sta_pos, sta_n,
|
+ list_for_each_entry_safe(sta_pos, sta_n,
|
||||||
+ &tid_sleep_sta_sleep_ctl_list, list)
|
+ &tid_sleep_sta_sleep_ctl_list, list)
|
||||||
+ {
|
+ {
|
||||||
@ -197,11 +209,11 @@ index 99ab0aa..9431bbb 100755
|
|||||||
|
|
||||||
return 0;
|
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;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+
|
+
|
||||||
+static int ath9k_tid_sleep_mode(char * tid_sleep_data_ptr,
|
+static int ath9k_tid_sleep_mode(char * tid_sleep_data_ptr,
|
||||||
+ u8 tid_sleep_data_len)
|
+ u8 tid_sleep_data_len)
|
||||||
@ -215,14 +227,14 @@ index 99ab0aa..9431bbb 100755
|
|||||||
+ if(tid_sleep_data_len % sizeof(struct tid_sleep_tuple) == 0)
|
+ if(tid_sleep_data_len % sizeof(struct tid_sleep_tuple) == 0)
|
||||||
+ {
|
+ {
|
||||||
+ num_entries = tid_sleep_data_len / sizeof(struct tid_sleep_tuple);
|
+ 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",
|
+ 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));
|
+ num_entries,tid_sleep_data_len,sizeof(struct tid_sleep_tuple));
|
||||||
+#endif
|
+#endif
|
||||||
+ for(j=0; j<num_entries; j++)
|
+ for(j=0; j<num_entries; j++)
|
||||||
+ {
|
+ {
|
||||||
+ /*Print current entry*/
|
+ /*Print current entry*/
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("*****\nEntry No: %d\nMAC: %pM \n",j,
|
+ printk("*****\nEntry No: %d\nMAC: %pM \n",j,
|
||||||
+ tids_tuple_ptr->mac);
|
+ tids_tuple_ptr->mac);
|
||||||
+ printk("TID wakeup mask: %d\n", tids_tuple_ptr->mask);
|
+ printk("TID wakeup mask: %d\n", tids_tuple_ptr->mask);
|
||||||
@ -255,7 +267,7 @@ index 99ab0aa..9431bbb 100755
|
|||||||
+ }
|
+ }
|
||||||
+ if(ff_cntr==6)
|
+ if(ff_cntr==6)
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("Process all STAs activated\n");
|
+ printk("Process all STAs activated\n");
|
||||||
+#endif
|
+#endif
|
||||||
+ }
|
+ }
|
||||||
@ -272,7 +284,7 @@ index 99ab0aa..9431bbb 100755
|
|||||||
+ sta_pos->sta->addr[5]==tids_tuple_ptr->mac[5]) ||
|
+ sta_pos->sta->addr[5]==tids_tuple_ptr->mac[5]) ||
|
||||||
+ (ff_cntr==6))
|
+ (ff_cntr==6))
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("STA MAC: %pM found\n",sta_pos->sta->addr);
|
+ printk("STA MAC: %pM found\n",sta_pos->sta->addr);
|
||||||
+#endif
|
+#endif
|
||||||
+ for(tid_no=0; tid_no<8; tid_no++)
|
+ for(tid_no=0; tid_no<8; tid_no++)
|
||||||
@ -280,14 +292,14 @@ index 99ab0aa..9431bbb 100755
|
|||||||
+ if(wakeup_tids[tid_no])
|
+ if(wakeup_tids[tid_no])
|
||||||
+ {
|
+ {
|
||||||
+ sta_pos->sleeping_tids[tid_no]=false;
|
+ sta_pos->sleeping_tids[tid_no]=false;
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("Wakeup TID: %d\n",tid_no);
|
+ printk("Wakeup TID: %d\n",tid_no);
|
||||||
+#endif
|
+#endif
|
||||||
+ }
|
+ }
|
||||||
+ else
|
+ else
|
||||||
+ {
|
+ {
|
||||||
+ sta_pos->sleeping_tids[tid_no]=true;
|
+ sta_pos->sleeping_tids[tid_no]=true;
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("Sleeping TID: %d\n",tid_no);
|
+ printk("Sleeping TID: %d\n",tid_no);
|
||||||
+#endif
|
+#endif
|
||||||
+ }
|
+ }
|
||||||
@ -305,7 +317,7 @@ index 99ab0aa..9431bbb 100755
|
|||||||
+ }
|
+ }
|
||||||
+ if(num_entries==0) /*Allow nothing, set everything to sleep*/
|
+ 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("Global Sleep Mode Activated!\n");
|
||||||
+ printk("Putting all STAs and all their TIDs into sleep mode\n");
|
+ printk("Putting all STAs and all their TIDs into sleep mode\n");
|
||||||
+#endif
|
+#endif
|
||||||
@ -314,7 +326,7 @@ index 99ab0aa..9431bbb 100755
|
|||||||
+ for(tid_no=0; tid_no<8; tid_no++)
|
+ for(tid_no=0; tid_no<8; tid_no++)
|
||||||
+ {
|
+ {
|
||||||
+ sta_pos->sleeping_tids[tid_no]=true;
|
+ sta_pos->sleeping_tids[tid_no]=true;
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("Sleeping TID: %d\n",tid_no);
|
+ printk("Sleeping TID: %d\n",tid_no);
|
||||||
+#endif
|
+#endif
|
||||||
+ }
|
+ }
|
||||||
@ -336,19 +348,19 @@ index 99ab0aa..9431bbb 100755
|
|||||||
#ifdef CONFIG_PM_SLEEP
|
#ifdef CONFIG_PM_SLEEP
|
||||||
|
|
||||||
static void ath9k_wow_map_triggers(struct ath_softc *sc,
|
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_start = ath9k_sw_scan_start,
|
||||||
.sw_scan_complete = ath9k_sw_scan_complete,
|
.sw_scan_complete = ath9k_sw_scan_complete,
|
||||||
.channel_switch_beacon = ath9k_channel_switch_beacon,
|
.channel_switch_beacon = ath9k_channel_switch_beacon,
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ .set_tid_sleep_mode = ath9k_tid_sleep_mode,
|
+ .set_tid_sleep_mode = ath9k_tid_sleep_mode,
|
||||||
+#endif
|
+#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
|
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..c015a61 100755
|
index 7fe6b59..2ccd0bf 100755
|
||||||
--- a/backports/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c
|
--- a/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
|
+++ b/backports-3.12.8-1/drivers/net/wireless/ath/ath9k/xmit.c
|
||||||
@@ -12,12 +12,16 @@
|
@@ -12,12 +12,14 @@
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
@ -359,18 +371,16 @@ index 7fe6b59..c015a61 100755
|
|||||||
#include "ath9k.h"
|
#include "ath9k.h"
|
||||||
#include "ar9003_mac.h"
|
#include "ar9003_mac.h"
|
||||||
|
|
||||||
+#define TID_SLEEPING
|
|
||||||
+//#define TID_SLEEPING_DEBUG
|
|
||||||
+
|
+
|
||||||
#define BITS_PER_BYTE 8
|
#define BITS_PER_BYTE 8
|
||||||
#define OFDM_PLCP_BITS 22
|
#define OFDM_PLCP_BITS 22
|
||||||
#define HT_RC_2_STREAMS(_rc) ((((_rc) & 0x78) >> 3) + 1)
|
#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;
|
struct ath_txq *txq;
|
||||||
bool buffered;
|
bool buffered;
|
||||||
int tidno;
|
int tidno;
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found;
|
+ struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found;
|
||||||
+ sta_found = 0;
|
+ sta_found = 0;
|
||||||
+ sta_n = 0;
|
+ sta_n = 0;
|
||||||
@ -379,7 +389,7 @@ index 7fe6b59..c015a61 100755
|
|||||||
+ list_for_each_entry_safe(sta_pos, sta_n,
|
+ list_for_each_entry_safe(sta_pos, sta_n,
|
||||||
+ &tid_sleep_sta_sleep_ctl_list, list)
|
+ &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 searched: %pM \n", sta->addr);
|
||||||
+ printk("ath_tx_aggr_sleep: MAC saved: %pM \n", sta_pos->sta->addr);
|
+ printk("ath_tx_aggr_sleep: MAC saved: %pM \n", sta_pos->sta->addr);
|
||||||
+#endif
|
+#endif
|
||||||
@ -395,7 +405,7 @@ index 7fe6b59..c015a61 100755
|
|||||||
for (tidno = 0, tid = &an->tid[tidno];
|
for (tidno = 0, tid = &an->tid[tidno];
|
||||||
tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
|
tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ if(sta_found)
|
+ if(sta_found)
|
||||||
+ {
|
+ {
|
||||||
+ if(sta_found->sleeping_tids[tidno]==false)
|
+ 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
|
+ /*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
|
+ into sleep mode if the TID of the STA has set
|
||||||
+ sleep mode set to false*/
|
+ sleep mode set to false*/
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_aggr_sleep: Do no sleeo break!");
|
+ printk("ath_tx_aggr_sleep: Do no sleeo break!");
|
||||||
+#endif
|
+#endif
|
||||||
+ continue;
|
+ continue;
|
||||||
@ -413,11 +423,11 @@ index 7fe6b59..c015a61 100755
|
|||||||
|
|
||||||
if (!tid->sched)
|
if (!tid->sched)
|
||||||
continue;
|
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,
|
+void ath_tx_aggr_sleep_tid_sleep(struct ieee80211_sta *sta,
|
||||||
+ struct ath_softc *sc, struct ath_node *an)
|
+ 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,
|
+ list_for_each_entry_safe(sta_pos, sta_n,
|
||||||
+ &tid_sleep_sta_sleep_ctl_list, list)
|
+ &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",
|
+ printk("ath_tx_aggr_sleep_tid_sleep: MAC searched: %pM \n",
|
||||||
+ sta->addr);
|
+ sta->addr);
|
||||||
+ printk("ath_tx_aggr_sleep_tid_sleep: MAC saved: %pM \n",
|
+ printk("ath_tx_aggr_sleep_tid_sleep: MAC saved: %pM \n",
|
||||||
@ -493,7 +503,7 @@ index 7fe6b59..c015a61 100755
|
|||||||
struct ath_txq *txq;
|
struct ath_txq *txq;
|
||||||
int tidno;
|
int tidno;
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found;
|
+ struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found;
|
||||||
+ sta_found = 0;
|
+ sta_found = 0;
|
||||||
+ sta_n = 0;
|
+ sta_n = 0;
|
||||||
@ -502,7 +512,7 @@ index 7fe6b59..c015a61 100755
|
|||||||
+ list_for_each_entry_safe(sta_pos, sta_n,
|
+ list_for_each_entry_safe(sta_pos, sta_n,
|
||||||
+ &tid_sleep_sta_sleep_ctl_list, list)
|
+ &tid_sleep_sta_sleep_ctl_list, list)
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_aggr_wakeup: MAC search: %pM \n",
|
+ printk("ath_tx_aggr_wakeup: MAC search: %pM \n",
|
||||||
+ an->sta->addr);
|
+ an->sta->addr);
|
||||||
+ printk("ath_tx_aggr_wakeup: MAC saved: %pM \n",
|
+ printk("ath_tx_aggr_wakeup: MAC saved: %pM \n",
|
||||||
@ -519,13 +529,13 @@ index 7fe6b59..c015a61 100755
|
|||||||
for (tidno = 0, tid = &an->tid[tidno];
|
for (tidno = 0, tid = &an->tid[tidno];
|
||||||
tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
|
tidno < IEEE80211_NUM_TIDS; tidno++, tid++) {
|
||||||
|
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ if(sta_found)
|
+ if(sta_found)
|
||||||
+ {
|
+ {
|
||||||
+ if(sta_found->sleeping_tids[tidno]==true)
|
+ if(sta_found->sleeping_tids[tidno]==true)
|
||||||
+ {
|
+ {
|
||||||
+ continue;
|
+ continue;
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_aggr_wakeup: Do no wake up, break!");
|
+ printk("ath_tx_aggr_wakeup: Do no wake up, break!");
|
||||||
+#endif
|
+#endif
|
||||||
+ }
|
+ }
|
||||||
@ -535,12 +545,12 @@ index 7fe6b59..c015a61 100755
|
|||||||
ac = tid->ac;
|
ac = tid->ac;
|
||||||
txq = ac->txq;
|
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;
|
struct ath_buf *bf;
|
||||||
int q;
|
int q;
|
||||||
int ret;
|
int ret;
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found;
|
+ struct tid_sleep_sta_sleep_ctl *sta_pos, *sta_n, *sta_found;
|
||||||
+ bool tid_sleep_tid_force_sleep=false;
|
+ bool tid_sleep_tid_force_sleep=false;
|
||||||
+ sta_found = 0;
|
+ sta_found = 0;
|
||||||
@ -550,16 +560,16 @@ index 7fe6b59..c015a61 100755
|
|||||||
|
|
||||||
ret = ath_tx_prepare(hw, skb, txctl);
|
ret = ath_tx_prepare(hw, skb, txctl);
|
||||||
if (ret)
|
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)
|
if (info->flags & IEEE80211_TX_CTL_CLEAR_PS_FILT)
|
||||||
tid->ac->clear_ps_filter = true;
|
tid->ac->clear_ps_filter = true;
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ if(txctl->an)
|
+ if(txctl->an)
|
||||||
+ {
|
+ {
|
||||||
+ if(txctl->an->sta)
|
+ if(txctl->an->sta)
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_start: MAC search: %pM \n",
|
+ printk("ath_tx_start: MAC search: %pM \n",
|
||||||
+ txctl->an->sta->addr);
|
+ txctl->an->sta->addr);
|
||||||
+#endif
|
+#endif
|
||||||
@ -569,14 +579,14 @@ index 7fe6b59..c015a61 100755
|
|||||||
+ {
|
+ {
|
||||||
+ if(sta_pos->sta == txctl->an->sta)
|
+ if(sta_pos->sta == txctl->an->sta)
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_start: MAC saved: %pM \n",
|
+ printk("ath_tx_start: MAC saved: %pM \n",
|
||||||
+ sta_pos->sta->addr);
|
+ sta_pos->sta->addr);
|
||||||
+#endif
|
+#endif
|
||||||
+ sta_found=sta_pos;
|
+ sta_found=sta_pos;
|
||||||
+ if(tid)
|
+ if(tid)
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_start:STA found 1");
|
+ printk("ath_tx_start:STA found 1");
|
||||||
+#endif
|
+#endif
|
||||||
+ tid_sleep_tid_force_sleep=sta_found->
|
+ tid_sleep_tid_force_sleep=sta_found->
|
||||||
@ -588,7 +598,7 @@ index 7fe6b59..c015a61 100755
|
|||||||
+ }
|
+ }
|
||||||
+ else if(txctl->sta)
|
+ else if(txctl->sta)
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_start: MAC search: %pM \n",
|
+ printk("ath_tx_start: MAC search: %pM \n",
|
||||||
+ txctl->sta->addr);
|
+ txctl->sta->addr);
|
||||||
+#endif
|
+#endif
|
||||||
@ -596,7 +606,7 @@ index 7fe6b59..c015a61 100755
|
|||||||
+ list_for_each_entry_safe(sta_pos, sta_n,
|
+ list_for_each_entry_safe(sta_pos, sta_n,
|
||||||
+ &tid_sleep_sta_sleep_ctl_list, list)
|
+ &tid_sleep_sta_sleep_ctl_list, list)
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_start: MAC saved: %pM \n",
|
+ printk("ath_tx_start: MAC saved: %pM \n",
|
||||||
+ sta_pos->sta->addr);
|
+ sta_pos->sta->addr);
|
||||||
+#endif
|
+#endif
|
||||||
@ -605,7 +615,7 @@ index 7fe6b59..c015a61 100755
|
|||||||
+ sta_found=sta_pos;
|
+ sta_found=sta_pos;
|
||||||
+ if(tid)
|
+ if(tid)
|
||||||
+ {
|
+ {
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_start: STA found 2");
|
+ printk("ath_tx_start: STA found 2");
|
||||||
+#endif
|
+#endif
|
||||||
+ tid_sleep_tid_force_sleep=sta_found->
|
+ tid_sleep_tid_force_sleep=sta_found->
|
||||||
@ -622,17 +632,17 @@ index 7fe6b59..c015a61 100755
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Add this frame to software queue for scheduling later
|
* 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);
|
TX_STAT_INC(txq->axq_qnum, a_queued_sw);
|
||||||
__skb_queue_tail(&tid->buf_q, skb);
|
__skb_queue_tail(&tid->buf_q, skb);
|
||||||
- if (!txctl->an->sleeping)
|
- if (!txctl->an->sleeping)
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ if (!txctl->an->sleeping && tid_sleep_tid_force_sleep==false) {
|
+ if (!txctl->an->sleeping && tid_sleep_tid_force_sleep==false) {
|
||||||
+#else
|
+#else
|
||||||
+ if (!txctl->an->sleeping) {
|
+ if (!txctl->an->sleeping) {
|
||||||
+#endif
|
+#endif
|
||||||
+#ifdef TID_SLEEPING_DEBUG
|
+#ifdef CPTCFG_ATH_DEBUG
|
||||||
+ printk("ath_tx_start: This frame will be sent\n");
|
+ printk("ath_tx_start: This frame will be sent\n");
|
||||||
+#endif
|
+#endif
|
||||||
ath_tx_queue_tid(txq, tid);
|
ath_tx_queue_tid(txq, tid);
|
||||||
@ -641,37 +651,33 @@ index 7fe6b59..c015a61 100755
|
|||||||
ath_txq_schedule(sc, txq);
|
ath_txq_schedule(sc, txq);
|
||||||
goto out;
|
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
|
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..91a9170 100755
|
index 7d077c7..a1003e0 100755
|
||||||
--- a/backports/backports-3.12.8-1/drivers/net/wireless/ath/regd.c
|
--- a/backports-3.12.8-1/drivers/net/wireless/ath/regd.c
|
||||||
+++ b/backports/backports-3.12.8-1/drivers/net/wireless/ath/regd.c
|
+++ b/backports-3.12.8-1/drivers/net/wireless/ath/regd.c
|
||||||
@@ -12,8 +12,11 @@
|
@@ -12,6 +12,7 @@
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
+ * TID_SLEEPING PATCH 2015 Sven Zehl zehl@tkn.tu-berlin.de
|
+ * TID_SLEEPING PATCH 2015 Sven Zehl zehl@tkn.tu-berlin.de
|
||||||
*/
|
*/
|
||||||
|
|
||||||
+#define TID_SLEEPING
|
|
||||||
+
|
|
||||||
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
|
||||||
|
@@ -568,7 +569,9 @@ static int __ath_regd_init(struct ath_regulatory *reg)
|
||||||
#include <linux/kernel.h>
|
|
||||||
@@ -568,7 +571,9 @@ static int __ath_regd_init(struct ath_regulatory *reg)
|
|
||||||
"country code should be used\n");
|
"country code should be used\n");
|
||||||
reg->country_code = CTRY_UNITED_STATES;
|
reg->country_code = CTRY_UNITED_STATES;
|
||||||
}
|
}
|
||||||
-
|
-
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ printk("ath: TID SLEEPING MODE ENABLED\n");
|
+ printk("ath: ATH9K HMAC ENABLED\n");
|
||||||
+#endif
|
+#endif
|
||||||
if (reg->country_code == CTRY_DEFAULT) {
|
if (reg->country_code == CTRY_DEFAULT) {
|
||||||
country = NULL;
|
country = NULL;
|
||||||
} else {
|
} 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
|
diff --git a/backports-3.12.8-1/include/net/cfg80211.h b/backports-3.12.8-1/include/net/cfg80211.h
|
||||||
index 9c4e228..153da60 100755
|
index 9c4e228..428a5de 100755
|
||||||
--- a/backports/backports-3.12.8-1/include/net/cfg80211.h
|
--- a/backports-3.12.8-1/include/net/cfg80211.h
|
||||||
+++ b/backports/backports-3.12.8-1/include/net/cfg80211.h
|
+++ b/backports-3.12.8-1/include/net/cfg80211.h
|
||||||
@@ -8,6 +8,7 @@
|
@@ -8,6 +8,7 @@
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@ -680,30 +686,29 @@ index 9c4e228..153da60 100755
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/netdevice.h>
|
#include <linux/netdevice.h>
|
||||||
@@ -22,6 +23,8 @@
|
@@ -22,6 +23,7 @@
|
||||||
#include <linux/net.h>
|
#include <linux/net.h>
|
||||||
#include <net/regulatory.h>
|
#include <net/regulatory.h>
|
||||||
|
|
||||||
+#define TID_SLEEPING
|
|
||||||
+
|
+
|
||||||
/**
|
/**
|
||||||
* DOC: Introduction
|
* DOC: Introduction
|
||||||
*
|
*
|
||||||
@@ -2407,6 +2410,10 @@ struct cfg80211_ops {
|
@@ -2407,6 +2409,10 @@ struct cfg80211_ops {
|
||||||
int (*channel_switch)(struct wiphy *wiphy,
|
int (*channel_switch)(struct wiphy *wiphy,
|
||||||
struct net_device *dev,
|
struct net_device *dev,
|
||||||
struct cfg80211_csa_settings *params);
|
struct cfg80211_csa_settings *params);
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ int (*tid_sleeping)(struct wiphy *wiphy, struct net_device *dev,
|
+ int (*tid_sleeping)(struct wiphy *wiphy, struct net_device *dev,
|
||||||
+ char * tid_sleep_data_ptr, u8 tid_sleep_data_len);
|
+ char * tid_sleep_data_ptr, u8 tid_sleep_data_len);
|
||||||
+#endif
|
+#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
|
diff --git a/backports-3.12.8-1/include/net/mac80211.h b/backports-3.12.8-1/include/net/mac80211.h
|
||||||
index 1682fc3..d9a0e47 100755
|
index 1682fc3..8dfdf39 100755
|
||||||
--- a/backports/backports-3.12.8-1/include/net/mac80211.h
|
--- a/backports-3.12.8-1/include/net/mac80211.h
|
||||||
+++ b/backports/backports-3.12.8-1/include/net/mac80211.h
|
+++ b/backports-3.12.8-1/include/net/mac80211.h
|
||||||
@@ -8,6 +8,7 @@
|
@@ -8,6 +8,7 @@
|
||||||
* This program is free software; you can redistribute it and/or modify
|
* 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
|
* it under the terms of the GNU General Public License version 2 as
|
||||||
@ -712,31 +717,22 @@ index 1682fc3..d9a0e47 100755
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef MAC80211_H
|
#ifndef MAC80211_H
|
||||||
@@ -21,6 +22,8 @@
|
@@ -2867,6 +2868,10 @@ struct ieee80211_ops {
|
||||||
#include <net/cfg80211.h>
|
|
||||||
#include <asm/unaligned.h>
|
|
||||||
|
|
||||||
+#define TID_SLEEPING
|
|
||||||
+
|
|
||||||
/**
|
|
||||||
* DOC: Introduction
|
|
||||||
*
|
|
||||||
@@ -2867,6 +2870,10 @@ struct ieee80211_ops {
|
|
||||||
void (*channel_switch_beacon)(struct ieee80211_hw *hw,
|
void (*channel_switch_beacon)(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
struct cfg80211_chan_def *chandef);
|
struct cfg80211_chan_def *chandef);
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ int (*set_tid_sleep_mode)(char * tid_sleep_data_ptr,
|
+ int (*set_tid_sleep_mode)(char * tid_sleep_data_ptr,
|
||||||
+ u8 tid_sleep_data_len);
|
+ u8 tid_sleep_data_len);
|
||||||
+#endif
|
+#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
|
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..9d351db 100755
|
index fde2c02..142f992 100755
|
||||||
--- a/backports/backports-3.12.8-1/include/uapi/linux/nl80211.h
|
--- a/backports-3.12.8-1/include/uapi/linux/nl80211.h
|
||||||
+++ b/backports/backports-3.12.8-1/include/uapi/linux/nl80211.h
|
+++ b/backports-3.12.8-1/include/uapi/linux/nl80211.h
|
||||||
@@ -22,12 +22,13 @@
|
@@ -22,7 +22,7 @@
|
||||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
@ -745,48 +741,63 @@ index fde2c02..9d351db 100755
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
@@ -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"
|
/* add new commands above here */
|
||||||
+#define TID_SLEEPING
|
-
|
||||||
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
/**
|
+ NL80211_CMD_SET_TID_SLEEP,
|
||||||
* DOC: Station handling
|
+#endif
|
||||||
@@ -1496,6 +1497,9 @@ enum nl80211_commands {
|
/* 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.
|
* @NL80211_ATTR_RXMGMT_FLAGS: flags for nl80211_send_mgmt(), u32.
|
||||||
* As specified in the &enum nl80211_rxmgmt_flags.
|
* As specified in the &enum nl80211_rxmgmt_flags.
|
||||||
*
|
*
|
||||||
+ * @NL80211_ATTR_TID_SLEEP_CTRL: change the power save mode of a single TID
|
+ * @NL80211_ATTR_TID_SLEEP: payload for changing the power save mode of
|
||||||
+ * of a distinct STA. (TID_SLEEPING)
|
+ * a single TID of a distinct STA. (TID_SLEEPING)
|
||||||
+ *
|
+ *
|
||||||
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
* @NL80211_ATTR_MAX: highest attribute number currently defined
|
||||||
* @__NL80211_ATTR_AFTER_LAST: internal use
|
* @__NL80211_ATTR_AFTER_LAST: internal use
|
||||||
*/
|
*/
|
||||||
@@ -1807,6 +1811,11 @@ enum nl80211_attrs {
|
@@ -1807,6 +1816,10 @@ enum nl80211_attrs {
|
||||||
NL80211_ATTR_RXMGMT_FLAGS,
|
NL80211_ATTR_RXMGMT_FLAGS,
|
||||||
|
|
||||||
/* add attributes here, update the policy in nl80211.c */
|
/* add attributes here, update the policy in nl80211.c */
|
||||||
+
|
+
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ NL80211_ATTR_TID_SLEEP_CTRL,
|
+ NL80211_ATTR_TID_SLEEP,
|
||||||
+ NL80211_ATTR_TID_SLEEP_CTRL_DATA,
|
|
||||||
+#endif
|
+#endif
|
||||||
|
|
||||||
__NL80211_ATTR_AFTER_LAST,
|
__NL80211_ATTR_AFTER_LAST,
|
||||||
NL80211_ATTR_MAX = __NL80211_ATTR_AFTER_LAST - 1
|
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
|
diff --git a/backports-3.12.8-1/kconf/Makefile b/backports-3.12.8-1/kconf/Makefile
|
||||||
index dfd793a..98d00a1 100755
|
index dfd793a..70e68a9 100755
|
||||||
--- a/backports/backports-3.12.8-1/kconf/Makefile
|
--- a/backports-3.12.8-1/kconf/Makefile
|
||||||
+++ b/backports/backports-3.12.8-1/kconf/Makefile
|
+++ b/backports-3.12.8-1/kconf/Makefile
|
||||||
@@ -1,4 +1,4 @@
|
@@ -1,4 +1,4 @@
|
||||||
-CFLAGS=-Wall -Wmissing-prototypes -Wstrict-prototypes -O2 -fomit-frame-pointer
|
-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
|
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
|
diff --git a/backports-3.12.8-1/net/mac80211/cfg.c b/backports-3.12.8-1/net/mac80211/cfg.c
|
||||||
index cb09f6d..d315b4d 100755
|
index cb09f6d..d19a338 100755
|
||||||
--- a/backports/backports-3.12.8-1/net/mac80211/cfg.c
|
--- a/backports-3.12.8-1/net/mac80211/cfg.c
|
||||||
+++ b/backports/backports-3.12.8-1/net/mac80211/cfg.c
|
+++ b/backports-3.12.8-1/net/mac80211/cfg.c
|
||||||
@@ -4,6 +4,7 @@
|
@@ -4,6 +4,7 @@
|
||||||
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
* Copyright 2006-2010 Johannes Berg <johannes@sipsolutions.net>
|
||||||
*
|
*
|
||||||
@ -795,20 +806,11 @@ index cb09f6d..d315b4d 100755
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/ieee80211.h>
|
#include <linux/ieee80211.h>
|
||||||
@@ -20,6 +21,8 @@
|
@@ -1455,6 +1456,17 @@ static int ieee80211_del_station(struct wiphy *wiphy, struct net_device *dev,
|
||||||
#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,
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+static int ieee80211_tid_sleeping(struct wiphy *wiphy,
|
+static int ieee80211_tid_sleeping(struct wiphy *wiphy,
|
||||||
+ struct net_device *dev, char * tid_sleep_data_ptr,
|
+ struct net_device *dev, char * tid_sleep_data_ptr,
|
||||||
+ u8 tid_sleep_data_len)
|
+ u8 tid_sleep_data_len)
|
||||||
@ -822,19 +824,19 @@ index cb09f6d..d315b4d 100755
|
|||||||
static int ieee80211_change_station(struct wiphy *wiphy,
|
static int ieee80211_change_station(struct wiphy *wiphy,
|
||||||
struct net_device *dev, u8 *mac,
|
struct net_device *dev, u8 *mac,
|
||||||
struct station_parameters *params)
|
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,
|
.get_channel = ieee80211_cfg_get_channel,
|
||||||
.start_radar_detection = ieee80211_start_radar_detection,
|
.start_radar_detection = ieee80211_start_radar_detection,
|
||||||
.channel_switch = ieee80211_channel_switch,
|
.channel_switch = ieee80211_channel_switch,
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+ .tid_sleeping = ieee80211_tid_sleeping,
|
+ .tid_sleeping = ieee80211_tid_sleeping,
|
||||||
+#endif
|
+#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
|
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..568d21c 100755
|
index cb920c4..6359ff1 100755
|
||||||
--- a/backports/backports-3.12.8-1/net/mac80211/driver-ops.h
|
--- a/backports-3.12.8-1/net/mac80211/driver-ops.h
|
||||||
+++ b/backports/backports-3.12.8-1/net/mac80211/driver-ops.h
|
+++ b/backports-3.12.8-1/net/mac80211/driver-ops.h
|
||||||
@@ -1,10 +1,16 @@
|
@@ -1,6 +1,10 @@
|
||||||
#ifndef __MAC80211_DRIVER_OPS
|
#ifndef __MAC80211_DRIVER_OPS
|
||||||
#define __MAC80211_DRIVER_OPS
|
#define __MAC80211_DRIVER_OPS
|
||||||
|
|
||||||
@ -845,16 +847,10 @@ index cb920c4..568d21c 100755
|
|||||||
#include <net/mac80211.h>
|
#include <net/mac80211.h>
|
||||||
#include "ieee80211_i.h"
|
#include "ieee80211_i.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
diff --git a/backports-3.12.8-1/net/wireless/nl80211.c b/backports-3.12.8-1/net/wireless/nl80211.c
|
||||||
+#define TID_SLEEPING
|
index 47f7e91..2bff489 100755
|
||||||
+
|
--- a/backports-3.12.8-1/net/wireless/nl80211.c
|
||||||
static inline void check_sdata_in_driver(struct ieee80211_sub_if_data *sdata)
|
+++ b/backports-3.12.8-1/net/wireless/nl80211.c
|
||||||
{
|
|
||||||
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
|
|
||||||
@@ -2,6 +2,7 @@
|
@@ -2,6 +2,7 @@
|
||||||
* This is the new netlink-based wireless configuration interface.
|
* This is the new netlink-based wireless configuration interface.
|
||||||
*
|
*
|
||||||
@ -863,21 +859,12 @@ index 47f7e91..52fd011 100755
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include <linux/if.h>
|
#include <linux/if.h>
|
||||||
@@ -25,6 +26,8 @@
|
@@ -3914,6 +3915,76 @@ static int nl80211_set_station_tdls(struct genl_info *info,
|
||||||
#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,
|
|
||||||
return nl80211_parse_sta_wme(info, params);
|
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,
|
+static int nl80211_dump_tid_sleeping(struct sk_buff *skb,
|
||||||
+ struct netlink_callback *cb)
|
+ struct netlink_callback *cb)
|
||||||
@ -904,15 +891,15 @@ index 47f7e91..52fd011 100755
|
|||||||
+
|
+
|
||||||
+ tid_sleep_data_len = 0;
|
+ tid_sleep_data_len = 0;
|
||||||
+ tid_sleep_data_ptr = 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 =
|
+ 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 =
|
+ tid_sleep_data_len =
|
||||||
+ nla_len(info->attrs[NL80211_ATTR_TID_SLEEP_CTRL_DATA]);
|
+ nla_len(info->attrs[NL80211_ATTR_TID_SLEEP]);
|
||||||
+ }
|
+ }
|
||||||
+ else
|
+ 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) {
|
+ 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)
|
static int nl80211_set_station(struct sk_buff *skb, struct genl_info *info)
|
||||||
{
|
{
|
||||||
struct cfg80211_registered_device *rdev = info->user_ptr[0];
|
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 |
|
.internal_flags = NL80211_FLAG_NEED_NETDEV_UP |
|
||||||
NL80211_FLAG_NEED_RTNL,
|
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,
|
+ .doit = nl80211_tid_sleeping,
|
||||||
+ .dumpit = nl80211_dump_tid_sleeping,
|
+ .dumpit = nl80211_dump_tid_sleeping,
|
||||||
+ .policy = nl80211_policy,
|
+ .policy = nl80211_policy,
|
||||||
@ -966,24 +953,15 @@ index 47f7e91..52fd011 100755
|
|||||||
};
|
};
|
||||||
|
|
||||||
static struct genl_multicast_group nl80211_mlme_mcgrp = {
|
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
|
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..f383baf 100755
|
index 725db21..898f099 100755
|
||||||
--- a/backports/backports-3.12.8-1/net/wireless/rdev-ops.h
|
--- a/backports-3.12.8-1/net/wireless/rdev-ops.h
|
||||||
+++ b/backports/backports-3.12.8-1/net/wireless/rdev-ops.h
|
+++ b/backports-3.12.8-1/net/wireless/rdev-ops.h
|
||||||
@@ -1,6 +1,8 @@
|
@@ -198,6 +198,16 @@ static inline int rdev_change_station(struct cfg80211_registered_device *rdev,
|
||||||
#ifndef __CFG80211_RDEV_OPS
|
|
||||||
#define __CFG80211_RDEV_OPS
|
|
||||||
|
|
||||||
+#define TID_SLEEPING
|
|
||||||
+
|
|
||||||
#include <linux/rtnetlink.h>
|
|
||||||
#include <net/cfg80211.h>
|
|
||||||
#include "core.h"
|
|
||||||
@@ -198,6 +200,16 @@ static inline int rdev_change_station(struct cfg80211_registered_device *rdev,
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
+#ifdef TID_SLEEPING
|
+#ifdef CPTCFG_ATH9K_TID_SLEEPING
|
||||||
+static inline int rdev_tid_sleeping(struct cfg80211_registered_device *rdev,
|
+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)
|
+ 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 net_device *dev, u8 *mac,
|
||||||
struct station_info *sinfo)
|
struct station_info *sinfo)
|
||||||
--
|
--
|
||||||
1.9.1
|
2.8.1
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user