• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 
2 #ifndef _wl_escan_
3 #define _wl_escan_
4 
5 #include <linux/wireless.h>
6 #include <wl_iw.h>
7 #include <dngl_stats.h>
8 #include <dhd.h>
9 #include <linux/time.h>
10 
11 
12 #ifdef DHD_MAX_IFS
13 #define WL_MAX_IFS DHD_MAX_IFS
14 #else
15 #define WL_MAX_IFS 16
16 #endif
17 
18 #define ESCAN_BUF_SIZE (64 * 1024)
19 
20 #define WL_ESCAN_TIMER_INTERVAL_MS    10000 /* Scan timeout */
21 
22 /* event queue for cfg80211 main event */
23 struct escan_event_q {
24     struct list_head eq_list;
25     u32 etype;
26     wl_event_msg_t emsg;
27     s8 edata[1];
28 };
29 
30 struct pmk_list {
31     pmkid_list_t pmkids;
32     pmkid_t foo[MAXPMKID - 1];
33 };
34 
35 /* donlge escan state */
36 enum escan_state {
37     ESCAN_STATE_DOWN,
38     ESCAN_STATE_IDLE,
39     ESCAN_STATE_SCANING
40 };
41 
42 struct wl_escan_info;
43 
44 typedef s32(*ESCAN_EVENT_HANDLER) (struct wl_escan_info *escan,
45             const wl_event_msg_t *e, void *data);
46 
47 typedef struct wl_escan_info {
48     struct net_device *dev;
49     dhd_pub_t *pub;
50     struct timer_list scan_timeout;   /* Timer for catch scan event timeout */
51     int escan_state;
52     int ioctl_ver;
53 
54     char ioctlbuf[WLC_IOCTL_SMLEN];
55     u8 escan_buf[ESCAN_BUF_SIZE];
56     struct wl_scan_results *bss_list;
57     struct wl_scan_results *scan_results;
58     struct ether_addr disconnected_bssid;
59     u8 *escan_ioctl_buf;
60     spinlock_t eq_lock;    /* for event queue synchronization */
61     struct list_head eq_list;    /* used for event queue */
62     tsk_ctl_t event_tsk;          /* task of main event handler thread */
63     ESCAN_EVENT_HANDLER evt_handler[WLC_E_LAST];
64     struct mutex usr_sync;    /* maily for up/down synchronization */
65     int autochannel;
66     int best_2g_ch;
67     int best_5g_ch;
68 #if defined(RSSIAVG)
69     wl_rssi_cache_ctrl_t g_rssi_cache_ctrl;
70     wl_rssi_cache_ctrl_t g_connected_rssi_cache_ctrl;
71 #endif
72 #if defined(BSSCACHE)
73     wl_bss_cache_ctrl_t g_bss_cache_ctrl;
74 #endif
75     struct pmk_list pmk_list;
76     wl_conn_info_t conn_info;
77 } wl_escan_info_t;
78 
79 void wl_escan_event(struct net_device *dev, const wl_event_msg_t *e, void *data);
80 
81 int wl_escan_set_scan(
82     struct net_device *dev,
83     struct iw_request_info *info,
84     union iwreq_data *wrqu,
85     char *extra
86 );
87 int wl_escan_get_scan(struct net_device *dev,    struct iw_request_info *info,
88     struct iw_point *dwrq, char *extra);
89 s32 wl_escan_autochannel(struct net_device *dev, char *command, int total_len);
90 int wl_escan_attach(struct net_device *dev, dhd_pub_t *dhdp);
91 void wl_escan_detach(dhd_pub_t *dhdp);
92 int wl_escan_up(struct net_device *net, dhd_pub_t *dhdp);
93 void wl_escan_down(dhd_pub_t *dhdp);
94 
95 #endif /* _wl_escan_ */
96 
97