xref: /OK3568_Linux_fs/external/rkwifibt/drivers/bcmdhd/wl_escan.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
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