Linux Audio

Check our new training course

Loading...
Note: File does not exist in v6.8.
  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:
 28 * Intel Linux Wireless <linuxwifi@intel.com>
 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 */
 69enum 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 */
 90struct iwl_tof_config_cmd {
 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 */
137struct iwl_tof_responder_config_cmd {
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 */
171struct iwl_tof_range_req_ext_cmd {
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 */
218struct 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 */
246enum 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 */
272struct iwl_tof_range_req_cmd {
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 */
290struct 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 */
312struct 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 */
334struct 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 */
351struct 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 */
368struct 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 */
380struct iwl_tof_range_abort_cmd {
381	__le32 sub_grp_cmd_id;
382	u8 request_id;
383	u8 reserved[3];
384} __packed;
385
386#endif