/******************************************************************************
 *
 * Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
 * Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
 * Copyright(c) 2016 - 2017 Intel Deutschland GmbH
 * Copyright(c) 2018 Intel Corporation
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 *
 *  * Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer.
 *  * Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in
 *    the documentation and/or other materials provided with the
 *    distribution.
 *  * Neither the name Intel Corporation nor the names of its
 *    contributors may be used to endorse or promote products derived
 *    from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 *****************************************************************************/
#ifndef SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_VENDOR_CMD_H_
#define SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_VENDOR_CMD_H_

#define INTEL_OUI 0x001735

/**
 * enum iwl_mvm_vendor_cmd - supported vendor commands
 * @IWL_MVM_VENDOR_CMD_SET_LOW_LATENCY: set low-latency mode for the given
 *  virtual interface
 * @IWL_MVM_VENDOR_CMD_GET_LOW_LATENCY: query low-latency mode
 * @IWL_MVM_VENDOR_CMD_TCM_EVENT: TCM event
 * @IWL_MVM_VENDOR_CMD_LTE_STATE: inform the LTE modem state
 * @IWL_MVM_VENDOR_CMD_LTE_COEX_CONFIG_INFO: configure LTE-Coex static
 *  parameters
 * @IWL_MVM_VENDOR_CMD_LTE_COEX_DYNAMIC_INFO: configure LTE dynamic parameters
 * @IWL_MVM_VENDOR_CMD_LTE_COEX_SPS_INFO: configure semi oersistent info
 * @IWL_MVM_VENDOR_CMD_LTE_COEX_WIFI_RPRTD_CHAN: Wifi reported channel as
 *  calculated by the coex-manager
 * @IWL_MVM_VENDOR_CMD_SET_COUNTRY: set a new mcc regulatory information
 * @IWL_MVM_VENDOR_CMD_PROXY_FRAME_FILTERING: filter GTK, gratuitous
 *  ARP & unsolicited NA
 * @IWL_MVM_VENDOR_CMD_TDLS_PEER_CACHE_ADD: add a peer to the TDLS peer cache
 * @IWL_MVM_VENDOR_CMD_TDLS_PEER_CACHE_DEL: delete a peer from the TDLS peer
 *  cache
 * @IWL_MVM_VENDOR_CMD_TDLS_PEER_CACHE_QUERY: query traffic statistics for a
 *  peer in the TDLS cache
 * @IWL_MVM_VENDOR_CMD_SET_NIC_TXPOWER_LIMIT: set the NIC's (SAR) TX power limit
 * @IWL_MVM_VENDOR_CMD_OPPPS_WA: wa to pass Sigma test - applicable code is
 *  claused under CPTCFG_IWLMVM_P2P_OPPPS_TEST_WA
 * @IWL_MVM_VENDOR_CMD_GSCAN_GET_CAPABILITIES: get driver gscan capabilities as
 *  specified in %IWL_MVM_VENDOR_ATTR_GSCAN_*
 * @IWL_MVM_VENDOR_CMD_GSCAN_START: set gscan parameters and start gscan
 * @IWL_MVM_VENDOR_CMD_GSCAN_STOP: stop a previously started gscan
 * @IWL_MVM_VENDOR_CMD_GSCAN_RESULTS_EVENT: event that reports scan results
 *  from gscan. This event is sent when the scan results buffer has reached
 *  the report threshold, or when scanning a bucket with report mode
 *  %IWL_MVM_VENDOR_GSCAN_REPORT_BUFFER_COMPLETE was completed.
 * @IWL_MVM_VENDOR_CMD_GSCAN_SET_BSSID_HOTLIST: set a list of AP's to track
 *  changes in their RSSI and report scan results history when RSSI goes
 *  above/below threshold. Sending this command with an empty list of AP's
 *  will cancel previous set_bssid_hotlist request.
 * @IWL_MVM_VENDOR_CMD_GSCAN_SET_SIGNIFICANT_CHANGE: set a list of APs to track
 *  significant changes in their RSSI. Sending this command with an empty
 *  list of AP's will cancel previous set_significant_change request.
 * @IWL_MVM_VENDOR_CMD_GSCAN_HOTLIST_CHANGE_EVENT: event that indicates that an
 *  AP from the BSSID hotlist was lost or found.
 * @IWL_MVM_VENDOR_CMD_GSCAN_SIGNIFICANT_CHANGE_EVENT: event that indicates a
 *  significant change in the RSSI level of beacons received from a certain
 *  AP.
 * @IWL_MVM_VENDOR_CMD_RXFILTER: Set/clear rx filter.
 * @IWL_MVM_VENDOR_CMD_GSCAN_BEACON_EVENT: event that reports a
 *  beacon/probe response was received, and contains information from the
 *  beacon/probe response. This event is sent for buckets with report mode
 *  set to %IWL_MVM_VENDOR_GSCAN_REPORT_BUFFER_COMPLETE_RESULTS.
 * @IWL_MVM_VENDOR_CMD_DBG_COLLECT: collect debug data
 * @IWL_MVM_VENDOR_CMD_NAN_FAW_CONF: Configure post NAN further availability.
 * @IWL_MVM_VENDOR_CMD_SET_SAR_PROFILE: set the NIC's tx power limits
 *  according to the specified tx power profiles. In this command
 *  %IWL_MVM_VENDOR_ATTR_SAR_CHAIN_A_PROFILE and
 *  %IWL_MVM_VENDOR_ATTR_SAR_CHAIN_B_PROFILE must be passed.
 * @IWL_MVM_VENDOR_CMD_GET_SAR_PROFILE_INFO: get sar profile information.
 *  This command provides the user with the following information:
 *  Number of enabled SAR profiles, current used SAR profile per chain.
 * @IWL_MVM_VENDOR_CMD_NEIGHBOR_REPORT_REQUEST: Send a neighbor report request
 *  to the AP we are currently connected to. The request parameters are
 *  specified with %IWL_MVM_VENDOR_ATTR_NR_*.
 * @IWL_MVM_VENDOR_CMD_NEIGHBOR_REPORT_RESPONSE: An event that reports a list of
 *  neighbor APs received in a neighbor report response frame. The report is
 *  a nested list of &enum iwl_mvm_vendor_neighbor_report.
 * @IWL_MVM_VENDOR_CMD_GET_SAR_GEO_PROFILE: get sar geographic profile
 *  information. This command provides the user with the following
 *  information: Per band tx power offset for chain A and chain B as well as
 *  maximum allowed tx power on this band.
 * @IWL_MVM_VENDOR_CMD_TEST_FIPS: request the output of a certain function for
 *  the specified test vector. The test vector is specified with one of:
 *  &IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_SHA,
 *  &IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HMAC, or
 *  &IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_KDF. Only one test vector shall be
 *  specified per test command.
 *  The result output is sent back in &IWL_MVM_VENDOR_ATTR_FIPS_TEST_RESULT
 *  attribute. In case the function failed to produce an output for the
 *  requested test vector, &IWL_MVM_VENDOR_ATTR_FIPS_TEST_RESULT is not set.
 * @IWL_MVM_VENDOR_CMD_FMAC_CONNECT_PARAMS: set fmac specific parameters for
 *  future connect commands. These parameters will affect all following
 *  connect commands. To clear previous configuration, send the command with
 *  no attributes.
 * @IWL_MVM_VENDOR_CMD_FMAC_CONFIG: set one of the fmac configuration options.
 *  &IWL_MVM_VENDOR_ATTR_FMAC_CONFIG_STR specifies the configuration string.
 */

