1*4882a593Smuzhiyun 2*4882a593Smuzhiyun #ifndef _wl_escan_ 3*4882a593Smuzhiyun #define _wl_escan_ 4*4882a593Smuzhiyun #include <linuxver.h> 5*4882a593Smuzhiyun #if defined(WL_WIRELESS_EXT) 6*4882a593Smuzhiyun #include <wl_iw.h> 7*4882a593Smuzhiyun #endif /* WL_WIRELESS_EXT */ 8*4882a593Smuzhiyun #include <wl_android_ext.h> 9*4882a593Smuzhiyun #include <wl_iapsta.h> 10*4882a593Smuzhiyun #include <dhd_config.h> 11*4882a593Smuzhiyun 12*4882a593Smuzhiyun #define ESCAN_BUF_SIZE (64 * 1024) 13*4882a593Smuzhiyun 14*4882a593Smuzhiyun #define WL_ESCAN_TIMER_INTERVAL_MS 10000 /* Scan timeout */ 15*4882a593Smuzhiyun 16*4882a593Smuzhiyun /* donlge escan state */ 17*4882a593Smuzhiyun enum escan_state { 18*4882a593Smuzhiyun ESCAN_STATE_DOWN, 19*4882a593Smuzhiyun ESCAN_STATE_IDLE, 20*4882a593Smuzhiyun ESCAN_STATE_SCANING 21*4882a593Smuzhiyun }; 22*4882a593Smuzhiyun 23*4882a593Smuzhiyun typedef struct wl_scan_info { 24*4882a593Smuzhiyun bool bcast_ssid; 25*4882a593Smuzhiyun wlc_ssid_t ssid; 26*4882a593Smuzhiyun wl_channel_list_t channels; 27*4882a593Smuzhiyun int scan_time; 28*4882a593Smuzhiyun } wl_scan_info_t; 29*4882a593Smuzhiyun 30*4882a593Smuzhiyun typedef struct wl_escan_info { 31*4882a593Smuzhiyun struct net_device *dev; 32*4882a593Smuzhiyun bool scan_params_v2; 33*4882a593Smuzhiyun dhd_pub_t *pub; 34*4882a593Smuzhiyun timer_list_compat_t scan_timeout; /* Timer for catch scan event timeout */ 35*4882a593Smuzhiyun int escan_state; 36*4882a593Smuzhiyun int ioctl_ver; 37*4882a593Smuzhiyun u8 escan_buf[ESCAN_BUF_SIZE]; 38*4882a593Smuzhiyun wl_scan_results_v109_t *bss_list; 39*4882a593Smuzhiyun u8 *escan_ioctl_buf; 40*4882a593Smuzhiyun struct mutex usr_sync; /* maily for up/down synchronization */ 41*4882a593Smuzhiyun int autochannel; 42*4882a593Smuzhiyun int best_2g_ch; 43*4882a593Smuzhiyun int best_5g_ch; 44*4882a593Smuzhiyun int best_6g_ch; 45*4882a593Smuzhiyun #if defined(RSSIAVG) 46*4882a593Smuzhiyun wl_rssi_cache_ctrl_t g_rssi_cache_ctrl; 47*4882a593Smuzhiyun wl_rssi_cache_ctrl_t g_connected_rssi_cache_ctrl; 48*4882a593Smuzhiyun #endif 49*4882a593Smuzhiyun #if defined(BSSCACHE) 50*4882a593Smuzhiyun wl_bss_cache_ctrl_t g_bss_cache_ctrl; 51*4882a593Smuzhiyun #endif 52*4882a593Smuzhiyun } wl_escan_info_t; 53*4882a593Smuzhiyun 54*4882a593Smuzhiyun #if defined(WLMESH) 55*4882a593Smuzhiyun enum mesh_info_id { 56*4882a593Smuzhiyun MESH_INFO_MASTER_BSSID = 1, 57*4882a593Smuzhiyun MESH_INFO_MASTER_CHANNEL, 58*4882a593Smuzhiyun MESH_INFO_HOP_CNT, 59*4882a593Smuzhiyun MESH_INFO_PEER_BSSID 60*4882a593Smuzhiyun }; 61*4882a593Smuzhiyun 62*4882a593Smuzhiyun #define MAX_HOP_LIST 10 63*4882a593Smuzhiyun typedef struct wl_mesh_params { 64*4882a593Smuzhiyun struct ether_addr master_bssid; 65*4882a593Smuzhiyun uint16 master_channel; 66*4882a593Smuzhiyun uint hop_cnt; 67*4882a593Smuzhiyun struct ether_addr peer_bssid[MAX_HOP_LIST]; 68*4882a593Smuzhiyun uint32 scan_channel; 69*4882a593Smuzhiyun } wl_mesh_params_t; 70*4882a593Smuzhiyun bool wl_escan_mesh_info(struct net_device *dev, 71*4882a593Smuzhiyun struct wl_escan_info *escan, struct ether_addr *peer_bssid, 72*4882a593Smuzhiyun struct wl_mesh_params *mesh_info); 73*4882a593Smuzhiyun bool wl_escan_mesh_peer(struct net_device *dev, 74*4882a593Smuzhiyun struct wl_escan_info *escan, wlc_ssid_t *cur_ssid, uint16 cur_chan, bool sae, 75*4882a593Smuzhiyun struct wl_mesh_params *mesh_info); 76*4882a593Smuzhiyun #endif /* WLMESH */ 77*4882a593Smuzhiyun 78*4882a593Smuzhiyun int wl_escan_set_scan(struct net_device *dev, wl_scan_info_t *scan_info); 79*4882a593Smuzhiyun #if defined(WL_WIRELESS_EXT) 80*4882a593Smuzhiyun int wl_escan_get_scan(struct net_device *dev, 81*4882a593Smuzhiyun struct iw_request_info *info, struct iw_point *dwrq, char *extra); 82*4882a593Smuzhiyun #endif 83*4882a593Smuzhiyun int wl_escan_attach(struct net_device *dev); 84*4882a593Smuzhiyun void wl_escan_detach(struct net_device *dev); 85*4882a593Smuzhiyun int wl_escan_event_attach(struct net_device *dev, int ifidx); 86*4882a593Smuzhiyun int wl_escan_event_dettach(struct net_device *dev, int ifidx); 87*4882a593Smuzhiyun int wl_escan_up(struct net_device *dev); 88*4882a593Smuzhiyun void wl_escan_down(struct net_device *dev); 89*4882a593Smuzhiyun 90*4882a593Smuzhiyun #endif /* _wl_escan_ */ 91