162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */
262306a36Sopenharmony_ci/* Copyright(c) 2018-2019  Realtek Corporation
362306a36Sopenharmony_ci */
462306a36Sopenharmony_ci
562306a36Sopenharmony_ci#ifndef __RTW_WOW_H__
662306a36Sopenharmony_ci#define __RTW_WOW_H__
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#define PNO_CHECK_BYTE 4
962306a36Sopenharmony_ci
1062306a36Sopenharmony_cienum rtw_wow_pattern_type {
1162306a36Sopenharmony_ci	RTW_PATTERN_BROADCAST = 0,
1262306a36Sopenharmony_ci	RTW_PATTERN_MULTICAST,
1362306a36Sopenharmony_ci	RTW_PATTERN_UNICAST,
1462306a36Sopenharmony_ci	RTW_PATTERN_VALID,
1562306a36Sopenharmony_ci	RTW_PATTERN_INVALID,
1662306a36Sopenharmony_ci};
1762306a36Sopenharmony_ci
1862306a36Sopenharmony_cienum rtw_wake_reason {
1962306a36Sopenharmony_ci	RTW_WOW_RSN_RX_PTK_REKEY = 0x1,
2062306a36Sopenharmony_ci	RTW_WOW_RSN_RX_GTK_REKEY = 0x2,
2162306a36Sopenharmony_ci	RTW_WOW_RSN_RX_DEAUTH = 0x8,
2262306a36Sopenharmony_ci	RTW_WOW_RSN_DISCONNECT = 0x10,
2362306a36Sopenharmony_ci	RTW_WOW_RSN_RX_MAGIC_PKT = 0x21,
2462306a36Sopenharmony_ci	RTW_WOW_RSN_RX_PATTERN_MATCH = 0x23,
2562306a36Sopenharmony_ci	RTW_WOW_RSN_RX_NLO = 0x55,
2662306a36Sopenharmony_ci};
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_cistruct rtw_fw_media_status_iter_data {
2962306a36Sopenharmony_ci	struct rtw_dev *rtwdev;
3062306a36Sopenharmony_ci	u8 connect;
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistruct rtw_fw_key_type_iter_data {
3462306a36Sopenharmony_ci	struct rtw_dev *rtwdev;
3562306a36Sopenharmony_ci	u8 group_key_type;
3662306a36Sopenharmony_ci	u8 pairwise_key_type;
3762306a36Sopenharmony_ci};
3862306a36Sopenharmony_ci
3962306a36Sopenharmony_cistatic inline bool rtw_wow_mgd_linked(struct rtw_dev *rtwdev)
4062306a36Sopenharmony_ci{
4162306a36Sopenharmony_ci	struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
4262306a36Sopenharmony_ci	struct rtw_vif *rtwvif = (struct rtw_vif *)wow_vif->drv_priv;
4362306a36Sopenharmony_ci
4462306a36Sopenharmony_ci	return (rtwvif->net_type == RTW_NET_MGD_LINKED);
4562306a36Sopenharmony_ci}
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic inline bool rtw_wow_no_link(struct rtw_dev *rtwdev)
4862306a36Sopenharmony_ci{
4962306a36Sopenharmony_ci	struct ieee80211_vif *wow_vif = rtwdev->wow.wow_vif;
5062306a36Sopenharmony_ci	struct rtw_vif *rtwvif = (struct rtw_vif *)wow_vif->drv_priv;
5162306a36Sopenharmony_ci
5262306a36Sopenharmony_ci	return (rtwvif->net_type == RTW_NET_NO_LINK);
5362306a36Sopenharmony_ci}
5462306a36Sopenharmony_ci
5562306a36Sopenharmony_ciint rtw_wow_suspend(struct rtw_dev *rtwdev, struct cfg80211_wowlan *wowlan);
5662306a36Sopenharmony_ciint rtw_wow_resume(struct rtw_dev *rtwdev);
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci#endif
59