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
nexedi
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