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