Add QCA vendor commands/attributes for indoor location
authorLior David <qca_liord@qca.qualcomm.com>
Wed, 29 Jun 2016 14:05:39 +0000 (17:05 +0300)
committerJouni Malinen <j@w1.fi>
Mon, 5 Sep 2016 18:59:18 +0000 (21:59 +0300)
Assign QCA vendor specific commands, attributes, and events for
supporting indoor location features.

These features include:

1. Fine timing measurement (FTM) - allows measurement of distance
between two stations. Based on IEEE P802.11-REVmc/D7.0, 11.24.6 FTM is
performed between two stations: one is an initiator, typically a client
that wants to measure distance to another AP, and one is a responder,
typically an AP which responds to measurement requests from other
clients. The responder can be configured to report its location, either
in absolute coordinates (LCI) or free-form description (LCR).

2. Angle of arrival (AOA) - allows measurement of azimuth and elevation
between two stations.

The above features can be combined to allow a station to get an accurate
indoor location.

Signed-off-by: Lior David <qca_liord@qca.qualcomm.com>
src/common/qca-vendor.h

index 6d92b51..0f36e66 100644 (file)
@@ -128,6 +128,57 @@ enum qca_radiotap_vendor_ids {
  * @QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT: Link layer statistics extension.
  *     enum qca_wlan_vendor_attr_ll_stats_ext attributes are used with this
  *     command and event.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_LOC_GET_CAPA: Get capabilities for
+ *     indoor location features. Capabilities are reported in
+ *     QCA_WLAN_VENDOR_ATTR_LOC_CAPA.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_FTM_START_SESSION: Start an FTM
+ *     (fine timing measurement) session with one or more peers.
+ *     Specify Session cookie in QCA_WLAN_VENDOR_ATTR_FTM_SESSION_COOKIE and
+ *     peer information in QCA_WLAN_VENDOR_ATTR_FTM_MEAS_PEERS.
+ *     On success, 0 or more QCA_NL80211_VENDOR_SUBCMD_FTM_MEAS_RESULT
+ *     events will be reported, followed by
+ *     QCA_NL80211_VENDOR_SUBCMD_FTM_SESSION_DONE event to indicate
+ *     end of session.
+ *     Refer to IEEE P802.11-REVmc/D7.0, 11.24.6
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_FTM_ABORT_SESSION: Abort a running session.
+ *     A QCA_NL80211_VENDOR_SUBCMD_FTM_SESSION_DONE will be reported with
+ *     status code indicating session was aborted.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_FTM_MEAS_RESULT: Event with measurement
+ *     results for one peer. Results are reported in
+ *     QCA_WLAN_VENDOR_ATTR_FTM_MEAS_PEER_RESULTS.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_FTM_SESSION_DONE: Event triggered when
+ *     FTM session is finished, either successfully or aborted by
+ *     request.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_FTM_CFG_RESPONDER: Configure FTM responder
+ *     mode. QCA_WLAN_VENDOR_ATTR_FTM_RESPONDER_ENABLE specifies whether
+ *     to enable or disable the responder. LCI/LCR reports can be
+ *     configured with QCA_WLAN_VENDOR_ATTR_FTM_LCI and
+ *     QCA_WLAN_VENDOR_ATTR_FTM_LCR. Can be called multiple
+ *     times to update the LCI/LCR reports.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS: Perform a standalone AOA (angle of
+ *     arrival) measurement with a single peer. Specify peer MAC address in
+ *     QCA_WLAN_VENDOR_ATTR_MAC_ADDR and measurement type in
+ *     QCA_WLAN_VENDOR_ATTR_AOA_TYPE. Measurement result is reported in
+ *     QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS_RESULT event.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_AOA_ABORT_MEAS: Abort an AOA measurement. Specify
+ *     peer MAC address in QCA_WLAN_VENDOR_ATTR_MAC_ADDR.
+ *
+ * @QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS_RESULT: Event that reports
+ *     the AOA measurement result.
+ *     Peer MAC address reported in QCA_WLAN_VENDOR_ATTR_MAC_ADDR.
+ *     success/failure status is reported in
+ *     QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS.
+ *     Measurement data is reported in QCA_WLAN_VENDOR_ATTR_AOA_MEAS_RESULT.
+ *     The antenna array(s) used in the measurement are reported in
+ *     QCA_WLAN_VENDOR_ATTR_LOC_ANTENNA_ARRAY_MASK.
  */
 enum qca_nl80211_vendor_subcmds {
        QCA_NL80211_VENDOR_SUBCMD_UNSPEC = 0,
@@ -216,6 +267,16 @@ enum qca_nl80211_vendor_subcmds {
        QCA_NL80211_VENDOR_SUBCMD_GPIO_CONFIG_COMMAND = 125,
        QCA_NL80211_VENDOR_SUBCMD_GET_HW_CAPABILITY = 126,
        QCA_NL80211_VENDOR_SUBCMD_LL_STATS_EXT = 127,
+       /* FTM/indoor location subcommands */
+       QCA_NL80211_VENDOR_SUBCMD_LOC_GET_CAPA = 128,
+       QCA_NL80211_VENDOR_SUBCMD_FTM_START_SESSION = 129,
+       QCA_NL80211_VENDOR_SUBCMD_FTM_ABORT_SESSION = 130,
+       QCA_NL80211_VENDOR_SUBCMD_FTM_MEAS_RESULT = 131,
+       QCA_NL80211_VENDOR_SUBCMD_FTM_SESSION_DONE = 132,
+       QCA_NL80211_VENDOR_SUBCMD_FTM_CFG_RESPONDER = 133,
+       QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS = 134,
+       QCA_NL80211_VENDOR_SUBCMD_AOA_ABORT_MEAS = 135,
+       QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS_RESULT = 136,
 };
 
 
@@ -245,6 +306,77 @@ enum qca_wlan_vendor_attr {
        QCA_WLAN_VENDOR_ATTR_MAX_CONCURRENT_CHANNELS_5_0_BAND = 11,
        /* Unsigned 32-bit value from enum qca_set_band. */
        QCA_WLAN_VENDOR_ATTR_SETBAND_VALUE = 12,
+       /* Dummy (NOP) attribute for 64 bit padding */
+       QCA_WLAN_VENDOR_ATTR_PAD = 13,
+       /* Unique FTM session cookie (Unsigned 64 bit). Specified in
+        * QCA_NL80211_VENDOR_SUBCMD_FTM_START_SESSION. Reported in
+        * the session in QCA_NL80211_VENDOR_SUBCMD_FTM_MEAS_RESULT and
+        * QCA_NL80211_VENDOR_SUBCMD_FTM_SESSION_DONE.
+        */
+       QCA_WLAN_VENDOR_ATTR_FTM_SESSION_COOKIE = 14,
+       /* Indoor location capabilities, returned by
+        * QCA_NL80211_VENDOR_SUBCMD_LOC_GET_CAPA.
+        * see enum qca_wlan_vendor_attr_loc_capa.
+        */
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA = 15,
+       /* Array of nested attributes containing information about each peer
+        * in FTM measurement session. See enum qca_wlan_vendor_attr_peer_info
+        * for supported attributes for each peer.
+        */
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_PEERS = 16,
+       /* Array of nested attributes containing measurement results for
+        * one or more peers, reported by the
+        * QCA_NL80211_VENDOR_SUBCMD_FTM_MEAS_RESULT event.
+        * See enum qca_wlan_vendor_attr_peer_result for list of supported
+        * attributes.
+        */
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_PEER_RESULTS = 17,
+       /* Flag attribute for enabling or disabling responder functionality. */
+       QCA_WLAN_VENDOR_ATTR_FTM_RESPONDER_ENABLE = 18,
+       /* Used in the QCA_NL80211_VENDOR_SUBCMD_FTM_CFG_RESPONDER
+        * command to specify the LCI report that will be sent by
+        * the responder during a measurement exchange. The format is
+        * defined in IEEE P802.11-REVmc/D7.0, 9.4.2.22.10.
+        */
+       QCA_WLAN_VENDOR_ATTR_FTM_LCI = 19,
+       /* Used in the QCA_NL80211_VENDOR_SUBCMD_FTM_CFG_RESPONDER
+        * command to specify the location civic report that will
+        * be sent by the responder during a measurement exchange.
+        * The format is defined in IEEE P802.11-REVmc/D7.0, 9.4.2.22.13.
+        */
+       QCA_WLAN_VENDOR_ATTR_FTM_LCR = 20,
+       /* Session/measurement completion status code,
+        * reported in QCA_NL80211_VENDOR_SUBCMD_FTM_SESSION_DONE and
+        * QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS_RESULT
+        * see enum qca_vendor_attr_loc_session_status.
+        */
+       QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS = 21,
+       /* Initial dialog token used by responder (0 if not specified),
+        * unsigned 8 bit value.
+        */
+       QCA_WLAN_VENDOR_ATTR_FTM_INITIAL_TOKEN = 22,
+       /* AOA measurement type. Requested in QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS
+        * and optionally in QCA_NL80211_VENDOR_SUBCMD_FTM_START_SESSION if
+        * AOA measurements are needed as part of an FTM session.
+        * Reported by QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS_RESULT. See
+        * enum qca_wlan_vendor_attr_aoa_type.
+        */
+       QCA_WLAN_VENDOR_ATTR_AOA_TYPE = 23,
+       /* A bit mask (unsigned 32 bit value) of antenna arrays used
+        * by indoor location measurements. Refers to the antenna
+        * arrays described by QCA_VENDOR_ATTR_LOC_CAPA_ANTENNA_ARRAYS.
+        */
+       QCA_WLAN_VENDOR_ATTR_LOC_ANTENNA_ARRAY_MASK = 24,
+       /* AOA measurement data. Its contents depends on the AOA measurement
+        * type and antenna array mask:
+        * QCA_WLAN_VENDOR_ATTR_AOA_TYPE_TOP_CIR_PHASE: array of U16 values,
+        * phase of the strongest CIR path for each antenna in the measured
+        * array(s).
+        * QCA_WLAN_VENDOR_ATTR_AOA_TYPE_TOP_CIR_PHASE_AMP: array of 2 U16
+        * values, phase and amplitude of the strongest CIR path for each
+        * antenna in the measured array(s).
+        */
+       QCA_WLAN_VENDOR_ATTR_AOA_MEAS_RESULT = 25,
        /* keep last */
        QCA_WLAN_VENDOR_ATTR_AFTER_LAST,
        QCA_WLAN_VENDOR_ATTR_MAX        = QCA_WLAN_VENDOR_ATTR_AFTER_LAST - 1,
@@ -878,4 +1010,311 @@ enum qca_wlan_vendor_attr_ll_stats_ext {
                QCA_WLAN_VENDOR_ATTR_LL_STATS_EXT_LAST - 1
 };
 
+/* Attributes for FTM commands and events */
+
+/**
+ * enum qca_wlan_vendor_attr_loc_capa - Indoor location capabilities
+ *
+ * @QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAGS: Various flags. See
+ *     enum qca_wlan_vendor_attr_loc_capa_flags.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_CAPA_MAX_NUM_SESSIONS: Maximum number
+ *     of measurement sessions that can run concurrently.
+ *     Default is one session (no session concurrency).
+ * @QCA_WLAN_VENDOR_ATTR_FTM_CAPA_MAX_NUM_PEERS: The total number of unique
+ *     peers that are supported in running sessions. For example,
+ *     if the value is 8 and maximum number of sessions is 2, you can
+ *     have one session with 8 unique peers, or 2 sessions with 4 unique
+ *     peers each, and so on.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_CAPA_MAX_NUM_BURSTS_EXP: Maximum number
+ *     of bursts per peer, as an exponent (2^value). Default is 0,
+ *     meaning no multi-burst support.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_CAPA_MAX_MEAS_PER_BURST: Maximum number
+ *     of measurement exchanges allowed in a single burst.
+ * @QCA_WLAN_VENDOR_ATTR_AOA_CAPA_SUPPORTED_TYPES: Supported AOA measurement
+ *     types. A bit mask (unsigned 32 bit value), each bit corresponds
+ *     to an AOA type as defined by enum qca_vendor_attr_aoa_type.
+ */
+enum qca_wlan_vendor_attr_loc_capa {
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_INVALID,
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAGS,
+       QCA_WLAN_VENDOR_ATTR_FTM_CAPA_MAX_NUM_SESSIONS,
+       QCA_WLAN_VENDOR_ATTR_FTM_CAPA_MAX_NUM_PEERS,
+       QCA_WLAN_VENDOR_ATTR_FTM_CAPA_MAX_NUM_BURSTS_EXP,
+       QCA_WLAN_VENDOR_ATTR_FTM_CAPA_MAX_MEAS_PER_BURST,
+       QCA_WLAN_VENDOR_ATTR_AOA_CAPA_SUPPORTED_TYPES,
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_AFTER_LAST,
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_MAX =
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_AFTER_LAST - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_loc_capa_flags: Indoor location capability flags
+ *
+ * @QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_FTM_RESPONDER: Set if driver
+ *     can be configured as an FTM responder (for example, an AP that
+ *     services FTM requests). QCA_NL80211_VENDOR_SUBCMD_FTM_CFG_RESPONDER
+ *     will be supported if set.
+ * @QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_FTM_INITIATOR: Set if driver
+ *     can run FTM sessions. QCA_NL80211_VENDOR_SUBCMD_FTM_START_SESSION
+ *     will be supported if set.
+* @QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_ASAP: Set if FTM responder
+ *     supports immediate (ASAP) response.
+ * @QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_AOA: Set if driver supports standalone
+ *     AOA measurement using QCA_NL80211_VENDOR_SUBCMD_AOA_MEAS.
+ * @QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_AOA_IN_FTM: Set if driver supports
+ *     requesting AOA measurements as part of an FTM session.
+ */
+enum qca_wlan_vendor_attr_loc_capa_flags {
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_FTM_RESPONDER = 1 << 0,
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_FTM_INITIATOR = 1 << 1,
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_ASAP = 1 << 2,
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_AOA = 1 << 3,
+       QCA_WLAN_VENDOR_ATTR_LOC_CAPA_FLAG_AOA_IN_FTM = 1 << 4,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_ftm_peer_info: Information about
+ *     a single peer in a measurement session.
+ *
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_MAC_ADDR: The MAC address of the peer.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAGS: Various flags related
+ *     to measurement. See enum qca_wlan_vendor_attr_ftm_peer_meas_flags.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_PARAM: Nested attribute of
+ *     FTM measurement parameters, as specified by IEEE P802.11-REVmc/D7.0
+ *     9.4.2.167. See enum qca_wlan_vendor_attr_ftm_meas_param for
+ *     list of supported attributes.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_SECURE_TOKEN_ID: Initial token ID for
+ *     secure measurement.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_AOA_BURST_PERIOD: Request AOA
+ *     measurement every <value> bursts. If 0 or not specified,
+ *     AOA measurements will be disabled for this peer.
+ */
+enum qca_wlan_vendor_attr_ftm_peer_info {
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_INVALID,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_MAC_ADDR,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAGS,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_PARAM,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_SECURE_TOKEN_ID,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_AOA_BURST_PERIOD,
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_AFTER_LAST,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_MAX =
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_AFTER_LAST - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_ftm_peer_meas_flags: Measurement request flags,
+ *     per-peer
+ *
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAG_ASAP: If set, request
+ *     immediate (ASAP) response from peer.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAG_LCI: If set, request
+ *     LCI report from peer. The LCI report includes the absolute
+ *     location of the peer in "official" coordinates (similar to GPS).
+ *     See IEEE P802.11-REVmc/D7.0, 11.24.6.7 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAG_LCR: If set, request
+ *     Location civic report from peer. The LCR includes the location
+ *     of the peer in free-form format. See IEEE P802.11-REVmc/D7.0,
+ *     11.24.6.7 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAG_SECURE: If set,
+ *     request a secure measurement.
+ *     QCA_WLAN_VENDOR_ATTR_FTM_PEER_SECURE_TOKEN_ID must also be provided.
+ */
+enum qca_wlan_vendor_attr_ftm_peer_meas_flags {
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAG_ASAP    = 1 << 0,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAG_LCI     = 1 << 1,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAG_LCR     = 1 << 2,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_MEAS_FLAG_SECURE  = 1 << 3,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_ftm_meas_param: Measurement parameters
+ *
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PARAM_MEAS_PER_BURST: Number of measurements
+ *     to perform in a single burst.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PARAM_NUM_BURSTS_EXP: Number of bursts to
+ *     perform, specified as an exponent (2^value).
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PARAM_BURST_DURATION: Duration of burst
+ *     instance, as specified in IEEE P802.11-REVmc/D7.0, 9.4.2.167.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PARAM_BURST_PERIOD: Time between bursts,
+ *     as specified in IEEE P802.11-REVmc/D7.0, 9.4.2.167. Must
+ *     be larger than QCA_WLAN_VENDOR_ATTR_FTM_PARAM_BURST_DURATION.
+ */
+enum qca_wlan_vendor_attr_ftm_meas_param {
+       QCA_WLAN_VENDOR_ATTR_FTM_PARAM_INVALID,
+       QCA_WLAN_VENDOR_ATTR_FTM_PARAM_MEAS_PER_BURST,
+       QCA_WLAN_VENDOR_ATTR_FTM_PARAM_NUM_BURSTS_EXP,
+       QCA_WLAN_VENDOR_ATTR_FTM_PARAM_BURST_DURATION,
+       QCA_WLAN_VENDOR_ATTR_FTM_PARAM_BURST_PERIOD,
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_FTM_PARAM_AFTER_LAST,
+       QCA_WLAN_VENDOR_ATTR_FTM_PARAM_MAX =
+       QCA_WLAN_VENDOR_ATTR_FTM_PARAM_AFTER_LAST - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_ftm_peer_result: Per-peer results
+ *
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_MAC_ADDR: MAC address of the reported
+ *      peer.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS: Status of measurement
+ *     request for this peer.
+ *     See enum qca_wlan_vendor_attr_ftm_peer_result_status.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_FLAGS: Various flags related
+ *     to measurement results for this peer.
+ *     See enum qca_wlan_vendor_attr_ftm_peer_result_flags.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_VALUE_SECONDS: Specified when
+ *     request failed and peer requested not to send an additional request
+ *     for this number of seconds.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_LCI: LCI report when received
+ *     from peer. In the format specified by IEEE P802.11-REVmc/D7.0,
+ *     9.4.2.22.10.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_LCR: Location civic report when
+ *     received from peer. In the format specified by IEEE P802.11-REVmc/D7.0,
+ *     9.4.2.22.13.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_MEAS_PARAMS: Reported when peer
+ *     overridden some measurement request parameters. See
+ *     enum qca_wlan_vendor_attr_ftm_meas_param.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_AOA_MEAS: AOA measurement
+ *     for this peer. Same contents as @QCA_WLAN_VENDOR_ATTR_AOA_MEAS_RESULT.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_MEAS: Array of measurement
+ *     results. Each entry is a nested attribute defined
+ *     by enum qca_wlan_vendor_attr_ftm_meas.
+ */
+enum qca_wlan_vendor_attr_ftm_peer_result {
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_INVALID,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_MAC_ADDR,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_FLAGS,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_VALUE_SECONDS,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_LCI,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_LCR,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_MEAS_PARAMS,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_AOA_MEAS,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_MEAS,
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_AFTER_LAST,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_MAX =
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_AFTER_LAST - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_ftm_peer_result_status
+ *
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS_OK: Request sent ok and results
+ *     will be provided. Peer may have overridden some measurement parameters,
+ *     in which case overridden parameters will be report by
+ *     QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_MEAS_PARAM attribute.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS_INCAPABLE: Peer is incapable
+ *     of performing the measurement request. No more results will be sent
+ *     for this peer in this session.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS_FAILED: Peer reported request
+ *     failed, and requested not to send an additional request for number
+ *     of seconds specified by QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_VALUE_SECONDS
+ *     attribute.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS_INVALID: Request validation
+ *     failed. Request was not sent over the air.
+ */
+enum qca_wlan_vendor_attr_ftm_peer_result_status {
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS_OK,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS_INCAPABLE,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS_FAILED,
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_STATUS_INVALID,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_ftm_peer_result_flags: Various flags
+ *  for measurement result, per-peer
+ *
+ * @QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_FLAG_DONE: If set,
+ *     measurement completed for this peer. No more results will be reported
+ *     for this peer in this session.
+ */
+enum qca_wlan_vendor_attr_ftm_peer_result_flags {
+       QCA_WLAN_VENDOR_ATTR_FTM_PEER_RES_FLAG_DONE = 1 << 0,
+};
+
+/**
+ * enum qca_vendor_attr_loc_session_status: Session completion status code
+ *
+ * @QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS_OK: Session completed
+ *     successfully.
+ * @QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS_ABORTED: Session aborted
+ *     by request.
+ * @QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS_INVALID: Session request
+ *     was invalid and was not started.
+ * @QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS_FAILED: Session had an error
+ *     and did not complete normally (for example out of resources).
+ */
+enum qca_vendor_attr_loc_session_status {
+       QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS_OK,
+       QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS_ABORTED,
+       QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS_INVALID,
+       QCA_WLAN_VENDOR_ATTR_LOC_SESSION_STATUS_FAILED,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_ftm_meas: Single measurement data
+ *
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_T1: Time of departure (TOD) of FTM packet as
+ *     recorded by responder, in picoseconds.
+ *     See IEEE P802.11-REVmc/D7.0, 11.24.6.4 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_T2: Time of arrival (TOA) of FTM packet at
+ *     initiator, in picoseconds.
+ *     See IEEE P802.11-REVmc/D7.0, 11.24.6.4 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_T3: TOD of ACK packet as recorded by
+ *     initiator, in picoseconds.
+ *     See IEEE P802.11-REVmc/D7.0, 11.24.6.4 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_T4: TOA of ACK packet at
+ *     responder, in picoseconds.
+ *     See IEEE P802.11-REVmc/D7.0, 11.24.6.4 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_RSSI: RSSI (signal level) as recorded
+ *     during this measurement exchange. Optional and will be provided if
+ *     the hardware can measure it.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_TOD_ERR: TOD error reported by
+ *     responder. Not always provided.
+ *     See IEEE P802.11-REVmc/D7.0, 9.6.8.33 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_TOA_ERR: TOA error reported by
+ *     responder. Not always provided.
+ *     See IEEE P802.11-REVmc/D7.0, 9.6.8.33 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_INITIATOR_TOD_ERR: TOD error measured by
+ *     initiator. Not always provided.
+ *     See IEEE P802.11-REVmc/D7.0, 9.6.8.33 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_INITIATOR_TOA_ERR: TOA error measured by
+ *     initiator. Not always provided.
+ *     See IEEE P802.11-REVmc/D7.0, 9.6.8.33 for more information.
+ * @QCA_WLAN_VENDOR_ATTR_FTM_MEAS_PAD: Dummy attribute for padding.
+ */
+enum qca_wlan_vendor_attr_ftm_meas {
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_T1,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_T2,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_T3,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_T4,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_RSSI,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_TOD_ERR,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_TOA_ERR,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_INITIATOR_TOD_ERR,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_INITIATOR_TOA_ERR,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_PAD,
+       /* keep last */
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_AFTER_LAST,
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_MAX =
+       QCA_WLAN_VENDOR_ATTR_FTM_MEAS_AFTER_LAST - 1,
+};
+
+/**
+ * enum qca_wlan_vendor_attr_aoa_type - AOA measurement type
+ *
+ * @QCA_WLAN_VENDOR_ATTR_AOA_TYPE_TOP_CIR_PHASE: Phase of the strongest
+ *     CIR (channel impulse response) path for each antenna.
+ * @QCA_WLAN_VENDOR_ATTR_AOA_TYPE_TOP_CIR_PHASE_AMP: Phase and amplitude
+ *     of the strongest CIR path for each antenna.
+ */
+enum qca_wlan_vendor_attr_aoa_type {
+       QCA_WLAN_VENDOR_ATTR_AOA_TYPE_TOP_CIR_PHASE,
+       QCA_WLAN_VENDOR_ATTR_AOA_TYPE_TOP_CIR_PHASE_AMP,
+       QCA_WLAN_VENDOR_ATTR_AOA_TYPE_MAX
+};
+
 #endif /* QCA_VENDOR_H */