2007-02-10 12:25:27 -02:00
/**
* Interface for the wlan network scan routines
*
* Driver interface functions and type declarations for the scan module
2007-11-15 18:05:47 -05:00
* implemented in scan . c .
2007-02-10 12:25:27 -02:00
*/
2007-11-15 18:05:47 -05:00
# ifndef _LBS_SCAN_H
# define _LBS_SCAN_H
2007-02-10 12:25:27 -02:00
2007-05-10 22:51:28 -04:00
# include <net/ieee80211.h>
2007-02-10 12:25:27 -02:00
# include "hostcmd.h"
2007-11-23 15:43:44 +01:00
struct lbs_adapter ;
2007-02-10 12:25:27 -02:00
/**
* @ brief Maximum number of channels that can be sent in a setuserscan ioctl
*
2007-11-15 18:05:47 -05:00
* @ sa lbs_ioctl_user_scan_cfg
2007-02-10 12:25:27 -02:00
*/
2007-11-15 18:05:47 -05:00
# define LBS_IOCTL_USER_SCAN_CHAN_MAX 50
2007-02-10 12:25:27 -02:00
2007-11-15 18:05:47 -05:00
//! Infrastructure BSS scan type in lbs_scan_cmd_config
# define LBS_SCAN_BSS_TYPE_BSS 1
2007-02-10 12:25:27 -02:00
2007-11-15 18:05:47 -05:00
//! Adhoc BSS scan type in lbs_scan_cmd_config
# define LBS_SCAN_BSS_TYPE_IBSS 2
2007-02-10 12:25:27 -02:00
2007-11-15 18:05:47 -05:00
//! Adhoc or Infrastructure BSS scan type in lbs_scan_cmd_config, no filter
# define LBS_SCAN_BSS_TYPE_ANY 3
2007-02-10 12:25:27 -02:00
/**
* @ brief Structure used internally in the wlan driver to configure a scan .
*
* Sent to the command processing module to configure the firmware
2007-11-15 18:05:47 -05:00
* scan command prepared by lbs_cmd_80211_scan .
2007-02-10 12:25:27 -02:00
*
2007-11-15 18:05:47 -05:00
* @ sa lbs_scan_networks
2007-02-10 12:25:27 -02:00
*
*/
2007-11-15 18:05:47 -05:00
struct lbs_scan_cmd_config {
2007-02-10 12:25:27 -02:00
/**
* @ brief BSS type to be sent in the firmware command
*
* Field can be used to restrict the types of networks returned in the
* scan . valid settings are :
*
2007-11-15 18:05:47 -05:00
* - LBS_SCAN_BSS_TYPE_BSS ( infrastructure )
* - LBS_SCAN_BSS_TYPE_IBSS ( adhoc )
* - LBS_SCAN_BSS_TYPE_ANY ( unrestricted , adhoc and infrastructure )
2007-02-10 12:25:27 -02:00
*/
u8 bsstype ;
/**
* @ brief Specific BSSID used to filter scan results in the firmware
*/
2007-05-25 16:25:21 -04:00
u8 bssid [ ETH_ALEN ] ;
2007-02-10 12:25:27 -02:00
/**
* @ brief length of TLVs sent in command starting at tlvBuffer
*/
int tlvbufferlen ;
/**
* @ brief SSID TLV ( s ) and ChanList TLVs to be sent in the firmware command
*
* @ sa TLV_TYPE_CHANLIST , mrvlietypes_chanlistparamset_t
* @ sa TLV_TYPE_SSID , mrvlietypes_ssidparamset_t
*/
u8 tlvbuffer [ 1 ] ; //!< SSID TLV(s) and ChanList TLVs are stored here
} ;
/**
2007-11-15 18:05:47 -05:00
* @ brief IOCTL channel sub - structure sent in lbs_ioctl_user_scan_cfg
2007-02-10 12:25:27 -02:00
*
* Multiple instances of this structure are included in the IOCTL command
* to configure a instance of a scan on the specific channel .
*/
2007-11-15 18:05:47 -05:00
struct lbs_ioctl_user_scan_chan {
2007-02-10 12:25:27 -02:00
u8 channumber ; //!< channel Number to scan
u8 radiotype ; //!< Radio type: 'B/G' band = 0, 'A' band = 1
u8 scantype ; //!< Scan type: Active = 0, Passive = 1
u16 scantime ; //!< Scan duration in milliseconds; if 0 default used
} ;
/**
* @ brief IOCTL input structure to configure an immediate scan cmd to firmware
*
2007-11-15 18:05:47 -05:00
* Used in the setuserscan ( LBS_SET_USER_SCAN ) private ioctl . Specifies
2007-02-10 12:25:27 -02:00
* a number of parameters to be used in general for the scan as well
2007-11-15 18:05:47 -05:00
* as a channel list ( lbs_ioctl_user_scan_chan ) for each scan period
2007-02-10 12:25:27 -02:00
* desired .
*
2007-11-15 18:05:47 -05:00
* @ sa lbs_set_user_scan_ioctl
2007-02-10 12:25:27 -02:00
*/
2007-11-15 18:05:47 -05:00
struct lbs_ioctl_user_scan_cfg {
2007-02-10 12:25:27 -02:00
/**
* @ brief BSS type to be sent in the firmware command
*
* Field can be used to restrict the types of networks returned in the
* scan . valid settings are :
*
2007-11-15 18:05:47 -05:00
* - LBS_SCAN_BSS_TYPE_BSS ( infrastructure )
* - LBS_SCAN_BSS_TYPE_IBSS ( adhoc )
* - LBS_SCAN_BSS_TYPE_ANY ( unrestricted , adhoc and infrastructure )
2007-02-10 12:25:27 -02:00
*/
u8 bsstype ;
2007-05-25 16:25:21 -04:00
/**
* @ brief BSSID filter sent in the firmware command to limit the results
*/
u8 bssid [ ETH_ALEN ] ;
2007-02-10 12:25:27 -02:00
2007-05-25 16:25:21 -04:00
/* Clear existing scan results matching this BSSID */
u8 clear_bssid ;
/**
* @ brief SSID filter sent in the firmware command to limit the results
*/
char ssid [ IW_ESSID_MAX_SIZE ] ;
u8 ssid_len ;
/* Clear existing scan results matching this SSID */
u8 clear_ssid ;
2007-02-10 12:25:27 -02:00
} ;
/**
* @ brief Structure used to store information for each beacon / probe response
*/
struct bss_descriptor {
2007-05-25 13:16:38 -04:00
u8 bssid [ ETH_ALEN ] ;
2007-02-10 12:25:27 -02:00
2007-05-28 23:54:55 -04:00
u8 ssid [ IW_ESSID_MAX_SIZE + 1 ] ;
u8 ssid_len ;
2007-02-10 12:25:27 -02:00
2007-08-02 10:43:44 -04:00
u16 capability ;
2007-02-10 12:25:27 -02:00
/* receive signal strength in dBm */
long rssi ;
u32 channel ;
u16 beaconperiod ;
u32 atimwindow ;
2007-08-02 13:12:45 -04:00
/* IW_MODE_AUTO, IW_MODE_ADHOC, IW_MODE_INFRA */
2007-05-10 22:58:02 -04:00
u8 mode ;
2007-08-02 13:12:45 -04:00
2007-08-02 11:40:45 -04:00
/* zero-terminated array of supported data rates */
u8 rates [ MAX_RATES + 1 ] ;
2007-02-10 12:25:27 -02:00
2007-05-25 16:15:56 -04:00
unsigned long last_scanned ;
2007-02-10 12:25:27 -02:00
union ieeetypes_phyparamset phyparamset ;
union IEEEtypes_ssparamset ssparamset ;
struct ieeetypes_countryinfofullset countryinfo ;
2007-05-10 22:51:28 -04:00
u8 wpa_ie [ MAX_WPA_IE_LEN ] ;
size_t wpa_ie_len ;
u8 rsn_ie [ MAX_WPA_IE_LEN ] ;
size_t rsn_ie_len ;
2007-05-25 16:15:56 -04:00
2007-08-02 10:51:27 -04:00
u8 mesh ;
2007-05-25 16:15:56 -04:00
struct list_head list ;
2007-02-10 12:25:27 -02:00
} ;
2007-11-15 18:05:47 -05:00
int lbs_ssid_cmp ( u8 * ssid1 , u8 ssid1_len , u8 * ssid2 , u8 ssid2_len ) ;
2007-05-25 16:15:56 -04:00
2007-11-23 15:43:44 +01:00
struct bss_descriptor * lbs_find_ssid_in_list ( struct lbs_adapter * adapter ,
2007-11-15 18:05:47 -05:00
u8 * ssid , u8 ssid_len , u8 * bssid , u8 mode ,
int channel ) ;
2007-05-25 16:15:56 -04:00
2007-11-23 15:43:44 +01:00
struct bss_descriptor * lbs_find_bssid_in_list ( struct lbs_adapter * adapter ,
2007-11-15 18:05:47 -05:00
u8 * bssid , u8 mode ) ;
2007-02-10 12:25:27 -02:00
2007-11-23 15:43:44 +01:00
int lbs_find_best_network_ssid ( struct lbs_private * priv , u8 * out_ssid ,
2007-05-28 23:54:55 -04:00
u8 * out_ssid_len , u8 preferred_mode , u8 * out_mode ) ;
2007-02-10 12:25:27 -02:00
2007-11-23 15:43:44 +01:00
int lbs_send_specific_ssid_scan ( struct lbs_private * priv , u8 * ssid ,
2007-05-28 23:54:55 -04:00
u8 ssid_len , u8 clear_ssid ) ;
2007-02-10 12:25:27 -02:00
2007-11-23 15:43:44 +01:00
int lbs_cmd_80211_scan ( struct lbs_private * priv ,
2007-02-10 12:25:27 -02:00
struct cmd_ds_command * cmd ,
void * pdata_buf ) ;
2007-11-23 15:43:44 +01:00
int lbs_ret_80211_scan ( struct lbs_private * priv ,
2007-02-10 12:25:27 -02:00
struct cmd_ds_command * resp ) ;
2007-11-23 15:43:44 +01:00
int lbs_scan_networks ( struct lbs_private * priv ,
2007-11-15 18:05:47 -05:00
const struct lbs_ioctl_user_scan_cfg * puserscanin ,
2007-05-25 00:33:28 -04:00
int full_scan ) ;
2007-02-10 12:25:27 -02:00
struct ifreq ;
struct iw_point ;
struct iw_param ;
struct iw_request_info ;
2007-11-15 18:05:47 -05:00
int lbs_get_scan ( struct net_device * dev , struct iw_request_info * info ,
2007-02-10 12:25:27 -02:00
struct iw_point * dwrq , char * extra ) ;
2007-11-15 18:05:47 -05:00
int lbs_set_scan ( struct net_device * dev , struct iw_request_info * info ,
2007-02-10 12:25:27 -02:00
struct iw_param * vwrq , char * extra ) ;
2007-11-15 18:05:47 -05:00
void lbs_scan_worker ( struct work_struct * work ) ;
2007-08-02 13:19:04 -04:00
2007-11-15 18:05:47 -05:00
# endif