Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
09e1a79a
Commit
09e1a79a
authored
May 27, 2013
by
Johannes Berg
Browse files
Options
Browse Files
Download
Plain Diff
Merge remote-tracking branch 'iwlwifi-fixes/master' into HEAD
Conflicts: drivers/net/wireless/iwlwifi/mvm/ops.c
parents
071d4990
a8778369
Changes
21
Hide whitespace changes
Inline
Side-by-side
Showing
21 changed files
with
237 additions
and
140 deletions
+237
-140
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/dvm/sta.c
drivers/net/wireless/iwlwifi/dvm/sta.c
+1
-1
drivers/net/wireless/iwlwifi/mvm/fw-api.h
drivers/net/wireless/iwlwifi/mvm/fw-api.h
+27
-0
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
+8
-4
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mac80211.c
+16
-1
drivers/net/wireless/iwlwifi/mvm/mvm.h
drivers/net/wireless/iwlwifi/mvm/mvm.h
+1
-0
drivers/net/wireless/iwlwifi/mvm/ops.c
drivers/net/wireless/iwlwifi/mvm/ops.c
+1
-0
drivers/net/wireless/iwlwifi/mvm/scan.c
drivers/net/wireless/iwlwifi/mvm/scan.c
+6
-0
drivers/net/wireless/iwlwifi/mvm/sta.c
drivers/net/wireless/iwlwifi/mvm/sta.c
+10
-3
drivers/net/wireless/iwlwifi/mvm/sta.h
drivers/net/wireless/iwlwifi/mvm/sta.h
+0
-2
drivers/net/wireless/iwlwifi/mvm/tx.c
drivers/net/wireless/iwlwifi/mvm/tx.c
+36
-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
No files found.
drivers/net/wireless/ath/ath5k/base.c
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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/dvm/sta.c
View file @
09e1a79a
...
...
@@ -735,7 +735,7 @@ void iwl_restore_stations(struct iwl_priv *priv, struct iwl_rxon_context *ctx)
memcpy
(
&
lq
,
priv
->
stations
[
i
].
lq
,
sizeof
(
struct
iwl_link_quality_cmd
));
if
(
!
memcmp
(
&
lq
,
&
zero_lq
,
sizeof
(
lq
)))
if
(
memcmp
(
&
lq
,
&
zero_lq
,
sizeof
(
lq
)))
send_lq
=
true
;
}
spin_unlock_bh
(
&
priv
->
sta_lock
);
...
...
drivers/net/wireless/iwlwifi/mvm/fw-api.h
View file @
09e1a79a
...
...
@@ -175,6 +175,8 @@ enum {
REPLY_DEBUG_CMD
=
0xf0
,
DEBUG_LOG_MSG
=
0xf7
,
MCAST_FILTER_CMD
=
0xd0
,
/* D3 commands/notifications */
D3_CONFIG_CMD
=
0xd3
,
PROT_OFFLOAD_CONFIG_CMD
=
0xd4
,
...
...
@@ -950,4 +952,29 @@ struct iwl_set_calib_default_cmd {
u8
data
[
0
];
}
__packed
;
/* PHY_CALIB_OVERRIDE_VALUES_S */
#define MAX_PORT_ID_NUM 2
/**
* struct iwl_mcast_filter_cmd - configure multicast filter.
* @filter_own: Set 1 to filter out multicast packets sent by station itself
* @port_id: Multicast MAC addresses array specifier. This is a strange way
* to identify network interface adopted in host-device IF.
* It is used by FW as index in array of addresses. This array has
* MAX_PORT_ID_NUM members.
* @count: Number of MAC addresses in the array
* @pass_all: Set 1 to pass all multicast packets.
* @bssid: current association BSSID.
* @addr_list: Place holder for array of MAC addresses.
* IMPORTANT: add padding if necessary to ensure DWORD alignment.
*/
struct
iwl_mcast_filter_cmd
{
u8
filter_own
;
u8
port_id
;
u8
count
;
u8
pass_all
;
u8
bssid
[
6
];
u8
reserved
[
2
];
u8
addr_list
[
0
];
}
__packed
;
/* MCAST_FILTERING_CMD_API_S_VER_1 */
#endif
/* __fw_api_h__ */
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
View file @
09e1a79a
...
...
@@ -586,10 +586,12 @@ static int iwl_mvm_mac_ctxt_send_cmd(struct iwl_mvm *mvm,
*/
static
void
iwl_mvm_mac_ctxt_cmd_fill_sta
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
struct
iwl_mac_data_sta
*
ctxt_sta
)
struct
iwl_mac_data_sta
*
ctxt_sta
,
bool
force_assoc_off
)
{
/* We need the dtim_period to set the MAC as associated */
if
(
vif
->
bss_conf
.
assoc
&&
vif
->
bss_conf
.
dtim_period
)
{
if
(
vif
->
bss_conf
.
assoc
&&
vif
->
bss_conf
.
dtim_period
&&
!
force_assoc_off
)
{
u32
dtim_offs
;
/*
...
...
@@ -659,7 +661,8 @@ static int iwl_mvm_mac_ctxt_cmd_station(struct iwl_mvm *mvm,
cmd
.
filter_flags
&=
~
cpu_to_le32
(
MAC_FILTER_IN_BEACON
);
/* Fill the data specific for station mode */
iwl_mvm_mac_ctxt_cmd_fill_sta
(
mvm
,
vif
,
&
cmd
.
sta
);
iwl_mvm_mac_ctxt_cmd_fill_sta
(
mvm
,
vif
,
&
cmd
.
sta
,
action
==
FW_CTXT_ACTION_ADD
);
return
iwl_mvm_mac_ctxt_send_cmd
(
mvm
,
&
cmd
);
}
...
...
@@ -677,7 +680,8 @@ static int iwl_mvm_mac_ctxt_cmd_p2p_client(struct iwl_mvm *mvm,
iwl_mvm_mac_ctxt_cmd_common
(
mvm
,
vif
,
&
cmd
,
action
);
/* Fill the data specific for station mode */
iwl_mvm_mac_ctxt_cmd_fill_sta
(
mvm
,
vif
,
&
cmd
.
p2p_sta
.
sta
);
iwl_mvm_mac_ctxt_cmd_fill_sta
(
mvm
,
vif
,
&
cmd
.
p2p_sta
.
sta
,
action
==
FW_CTXT_ACTION_ADD
);
cmd
.
p2p_sta
.
ctwin
=
cpu_to_le32
(
noa
->
oppps_ctwindow
&
IEEE80211_P2P_OPPPS_CTWINDOW_MASK
);
...
...
drivers/net/wireless/iwlwifi/mvm/mac80211.c
View file @
09e1a79a
...
...
@@ -737,6 +737,20 @@ static void iwl_mvm_configure_filter(struct ieee80211_hw *hw,
*
total_flags
=
0
;
}
static
int
iwl_mvm_configure_mcast_filter
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
)
{
struct
iwl_mcast_filter_cmd
mcast_filter_cmd
=
{
.
pass_all
=
1
,
};
memcpy
(
mcast_filter_cmd
.
bssid
,
vif
->
bss_conf
.
bssid
,
ETH_ALEN
);
return
iwl_mvm_send_cmd_pdu
(
mvm
,
MCAST_FILTER_CMD
,
CMD_SYNC
,
sizeof
(
mcast_filter_cmd
),
&
mcast_filter_cmd
);
}
static
void
iwl_mvm_bss_info_changed_station
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
struct
ieee80211_bss_conf
*
bss_conf
,
...
...
@@ -758,6 +772,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
return
;
}
iwl_mvm_bt_coex_vif_assoc
(
mvm
,
vif
);
iwl_mvm_configure_mcast_filter
(
mvm
,
vif
);
}
else
if
(
mvmvif
->
ap_sta_id
!=
IWL_MVM_STATION_COUNT
)
{
/* remove AP station now that the MAC is unassoc */
ret
=
iwl_mvm_rm_sta_id
(
mvm
,
vif
,
mvmvif
->
ap_sta_id
);
...
...
@@ -967,7 +982,7 @@ static void iwl_mvm_mac_sta_notify(struct ieee80211_hw *hw,
switch
(
cmd
)
{
case
STA_NOTIFY_SLEEP
:
if
(
atomic_read
(
&
mvm
sta
->
pending_frames
)
>
0
)
if
(
atomic_read
(
&
mvm
->
pending_frames
[
mvmsta
->
sta_id
]
)
>
0
)
ieee80211_sta_block_awake
(
hw
,
sta
,
true
);
/*
* The fw updates the STA to be asleep. Tx packets on the Tx
...
...
drivers/net/wireless/iwlwifi/mvm/mvm.h
View file @
09e1a79a
...
...
@@ -301,6 +301,7 @@ struct iwl_mvm {
struct
ieee80211_sta
__rcu
*
fw_id_to_mac_id
[
IWL_MVM_STATION_COUNT
];
struct
work_struct
sta_drained_wk
;
unsigned
long
sta_drained
[
BITS_TO_LONGS
(
IWL_MVM_STATION_COUNT
)];
atomic_t
pending_frames
[
IWL_MVM_STATION_COUNT
];
/* configured by mac80211 */
u32
rts_threshold
;
...
...
drivers/net/wireless/iwlwifi/mvm/ops.c
View file @
09e1a79a
...
...
@@ -292,6 +292,7 @@ static const char *iwl_mvm_cmd_strings[REPLY_MAX] = {
CMD
(
BT_COEX_PROT_ENV
),
CMD
(
BT_PROFILE_NOTIFICATION
),
CMD
(
BT_CONFIG
),
CMD
(
MCAST_FILTER_CMD
),
CMD
(
REPLY_BEACON_FILTERING_CMD
),
};
#undef CMD
...
...
drivers/net/wireless/iwlwifi/mvm/scan.c
View file @
09e1a79a
...
...
@@ -298,6 +298,12 @@ int iwl_mvm_scan_request(struct iwl_mvm *mvm,
else
cmd
->
type
=
cpu_to_le32
(
SCAN_TYPE_FORCED
);
/*
* TODO: This is a WA due to a bug in the FW AUX framework that does not
* properly handle time events that fail to be scheduled
*/
cmd
->
type
=
cpu_to_le32
(
SCAN_TYPE_FORCED
);
cmd
->
repeats
=
cpu_to_le32
(
1
);
/*
...
...
drivers/net/wireless/iwlwifi/mvm/sta.c
View file @
09e1a79a
...
...
@@ -219,7 +219,7 @@ int iwl_mvm_add_sta(struct iwl_mvm *mvm,
mvm_sta
->
max_agg_bufsize
=
LINK_QUAL_AGG_FRAME_LIMIT_DEF
;
/* HW restart, don't assume the memory has been zeroed */
atomic_set
(
&
mvm
_sta
->
pending_frames
,
0
);
atomic_set
(
&
mvm
->
pending_frames
[
sta_id
]
,
0
);
mvm_sta
->
tid_disable_agg
=
0
;
mvm_sta
->
tfd_queue_msk
=
0
;
for
(
i
=
0
;
i
<
IEEE80211_NUM_ACS
;
i
++
)
...
...
@@ -406,15 +406,22 @@ int iwl_mvm_rm_sta(struct iwl_mvm *mvm,
mvmvif
->
ap_sta_id
=
IWL_MVM_STATION_COUNT
;
}
/*
* Make sure that the tx response code sees the station as -EBUSY and
* calls the drain worker.
*/
spin_lock_bh
(
&
mvm_sta
->
lock
);
/*
* There are frames pending on the AC queues for this station.
* We need to wait until all the frames are drained...
*/
if
(
atomic_read
(
&
mvm_sta
->
pending_frames
))
{
ret
=
iwl_mvm_drain_sta
(
mvm
,
mvm_sta
,
true
);
if
(
atomic_read
(
&
mvm
->
pending_frames
[
mvm_sta
->
sta_id
]))
{
rcu_assign_pointer
(
mvm
->
fw_id_to_mac_id
[
mvm_sta
->
sta_id
],
ERR_PTR
(
-
EBUSY
));
spin_unlock_bh
(
&
mvm_sta
->
lock
);
ret
=
iwl_mvm_drain_sta
(
mvm
,
mvm_sta
,
true
);
}
else
{
spin_unlock_bh
(
&
mvm_sta
->
lock
);
ret
=
iwl_mvm_rm_sta_common
(
mvm
,
mvm_sta
->
sta_id
);
rcu_assign_pointer
(
mvm
->
fw_id_to_mac_id
[
mvm_sta
->
sta_id
],
NULL
);
}
...
...
drivers/net/wireless/iwlwifi/mvm/sta.h
View file @
09e1a79a
...
...
@@ -274,7 +274,6 @@ struct iwl_mvm_tid_data {
* @bt_reduced_txpower: is reduced tx power enabled for this station
* @lock: lock to protect the whole struct. Since %tid_data is access from Tx
* and from Tx response flow, it needs a spinlock.
* @pending_frames: number of frames for this STA on the shared Tx queues.
* @tid_data: per tid data. Look at %iwl_mvm_tid_data.
*
* When mac80211 creates a station it reserves some space (hw->sta_data_size)
...
...
@@ -290,7 +289,6 @@ struct iwl_mvm_sta {
u8
max_agg_bufsize
;
bool
bt_reduced_txpower
;
spinlock_t
lock
;
atomic_t
pending_frames
;
struct
iwl_mvm_tid_data
tid_data
[
IWL_MAX_TID_COUNT
];
struct
iwl_lq_sta
lq_sta
;
struct
ieee80211_vif
*
vif
;
...
...
drivers/net/wireless/iwlwifi/mvm/tx.c
View file @
09e1a79a
...
...
@@ -416,9 +416,8 @@ int iwl_mvm_tx_skb(struct iwl_mvm *mvm, struct sk_buff *skb,
spin_unlock
(
&
mvmsta
->
lock
);
if
(
mvmsta
->
vif
->
type
==
NL80211_IFTYPE_AP
&&
txq_id
<
IWL_MVM_FIRST_AGG_QUEUE
)
atomic_inc
(
&
mvmsta
->
pending_frames
);
if
(
txq_id
<
IWL_MVM_FIRST_AGG_QUEUE
)
atomic_inc
(
&
mvm
->
pending_frames
[
mvmsta
->
sta_id
]);
return
0
;
...
...
@@ -680,16 +679,41 @@ static void iwl_mvm_rx_tx_cmd_single(struct iwl_mvm *mvm,
/*
* If the txq is not an AMPDU queue, there is no chance we freed
* several skbs. Check that out...
* If there are no pending frames for this STA, notify mac80211 that
* this station can go to sleep in its STA table.
*/
if
(
txq_id
<
IWL_MVM_FIRST_AGG_QUEUE
&&
mvmsta
&&
!
WARN_ON
(
skb_freed
>
1
)
&&
mvmsta
->
vif
->
type
==
NL80211_IFTYPE_AP
&&
atomic_sub_and_test
(
skb_freed
,
&
mvmsta
->
pending_frames
))
{
ieee80211_sta_block_awake
(
mvm
->
hw
,
sta
,
false
);
set_bit
(
sta_id
,
mvm
->
sta_drained
);
schedule_work
(
&
mvm
->
sta_drained_wk
);
if
(
txq_id
<
IWL_MVM_FIRST_AGG_QUEUE
&&
!
WARN_ON
(
skb_freed
>
1
)
&&
atomic_sub_and_test
(
skb_freed
,
&
mvm
->
pending_frames
[
sta_id
]))
{
if
(
mvmsta
)
{
/*
* If there are no pending frames for this STA, notify
* mac80211 that this station can go to sleep in its
* STA table.
*/
if
(
mvmsta
->
vif
->
type
==
NL80211_IFTYPE_AP
)
ieee80211_sta_block_awake
(
mvm
->
hw
,
sta
,
false
);
/*
* We might very well have taken mvmsta pointer while
* the station was being removed. The remove flow might
* have seen a pending_frame (because we didn't take
* the lock) even if now the queues are drained. So make
* really sure now that this the station is not being
* removed. If it is, run the drain worker to remove it.
*/
spin_lock_bh
(
&
mvmsta
->
lock
);
sta
=
rcu_dereference
(
mvm
->
fw_id_to_mac_id
[
sta_id
]);
if
(
IS_ERR_OR_NULL
(
sta
))
{
/*
* Station disappeared in the meantime:
* so we are draining.
*/
set_bit
(
sta_id
,
mvm
->
sta_drained
);
schedule_work
(
&
mvm
->
sta_drained_wk
);
}
spin_unlock_bh
(
&
mvmsta
->
lock
);
}
else
if
(
!
mvmsta
)
{
/* Tx response without STA, so we are draining */
set_bit
(
sta_id
,
mvm
->
sta_drained
);
schedule_work
(
&
mvm
->
sta_drained_wk
);
}
}
rcu_read_unlock
();
...
...
drivers/net/wireless/mwifiex/cfg80211.c
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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
View file @
09e1a79a
...
...
@@ -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
);
}
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment