Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
dde7dc75
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
dde7dc75
编写于
5月 25, 2013
作者:
J
Johannes Berg
浏览文件
操作
浏览文件
下载
差异文件
Merge remote-tracking branch 'mac80211/master' into mac80211-next
上级
b422c6cd
4c8a9d4b
变更
25
隐藏空白更改
内联
并排
Showing
25 changed file
with
256 addition
and
179 deletion
+256
-179
drivers/net/wireless/ath/ath5k/base.c
drivers/net/wireless/ath/ath5k/base.c
+5
-0
drivers/net/wireless/ath/ath9k/ar9565_1p0_initvals.h
drivers/net/wireless/ath/ath9k/ar9565_1p0_initvals.h
+70
-68
drivers/net/wireless/ath/ath9k/main.c
drivers/net/wireless/ath/ath9k/main.c
+7
-3
drivers/net/wireless/b43/dma.c
drivers/net/wireless/b43/dma.c
+19
-0
drivers/net/wireless/b43/dma.h
drivers/net/wireless/b43/dma.h
+3
-1
drivers/net/wireless/b43/main.c
drivers/net/wireless/b43/main.c
+18
-25
drivers/net/wireless/iwlegacy/4965-mac.c
drivers/net/wireless/iwlegacy/4965-mac.c
+1
-2
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mac80211.c
+1
-13
drivers/net/wireless/mac80211_hwsim.c
drivers/net/wireless/mac80211_hwsim.c
+10
-12
drivers/net/wireless/mwifiex/cfg80211.c
drivers/net/wireless/mwifiex/cfg80211.c
+0
-3
drivers/net/wireless/mwifiex/cmdevt.c
drivers/net/wireless/mwifiex/cmdevt.c
+1
-0
drivers/net/wireless/mwifiex/main.c
drivers/net/wireless/mwifiex/main.c
+1
-0
drivers/net/wireless/mwifiex/sta_ioctl.c
drivers/net/wireless/mwifiex/sta_ioctl.c
+6
-15
include/net/mac80211.h
include/net/mac80211.h
+8
-4
net/mac80211/ieee80211_i.h
net/mac80211/ieee80211_i.h
+1
-0
net/mac80211/iface.c
net/mac80211/iface.c
+17
-1
net/mac80211/mlme.c
net/mac80211/mlme.c
+35
-10
net/mac80211/rate.c
net/mac80211/rate.c
+8
-1
net/mac80211/rx.c
net/mac80211/rx.c
+3
-0
net/mac80211/tkip.c
net/mac80211/tkip.c
+2
-2
net/mac80211/util.c
net/mac80211/util.c
+7
-0
net/wireless/core.c
net/wireless/core.c
+10
-7
net/wireless/nl80211.c
net/wireless/nl80211.c
+5
-1
net/wireless/sme.c
net/wireless/sme.c
+5
-1
net/wireless/trace.h
net/wireless/trace.h
+13
-10
未找到文件。
drivers/net/wireless/ath/ath5k/base.c
浏览文件 @
dde7dc75
...
...
@@ -2369,6 +2369,9 @@ ath5k_tx_complete_poll_work(struct work_struct *work)
int
i
;
bool
needreset
=
false
;
if
(
!
test_bit
(
ATH_STAT_STARTED
,
ah
->
status
))
return
;
mutex_lock
(
&
ah
->
lock
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
ah
->
txqs
);
i
++
)
{
...
...
@@ -2676,6 +2679,7 @@ int ath5k_start(struct ieee80211_hw *hw)
mmiowb
();
mutex_unlock
(
&
ah
->
lock
);
set_bit
(
ATH_STAT_STARTED
,
ah
->
status
);
ieee80211_queue_delayed_work
(
ah
->
hw
,
&
ah
->
tx_complete_work
,
msecs_to_jiffies
(
ATH5K_TX_COMPLETE_POLL_INT
));
...
...
@@ -2737,6 +2741,7 @@ void ath5k_stop(struct ieee80211_hw *hw)
ath5k_stop_tasklets
(
ah
);
clear_bit
(
ATH_STAT_STARTED
,
ah
->
status
);
cancel_delayed_work_sync
(
&
ah
->
tx_complete_work
);
if
(
!
ath5k_modparam_no_hw_rfkill_switch
)
...
...
drivers/net/wireless/ath/ath9k/ar9565_1p0_initvals.h
浏览文件 @
dde7dc75
...
...
@@ -233,9 +233,9 @@ static const u32 ar9565_1p0_baseband_core[][2] = {
{
0x00009d10
,
0x01834061
},
{
0x00009d14
,
0x00c00400
},
{
0x00009d18
,
0x00000000
},
{
0x00009e08
,
0x00
7
8230c
},
{
0x00009e24
,
0x990
b
b515
},
{
0x00009e28
,
0x126f0
0
00
},
{
0x00009e08
,
0x00
3
8230c
},
{
0x00009e24
,
0x990
7
b515
},
{
0x00009e28
,
0x126f0
6
00
},
{
0x00009e30
,
0x06336f77
},
{
0x00009e34
,
0x6af6532f
},
{
0x00009e38
,
0x0cc80c00
},
...
...
@@ -337,7 +337,7 @@ static const u32 ar9565_1p0_baseband_core[][2] = {
static
const
u32
ar9565_1p0_baseband_postamble
[][
5
]
=
{
/* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */
{
0x00009810
,
0xd00a8005
,
0xd00a8005
,
0xd00a8005
,
0xd00a800
d
},
{
0x00009810
,
0xd00a8005
,
0xd00a8005
,
0xd00a8005
,
0xd00a800
9
},
{
0x00009820
,
0x206a022e
,
0x206a022e
,
0x206a012e
,
0x206a01ae
},
{
0x00009824
,
0x5ac640d0
,
0x5ac640d0
,
0x5ac640d0
,
0x63c640da
},
{
0x00009828
,
0x06903081
,
0x06903081
,
0x06903881
,
0x09143c81
},
...
...
@@ -345,9 +345,9 @@ static const u32 ar9565_1p0_baseband_postamble[][5] = {
{
0x00009830
,
0x0000059c
,
0x0000059c
,
0x0000059c
,
0x0000059c
},
{
0x00009c00
,
0x000000c4
,
0x000000c4
,
0x000000c4
,
0x000000c4
},
{
0x00009e00
,
0x0372111a
,
0x0372111a
,
0x037216a0
,
0x037216a0
},
{
0x00009e04
,
0x00802020
,
0x00802020
,
0x00
802020
,
0x0080
2020
},
{
0x00009e0c
,
0x6c4000e2
,
0x6d4000e2
,
0x6d4000e2
,
0x6c4000
d8
},
{
0x00009e10
,
0x7ec88d2e
,
0x7ec88d2e
,
0x7ec84d2e
,
0x7ec8
6
d2e
},
{
0x00009e04
,
0x00802020
,
0x00802020
,
0x00
142020
,
0x0014
2020
},
{
0x00009e0c
,
0x6c4000e2
,
0x6d4000e2
,
0x6d4000e2
,
0x6c4000
e2
},
{
0x00009e10
,
0x7ec88d2e
,
0x7ec88d2e
,
0x7ec84d2e
,
0x7ec8
4
d2e
},
{
0x00009e14
,
0x37b95d5e
,
0x37b9605e
,
0x3379605e
,
0x33795d5e
},
{
0x00009e18
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
},
{
0x00009e1c
,
0x0001cf9c
,
0x0001cf9c
,
0x00021f9c
,
0x00021f9c
},
...
...
@@ -450,6 +450,8 @@ static const u32 ar9565_1p0_soc_postamble[][5] = {
static
const
u32
ar9565_1p0_Common_rx_gain_table
[][
2
]
=
{
/* Addr allmodes */
{
0x00004050
,
0x00300300
},
{
0x0000406c
,
0x00100000
},
{
0x0000a000
,
0x00010000
},
{
0x0000a004
,
0x00030002
},
{
0x0000a008
,
0x00050004
},
...
...
@@ -498,27 +500,27 @@ static const u32 ar9565_1p0_Common_rx_gain_table[][2] = {
{
0x0000a0b4
,
0x00000000
},
{
0x0000a0b8
,
0x00000000
},
{
0x0000a0bc
,
0x00000000
},
{
0x0000a0c0
,
0x00
1f000
0
},
{
0x0000a0c4
,
0x
0100010
1
},
{
0x0000a0c8
,
0x
011e011
f
},
{
0x0000a0cc
,
0x
011c011
d
},
{
0x0000a0d0
,
0x
0203020
4
},
{
0x0000a0d4
,
0x
0201020
2
},
{
0x0000a0d8
,
0x
021f020
0
},
{
0x0000a0dc
,
0x
0302021
e
},
{
0x0000a0e0
,
0x
0300030
1
},
{
0x0000a0e4
,
0x
031e031
f
},
{
0x0000a0e8
,
0x
0402031
d
},
{
0x0000a0ec
,
0x
0400040
1
},
{
0x0000a0f0
,
0x
041e041
f
},
{
0x0000a0f4
,
0x
0502041
d
},
{
0x0000a0f8
,
0x
0500050
1
},
{
0x0000a0fc
,
0x
051e051
f
},
{
0x0000a100
,
0x
0601060
2
},
{
0x0000a104
,
0x
061f060
0
},
{
0x0000a108
,
0x
061d061
e
},
{
0x0000a10c
,
0x
0702070
3
},
{
0x0000a110
,
0x
0700070
1
},
{
0x0000a0c0
,
0x00
bf00a
0
},
{
0x0000a0c4
,
0x
11a011a
1
},
{
0x0000a0c8
,
0x
11be11b
f
},
{
0x0000a0cc
,
0x
11bc11b
d
},
{
0x0000a0d0
,
0x
2263226
4
},
{
0x0000a0d4
,
0x
2261226
2
},
{
0x0000a0d8
,
0x
227f226
0
},
{
0x0000a0dc
,
0x
4322227
e
},
{
0x0000a0e0
,
0x
4320432
1
},
{
0x0000a0e4
,
0x
433e433
f
},
{
0x0000a0e8
,
0x
4462433
d
},
{
0x0000a0ec
,
0x
4460446
1
},
{
0x0000a0f0
,
0x
447e447
f
},
{
0x0000a0f4
,
0x
5582447
d
},
{
0x0000a0f8
,
0x
5580558
1
},
{
0x0000a0fc
,
0x
559e559
f
},
{
0x0000a100
,
0x
6681668
2
},
{
0x0000a104
,
0x
669f668
0
},
{
0x0000a108
,
0x
669d669
e
},
{
0x0000a10c
,
0x
7762776
3
},
{
0x0000a110
,
0x
7760776
1
},
{
0x0000a114
,
0x00000000
},
{
0x0000a118
,
0x00000000
},
{
0x0000a11c
,
0x00000000
},
...
...
@@ -530,27 +532,27 @@ static const u32 ar9565_1p0_Common_rx_gain_table[][2] = {
{
0x0000a134
,
0x00000000
},
{
0x0000a138
,
0x00000000
},
{
0x0000a13c
,
0x00000000
},
{
0x0000a140
,
0x00
1f000
0
},
{
0x0000a144
,
0x
0100010
1
},
{
0x0000a148
,
0x
011e011
f
},
{
0x0000a14c
,
0x
011c011
d
},
{
0x0000a150
,
0x
0203020
4
},
{
0x0000a154
,
0x
0201020
2
},
{
0x0000a158
,
0x
021f020
0
},
{
0x0000a15c
,
0x
0302021
e
},
{
0x0000a160
,
0x
0300030
1
},
{
0x0000a164
,
0x
031e031
f
},
{
0x0000a168
,
0x
0402031
d
},
{
0x0000a16c
,
0x
0400040
1
},
{
0x0000a170
,
0x
041e041
f
},
{
0x0000a174
,
0x
0502041
d
},
{
0x0000a178
,
0x
0500050
1
},
{
0x0000a17c
,
0x
051e051
f
},
{
0x0000a180
,
0x
0601060
2
},
{
0x0000a184
,
0x
061f060
0
},
{
0x0000a188
,
0x
061d061
e
},
{
0x0000a18c
,
0x
07020703
},
{
0x0000a190
,
0x
07000701
},
{
0x0000a140
,
0x00
bf00a
0
},
{
0x0000a144
,
0x
11a011a
1
},
{
0x0000a148
,
0x
11be11b
f
},
{
0x0000a14c
,
0x
11bc11b
d
},
{
0x0000a150
,
0x
2263226
4
},
{
0x0000a154
,
0x
2261226
2
},
{
0x0000a158
,
0x
227f226
0
},
{
0x0000a15c
,
0x
4322227
e
},
{
0x0000a160
,
0x
4320432
1
},
{
0x0000a164
,
0x
433e433
f
},
{
0x0000a168
,
0x
4462433
d
},
{
0x0000a16c
,
0x
4460446
1
},
{
0x0000a170
,
0x
447e447
f
},
{
0x0000a174
,
0x
5582447
d
},
{
0x0000a178
,
0x
5580558
1
},
{
0x0000a17c
,
0x
559e559
f
},
{
0x0000a180
,
0x
6681668
2
},
{
0x0000a184
,
0x
669f668
0
},
{
0x0000a188
,
0x
669d669
e
},
{
0x0000a18c
,
0x
77e677e7
},
{
0x0000a190
,
0x
77e477e5
},
{
0x0000a194
,
0x00000000
},
{
0x0000a198
,
0x00000000
},
{
0x0000a19c
,
0x00000000
},
...
...
@@ -770,7 +772,7 @@ static const u32 ar9565_1p0_Modes_lowest_ob_db_tx_gain_table[][5] = {
static
const
u32
ar9565_1p0_pciephy_clkreq_disable_L1
[][
2
]
=
{
/* Addr allmodes */
{
0x00018c00
,
0x1821
3
ede
},
{
0x00018c00
,
0x1821
2
ede
},
{
0x00018c04
,
0x000801d8
},
{
0x00018c08
,
0x0003780c
},
};
...
...
@@ -889,8 +891,8 @@ static const u32 ar9565_1p0_common_wo_xlna_rx_gain_table[][2] = {
{
0x0000a180
,
0x66816682
},
{
0x0000a184
,
0x669f6680
},
{
0x0000a188
,
0x669d669e
},
{
0x0000a18c
,
0x77
627763
},
{
0x0000a190
,
0x77
607761
},
{
0x0000a18c
,
0x77
e677e7
},
{
0x0000a190
,
0x77
e477e5
},
{
0x0000a194
,
0x00000000
},
{
0x0000a198
,
0x00000000
},
{
0x0000a19c
,
0x00000000
},
...
...
@@ -1114,7 +1116,7 @@ static const u32 ar9565_1p0_modes_high_ob_db_tx_gain_table[][5] = {
{
0x0000a2e0
,
0xffecec00
,
0xffecec00
,
0xfd339c84
,
0xfd339c84
},
{
0x0000a2e4
,
0xfc0f0000
,
0xfc0f0000
,
0xfec3e000
,
0xfec3e000
},
{
0x0000a2e8
,
0xfc100000
,
0xfc100000
,
0xfffc0000
,
0xfffc0000
},
{
0x0000a410
,
0x000050d9
,
0x000050d9
,
0x000050d
9
,
0x000050d9
},
{
0x0000a410
,
0x000050d9
,
0x000050d9
,
0x000050d
f
,
0x000050df
},
{
0x0000a500
,
0x00002220
,
0x00002220
,
0x00000000
,
0x00000000
},
{
0x0000a504
,
0x06002223
,
0x06002223
,
0x04000002
,
0x04000002
},
{
0x0000a508
,
0x0b022220
,
0x0b022220
,
0x08000004
,
0x08000004
},
...
...
@@ -1140,13 +1142,13 @@ static const u32 ar9565_1p0_modes_high_ob_db_tx_gain_table[][5] = {
{
0x0000a558
,
0x69027f56
,
0x69027f56
,
0x53001ce5
,
0x53001ce5
},
{
0x0000a55c
,
0x6d029f56
,
0x6d029f56
,
0x57001ce9
,
0x57001ce9
},
{
0x0000a560
,
0x73049f56
,
0x73049f56
,
0x5b001ceb
,
0x5b001ceb
},
{
0x0000a564
,
0x7804ff56
,
0x7804ff56
,
0x
5d001eec
,
0x5d001eec
},
{
0x0000a568
,
0x7804ff56
,
0x7804ff56
,
0x
5d001eec
,
0x5d001eec
},
{
0x0000a56c
,
0x7804ff56
,
0x7804ff56
,
0x
5d001eec
,
0x5d001eec
},
{
0x0000a570
,
0x7804ff56
,
0x7804ff56
,
0x
5d001eec
,
0x5d001eec
},
{
0x0000a574
,
0x7804ff56
,
0x7804ff56
,
0x
5d001eec
,
0x5d001eec
},
{
0x0000a578
,
0x7804ff56
,
0x7804ff56
,
0x
5d001eec
,
0x5d001eec
},
{
0x0000a57c
,
0x7804ff56
,
0x7804ff56
,
0x
5d001eec
,
0x5d001eec
},
{
0x0000a564
,
0x7804ff56
,
0x7804ff56
,
0x
60001cf0
,
0x60001cf0
},
{
0x0000a568
,
0x7804ff56
,
0x7804ff56
,
0x
61001cf1
,
0x61001cf1
},
{
0x0000a56c
,
0x7804ff56
,
0x7804ff56
,
0x
62001cf2
,
0x62001cf2
},
{
0x0000a570
,
0x7804ff56
,
0x7804ff56
,
0x
63001cf3
,
0x63001cf3
},
{
0x0000a574
,
0x7804ff56
,
0x7804ff56
,
0x
64001cf4
,
0x64001cf4
},
{
0x0000a578
,
0x7804ff56
,
0x7804ff56
,
0x
66001ff6
,
0x66001ff6
},
{
0x0000a57c
,
0x7804ff56
,
0x7804ff56
,
0x
66001ff6
,
0x66001ff6
},
{
0x0000a600
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
},
{
0x0000a604
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
},
{
0x0000a608
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
},
...
...
@@ -1174,7 +1176,7 @@ static const u32 ar9565_1p0_modes_high_power_tx_gain_table[][5] = {
{
0x0000a2e0
,
0xffecec00
,
0xffecec00
,
0xfd339c84
,
0xfd339c84
},
{
0x0000a2e4
,
0xfc0f0000
,
0xfc0f0000
,
0xfec3e000
,
0xfec3e000
},
{
0x0000a2e8
,
0xfc100000
,
0xfc100000
,
0xfffc0000
,
0xfffc0000
},
{
0x0000a410
,
0x000050d9
,
0x000050d9
,
0x000050d
9
,
0x000050d9
},
{
0x0000a410
,
0x000050d9
,
0x000050d9
,
0x000050d
f
,
0x000050df
},
{
0x0000a500
,
0x00002220
,
0x00002220
,
0x00000000
,
0x00000000
},
{
0x0000a504
,
0x06002223
,
0x06002223
,
0x04000002
,
0x04000002
},
{
0x0000a508
,
0x0a022220
,
0x0a022220
,
0x08000004
,
0x08000004
},
...
...
@@ -1200,13 +1202,13 @@ static const u32 ar9565_1p0_modes_high_power_tx_gain_table[][5] = {
{
0x0000a558
,
0x66027f56
,
0x66027f56
,
0x4c001ce5
,
0x4c001ce5
},
{
0x0000a55c
,
0x6a029f56
,
0x6a029f56
,
0x50001ce9
,
0x50001ce9
},
{
0x0000a560
,
0x70049f56
,
0x70049f56
,
0x54001ceb
,
0x54001ceb
},
{
0x0000a564
,
0x7504ff56
,
0x7504ff56
,
0x5
6001eec
,
0x56001eec
},
{
0x0000a568
,
0x7504ff56
,
0x7504ff56
,
0x5
6001eec
,
0x56001eec
},
{
0x0000a56c
,
0x7504ff56
,
0x7504ff56
,
0x5
6001eec
,
0x56001eec
},
{
0x0000a570
,
0x7504ff56
,
0x7504ff56
,
0x5
6001eec
,
0x56001eec
},
{
0x0000a574
,
0x7504ff56
,
0x7504ff56
,
0x5
6001eec
,
0x56001eec
},
{
0x0000a578
,
0x7504ff56
,
0x7504ff56
,
0x5
6001eec
,
0x56001eec
},
{
0x0000a57c
,
0x7504ff56
,
0x7504ff56
,
0x5
6001eec
,
0x56001eec
},
{
0x0000a564
,
0x7504ff56
,
0x7504ff56
,
0x5
9001cf0
,
0x59001cf0
},
{
0x0000a568
,
0x7504ff56
,
0x7504ff56
,
0x5
a001cf1
,
0x5a001cf1
},
{
0x0000a56c
,
0x7504ff56
,
0x7504ff56
,
0x5
b001cf2
,
0x5b001cf2
},
{
0x0000a570
,
0x7504ff56
,
0x7504ff56
,
0x5
c001cf3
,
0x5c001cf3
},
{
0x0000a574
,
0x7504ff56
,
0x7504ff56
,
0x5
d001cf4
,
0x5d001cf4
},
{
0x0000a578
,
0x7504ff56
,
0x7504ff56
,
0x5
f001ff6
,
0x5f001ff6
},
{
0x0000a57c
,
0x7504ff56
,
0x7504ff56
,
0x5
f001ff6
,
0x5f001ff6
},
{
0x0000a600
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
},
{
0x0000a604
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
},
{
0x0000a608
,
0x00000000
,
0x00000000
,
0x00000000
,
0x00000000
},
...
...
drivers/net/wireless/ath/ath9k/main.c
浏览文件 @
dde7dc75
...
...
@@ -227,13 +227,13 @@ static bool ath_complete_reset(struct ath_softc *sc, bool start)
if
(
!
test_bit
(
SC_OP_BEACONS
,
&
sc
->
sc_flags
))
goto
work
;
ath9k_set_beacon
(
sc
);
if
(
ah
->
opmode
==
NL80211_IFTYPE_STATION
&&
test_bit
(
SC_OP_PRIM_STA_VIF
,
&
sc
->
sc_flags
))
{
spin_lock_irqsave
(
&
sc
->
sc_pm_lock
,
flags
);
sc
->
ps_flags
|=
PS_BEACON_SYNC
|
PS_WAIT_FOR_BEACON
;
spin_unlock_irqrestore
(
&
sc
->
sc_pm_lock
,
flags
);
}
else
{
ath9k_set_beacon
(
sc
);
}
work:
ath_restart_work
(
sc
);
...
...
@@ -1332,6 +1332,7 @@ static int ath9k_sta_add(struct ieee80211_hw *hw,
struct
ath_common
*
common
=
ath9k_hw_common
(
sc
->
sc_ah
);
struct
ath_node
*
an
=
(
struct
ath_node
*
)
sta
->
drv_priv
;
struct
ieee80211_key_conf
ps_key
=
{
};
int
key
;
ath_node_attach
(
sc
,
sta
,
vif
);
...
...
@@ -1339,7 +1340,9 @@ static int ath9k_sta_add(struct ieee80211_hw *hw,
vif
->
type
!=
NL80211_IFTYPE_AP_VLAN
)
return
0
;
an
->
ps_key
=
ath_key_config
(
common
,
vif
,
sta
,
&
ps_key
);
key
=
ath_key_config
(
common
,
vif
,
sta
,
&
ps_key
);
if
(
key
>
0
)
an
->
ps_key
=
key
;
return
0
;
}
...
...
@@ -1356,6 +1359,7 @@ static void ath9k_del_ps_key(struct ath_softc *sc,
return
;
ath_key_delete
(
common
,
&
ps_key
);
an
->
ps_key
=
0
;
}
static
int
ath9k_sta_remove
(
struct
ieee80211_hw
*
hw
,
...
...
drivers/net/wireless/b43/dma.c
浏览文件 @
dde7dc75
...
...
@@ -1728,6 +1728,25 @@ static void dma_rx(struct b43_dmaring *ring, int *slot)
sync_descbuffer_for_device
(
ring
,
dmaaddr
,
ring
->
rx_buffersize
);
}
void
b43_dma_handle_rx_overflow
(
struct
b43_dmaring
*
ring
)
{
int
current_slot
,
previous_slot
;
B43_WARN_ON
(
ring
->
tx
);
/* Device has filled all buffers, drop all packets and let TCP
* decrease speed.
* Decrement RX index by one will let the device to see all slots
* as free again
*/
/*
*TODO: How to increase rx_drop in mac80211?
*/
current_slot
=
ring
->
ops
->
get_current_rxslot
(
ring
);
previous_slot
=
prev_slot
(
ring
,
current_slot
);
ring
->
ops
->
set_current_rxslot
(
ring
,
previous_slot
);
}
void
b43_dma_rx
(
struct
b43_dmaring
*
ring
)
{
const
struct
b43_dma_ops
*
ops
=
ring
->
ops
;
...
...
drivers/net/wireless/b43/dma.h
浏览文件 @
dde7dc75
...
...
@@ -9,7 +9,7 @@
/* DMA-Interrupt reasons. */
#define B43_DMAIRQ_FATALMASK ((1 << 10) | (1 << 11) | (1 << 12) \
| (1 << 14) | (1 << 15))
#define B43_DMAIRQ_
NONFATALMASK
(1 << 13)
#define B43_DMAIRQ_
RDESC_UFLOW
(1 << 13)
#define B43_DMAIRQ_RX_DONE (1 << 16)
/*** 32-bit DMA Engine. ***/
...
...
@@ -295,6 +295,8 @@ int b43_dma_tx(struct b43_wldev *dev,
void
b43_dma_handle_txstatus
(
struct
b43_wldev
*
dev
,
const
struct
b43_txstatus
*
status
);
void
b43_dma_handle_rx_overflow
(
struct
b43_dmaring
*
ring
);
void
b43_dma_rx
(
struct
b43_dmaring
*
ring
);
void
b43_dma_direct_fifo_rx
(
struct
b43_wldev
*
dev
,
...
...
drivers/net/wireless/b43/main.c
浏览文件 @
dde7dc75
...
...
@@ -1902,30 +1902,18 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
}
}
if
(
unlikely
(
merged_dma_reason
&
(
B43_DMAIRQ_FATALMASK
|
B43_DMAIRQ_NONFATALMASK
)))
{
if
(
merged_dma_reason
&
B43_DMAIRQ_FATALMASK
)
{
b43err
(
dev
->
wl
,
"Fatal DMA error: "
"0x%08X, 0x%08X, 0x%08X, "
"0x%08X, 0x%08X, 0x%08X
\n
"
,
dma_reason
[
0
],
dma_reason
[
1
],
dma_reason
[
2
],
dma_reason
[
3
],
dma_reason
[
4
],
dma_reason
[
5
]);
b43err
(
dev
->
wl
,
"This device does not support DMA "
if
(
unlikely
(
merged_dma_reason
&
(
B43_DMAIRQ_FATALMASK
)))
{
b43err
(
dev
->
wl
,
"Fatal DMA error: 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X, 0x%08X
\n
"
,
dma_reason
[
0
],
dma_reason
[
1
],
dma_reason
[
2
],
dma_reason
[
3
],
dma_reason
[
4
],
dma_reason
[
5
]);
b43err
(
dev
->
wl
,
"This device does not support DMA "
"on your system. It will now be switched to PIO.
\n
"
);
/* Fall back to PIO transfers if we get fatal DMA errors! */
dev
->
use_pio
=
true
;
b43_controller_restart
(
dev
,
"DMA error"
);
return
;
}
if
(
merged_dma_reason
&
B43_DMAIRQ_NONFATALMASK
)
{
b43err
(
dev
->
wl
,
"DMA error: "
"0x%08X, 0x%08X, 0x%08X, "
"0x%08X, 0x%08X, 0x%08X
\n
"
,
dma_reason
[
0
],
dma_reason
[
1
],
dma_reason
[
2
],
dma_reason
[
3
],
dma_reason
[
4
],
dma_reason
[
5
]);
}
/* Fall back to PIO transfers if we get fatal DMA errors! */
dev
->
use_pio
=
true
;
b43_controller_restart
(
dev
,
"DMA error"
);
return
;
}
if
(
unlikely
(
reason
&
B43_IRQ_UCODE_DEBUG
))
...
...
@@ -1944,6 +1932,11 @@ static void b43_do_interrupt_thread(struct b43_wldev *dev)
handle_irq_noise
(
dev
);
/* Check the DMA reason registers for received data. */
if
(
dma_reason
[
0
]
&
B43_DMAIRQ_RDESC_UFLOW
)
{
if
(
B43_DEBUG
)
b43warn
(
dev
->
wl
,
"RX descriptor underrun
\n
"
);
b43_dma_handle_rx_overflow
(
dev
->
dma
.
rx_ring
);
}
if
(
dma_reason
[
0
]
&
B43_DMAIRQ_RX_DONE
)
{
if
(
b43_using_pio_transfers
(
dev
))
b43_pio_rx
(
dev
->
pio
.
rx_queue
);
...
...
@@ -2001,7 +1994,7 @@ static irqreturn_t b43_do_interrupt(struct b43_wldev *dev)
return
IRQ_NONE
;
dev
->
dma_reason
[
0
]
=
b43_read32
(
dev
,
B43_MMIO_DMA0_REASON
)
&
0x0001
D
C00
;
&
0x0001
F
C00
;
dev
->
dma_reason
[
1
]
=
b43_read32
(
dev
,
B43_MMIO_DMA1_REASON
)
&
0x0000DC00
;
dev
->
dma_reason
[
2
]
=
b43_read32
(
dev
,
B43_MMIO_DMA2_REASON
)
...
...
@@ -3130,7 +3123,7 @@ static int b43_chip_init(struct b43_wldev *dev)
b43_write32
(
dev
,
0x018C
,
0x02000000
);
}
b43_write32
(
dev
,
B43_MMIO_GEN_IRQ_REASON
,
0x00004000
);
b43_write32
(
dev
,
B43_MMIO_DMA0_IRQ_MASK
,
0x0001
D
C00
);
b43_write32
(
dev
,
B43_MMIO_DMA0_IRQ_MASK
,
0x0001
F
C00
);
b43_write32
(
dev
,
B43_MMIO_DMA1_IRQ_MASK
,
0x0000DC00
);
b43_write32
(
dev
,
B43_MMIO_DMA2_IRQ_MASK
,
0x0000DC00
);
b43_write32
(
dev
,
B43_MMIO_DMA3_IRQ_MASK
,
0x0001DC00
);
...
...
drivers/net/wireless/iwlegacy/4965-mac.c
浏览文件 @
dde7dc75
...
...
@@ -5741,8 +5741,7 @@ il4965_mac_setup_register(struct il_priv *il, u32 max_probe_length)
hw
->
flags
=
IEEE80211_HW_SIGNAL_DBM
|
IEEE80211_HW_AMPDU_AGGREGATION
|
IEEE80211_HW_NEED_DTIM_BEFORE_ASSOC
|
IEEE80211_HW_SPECTRUM_MGMT
|
IEEE80211_HW_REPORTS_TX_ACK_STATUS
|
IEEE80211_HW_SUPPORTS_PS
|
IEEE80211_HW_SUPPORTS_DYNAMIC_PS
;
IEEE80211_HW_SUPPORTS_PS
|
IEEE80211_HW_SUPPORTS_DYNAMIC_PS
;
if
(
il
->
cfg
->
sku
&
IL_SKU_N
)
hw
->
flags
|=
IEEE80211_HW_SUPPORTS_DYNAMIC_SMPS
|
...
...
drivers/net/wireless/iwlwifi/mvm/mac80211.c
浏览文件 @
dde7dc75
...
...
@@ -84,15 +84,6 @@ static const struct ieee80211_iface_limit iwl_mvm_limits[] = {
.
types
=
BIT
(
NL80211_IFTYPE_STATION
)
|
BIT
(
NL80211_IFTYPE_AP
),
},
{
.
max
=
1
,
.
types
=
BIT
(
NL80211_IFTYPE_P2P_CLIENT
)
|
BIT
(
NL80211_IFTYPE_P2P_GO
),
},
{
.
max
=
1
,
.
types
=
BIT
(
NL80211_IFTYPE_P2P_DEVICE
),
},
};
static
const
struct
ieee80211_iface_combination
iwl_mvm_iface_combinations
[]
=
{
...
...
@@ -161,10 +152,7 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
hw
->
chanctx_data_size
=
sizeof
(
struct
iwl_mvm_phy_ctxt
);
hw
->
wiphy
->
interface_modes
=
BIT
(
NL80211_IFTYPE_STATION
)
|
BIT
(
NL80211_IFTYPE_P2P_CLIENT
)
|
BIT
(
NL80211_IFTYPE_AP
)
|
BIT
(
NL80211_IFTYPE_P2P_GO
)
|
BIT
(
NL80211_IFTYPE_P2P_DEVICE
);
BIT
(
NL80211_IFTYPE_AP
);
hw
->
wiphy
->
flags
|=
WIPHY_FLAG_CUSTOM_REGULATORY
|
WIPHY_FLAG_DISABLE_BEACON_HINTS
|
...
...
drivers/net/wireless/mac80211_hwsim.c
浏览文件 @
dde7dc75
...
...
@@ -1723,11 +1723,11 @@ static void mac80211_hwsim_free(void)
class_destroy
(
hwsim_class
);
}
static
struct
device_driver
mac80211_hwsim_
driver
=
{
.
name
=
"mac80211_hwsim"
,
.
bus
=
&
platform_bus_type
,
.
owner
=
THIS_MODULE
,
static
struct
platform_driver
mac80211_hwsim_driver
=
{
.
driver
=
{
.
name
=
"mac80211_hwsim"
,
.
owner
=
THIS_MODULE
,
}
,
};
static
const
struct
net_device_ops
hwsim_netdev_ops
=
{
...
...
@@ -2169,7 +2169,6 @@ static const struct ieee80211_iface_limit hwsim_if_limits[] = {
#endif
BIT
(
NL80211_IFTYPE_AP
)
|
BIT
(
NL80211_IFTYPE_P2P_GO
)
},
{
.
max
=
1
,
.
types
=
BIT
(
NL80211_IFTYPE_P2P_DEVICE
)
},
};
static
struct
ieee80211_iface_combination
hwsim_if_comb
=
{
...
...
@@ -2219,7 +2218,7 @@ static int __init init_mac80211_hwsim(void)
spin_lock_init
(
&
hwsim_radio_lock
);
INIT_LIST_HEAD
(
&
hwsim_radios
);
err
=
driver_register
(
&
mac80211_hwsim_driver
);
err
=
platform_
driver_register
(
&
mac80211_hwsim_driver
);
if
(
err
)
return
err
;
...
...
@@ -2254,7 +2253,7 @@ static int __init init_mac80211_hwsim(void)
err
=
-
ENOMEM
;
goto
failed_drvdata
;
}
data
->
dev
->
driver
=
&
mac80211_hwsim_driver
;
data
->
dev
->
driver
=
&
mac80211_hwsim_driver
.
driver
;
err
=
device_bind_driver
(
data
->
dev
);
if
(
err
!=
0
)
{
printk
(
KERN_DEBUG
...
...
@@ -2295,8 +2294,7 @@ static int __init init_mac80211_hwsim(void)
BIT
(
NL80211_IFTYPE_P2P_CLIENT
)
|
BIT
(
NL80211_IFTYPE_P2P_GO
)
|
BIT
(
NL80211_IFTYPE_ADHOC
)
|
BIT
(
NL80211_IFTYPE_MESH_POINT
)
|
BIT
(
NL80211_IFTYPE_P2P_DEVICE
);
BIT
(
NL80211_IFTYPE_MESH_POINT
);
hw
->
flags
=
IEEE80211_HW_MFP_CAPABLE
|
IEEE80211_HW_SIGNAL_DBM
|
...
...
@@ -2564,7 +2562,7 @@ static int __init init_mac80211_hwsim(void)
failed:
mac80211_hwsim_free
();
failed_unregister_driver:
driver_unregister
(
&
mac80211_hwsim_driver
);
platform_
driver_unregister
(
&
mac80211_hwsim_driver
);
return
err
;
}
module_init
(
init_mac80211_hwsim
);
...
...
@@ -2577,6 +2575,6 @@ static void __exit exit_mac80211_hwsim(void)
mac80211_hwsim_free
();
unregister_netdev
(
hwsim_mon
);
driver_unregister
(
&
mac80211_hwsim_driver
);
platform_
driver_unregister
(
&
mac80211_hwsim_driver
);
}
module_exit
(
exit_mac80211_hwsim
);
drivers/net/wireless/mwifiex/cfg80211.c
浏览文件 @
dde7dc75
...
...
@@ -2234,9 +2234,6 @@ int mwifiex_del_virtual_intf(struct wiphy *wiphy, struct wireless_dev *wdev)
if
(
wdev
->
netdev
->
reg_state
==
NETREG_REGISTERED
)
unregister_netdevice
(
wdev
->
netdev
);
if
(
wdev
->
netdev
->
reg_state
==
NETREG_UNREGISTERED
)
free_netdev
(
wdev
->
netdev
);
/* Clear the priv in adapter */
priv
->
netdev
=
NULL
;
...
...
drivers/net/wireless/mwifiex/cmdevt.c
浏览文件 @
dde7dc75
...
...
@@ -1191,6 +1191,7 @@ mwifiex_process_hs_config(struct mwifiex_adapter *adapter)
adapter
->
if_ops
.
wakeup
(
adapter
);
adapter
->
hs_activated
=
false
;
adapter
->
is_hs_configured
=
false
;
adapter
->
is_suspended
=
false
;
mwifiex_hs_activated_event
(
mwifiex_get_priv
(
adapter
,
MWIFIEX_BSS_ROLE_ANY
),
false
);
...
...
drivers/net/wireless/mwifiex/main.c
浏览文件 @
dde7dc75
...
...
@@ -655,6 +655,7 @@ void mwifiex_init_priv_params(struct mwifiex_private *priv,
struct
net_device
*
dev
)
{
dev
->
netdev_ops
=
&
mwifiex_netdev_ops
;
dev
->
destructor
=
free_netdev
;
/* Initialize private structure */
priv
->
current_key_index
=
0
;
priv
->
media_connected
=
false
;
...
...
drivers/net/wireless/mwifiex/sta_ioctl.c
浏览文件 @
dde7dc75
...
...
@@ -96,7 +96,7 @@ int mwifiex_request_set_multicast_list(struct mwifiex_private *priv,
}
else
{
/* Multicast */
priv
->
curr_pkt_filter
&=
~
HostCmd_ACT_MAC_PROMISCUOUS_ENABLE
;
if
(
mcast_list
->
mode
==
MWIFIEX_
MULTICAST
_MODE
)
{
if
(
mcast_list
->
mode
==
MWIFIEX_
ALL_MULTI
_MODE
)
{
dev_dbg
(
priv
->
adapter
->
dev
,
"info: Enabling All Multicast!
\n
"
);
priv
->
curr_pkt_filter
|=
...
...
@@ -108,20 +108,11 @@ int mwifiex_request_set_multicast_list(struct mwifiex_private *priv,
dev_dbg
(
priv
->
adapter
->
dev
,
"info: Set multicast list=%d
\n
"
,
mcast_list
->
num_multicast_addr
);
/* Set multicast addresses to firmware */
if
(
old_pkt_filter
==
priv
->
curr_pkt_filter
)
{
/* Send request to firmware */
ret
=
mwifiex_send_cmd_async
(
priv
,
HostCmd_CMD_MAC_MULTICAST_ADR
,
HostCmd_ACT_GEN_SET
,
0
,
mcast_list
);
}
else
{
/* Send request to firmware */
ret
=
mwifiex_send_cmd_async
(
priv
,
HostCmd_CMD_MAC_MULTICAST_ADR
,
HostCmd_ACT_GEN_SET
,
0
,
mcast_list
);
}
/* Send multicast addresses to firmware */
ret
=
mwifiex_send_cmd_async
(
priv
,
HostCmd_CMD_MAC_MULTICAST_ADR
,
HostCmd_ACT_GEN_SET
,
0
,
mcast_list
);
}
}
}
...
...
include/net/mac80211.h
浏览文件 @
dde7dc75
...
...
@@ -3053,7 +3053,8 @@ void ieee80211_napi_complete(struct ieee80211_hw *hw);
* This function may not be called in IRQ context. Calls to this function
* for a single hardware must be synchronized against each other. Calls to
* this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be
* mixed for a single hardware.
* mixed for a single hardware. Must not run concurrently with
* ieee80211_tx_status() or ieee80211_tx_status_ni().
*
* In process context use instead ieee80211_rx_ni().
*
...
...
@@ -3069,7 +3070,8 @@ void ieee80211_rx(struct ieee80211_hw *hw, struct sk_buff *skb);
* (internally defers to a tasklet.)
*
* Calls to this function, ieee80211_rx() or ieee80211_rx_ni() may not
* be mixed for a single hardware.
* be mixed for a single hardware.Must not run concurrently with
* ieee80211_tx_status() or ieee80211_tx_status_ni().
*
* @hw: the hardware this frame came in on
* @skb: the buffer to receive, owned by mac80211 after this call
...
...
@@ -3083,7 +3085,8 @@ void ieee80211_rx_irqsafe(struct ieee80211_hw *hw, struct sk_buff *skb);
* (internally disables bottom halves).
*
* Calls to this function, ieee80211_rx() and ieee80211_rx_irqsafe() may
* not be mixed for a single hardware.
* not be mixed for a single hardware. Must not run concurrently with
* ieee80211_tx_status() or ieee80211_tx_status_ni().
*
* @hw: the hardware this frame came in on
* @skb: the buffer to receive, owned by mac80211 after this call
...
...
@@ -3206,7 +3209,8 @@ void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
* This function may not be called in IRQ context. Calls to this function
* for a single hardware must be synchronized against each other. Calls
* to this function, ieee80211_tx_status_ni() and ieee80211_tx_status_irqsafe()
* may not be mixed for a single hardware.
* may not be mixed for a single hardware. Must not run concurrently with
* ieee80211_rx() or ieee80211_rx_ni().
*
* @hw: the hardware the frame was transmitted by
* @skb: the frame that was transmitted, owned by mac80211 after this call
...
...
net/mac80211/ieee80211_i.h
浏览文件 @
dde7dc75
...
...
@@ -1267,6 +1267,7 @@ void ieee80211_sta_reset_conn_monitor(struct ieee80211_sub_if_data *sdata);
void
ieee80211_mgd_stop
(
struct
ieee80211_sub_if_data
*
sdata
);
void
ieee80211_mgd_conn_tx_status
(
struct
ieee80211_sub_if_data
*
sdata
,
__le16
fc
,
bool
acked
);
void
ieee80211_sta_restart
(
struct
ieee80211_sub_if_data
*
sdata
);
/* IBSS code */
void
ieee80211_ibss_notify_scan_completed
(
struct
ieee80211_local
*
local
);
...
...
net/mac80211/iface.c
浏览文件 @
dde7dc75
...
...
@@ -474,6 +474,9 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
master
->
control_port_protocol
;
sdata
->
control_port_no_encrypt
=
master
->
control_port_no_encrypt
;
sdata
->
vif
.
cab_queue
=
master
->
vif
.
cab_queue
;
memcpy
(
sdata
->
vif
.
hw_queue
,
master
->
vif
.
hw_queue
,
sizeof
(
sdata
->
vif
.
hw_queue
));
break
;
}
case
NL80211_IFTYPE_AP
:
...
...
@@ -653,7 +656,11 @@ int ieee80211_do_open(struct wireless_dev *wdev, bool coming_up)
ieee80211_recalc_ps
(
local
,
-
1
);
if
(
dev
)
{
if
(
sdata
->
vif
.
type
==
NL80211_IFTYPE_MONITOR
||
sdata
->
vif
.
type
==
NL80211_IFTYPE_AP_VLAN
)
{
/* XXX: for AP_VLAN, actually track AP queues */
netif_tx_start_all_queues
(
dev
);
}
else
if
(
dev
)
{
unsigned
long
flags
;
int
n_acs
=
IEEE80211_NUM_ACS
;
int
ac
;
...
...
@@ -1696,6 +1703,15 @@ void ieee80211_remove_interfaces(struct ieee80211_local *local)
ASSERT_RTNL
();
/*
* Close all AP_VLAN interfaces first, as otherwise they
* might be closed while the AP interface they belong to
* is closed, causing unregister_netdevice_many() to crash.
*/
list_for_each_entry
(
sdata
,
&
local
->
interfaces
,
list
)
if
(
sdata
->
vif
.
type
==
NL80211_IFTYPE_AP_VLAN
)
dev_close
(
sdata
->
dev
);
mutex_lock
(
&
local
->
iflist_mtx
);
list_for_each_entry_safe
(
sdata
,
tmp
,
&
local
->
interfaces
,
list
)
{
list_del
(
&
sdata
->
list
);
...
...
net/mac80211/mlme.c
浏览文件 @
dde7dc75
...
...
@@ -3325,10 +3325,6 @@ static int ieee80211_probe_auth(struct ieee80211_sub_if_data *sdata)
if
(
WARN_ON_ONCE
(
!
auth_data
))
return
-
EINVAL
;
if
(
local
->
hw
.
flags
&
IEEE80211_HW_REPORTS_TX_ACK_STATUS
)
tx_flags
=
IEEE80211_TX_CTL_REQ_TX_STATUS
|
IEEE80211_TX_INTFL_MLME_CONN_TX
;
auth_data
->
tries
++
;
if
(
auth_data
->
tries
>
IEEE80211_AUTH_MAX_TRIES
)
{
...
...
@@ -3362,6 +3358,10 @@ static int ieee80211_probe_auth(struct ieee80211_sub_if_data *sdata)
auth_data
->
expected_transaction
=
trans
;
}
if
(
local
->
hw
.
flags
&
IEEE80211_HW_REPORTS_TX_ACK_STATUS
)
tx_flags
=
IEEE80211_TX_CTL_REQ_TX_STATUS
|
IEEE80211_TX_INTFL_MLME_CONN_TX
;
ieee80211_send_auth
(
sdata
,
trans
,
auth_data
->
algorithm
,
status
,
auth_data
->
data
,
auth_data
->
data_len
,
auth_data
->
bss
->
bssid
,
...
...
@@ -3385,12 +3385,12 @@ static int ieee80211_probe_auth(struct ieee80211_sub_if_data *sdata)
* will not answer to direct packet in unassociated state.
*/
ieee80211_send_probe_req
(
sdata
,
NULL
,
ssidie
+
2
,
ssidie
[
1
],
NULL
,
0
,
(
u32
)
-
1
,
true
,
tx_flags
,
NULL
,
0
,
(
u32
)
-
1
,
true
,
0
,
auth_data
->
bss
->
channel
,
false
);
rcu_read_unlock
();
}
if
(
!
(
local
->
hw
.
flags
&
IEEE80211_HW_REPORTS_TX_ACK_STATUS
)
)
{
if
(
tx_flags
==
0
)
{
auth_data
->
timeout
=
jiffies
+
IEEE80211_AUTH_TIMEOUT
;
ifmgd
->
auth_data
->
timeout_started
=
true
;
run_again
(
ifmgd
,
auth_data
->
timeout
);
...
...
@@ -3643,6 +3643,31 @@ static void ieee80211_restart_sta_timer(struct ieee80211_sub_if_data *sdata)
}
}
#ifdef CONFIG_PM
void
ieee80211_sta_restart
(
struct
ieee80211_sub_if_data
*
sdata
)
{
struct
ieee80211_if_managed
*
ifmgd
=
&
sdata
->
u
.
mgd
;
mutex_lock
(
&
ifmgd
->
mtx
);
if
(
!
ifmgd
->
associated
)
{
mutex_unlock
(
&
ifmgd
->
mtx
);
return
;
}
if
(
sdata
->
flags
&
IEEE80211_SDATA_DISCONNECT_RESUME
)
{
sdata
->
flags
&=
~
IEEE80211_SDATA_DISCONNECT_RESUME
;
mlme_dbg
(
sdata
,
"driver requested disconnect after resume
\n
"
);
ieee80211_sta_connection_lost
(
sdata
,
ifmgd
->
associated
->
bssid
,
WLAN_REASON_UNSPECIFIED
,
true
);
mutex_unlock
(
&
ifmgd
->
mtx
);
return
;
}
mutex_unlock
(
&
ifmgd
->
mtx
);
}
#endif
/* interface setup */
void
ieee80211_sta_setup_sdata
(
struct
ieee80211_sub_if_data
*
sdata
)
{
...
...
@@ -4349,7 +4374,7 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
struct
ieee80211_if_managed
*
ifmgd
=
&
sdata
->
u
.
mgd
;
u8
frame_buf
[
IEEE80211_DEAUTH_FRAME_LEN
];
bool
tx
=
!
req
->
local_state_change
;
bool
sen
t_frame
=
false
;
bool
repor
t_frame
=
false
;
mutex_lock
(
&
ifmgd
->
mtx
);
...
...
@@ -4366,7 +4391,7 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
ieee80211_destroy_auth_data
(
sdata
,
false
);
mutex_unlock
(
&
ifmgd
->
mtx
);
sent_frame
=
tx
;
report_frame
=
true
;
goto
out
;
}
...
...
@@ -4374,12 +4399,12 @@ int ieee80211_mgd_deauth(struct ieee80211_sub_if_data *sdata,
ether_addr_equal
(
ifmgd
->
associated
->
bssid
,
req
->
bssid
))
{
ieee80211_set_disassoc
(
sdata
,
IEEE80211_STYPE_DEAUTH
,
req
->
reason_code
,
tx
,
frame_buf
);
sent_frame
=
tx
;
report_frame
=
true
;
}
mutex_unlock
(
&
ifmgd
->
mtx
);
out:
if
(
sen
t_frame
)
if
(
repor
t_frame
)
__cfg80211_send_deauth
(
sdata
->
dev
,
frame_buf
,
IEEE80211_DEAUTH_FRAME_LEN
);
...
...
net/mac80211/rate.c
浏览文件 @
dde7dc75
...
...
@@ -688,8 +688,15 @@ int rate_control_set_rates(struct ieee80211_hw *hw,
struct
ieee80211_sta
*
pubsta
,
struct
ieee80211_sta_rates
*
rates
)
{
struct
ieee80211_sta_rates
*
old
=
rcu_dereference
(
pubsta
->
rates
)
;
struct
ieee80211_sta_rates
*
old
;
/*
* mac80211 guarantees that this function will not be called
* concurrently, so the following RCU access is safe, even without
* extra locking. This can not be checked easily, so we just set
* the condition to true.
*/
old
=
rcu_dereference_protected
(
pubsta
->
rates
,
true
);
rcu_assign_pointer
(
pubsta
->
rates
,
rates
);
if
(
old
)
kfree_rcu
(
old
,
rcu_head
);
...
...
net/mac80211/rx.c
浏览文件 @
dde7dc75
...
...
@@ -3054,6 +3054,9 @@ static int prepare_for_handlers(struct ieee80211_rx_data *rx,
* and location updates. Note that mac80211
* itself never looks at these frames.
*/
if
(
!
multicast
&&
!
ether_addr_equal
(
sdata
->
vif
.
addr
,
hdr
->
addr1
))
return
0
;
if
(
ieee80211_is_public_action
(
hdr
,
skb
->
len
))
return
1
;
if
(
!
ieee80211_is_beacon
(
hdr
->
frame_control
))
...
...
net/mac80211/tkip.c
浏览文件 @
dde7dc75
...
...
@@ -208,10 +208,10 @@ void ieee80211_get_tkip_p2k(struct ieee80211_key_conf *keyconf,
u32
iv32
=
get_unaligned_le32
(
&
data
[
4
]);
u16
iv16
=
data
[
2
]
|
(
data
[
0
]
<<
8
);
spin_lock
_bh
(
&
key
->
u
.
tkip
.
txlock
);
spin_lock
(
&
key
->
u
.
tkip
.
txlock
);
ieee80211_compute_tkip_p1k
(
key
,
iv32
);
tkip_mixing_phase2
(
tk
,
ctx
,
iv16
,
p2k
);
spin_unlock
_bh
(
&
key
->
u
.
tkip
.
txlock
);
spin_unlock
(
&
key
->
u
.
tkip
.
txlock
);
}
EXPORT_SYMBOL
(
ieee80211_get_tkip_p2k
);
...
...
net/mac80211/util.c
浏览文件 @
dde7dc75
...
...
@@ -1714,6 +1714,13 @@ int ieee80211_reconfig(struct ieee80211_local *local)
mb
();
local
->
resuming
=
false
;
list_for_each_entry
(
sdata
,
&
local
->
interfaces
,
list
)
{
if
(
!
ieee80211_sdata_running
(
sdata
))
continue
;
if
(
sdata
->
vif
.
type
==
NL80211_IFTYPE_STATION
)
ieee80211_sta_restart
(
sdata
);
}
mod_timer
(
&
local
->
sta_cleanup
,
jiffies
+
1
);
#else
WARN_ON
(
1
);
...
...
net/wireless/core.c
浏览文件 @
dde7dc75
...
...
@@ -639,17 +639,21 @@ int wiphy_register(struct wiphy *wiphy)
* cfg80211_mutex lock
*/
res
=
rfkill_register
(
rdev
->
rfkill
);
if
(
res
)
goto
out_rm_dev
;
if
(
res
)
{
device_del
(
&
rdev
->
wiphy
.
dev
);
mutex_lock
(
&
cfg80211_mutex
);
debugfs_remove_recursive
(
rdev
->
wiphy
.
debugfsdir
);
list_del_rcu
(
&
rdev
->
list
);
wiphy_regulatory_deregister
(
wiphy
);
mutex_unlock
(
&
cfg80211_mutex
);
return
res
;
}
rtnl_lock
();
rdev
->
wiphy
.
registered
=
true
;
rtnl_unlock
();
return
0
;
out_rm_dev:
device_del
(
&
rdev
->
wiphy
.
dev
);
return
res
;
}
EXPORT_SYMBOL
(
wiphy_register
);
...
...
@@ -867,7 +871,6 @@ void cfg80211_leave(struct cfg80211_registered_device *rdev,
#endif
__cfg80211_disconnect
(
rdev
,
dev
,
WLAN_REASON_DEAUTH_LEAVING
,
true
);
cfg80211_mlme_down
(
rdev
,
dev
);
wdev_unlock
(
wdev
);
break
;
case
NL80211_IFTYPE_MESH_POINT
:
...
...
net/wireless/nl80211.c
浏览文件 @
dde7dc75
...
...
@@ -3438,7 +3438,7 @@ static int nl80211_send_station(struct sk_buff *msg, u32 portid, u32 seq,
(
u32
)
sinfo
->
rx_bytes
))
goto
nla_put_failure
;
if
((
sinfo
->
filled
&
(
STATION_INFO_TX_BYTES
|
NL80211_STA
_INFO_TX_BYTES64
))
&&
STATION
_INFO_TX_BYTES64
))
&&
nla_put_u32
(
msg
,
NL80211_STA_INFO_TX_BYTES
,
(
u32
)
sinfo
->
tx_bytes
))
goto
nla_put_failure
;
...
...
@@ -7630,6 +7630,8 @@ static int nl80211_send_wowlan_tcp(struct sk_buff *msg,
&
tcp
->
payload_tok
))
return
-
ENOBUFS
;
nla_nest_end
(
msg
,
nl_tcp
);
return
0
;
}
...
...
@@ -10023,6 +10025,7 @@ int nl80211_send_mgmt(struct cfg80211_registered_device *rdev,
if
(
nla_put_u32
(
msg
,
NL80211_ATTR_WIPHY
,
rdev
->
wiphy_idx
)
||
(
netdev
&&
nla_put_u32
(
msg
,
NL80211_ATTR_IFINDEX
,
netdev
->
ifindex
))
||
nla_put_u64
(
msg
,
NL80211_ATTR_WDEV
,
wdev_id
(
wdev
))
||
nla_put_u32
(
msg
,
NL80211_ATTR_WIPHY_FREQ
,
freq
)
||
(
sig_dbm
&&
nla_put_u32
(
msg
,
NL80211_ATTR_RX_SIGNAL_DBM
,
sig_dbm
))
||
...
...
@@ -10063,6 +10066,7 @@ void cfg80211_mgmt_tx_status(struct wireless_dev *wdev, u64 cookie,
if
(
nla_put_u32
(
msg
,
NL80211_ATTR_WIPHY
,
rdev
->
wiphy_idx
)
||
(
netdev
&&
nla_put_u32
(
msg
,
NL80211_ATTR_IFINDEX
,
netdev
->
ifindex
))
||
nla_put_u64
(
msg
,
NL80211_ATTR_WDEV
,
wdev_id
(
wdev
))
||
nla_put
(
msg
,
NL80211_ATTR_FRAME
,
len
,
buf
)
||
nla_put_u64
(
msg
,
NL80211_ATTR_COOKIE
,
cookie
)
||
(
ack
&&
nla_put_flag
(
msg
,
NL80211_ATTR_ACK
)))
...
...
net/wireless/sme.c
浏览文件 @
dde7dc75
...
...
@@ -231,6 +231,9 @@ void cfg80211_conn_work(struct work_struct *work)
mutex_lock
(
&
rdev
->
sched_scan_mtx
);
list_for_each_entry
(
wdev
,
&
rdev
->
wdev_list
,
list
)
{
if
(
!
wdev
->
netdev
)
continue
;
wdev_lock
(
wdev
);
if
(
!
netif_running
(
wdev
->
netdev
))
{
wdev_unlock
(
wdev
);
...
...
@@ -961,7 +964,7 @@ int __cfg80211_disconnect(struct cfg80211_registered_device *rdev,
/* was it connected by userspace SME? */
if
(
!
wdev
->
conn
)
{
cfg80211_mlme_down
(
rdev
,
dev
);
return
0
;
goto
disconnect
;
}
if
(
wdev
->
sme_state
==
CFG80211_SME_CONNECTING
&&
...
...
@@ -987,6 +990,7 @@ int __cfg80211_disconnect(struct cfg80211_registered_device *rdev,
return
err
;
}
disconnect:
if
(
wdev
->
sme_state
==
CFG80211_SME_CONNECTED
)
__cfg80211_disconnected
(
dev
,
NULL
,
0
,
0
,
false
);
else
if
(
wdev
->
sme_state
==
CFG80211_SME_CONNECTING
)
...
...
net/wireless/trace.h
浏览文件 @
dde7dc75
...
...
@@ -2441,6 +2441,7 @@ TRACE_EVENT(cfg80211_report_wowlan_wakeup,
TP_STRUCT__entry
(
WIPHY_ENTRY
WDEV_ENTRY
__field
(
bool
,
non_wireless
)
__field
(
bool
,
disconnect
)
__field
(
bool
,
magic_pkt
)
__field
(
bool
,
gtk_rekey_failure
)
...
...
@@ -2449,20 +2450,22 @@ TRACE_EVENT(cfg80211_report_wowlan_wakeup,
__field
(
bool
,
rfkill_release
)
__field
(
s32
,
pattern_idx
)
__field
(
u32
,
packet_len
)
__dynamic_array
(
u8
,
packet
,
wakeup
->
packet_present_len
)
__dynamic_array
(
u8
,
packet
,
wakeup
?
wakeup
->
packet_present_len
:
0
)
),
TP_fast_assign
(
WIPHY_ASSIGN
;
WDEV_ASSIGN
;
__entry
->
disconnect
=
wakeup
->
disconnect
;
__entry
->
magic_pkt
=
wakeup
->
magic_pkt
;
__entry
->
gtk_rekey_failure
=
wakeup
->
gtk_rekey_failure
;
__entry
->
eap_identity_req
=
wakeup
->
eap_identity_req
;
__entry
->
four_way_handshake
=
wakeup
->
four_way_handshake
;
__entry
->
rfkill_release
=
wakeup
->
rfkill_release
;
__entry
->
pattern_idx
=
wakeup
->
pattern_idx
;
__entry
->
packet_len
=
wakeup
->
packet_len
;
if
(
wakeup
->
packet
&&
wakeup
->
packet_present_len
)
__entry
->
non_wireless
=
!
wakeup
;
__entry
->
disconnect
=
wakeup
?
wakeup
->
disconnect
:
false
;
__entry
->
magic_pkt
=
wakeup
?
wakeup
->
magic_pkt
:
false
;
__entry
->
gtk_rekey_failure
=
wakeup
?
wakeup
->
gtk_rekey_failure
:
false
;
__entry
->
eap_identity_req
=
wakeup
?
wakeup
->
eap_identity_req
:
false
;
__entry
->
four_way_handshake
=
wakeup
?
wakeup
->
four_way_handshake
:
false
;
__entry
->
rfkill_release
=
wakeup
?
wakeup
->
rfkill_release
:
false
;
__entry
->
pattern_idx
=
wakeup
?
wakeup
->
pattern_idx
:
false
;
__entry
->
packet_len
=
wakeup
?
wakeup
->
packet_len
:
false
;
if
(
wakeup
&&
wakeup
->
packet
&&
wakeup
->
packet_present_len
)
memcpy
(
__get_dynamic_array
(
packet
),
wakeup
->
packet
,
wakeup
->
packet_present_len
);
),
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录