1*4882a593Smuzhiyun /****************************************************************************** 2*4882a593Smuzhiyun * 3*4882a593Smuzhiyun * Copyright(c) 2007 - 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 __RTW_WOW_H_ 16*4882a593Smuzhiyun #define __RTW_WOW_H_ 17*4882a593Smuzhiyun 18*4882a593Smuzhiyun #ifdef CONFIG_WOWLAN 19*4882a593Smuzhiyun /* WoWLAN Info define */ 20*4882a593Smuzhiyun /*=========================== Remote Control Info =========================== */ 21*4882a593Smuzhiyun #define REMOTECTRL_INFO_VALID_CHECK 0xdd 22*4882a593Smuzhiyun #define REMOTECTRL_INFO_SYMBOL_CHK_PTK BIT0 23*4882a593Smuzhiyun #define REMOTECTRL_INFO_SYMBOL_CHK_GTK BIT1 24*4882a593Smuzhiyun /*============================================================================*/ 25*4882a593Smuzhiyun #ifdef CONFIG_PLATFORM_ANDROID_INTEL_X86 26*4882a593Smuzhiyun /* TCP/ICMP/UDP multicast with specific IP addr */ 27*4882a593Smuzhiyun #define DEFAULT_PATTERN_NUM 4 28*4882a593Smuzhiyun #else 29*4882a593Smuzhiyun /* TCP/ICMP */ 30*4882a593Smuzhiyun #define DEFAULT_PATTERN_NUM 3 31*4882a593Smuzhiyun #endif 32*4882a593Smuzhiyun 33*4882a593Smuzhiyun #define MAX_WKFM_CAM_NUM 18 /* same as MAX_WOW_CAM_NUM */ 34*4882a593Smuzhiyun 35*4882a593Smuzhiyun #define MAX_WKFM_SIZE 16 /* (16 bytes for WKFM bit mask, 16*8 = 128 bits) */ 36*4882a593Smuzhiyun #define MAX_WKFM_PATTERN_SIZE 128 37*4882a593Smuzhiyun 38*4882a593Smuzhiyun /* 39*4882a593Smuzhiyun * MAX_WKFM_PATTERN_STR_LEN : the max. length of wow pattern string 40*4882a593Smuzhiyun * e.g. echo 00:01:02:...:7f > /proc/net/rtl88x2bu/wlan0/wow_pattern_info 41*4882a593Smuzhiyun * - each byte of pattern is represented as 2-bytes ascii : MAX_WKFM_PATTERN_SIZE * 2 42*4882a593Smuzhiyun * - the number of common ':' in pattern string : MAX_WKFM_PATTERN_SIZE - 1 43*4882a593Smuzhiyun * - 1 byte '\n'(0x0a) is generated at the end when we use echo command 44*4882a593Smuzhiyun * so total max. length is (MAX_WKFM_PATTERN_SIZE * 3) 45*4882a593Smuzhiyun */ 46*4882a593Smuzhiyun #define MAX_WKFM_PATTERN_STR_LEN (MAX_WKFM_PATTERN_SIZE * 3) 47*4882a593Smuzhiyun 48*4882a593Smuzhiyun #define WKFMCAM_ADDR_NUM 6 49*4882a593Smuzhiyun #define WKFMCAM_SIZE 24 /* each entry need 6*4 bytes */ 50*4882a593Smuzhiyun 51*4882a593Smuzhiyun struct aoac_report { 52*4882a593Smuzhiyun u8 iv[8]; 53*4882a593Smuzhiyun u8 replay_counter_eapol_key[8]; 54*4882a593Smuzhiyun u8 group_key[32]; 55*4882a593Smuzhiyun u8 key_index; 56*4882a593Smuzhiyun u8 security_type; 57*4882a593Smuzhiyun u8 wow_pattern_idx; 58*4882a593Smuzhiyun u8 version_info; 59*4882a593Smuzhiyun u8 rekey_ok:1; 60*4882a593Smuzhiyun u8 dummy:7; 61*4882a593Smuzhiyun u8 reserved[3]; 62*4882a593Smuzhiyun u8 rxptk_iv[8]; 63*4882a593Smuzhiyun u8 rxgtk_iv[4][8]; 64*4882a593Smuzhiyun }; 65*4882a593Smuzhiyun 66*4882a593Smuzhiyun enum pattern_type { 67*4882a593Smuzhiyun RTW_INVALID_PATTERN, 68*4882a593Smuzhiyun RTW_DEFAULT_PATTERN, 69*4882a593Smuzhiyun RTW_CUSTOMIZED_PATTERN, 70*4882a593Smuzhiyun }; 71*4882a593Smuzhiyun 72*4882a593Smuzhiyun enum rtw_wow_dev2hst_gpio { 73*4882a593Smuzhiyun DEV2HST_GPIO_OUTPUT = 0, 74*4882a593Smuzhiyun DEV2HST_GPIO_INPUT = 1 75*4882a593Smuzhiyun }; 76*4882a593Smuzhiyun 77*4882a593Smuzhiyun enum rtw_wow_dev2hst_active { 78*4882a593Smuzhiyun DEV2HST_LOW_ACTIVE = 0, 79*4882a593Smuzhiyun DEV2HST_HIGH_ACTIVE = 1 80*4882a593Smuzhiyun }; 81*4882a593Smuzhiyun 82*4882a593Smuzhiyun enum rtw_wow_dev2hst_toggle_pulse { 83*4882a593Smuzhiyun DEV2HST_TOGGLE = 0, 84*4882a593Smuzhiyun DEV2HST_PULSE = 1 85*4882a593Smuzhiyun }; 86*4882a593Smuzhiyun 87*4882a593Smuzhiyun enum rtw_wow_dev2hst_time_unit { 88*4882a593Smuzhiyun DEV2HST_32US = 0, 89*4882a593Smuzhiyun DEV2HST_4MS = 1 90*4882a593Smuzhiyun }; 91*4882a593Smuzhiyun 92*4882a593Smuzhiyun typedef struct rtl_priv_pattern { 93*4882a593Smuzhiyun int len; 94*4882a593Smuzhiyun char content[MAX_WKFM_PATTERN_SIZE]; 95*4882a593Smuzhiyun char mask[MAX_WKFM_SIZE]; 96*4882a593Smuzhiyun } rtl_priv_pattern_t; 97*4882a593Smuzhiyun 98*4882a593Smuzhiyun struct wow_priv { 99*4882a593Smuzhiyun struct rtw_wow_gpio_info wow_gpio; 100*4882a593Smuzhiyun struct rtw_disc_det_info wow_disc; 101*4882a593Smuzhiyun #ifdef CONFIG_PNO_SUPPORT 102*4882a593Smuzhiyun struct rtw_nlo_info wow_nlo; 103*4882a593Smuzhiyun #endif 104*4882a593Smuzhiyun enum pattern_type wow_ptrn_valid[MAX_WKFM_CAM_NUM]; 105*4882a593Smuzhiyun }; 106*4882a593Smuzhiyun 107*4882a593Smuzhiyun void rtw_init_wow(_adapter *padapter); 108*4882a593Smuzhiyun void rtw_free_wow(_adapter *adapter); 109*4882a593Smuzhiyun void rtw_get_sec_iv(_adapter *padapter, u8 *pcur_dot11txpn, u8 *StaAddr); 110*4882a593Smuzhiyun bool rtw_wowlan_parser_pattern_cmd(u8 *input, char *pattern, 111*4882a593Smuzhiyun int *pattern_len, char *bit_mask); 112*4882a593Smuzhiyun u8 rtw_wow_pattern_set(_adapter *adapter, 113*4882a593Smuzhiyun struct rtw_wowcam_upd_info * wowcam_info, 114*4882a593Smuzhiyun enum pattern_type set_type); 115*4882a593Smuzhiyun void rtw_wow_pattern_clean(_adapter *adapter, enum pattern_type clean_type); 116*4882a593Smuzhiyun void rtw_set_default_pattern(_adapter *adapter); 117*4882a593Smuzhiyun void rtw_wow_pattern_sw_dump(_adapter *adapter); 118*4882a593Smuzhiyun void rtw_construct_remote_control_info(_adapter *adapter, 119*4882a593Smuzhiyun struct rtw_remote_wake_ctrl_info *ctrl_info); 120*4882a593Smuzhiyun void rtw_wow_lps_level_decide(_adapter *adapter, u8 wow_en); 121*4882a593Smuzhiyun int rtw_pm_set_wow_lps(_adapter *padapter, u8 mode); 122*4882a593Smuzhiyun int rtw_pm_set_wow_lps_level(_adapter *padapter, u8 level); 123*4882a593Smuzhiyun #ifdef CONFIG_LPS_1T1R 124*4882a593Smuzhiyun int rtw_pm_set_wow_lps_1t1r(_adapter *padapter, u8 en); 125*4882a593Smuzhiyun #endif 126*4882a593Smuzhiyun #ifdef CONFIG_GTK_OL 127*4882a593Smuzhiyun void rtw_update_gtk_ofld_info(void *drv_priv, struct rtw_aoac_report *aoac_info, 128*4882a593Smuzhiyun u8 aoac_report_get_ok, u8 phase); 129*4882a593Smuzhiyun #endif 130*4882a593Smuzhiyun bool _rtw_wow_chk_cap(_adapter *adapter, u8 cap); 131*4882a593Smuzhiyun void rtw_wowlan_set_pattern_cast_type(_adapter *adapter, struct rtw_wowcam_upd_info *wowcam_info); 132*4882a593Smuzhiyun #endif /* CONFIG_WOWLAN */ 133*4882a593Smuzhiyun 134*4882a593Smuzhiyun #ifdef CONFIG_PNO_SUPPORT 135*4882a593Smuzhiyun #define MAX_NLO_SCAN_PLANS 2 136*4882a593Smuzhiyun #define MAX_NLO_SCAN_PERIOD 60 137*4882a593Smuzhiyun #define MAX_NLO_NORMAL_SCAN_CYCLE 255 138*4882a593Smuzhiyun #define NLO_DEFAULT_SCAN_DELAY 3 139*4882a593Smuzhiyun int rtw_nlo_enable(struct net_device *net, struct cfg80211_ssid *ssids, 140*4882a593Smuzhiyun int n_ssids, struct ieee80211_channel **channels, 141*4882a593Smuzhiyun u32 n_channels, u32 delay, u32 interval, u32 iterations, 142*4882a593Smuzhiyun u32 slow_interval); 143*4882a593Smuzhiyun int rtw_nlo_disable(struct net_device *net); 144*4882a593Smuzhiyun void rtw_nlo_debug(struct net_device * net); 145*4882a593Smuzhiyun #endif /* CONFIG_PNO_SUPPORT */ 146*4882a593Smuzhiyun 147*4882a593Smuzhiyun #endif /* __RTW_WOW_H_ */ 148