enum iwl_mvm_vendor_cmd {
    IWL_MVM_VENDOR_CMD_SET_LOW_LATENCY = 0x00,
    IWL_MVM_VENDOR_CMD_GET_LOW_LATENCY = 0x01,
    IWL_MVM_VENDOR_CMD_TCM_EVENT = 0x02,
    IWL_MVM_VENDOR_CMD_LTE_STATE = 0x03,
    IWL_MVM_VENDOR_CMD_LTE_COEX_CONFIG_INFO = 0x04,
    IWL_MVM_VENDOR_CMD_LTE_COEX_DYNAMIC_INFO = 0x05,
    IWL_MVM_VENDOR_CMD_LTE_COEX_SPS_INFO = 0x06,
    IWL_MVM_VENDOR_CMD_LTE_COEX_WIFI_RPRTD_CHAN = 0x07,
    IWL_MVM_VENDOR_CMD_SET_COUNTRY = 0x08,
    IWL_MVM_VENDOR_CMD_PROXY_FRAME_FILTERING = 0x09,
    IWL_MVM_VENDOR_CMD_TDLS_PEER_CACHE_ADD = 0x0a,
    IWL_MVM_VENDOR_CMD_TDLS_PEER_CACHE_DEL = 0x0b,
    IWL_MVM_VENDOR_CMD_TDLS_PEER_CACHE_QUERY = 0x0c,
    IWL_MVM_VENDOR_CMD_SET_NIC_TXPOWER_LIMIT = 0x0d,
    IWL_MVM_VENDOR_CMD_OPPPS_WA = 0x0e,
    IWL_MVM_VENDOR_CMD_GSCAN_GET_CAPABILITIES = 0x0f,
    IWL_MVM_VENDOR_CMD_GSCAN_START = 0x10,
    IWL_MVM_VENDOR_CMD_GSCAN_STOP = 0x11,
    IWL_MVM_VENDOR_CMD_GSCAN_RESULTS_EVENT = 0x12,
    IWL_MVM_VENDOR_CMD_GSCAN_SET_BSSID_HOTLIST = 0x13,
    IWL_MVM_VENDOR_CMD_GSCAN_SET_SIGNIFICANT_CHANGE = 0x14,
    IWL_MVM_VENDOR_CMD_GSCAN_HOTLIST_CHANGE_EVENT = 0x15,
    IWL_MVM_VENDOR_CMD_GSCAN_SIGNIFICANT_CHANGE_EVENT = 0x16,
    IWL_MVM_VENDOR_CMD_RXFILTER = 0x17,
    IWL_MVM_VENDOR_CMD_GSCAN_BEACON_EVENT = 0x18,
    IWL_MVM_VENDOR_CMD_DBG_COLLECT = 0x19,
    IWL_MVM_VENDOR_CMD_NAN_FAW_CONF = 0x1a,
    /* 0x1b is deprecated */
    IWL_MVM_VENDOR_CMD_SET_SAR_PROFILE = 0x1c,
    IWL_MVM_VENDOR_CMD_GET_SAR_PROFILE_INFO = 0x1d,
    IWL_MVM_VENDOR_CMD_NEIGHBOR_REPORT_REQUEST = 0x1e,
    IWL_MVM_VENDOR_CMD_NEIGHBOR_REPORT_RESPONSE = 0x1f,
    IWL_MVM_VENDOR_CMD_GET_SAR_GEO_PROFILE = 0x20,
    IWL_MVM_VENDOR_CMD_TEST_FIPS = 0x21,
    IWL_MVM_VENDOR_CMD_FMAC_CONNECT_PARAMS = 0x22,
    IWL_MVM_VENDOR_CMD_FMAC_CONFIG = 0x23,
};

/**
 * enum iwl_mvm_vendor_load - traffic load identifiers
 * @IWL_MVM_VENDOR_LOAD_LOW: low load: less than 10% airtime usage
 * @IWL_MVM_VENDOR_LOAD_MEDIUM: medium load: 10% or more, but less than 50%
 * @IWL_MVM_VENDOR_LOAD_HIGH: high load: 50% or more
 *
 * Traffic load is calculated based on the percentage of airtime used
 * (TX airtime is accounted as RTS+CTS+PPDU+ACK/BlockACK, RX airtime
 * is just the PPDU's time)
 */
enum iwl_mvm_vendor_load {
    IWL_MVM_VENDOR_LOAD_LOW,
    IWL_MVM_VENDOR_LOAD_MEDIUM,
    IWL_MVM_VENDOR_LOAD_HIGH,
};

/**
 * enum iwl_mvm_vendor_gscan_report_mode - gscan scan results report modes
 * @IWL_MVM_VENDOR_GSCAN_REPORT_BUFFER_FULL: report that scan results are
 *  available only when the scan results buffer reaches the report
 *  threshold. The report threshold is set for each bucket.
 * @IWL_MVM_VENDOR_GSCAN_REPORT_BUFFER_EACH_SCAN: report that scan results are
 *  available when scanning of this bucket is complete.
 * @IWL_MVM_VENDOR_GSCAN_REPORT_BUFFER_FULL_RESULTS: forward scan results
 *  (beacons/probe responses) in real time to userspace.
 * @IWL_MVM_VENDOR_GSCAN_REPORT_HISTORY_RESERVED: reserved.
 * @IWL_MVM_VENDOR_GSCAN_REPORT_NO_BATCH: do not fill scan history buffer.
 * @NUM_IWL_MVM_VENDOR_GSCAN_REPORT: number of report mode attributes.
 *
 * Note that these must match the firmware API.
 */
enum iwl_mvm_vendor_gscan_report_mode {
    IWL_MVM_VENDOR_GSCAN_REPORT_BUFFER_FULL,
    IWL_MVM_VENDOR_GSCAN_REPORT_BUFFER_EACH_SCAN,
    IWL_MVM_VENDOR_GSCAN_REPORT_BUFFER_FULL_RESULTS,
    IWL_MVM_VENDOR_GSCAN_REPORT_HISTORY_RESERVED,
    IWL_MVM_VENDOR_GSCAN_REPORT_NO_BATCH,
    NUM_IWL_MVM_VENDOR_GSCAN_REPORT,
};

/**
 * enum iwl_mvm_vendor_gscan_channel_spec - gscan channel specification
 * @IWL_MVM_VENDOR_CHANNEL_SPEC_INVALID: attribute number 0 is reserved
 * @IWL_MVM_VENDOR_CHANNEL_SPEC_CHANNEL: channel number
 * @IWL_MVM_VENDOR_CHANNEL_SPEC_DWELL_TIME: uint16_t attribute specifying dwell
 *  time on this channel.
 * @IWL_MVM_VENDOR_CHANNEL_SPEC_PASSIVE: flag attribute. If set, passive
 *  scan should be performed on this channel.
 * @NUM_IWL_MVM_VENDOR_CHANNEL_SPEC: number of channel spec attributes.
 * @MAX_IWL_MVM_VENDOR_CHANNEL_SPEC: highest channel spec attribute number.
 */
