xref: /freebsd/sys/contrib/dev/rtw88/wow.h (revision 2774f206809b8fd3a4904fe945f029a414fbc642)
1*2774f206SBjoern A. Zeeb /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
2*2774f206SBjoern A. Zeeb /* Copyright(c) 2018-2019  Realtek Corporation
3*2774f206SBjoern A. Zeeb  */
4*2774f206SBjoern A. Zeeb 
5*2774f206SBjoern A. Zeeb #ifndef __RTW_WOW_H__
6*2774f206SBjoern A. Zeeb #define __RTW_WOW_H__
7*2774f206SBjoern A. Zeeb 
8*2774f206SBjoern A. Zeeb #define PNO_CHECK_BYTE 4
9*2774f206SBjoern A. Zeeb 
10*2774f206SBjoern A. Zeeb enum rtw_wow_pattern_type {
11*2774f206SBjoern A. Zeeb 	RTW_PATTERN_BROADCAST = 0,
12*2774f206SBjoern A. Zeeb 	RTW_PATTERN_MULTICAST,
13*2774f206SBjoern A. Zeeb 	RTW_PATTERN_UNICAST,
14*2774f206SBjoern A. Zeeb 	RTW_PATTERN_VALID,
15*2774f206SBjoern A. Zeeb 	RTW_PATTERN_INVALID,
16*2774f206SBjoern A. Zeeb };
17*2774f206SBjoern A. Zeeb 
18*2774f206SBjoern A. Zeeb enum rtw_wake_reason {
19*2774f206SBjoern A. Zeeb 	RTW_WOW_RSN_RX_PTK_REKEY = 0x1,
20*2774f206SBjoern A. Zeeb 	RTW_WOW_RSN_RX_GTK_REKEY = 0x2,
21*2774f206SBjoern A. Zeeb 	RTW_WOW_RSN_RX_DEAUTH = 0x8,
22*2774f206SBjoern A. Zeeb 	RTW_WOW_RSN_DISCONNECT = 0x10,
23*2774f206SBjoern A. Zeeb 	RTW_WOW_RSN_RX_MAGIC_PKT = 0x21,
24*2774f206SBjoern A. Zeeb 	RTW_WOW_RSN_RX_PATTERN_MATCH = 0x23,
25*2774f206SBjoern A. Zeeb 	RTW_WOW_RSN_RX_NLO = 0x55,
26*2774f206SBjoern A. Zeeb };
27*2774f206SBjoern A. Zeeb 
28*2774f206SBjoern A. Zeeb struct rtw_fw_media_status_iter_data {
29*2774f206SBjoern A. Zeeb 	struct rtw_dev *rtwdev;
30*2774f206SBjoern A. Zeeb 	u8 connect;
31*2774f206SBjoern A. Zeeb };
32*2774f206SBjoern A. Zeeb 
33*2774f206SBjoern A. Zeeb struct rtw_fw_key_type_iter_data {
34*2774f206SBjoern A. Zeeb 	struct rtw_dev *rtwdev;
35*2774f206SBjoern A. Zeeb 	u8 group_key_type;
36*2774f206SBjoern A. Zeeb 	u8 pairwise_key_type;
37*2774f206SBjoern A. Zeeb };
38*2774f206SBjoern A. Zeeb 
rtw_wow_mgd_linked(struct rtw_dev * rtwdev)39*2774f206SBjoern A. Zeeb static inline bool rtw_wow_mgd_linked(struct rtw_dev *rtwdev)
40*2774f206SBjoern A. Zeeb {
41*2774f206SBjoern A. Zeeb 	struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
42*2774f206SBjoern A. Zeeb 	struct rtw_vif *rtwvif = (struct rtw_vif *)wow_vif->drv_priv;
43*2774f206SBjoern A. Zeeb 
44*2774f206SBjoern A. Zeeb 	return (rtwvif->net_type == RTW_NET_MGD_LINKED);
45*2774f206SBjoern A. Zeeb }
46*2774f206SBjoern A. Zeeb 
rtw_wow_no_link(struct rtw_dev * rtwdev)47*2774f206SBjoern A. Zeeb static inline bool rtw_wow_no_link(struct rtw_dev *rtwdev)
48*2774f206SBjoern A. Zeeb {
49*2774f206SBjoern A. Zeeb 	struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
50*2774f206SBjoern A. Zeeb 	struct rtw_vif *rtwvif = (struct rtw_vif *)wow_vif->drv_priv;
51*2774f206SBjoern A. Zeeb 
52*2774f206SBjoern A. Zeeb 	return (rtwvif->net_type == RTW_NET_NO_LINK);
53*2774f206SBjoern A. Zeeb }
54*2774f206SBjoern A. Zeeb 
55*2774f206SBjoern A. Zeeb int rtw_wow_suspend(struct rtw_dev *rtwdev, struct cfg80211_wowlan *wowlan);
56*2774f206SBjoern A. Zeeb int rtw_wow_resume(struct rtw_dev *rtwdev);
57*2774f206SBjoern A. Zeeb 
58*2774f206SBjoern A. Zeeb #endif
59