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

#include "src/iwlwifi/platform/compiler.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_