enum iwl_mvm_vendor_gscan_channel_spec {
    IWL_MVM_VENDOR_CHANNEL_SPEC_INVALID,
    IWL_MVM_VENDOR_CHANNEL_SPEC_CHANNEL,
    IWL_MVM_VENDOR_CHANNEL_SPEC_DWELL_TIME,
    IWL_MVM_VENDOR_CHANNEL_SPEC_PASSIVE,
    NUM_IWL_MVM_VENDOR_CHANNEL_SPEC,
    MAX_IWL_MVM_VENDOR_CHANNEL_SPEC = NUM_IWL_MVM_VENDOR_CHANNEL_SPEC - 1,
};

/**
 * enum iwl_mvm_vendor_gscan_bucket_spec - gscan bucket specification
 * @IWL_MVM_VENDOR_BUCKET_SPEC_INVALID: attribute number 0 is reserved
 * @IWL_MVM_VENDOR_BUCKET_SPEC_INDEX: bucket index
 * @IWL_MVM_VENDOR_BUCKET_SPEC_BAND: band to scan as specified in
 *  &enum iwl_gscan_band. When not set, the channel list is used.
 * @IWL_MVM_VENDOR_BUCKET_SPEC_PERIOD: interval between this bucket scans,
 *  in msecs.
 * @IWL_MVM_VENDOR_BUCKET_SPEC_REPORT_MODE: when to report scan results.
 *  Available modes are specified in &enum iwl_mvm_vendor_report_mode.
 * @IWL_MVM_VENDOR_BUCKET_SPEC_CHANNELS: array of channels to scan for this
 *  bucket. Each channel is specified with a nested attribute of
 *  %IWL_MVM_VENDOR_CHANNEL_SPEC. This channel list is used when
 *  %IWL_MVM_VENDOR_BUCKET_SPEC_BAND is set to
 *  %IWL_MVM_VENDOR_BAND_UNSPECIFIED.
 * @IWL_MVM_VENDOR_BUCKET_SPEC_MAX_PERIOD: maximum scan interval. If it's
 *  non zero or different than period, then this bucket is an exponential
 *  back off bucket and the scan period will grow exponentially.
 * @IWL_MVM_VENDOR_BUCKET_SPEC_EXPONENT: for exponential back off bucket,
 *  scan period calculation should be done according to the following:
 *  new_period = old_period * exponent
 * @IWL_MVM_VENDOR_BUCKET_SPEC_STEP_CNT: for exponential back off bucket:
 *  number of scans to perform at a given period and until the exponent
 *  is applied.
 * @NUM_IWL_MVM_VENDOR_BUCKET_SPEC: number of bucket spec attributes.
 * @MAX_IWL_MVM_VENDOR_BUCKET_SPEC: highest bucket spec attribute number.
 */
enum iwl_mvm_vendor_gscan_bucket_spec {
    IWL_MVM_VENDOR_BUCKET_SPEC_INVALID,
    IWL_MVM_VENDOR_BUCKET_SPEC_INDEX,
    IWL_MVM_VENDOR_BUCKET_SPEC_BAND,
    IWL_MVM_VENDOR_BUCKET_SPEC_PERIOD,
    IWL_MVM_VENDOR_BUCKET_SPEC_REPORT_MODE,
    IWL_MVM_VENDOR_BUCKET_SPEC_CHANNELS,
    IWL_MVM_VENDOR_BUCKET_SPEC_MAX_PERIOD,
    IWL_MVM_VENDOR_BUCKET_SPEC_EXPONENT,
    IWL_MVM_VENDOR_BUCKET_SPEC_STEP_CNT,
    NUM_IWL_MVM_VENDOR_BUCKET_SPEC,
    MAX_IWL_MVM_VENDOR_BUCKET_SPEC = NUM_IWL_MVM_VENDOR_BUCKET_SPEC - 1,
};

/**
 * enum iwl_mvm_vendor_results_event_type - scan results available event type
 * @IWL_MVM_VENDOR_RESULTS_NOTIF_BUFFER_FULL: scan results available was
 *  reported because scan results buffer has reached the report threshold.
 * @IWL_MVM_VENDOR_RESULTS_NOTIF_BUCKET_END: scan results available was reported
 *  because scan of a bucket was completed.
 * @NUM_IWL_VENDOR_RESULTS_NOTIF_EVENT_TYPE: number of defined gscan results
 *  notification event types.
 *
 * Note that these must match the firmware API.
 */
enum iwl_mvm_vendor_results_event_type {
    IWL_MVM_VENDOR_RESULTS_NOTIF_BUFFER_FULL,
    IWL_MVM_VENDOR_RESULTS_NOTIF_BUCKET_END,
    NUM_IWL_VENDOR_RESULTS_NOTIF_EVENT_TYPE,
};

/**
 * enum iwl_mvm_vendor_gscan_result - gscan scan result
 * @IWL_MVM_VENDOR_GSCAN_RESULT_INVALID: attribute number 0 is reserved.
 * @IWL_MVM_VENDOR_GSCAN_RESULT_TIMESTAMP: time since boot (in usecs) when
 *  the result was retrieved.
 * @IWL_MVM_VENDOR_GSCAN_RESULT_SSID: SSID.
 * @IWL_MVM_VENDOR_GSCAN_RESULT_BSSID: BSSID of the BSS (6 octets).
 * @IWL_MVM_VENDOR_GSCAN_RESULT_CHANNEL: channel frequency in MHz.
 * @IWL_MVM_VENDOR_GSCAN_RESULT_RSSI: signal strength in dB.
 * @IWL_MVM_VENDOR_GSCAN_RESULT_FRAME: the whole beacon/probe response
 *  frame data including the header.
 * @IWL_MVM_VENDOR_GSCAN_RESULT_BEACON_PERIOD: period advertised in the beacon.
 * @IWL_MVM_VENDOR_GSCAN_RESULT_CAPABILITY: capabilities advertised in the
 *  beacon / probe response.
 * @IWL_MVM_VENDOR_GSCAN_RESULT_PAD: used for padding, ignore
 * @NUM_IWL_MVM_VENDOR_GSCAN_RESULT: number of scan result attributes.
 * @MAX_IWL_MVM_VENDOR_GSCAN_RESULT: highest scan result attribute number.
 */
enum iwl_mvm_vendor_gscan_result {
    IWL_MVM_VENDOR_GSCAN_RESULT_INVALID,
    IWL_MVM_VENDOR_GSCAN_RESULT_TIMESTAMP,
    IWL_MVM_VENDOR_GSCAN_RESULT_SSID,
    IWL_MVM_VENDOR_GSCAN_RESULT_BSSID,
    IWL_MVM_VENDOR_GSCAN_RESULT_CHANNEL,
    IWL_MVM_VENDOR_GSCAN_RESULT_RSSI,
    IWL_MVM_VENDOR_GSCAN_RESULT_FRAME,
    IWL_MVM_VENDOR_GSCAN_RESULT_BEACON_PERIOD,
    IWL_MVM_VENDOR_GSCAN_RESULT_CAPABILITY,
    IWL_MVM_VENDOR_GSCAN_RESULT_PAD,
    NUM_IWL_MVM_VENDOR_GSCAN_RESULT,
    MAX_IWL_MVM_VENDOR_GSCAN_RESULT = NUM_IWL_MVM_VENDOR_GSCAN_RESULT - 1,
};

