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