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
b88bb291
Commit
b88bb291
authored
May 22, 2014
by
John W. Linville
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-john' of
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
parents
40a10fd7
999609f1
Changes
10
Hide whitespace changes
Inline
Side-by-side
Showing
10 changed files
with
158 additions
and
191 deletions
+158
-191
drivers/net/wireless/iwlwifi/mvm/coex.c
drivers/net/wireless/iwlwifi/mvm/coex.c
+8
-4
drivers/net/wireless/iwlwifi/mvm/d3.c
drivers/net/wireless/iwlwifi/mvm/d3.c
+3
-5
drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c
drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c
+3
-41
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
+13
-13
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mac80211.c
+22
-20
drivers/net/wireless/iwlwifi/mvm/mvm.h
drivers/net/wireless/iwlwifi/mvm/mvm.h
+4
-10
drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c
drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c
+1
-2
drivers/net/wireless/iwlwifi/mvm/power.c
drivers/net/wireless/iwlwifi/mvm/power.c
+70
-92
drivers/net/wireless/iwlwifi/mvm/sta.h
drivers/net/wireless/iwlwifi/mvm/sta.h
+0
-3
drivers/net/wireless/iwlwifi/mvm/utils.c
drivers/net/wireless/iwlwifi/mvm/utils.c
+34
-1
No files found.
drivers/net/wireless/iwlwifi/mvm/coex.c
View file @
b88bb291
...
@@ -715,7 +715,8 @@ static int iwl_mvm_bt_udpate_ctrl_kill_msk(struct iwl_mvm *mvm,
...
@@ -715,7 +715,8 @@ static int iwl_mvm_bt_udpate_ctrl_kill_msk(struct iwl_mvm *mvm,
return
ret
;
return
ret
;
}
}
int
iwl_mvm_bt_coex_reduced_txp
(
struct
iwl_mvm
*
mvm
,
u8
sta_id
,
bool
enable
)
static
int
iwl_mvm_bt_coex_reduced_txp
(
struct
iwl_mvm
*
mvm
,
u8
sta_id
,
bool
enable
)
{
{
struct
iwl_bt_coex_cmd
*
bt_cmd
;
struct
iwl_bt_coex_cmd
*
bt_cmd
;
/* Send ASYNC since this can be sent from an atomic context */
/* Send ASYNC since this can be sent from an atomic context */
...
@@ -733,8 +734,7 @@ int iwl_mvm_bt_coex_reduced_txp(struct iwl_mvm *mvm, u8 sta_id, bool enable)
...
@@ -733,8 +734,7 @@ int iwl_mvm_bt_coex_reduced_txp(struct iwl_mvm *mvm, u8 sta_id, bool enable)
return
0
;
return
0
;
/* nothing to do */
/* nothing to do */
if
(
mvmsta
->
bt_reduced_txpower_dbg
||
if
(
mvmsta
->
bt_reduced_txpower
==
enable
)
mvmsta
->
bt_reduced_txpower
==
enable
)
return
0
;
return
0
;
bt_cmd
=
kzalloc
(
sizeof
(
*
bt_cmd
),
GFP_ATOMIC
);
bt_cmd
=
kzalloc
(
sizeof
(
*
bt_cmd
),
GFP_ATOMIC
);
...
@@ -831,8 +831,11 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
...
@@ -831,8 +831,11 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
iwl_mvm_update_smps
(
mvm
,
vif
,
IWL_MVM_SMPS_REQ_BT_COEX
,
iwl_mvm_update_smps
(
mvm
,
vif
,
IWL_MVM_SMPS_REQ_BT_COEX
,
smps_mode
);
smps_mode
);
data
->
reduced_tx_power
=
false
;
data
->
reduced_tx_power
=
false
;
if
(
vif
->
type
==
NL80211_IFTYPE_STATION
)
if
(
vif
->
type
==
NL80211_IFTYPE_STATION
)
{
iwl_mvm_bt_coex_reduced_txp
(
mvm
,
mvmvif
->
ap_sta_id
,
false
);
iwl_mvm_bt_coex_enable_rssi_event
(
mvm
,
vif
,
false
,
0
);
iwl_mvm_bt_coex_enable_rssi_event
(
mvm
,
vif
,
false
,
0
);
}
return
;
return
;
}
}
...
@@ -905,6 +908,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
...
@@ -905,6 +908,7 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
mvm
->
cfg
->
bt_shared_single_ant
||
!
vif
->
bss_conf
.
assoc
||
mvm
->
cfg
->
bt_shared_single_ant
||
!
vif
->
bss_conf
.
assoc
||
!
data
->
notif
->
bt_status
)
{
!
data
->
notif
->
bt_status
)
{
data
->
reduced_tx_power
=
false
;
data
->
reduced_tx_power
=
false
;
iwl_mvm_bt_coex_reduced_txp
(
mvm
,
mvmvif
->
ap_sta_id
,
false
);
iwl_mvm_bt_coex_enable_rssi_event
(
mvm
,
vif
,
false
,
0
);
iwl_mvm_bt_coex_enable_rssi_event
(
mvm
,
vif
,
false
,
0
);
return
;
return
;
}
}
...
...
drivers/net/wireless/iwlwifi/mvm/d3.c
View file @
b88bb291
...
@@ -663,10 +663,8 @@ static int iwl_mvm_d3_reprogram(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
...
@@ -663,10 +663,8 @@ static int iwl_mvm_d3_reprogram(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
if
(
WARN_ON
(
!
vif
->
bss_conf
.
assoc
))
if
(
WARN_ON
(
!
vif
->
bss_conf
.
assoc
))
return
-
EINVAL
;
return
-
EINVAL
;
/* hack */
vif
->
bss_conf
.
assoc
=
false
;
ret
=
iwl_mvm_mac_ctxt_add
(
mvm
,
vif
);
ret
=
iwl_mvm_mac_ctxt_add
(
mvm
,
vif
);
vif
->
bss_conf
.
assoc
=
true
;
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
...
@@ -702,7 +700,7 @@ static int iwl_mvm_d3_reprogram(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
...
@@ -702,7 +700,7 @@ static int iwl_mvm_d3_reprogram(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
return
ret
;
return
ret
;
rcu_assign_pointer
(
mvm
->
fw_id_to_mac_id
[
mvmvif
->
ap_sta_id
],
ap_sta
);
rcu_assign_pointer
(
mvm
->
fw_id_to_mac_id
[
mvmvif
->
ap_sta_id
],
ap_sta
);
ret
=
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
);
ret
=
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
,
false
);
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
...
@@ -1030,7 +1028,7 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
...
@@ -1030,7 +1028,7 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
if
(
ret
)
if
(
ret
)
goto
out
;
goto
out
;
ret
=
iwl_mvm_power_update_mac
(
mvm
,
vif
);
ret
=
iwl_mvm_power_update_mac
(
mvm
);
if
(
ret
)
if
(
ret
)
goto
out
;
goto
out
;
...
...
drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c
View file @
b88bb291
...
@@ -175,7 +175,7 @@ static ssize_t iwl_dbgfs_pm_params_write(struct ieee80211_vif *vif, char *buf,
...
@@ -175,7 +175,7 @@ static ssize_t iwl_dbgfs_pm_params_write(struct ieee80211_vif *vif, char *buf,
mutex_lock
(
&
mvm
->
mutex
);
mutex_lock
(
&
mvm
->
mutex
);
iwl_dbgfs_update_pm
(
mvm
,
vif
,
param
,
val
);
iwl_dbgfs_update_pm
(
mvm
,
vif
,
param
,
val
);
ret
=
iwl_mvm_power_update_mac
(
mvm
,
vif
);
ret
=
iwl_mvm_power_update_mac
(
mvm
);
mutex_unlock
(
&
mvm
->
mutex
);
mutex_unlock
(
&
mvm
->
mutex
);
return
ret
?:
count
;
return
ret
?:
count
;
...
@@ -262,10 +262,9 @@ static ssize_t iwl_dbgfs_mac_params_read(struct file *file,
...
@@ -262,10 +262,9 @@ static ssize_t iwl_dbgfs_mac_params_read(struct file *file,
struct
iwl_mvm_sta
*
mvm_sta
=
(
void
*
)
sta
->
drv_priv
;
struct
iwl_mvm_sta
*
mvm_sta
=
(
void
*
)
sta
->
drv_priv
;
pos
+=
scnprintf
(
buf
+
pos
,
bufsz
-
pos
,
pos
+=
scnprintf
(
buf
+
pos
,
bufsz
-
pos
,
"ap_sta_id %d - reduced Tx power %d
force %d
\n
"
,
"ap_sta_id %d - reduced Tx power %d
\n
"
,
ap_sta_id
,
ap_sta_id
,
mvm_sta
->
bt_reduced_txpower
,
mvm_sta
->
bt_reduced_txpower
);
mvm_sta
->
bt_reduced_txpower_dbg
);
}
}
}
}
...
@@ -283,41 +282,6 @@ static ssize_t iwl_dbgfs_mac_params_read(struct file *file,
...
@@ -283,41 +282,6 @@ static ssize_t iwl_dbgfs_mac_params_read(struct file *file,
return
simple_read_from_buffer
(
user_buf
,
count
,
ppos
,
buf
,
pos
);
return
simple_read_from_buffer
(
user_buf
,
count
,
ppos
,
buf
,
pos
);
}
}
static
ssize_t
iwl_dbgfs_reduced_txp_write
(
struct
ieee80211_vif
*
vif
,
char
*
buf
,
size_t
count
,
loff_t
*
ppos
)
{
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
struct
iwl_mvm
*
mvm
=
mvmvif
->
mvm
;
struct
iwl_mvm_sta
*
mvmsta
;
bool
reduced_tx_power
;
int
ret
;
if
(
mvmvif
->
ap_sta_id
>=
ARRAY_SIZE
(
mvm
->
fw_id_to_mac_id
))
return
-
ENOTCONN
;
if
(
strtobool
(
buf
,
&
reduced_tx_power
)
!=
0
)
return
-
EINVAL
;
mutex_lock
(
&
mvm
->
mutex
);
mvmsta
=
iwl_mvm_sta_from_staid_protected
(
mvm
,
mvmvif
->
ap_sta_id
);
if
(
IS_ERR_OR_NULL
(
mvmsta
))
{
mutex_unlock
(
&
mvm
->
mutex
);
return
-
ENOTCONN
;
}
mvmsta
->
bt_reduced_txpower_dbg
=
false
;
ret
=
iwl_mvm_bt_coex_reduced_txp
(
mvm
,
mvmvif
->
ap_sta_id
,
reduced_tx_power
);
if
(
!
ret
)
mvmsta
->
bt_reduced_txpower_dbg
=
true
;
mutex_unlock
(
&
mvm
->
mutex
);
return
ret
?
:
count
;
}
static
void
iwl_dbgfs_update_bf
(
struct
ieee80211_vif
*
vif
,
static
void
iwl_dbgfs_update_bf
(
struct
ieee80211_vif
*
vif
,
enum
iwl_dbgfs_bf_mask
param
,
int
value
)
enum
iwl_dbgfs_bf_mask
param
,
int
value
)
{
{
...
@@ -558,7 +522,6 @@ MVM_DEBUGFS_READ_FILE_OPS(mac_params);
...
@@ -558,7 +522,6 @@ MVM_DEBUGFS_READ_FILE_OPS(mac_params);
MVM_DEBUGFS_READ_WRITE_FILE_OPS
(
pm_params
,
32
);
MVM_DEBUGFS_READ_WRITE_FILE_OPS
(
pm_params
,
32
);
MVM_DEBUGFS_READ_WRITE_FILE_OPS
(
bf_params
,
256
);
MVM_DEBUGFS_READ_WRITE_FILE_OPS
(
bf_params
,
256
);
MVM_DEBUGFS_READ_WRITE_FILE_OPS
(
low_latency
,
10
);
MVM_DEBUGFS_READ_WRITE_FILE_OPS
(
low_latency
,
10
);
MVM_DEBUGFS_WRITE_FILE_OPS
(
reduced_txp
,
10
);
void
iwl_mvm_vif_dbgfs_register
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
)
void
iwl_mvm_vif_dbgfs_register
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
)
{
{
...
@@ -590,7 +553,6 @@ void iwl_mvm_vif_dbgfs_register(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
...
@@ -590,7 +553,6 @@ void iwl_mvm_vif_dbgfs_register(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
S_IRUSR
);
S_IRUSR
);
MVM_DEBUGFS_ADD_FILE_VIF
(
mac_params
,
mvmvif
->
dbgfs_dir
,
S_IRUSR
);
MVM_DEBUGFS_ADD_FILE_VIF
(
mac_params
,
mvmvif
->
dbgfs_dir
,
S_IRUSR
);
MVM_DEBUGFS_ADD_FILE_VIF
(
reduced_txp
,
mvmvif
->
dbgfs_dir
,
S_IWUSR
);
MVM_DEBUGFS_ADD_FILE_VIF
(
low_latency
,
mvmvif
->
dbgfs_dir
,
MVM_DEBUGFS_ADD_FILE_VIF
(
low_latency
,
mvmvif
->
dbgfs_dir
,
S_IRUSR
|
S_IWUSR
);
S_IRUSR
|
S_IWUSR
);
...
...
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
View file @
b88bb291
...
@@ -713,14 +713,6 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
...
@@ -713,14 +713,6 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
IEEE80211_P2P_OPPPS_CTWINDOW_MASK
);
IEEE80211_P2P_OPPPS_CTWINDOW_MASK
);
ctxt_sta
=
&
cmd
.
p2p_sta
.
sta
;
ctxt_sta
=
&
cmd
.
p2p_sta
.
sta
;
}
else
{
}
else
{
/* Allow beacons to pass through as long as we are not
* associated, or we do not have dtim period information.
*/
if
(
!
vif
->
bss_conf
.
assoc
||
!
vif
->
bss_conf
.
dtim_period
)
cmd
.
filter_flags
|=
cpu_to_le32
(
MAC_FILTER_IN_BEACON
);
else
cmd
.
filter_flags
&=
~
cpu_to_le32
(
MAC_FILTER_IN_BEACON
);
ctxt_sta
=
&
cmd
.
sta
;
ctxt_sta
=
&
cmd
.
sta
;
}
}
...
@@ -729,6 +721,11 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
...
@@ -729,6 +721,11 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
!
force_assoc_off
)
{
!
force_assoc_off
)
{
u32
dtim_offs
;
u32
dtim_offs
;
/* Allow beacons to pass through as long as we are not
* associated, or we do not have dtim period information.
*/
cmd
.
filter_flags
|=
cpu_to_le32
(
MAC_FILTER_IN_BEACON
);
/*
/*
* The DTIM count counts down, so when it is N that means N
* The DTIM count counts down, so when it is N that means N
* more beacon intervals happen until the DTIM TBTT. Therefore
* more beacon intervals happen until the DTIM TBTT. Therefore
...
@@ -1112,12 +1109,12 @@ static int iwl_mvm_mac_ctxt_cmd_go(struct iwl_mvm *mvm,
...
@@ -1112,12 +1109,12 @@ static int iwl_mvm_mac_ctxt_cmd_go(struct iwl_mvm *mvm,
}
}
static
int
iwl_mvm_mac_ctx_send
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
static
int
iwl_mvm_mac_ctx_send
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
u32
action
)
u32
action
,
bool
force_assoc_off
)
{
{
switch
(
vif
->
type
)
{
switch
(
vif
->
type
)
{
case
NL80211_IFTYPE_STATION
:
case
NL80211_IFTYPE_STATION
:
return
iwl_mvm_mac_ctxt_cmd_sta
(
mvm
,
vif
,
action
,
return
iwl_mvm_mac_ctxt_cmd_sta
(
mvm
,
vif
,
action
,
action
==
FW_CTXT_ACTION_ADD
);
force_assoc_off
);
break
;
break
;
case
NL80211_IFTYPE_AP
:
case
NL80211_IFTYPE_AP
:
if
(
!
vif
->
p2p
)
if
(
!
vif
->
p2p
)
...
@@ -1147,7 +1144,8 @@ int iwl_mvm_mac_ctxt_add(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
...
@@ -1147,7 +1144,8 @@ int iwl_mvm_mac_ctxt_add(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
vif
->
addr
,
ieee80211_vif_type_p2p
(
vif
)))
vif
->
addr
,
ieee80211_vif_type_p2p
(
vif
)))
return
-
EIO
;
return
-
EIO
;
ret
=
iwl_mvm_mac_ctx_send
(
mvm
,
vif
,
FW_CTXT_ACTION_ADD
);
ret
=
iwl_mvm_mac_ctx_send
(
mvm
,
vif
,
FW_CTXT_ACTION_ADD
,
true
);
if
(
ret
)
if
(
ret
)
return
ret
;
return
ret
;
...
@@ -1158,7 +1156,8 @@ int iwl_mvm_mac_ctxt_add(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
...
@@ -1158,7 +1156,8 @@ int iwl_mvm_mac_ctxt_add(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
return
0
;
return
0
;
}
}
int
iwl_mvm_mac_ctxt_changed
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
)
int
iwl_mvm_mac_ctxt_changed
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
bool
force_assoc_off
)
{
{
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
...
@@ -1166,7 +1165,8 @@ int iwl_mvm_mac_ctxt_changed(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
...
@@ -1166,7 +1165,8 @@ int iwl_mvm_mac_ctxt_changed(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
vif
->
addr
,
ieee80211_vif_type_p2p
(
vif
)))
vif
->
addr
,
ieee80211_vif_type_p2p
(
vif
)))
return
-
EIO
;
return
-
EIO
;
return
iwl_mvm_mac_ctx_send
(
mvm
,
vif
,
FW_CTXT_ACTION_MODIFY
);
return
iwl_mvm_mac_ctx_send
(
mvm
,
vif
,
FW_CTXT_ACTION_MODIFY
,
force_assoc_off
);
}
}
int
iwl_mvm_mac_ctxt_remove
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
)
int
iwl_mvm_mac_ctxt_remove
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
)
...
...
drivers/net/wireless/iwlwifi/mvm/mac80211.c
View file @
b88bb291
...
@@ -832,7 +832,7 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,
...
@@ -832,7 +832,7 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,
if
(
ret
)
if
(
ret
)
goto
out_release
;
goto
out_release
;
ret
=
iwl_mvm_power_update_mac
(
mvm
,
vif
);
ret
=
iwl_mvm_power_update_mac
(
mvm
);
if
(
ret
)
if
(
ret
)
goto
out_release
;
goto
out_release
;
...
@@ -983,7 +983,7 @@ static void iwl_mvm_mac_remove_interface(struct ieee80211_hw *hw,
...
@@ -983,7 +983,7 @@ static void iwl_mvm_mac_remove_interface(struct ieee80211_hw *hw,
if
(
mvm
->
vif_count
&&
vif
->
type
!=
NL80211_IFTYPE_P2P_DEVICE
)
if
(
mvm
->
vif_count
&&
vif
->
type
!=
NL80211_IFTYPE_P2P_DEVICE
)
mvm
->
vif_count
--
;
mvm
->
vif_count
--
;
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
iwl_mvm_mac_ctxt_remove
(
mvm
,
vif
);
iwl_mvm_mac_ctxt_remove
(
mvm
,
vif
);
out_release:
out_release:
...
@@ -1271,7 +1271,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
...
@@ -1271,7 +1271,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
if
(
changes
&
BSS_CHANGED_ASSOC
&&
bss_conf
->
assoc
)
if
(
changes
&
BSS_CHANGED_ASSOC
&&
bss_conf
->
assoc
)
iwl_mvm_mac_ctxt_recalc_tsf_id
(
mvm
,
vif
);
iwl_mvm_mac_ctxt_recalc_tsf_id
(
mvm
,
vif
);
ret
=
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
);
ret
=
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
,
false
);
if
(
ret
)
if
(
ret
)
IWL_ERR
(
mvm
,
"failed to update MAC %pM
\n
"
,
vif
->
addr
);
IWL_ERR
(
mvm
,
"failed to update MAC %pM
\n
"
,
vif
->
addr
);
...
@@ -1354,7 +1354,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
...
@@ -1354,7 +1354,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
WARN_ON
(
iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
0
));
WARN_ON
(
iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
0
));
}
else
if
(
changes
&
(
BSS_CHANGED_PS
|
BSS_CHANGED_P2P_PS
|
}
else
if
(
changes
&
(
BSS_CHANGED_PS
|
BSS_CHANGED_P2P_PS
|
BSS_CHANGED_QOS
))
{
BSS_CHANGED_QOS
))
{
ret
=
iwl_mvm_power_update_mac
(
mvm
,
vif
);
ret
=
iwl_mvm_power_update_mac
(
mvm
);
if
(
ret
)
if
(
ret
)
IWL_ERR
(
mvm
,
"failed to update power mode
\n
"
);
IWL_ERR
(
mvm
,
"failed to update power mode
\n
"
);
}
}
...
@@ -1368,9 +1368,12 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
...
@@ -1368,9 +1368,12 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
IWL_DEBUG_MAC80211
(
mvm
,
"cqm info_changed
\n
"
);
IWL_DEBUG_MAC80211
(
mvm
,
"cqm info_changed
\n
"
);
/* reset cqm events tracking */
/* reset cqm events tracking */
mvmvif
->
bf_data
.
last_cqm_event
=
0
;
mvmvif
->
bf_data
.
last_cqm_event
=
0
;
ret
=
iwl_mvm_update_beacon_filter
(
mvm
,
vif
,
false
,
0
);
if
(
mvmvif
->
bf_data
.
bf_enabled
)
{
if
(
ret
)
ret
=
iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
0
);
IWL_ERR
(
mvm
,
"failed to update CQM thresholds
\n
"
);
if
(
ret
)
IWL_ERR
(
mvm
,
"failed to update CQM thresholds
\n
"
);
}
}
}
if
(
changes
&
BSS_CHANGED_ARP_FILTER
)
{
if
(
changes
&
BSS_CHANGED_ARP_FILTER
)
{
...
@@ -1420,7 +1423,7 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,
...
@@ -1420,7 +1423,7 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,
mvmvif
->
ap_ibss_active
=
true
;
mvmvif
->
ap_ibss_active
=
true
;
/* power updated needs to be done before quotas */
/* power updated needs to be done before quotas */
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
ret
=
iwl_mvm_update_quotas
(
mvm
,
vif
);
ret
=
iwl_mvm_update_quotas
(
mvm
,
vif
);
if
(
ret
)
if
(
ret
)
...
@@ -1428,7 +1431,7 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,
...
@@ -1428,7 +1431,7 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,
/* Need to update the P2P Device MAC (only GO, IBSS is single vif) */
/* Need to update the P2P Device MAC (only GO, IBSS is single vif) */
if
(
vif
->
p2p
&&
mvm
->
p2p_device_vif
)
if
(
vif
->
p2p
&&
mvm
->
p2p_device_vif
)
iwl_mvm_mac_ctxt_changed
(
mvm
,
mvm
->
p2p_device_vif
);
iwl_mvm_mac_ctxt_changed
(
mvm
,
mvm
->
p2p_device_vif
,
false
);
iwl_mvm_ref
(
mvm
,
IWL_MVM_REF_AP_IBSS
);
iwl_mvm_ref
(
mvm
,
IWL_MVM_REF_AP_IBSS
);
...
@@ -1438,7 +1441,7 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,
...
@@ -1438,7 +1441,7 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,
return
0
;
return
0
;
out_quota_failed:
out_quota_failed:
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
mvmvif
->
ap_ibss_active
=
false
;
mvmvif
->
ap_ibss_active
=
false
;
iwl_mvm_send_rm_bcast_sta
(
mvm
,
&
mvmvif
->
bcast_sta
);
iwl_mvm_send_rm_bcast_sta
(
mvm
,
&
mvmvif
->
bcast_sta
);
out_unbind:
out_unbind:
...
@@ -1468,13 +1471,13 @@ static void iwl_mvm_stop_ap_ibss(struct ieee80211_hw *hw,
...
@@ -1468,13 +1471,13 @@ static void iwl_mvm_stop_ap_ibss(struct ieee80211_hw *hw,
/* Need to update the P2P Device MAC (only GO, IBSS is single vif) */
/* Need to update the P2P Device MAC (only GO, IBSS is single vif) */
if
(
vif
->
p2p
&&
mvm
->
p2p_device_vif
)
if
(
vif
->
p2p
&&
mvm
->
p2p_device_vif
)
iwl_mvm_mac_ctxt_changed
(
mvm
,
mvm
->
p2p_device_vif
);
iwl_mvm_mac_ctxt_changed
(
mvm
,
mvm
->
p2p_device_vif
,
false
);
iwl_mvm_update_quotas
(
mvm
,
NULL
);
iwl_mvm_update_quotas
(
mvm
,
NULL
);
iwl_mvm_send_rm_bcast_sta
(
mvm
,
&
mvmvif
->
bcast_sta
);
iwl_mvm_send_rm_bcast_sta
(
mvm
,
&
mvmvif
->
bcast_sta
);
iwl_mvm_binding_remove_vif
(
mvm
,
vif
);
iwl_mvm_binding_remove_vif
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
iwl_mvm_mac_ctxt_remove
(
mvm
,
vif
);
iwl_mvm_mac_ctxt_remove
(
mvm
,
vif
);
...
@@ -1495,7 +1498,7 @@ iwl_mvm_bss_info_changed_ap_ibss(struct iwl_mvm *mvm,
...
@@ -1495,7 +1498,7 @@ iwl_mvm_bss_info_changed_ap_ibss(struct iwl_mvm *mvm,
if
(
changes
&
(
BSS_CHANGED_ERP_CTS_PROT
|
BSS_CHANGED_HT
|
if
(
changes
&
(
BSS_CHANGED_ERP_CTS_PROT
|
BSS_CHANGED_HT
|
BSS_CHANGED_BANDWIDTH
)
&&
BSS_CHANGED_BANDWIDTH
)
&&
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
))
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
,
false
))
IWL_ERR
(
mvm
,
"failed to update MAC %pM
\n
"
,
vif
->
addr
);
IWL_ERR
(
mvm
,
"failed to update MAC %pM
\n
"
,
vif
->
addr
);
/* Need to send a new beacon template to the FW */
/* Need to send a new beacon template to the FW */
...
@@ -1734,8 +1737,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
...
@@ -1734,8 +1737,7 @@ static int iwl_mvm_mac_sta_state(struct ieee80211_hw *hw,
}
else
if
(
old_state
==
IEEE80211_STA_ASSOC
&&
}
else
if
(
old_state
==
IEEE80211_STA_ASSOC
&&
new_state
==
IEEE80211_STA_AUTHORIZED
)
{
new_state
==
IEEE80211_STA_AUTHORIZED
)
{
/* enable beacon filtering */
/* enable beacon filtering */
if
(
vif
->
bss_conf
.
dtim_period
)
WARN_ON
(
iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
0
));
WARN_ON
(
iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
0
));
ret
=
0
;
ret
=
0
;
}
else
if
(
old_state
==
IEEE80211_STA_AUTHORIZED
&&
}
else
if
(
old_state
==
IEEE80211_STA_AUTHORIZED
&&
new_state
==
IEEE80211_STA_ASSOC
)
{
new_state
==
IEEE80211_STA_ASSOC
)
{
...
@@ -1797,7 +1799,7 @@ static int iwl_mvm_mac_conf_tx(struct ieee80211_hw *hw,
...
@@ -1797,7 +1799,7 @@ static int iwl_mvm_mac_conf_tx(struct ieee80211_hw *hw,
int
ret
;
int
ret
;
mutex_lock
(
&
mvm
->
mutex
);
mutex_lock
(
&
mvm
->
mutex
);
ret
=
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
);
ret
=
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
,
false
);
mutex_unlock
(
&
mvm
->
mutex
);
mutex_unlock
(
&
mvm
->
mutex
);
return
ret
;
return
ret
;
}
}
...
@@ -2237,7 +2239,7 @@ static int iwl_mvm_assign_vif_chanctx(struct ieee80211_hw *hw,
...
@@ -2237,7 +2239,7 @@ static int iwl_mvm_assign_vif_chanctx(struct ieee80211_hw *hw,
* Power state must be updated before quotas,
* Power state must be updated before quotas,
* otherwise fw will complain.
* otherwise fw will complain.
*/
*/
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
/* Setting the quota at this stage is only required for monitor
/* Setting the quota at this stage is only required for monitor
* interfaces. For the other types, the bss_info changed flow
* interfaces. For the other types, the bss_info changed flow
...
@@ -2253,14 +2255,14 @@ static int iwl_mvm_assign_vif_chanctx(struct ieee80211_hw *hw,
...
@@ -2253,14 +2255,14 @@ static int iwl_mvm_assign_vif_chanctx(struct ieee80211_hw *hw,
/* Handle binding during CSA */
/* Handle binding during CSA */
if
(
vif
->
type
==
NL80211_IFTYPE_AP
)
{
if
(
vif
->
type
==
NL80211_IFTYPE_AP
)
{
iwl_mvm_update_quotas
(
mvm
,
vif
);
iwl_mvm_update_quotas
(
mvm
,
vif
);
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
);
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
,
false
);
}
}
goto
out_unlock
;
goto
out_unlock
;
out_remove_binding:
out_remove_binding:
iwl_mvm_binding_remove_vif
(
mvm
,
vif
);
iwl_mvm_binding_remove_vif
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
out_unlock:
out_unlock:
mutex_unlock
(
&
mvm
->
mutex
);
mutex_unlock
(
&
mvm
->
mutex
);
if
(
ret
)
if
(
ret
)
...
@@ -2299,10 +2301,10 @@ static void iwl_mvm_unassign_vif_chanctx(struct ieee80211_hw *hw,
...
@@ -2299,10 +2301,10 @@ static void iwl_mvm_unassign_vif_chanctx(struct ieee80211_hw *hw,
}
}
iwl_mvm_binding_remove_vif
(
mvm
,
vif
);
iwl_mvm_binding_remove_vif
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
,
vif
);
out_unlock:
out_unlock:
mvmvif
->
phy_ctxt
=
NULL
;
mvmvif
->
phy_ctxt
=
NULL
;
iwl_mvm_power_update_mac
(
mvm
);
mutex_unlock
(
&
mvm
->
mutex
);
mutex_unlock
(
&
mvm
->
mutex
);
}
}
...
...
drivers/net/wireless/iwlwifi/mvm/mvm.h
View file @
b88bb291
...
@@ -814,7 +814,8 @@ void iwl_mvm_phy_ctxt_unref(struct iwl_mvm *mvm,
...
@@ -814,7 +814,8 @@ void iwl_mvm_phy_ctxt_unref(struct iwl_mvm *mvm,
int
iwl_mvm_mac_ctxt_init
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
int
iwl_mvm_mac_ctxt_init
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
void
iwl_mvm_mac_ctxt_release
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
void
iwl_mvm_mac_ctxt_release
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
int
iwl_mvm_mac_ctxt_add
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
int
iwl_mvm_mac_ctxt_add
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
int
iwl_mvm_mac_ctxt_changed
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
int
iwl_mvm_mac_ctxt_changed
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
bool
force_assoc_off
);
int
iwl_mvm_mac_ctxt_remove
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
int
iwl_mvm_mac_ctxt_remove
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
u32
iwl_mvm_mac_get_queues_mask
(
struct
iwl_mvm
*
mvm
,
u32
iwl_mvm_mac_get_queues_mask
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
struct
ieee80211_vif
*
vif
);
...
@@ -893,7 +894,7 @@ int rs_pretty_print_rate(char *buf, const u32 rate);
...
@@ -893,7 +894,7 @@ int rs_pretty_print_rate(char *buf, const u32 rate);
/* power management */
/* power management */
int
iwl_mvm_power_update_device
(
struct
iwl_mvm
*
mvm
);
int
iwl_mvm_power_update_device
(
struct
iwl_mvm
*
mvm
);
int
iwl_mvm_power_update_mac
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
int
iwl_mvm_power_update_mac
(
struct
iwl_mvm
*
mvm
);
int
iwl_mvm_power_mac_dbgfs_read
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
int
iwl_mvm_power_mac_dbgfs_read
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
char
*
buf
,
int
bufsz
);
char
*
buf
,
int
bufsz
);
...
@@ -966,7 +967,6 @@ bool iwl_mvm_bt_coex_is_tpc_allowed(struct iwl_mvm *mvm,
...
@@ -966,7 +967,6 @@ bool iwl_mvm_bt_coex_is_tpc_allowed(struct iwl_mvm *mvm,
enum
ieee80211_band
band
);
enum
ieee80211_band
band
);
u8
iwl_mvm_bt_coex_tx_prio
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_hdr
*
hdr
,
u8
iwl_mvm_bt_coex_tx_prio
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_hdr
*
hdr
,
struct
ieee80211_tx_info
*
info
,
u8
ac
);
struct
ieee80211_tx_info
*
info
,
u8
ac
);
int
iwl_mvm_bt_coex_reduced_txp
(
struct
iwl_mvm
*
mvm
,
u8
sta_id
,
bool
enable
);
enum
iwl_bt_kill_msk
{
enum
iwl_bt_kill_msk
{
BT_KILL_MSK_DEFAULT
,
BT_KILL_MSK_DEFAULT
,
...
@@ -997,17 +997,11 @@ int iwl_mvm_enable_beacon_filter(struct iwl_mvm *mvm,
...
@@ -997,17 +997,11 @@ int iwl_mvm_enable_beacon_filter(struct iwl_mvm *mvm,
int
iwl_mvm_disable_beacon_filter
(
struct
iwl_mvm
*
mvm
,
int
iwl_mvm_disable_beacon_filter
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
struct
ieee80211_vif
*
vif
,
u32
flags
);
u32
flags
);
int
iwl_mvm_update_beacon_abort
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
bool
enable
);
int
iwl_mvm_update_beacon_filter
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
bool
force
,
u32
flags
);
/* SMPS */
/* SMPS */
void
iwl_mvm_update_smps
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
void
iwl_mvm_update_smps
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
enum
iwl_mvm_smps_type_request
req_type
,
enum
iwl_mvm_smps_type_request
req_type
,
enum
ieee80211_smps_mode
smps_request
);
enum
ieee80211_smps_mode
smps_request
);
bool
iwl_mvm_rx_diversity_allowed
(
struct
iwl_mvm
*
mvm
);
/* Low latency */
/* Low latency */
int
iwl_mvm_update_low_latency
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
int
iwl_mvm_update_low_latency
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
...
...
drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c
View file @
b88bb291
...
@@ -163,8 +163,7 @@ static void iwl_mvm_phy_ctxt_cmd_data(struct iwl_mvm *mvm,
...
@@ -163,8 +163,7 @@ static void iwl_mvm_phy_ctxt_cmd_data(struct iwl_mvm *mvm,
* between the two antennas is sufficiently different to impact
* between the two antennas is sufficiently different to impact
* performance.
* performance.
*/
*/
if
(
active_cnt
==
1
&&
num_of_ant
(
mvm
->
fw
->
valid_rx_ant
)
>
1
&&
if
(
active_cnt
==
1
&&
iwl_mvm_rx_diversity_allowed
(
mvm
))
{
!
mvm
->
cfg
->
rx_with_siso_diversity
)
{
idle_cnt
=
2
;
idle_cnt
=
2
;
active_cnt
=
2
;
active_cnt
=
2
;
}
}
...
...
drivers/net/wireless/iwlwifi/mvm/power.c
View file @
b88bb291
...
@@ -123,28 +123,6 @@ void iwl_mvm_beacon_filter_set_cqm_params(struct iwl_mvm *mvm,
...
@@ -123,28 +123,6 @@ void iwl_mvm_beacon_filter_set_cqm_params(struct iwl_mvm *mvm,
cmd
->
ba_enable_beacon_abort
=
cpu_to_le32
(
mvmvif
->
bf_data
.
ba_enabled
);
cmd
->
ba_enable_beacon_abort
=
cpu_to_le32
(
mvmvif
->
bf_data
.
ba_enabled
);
}
}
int
iwl_mvm_update_beacon_abort
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
bool
enable
)
{
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
struct
iwl_beacon_filter_cmd
cmd
=
{
IWL_BF_CMD_CONFIG_DEFAULTS
,
.
bf_enable_beacon_filter
=
cpu_to_le32
(
1
),
.
ba_enable_beacon_abort
=
cpu_to_le32
(
enable
),
};
if
(
!
mvmvif
->
bf_data
.
bf_enabled
)
return
0
;
if
(
mvm
->
cur_ucode
==
IWL_UCODE_WOWLAN
)
cmd
.
ba_escape_timer
=
cpu_to_le32
(
IWL_BA_ESCAPE_TIMER_D3
);
mvmvif
->
bf_data
.
ba_enabled
=
enable
;
iwl_mvm_beacon_filter_set_cqm_params
(
mvm
,
vif
,
&
cmd
);
iwl_mvm_beacon_filter_debugfs_parameters
(
vif
,
&
cmd
);
return
iwl_mvm_beacon_filter_send_cmd
(
mvm
,
&
cmd
,
0
);
}
static
void
iwl_mvm_power_log
(
struct
iwl_mvm
*
mvm
,
static
void
iwl_mvm_power_log
(
struct
iwl_mvm
*
mvm
,
struct
iwl_mac_power_cmd
*
cmd
)
struct
iwl_mac_power_cmd
*
cmd
)
{
{
...
@@ -664,55 +642,6 @@ iwl_mvm_power_set_pm(struct iwl_mvm *mvm,
...
@@ -664,55 +642,6 @@ iwl_mvm_power_set_pm(struct iwl_mvm *mvm,
}
}
}
}
int
iwl_mvm_power_update_mac
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
)
{
struct
iwl_mvm_vif
*
mvmvif
;
struct
iwl_power_vifs
vifs
=
{};
bool
ba_enable
;
int
ret
;
lockdep_assert_held
(
&
mvm
->
mutex
);
iwl_mvm_power_set_pm
(
mvm
,
&
vifs
);
/* disable PS if CAM */
if
(
iwlmvm_mod_params
.
power_scheme
==
IWL_POWER_SCHEME_CAM
)
{
mvm
->
ps_disabled
=
true
;
}
else
{
/* don't update device power state unless we add / remove monitor */
if
(
vifs
.
monitor_vif
)
{
if
(
vifs
.
monitor_active
)
mvm
->
ps_disabled
=
true
;
ret
=
iwl_mvm_power_update_device
(
mvm
);
if
(
ret
)
return
ret
;
}
}
if
(
vifs
.
bss_vif
)
{
ret
=
iwl_mvm_power_send_cmd
(
mvm
,
vifs
.
bss_vif
);
if
(
ret
)
return
ret
;
}
if
(
vifs
.
p2p_vif
)
{
ret
=
iwl_mvm_power_send_cmd
(
mvm
,
vifs
.
p2p_vif
);
if
(
ret
)
return
ret
;
}
if
(
!
vifs
.
bf_vif
)
return
0
;
vif
=
vifs
.
bf_vif
;
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
ba_enable
=
!
(
!
mvmvif
->
pm_enabled
||
mvm
->
ps_disabled
||
!
vif
->
bss_conf
.
ps
||
iwl_mvm_vif_low_latency
(
mvmvif
));
return
iwl_mvm_update_beacon_abort
(
mvm
,
vifs
.
bf_vif
,
ba_enable
);
}
#ifdef CONFIG_IWLWIFI_DEBUGFS
#ifdef CONFIG_IWLWIFI_DEBUGFS
int
iwl_mvm_power_mac_dbgfs_read
(
struct
iwl_mvm
*
mvm
,
int
iwl_mvm_power_mac_dbgfs_read
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
char
*
buf
,
struct
ieee80211_vif
*
vif
,
char
*
buf
,
...
@@ -832,7 +761,7 @@ static int _iwl_mvm_enable_beacon_filter(struct iwl_mvm *mvm,
...
@@ -832,7 +761,7 @@ static int _iwl_mvm_enable_beacon_filter(struct iwl_mvm *mvm,
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
int
ret
;
int
ret
;
if
(
mvmvif
!=
mvm
->
bf_allowed_vif
||
if
(
mvmvif
!=
mvm
->
bf_allowed_vif
||
!
vif
->
bss_conf
.
dtim_period
||
vif
->
type
!=
NL80211_IFTYPE_STATION
||
vif
->
p2p
)
vif
->
type
!=
NL80211_IFTYPE_STATION
||
vif
->
p2p
)
return
0
;
return
0
;
...
@@ -860,6 +789,26 @@ int iwl_mvm_enable_beacon_filter(struct iwl_mvm *mvm,
...
@@ -860,6 +789,26 @@ int iwl_mvm_enable_beacon_filter(struct iwl_mvm *mvm,
return
_iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
&
cmd
,
flags
,
false
);
return
_iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
&
cmd
,
flags
,
false
);
}
}
static
int
iwl_mvm_update_beacon_abort
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
bool
enable
)
{
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
struct
iwl_beacon_filter_cmd
cmd
=
{
IWL_BF_CMD_CONFIG_DEFAULTS
,
.
bf_enable_beacon_filter
=
cpu_to_le32
(
1
),
};
if
(
!
mvmvif
->
bf_data
.
bf_enabled
)
return
0
;
if
(
mvm
->
cur_ucode
==
IWL_UCODE_WOWLAN
)
cmd
.
ba_escape_timer
=
cpu_to_le32
(
IWL_BA_ESCAPE_TIMER_D3
);
mvmvif
->
bf_data
.
ba_enabled
=
enable
;
return
_iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
&
cmd
,
0
,
false
);
}
int
iwl_mvm_disable_beacon_filter
(
struct
iwl_mvm
*
mvm
,
int
iwl_mvm_disable_beacon_filter
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
struct
ieee80211_vif
*
vif
,
u32
flags
)
u32
flags
)
...
@@ -879,6 +828,55 @@ int iwl_mvm_disable_beacon_filter(struct iwl_mvm *mvm,
...
@@ -879,6 +828,55 @@ int iwl_mvm_disable_beacon_filter(struct iwl_mvm *mvm,
return
ret
;
return
ret
;
}
}
int
iwl_mvm_power_update_mac
(
struct
iwl_mvm
*
mvm
)
{
struct
iwl_mvm_vif
*
mvmvif
;
struct
iwl_power_vifs
vifs
=
{};
bool
ba_enable
;
int
ret
;
lockdep_assert_held
(
&
mvm
->
mutex
);
iwl_mvm_power_set_pm
(
mvm
,
&
vifs
);
/* disable PS if CAM */
if
(
iwlmvm_mod_params
.
power_scheme
==
IWL_POWER_SCHEME_CAM
)
{
mvm
->
ps_disabled
=
true
;
}
else
{
/* don't update device power state unless we add / remove monitor */
if
(
vifs
.
monitor_vif
)
{
if
(
vifs
.
monitor_active
)
mvm
->
ps_disabled
=
true
;
ret
=
iwl_mvm_power_update_device
(
mvm
);
if
(
ret
)
return
ret
;
}
}
if
(
vifs
.
bss_vif
)
{
ret
=
iwl_mvm_power_send_cmd
(
mvm
,
vifs
.
bss_vif
);
if
(
ret
)
return
ret
;
}
if
(
vifs
.
p2p_vif
)
{
ret
=
iwl_mvm_power_send_cmd
(
mvm
,
vifs
.
p2p_vif
);
if
(
ret
)
return
ret
;
}
if
(
!
vifs
.
bf_vif
)
return
0
;
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vifs
.
bf_vif
);
ba_enable
=
!
(
!
mvmvif
->
pm_enabled
||
mvm
->
ps_disabled
||
!
vifs
.
bf_vif
->
bss_conf
.
ps
||
iwl_mvm_vif_low_latency
(
mvmvif
));
return
iwl_mvm_update_beacon_abort
(
mvm
,
vifs
.
bf_vif
,
ba_enable
);
}
int
iwl_mvm_update_d0i3_power_mode
(
struct
iwl_mvm
*
mvm
,
int
iwl_mvm_update_d0i3_power_mode
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
struct
ieee80211_vif
*
vif
,
bool
enable
,
u32
flags
)
bool
enable
,
u32
flags
)
...
@@ -936,23 +934,3 @@ int iwl_mvm_update_d0i3_power_mode(struct iwl_mvm *mvm,
...
@@ -936,23 +934,3 @@ int iwl_mvm_update_d0i3_power_mode(struct iwl_mvm *mvm,
return
ret
;
return
ret
;
}
}
int
iwl_mvm_update_beacon_filter
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
bool
force
,
u32
flags
)
{
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
if
(
mvmvif
!=
mvm
->
bf_allowed_vif
)
return
0
;
if
(
!
mvmvif
->
bf_data
.
bf_enabled
)
{
/* disable beacon filtering explicitly if force is true */
if
(
force
)
return
iwl_mvm_disable_beacon_filter
(
mvm
,
vif
,
flags
);
return
0
;
}
return
iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
flags
);
}
drivers/net/wireless/iwlwifi/mvm/sta.h
View file @
b88bb291
...
@@ -287,8 +287,6 @@ static inline u16 iwl_mvm_tid_queued(struct iwl_mvm_tid_data *tid_data)
...
@@ -287,8 +287,6 @@ static inline u16 iwl_mvm_tid_queued(struct iwl_mvm_tid_data *tid_data)
* @tid_disable_agg: bitmap: if bit(tid) is set, the fw won't send ampdus for
* @tid_disable_agg: bitmap: if bit(tid) is set, the fw won't send ampdus for
* tid.
* tid.
* @max_agg_bufsize: the maximal size of the AGG buffer for this station
* @max_agg_bufsize: the maximal size of the AGG buffer for this station
* @bt_reduced_txpower_dbg: debug mode in which %bt_reduced_txpower is forced
* by debugfs.
* @bt_reduced_txpower: is reduced tx power enabled for this station
* @bt_reduced_txpower: is reduced tx power enabled for this station
* @next_status_eosp: the next reclaimed packet is a PS-Poll response and
* @next_status_eosp: the next reclaimed packet is a PS-Poll response and
* we need to signal the EOSP
* we need to signal the EOSP
...
@@ -309,7 +307,6 @@ struct iwl_mvm_sta {
...
@@ -309,7 +307,6 @@ struct iwl_mvm_sta {
u32
mac_id_n_color
;
u32
mac_id_n_color
;
u16
tid_disable_agg
;
u16
tid_disable_agg
;
u8
max_agg_bufsize
;
u8
max_agg_bufsize
;
bool
bt_reduced_txpower_dbg
;
bool
bt_reduced_txpower
;
bool
bt_reduced_txpower
;
bool
next_status_eosp
;
bool
next_status_eosp
;
spinlock_t
lock
;
spinlock_t
lock
;
...
...
drivers/net/wireless/iwlwifi/mvm/utils.c
View file @
b88bb291
...
@@ -650,6 +650,39 @@ void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
...
@@ -650,6 +650,39 @@ void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
ieee80211_request_smps
(
vif
,
smps_mode
);
ieee80211_request_smps
(
vif
,
smps_mode
);
}
}
static
void
iwl_mvm_diversity_iter
(
void
*
_data
,
u8
*
mac
,
struct
ieee80211_vif
*
vif
)
{
struct
iwl_mvm_vif
*
mvmvif
=
iwl_mvm_vif_from_mac80211
(
vif
);
bool
*
result
=
_data
;
int
i
;
for
(
i
=
0
;
i
<
NUM_IWL_MVM_SMPS_REQ
;
i
++
)
{
if
(
mvmvif
->
smps_requests
[
i
]
==
IEEE80211_SMPS_STATIC
||
mvmvif
->
smps_requests
[
i
]
==
IEEE80211_SMPS_DYNAMIC
)
*
result
=
false
;
}
}
bool
iwl_mvm_rx_diversity_allowed
(
struct
iwl_mvm
*
mvm
)
{
bool
result
=
true
;
lockdep_assert_held
(
&
mvm
->
mutex
);
if
(
num_of_ant
(
mvm
->
fw
->
valid_rx_ant
)
==
1
)
return
false
;
if
(
!
mvm
->
cfg
->
rx_with_siso_diversity
)
return
false
;
ieee80211_iterate_active_interfaces_atomic
(
mvm
->
hw
,
IEEE80211_IFACE_ITER_NORMAL
,
iwl_mvm_diversity_iter
,
&
result
);
return
result
;
}
int
iwl_mvm_update_low_latency
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
int
iwl_mvm_update_low_latency
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
bool
value
)
bool
value
)
{
{
...
@@ -669,7 +702,7 @@ int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
...
@@ -669,7 +702,7 @@ int iwl_mvm_update_low_latency(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
iwl_mvm_bt_coex_vif_change
(
mvm
);
iwl_mvm_bt_coex_vif_change
(
mvm
);
return
iwl_mvm_power_update_mac
(
mvm
,
vif
);
return
iwl_mvm_power_update_mac
(
mvm
);
}
}
static
void
iwl_mvm_ll_iter
(
void
*
_data
,
u8
*
mac
,
struct
ieee80211_vif
*
vif
)
static
void
iwl_mvm_ll_iter
(
void
*
_data
,
u8
*
mac
,
struct
ieee80211_vif
*
vif
)
...
...
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