/******************************************************************************
 *
 * 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_
