linux/drivers/net/wireless/intel/iwlwifi/fw/api/tof.h
<<
>>
Prefs
   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 - 2017 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 * The full GNU General Public License is included in this distribution
  20 * in the file called COPYING.
  21 *
  22 * Contact Information:
  23 * Intel Linux Wireless <linuxwifi@intel.com>
  24 * Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
  25 *
  26 * BSD LICENSE
  27 *
  28 * Copyright(c) 2015 - 2017 Intel Deutschland GmbH
  29 * All rights reserved.
  30 *
  31 * Redistribution and use in source and binary forms, with or without
  32 * modification, are permitted provided that the following conditions
  33 * are met:
  34 *
  35 *  * Redistributions of source code must retain the above copyright
  36 *    notice, this list of conditions and the following disclaimer.
  37 *  * Redistributions in binary form must reproduce the above copyright
  38 *    notice, this list of conditions and the following disclaimer in
  39 *    the documentation and/or other materials provided with the
  40 *    distribution.
  41 *  * Neither the name Intel Corporation nor the names of its
  42 *    contributors may be used to endorse or promote products derived
  43 *    from this software without specific prior written permission.
  44 *
  45 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  46 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  47 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  48 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  49 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  50 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  51 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  52 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  53 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  54 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  55 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  56 *
  57 *****************************************************************************/
  58#ifndef __iwl_fw_api_tof_h__
  59#define __iwl_fw_api_tof_h__
  60
  61/* ToF sub-group command IDs */
  62enum iwl_mvm_tof_sub_grp_ids {
  63        TOF_RANGE_REQ_CMD = 0x1,
  64        TOF_CONFIG_CMD = 0x2,
  65        TOF_RANGE_ABORT_CMD = 0x3,
  66        TOF_RANGE_REQ_EXT_CMD = 0x4,
  67        TOF_RESPONDER_CONFIG_CMD = 0x5,
  68        TOF_NW_INITIATED_RES_SEND_CMD = 0x6,
  69        TOF_NEIGHBOR_REPORT_REQ_CMD = 0x7,
  70        TOF_NEIGHBOR_REPORT_RSP_NOTIF = 0xFC,
  71        TOF_NW_INITIATED_REQ_RCVD_NOTIF = 0xFD,
  72        TOF_RANGE_RESPONSE_NOTIF = 0xFE,
  73        TOF_MCSI_DEBUG_NOTIF = 0xFB,
  74};
  75
  76/**
  77 * struct iwl_tof_config_cmd - ToF configuration
  78 * @tof_disabled: 0 enabled, 1 - disabled
  79 * @one_sided_disabled: 0 enabled, 1 - disabled
  80 * @is_debug_mode: 1 debug mode, 0 - otherwise
  81 * @is_buf_required: 1 channel estimation buffer required, 0 - otherwise
  82 */
  83struct iwl_tof_config_cmd {
  84        __le32 sub_grp_cmd_id;
  85        u8 tof_disabled;
  86        u8 one_sided_disabled;
  87        u8 is_debug_mode;
  88        u8 is_buf_required;
  89} __packed;
  90
  91/**
  92 * struct iwl_tof_responder_config_cmd - ToF AP mode (for debug)
  93 * @burst_period: future use: (currently hard coded in the LMAC)
  94 *                The interval between two sequential bursts.
  95 * @min_delta_ftm: future use: (currently hard coded in the LMAC)
  96 *                 The minimum delay between two sequential FTM Responses
  97 *                 in the same burst.
  98 * @burst_duration: future use: (currently hard coded in the LMAC)
  99 *                 The total time for all FTMs handshake in the same burst.
 100 *                 Affect the time events duration in the LMAC.
 101 * @num_of_burst_exp: future use: (currently hard coded in the LMAC)
 102 *                 The number of bursts for the current ToF request. Affect
 103 *                 the number of events allocations in the current iteration.
 104 * @get_ch_est: for xVT only, NA for driver
 105 * @abort_responder: when set to '1' - Responder will terminate its activity
 106 *                   (all other fields in the command are ignored)
 107 * @recv_sta_req_params: 1 - Responder will ignore the other Responder's
 108 *                       params and use the recomended Initiator params.
 109 *                       0 - otherwise
 110 * @channel_num: current AP Channel
 111 * @bandwidth: current AP Bandwidth: 0  20MHz, 1  40MHz, 2  80MHz
 112 * @rate: current AP rate
 113 * @ctrl_ch_position: coding of the control channel position relative to
 114 *      the center frequency:
 115 *
 116 *      40 MHz
 117 *              0 below center, 1 above center
 118 *
 119 *      80 MHz
 120 *              bits [0..1]
 121 *               * 0  the near 20MHz to the center,
 122 *               * 1  the far  20MHz to the center
 123 *              bit[2]
 124 *               as above 40MHz
 125 * @ftm_per_burst: FTMs per Burst
 126 * @ftm_resp_ts_avail: '0' - we don't measure over the Initial FTM Response,
 127 *                '1' - we measure over the Initial FTM Response
 128 * @asap_mode: ASAP / Non ASAP mode for the current WLS station
 129 * @sta_id: index of the AP STA when in AP mode
 130 * @tsf_timer_offset_msecs: The dictated time offset (mSec) from the AP's TSF
 131 * @toa_offset: Artificial addition [0.1nsec] for the ToA - to be used for debug
 132 *              purposes, simulating station movement by adding various values
 133 *              to this field
 134 * @bssid: Current AP BSSID
 135 */
 136struct iwl_tof_responder_config_cmd {
 137        __le32 sub_grp_cmd_id;
 138        __le16 burst_period;
 139        u8 min_delta_ftm;
 140        u8 burst_duration;
 141        u8 num_of_burst_exp;
 142        u8 get_ch_est;
 143        u8 abort_responder;
 144        u8 recv_sta_req_params;
 145        u8 channel_num;
 146        u8 bandwidth;
 147        u8 rate;
 148        u8 ctrl_ch_position;
 149        u8 ftm_per_burst;
 150        u8 ftm_resp_ts_avail;
 151        u8 asap_mode;
 152        u8 sta_id;
 153        __le16 tsf_timer_offset_msecs;
 154        __le16 toa_offset;
 155        u8 bssid[ETH_ALEN];
 156} __packed;
 157
 158/**
 159 * struct iwl_tof_range_request_ext_cmd - extended range req for WLS
 160 * @tsf_timer_offset_msec: the recommended time offset (mSec) from the AP's TSF
 161 * @reserved: reserved
 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 * @ap: per-AP request data
 272 */
 273struct iwl_tof_range_req_cmd {
 274        __le32 sub_grp_cmd_id;
 275        u8 request_id;
 276        u8 initiator;
 277        u8 one_sided_los_disable;
 278        u8 req_timeout;
 279        u8 report_policy;
 280        u8 los_det_disable;
 281        u8 num_of_ap;
 282        u8 macaddr_random;
 283        u8 macaddr_template[ETH_ALEN];
 284        u8 macaddr_mask[ETH_ALEN];
 285        struct iwl_tof_range_req_ap_entry ap[IWL_MVM_TOF_MAX_APS];
 286} __packed;
 287
 288/**
 289 * struct iwl_tof_gen_resp_cmd - generic ToF response
 290 */
 291struct iwl_tof_gen_resp_cmd {
 292        __le32 sub_grp_cmd_id;
 293        u8 data[];
 294} __packed;
 295
 296/**
 297 * struct iwl_tof_range_rsp_ap_entry_ntfy - AP parameters (response)
 298 * @bssid: BSSID of the AP
 299 * @measure_status: current APs measurement status, one of
 300 *      &enum iwl_tof_entry_status.
 301 * @measure_bw: Current AP Bandwidth: 0  20MHz, 1  40MHz, 2  80MHz
 302 * @rtt: The Round Trip Time that took for the last measurement for
 303 *       current AP [nSec]
 304 * @rtt_variance: The Variance of the RTT values measured for current AP
 305 * @rtt_spread: The Difference between the maximum and the minimum RTT
 306 *             values measured for current AP in the current session [nsec]
 307 * @rssi: RSSI as uploaded in the Channel Estimation notification
 308 * @rssi_spread: The Difference between the maximum and the minimum RSSI values
 309 *              measured for current AP in the current session
 310 * @reserved: reserved
 311 * @range: Measured range [cm]
 312 * @range_variance: Measured range variance [cm]
 313 * @timestamp: The GP2 Clock [usec] where Channel Estimation notification was
 314 *             uploaded by the LMAC
 315 */
 316struct iwl_tof_range_rsp_ap_entry_ntfy {
 317        u8 bssid[ETH_ALEN];
 318        u8 measure_status;
 319        u8 measure_bw;
 320        __le32 rtt;
 321        __le32 rtt_variance;
 322        __le32 rtt_spread;
 323        s8 rssi;
 324        u8 rssi_spread;
 325        __le16 reserved;
 326        __le32 range;
 327        __le32 range_variance;
 328        __le32 timestamp;
 329} __packed;
 330
 331/**
 332 * struct iwl_tof_range_rsp_ntfy -
 333 * @request_id: A Token ID of the corresponding Range request
 334 * @request_status: status of current measurement session
 335 * @last_in_batch: reprot policy (when not all responses are uploaded at once)
 336 * @num_of_aps: Number of APs to measure (error if > IWL_MVM_TOF_MAX_APS)
 337 * @ap: per-AP data
 338 */
 339struct iwl_tof_range_rsp_ntfy {
 340        u8 request_id;
 341        u8 request_status;
 342        u8 last_in_batch;
 343        u8 num_of_aps;
 344        struct iwl_tof_range_rsp_ap_entry_ntfy ap[IWL_MVM_TOF_MAX_APS];
 345} __packed;
 346
 347#define IWL_MVM_TOF_MCSI_BUF_SIZE  (245)
 348/**
 349 * struct iwl_tof_mcsi_notif - used for debug
 350 * @token: token ID for the current session
 351 * @role: '0' - initiator, '1' - responder
 352 * @reserved: reserved
 353 * @initiator_bssid: initiator machine
 354 * @responder_bssid: responder machine
 355 * @mcsi_buffer: debug data
 356 */
 357struct iwl_tof_mcsi_notif {
 358        u8 token;
 359        u8 role;
 360        __le16 reserved;
 361        u8 initiator_bssid[ETH_ALEN];
 362        u8 responder_bssid[ETH_ALEN];
 363        u8 mcsi_buffer[IWL_MVM_TOF_MCSI_BUF_SIZE * 4];
 364} __packed;
 365
 366/**
 367 * struct iwl_tof_neighbor_report_notif
 368 * @bssid: BSSID of the AP which sent the report
 369 * @request_token: same token as the corresponding request
 370 * @status:
 371 * @report_ie_len: the length of the response frame starting from the Element ID
 372 * @data: the IEs
 373 */
 374struct iwl_tof_neighbor_report {
 375        u8 bssid[ETH_ALEN];
 376        u8 request_token;
 377        u8 status;
 378        __le16 report_ie_len;
 379        u8 data[];
 380} __packed;
 381
 382/**
 383 * struct iwl_tof_range_abort_cmd
 384 * @request_id: corresponds to a range request
 385 * @reserved: reserved
 386 */
 387struct iwl_tof_range_abort_cmd {
 388        __le32 sub_grp_cmd_id;
 389        u8 request_id;
 390        u8 reserved[3];
 391} __packed;
 392
 393#endif
 394