/**
 * enum iwl_mvm_vendor_gscan_cached_scan_res - gscan cached scan result
 * @IWL_MVM_VENDOR_GSCAN_CACHED_RES_INVALID: attribute number 0 is reserved.
 * @IWL_MVM_VENDOR_GSCAN_CACHED_RES_SCAN_ID: unique ID for this cached result.
 * @IWL_MVM_VENDOR_GSCAN_CACHED_RES_FLAGS: additional information about this
 *  scan iteration.
 * @IWL_MVM_VENDOR_GSCAN_CACHED_RES_APS: APs reported in this scan iteration.
 * @NUM_IWL_MVM_VENDOR_GSCAN_CACHED_RES: number of scan result attributes.
 * @MAX_IWL_MVM_VENDOR_GSCAN_CACHED_RES: highest scan result attribute number.
 */
enum iwl_mvm_vendor_gscan_cached_scan_res {
    IWL_MVM_VENDOR_GSCAN_CACHED_RES_INVALID,
    IWL_MVM_VENDOR_GSCAN_CACHED_RES_SCAN_ID,
    IWL_MVM_VENDOR_GSCAN_CACHED_RES_FLAGS,
    IWL_MVM_VENDOR_GSCAN_CACHED_RES_APS,
    NUM_IWL_MVM_VENDOR_GSCAN_CACHED_RES,
    MAX_IWL_MVM_VENDOR_GSCAN_CACHED_RES = NUM_IWL_MVM_VENDOR_GSCAN_CACHED_RES - 1,
};

/**
 * enum iwl_mvm_vendor_ap_threshold_param - parameters for tracking AP's RSSI
 * @IWL_MVM_VENDOR_AP_THRESHOLD_PARAM_INVALID: attribute number 0 is reserved.
 * @IWL_MVM_VENDOR_AP_BSSID: BSSID of the BSS (6 octets)
 * @IWL_MVM_VENDOR_AP_LOW_RSSI_THRESHOLD: low RSSI threshold. in dB.
 * @IWL_MVM_VENDOR_AP_HIGH_RSSI_THRESHOLD: high RSSI threshold. in dB.
 * @NUM_IWL_MVM_VENDOR_GSCAN_AP_THRESHOLD_PARAM: number of ap threshold param
 *  attributes.
 * @MAX_IWL_MVM_VENDOR_GSCAN_AP_THRESHOLD_PARAM: highest ap threshold param
 *  attribute number.
 */
enum iwl_mvm_vendor_ap_threshold_param {
    IWL_MVM_VENDOR_AP_THRESHOLD_PARAM_INVALID,
    IWL_MVM_VENDOR_AP_BSSID,
    IWL_MVM_VENDOR_AP_LOW_RSSI_THRESHOLD,
    IWL_MVM_VENDOR_AP_HIGH_RSSI_THRESHOLD,
    NUM_IWL_MVM_VENDOR_GSCAN_AP_THRESHOLD_PARAM,
    MAX_IWL_MVM_VENDOR_GSCAN_AP_THRESHOLD_PARAM = NUM_IWL_MVM_VENDOR_GSCAN_AP_THRESHOLD_PARAM - 1,
};

/**
 * enum iwl_mvm_vendor_hotlist_ap_status - whether an AP was found or lost
 * @IWL_MVM_VENDOR_HOTLIST_AP_FOUND: beacon from this AP was received with RSSI
 *  above the configured high threshold.
 * @IWL_MVM_VENDOR_HOTLIST_AP_LOST: beacon from this AP was received with RSSI
 *  below the configured low threshold.
 * @NUM_IWL_MVM_VENDOR_HOTLIST_AP_STATUS: number of defined AP statuses.
 *
 * Note that these must match the firmware API.
 */
enum iwl_mvm_vendor_hotlist_ap_status {
    IWL_MVM_VENDOR_HOTLIST_AP_FOUND,
    IWL_MVM_VENDOR_HOTLIST_AP_LOST,
    NUM_IWL_MVM_VENDOR_HOTLIST_AP_STATUS,
};

/**
 * enum iwl_mvm_vendor_significant_change_result - significant change result
 * @IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_INVALID: attribute number 0 is reserved
 * @IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_CHANNEL: channel number of the reported
 *  AP.
 * @IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_BSSID: BSSID.
 * @IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_RSSI_HISTORY: array of RSSI samples for
 *  the reported AP. in dB.
 * @NUM_IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_RESULT: number of significant change
 *  attriutes.
 * @MAX_IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_RESULT: highest significant change
 *  result attribute number.
 */
enum iwl_mvm_vendor_significant_change_result {
    IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_INVALID,
    IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_CHANNEL,
    IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_BSSID,
    IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_RSSI_HISTORY,
    NUM_IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_RESULT,
    MAX_IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_RESULT = NUM_IWL_MVM_VENDOR_SIGNIFICANT_CHANGE_RESULT - 1,
};

/**
 * enum iwl_mvm_vendor_rxfilter_flags - the type of request rxfilter
 *
 * @IWL_MVM_VENDOR_RXFILTER_UNICAST: control unicast Rx filter
 * @IWL_MVM_VENDOR_RXFILTER_BCAST: control broadcast Rx filter
 * @IWL_MVM_VENDOR_RXFILTER_MCAST4: control IPv4 multicast Rx filter
 * @IWL_MVM_VENDOR_RXFILTER_MCAST6: control IPv4 multicast Rx filter
 * @IWL_MVM_VENDOR_RXFILTER_EINVAL: no Rx filter command was set
 *
 */
enum iwl_mvm_vendor_rxfilter_flags {
    IWL_MVM_VENDOR_RXFILTER_UNICAST = 1 << 0,
    IWL_MVM_VENDOR_RXFILTER_BCAST = 1 << 1,
    IWL_MVM_VENDOR_RXFILTER_MCAST4 = 1 << 2,
    IWL_MVM_VENDOR_RXFILTER_MCAST6 = 1 << 3,
    IWL_MVM_VENDOR_RXFILTER_EINVAL = 1 << 7,
};

/**
 * enum iwl_mvm_vendor_rxfilter_op - the operation associated with a filter
 *
 * @IWL_MVM_VENDOR_RXFILTER_OP_PASS: pass frames matching the filter
 * @IWL_MVM_VENDOR_RXFILTER_OP_DROP: drop frames matching the filter
 */
enum iwl_mvm_vendor_rxfilter_op {
    IWL_MVM_VENDOR_RXFILTER_OP_PASS,
    IWL_MVM_VENDOR_RXFILTER_OP_DROP,
};

/*
 * enum iwl_mvm_vendor_nr_chan_width - channel width definitions
 *
 * The values in this enum correspond to the values defined in
 * IEEE802.11-2016, table 9-153.
 */
enum iwl_mvm_vendor_nr_chan_width {
    IWL_MVM_VENDOR_CHAN_WIDTH_20,
    IWL_MVM_VENDOR_CHAN_WIDTH_40,
    IWL_MVM_VENDOR_CHAN_WIDTH_80,
    IWL_MVM_VENDOR_CHAN_WIDTH_160,
    IWL_MVM_VENDOR_CHAN_WIDTH_80P80,
};

/*
 * enum iwl_mvm_vendor_phy_type - neighbor report phy types
 *
 * The values in this enum correspond to the values defined in
 * IEEE802.11-2016, Annex C.
 */
