#define BTCOEX_ALIVE BIT(4)
#endif // CONFIG_BT_COEXIST
+#ifdef CONFIG_WOWLAN
+#define MAX_WKFM_NUM 16 /* Frame Mask Cam number for pattern match */
+#define MAX_WKFM_SIZE 16 /* (16 bytes for WKFM bit mask, 16*8 = 128 bits) */
+#define MAX_WKFM_PATTERN_SIZE 128
+#define WKFMCAM_ADDR_NUM 6
+#define WKFMCAM_SIZE 24 /* each entry need 6*4 bytes */
+enum pattern_type {
+ PATTERN_BROADCAST = 0,
+ PATTERN_MULTICAST,
+ PATTERN_UNICAST,
+ PATTERN_VALID,
+ PATTERN_INVALID,
+};
+
+typedef struct rtl_priv_pattern {
+ int len;
+ char content[MAX_WKFM_PATTERN_SIZE];
+ char mask[MAX_WKFM_SIZE];
+} rtl_priv_pattern_t;
+
+struct rtl_wow_pattern {
+ u16 crc;
+ u8 type;
+ u32 mask[4];
+};
+#endif /* CONFIG_WOWLAN */
enum Power_Mgnt
{
#ifdef CONFIG_PNO_SUPPORT
#define MAX_PNO_LIST_COUNT 16
-#define MAX_SCAN_LIST_COUNT 14 //2.4G only
+#define MAX_SCAN_LIST_COUNT 14 //2.4G only
+#define MAX_HIDDEN_AP 8 //8 hidden AP
#endif
/*
typedef struct pno_nlo_info
{
u32 fast_scan_period; //Fast scan period
- u32 ssid_num; //number of entry
+ u8 ssid_num; //number of entry
+ u8 hidden_ssid_num;
u32 slow_scan_period; //slow scan period
u32 fast_scan_iterations; //Fast scan iterations
u8 ssid_length[MAX_PNO_LIST_COUNT]; //SSID Length Array
u8 ssid_cipher_info[MAX_PNO_LIST_COUNT]; //Cipher information for security
u8 ssid_channel_info[MAX_PNO_LIST_COUNT]; //channel information
-}pno_nlo_info_t;
+ u8 loc_probe_req[MAX_HIDDEN_AP]; //loc_probeReq
+}pno_nlo_info_t;
typedef struct pno_ssid {
u32 SSID_len;
uint ips_enter_cnts;
uint ips_leave_cnts;
+ uint lps_enter_cnts;
+ uint lps_leave_cnts;
u8 ips_mode;
u8 ips_org_mode;
u8 wowlan_wake_reason;
u8 wowlan_ap_mode;
u8 wowlan_mode;
+ u8 wowlan_p2p_mode;
+ u8 wowlan_pno_enable;
+#ifdef CONFIG_GPIO_WAKEUP
+ u8 is_high_active;
+#endif /* CONFIG_GPIO_WAKEUP */
#ifdef CONFIG_WOWLAN
+ u8 wowlan_txpause_status;
u8 wowlan_pattern;
- u8 wowlan_magic;
- u8 wowlan_unicast;
u8 wowlan_pattern_idx;
- u8 wowlan_pno_enable;
+ u64 wowlan_fw_iv;
+ struct rtl_priv_pattern patterns[MAX_WKFM_NUM];
#ifdef CONFIG_PNO_SUPPORT
u8 pno_in_resume;
+ u8 pno_inited;
pno_nlo_info_t *pnlo_info;
pno_scan_info_t *pscan_info;
pno_ssid_list_t *pno_ssid_list;
-#endif
- u32 wowlan_pattern_context[8][5];
- u64 wowlan_fw_iv;
-#endif // CONFIG_WOWLAN
+#endif /* CONFIG_PNO_SUPPORT */
+#endif /* CONFIG_WOWLAN */
_timer pwr_state_check_timer;
int pwr_state_check_interval;
u8 pwr_state_check_cnts;
extern void LPS_Leave_check(PADAPTER padapter);
#endif
-extern void rtw_set_ps_mode(PADAPTER padapter, u8 ps_mode, u8 smart_ps, u8 bcn_ant_mode, const char *msg);
-extern void rtw_set_rpwm(_adapter * padapter, u8 val8);
extern void LeaveAllPowerSaveMode(PADAPTER Adapter);
extern void LeaveAllPowerSaveModeDirect(PADAPTER Adapter);
#ifdef CONFIG_IPS
s32 LPS_RF_ON_check(PADAPTER padapter, u32 delay_ms);
void LPS_Enter(PADAPTER padapter, const char *msg);
void LPS_Leave(PADAPTER padapter, const char *msg);
-void traffic_check_for_leave_lps(PADAPTER padapter, u8 tx, u32 tx_packets);
+void traffic_check_for_leave_lps(PADAPTER padapter, u8 tx, u32 tx_packets);
+void rtw_set_ps_mode(PADAPTER padapter, u8 ps_mode, u8 smart_ps, u8 bcn_ant_mode, const char *msg);
+void rtw_set_fw_in_ips_mode(PADAPTER padapter, u8 enable);
+void rtw_set_rpwm(_adapter * padapter, u8 val8);
#endif
#ifdef CONFIG_RESUME_IN_WORKQUEUE
void rtw_ps_deny_cancel(PADAPTER padapter, PS_DENY_REASON reason);
u32 rtw_ps_deny_get(PADAPTER padapter);
+#if defined(CONFIG_WOWLAN)
+void rtw_get_current_ip_address(PADAPTER padapter, u8 *pcurrentip);
+void rtw_get_sec_iv(PADAPTER padapter, u8 *pcur_dot11txpn, u8 *StaAddr);
+void rtw_set_sec_pn(_adapter *padapter);
+bool rtw_check_pattern_valid(u8 *input, u8 len);
+bool rtw_write_to_frame_mask(_adapter *adapter, u8 idx,
+ struct rtl_wow_pattern *content);
+
+bool rtw_read_from_frame_mask(_adapter *adapter, u8 idx);
+void rtw_dump_priv_pattern(_adapter *adapter, u8 idx);
+void rtw_clean_pattern(_adapter *adapter);
+#endif /* CONFIG_WOWLAN */
#endif //__RTL871X_PWRCTRL_H_