Commit | Line | Data |
---|---|---|
876c9d3a MT |
1 | /** |
2 | * Interface for the wlan network scan routines | |
3 | * | |
4 | * Driver interface functions and type declarations for the scan module | |
5 | * implemented in wlan_scan.c. | |
6 | */ | |
7 | #ifndef _WLAN_SCAN_H | |
8 | #define _WLAN_SCAN_H | |
9 | ||
51b0c9d0 | 10 | #include <net/ieee80211.h> |
876c9d3a MT |
11 | #include "hostcmd.h" |
12 | ||
13 | /** | |
14 | * @brief Maximum number of channels that can be sent in a setuserscan ioctl | |
15 | * | |
16 | * @sa wlan_ioctl_user_scan_cfg | |
17 | */ | |
18 | #define WLAN_IOCTL_USER_SCAN_CHAN_MAX 50 | |
19 | ||
20 | //! Infrastructure BSS scan type in wlan_scan_cmd_config | |
21 | #define WLAN_SCAN_BSS_TYPE_BSS 1 | |
22 | ||
23 | //! Adhoc BSS scan type in wlan_scan_cmd_config | |
24 | #define WLAN_SCAN_BSS_TYPE_IBSS 2 | |
25 | ||
26 | //! Adhoc or Infrastructure BSS scan type in wlan_scan_cmd_config, no filter | |
27 | #define WLAN_SCAN_BSS_TYPE_ANY 3 | |
28 | ||
29 | /** | |
30 | * @brief Structure used internally in the wlan driver to configure a scan. | |
31 | * | |
32 | * Sent to the command processing module to configure the firmware | |
33 | * scan command prepared by libertas_cmd_80211_scan. | |
34 | * | |
35 | * @sa wlan_scan_networks | |
36 | * | |
37 | */ | |
38 | struct wlan_scan_cmd_config { | |
39 | /** | |
40 | * @brief BSS type to be sent in the firmware command | |
41 | * | |
42 | * Field can be used to restrict the types of networks returned in the | |
43 | * scan. valid settings are: | |
44 | * | |
45 | * - WLAN_SCAN_BSS_TYPE_BSS (infrastructure) | |
46 | * - WLAN_SCAN_BSS_TYPE_IBSS (adhoc) | |
47 | * - WLAN_SCAN_BSS_TYPE_ANY (unrestricted, adhoc and infrastructure) | |
48 | */ | |
49 | u8 bsstype; | |
50 | ||
51 | /** | |
52 | * @brief Specific BSSID used to filter scan results in the firmware | |
53 | */ | |
eb8f7330 | 54 | u8 bssid[ETH_ALEN]; |
876c9d3a MT |
55 | |
56 | /** | |
57 | * @brief length of TLVs sent in command starting at tlvBuffer | |
58 | */ | |
59 | int tlvbufferlen; | |
60 | ||
61 | /** | |
62 | * @brief SSID TLV(s) and ChanList TLVs to be sent in the firmware command | |
63 | * | |
64 | * @sa TLV_TYPE_CHANLIST, mrvlietypes_chanlistparamset_t | |
65 | * @sa TLV_TYPE_SSID, mrvlietypes_ssidparamset_t | |
66 | */ | |
67 | u8 tlvbuffer[1]; //!< SSID TLV(s) and ChanList TLVs are stored here | |
68 | }; | |
69 | ||
70 | /** | |
71 | * @brief IOCTL channel sub-structure sent in wlan_ioctl_user_scan_cfg | |
72 | * | |
73 | * Multiple instances of this structure are included in the IOCTL command | |
74 | * to configure a instance of a scan on the specific channel. | |
75 | */ | |
76 | struct wlan_ioctl_user_scan_chan { | |
77 | u8 channumber; //!< channel Number to scan | |
78 | u8 radiotype; //!< Radio type: 'B/G' band = 0, 'A' band = 1 | |
79 | u8 scantype; //!< Scan type: Active = 0, Passive = 1 | |
80 | u16 scantime; //!< Scan duration in milliseconds; if 0 default used | |
81 | }; | |
82 | ||
83 | /** | |
84 | * @brief IOCTL input structure to configure an immediate scan cmd to firmware | |
85 | * | |
86 | * Used in the setuserscan (WLAN_SET_USER_SCAN) private ioctl. Specifies | |
87 | * a number of parameters to be used in general for the scan as well | |
88 | * as a channel list (wlan_ioctl_user_scan_chan) for each scan period | |
89 | * desired. | |
90 | * | |
91 | * @sa libertas_set_user_scan_ioctl | |
92 | */ | |
93 | struct wlan_ioctl_user_scan_cfg { | |
876c9d3a MT |
94 | /** |
95 | * @brief BSS type to be sent in the firmware command | |
96 | * | |
97 | * Field can be used to restrict the types of networks returned in the | |
98 | * scan. valid settings are: | |
99 | * | |
100 | * - WLAN_SCAN_BSS_TYPE_BSS (infrastructure) | |
101 | * - WLAN_SCAN_BSS_TYPE_IBSS (adhoc) | |
102 | * - WLAN_SCAN_BSS_TYPE_ANY (unrestricted, adhoc and infrastructure) | |
103 | */ | |
104 | u8 bsstype; | |
105 | ||
106 | /** | |
107 | * @brief Configure the number of probe requests for active chan scans | |
108 | */ | |
109 | u8 numprobes; | |
110 | ||
eb8f7330 DW |
111 | /** |
112 | * @brief BSSID filter sent in the firmware command to limit the results | |
113 | */ | |
114 | u8 bssid[ETH_ALEN]; | |
876c9d3a | 115 | |
eb8f7330 DW |
116 | /* Clear existing scan results matching this BSSID */ |
117 | u8 clear_bssid; | |
118 | ||
119 | /** | |
120 | * @brief SSID filter sent in the firmware command to limit the results | |
121 | */ | |
122 | char ssid[IW_ESSID_MAX_SIZE]; | |
123 | u8 ssid_len; | |
124 | ||
125 | /* Clear existing scan results matching this SSID */ | |
126 | u8 clear_ssid; | |
876c9d3a MT |
127 | |
128 | /** | |
129 | * @brief Variable number (fixed maximum) of channels to scan up | |
130 | */ | |
131 | struct wlan_ioctl_user_scan_chan chanlist[WLAN_IOCTL_USER_SCAN_CHAN_MAX]; | |
132 | }; | |
133 | ||
134 | /** | |
135 | * @brief Structure used to store information for each beacon/probe response | |
136 | */ | |
137 | struct bss_descriptor { | |
4ace1138 | 138 | u8 bssid[ETH_ALEN]; |
876c9d3a MT |
139 | |
140 | struct WLAN_802_11_SSID ssid; | |
141 | ||
142 | /* WEP encryption requirement */ | |
143 | u32 privacy; | |
144 | ||
145 | /* receive signal strength in dBm */ | |
146 | long rssi; | |
147 | ||
148 | u32 channel; | |
149 | ||
150 | u16 beaconperiod; | |
151 | ||
152 | u32 atimwindow; | |
153 | ||
0dc5a290 | 154 | u8 mode; |
876c9d3a MT |
155 | u8 libertas_supported_rates[WLAN_SUPPORTED_RATES]; |
156 | ||
981f187b | 157 | __le64 timestamp; //!< TSF value included in the beacon/probe response |
fcdb53db DW |
158 | unsigned long last_scanned; |
159 | ||
876c9d3a MT |
160 | union ieeetypes_phyparamset phyparamset; |
161 | union IEEEtypes_ssparamset ssparamset; | |
162 | struct ieeetypes_capinfo cap; | |
163 | u8 datarates[WLAN_SUPPORTED_RATES]; | |
164 | ||
981f187b | 165 | u64 networktsf; //!< TSF timestamp from the current firmware TSF |
876c9d3a MT |
166 | |
167 | struct ieeetypes_countryinfofullset countryinfo; | |
168 | ||
51b0c9d0 DW |
169 | u8 wpa_ie[MAX_WPA_IE_LEN]; |
170 | size_t wpa_ie_len; | |
171 | u8 rsn_ie[MAX_WPA_IE_LEN]; | |
172 | size_t rsn_ie_len; | |
fcdb53db DW |
173 | |
174 | struct list_head list; | |
876c9d3a MT |
175 | }; |
176 | ||
177 | extern int libertas_SSID_cmp(struct WLAN_802_11_SSID *ssid1, | |
fcdb53db DW |
178 | struct WLAN_802_11_SSID *ssid2); |
179 | ||
180 | struct bss_descriptor * libertas_find_SSID_in_list(wlan_adapter * adapter, | |
aeea0ab4 DW |
181 | struct WLAN_802_11_SSID *ssid, u8 * bssid, u8 mode, |
182 | int channel); | |
fcdb53db DW |
183 | |
184 | struct bss_descriptor * libertas_find_best_SSID_in_list(wlan_adapter * adapter, | |
185 | u8 mode); | |
186 | ||
187 | extern struct bss_descriptor * libertas_find_BSSID_in_list(wlan_adapter * adapter, | |
188 | u8 * bssid, u8 mode); | |
876c9d3a MT |
189 | |
190 | int libertas_find_best_network_SSID(wlan_private * priv, | |
191 | struct WLAN_802_11_SSID *pSSID, | |
0dc5a290 | 192 | u8 preferred_mode, u8 *out_mode); |
876c9d3a MT |
193 | |
194 | extern int libertas_send_specific_SSID_scan(wlan_private * priv, | |
195 | struct WLAN_802_11_SSID *prequestedssid, | |
eb8f7330 | 196 | u8 clear_ssid); |
876c9d3a | 197 | extern int libertas_send_specific_BSSID_scan(wlan_private * priv, |
eb8f7330 | 198 | u8 * bssid, u8 clear_bssid); |
876c9d3a MT |
199 | |
200 | extern int libertas_cmd_80211_scan(wlan_private * priv, | |
201 | struct cmd_ds_command *cmd, | |
202 | void *pdata_buf); | |
203 | ||
204 | extern int libertas_ret_80211_scan(wlan_private * priv, | |
205 | struct cmd_ds_command *resp); | |
206 | ||
207 | int wlan_scan_networks(wlan_private * priv, | |
2be92196 MT |
208 | const struct wlan_ioctl_user_scan_cfg * puserscanin, |
209 | int full_scan); | |
876c9d3a MT |
210 | |
211 | struct ifreq; | |
212 | ||
213 | struct iw_point; | |
214 | struct iw_param; | |
215 | struct iw_request_info; | |
216 | extern int libertas_get_scan(struct net_device *dev, struct iw_request_info *info, | |
217 | struct iw_point *dwrq, char *extra); | |
218 | extern int libertas_set_scan(struct net_device *dev, struct iw_request_info *info, | |
219 | struct iw_param *vwrq, char *extra); | |
220 | ||
221 | #endif /* _WLAN_SCAN_H */ |