enum iwl_mvm_vendor_phy_type {
    IWL_MVM_VENDOR_PHY_TYPE_UNSPECIFIED,
    IWL_MVM_VENDOR_PHY_TYPE_DSSS = 2,
    IWL_MVM_VENDOR_PHY_TYPE_OFDM = 4,
    IWL_MVM_VENDOR_PHY_TYPE_HRDSSS = 5,
    IWL_MVM_VENDOR_PHY_TYPE_ERP = 6,
    IWL_MVM_VENDOR_PHY_TYPE_HT = 7,
    IWL_MVM_VENDOR_PHY_TYPE_DMG = 8,
    IWL_MVM_VENDOR_PHY_TYPE_VHT = 9,
    IWL_MVM_VENDOR_PHY_TYPE_TVHT = 10,
};

/**
 * enum iwl_mvm_vendor_neighbor_report - Neighbor report for one AP
 *
 * @__IWL_MVM_VENDOR_NEIGHBOR_INVALID: attribute number 0 is reserved
 * @IWL_MVM_VENDOR_NEIGHBOR_BSSID: the BSSID of the neighbor AP.
 * @IWL_MVM_VENDOR_NEIGHBOR_BSSID_INFO: the BSSID information field as
 *  defined in IEEE802.11-2016, figure 9-296 (uint32_t)
 * @IWL_MVM_VENDOR_NEIGHBOR_OPERATING_CLASS: the operating class of the
 *  neighbor AP (uint8_t)
 * @IWL_MVM_VENDOR_NEIGHBOR_CHANNEL: the primary channel number of the
 *  neighbor AP (uint8_t)
 * @IWL_MVM_VENDOR_NEIGHBOR_PHY_TYPE: the phy type of the neighbor AP
 *  as specified in &enum iwl_mvm_vendor_phy_type (uint8_t)
 * @IWL_MVM_VENDOR_NEIGHBOR_CHANNEL_WIDTH: uint32_t attribute containing one of the
 *  values of &enum iwl_mvm_vendor_nr_chan_width, describing the
 *  channel width.
 * @IWL_MVM_VENDOR_NEIGHBOR_CENTER_FREQ_IDX_0: Center frequency of the first
 *  part of the channel, used for anything but 20 MHz bandwidth.
 * @IWL_MVM_VENDOR_NEIGHBOR_CENTER_FREQ_IDX_1: Center frequency of the second
 *  part of the channel, used only for 80+80 MHz bandwidth.
 * @IWL_MVM_VENDOR_NEIGHBOR_LCI: the LCI info of the neighbor AP. Optional.
 *  Binary attribute.
 * @IWL_MVM_VENDOR_NEIGHBOR_CIVIC: the CIVIC info of the neighbor AP. Optional.
 *  Binary attribute.
 * @NUM_IWL_MVM_VENDOR_NEIGHBOR_REPORT: num of neighbor report attributes
 * @MAX_IWL_MVM_VENDOR_NEIGHBOR_REPORT: highest neighbor report attribute
 *  number.

 */
enum iwl_mvm_vendor_neighbor_report {
    __IWL_MVM_VENDOR_NEIGHBOR_INVALID,
    IWL_MVM_VENDOR_NEIGHBOR_BSSID,
    IWL_MVM_VENDOR_NEIGHBOR_BSSID_INFO,
    IWL_MVM_VENDOR_NEIGHBOR_OPERATING_CLASS,
    IWL_MVM_VENDOR_NEIGHBOR_CHANNEL,
    IWL_MVM_VENDOR_NEIGHBOR_PHY_TYPE,
    IWL_MVM_VENDOR_NEIGHBOR_CHANNEL_WIDTH,
    IWL_MVM_VENDOR_NEIGHBOR_CENTER_FREQ_IDX_0,
    IWL_MVM_VENDOR_NEIGHBOR_CENTER_FREQ_IDX_1,
    IWL_MVM_VENDOR_NEIGHBOR_LCI,
    IWL_MVM_VENDOR_NEIGHBOR_CIVIC,

    NUM_IWL_MVM_VENDOR_NEIGHBOR_REPORT,
    MAX_IWL_MVM_VENDOR_NEIGHBOR_REPORT = NUM_IWL_MVM_VENDOR_NEIGHBOR_REPORT - 1,
};

/**
 * enum iwl_vendor_sar_per_chain_geo_table - per chain tx power table
 *
 * @IWL_VENDOR_SAR_GEO_INVALID: attribute number 0 is reserved.
 * @IWL_VENDOR_SAR_GEO_CHAIN_A_OFFSET: allowed offset for chain a (uint8_t).
 * @IWL_VENDOR_SAR_GEO_CHAIN_B_OFFSET: allowed offset for chain b (uint8_t).
 * @IWL_VENDOR_SAR_GEO_MAX_TXP: maximum allowed tx power (uint8_t).
 */
enum iwl_vendor_sar_per_chain_geo_table {
    IWL_VENDOR_SAR_GEO_INVALID,
    IWL_VENDOR_SAR_GEO_CHAIN_A_OFFSET,
    IWL_VENDOR_SAR_GEO_CHAIN_B_OFFSET,
    IWL_VENDOR_SAR_GEO_MAX_TXP,
};

/**
 * enum iwl_vendor_fips_test_vector_sha_type - SHA types for FIPS tests
 *
 * @IWL_VENDOR_FIPS_TEST_VECTOR_SHA_TYPE_SHA1: SHA1
 * @IWL_VENDOR_FIPS_TEST_VECTOR_SHA_TYPE_SHA256: SHA256
 * @IWL_VENDOR_FIPS_TEST_VECTOR_SHA_TYPE_SHA384: SHA384
 */
enum iwl_vendor_fips_test_vector_sha_type {
    IWL_VENDOR_FIPS_TEST_VECTOR_SHA_TYPE_SHA1,
    IWL_VENDOR_FIPS_TEST_VECTOR_SHA_TYPE_SHA256,
    IWL_VENDOR_FIPS_TEST_VECTOR_SHA_TYPE_SHA384,
};

/**
 * enum iwl_vendor_fips_test_vector_sha - test vector for SHA tests
 *
 * @IWL_VENDOR_FIPS_TEST_VECTOR_SHA_INVALID: attribute number 0 is reserved.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_SHA_TYPE: which SHA function to use. One of
 *  &enum iwl_vendor_fips_test_vector_sha_type.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_SHA_MSG: the message to generate the digest for.
 * @NUM_IWL_VENDOR_FIPS_TEST_VECTOR_SHA: number of SHA test vector attributes.
 * @MAX_IWL_VENDOR_FIPS_TEST_VECTOR_SHA: highest SHA test vector attribute.
 */
enum iwl_vendor_fips_test_vector_sha {
    IWL_VENDOR_FIPS_TEST_VECTOR_SHA_INVALID,
    IWL_VENDOR_FIPS_TEST_VECTOR_SHA_TYPE,
    IWL_VENDOR_FIPS_TEST_VECTOR_SHA_MSG,

    NUM_IWL_VENDOR_FIPS_TEST_VECTOR_SHA,
    MAX_IWL_VENDOR_FIPS_TEST_VECTOR_SHA = NUM_IWL_VENDOR_FIPS_TEST_VECTOR_SHA - 1,
};

