Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
b88bb291
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b88bb291
编写于
5月 22, 2014
作者:
J
John W. Linville
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'for-john' of
git://git.kernel.org/pub/scm/linux/kernel/git/iwlwifi/iwlwifi-next
上级
40a10fd7
999609f1
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
158 addition
and
191 deletion
+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
未找到文件。
drivers/net/wireless/iwlwifi/mvm/coex.c
浏览文件 @
b88bb291
...
...
@@ -715,7 +715,8 @@ static int iwl_mvm_bt_udpate_ctrl_kill_msk(struct iwl_mvm *mvm,
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
;
/* 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)
return
0
;
/* nothing to do */
if
(
mvmsta
->
bt_reduced_txpower_dbg
||
mvmsta
->
bt_reduced_txpower
==
enable
)
if
(
mvmsta
->
bt_reduced_txpower
==
enable
)
return
0
;
bt_cmd
=
kzalloc
(
sizeof
(
*
bt_cmd
),
GFP_ATOMIC
);
...
...
@@ -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
,
smps_mode
);
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
);
}
return
;
}
...
...
@@ -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
||
!
data
->
notif
->
bt_status
)
{
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
);
return
;
}
...
...
drivers/net/wireless/iwlwifi/mvm/d3.c
浏览文件 @
b88bb291
...
...
@@ -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
))
return
-
EINVAL
;
/* hack */
vif
->
bss_conf
.
assoc
=
false
;
ret
=
iwl_mvm_mac_ctxt_add
(
mvm
,
vif
);
vif
->
bss_conf
.
assoc
=
true
;
if
(
ret
)
return
ret
;
...
...
@@ -702,7 +700,7 @@ static int iwl_mvm_d3_reprogram(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
return
ret
;
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
)
return
ret
;
...
...
@@ -1030,7 +1028,7 @@ static int __iwl_mvm_suspend(struct ieee80211_hw *hw,
if
(
ret
)
goto
out
;
ret
=
iwl_mvm_power_update_mac
(
mvm
,
vif
);
ret
=
iwl_mvm_power_update_mac
(
mvm
);
if
(
ret
)
goto
out
;
...
...
drivers/net/wireless/iwlwifi/mvm/debugfs-vif.c
浏览文件 @
b88bb291
...
...
@@ -175,7 +175,7 @@ static ssize_t iwl_dbgfs_pm_params_write(struct ieee80211_vif *vif, char *buf,
mutex_lock
(
&
mvm
->
mutex
);
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
);
return
ret
?:
count
;
...
...
@@ -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
;
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
,
mvm_sta
->
bt_reduced_txpower
,
mvm_sta
->
bt_reduced_txpower_dbg
);
mvm_sta
->
bt_reduced_txpower
);
}
}
...
...
@@ -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
);
}
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
,
enum
iwl_dbgfs_bf_mask
param
,
int
value
)
{
...
...
@@ -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
(
bf_params
,
256
);
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
)
{
...
...
@@ -590,7 +553,6 @@ void iwl_mvm_vif_dbgfs_register(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
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
,
S_IRUSR
|
S_IWUSR
);
...
...
drivers/net/wireless/iwlwifi/mvm/mac-ctxt.c
浏览文件 @
b88bb291
...
...
@@ -713,14 +713,6 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
IEEE80211_P2P_OPPPS_CTWINDOW_MASK
);
ctxt_sta
=
&
cmd
.
p2p_sta
.
sta
;
}
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
;
}
...
...
@@ -729,6 +721,11 @@ static int iwl_mvm_mac_ctxt_cmd_sta(struct iwl_mvm *mvm,
!
force_assoc_off
)
{
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
* 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,
}
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
)
{
case
NL80211_IFTYPE_STATION
:
return
iwl_mvm_mac_ctxt_cmd_sta
(
mvm
,
vif
,
action
,
action
==
FW_CTXT_ACTION_ADD
);
force_assoc_off
);
break
;
case
NL80211_IFTYPE_AP
:
if
(
!
vif
->
p2p
)
...
...
@@ -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
)))
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
)
return
ret
;
...
...
@@ -1158,7 +1156,8 @@ int iwl_mvm_mac_ctxt_add(struct iwl_mvm *mvm, struct ieee80211_vif *vif)
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
);
...
...
@@ -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
)))
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
)
...
...
drivers/net/wireless/iwlwifi/mvm/mac80211.c
浏览文件 @
b88bb291
...
...
@@ -832,7 +832,7 @@ static int iwl_mvm_mac_add_interface(struct ieee80211_hw *hw,
if
(
ret
)
goto
out_release
;
ret
=
iwl_mvm_power_update_mac
(
mvm
,
vif
);
ret
=
iwl_mvm_power_update_mac
(
mvm
);
if
(
ret
)
goto
out_release
;
...
...
@@ -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
)
mvm
->
vif_count
--
;
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
iwl_mvm_mac_ctxt_remove
(
mvm
,
vif
);
out_release:
...
...
@@ -1271,7 +1271,7 @@ static void iwl_mvm_bss_info_changed_station(struct iwl_mvm *mvm,
if
(
changes
&
BSS_CHANGED_ASSOC
&&
bss_conf
->
assoc
)
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
)
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,
WARN_ON
(
iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
0
));
}
else
if
(
changes
&
(
BSS_CHANGED_PS
|
BSS_CHANGED_P2P_PS
|
BSS_CHANGED_QOS
))
{
ret
=
iwl_mvm_power_update_mac
(
mvm
,
vif
);
ret
=
iwl_mvm_power_update_mac
(
mvm
);
if
(
ret
)
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,
IWL_DEBUG_MAC80211
(
mvm
,
"cqm info_changed
\n
"
);
/* reset cqm events tracking */
mvmvif
->
bf_data
.
last_cqm_event
=
0
;
ret
=
iwl_mvm_update_beacon_filter
(
mvm
,
vif
,
false
,
0
);
if
(
ret
)
IWL_ERR
(
mvm
,
"failed to update CQM thresholds
\n
"
);
if
(
mvmvif
->
bf_data
.
bf_enabled
)
{
ret
=
iwl_mvm_enable_beacon_filter
(
mvm
,
vif
,
0
);
if
(
ret
)
IWL_ERR
(
mvm
,
"failed to update CQM thresholds
\n
"
);
}
}
if
(
changes
&
BSS_CHANGED_ARP_FILTER
)
{
...
...
@@ -1420,7 +1423,7 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,
mvmvif
->
ap_ibss_active
=
true
;
/* 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
);
if
(
ret
)
...
...
@@ -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) */
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
);
...
...
@@ -1438,7 +1441,7 @@ static int iwl_mvm_start_ap_ibss(struct ieee80211_hw *hw,
return
0
;
out_quota_failed:
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
mvmvif
->
ap_ibss_active
=
false
;
iwl_mvm_send_rm_bcast_sta
(
mvm
,
&
mvmvif
->
bcast_sta
);
out_unbind:
...
...
@@ -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) */
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_send_rm_bcast_sta
(
mvm
,
&
mvmvif
->
bcast_sta
);
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
);
...
...
@@ -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
|
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
);
/* 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,
}
else
if
(
old_state
==
IEEE80211_STA_ASSOC
&&
new_state
==
IEEE80211_STA_AUTHORIZED
)
{
/* 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
;
}
else
if
(
old_state
==
IEEE80211_STA_AUTHORIZED
&&
new_state
==
IEEE80211_STA_ASSOC
)
{
...
...
@@ -1797,7 +1799,7 @@ static int iwl_mvm_mac_conf_tx(struct ieee80211_hw *hw,
int
ret
;
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
);
return
ret
;
}
...
...
@@ -2237,7 +2239,7 @@ static int iwl_mvm_assign_vif_chanctx(struct ieee80211_hw *hw,
* Power state must be updated before quotas,
* 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
* 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,
/* Handle binding during CSA */
if
(
vif
->
type
==
NL80211_IFTYPE_AP
)
{
iwl_mvm_update_quotas
(
mvm
,
vif
);
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
);
iwl_mvm_mac_ctxt_changed
(
mvm
,
vif
,
false
);
}
goto
out_unlock
;
out_remove_binding:
iwl_mvm_binding_remove_vif
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
);
out_unlock:
mutex_unlock
(
&
mvm
->
mutex
);
if
(
ret
)
...
...
@@ -2299,10 +2301,10 @@ static void iwl_mvm_unassign_vif_chanctx(struct ieee80211_hw *hw,
}
iwl_mvm_binding_remove_vif
(
mvm
,
vif
);
iwl_mvm_power_update_mac
(
mvm
,
vif
);
out_unlock:
mvmvif
->
phy_ctxt
=
NULL
;
iwl_mvm_power_update_mac
(
mvm
);
mutex_unlock
(
&
mvm
->
mutex
);
}
...
...
drivers/net/wireless/iwlwifi/mvm/mvm.h
浏览文件 @
b88bb291
...
...
@@ -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
);
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_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
);
u32
iwl_mvm_mac_get_queues_mask
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
);
...
...
@@ -893,7 +894,7 @@ int rs_pretty_print_rate(char *buf, const u32 rate);
/* power management */
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
,
char
*
buf
,
int
bufsz
);
...
...
@@ -966,7 +967,6 @@ bool iwl_mvm_bt_coex_is_tpc_allowed(struct iwl_mvm *mvm,
enum
ieee80211_band
band
);
u8
iwl_mvm_bt_coex_tx_prio
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_hdr
*
hdr
,
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
{
BT_KILL_MSK_DEFAULT
,
...
...
@@ -997,17 +997,11 @@ int iwl_mvm_enable_beacon_filter(struct iwl_mvm *mvm,
int
iwl_mvm_disable_beacon_filter
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
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 */
void
iwl_mvm_update_smps
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
enum
iwl_mvm_smps_type_request
req_type
,
enum
ieee80211_smps_mode
smps_request
);
bool
iwl_mvm_rx_diversity_allowed
(
struct
iwl_mvm
*
mvm
);
/* Low latency */
int
iwl_mvm_update_low_latency
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
...
...
drivers/net/wireless/iwlwifi/mvm/phy-ctxt.c
浏览文件 @
b88bb291
...
...
@@ -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
* performance.
*/
if
(
active_cnt
==
1
&&
num_of_ant
(
mvm
->
fw
->
valid_rx_ant
)
>
1
&&
!
mvm
->
cfg
->
rx_with_siso_diversity
)
{
if
(
active_cnt
==
1
&&
iwl_mvm_rx_diversity_allowed
(
mvm
))
{
idle_cnt
=
2
;
active_cnt
=
2
;
}
...
...
drivers/net/wireless/iwlwifi/mvm/power.c
浏览文件 @
b88bb291
...
...
@@ -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
);
}
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
,
struct
iwl_mac_power_cmd
*
cmd
)
{
...
...
@@ -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
int
iwl_mvm_power_mac_dbgfs_read
(
struct
iwl_mvm
*
mvm
,
struct
ieee80211_vif
*
vif
,
char
*
buf
,
...
...
@@ -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
);
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
)
return
0
;
...
...
@@ -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
);
}
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
,
struct
ieee80211_vif
*
vif
,
u32
flags
)
...
...
@@ -879,6 +828,55 @@ int iwl_mvm_disable_beacon_filter(struct iwl_mvm *mvm,
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
,
struct
ieee80211_vif
*
vif
,
bool
enable
,
u32
flags
)
...
...
@@ -936,23 +934,3 @@ int iwl_mvm_update_d0i3_power_mode(struct iwl_mvm *mvm,
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
浏览文件 @
b88bb291
...
...
@@ -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.
* @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
* @next_status_eosp: the next reclaimed packet is a PS-Poll response and
* we need to signal the EOSP
...
...
@@ -309,7 +307,6 @@ struct iwl_mvm_sta {
u32
mac_id_n_color
;
u16
tid_disable_agg
;
u8
max_agg_bufsize
;
bool
bt_reduced_txpower_dbg
;
bool
bt_reduced_txpower
;
bool
next_status_eosp
;
spinlock_t
lock
;
...
...
drivers/net/wireless/iwlwifi/mvm/utils.c
浏览文件 @
b88bb291
...
...
@@ -650,6 +650,39 @@ void iwl_mvm_update_smps(struct iwl_mvm *mvm, struct ieee80211_vif *vif,
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
,
bool
value
)
{
...
...
@@ -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
);
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
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录