2012-11-22 18:06:15 +02:00
/*
* This file is part of wl18xx
*
* Copyright ( C ) 2012 Texas Instruments . All rights reserved .
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation .
*
* This program is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , write to the Free Software
* Foundation , Inc . , 51 Franklin St , Fifth Floor , Boston , MA
* 02110 - 1301 USA
*
*/
# ifndef __WL18XX_SCAN_H__
# define __WL18XX_SCAN_H__
# include "../wlcore/wlcore.h"
# include "../wlcore/cmd.h"
# include "../wlcore/scan.h"
struct tracking_ch_params {
struct conn_scan_ch_params channel ;
__le32 bssid_lsb ;
__le16 bssid_msb ;
u8 padding [ 2 ] ;
} __packed ;
/* probe request rate */
enum
{
WL18XX_SCAN_RATE_1 = 0 ,
WL18XX_SCAN_RATE_5_5 = 1 ,
WL18XX_SCAN_RATE_6 = 2 ,
} ;
2012-11-22 18:06:16 +02:00
# define WL18XX_MAX_CHANNELS_5GHZ 32
2012-11-22 18:06:15 +02:00
struct wl18xx_cmd_scan_params {
struct wl1271_cmd_header header ;
u8 role_id ;
u8 scan_type ;
s8 rssi_threshold ; /* for filtering (in dBm) */
s8 snr_threshold ; /* for filtering (in dB) */
u8 bss_type ; /* for filtering */
u8 ssid_from_list ; /* use ssid from configured ssid list */
u8 filter ; /* forward only results with matching ssids */
/*
* add broadcast ssid in addition to the configured ssids .
* the driver should add dummy entry for it ( ? ) .
*/
u8 add_broadcast ;
u8 urgency ;
u8 protect ; /* ??? */
u8 n_probe_reqs ; /* Number of probes requests per channel */
u8 terminate_after ; /* early terminate scan operation */
u8 passive [ SCAN_MAX_BANDS ] ; /* number of passive scan channels */
u8 active [ SCAN_MAX_BANDS ] ; /* number of active scan channels */
u8 dfs ; /* number of dfs channels in 5ghz */
u8 passive_active ; /* number of passive before active channels 2.4ghz */
2015-07-30 22:38:20 +03:00
__le16 short_cycles_msec ;
__le16 long_cycles_msec ;
2012-11-22 18:06:15 +02:00
u8 short_cycles_count ;
u8 total_cycles ; /* 0 - infinite */
2012-11-28 11:42:47 +02:00
u8 padding [ 2 ] ;
2012-11-22 18:06:15 +02:00
union {
struct {
struct conn_scan_ch_params channels_2 [ MAX_CHANNELS_2GHZ ] ;
2012-11-22 18:06:16 +02:00
struct conn_scan_ch_params channels_5 [ WL18XX_MAX_CHANNELS_5GHZ ] ;
2012-11-22 18:06:15 +02:00
struct conn_scan_ch_params channels_4 [ MAX_CHANNELS_4GHZ ] ;
} ;
struct tracking_ch_params channels_tracking [ WL1271_SCAN_MAX_CHANNELS ] ;
} ;
u8 ssid [ IEEE80211_MAX_SSID_LEN ] ;
u8 ssid_len ; /* For SCAN_SSID_FILTER_SPECIFIC */
u8 tag ;
2012-11-28 11:42:47 +02:00
u8 rate ;
/* send SCAN_REPORT_EVENT in periodic scans after each cycle
* if number of results > = report_threshold . Must be 0 for
* non periodic scans
*/
u8 report_threshold ;
/* Should periodic scan stop after a report event was created.
* Must be 0 for non periodic scans .
*/
u8 terminate_on_report ;
u8 padding1 [ 3 ] ;
2012-11-22 18:06:15 +02:00
} __packed ;
struct wl18xx_cmd_scan_stop {
struct wl1271_cmd_header header ;
u8 role_id ;
u8 scan_type ;
u8 padding [ 2 ] ;
} __packed ;
int wl18xx_scan_start ( struct wl1271 * wl , struct wl12xx_vif * wlvif ,
struct cfg80211_scan_request * req ) ;
int wl18xx_scan_stop ( struct wl1271 * wl , struct wl12xx_vif * wlvif ) ;
void wl18xx_scan_completed ( struct wl1271 * wl , struct wl12xx_vif * wlvif ) ;
int wl18xx_sched_scan_start ( struct wl1271 * wl , struct wl12xx_vif * wlvif ,
struct cfg80211_sched_scan_request * req ,
2014-02-06 16:15:23 +02:00
struct ieee80211_scan_ies * ies ) ;
2012-11-22 18:06:15 +02:00
void wl18xx_scan_sched_scan_stop ( struct wl1271 * wl , struct wl12xx_vif * wlvif ) ;
# endif