/**
 * enum iwl_vendor_fips_test_vector_hmac_kdf - test vector for HMAC/KDF tests
 *
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_INVALID: attribute number 0 is
 *  reserved.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_TYPE: which HMAC-SHA function to use.
 *  One of &enum iwl_vendor_fips_test_vector_sha_type.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_KEY: key input for the HMAC-SHA
 *  function.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_MSG: the message to generate the
 *  digest for.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_RES_LEN: the requested digest length in
 *  bytes.
 * @NUM_IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF: number of HMAC/KDF test vector
 *  attributes.
 * @MAX_IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF: highest HMAC/KDF test vector
 *  attribute.
 */
enum iwl_vendor_fips_test_vector_hmac_kdf {
    IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_INVALID,
    IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_TYPE,
    IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_KEY,
    IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_MSG,
    IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF_RES_LEN,

    NUM_IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF,
    MAX_IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF = NUM_IWL_VENDOR_FIPS_TEST_VECTOR_HMAC_KDF - 1,
};

/**
 * enum iwl_vendor_fips_test_vector_flags - flags for FIPS HW test vector
 * @IWL_VENDOR_FIPS_TEST_VECTOR_FLAGS_ENCRYPT: if this is set, the requested
 *  operation is encryption. Otherwise the requested operation is
 *  decryption.
 */
enum iwl_vendor_fips_test_vector_flags {
    IWL_VENDOR_FIPS_TEST_VECTOR_FLAGS_ENCRYPT = BIT(0),
};

/**
 * enum iwl_vendor_fips_test_vector_hw - test vector for FIPS HW tests
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HW_INVALID: attribute number 0 is reserved.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HW_KEY: the key to use for
 *  encryption/decryption. For CCM, only 128-bit key is supported.
 *  For AES and GCM, 128-bit and 256-bit keys are supported.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HW_NONCE: for CCM use 13 bytes, for GCM only 12
 *  bytes. Not valid for AES tests.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HW_AAD: adata. maximum supported size is 30
 *  bytes. Not valid for AES tests.
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HW_PAYLOAD: for encryption, this is the
 *  plaintext to encrypt. For decryption, this is the ciphertext + MIC (8
 *  bytes of MIC for CCM, 16 bytes for GCM).
 * @IWL_VENDOR_FIPS_TEST_VECTOR_HW_FLAGS: &enum iwl_vendor_fips_test_vector_flags.
 * @NUM_IWL_VENDOR_FIPS_TEST_VECTOR_HW: number of hw test vector attributes.
 * @MAX_IWL_VENDOR_FIPS_TEST_VECTOR_HW: highest hw test vector attribute.
 */
enum iwl_vendor_fips_test_vector_hw {
    IWL_VENDOR_FIPS_TEST_VECTOR_HW_INVALID,
    IWL_VENDOR_FIPS_TEST_VECTOR_HW_KEY,
    IWL_VENDOR_FIPS_TEST_VECTOR_HW_NONCE,
    IWL_VENDOR_FIPS_TEST_VECTOR_HW_AAD,
    IWL_VENDOR_FIPS_TEST_VECTOR_HW_PAYLOAD,
    IWL_VENDOR_FIPS_TEST_VECTOR_HW_FLAGS,

    NUM_IWL_VENDOR_FIPS_TEST_VECTOR_HW,
    MAX_IWL_VENDOR_FIPS_TEST_VECTOR_HW = NUM_IWL_VENDOR_FIPS_TEST_VECTOR_HW - 1,
};

