Commit | Line | Data |
---|---|---|
ce792918 GG |
1 | /****************************************************************************** |
2 | * | |
3 | * This file is provided under a dual BSD/GPLv2 license. When using or | |
4 | * redistributing this file, you may do so under either license. | |
5 | * | |
6 | * GPL LICENSE SUMMARY | |
7 | * | |
8 | * Copyright(c) 2015 Intel Deutschland GmbH | |
9 | * | |
10 | * This program is free software; you can redistribute it and/or modify | |
11 | * it under the terms of version 2 of the GNU General Public License as | |
12 | * published by the Free Software Foundation. | |
13 | * | |
14 | * This program is distributed in the hope that it will be useful, but | |
15 | * WITHOUT ANY WARRANTY; without even the implied warranty of | |
16 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
17 | * General Public License for more details. | |
18 | * | |
19 | * You should have received a copy of the GNU General Public License | |
20 | * along with this program; if not, write to the Free Software | |
21 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110, | |
22 | * USA | |
23 | * | |
24 | * The full GNU General Public License is included in this distribution | |
25 | * in the file called COPYING. | |
26 | * | |
27 | * Contact Information: | |
d01c5366 | 28 | * Intel Linux Wireless <linuxwifi@intel.com> |
ce792918 GG |
29 | * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497 |
30 | * | |
31 | * BSD LICENSE | |
32 | * | |
33 | * Copyright(c) 2015 Intel Deutschland GmbH | |
34 | * All rights reserved. | |
35 | * | |
36 | * Redistribution and use in source and binary forms, with or without | |
37 | * modification, are permitted provided that the following conditions | |
38 | * are met: | |
39 | * | |
40 | * * Redistributions of source code must retain the above copyright | |
41 | * notice, this list of conditions and the following disclaimer. | |
42 | * * Redistributions in binary form must reproduce the above copyright | |
43 | * notice, this list of conditions and the following disclaimer in | |
44 | * the documentation and/or other materials provided with the | |
45 | * distribution. | |
46 | * * Neither the name Intel Corporation nor the names of its | |
47 | * contributors may be used to endorse or promote products derived | |
48 | * from this software without specific prior written permission. | |
49 | * | |
50 | * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS | |
51 | * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT | |
52 | * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR | |
53 | * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT | |
54 | * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, | |
55 | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT | |
56 | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | |
57 | * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | |
58 | * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | |
59 | * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE | |
60 | * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | |
61 | * | |
62 | *****************************************************************************/ | |
63 | #ifndef __fw_api_tof_h__ | |
64 | #define __fw_api_tof_h__ | |
65 | ||
66 | #include "fw-api.h" | |
67 | ||
68 | /* ToF sub-group command IDs */ | |
69 | enum iwl_mvm_tof_sub_grp_ids { | |
70 | TOF_RANGE_REQ_CMD = 0x1, | |
71 | TOF_CONFIG_CMD = 0x2, | |
72 | TOF_RANGE_ABORT_CMD = 0x3, | |
73 | TOF_RANGE_REQ_EXT_CMD = 0x4, | |
74 | TOF_RESPONDER_CONFIG_CMD = 0x5, | |
75 | TOF_NW_INITIATED_RES_SEND_CMD = 0x6, | |
76 | TOF_NEIGHBOR_REPORT_REQ_CMD = 0x7, | |
77 | TOF_NEIGHBOR_REPORT_RSP_NOTIF = 0xFC, | |
78 | TOF_NW_INITIATED_REQ_RCVD_NOTIF = 0xFD, | |
79 | TOF_RANGE_RESPONSE_NOTIF = 0xFE, | |
80 | TOF_MCSI_DEBUG_NOTIF = 0xFB, | |
81 | }; | |
82 | ||
83 | /** | |
84 | * struct iwl_tof_config_cmd - ToF configuration | |
85 | * @tof_disabled: 0 enabled, 1 - disabled | |
86 | * @one_sided_disabled: 0 enabled, 1 - disabled | |
87 | * @is_debug_mode: 1 debug mode, 0 - otherwise | |
88 | * @is_buf_required: 1 channel estimation buffer required, 0 - otherwise | |
89 | */ | |
90 | struct iwl_tof_config_cmd { | |
ce792918 GG |
91 | __le32 sub_grp_cmd_id; |
92 | u8 tof_disabled; | |
93 | u8 one_sided_disabled; | |
94 | u8 is_debug_mode; | |
95 | u8 is_buf_required; | |
96 | } __packed; | |
97 | ||
98 | /** | |
99 | * struct iwl_tof_responder_config_cmd - ToF AP mode (for debug) | |
100 | * @burst_period: future use: (currently hard coded in the LMAC) | |
101 | * The interval between two sequential bursts. | |
102 | * @min_delta_ftm: future use: (currently hard coded in the LMAC) | |
103 | * The minimum delay between two sequential FTM Responses | |
104 | * in the same burst. | |
105 | * @burst_duration: future use: (currently hard coded in the LMAC) | |
106 | * The total time for all FTMs handshake in the same burst. | |
107 | * Affect the time events duration in the LMAC. | |
108 | * @num_of_burst_exp: future use: (currently hard coded in the LMAC) | |
109 | * The number of bursts for the current ToF request. Affect | |
110 | * the number of events allocations in the current iteration. | |
111 | * @get_ch_est: for xVT only, NA for driver | |
112 | * @abort_responder: when set to '1' - Responder will terminate its activity | |
113 | * (all other fields in the command are ignored) | |
114 | * @recv_sta_req_params: 1 - Responder will ignore the other Responder's | |
115 | * params and use the recomended Initiator params. | |
116 | * 0 - otherwise | |
117 | * @channel_num: current AP Channel | |
118 | * @bandwidth: current AP Bandwidth: 0 20MHz, 1 40MHz, 2 80MHz | |
119 | * @rate: current AP rate | |
120 | * @ctrl_ch_position: coding of the control channel position relative to | |
121 | * the center frequency. | |
122 | * 40MHz 0 below center, 1 above center | |
123 | * 80MHz bits [0..1]: 0 the near 20MHz to the center, | |
124 | * 1 the far 20MHz to the center | |
125 | * bit[2] as above 40MHz | |
126 | * @ftm_per_burst: FTMs per Burst | |
127 | * @ftm_resp_ts_avail: '0' - we don't measure over the Initial FTM Response, | |
128 | * '1' - we measure over the Initial FTM Response | |
129 | * @asap_mode: ASAP / Non ASAP mode for the current WLS station | |
130 | * @sta_id: index of the AP STA when in AP mode | |
131 | * @tsf_timer_offset_msecs: The dictated time offset (mSec) from the AP's TSF | |
132 | * @toa_offset: Artificial addition [0.1nsec] for the ToA - to be used for debug | |
133 | * purposes, simulating station movement by adding various values | |
134 | * to this field | |
135 | * @bssid: Current AP BSSID | |
136 | */ | |
137 | struct iwl_tof_responder_config_cmd { | |
ce792918 GG |
138 | __le32 sub_grp_cmd_id; |
139 | __le16 burst_period; | |
140 | u8 min_delta_ftm; | |
141 | u8 burst_duration; | |
142 | u8 num_of_burst_exp; | |
143 | u8 get_ch_est; | |
144 | u8 abort_responder; | |
145 | u8 recv_sta_req_params; | |
146 | u8 channel_num; | |
147 | u8 bandwidth; | |
148 | u8 rate; | |
149 | u8 ctrl_ch_position; | |
150 | u8 ftm_per_burst; | |
151 | u8 ftm_resp_ts_avail; | |
152 | u8 asap_mode; | |
153 | u8 sta_id; | |
154 | __le16 tsf_timer_offset_msecs; | |
155 | __le16 toa_offset; | |
156 | u8 bssid[ETH_ALEN]; | |
157 | } __packed; | |
158 | ||
159 | /** | |
160 | * struct iwl_tof_range_request_ext_cmd - extended range req for WLS | |
161 | * @tsf_timer_offset_msec: the recommended time offset (mSec) from the AP's TSF | |
162 | * @min_delta_ftm: Minimal time between two consecutive measurements, | |
163 | * in units of 100us. 0 means no preference by station | |
164 | * @ftm_format_and_bw20M: FTM Channel Spacing/Format for 20MHz: recommended | |
165 | * value be sent to the AP | |
166 | * @ftm_format_and_bw40M: FTM Channel Spacing/Format for 40MHz: recommended | |
167 | * value to be sent to the AP | |
168 | * @ftm_format_and_bw80M: FTM Channel Spacing/Format for 80MHz: recommended | |
169 | * value to be sent to the AP | |
170 | */ | |
171 | struct iwl_tof_range_req_ext_cmd { | |
ce792918 GG |
172 | __le32 sub_grp_cmd_id; |
173 | __le16 tsf_timer_offset_msec; | |
174 | __le16 reserved; | |
175 | u8 min_delta_ftm; | |
176 | u8 ftm_format_and_bw20M; | |
177 | u8 ftm_format_and_bw40M; | |
178 | u8 ftm_format_and_bw80M; | |
179 | } __packed; | |
180 | ||
181 | #define IWL_MVM_TOF_MAX_APS 21 | |
182 | ||
183 | /** | |
184 | * struct iwl_tof_range_req_ap_entry - AP configuration parameters | |
185 | * @channel_num: Current AP Channel | |
186 | * @bandwidth: Current AP Bandwidth: 0 20MHz, 1 40MHz, 2 80MHz | |
187 | * @tsf_delta_direction: TSF relatively to the subject AP | |
188 | * @ctrl_ch_position: Coding of the control channel position relative to the | |
189 | * center frequency. | |
190 | * 40MHz 0 below center, 1 above center | |
191 | * 80MHz bits [0..1]: 0 the near 20MHz to the center, | |
192 | * 1 the far 20MHz to the center | |
193 | * bit[2] as above 40MHz | |
194 | * @bssid: AP's bss id | |
195 | * @measure_type: Measurement type: 0 - two sided, 1 - One sided | |
196 | * @num_of_bursts: Recommended value to be sent to the AP. 2s Exponent of the | |
197 | * number of measurement iterations (min 2^0 = 1, max 2^14) | |
198 | * @burst_period: Recommended value to be sent to the AP. Measurement | |
199 | * periodicity In units of 100ms. ignored if num_of_bursts = 0 | |
200 | * @samples_per_burst: 2-sided: the number of FTMs pairs in single Burst (1-31) | |
201 | * 1-sided: how many rts/cts pairs should be used per burst. | |
202 | * @retries_per_sample: Max number of retries that the LMAC should send | |
203 | * in case of no replies by the AP. | |
204 | * @tsf_delta: TSF Delta in units of microseconds. | |
205 | * The difference between the AP TSF and the device local clock. | |
206 | * @location_req: Location Request Bit[0] LCI should be sent in the FTMR | |
207 | * Bit[1] Civic should be sent in the FTMR | |
208 | * @asap_mode: 0 - non asap mode, 1 - asap mode (not relevant for one sided) | |
209 | * @enable_dyn_ack: Enable Dynamic ACK BW. | |
210 | * 0 Initiator interact with regular AP | |
211 | * 1 Initiator interact with Responder machine: need to send the | |
212 | * Initiator Acks with HT 40MHz / 80MHz, since the Responder should | |
213 | * use it for its ch est measurement (this flag will be set when we | |
214 | * configure the opposite machine to be Responder). | |
215 | * @rssi: Last received value | |
216 | * leagal values: -128-0 (0x7f). above 0x0 indicating an invalid value. | |
217 | */ | |
218 | struct iwl_tof_range_req_ap_entry { | |
219 | u8 channel_num; | |
220 | u8 bandwidth; | |
221 | u8 tsf_delta_direction; | |
222 | u8 ctrl_ch_position; | |
223 | u8 bssid[ETH_ALEN]; | |
224 | u8 measure_type; | |
225 | u8 num_of_bursts; | |
226 | __le16 burst_period; | |
227 | u8 samples_per_burst; | |
228 | u8 retries_per_sample; | |
229 | __le32 tsf_delta; | |
230 | u8 location_req; | |
231 | u8 asap_mode; | |
232 | u8 enable_dyn_ack; | |
233 | s8 rssi; | |
234 | } __packed; | |
235 | ||
236 | /** | |
237 | * enum iwl_tof_response_mode | |
238 | * @IWL_MVM_TOF_RESPOSE_ASAP: report each AP measurement separately as soon as | |
239 | * possible (not supported for this release) | |
240 | * @IWL_MVM_TOF_RESPOSE_TIMEOUT: report all AP measurements as a batch upon | |
241 | * timeout expiration | |
242 | * @IWL_MVM_TOF_RESPOSE_COMPLETE: report all AP measurements as a batch at the | |
243 | * earlier of: measurements completion / timeout | |
244 | * expiration. | |
245 | */ | |
246 | enum iwl_tof_response_mode { | |
247 | IWL_MVM_TOF_RESPOSE_ASAP = 1, | |
248 | IWL_MVM_TOF_RESPOSE_TIMEOUT, | |
249 | IWL_MVM_TOF_RESPOSE_COMPLETE, | |
250 | }; | |
251 | ||
252 | /** | |
253 | * struct iwl_tof_range_req_cmd - start measurement cmd | |
254 | * @request_id: A Token incremented per request. The same Token will be | |
255 | * sent back in the range response | |
256 | * @initiator: 0- NW initiated, 1 - Client Initiated | |
257 | * @one_sided_los_disable: '0'- run ML-Algo for both ToF/OneSided, | |
258 | * '1' - run ML-Algo for ToF only | |
259 | * @req_timeout: Requested timeout of the response in units of 100ms. | |
260 | * This is equivalent to the session time configured to the | |
261 | * LMAC in Initiator Request | |
262 | * @report_policy: Supported partially for this release: For current release - | |
263 | * the range report will be uploaded as a batch when ready or | |
264 | * when the session is done (successfully / partially). | |
265 | * one of iwl_tof_response_mode. | |
266 | * @num_of_ap: Number of APs to measure (error if > IWL_MVM_TOF_MAX_APS) | |
267 | * @macaddr_random: '0' Use default source MAC address (i.e. p2_p), | |
268 | * '1' Use MAC Address randomization according to the below | |
269 | * @macaddr_mask: Bits set to 0 shall be copied from the MAC address template. | |
270 | * Bits set to 1 shall be randomized by the UMAC | |
271 | */ | |
272 | struct iwl_tof_range_req_cmd { | |
ce792918 GG |
273 | __le32 sub_grp_cmd_id; |
274 | u8 request_id; | |
275 | u8 initiator; | |
276 | u8 one_sided_los_disable; | |
277 | u8 req_timeout; | |
278 | u8 report_policy; | |
279 | u8 los_det_disable; | |
280 | u8 num_of_ap; | |
281 | u8 macaddr_random; | |
282 | u8 macaddr_template[ETH_ALEN]; | |
283 | u8 macaddr_mask[ETH_ALEN]; | |
284 | struct iwl_tof_range_req_ap_entry ap[IWL_MVM_TOF_MAX_APS]; | |
285 | } __packed; | |
286 | ||
287 | /** | |
288 | * struct iwl_tof_gen_resp_cmd - generic ToF response | |
289 | */ | |
290 | struct iwl_tof_gen_resp_cmd { | |
291 | __le32 sub_grp_cmd_id; | |
292 | u8 data[]; | |
293 | } __packed; | |
294 | ||
295 | /** | |
296 | * struct iwl_tof_range_rsp_ap_entry_ntfy - AP parameters (response) | |
297 | * @measure_status: current APs measurement status | |
298 | * @measure_bw: Current AP Bandwidth: 0 20MHz, 1 40MHz, 2 80MHz | |
299 | * @rtt: The Round Trip Time that took for the last measurement for | |
300 | * current AP [nSec] | |
301 | * @rtt_variance: The Variance of the RTT values measured for current AP | |
302 | * @rtt_spread: The Difference between the maximum and the minimum RTT | |
303 | * values measured for current AP in the current session [nsec] | |
304 | * @rssi: RSSI as uploaded in the Channel Estimation notification | |
305 | * @rssi_spread: The Difference between the maximum and the minimum RSSI values | |
306 | * measured for current AP in the current session | |
307 | * @range: Measured range [cm] | |
308 | * @range_variance: Measured range variance [cm] | |
309 | * @timestamp: The GP2 Clock [usec] where Channel Estimation notification was | |
310 | * uploaded by the LMAC | |
311 | */ | |
312 | struct iwl_tof_range_rsp_ap_entry_ntfy { | |
313 | u8 bssid[ETH_ALEN]; | |
314 | u8 measure_status; | |
315 | u8 measure_bw; | |
316 | __le32 rtt; | |
317 | __le32 rtt_variance; | |
318 | __le32 rtt_spread; | |
319 | s8 rssi; | |
320 | u8 rssi_spread; | |
321 | __le16 reserved; | |
322 | __le32 range; | |
323 | __le32 range_variance; | |
324 | __le32 timestamp; | |
325 | } __packed; | |
326 | ||
327 | /** | |
328 | * struct iwl_tof_range_rsp_ntfy - | |
329 | * @request_id: A Token ID of the corresponding Range request | |
330 | * @request_status: status of current measurement session | |
331 | * @last_in_batch: reprot policy (when not all responses are uploaded at once) | |
332 | * @num_of_aps: Number of APs to measure (error if > IWL_MVM_TOF_MAX_APS) | |
333 | */ | |
334 | struct iwl_tof_range_rsp_ntfy { | |
335 | u8 request_id; | |
336 | u8 request_status; | |
337 | u8 last_in_batch; | |
338 | u8 num_of_aps; | |
339 | struct iwl_tof_range_rsp_ap_entry_ntfy ap[IWL_MVM_TOF_MAX_APS]; | |
340 | } __packed; | |
341 | ||
342 | #define IWL_MVM_TOF_MCSI_BUF_SIZE (245) | |
343 | /** | |
344 | * struct iwl_tof_mcsi_notif - used for debug | |
345 | * @token: token ID for the current session | |
346 | * @role: '0' - initiator, '1' - responder | |
347 | * @initiator_bssid: initiator machine | |
348 | * @responder_bssid: responder machine | |
349 | * @mcsi_buffer: debug data | |
350 | */ | |
351 | struct iwl_tof_mcsi_notif { | |
352 | u8 token; | |
353 | u8 role; | |
354 | __le16 reserved; | |
355 | u8 initiator_bssid[ETH_ALEN]; | |
356 | u8 responder_bssid[ETH_ALEN]; | |
357 | u8 mcsi_buffer[IWL_MVM_TOF_MCSI_BUF_SIZE * 4]; | |
358 | } __packed; | |
359 | ||
360 | /** | |
361 | * struct iwl_tof_neighbor_report_notif | |
362 | * @bssid: BSSID of the AP which sent the report | |
363 | * @request_token: same token as the corresponding request | |
364 | * @status: | |
365 | * @report_ie_len: the length of the response frame starting from the Element ID | |
366 | * @data: the IEs | |
367 | */ | |
368 | struct iwl_tof_neighbor_report { | |
369 | u8 bssid[ETH_ALEN]; | |
370 | u8 request_token; | |
371 | u8 status; | |
372 | __le16 report_ie_len; | |
373 | u8 data[]; | |
374 | } __packed; | |
375 | ||
376 | /** | |
377 | * struct iwl_tof_range_abort_cmd | |
378 | * @request_id: corresponds to a range request | |
379 | */ | |
380 | struct iwl_tof_range_abort_cmd { | |
ce792918 GG |
381 | __le32 sub_grp_cmd_id; |
382 | u8 request_id; | |
383 | u8 reserved[3]; | |
384 | } __packed; | |
385 | ||
386 | #endif |