mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2025-01-07 14:24:18 +08:00
5c831644e1
This handles the situation when firmware crashes. When firmware crashes, it will send an interrupt, and driver will queue a work for recovery. In the work, driver will reset it's internal association state, which includes removing associated sta's macid, resetting vifs' states and removing keys. After resetting the driver's state, driver will call rtw_enter_ips() to force the chipset power off to reset the chip. Finally, driver calls ieee80211_restart_hw() to inform mac80211 stack to restart. Since only 8822c firmware supports this feature, the interrupt will only be triggered when 8822c chipset is loaded. Signed-off-by: Tzu-En Huang <tehuang@realtek.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org> Link: https://lore.kernel.org/r/20200925061219.23754-3-tehuang@realtek.com
39 lines
1.2 KiB
C
39 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
|
|
/* Copyright(c) 2018-2019 Realtek Corporation
|
|
*/
|
|
|
|
#ifndef __RTW_UTIL_H__
|
|
#define __RTW_UTIL_H__
|
|
|
|
struct rtw_dev;
|
|
|
|
#define rtw_iterate_vifs(rtwdev, iterator, data) \
|
|
ieee80211_iterate_active_interfaces(rtwdev->hw, \
|
|
IEEE80211_IFACE_ITER_NORMAL, iterator, data)
|
|
#define rtw_iterate_vifs_atomic(rtwdev, iterator, data) \
|
|
ieee80211_iterate_active_interfaces_atomic(rtwdev->hw, \
|
|
IEEE80211_IFACE_ITER_NORMAL, iterator, data)
|
|
#define rtw_iterate_stas_atomic(rtwdev, iterator, data) \
|
|
ieee80211_iterate_stations_atomic(rtwdev->hw, iterator, data)
|
|
#define rtw_iterate_keys(rtwdev, vif, iterator, data) \
|
|
ieee80211_iter_keys(rtwdev->hw, vif, iterator, data)
|
|
#define rtw_iterate_keys_rcu(rtwdev, vif, iterator, data) \
|
|
ieee80211_iter_keys_rcu((rtwdev)->hw, vif, iterator, data)
|
|
|
|
static inline u8 *get_hdr_bssid(struct ieee80211_hdr *hdr)
|
|
{
|
|
__le16 fc = hdr->frame_control;
|
|
u8 *bssid;
|
|
|
|
if (ieee80211_has_tods(fc))
|
|
bssid = hdr->addr1;
|
|
else if (ieee80211_has_fromds(fc))
|
|
bssid = hdr->addr2;
|
|
else
|
|
bssid = hdr->addr3;
|
|
|
|
return bssid;
|
|
}
|
|
|
|
#endif
|