/**
 * enum iwl_mvm_vendor_attr - attributes used in vendor commands
 * @__IWL_MVM_VENDOR_ATTR_INVALID: attribute 0 is invalid
 * @IWL_MVM_VENDOR_ATTR_LOW_LATENCY: low-latency flag attribute
 * @IWL_MVM_VENDOR_ATTR_VIF_ADDR: interface MAC address
 * @IWL_MVM_VENDOR_ATTR_VIF_LL: vif-low-latency (uint8_t, 0/1)
 * @IWL_MVM_VENDOR_ATTR_LL: global low-latency (uint8_t, 0/1)
 * @IWL_MVM_VENDOR_ATTR_VIF_LOAD: vif traffic load (uint8_t, see load enum)
 * @IWL_MVM_VENDOR_ATTR_LOAD: global traffic load (uint8_t, see load enum)
 * @IWL_MVM_VENDOR_ATTR_COUNTRY: MCC to set, for regulatory information (uint16_t)
 * IWL_MVM_VENDOR_ATTR_FILTER_ARP_NA: filter gratuitous ARP and unsolicited
 *  Neighbor Advertisement frames
 * IWL_MVM_VENDOR_ATTR_FILTER_GTK: filter Filtering Frames Encrypted using
 *  the GTK
 * @IWL_MVM_VENDOR_ATTR_ADDR: MAC address
 * @IWL_MVM_VENDOR_ATTR_TX_BYTES: number of bytes transmitted to peer
 * @IWL_MVM_VENDOR_ATTR_RX_BYTES: number of bytes received from peer
 * @IWL_MVM_VENDOR_ATTR_TXP_LIMIT_24: TX power limit for 2.4 GHz
 *  (int32_t in units of 1/8 dBm)
 * @IWL_MVM_VENDOR_ATTR_TXP_LIMIT_52L: TX power limit for 5.2 GHz low (as 2.4)
 * @IWL_MVM_VENDOR_ATTR_TXP_LIMIT_52H: TX power limit for 5.2 GHz high (as 2.4)
 * @IWL_MVM_VENDOR_ATTR_OPPPS_WA: wa to pass Sigma test
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_SCAN_CACHE_SIZE: scan cache size
 *  (in bytes)
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_SCAN_BUCKETS: maximum number of channel
 *  buckets
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_AP_CACHE_PER_SCAN: maximum number of AP's
 *  that can be stored per scan
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_RSSI_SAMPLE_SIZE: number of RSSI samples
 *  used for averaging RSSI
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_SCAN_REPORTING_THRESHOLD: max possible
 *  report threshold. see %IWL_MVM_VENDOR_ATTR_GSCAN_START_REPORT_THRESHOLD
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_HOTLIST_APS: maximum number of entries for
 *  hotlist AP's
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_SIGNIFICANT_CHANGE_APS: maximum number of
 *  entries for significant change AP's
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_BSSID_HISTORY_ENTRIES: number of
 *  BSSID/RSSI entries that the device can hold
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAC_ADDR: mac address to be used on gscan scans
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAC_ADDR_MASK: mac address mask. Bits set to 0
 *  will be copied from %IWL_MVM_VENDOR_ATTR_GSCAN_MAC_ADDR. Bits set to 1
 *  will be randomized
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_AP_PER_SCAN: number of AP's to store in each
 *  scan in the BSSID/RSSI history buffer (keep the highest RSSI AP's)
 * @IWL_MVM_VENDOR_ATTR_GSCAN_REPORT_THRESHOLD: report that scan results
 *  are available when buffer is that much full. In percentage.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_BUCKET_SPECS: array of bucket specifications for
 *  this gscan start command. Each bucket spec is a nested attribute of
 *  &enum iwl_mvm_vendor_gscan_bucket_spec.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_RESULTS_EVENT_TYPE: gscan results event type as
 *  specified in &enum iwl_mvm_vendor_results_event_type.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_RESULTS: array of gscan results. Each result is a
 *  nested attribute of &enum iwl_mvm_vendor_gscan_result.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_LOST_AP_SAMPLE_SIZE: number of samples to confirm
 *  ap loss.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_AP_LIST: an array of nested attributes of
 *  &enum iwl_mvm_vendor_ap_threshold_param.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_RSSI_SAMPLE_SIZE: number of samples for averaging
 *  RSSI
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MIN_BREACHING: number of APs breaching threshold
 * @IWL_MVM_VENDOR_ATTR_GSCAN_HOTLIST_AP_STATUS: indicates if a reported AP was
 *  lost or found as specified in &enum iwl_mvm_vendor_hotlist_ap_status.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_SIG_CHANGE_RESULTS: array of significant
 *  change results. Each result is a nested attribute of &enum
 *  iwl_mvm_vendor_significant_change_result.
 * @IWL_MVM_VENDOR_ATTR_RXFILTER: uint32_t attribute.
 *      See %iwl_mvm_vendor_rxfilter_flags.
 * @IWL_MVM_VENDOR_ATTR_RXFILTER_OP: uint32_t attribute.
 *      See %iwl_mvm_vendor_rxfilter_op.
 * @IWL_MVM_VENDOR_ATTR_DBG_COLLECT_TRIGGER: description of collect debug data
 *  trigger.
 * @IWL_MVM_VENDOR_ATTR_NAN_FAW_FREQ: uint32_t attribute. Frequency (in MHz) to be
 *  used for NAN further availability.
 * @IWL_MVM_VENDOR_ATTR_NAN_FAW_SLOTS: uint8_t attribute. Number of 16TU slots
 *  the NAN device will be available on it's FAW between DWs.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_HOTLIST_SSIDS: maximum number of entries for
 *  hotlist SSID's
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_NUM_EPNO_NETWORKS: max number of epno entries
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_NUM_EPNO_NETWORKS_BY_SSID: max number of epno
 *  entries if ssid is specified
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_NUM_WHITE_LISTED_SSID: max number of white
 *  listed SSIDs
 * @IWL_MVM_VENDOR_ATTR_GSCAN_MAX_NUM_BLACK_LISTED_SSID: max number of black
 *  listed SSIDs
 *
 * @NUM_IWL_MVM_VENDOR_ATTR: number of vendor attributes
 * @MAX_IWL_MVM_VENDOR_ATTR: highest vendor attribute number
 * @IWL_MVM_VENDOR_ATTR_WIPHY_FREQ: frequency of the selected channel in MHz,
 *  defines the channel together with the attributes
 *  %IWL_MVM_VENDOR_ATTR_CHANNEL_WIDTH and if needed
 *  %IWL_MVM_VENDOR_ATTR_CENTER_FREQ1 and
 *  %IWL_MVM_VENDOR_ATTR_CENTER_FREQ2.
 * @IWL_MVM_VENDOR_ATTR_CHANNEL_WIDTH: uint32_t attribute containing one of the
 *  values of &enum nl80211_chan_width, describing the channel width.
 *  See the documentation of the enum for more information.
 * @IWL_MVM_VENDOR_ATTR_CENTER_FREQ1: Center frequency of the first part of the
 *  channel, used for anything but 20 MHz bandwidth.
 * @IWL_MVM_VENDOR_ATTR_CENTER_FREQ2: Center frequency of the second part of
 *  the channel, used only for 80+80 MHz bandwidth.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_REPORT_THRESHOLD_NUM: report that scan results
 *  are available when buffer is that much full. In number of scans.
 * @IWL_MVM_VENDOR_ATTR_GSCAN_CACHED_RESULTS: array of gscan cached results.
 *  Each result is a nested attribute of
 *  &enum iwl_mvm_vendor_gscan_cached_scan_res.
 * @IWL_MVM_VENDOR_ATTR_LAST_MSG: Indicates that this message is the last one
 *  in the series of messages. (flag)
 * @IWL_MVM_VENDOR_ATTR_SAR_CHAIN_A_PROFILE: SAR table idx for chain A.
 *  This is a uint8_t.
 * @IWL_MVM_VENDOR_ATTR_SAR_CHAIN_B_PROFILE: SAR table idx for chain B.
 *  This is a uint8_t.
 * @IWL_MVM_VENDOR_ATTR_SAR_ENABLED_PROFILE_NUM: number of enabled SAR profile
 *  This is a uint8_t.
 * @IWL_MVM_VENDOR_ATTR_SSID: SSID (binary attribute, 0..32 octets)
 * @IWL_MVM_VENDOR_ATTR_NEIGHBOR_LCI: Flag attribute specifying that the
 *  neighbor request shall query for LCI information.
 * @IWL_MVM_VENDOR_ATTR_NEIGHBOR_CIVIC: Flag attribute specifying that the
 *  neighbor request shall query for CIVIC information.
 * @IWL_MVM_VENDOR_ATTR_NEIGHBOR_REPORT: A list of neighbor APs as received in a
 *  neighbor report frame. Each AP is a nested attribute of
 *  &enum iwl_mvm_vendor_neighbor_report.
 * @IWL_MVM_VENDOR_ATTR_SAR_GEO_PROFILE: geo profile info.
 *  see &enum iwl_vendor_sar_per_chain_geo_table.
 * @IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_SHA: data vector for FIPS SHA test.
 *  &enum iwl_vendor_fips_test_vector_sha.
 * @IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HMAC: data vector for FIPS HMAC test.
 *  &enum iwl_vendor_fips_test_vector_hmac_kdf.
 * @IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_KDF: data vector for FIPS KDF test.
 *  &enum iwl_vendor_fips_test_vector_hmac_kdf.
 * @IWL_MVM_VENDOR_ATTR_FIPS_TEST_RESULT: FIPS test result. Contains the
 *  output of the requested function.
 * @IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HW_AES: data vector for FIPS AES HW
 *  test. &enum iwl_vendor_fips_test_vector_hw.
 * @IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HW_CCM: data vector for FIPS CCM HW
 *  test. &enum iwl_vendor_fips_test_vector_hw.
 * @IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HW_GCM: data vector for FIPS GCM HW
 *  test. &enum iwl_vendor_fips_test_vector_hw.
 * @IWL_MVM_VENDOR_ATTR_FMAC_CONNECT_PARAMS_BLACKLIST: an array of BSSIDs to
 *  blacklist. The device shall not try to connect to blacklisted BSSIDs.
 *  This attribute shall not be set if
 *  IWL_MVM_VENDOR_ATTR_FMAC_CONNECT_PARAMS_WHITELIST is set.
 * @IWL_MVM_VENDOR_ATTR_FMAC_CONNECT_PARAMS_WHITELIST: an array of BSSIDs to
 *  whitelist. The device shall only try to connect to BSSIDs from the list.
 *  This attribute shall not be set if
 *  IWL_MVM_VENDOR_ATTR_FMAC_CONNECT_PARAMS_BLACKLIST is set.
 * @IWL_MVM_VENDOR_ATTR_FMAC_CONNECT_PARAMS_MAX_RETRIES: number of APs to try
 *  before notifying connection failure.
 * @IWL_MVM_VENDOR_ATTR_FMAC_CONFIG_STR: a key=value string where key is an
 *  fmac configuration option.
 */
