Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
208d271a
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
208d271a
编写于
3月 12, 2015
作者:
E
Emmanuel Grumbach
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'iwlwifi-fixes' into iwlwifi-next
上级
e111e968
060b4460
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
59 addition
and
26 deletion
+59
-26
drivers/net/wireless/iwlwifi/dvm/mac80211.c
drivers/net/wireless/iwlwifi/dvm/mac80211.c
+9
-8
drivers/net/wireless/iwlwifi/mvm/coex.c
drivers/net/wireless/iwlwifi/mvm/coex.c
+2
-1
drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
+2
-1
drivers/net/wireless/iwlwifi/mvm/mac80211.c
drivers/net/wireless/iwlwifi/mvm/mac80211.c
+35
-3
drivers/net/wireless/iwlwifi/mvm/scan.c
drivers/net/wireless/iwlwifi/mvm/scan.c
+6
-7
drivers/net/wireless/iwlwifi/mvm/time-event.c
drivers/net/wireless/iwlwifi/mvm/time-event.c
+5
-6
未找到文件。
drivers/net/wireless/iwlwifi/dvm/mac80211.c
浏览文件 @
208d271a
...
@@ -1114,16 +1114,17 @@ static void iwlagn_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
...
@@ -1114,16 +1114,17 @@ static void iwlagn_mac_flush(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
scd_queues
&=
~
(
BIT
(
IWL_IPAN_CMD_QUEUE_NUM
)
|
scd_queues
&=
~
(
BIT
(
IWL_IPAN_CMD_QUEUE_NUM
)
|
BIT
(
IWL_DEFAULT_CMD_QUEUE_NUM
));
BIT
(
IWL_DEFAULT_CMD_QUEUE_NUM
));
if
(
vif
)
if
(
drop
)
{
scd_queues
&=
~
BIT
(
vif
->
hw_queue
[
IEEE80211_AC_VO
]);
IWL_DEBUG_TX_QUEUES
(
priv
,
"Flushing SCD queues: 0x%x
\n
"
,
scd_queues
);
IWL_DEBUG_TX_QUEUES
(
priv
,
"Flushing SCD queues: 0x%x
\n
"
,
scd_queues
);
if
(
iwlagn_txfifo_flush
(
priv
,
scd_queues
))
{
if
(
iwlagn_txfifo_flush
(
priv
,
scd_queues
))
{
IWL_ERR
(
priv
,
"flush request fail
\n
"
);
IWL_ERR
(
priv
,
"flush request fail
\n
"
)
;
goto
done
;
goto
done
;
}
}
}
IWL_DEBUG_TX_QUEUES
(
priv
,
"wait transmit/flush all frames
\n
"
);
IWL_DEBUG_TX_QUEUES
(
priv
,
"wait transmit/flush all frames
\n
"
);
iwl_trans_wait_tx_queue_empty
(
priv
->
trans
,
0xffffffff
);
iwl_trans_wait_tx_queue_empty
(
priv
->
trans
,
scd_queues
);
done:
done:
mutex_unlock
(
&
priv
->
mutex
);
mutex_unlock
(
&
priv
->
mutex
);
IWL_DEBUG_MAC80211
(
priv
,
"leave
\n
"
);
IWL_DEBUG_MAC80211
(
priv
,
"leave
\n
"
);
...
...
drivers/net/wireless/iwlwifi/mvm/coex.c
浏览文件 @
208d271a
...
@@ -579,7 +579,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
...
@@ -579,7 +579,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
if
(
!
vif
->
bss_conf
.
assoc
)
if
(
!
vif
->
bss_conf
.
assoc
)
smps_mode
=
IEEE80211_SMPS_AUTOMATIC
;
smps_mode
=
IEEE80211_SMPS_AUTOMATIC
;
if
(
IWL_COEX_IS_RRC_ON
(
mvm
->
last_bt_notif
.
ttc_rrc_status
,
if
(
mvmvif
->
phy_ctxt
&&
IWL_COEX_IS_RRC_ON
(
mvm
->
last_bt_notif
.
ttc_rrc_status
,
mvmvif
->
phy_ctxt
->
id
))
mvmvif
->
phy_ctxt
->
id
))
smps_mode
=
IEEE80211_SMPS_AUTOMATIC
;
smps_mode
=
IEEE80211_SMPS_AUTOMATIC
;
...
...
drivers/net/wireless/iwlwifi/mvm/coex_legacy.c
浏览文件 @
208d271a
...
@@ -891,7 +891,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
...
@@ -891,7 +891,8 @@ static void iwl_mvm_bt_notif_iterator(void *_data, u8 *mac,
if
(
!
vif
->
bss_conf
.
assoc
)
if
(
!
vif
->
bss_conf
.
assoc
)
smps_mode
=
IEEE80211_SMPS_AUTOMATIC
;
smps_mode
=
IEEE80211_SMPS_AUTOMATIC
;
if
(
data
->
notif
->
rrc_enabled
&
BIT
(
mvmvif
->
phy_ctxt
->
id
))
if
(
mvmvif
->
phy_ctxt
&&
data
->
notif
->
rrc_enabled
&
BIT
(
mvmvif
->
phy_ctxt
->
id
))
smps_mode
=
IEEE80211_SMPS_AUTOMATIC
;
smps_mode
=
IEEE80211_SMPS_AUTOMATIC
;
IWL_DEBUG_COEX
(
data
->
mvm
,
IWL_DEBUG_COEX
(
data
->
mvm
,
...
...
drivers/net/wireless/iwlwifi/mvm/mac80211.c
浏览文件 @
208d271a
...
@@ -510,7 +510,10 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
...
@@ -510,7 +510,10 @@ int iwl_mvm_mac_setup_register(struct iwl_mvm *mvm)
hw
->
wiphy
->
bands
[
IEEE80211_BAND_5GHZ
]
=
hw
->
wiphy
->
bands
[
IEEE80211_BAND_5GHZ
]
=
&
mvm
->
nvm_data
->
bands
[
IEEE80211_BAND_5GHZ
];
&
mvm
->
nvm_data
->
bands
[
IEEE80211_BAND_5GHZ
];
if
(
mvm
->
fw
->
ucode_capa
.
capa
[
0
]
&
IWL_UCODE_TLV_CAPA_BEAMFORMER
)
if
((
mvm
->
fw
->
ucode_capa
.
capa
[
0
]
&
IWL_UCODE_TLV_CAPA_BEAMFORMER
)
&&
(
mvm
->
fw
->
ucode_capa
.
api
[
0
]
&
IWL_UCODE_TLV_API_LQ_SS_PARAMS
))
hw
->
wiphy
->
bands
[
IEEE80211_BAND_5GHZ
]
->
vht_cap
.
cap
|=
hw
->
wiphy
->
bands
[
IEEE80211_BAND_5GHZ
]
->
vht_cap
.
cap
|=
IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE
;
IEEE80211_VHT_CAP_SU_BEAMFORMER_CAPABLE
;
}
}
...
@@ -2385,7 +2388,19 @@ static void iwl_mvm_mac_cancel_hw_scan(struct ieee80211_hw *hw,
...
@@ -2385,7 +2388,19 @@ static void iwl_mvm_mac_cancel_hw_scan(struct ieee80211_hw *hw,
mutex_lock
(
&
mvm
->
mutex
);
mutex_lock
(
&
mvm
->
mutex
);
iwl_mvm_cancel_scan
(
mvm
);
/* Due to a race condition, it's possible that mac80211 asks
* us to stop a hw_scan when it's already stopped. This can
* happen, for instance, if we stopped the scan ourselves,
* called ieee80211_scan_completed() and the userspace called
* cancel scan scan before ieee80211_scan_work() could run.
* To handle that, simply return if the scan is not running.
*/
/* FIXME: for now, we ignore this race for UMAC scans, since
* they don't set the scan_status.
*/
if
((
mvm
->
scan_status
==
IWL_MVM_SCAN_OS
)
||
(
mvm
->
fw
->
ucode_capa
.
capa
[
0
]
&
IWL_UCODE_TLV_CAPA_UMAC_SCAN
))
iwl_mvm_cancel_scan
(
mvm
);
mutex_unlock
(
&
mvm
->
mutex
);
mutex_unlock
(
&
mvm
->
mutex
);
}
}
...
@@ -2743,12 +2758,29 @@ static int iwl_mvm_mac_sched_scan_stop(struct ieee80211_hw *hw,
...
@@ -2743,12 +2758,29 @@ static int iwl_mvm_mac_sched_scan_stop(struct ieee80211_hw *hw,
int
ret
;
int
ret
;
mutex_lock
(
&
mvm
->
mutex
);
mutex_lock
(
&
mvm
->
mutex
);
/* Due to a race condition, it's possible that mac80211 asks
* us to stop a sched_scan when it's already stopped. This
* can happen, for instance, if we stopped the scan ourselves,
* called ieee80211_sched_scan_stopped() and the userspace called
* stop sched scan scan before ieee80211_sched_scan_stopped_work()
* could run. To handle this, simply return if the scan is
* not running.
*/
/* FIXME: for now, we ignore this race for UMAC scans, since
* they don't set the scan_status.
*/
if
(
mvm
->
scan_status
!=
IWL_MVM_SCAN_SCHED
&&
!
(
mvm
->
fw
->
ucode_capa
.
capa
[
0
]
&
IWL_UCODE_TLV_CAPA_UMAC_SCAN
))
{
mutex_unlock
(
&
mvm
->
mutex
);
return
0
;
}
ret
=
iwl_mvm_scan_offload_stop
(
mvm
,
false
);
ret
=
iwl_mvm_scan_offload_stop
(
mvm
,
false
);
mutex_unlock
(
&
mvm
->
mutex
);
mutex_unlock
(
&
mvm
->
mutex
);
iwl_mvm_wait_for_async_handlers
(
mvm
);
iwl_mvm_wait_for_async_handlers
(
mvm
);
return
ret
;
return
ret
;
}
}
static
int
iwl_mvm_mac_set_key
(
struct
ieee80211_hw
*
hw
,
static
int
iwl_mvm_mac_set_key
(
struct
ieee80211_hw
*
hw
,
...
...
drivers/net/wireless/iwlwifi/mvm/scan.c
浏览文件 @
208d271a
...
@@ -587,8 +587,10 @@ int iwl_mvm_scan_offload_stop(struct iwl_mvm *mvm, bool notify)
...
@@ -587,8 +587,10 @@ int iwl_mvm_scan_offload_stop(struct iwl_mvm *mvm, bool notify)
if
(
mvm
->
scan_status
==
IWL_MVM_SCAN_NONE
)
if
(
mvm
->
scan_status
==
IWL_MVM_SCAN_NONE
)
return
0
;
return
0
;
if
(
iwl_mvm_is_radio_killed
(
mvm
))
if
(
iwl_mvm_is_radio_killed
(
mvm
))
{
ret
=
0
;
goto
out
;
goto
out
;
}
iwl_init_notification_wait
(
&
mvm
->
notif_wait
,
&
wait_scan_done
,
iwl_init_notification_wait
(
&
mvm
->
notif_wait
,
&
wait_scan_done
,
scan_done_notif
,
scan_done_notif
,
...
@@ -600,16 +602,14 @@ int iwl_mvm_scan_offload_stop(struct iwl_mvm *mvm, bool notify)
...
@@ -600,16 +602,14 @@ int iwl_mvm_scan_offload_stop(struct iwl_mvm *mvm, bool notify)
IWL_DEBUG_SCAN
(
mvm
,
"Send stop %sscan failed %d
\n
"
,
IWL_DEBUG_SCAN
(
mvm
,
"Send stop %sscan failed %d
\n
"
,
sched
?
"offloaded "
:
""
,
ret
);
sched
?
"offloaded "
:
""
,
ret
);
iwl_remove_notification
(
&
mvm
->
notif_wait
,
&
wait_scan_done
);
iwl_remove_notification
(
&
mvm
->
notif_wait
,
&
wait_scan_done
);
return
re
t
;
goto
ou
t
;
}
}
IWL_DEBUG_SCAN
(
mvm
,
"Successfully sent stop %sscan
\n
"
,
IWL_DEBUG_SCAN
(
mvm
,
"Successfully sent stop %sscan
\n
"
,
sched
?
"offloaded "
:
""
);
sched
?
"offloaded "
:
""
);
ret
=
iwl_wait_notification
(
&
mvm
->
notif_wait
,
&
wait_scan_done
,
1
*
HZ
);
ret
=
iwl_wait_notification
(
&
mvm
->
notif_wait
,
&
wait_scan_done
,
1
*
HZ
);
if
(
ret
)
out:
return
ret
;
/*
/*
* Clear the scan status so the next scan requests will succeed. This
* Clear the scan status so the next scan requests will succeed. This
* also ensures the Rx handler doesn't do anything, as the scan was
* also ensures the Rx handler doesn't do anything, as the scan was
...
@@ -619,7 +619,6 @@ int iwl_mvm_scan_offload_stop(struct iwl_mvm *mvm, bool notify)
...
@@ -619,7 +619,6 @@ int iwl_mvm_scan_offload_stop(struct iwl_mvm *mvm, bool notify)
if
(
mvm
->
scan_status
==
IWL_MVM_SCAN_OS
)
if
(
mvm
->
scan_status
==
IWL_MVM_SCAN_OS
)
iwl_mvm_unref
(
mvm
,
IWL_MVM_REF_SCAN
);
iwl_mvm_unref
(
mvm
,
IWL_MVM_REF_SCAN
);
out:
mvm
->
scan_status
=
IWL_MVM_SCAN_NONE
;
mvm
->
scan_status
=
IWL_MVM_SCAN_NONE
;
if
(
notify
)
{
if
(
notify
)
{
...
@@ -629,7 +628,7 @@ int iwl_mvm_scan_offload_stop(struct iwl_mvm *mvm, bool notify)
...
@@ -629,7 +628,7 @@ int iwl_mvm_scan_offload_stop(struct iwl_mvm *mvm, bool notify)
ieee80211_scan_completed
(
mvm
->
hw
,
true
);
ieee80211_scan_completed
(
mvm
->
hw
,
true
);
}
}
return
0
;
return
ret
;
}
}
static
void
iwl_mvm_unified_scan_fill_tx_cmd
(
struct
iwl_mvm
*
mvm
,
static
void
iwl_mvm_unified_scan_fill_tx_cmd
(
struct
iwl_mvm
*
mvm
,
...
...
drivers/net/wireless/iwlwifi/mvm/time-event.c
浏览文件 @
208d271a
...
@@ -197,6 +197,8 @@ iwl_mvm_te_handle_notify_csa(struct iwl_mvm *mvm,
...
@@ -197,6 +197,8 @@ iwl_mvm_te_handle_notify_csa(struct iwl_mvm *mvm,
struct
iwl_time_event_notif
*
notif
)
struct
iwl_time_event_notif
*
notif
)
{
{
if
(
!
le32_to_cpu
(
notif
->
status
))
{
if
(
!
le32_to_cpu
(
notif
->
status
))
{
if
(
te_data
->
vif
->
type
==
NL80211_IFTYPE_STATION
)
ieee80211_connection_loss
(
te_data
->
vif
);
IWL_DEBUG_TE
(
mvm
,
"CSA time event failed to start
\n
"
);
IWL_DEBUG_TE
(
mvm
,
"CSA time event failed to start
\n
"
);
iwl_mvm_te_clear_data
(
mvm
,
te_data
);
iwl_mvm_te_clear_data
(
mvm
,
te_data
);
return
;
return
;
...
@@ -756,8 +758,7 @@ void iwl_mvm_stop_roc(struct iwl_mvm *mvm)
...
@@ -756,8 +758,7 @@ void iwl_mvm_stop_roc(struct iwl_mvm *mvm)
* request
* request
*/
*/
list_for_each_entry
(
te_data
,
&
mvm
->
time_event_list
,
list
)
{
list_for_each_entry
(
te_data
,
&
mvm
->
time_event_list
,
list
)
{
if
(
te_data
->
vif
->
type
==
NL80211_IFTYPE_P2P_DEVICE
&&
if
(
te_data
->
vif
->
type
==
NL80211_IFTYPE_P2P_DEVICE
)
{
te_data
->
running
)
{
mvmvif
=
iwl_mvm_vif_from_mac80211
(
te_data
->
vif
);
mvmvif
=
iwl_mvm_vif_from_mac80211
(
te_data
->
vif
);
is_p2p
=
true
;
is_p2p
=
true
;
goto
remove_te
;
goto
remove_te
;
...
@@ -772,10 +773,8 @@ void iwl_mvm_stop_roc(struct iwl_mvm *mvm)
...
@@ -772,10 +773,8 @@ void iwl_mvm_stop_roc(struct iwl_mvm *mvm)
* request
* request
*/
*/
list_for_each_entry
(
te_data
,
&
mvm
->
aux_roc_te_list
,
list
)
{
list_for_each_entry
(
te_data
,
&
mvm
->
aux_roc_te_list
,
list
)
{
if
(
te_data
->
running
)
{
mvmvif
=
iwl_mvm_vif_from_mac80211
(
te_data
->
vif
);
mvmvif
=
iwl_mvm_vif_from_mac80211
(
te_data
->
vif
);
goto
remove_te
;
goto
remove_te
;
}
}
}
remove_te:
remove_te:
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录