xref: /OK3568_Linux_fs/external/rkwifibt/drivers/rtl8852be/phl/phl_wow.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /******************************************************************************
2*4882a593Smuzhiyun  *
3*4882a593Smuzhiyun  * Copyright(c)2019 Realtek Corporation.
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * This program is free software; you can redistribute it and/or modify it
6*4882a593Smuzhiyun  * under the terms of version 2 of the GNU General Public License as
7*4882a593Smuzhiyun  * published by the Free Software Foundation.
8*4882a593Smuzhiyun  *
9*4882a593Smuzhiyun  * This program is distributed in the hope that it will be useful, but WITHOUT
10*4882a593Smuzhiyun  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11*4882a593Smuzhiyun  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12*4882a593Smuzhiyun  * more details.
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  *****************************************************************************/
15*4882a593Smuzhiyun #ifndef _PHL_WOW_H_
16*4882a593Smuzhiyun #define _PHL_WOW_H_
17*4882a593Smuzhiyun 
18*4882a593Smuzhiyun #define WOW_HUBMSG_MAXLEN 50
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun #define PHL_WOW_ERR_DL_FW BIT0
21*4882a593Smuzhiyun #define PHL_WOW_ERR_PKT_OFLD BIT1
22*4882a593Smuzhiyun #define PHL_WOW_ERR_FUNC_EN BIT2
23*4882a593Smuzhiyun #define PHL_WOW_ERR_FUNC_DIS BIT3
24*4882a593Smuzhiyun #define PHL_WOW_ERR_MAC BIT4
25*4882a593Smuzhiyun #define PHL_WOW_ERR_TRX BIT5
26*4882a593Smuzhiyun #define PHL_WOW_ERR_HW BIT6
27*4882a593Smuzhiyun 
28*4882a593Smuzhiyun #define phl_to_wow_info(_phl) (&_phl->wow_info)
29*4882a593Smuzhiyun #define get_wow_pairwise_algo_type(_wow_info) (_wow_info->wow_wake_info.pairwise_sec_algo)
30*4882a593Smuzhiyun #define get_wow_group_algo_type(_wow_info) (_wow_info->wow_wake_info.group_sec_algo)
31*4882a593Smuzhiyun 
32*4882a593Smuzhiyun struct phl_wow_error {
33*4882a593Smuzhiyun 	u16 init;
34*4882a593Smuzhiyun 	u16 deinit;
35*4882a593Smuzhiyun };
36*4882a593Smuzhiyun 
37*4882a593Smuzhiyun struct phl_wow_stat {
38*4882a593Smuzhiyun 	/* init */
39*4882a593Smuzhiyun 	u8 func_en;
40*4882a593Smuzhiyun 	enum rtw_wow_op_mode op_mode;
41*4882a593Smuzhiyun 	u8 keep_alive_en;
42*4882a593Smuzhiyun 	u8 disc_det_en;
43*4882a593Smuzhiyun 	u8 arp_en;
44*4882a593Smuzhiyun 	u8 ndp_en;
45*4882a593Smuzhiyun 	u8 gtk_en;
46*4882a593Smuzhiyun 	u8 dot11w_en;
47*4882a593Smuzhiyun 	/* deinit */
48*4882a593Smuzhiyun 	enum rtw_wow_wake_reason wake_rsn;
49*4882a593Smuzhiyun 	enum rtw_mac_pwr_st mac_pwr;
50*4882a593Smuzhiyun 	/* common */
51*4882a593Smuzhiyun 	struct phl_wow_error err;
52*4882a593Smuzhiyun 	u8 aoac_rpt_fail_cnt;
53*4882a593Smuzhiyun };
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun struct phl_wow_info {
56*4882a593Smuzhiyun 	/* common */
57*4882a593Smuzhiyun 	struct phl_info_t *phl_info;
58*4882a593Smuzhiyun 	_os_lock wow_lock;
59*4882a593Smuzhiyun 	u8 wow_msg[WOW_HUBMSG_MAXLEN];
60*4882a593Smuzhiyun 	struct phl_wow_stat wow_stat;
61*4882a593Smuzhiyun 
62*4882a593Smuzhiyun 	/* general info, should reset */
63*4882a593Smuzhiyun 	u8 func_en;
64*4882a593Smuzhiyun 	struct phl_wow_error err;
65*4882a593Smuzhiyun 	struct rtw_phl_stainfo_t *sta;
66*4882a593Smuzhiyun 	enum rtw_wow_op_mode op_mode;
67*4882a593Smuzhiyun 	u8 ps_pwr_lvl;
68*4882a593Smuzhiyun 	enum rtw_mac_pwr_st mac_pwr;
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun 	/* pkt ofld token */
71*4882a593Smuzhiyun 	u32 null_pkt_token;
72*4882a593Smuzhiyun 	u32 arp_pkt_token;
73*4882a593Smuzhiyun 	u32 ndp_pkt_token;
74*4882a593Smuzhiyun 	u32 eapol_key_pkt_token;
75*4882a593Smuzhiyun 	u32 sa_query_pkt_token;
76*4882a593Smuzhiyun 	u32 kapkt_pkt_token;
77*4882a593Smuzhiyun 	u32 ack_pkt_token;
78*4882a593Smuzhiyun 	u32 wp_token;
79*4882a593Smuzhiyun 	u32 probe_req_pkt_token;
80*4882a593Smuzhiyun 
81*4882a593Smuzhiyun 	/* func */
82*4882a593Smuzhiyun 	struct rtw_keep_alive_info keep_alive_info;
83*4882a593Smuzhiyun 	struct rtw_disc_det_info disc_det_info;
84*4882a593Smuzhiyun 	struct rtw_nlo_info nlo_info;
85*4882a593Smuzhiyun 	struct rtw_arp_ofld_info arp_ofld_info;
86*4882a593Smuzhiyun 	struct rtw_ndp_ofld_info ndp_ofld_info;
87*4882a593Smuzhiyun 	struct rtw_gtk_ofld_info gtk_ofld_info;
88*4882a593Smuzhiyun 	struct rtw_realwow_info realwow_info;
89*4882a593Smuzhiyun 	struct rtw_wow_wake_info wow_wake_info;
90*4882a593Smuzhiyun 	struct rtw_pattern_match_info pattern_match_info;
91*4882a593Smuzhiyun 	struct rtw_wow_gpio_info wow_gpio;
92*4882a593Smuzhiyun 
93*4882a593Smuzhiyun 	/* info to core */
94*4882a593Smuzhiyun 	enum rtw_wow_wake_reason wake_rsn;
95*4882a593Smuzhiyun 	struct rtw_aoac_report aoac_info;
96*4882a593Smuzhiyun };
97*4882a593Smuzhiyun 
98*4882a593Smuzhiyun enum rtw_phl_status phl_wow_mdl_init(struct phl_info_t* phl_info);
99*4882a593Smuzhiyun void phl_wow_mdl_deinit(struct phl_info_t* phl_info);
100*4882a593Smuzhiyun 
101*4882a593Smuzhiyun #ifdef CONFIG_WOWLAN
102*4882a593Smuzhiyun 
103*4882a593Smuzhiyun void phl_record_wow_stat(struct phl_wow_info *wow_info);
104*4882a593Smuzhiyun 
105*4882a593Smuzhiyun void phl_wow_handle_wake_rsn(struct phl_wow_info *wow_info, u8 *reset);
106*4882a593Smuzhiyun 
107*4882a593Smuzhiyun enum rtw_phl_status phl_wow_init_precfg(struct phl_wow_info *wow_info);
108*4882a593Smuzhiyun 
109*4882a593Smuzhiyun enum rtw_phl_status phl_wow_init_postcfg(struct phl_wow_info *wow_info);
110*4882a593Smuzhiyun 
111*4882a593Smuzhiyun enum rtw_phl_status phl_wow_deinit_precfg(struct phl_wow_info *wow_info);
112*4882a593Smuzhiyun 
113*4882a593Smuzhiyun enum rtw_phl_status phl_wow_deinit_postcfg(struct phl_wow_info *wow_info);
114*4882a593Smuzhiyun 
115*4882a593Smuzhiyun void phl_reset_wow_info(struct phl_wow_info *wow_info);
116*4882a593Smuzhiyun 
117*4882a593Smuzhiyun enum rtw_phl_status phl_wow_func_en(struct phl_wow_info *wow_info);
118*4882a593Smuzhiyun 
119*4882a593Smuzhiyun void phl_wow_func_dis(struct phl_wow_info *wow_info);
120*4882a593Smuzhiyun 
121*4882a593Smuzhiyun void phl_wow_decide_op_mode(struct phl_wow_info *wow_info, struct rtw_phl_stainfo_t *sta);
122*4882a593Smuzhiyun #ifdef CONFIG_POWER_SAVE
123*4882a593Smuzhiyun enum rtw_phl_status phl_wow_ps_proto_cfg(struct phl_wow_info *wow_info, bool enter_ps);
124*4882a593Smuzhiyun 
125*4882a593Smuzhiyun void phl_wow_ps_pwr_ntfy(struct phl_wow_info *wow_info, bool enter_ps);
126*4882a593Smuzhiyun 
127*4882a593Smuzhiyun enum rtw_phl_status phl_wow_ps_pwr_cfg(struct phl_wow_info *wow_info, bool enter_ps);
128*4882a593Smuzhiyun #endif
129*4882a593Smuzhiyun #endif /* CONFIG_WOWLAN */
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #endif /* _PHL_WOW_H_ */
132