enum iwl_mvm_vendor_attr {
    __IWL_MVM_VENDOR_ATTR_INVALID = 0x00,
    IWL_MVM_VENDOR_ATTR_LOW_LATENCY = 0x01,
    IWL_MVM_VENDOR_ATTR_VIF_ADDR = 0x02,
    IWL_MVM_VENDOR_ATTR_VIF_LL = 0x03,
    IWL_MVM_VENDOR_ATTR_LL = 0x04,
    IWL_MVM_VENDOR_ATTR_VIF_LOAD = 0x05,
    IWL_MVM_VENDOR_ATTR_LOAD = 0x06,
    IWL_MVM_VENDOR_ATTR_COUNTRY = 0x07,
    IWL_MVM_VENDOR_ATTR_FILTER_ARP_NA = 0x08,
    IWL_MVM_VENDOR_ATTR_FILTER_GTK = 0x09,
    IWL_MVM_VENDOR_ATTR_ADDR = 0x0a,
    IWL_MVM_VENDOR_ATTR_TX_BYTES = 0x0b,
    IWL_MVM_VENDOR_ATTR_RX_BYTES = 0x0c,
    IWL_MVM_VENDOR_ATTR_TXP_LIMIT_24 = 0x0d,
    IWL_MVM_VENDOR_ATTR_TXP_LIMIT_52L = 0x0e,
    IWL_MVM_VENDOR_ATTR_TXP_LIMIT_52H = 0x0f,
    IWL_MVM_VENDOR_ATTR_OPPPS_WA = 0x10,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_SCAN_CACHE_SIZE = 0x11,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_SCAN_BUCKETS = 0x12,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_AP_CACHE_PER_SCAN = 0x13,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_RSSI_SAMPLE_SIZE = 0x14,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_SCAN_REPORTING_THRESHOLD = 0x15,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_HOTLIST_APS = 0x16,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_SIGNIFICANT_CHANGE_APS = 0x17,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_BSSID_HISTORY_ENTRIES = 0x18,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAC_ADDR = 0x19,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAC_ADDR_MASK = 0x1a,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_AP_PER_SCAN = 0x1b,
    IWL_MVM_VENDOR_ATTR_GSCAN_REPORT_THRESHOLD = 0x1c,
    IWL_MVM_VENDOR_ATTR_GSCAN_BUCKET_SPECS = 0x1d,
    IWL_MVM_VENDOR_ATTR_GSCAN_RESULTS_EVENT_TYPE = 0x1e,
    IWL_MVM_VENDOR_ATTR_GSCAN_RESULTS = 0x1f,
    IWL_MVM_VENDOR_ATTR_GSCAN_LOST_AP_SAMPLE_SIZE = 0x20,
    IWL_MVM_VENDOR_ATTR_GSCAN_AP_LIST = 0x21,
    IWL_MVM_VENDOR_ATTR_GSCAN_RSSI_SAMPLE_SIZE = 0x22,
    IWL_MVM_VENDOR_ATTR_GSCAN_MIN_BREACHING = 0x23,
    IWL_MVM_VENDOR_ATTR_GSCAN_HOTLIST_AP_STATUS = 0x24,
    IWL_MVM_VENDOR_ATTR_GSCAN_SIG_CHANGE_RESULTS = 0x25,
    IWL_MVM_VENDOR_ATTR_RXFILTER = 0x26,
    IWL_MVM_VENDOR_ATTR_RXFILTER_OP = 0x27,
    IWL_MVM_VENDOR_ATTR_DBG_COLLECT_TRIGGER = 0x28,
    IWL_MVM_VENDOR_ATTR_NAN_FAW_FREQ = 0x29,
    IWL_MVM_VENDOR_ATTR_NAN_FAW_SLOTS = 0x2a,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_HOTLIST_SSIDS = 0x2b,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_NUM_EPNO_NETWORKS = 0x2c,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_NUM_EPNO_NETWORKS_BY_SSID = 0x2d,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_NUM_WHITE_LISTED_SSID = 0x2e,
    IWL_MVM_VENDOR_ATTR_GSCAN_MAX_NUM_BLACK_LISTED_SSID = 0x2f,
    IWL_MVM_VENDOR_ATTR_WIPHY_FREQ = 0x30,
    IWL_MVM_VENDOR_ATTR_CHANNEL_WIDTH = 0x31,
    IWL_MVM_VENDOR_ATTR_CENTER_FREQ1 = 0x32,
    IWL_MVM_VENDOR_ATTR_CENTER_FREQ2 = 0x33,
    /* 0x34 is deprecated */
    /* 0x35 is deprecated */
    /* 0x36 is deprecated */
    IWL_MVM_VENDOR_ATTR_GSCAN_REPORT_THRESHOLD_NUM = 0x37,
    IWL_MVM_VENDOR_ATTR_GSCAN_CACHED_RESULTS = 0x38,
    IWL_MVM_VENDOR_ATTR_LAST_MSG = 0x39,
    IWL_MVM_VENDOR_ATTR_SAR_CHAIN_A_PROFILE = 0x3a,
    IWL_MVM_VENDOR_ATTR_SAR_CHAIN_B_PROFILE = 0x3b,
    IWL_MVM_VENDOR_ATTR_SAR_ENABLED_PROFILE_NUM = 0x3c,
    IWL_MVM_VENDOR_ATTR_SSID = 0x3d,
    IWL_MVM_VENDOR_ATTR_NEIGHBOR_LCI = 0x3e,
    IWL_MVM_VENDOR_ATTR_NEIGHBOR_CIVIC = 0x3f,
    IWL_MVM_VENDOR_ATTR_NEIGHBOR_REPORT = 0x40,
    IWL_MVM_VENDOR_ATTR_SAR_GEO_PROFILE = 0x41,
    IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_SHA = 0x42,
    IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HMAC = 0x43,
    IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_KDF = 0x44,
    IWL_MVM_VENDOR_ATTR_FIPS_TEST_RESULT = 0x45,
    IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HW_AES = 0x46,
    IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HW_CCM = 0x47,
    IWL_MVM_VENDOR_ATTR_FIPS_TEST_VECTOR_HW_GCM = 0x48,
    IWL_MVM_VENDOR_ATTR_FMAC_CONNECT_PARAMS_BLACKLIST = 0x49,
    IWL_MVM_VENDOR_ATTR_FMAC_CONNECT_PARAMS_WHITELIST = 0x4a,
    IWL_MVM_VENDOR_ATTR_FMAC_CONNECT_PARAMS_MAX_RETRIES = 0x4b,
    IWL_MVM_VENDOR_ATTR_FMAC_CONFIG_STR = 0x4c,

    NUM_IWL_MVM_VENDOR_ATTR,
    MAX_IWL_MVM_VENDOR_ATTR = NUM_IWL_MVM_VENDOR_ATTR - 1,
};
#define IWL_MVM_VENDOR_FILTER_ARP_NA IWL_MVM_VENDOR_ATTR_FILTER_ARP_NA
#define IWL_MVM_VENDOR_FILTER_GTK IWL_MVM_VENDOR_ATTR_FILTER_GTK
#endif  // SRC_CONNECTIVITY_WLAN_DRIVERS_THIRD_PARTY_INTEL_IWLWIFI_IWL_VENDOR_CMD_H_
