Merge remote-tracking branch 'net-next/master' into mac80211-next
Merge net-next to resolve a conflict and to get the mac80211 rhashtable fixes so further patches can be applied on top. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
@@ -77,7 +77,8 @@
|
||||
* @DATA_PATH_GROUP: data path group, uses command IDs from
|
||||
* &enum iwl_data_path_subcmd_ids
|
||||
* @NAN_GROUP: NAN group, uses command IDs from &enum iwl_nan_subcmd_ids
|
||||
* @TOF_GROUP: TOF group, uses command IDs from &enum iwl_tof_subcmd_ids
|
||||
* @LOCATION_GROUP: location group, uses command IDs from
|
||||
* &enum iwl_location_subcmd_ids
|
||||
* @PROT_OFFLOAD_GROUP: protocol offload group, uses command IDs from
|
||||
* &enum iwl_prot_offload_subcmd_ids
|
||||
* @REGULATORY_AND_NVM_GROUP: regulatory/NVM group, uses command IDs from
|
||||
@@ -92,7 +93,7 @@ enum iwl_mvm_command_groups {
|
||||
PHY_OPS_GROUP = 0x4,
|
||||
DATA_PATH_GROUP = 0x5,
|
||||
NAN_GROUP = 0x7,
|
||||
TOF_GROUP = 0x8,
|
||||
LOCATION_GROUP = 0x8,
|
||||
PROT_OFFLOAD_GROUP = 0xb,
|
||||
REGULATORY_AND_NVM_GROUP = 0xc,
|
||||
DEBUG_GROUP = 0xf,
|
||||
@@ -352,16 +353,6 @@ enum iwl_legacy_cmds {
|
||||
*/
|
||||
PHY_DB_CMD = 0x6c,
|
||||
|
||||
/**
|
||||
* @TOF_CMD: &struct iwl_tof_config_cmd
|
||||
*/
|
||||
TOF_CMD = 0x10,
|
||||
|
||||
/**
|
||||
* @TOF_NOTIFICATION: &struct iwl_tof_gen_resp_cmd
|
||||
*/
|
||||
TOF_NOTIFICATION = 0x11,
|
||||
|
||||
/**
|
||||
* @POWER_TABLE_CMD: &struct iwl_device_power_cmd
|
||||
*/
|
||||
@@ -415,7 +406,11 @@ enum iwl_legacy_cmds {
|
||||
TX_ANT_CONFIGURATION_CMD = 0x98,
|
||||
|
||||
/**
|
||||
* @STATISTICS_CMD: &struct iwl_statistics_cmd
|
||||
* @STATISTICS_CMD:
|
||||
* one of &struct iwl_statistics_cmd,
|
||||
* &struct iwl_notif_statistics_v11,
|
||||
* &struct iwl_notif_statistics_v10,
|
||||
* &struct iwl_notif_statistics
|
||||
*/
|
||||
STATISTICS_CMD = 0x9c,
|
||||
|
||||
@@ -423,7 +418,7 @@ enum iwl_legacy_cmds {
|
||||
* @STATISTICS_NOTIFICATION:
|
||||
* one of &struct iwl_notif_statistics_v10,
|
||||
* &struct iwl_notif_statistics_v11,
|
||||
* &struct iwl_notif_statistics_cdb
|
||||
* &struct iwl_notif_statistics
|
||||
*/
|
||||
STATISTICS_NOTIFICATION = 0x9d,
|
||||
|
||||
|
@@ -224,8 +224,18 @@ struct iwl_wowlan_pattern {
|
||||
|
||||
#define IWL_WOWLAN_MAX_PATTERNS 20
|
||||
|
||||
/**
|
||||
* struct iwl_wowlan_patterns_cmd - WoWLAN wakeup patterns
|
||||
*/
|
||||
struct iwl_wowlan_patterns_cmd {
|
||||
/**
|
||||
* @n_patterns: number of patterns
|
||||
*/
|
||||
__le32 n_patterns;
|
||||
|
||||
/**
|
||||
* @patterns: the patterns, array length in @n_patterns
|
||||
*/
|
||||
struct iwl_wowlan_pattern patterns[];
|
||||
} __packed; /* WOWLAN_PATTERN_ARRAY_API_S_VER_1 */
|
||||
|
||||
|
@@ -104,6 +104,12 @@ enum iwl_data_path_subcmd_ids {
|
||||
*/
|
||||
HE_AIR_SNIFFER_CONFIG_CMD = 0x13,
|
||||
|
||||
/**
|
||||
* @CHEST_COLLECTOR_FILTER_CONFIG_CMD: Configure the CSI
|
||||
* matrix collection, uses &struct iwl_channel_estimation_cfg
|
||||
*/
|
||||
CHEST_COLLECTOR_FILTER_CONFIG_CMD = 0x14,
|
||||
|
||||
/**
|
||||
* @RX_NO_DATA_NOTIF: &struct iwl_rx_no_data
|
||||
*/
|
||||
@@ -156,4 +162,53 @@ struct iwl_mu_group_mgmt_notif {
|
||||
__le32 user_position[4];
|
||||
} __packed; /* MU_GROUP_MNG_NTFY_API_S_VER_1 */
|
||||
|
||||
enum iwl_channel_estimation_flags {
|
||||
IWL_CHANNEL_ESTIMATION_ENABLE = BIT(0),
|
||||
IWL_CHANNEL_ESTIMATION_TIMER = BIT(1),
|
||||
IWL_CHANNEL_ESTIMATION_COUNTER = BIT(2),
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_channel_estimation_cfg - channel estimation reporting config
|
||||
*/
|
||||
struct iwl_channel_estimation_cfg {
|
||||
/**
|
||||
* @flags: flags, see &enum iwl_channel_estimation_flags
|
||||
*/
|
||||
__le32 flags;
|
||||
/**
|
||||
* @timer: if enabled via flags, automatically disable after this many
|
||||
* microseconds
|
||||
*/
|
||||
__le32 timer;
|
||||
/**
|
||||
* @count: if enabled via flags, automatically disable after this many
|
||||
* frames with channel estimation matrix were captured
|
||||
*/
|
||||
__le32 count;
|
||||
/**
|
||||
* @rate_n_flags_mask: only try to record the channel estimation matrix
|
||||
* if the rate_n_flags value for the received frame (let's call
|
||||
* that rx_rnf) matches the mask/value given here like this:
|
||||
* (rx_rnf & rate_n_flags_mask) == rate_n_flags_val.
|
||||
*/
|
||||
__le32 rate_n_flags_mask;
|
||||
/**
|
||||
* @rate_n_flags_val: see @rate_n_flags_mask
|
||||
*/
|
||||
__le32 rate_n_flags_val;
|
||||
/**
|
||||
* @reserved: reserved (for alignment)
|
||||
*/
|
||||
__le32 reserved;
|
||||
/**
|
||||
* @frame_types: bitmap of frame types to capture, the received frame's
|
||||
* subtype|type takes 6 bits in the frame and the corresponding bit
|
||||
* in this field must be set to 1 to capture channel estimation for
|
||||
* that frame type. Set to all-ones to enable capturing for all
|
||||
* frame types.
|
||||
*/
|
||||
__le64 frame_types;
|
||||
} __packed; /* CHEST_COLLECTOR_FILTER_CMD_API_S_VER_1 */
|
||||
|
||||
#endif /* __iwl_fw_api_datapath_h__ */
|
||||
|
@@ -335,29 +335,11 @@ struct iwl_dbg_mem_access_rsp {
|
||||
__le32 data[];
|
||||
} __packed; /* DEBUG_(U|L)MAC_RD_WR_RSP_API_S_VER_1 */
|
||||
|
||||
#define CONT_REC_COMMAND_SIZE 80
|
||||
#define ENABLE_CONT_RECORDING 0x15
|
||||
#define DISABLE_CONT_RECORDING 0x16
|
||||
#define LDBG_CFG_COMMAND_SIZE 80
|
||||
#define BUFFER_ALLOCATION 0x27
|
||||
#define START_DEBUG_RECORDING 0x29
|
||||
#define STOP_DEBUG_RECORDING 0x2A
|
||||
|
||||
/*
|
||||
* struct iwl_continuous_record_mode - recording mode
|
||||
*/
|
||||
struct iwl_continuous_record_mode {
|
||||
__le16 enable_recording;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* struct iwl_continuous_record_cmd - enable/disable continuous recording
|
||||
*/
|
||||
struct iwl_continuous_record_cmd {
|
||||
struct iwl_continuous_record_mode record_mode;
|
||||
u8 pad[CONT_REC_COMMAND_SIZE -
|
||||
sizeof(struct iwl_continuous_record_mode)];
|
||||
} __packed;
|
||||
|
||||
/* maximum fragments to be allocated per target of allocationId */
|
||||
#define IWL_BUFFER_LOCATION_MAX_FRAGS 2
|
||||
|
||||
@@ -385,4 +367,17 @@ struct iwl_buffer_allocation_cmd {
|
||||
struct iwl_fragment_data fragments[IWL_BUFFER_LOCATION_MAX_FRAGS];
|
||||
} __packed; /* BUFFER_ALLOCATION_CMD_API_S_VER_1 */
|
||||
|
||||
/**
|
||||
* struct iwl_ldbg_config_cmd - LDBG config command
|
||||
* @type: configuration type
|
||||
* @pad: reserved space for type-dependent data
|
||||
*/
|
||||
struct iwl_ldbg_config_cmd {
|
||||
__le32 type;
|
||||
union {
|
||||
u8 pad[LDBG_CFG_COMMAND_SIZE - sizeof(__le32)];
|
||||
struct iwl_buffer_allocation_cmd buffer_allocation;
|
||||
}; /* LDBG_CFG_BODY_API_U_VER_2 (partially) */
|
||||
} __packed; /* LDBG_CFG_CMD_API_S_VER_2 */
|
||||
|
||||
#endif /* __iwl_fw_api_debug_h__ */
|
||||
|
711
drivers/net/wireless/intel/iwlwifi/fw/api/location.h
Normal file
711
drivers/net/wireless/intel/iwlwifi/fw/api/location.h
Normal file
@@ -0,0 +1,711 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* This file is provided under a dual BSD/GPLv2 license. When using or
|
||||
* redistributing this file, you may do so under either license.
|
||||
*
|
||||
* GPL LICENSE SUMMARY
|
||||
*
|
||||
* Copyright(c) 2015 - 2017 Intel Deutschland GmbH
|
||||
* Copyright (C) 2018 Intel Corporation
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution
|
||||
* in the file called COPYING.
|
||||
*
|
||||
* Contact Information:
|
||||
* Intel Linux Wireless <linuxwifi@intel.com>
|
||||
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
|
||||
*
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright(c) 2015 - 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 __iwl_fw_api_location_h__
|
||||
#define __iwl_fw_api_location_h__
|
||||
|
||||
/**
|
||||
* enum iwl_location_subcmd_ids - location group command IDs
|
||||
*/
|
||||
enum iwl_location_subcmd_ids {
|
||||
/**
|
||||
* @TOF_RANGE_REQ_CMD: TOF ranging request,
|
||||
* uses &struct iwl_tof_range_req_cmd
|
||||
*/
|
||||
TOF_RANGE_REQ_CMD = 0x0,
|
||||
/**
|
||||
* @TOF_CONFIG_CMD: TOF configuration, uses &struct iwl_tof_config_cmd
|
||||
*/
|
||||
TOF_CONFIG_CMD = 0x1,
|
||||
/**
|
||||
* @TOF_RANGE_ABORT_CMD: abort ongoing ranging, uses
|
||||
* &struct iwl_tof_range_abort_cmd
|
||||
*/
|
||||
TOF_RANGE_ABORT_CMD = 0x2,
|
||||
/**
|
||||
* @TOF_RANGE_REQ_EXT_CMD: TOF extended ranging config,
|
||||
* uses &struct iwl_tof_range_request_ext_cmd
|
||||
*/
|
||||
TOF_RANGE_REQ_EXT_CMD = 0x3,
|
||||
/**
|
||||
* @TOF_RESPONDER_CONFIG_CMD: FTM responder configuration,
|
||||
* uses &struct iwl_tof_responder_config_cmd
|
||||
*/
|
||||
TOF_RESPONDER_CONFIG_CMD = 0x4,
|
||||
/**
|
||||
* @TOF_RESPONDER_DYN_CONFIG_CMD: FTM dynamic configuration,
|
||||
* uses &struct iwl_tof_responder_dyn_config_cmd
|
||||
*/
|
||||
TOF_RESPONDER_DYN_CONFIG_CMD = 0x5,
|
||||
/**
|
||||
* @CSI_HEADER_NOTIFICATION: CSI header
|
||||
*/
|
||||
CSI_HEADER_NOTIFICATION = 0xFA,
|
||||
/**
|
||||
* @CSI_CHUNKS_NOTIFICATION: CSI chunk,
|
||||
* uses &struct iwl_csi_chunk_notification
|
||||
*/
|
||||
CSI_CHUNKS_NOTIFICATION = 0xFB,
|
||||
/**
|
||||
* @TOF_LC_NOTIF: used for LCI/civic location, contains just
|
||||
* the action frame
|
||||
*/
|
||||
TOF_LC_NOTIF = 0xFC,
|
||||
/**
|
||||
* @TOF_RESPONDER_STATS: FTM responder statistics notification,
|
||||
* uses &struct iwl_ftm_responder_stats
|
||||
*/
|
||||
TOF_RESPONDER_STATS = 0xFD,
|
||||
/**
|
||||
* @TOF_MCSI_DEBUG_NOTIF: MCSI debug notification, uses
|
||||
* &struct iwl_tof_mcsi_notif
|
||||
*/
|
||||
TOF_MCSI_DEBUG_NOTIF = 0xFE,
|
||||
/**
|
||||
* @TOF_RANGE_RESPONSE_NOTIF: ranging response, using
|
||||
* &struct iwl_tof_range_rsp_ntfy
|
||||
*/
|
||||
TOF_RANGE_RESPONSE_NOTIF = 0xFF,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_tof_config_cmd - ToF configuration
|
||||
* @tof_disabled: indicates if ToF is disabled (or not)
|
||||
* @one_sided_disabled: indicates if one-sided is disabled (or not)
|
||||
* @is_debug_mode: indiciates if debug mode is active
|
||||
* @is_buf_required: indicates if channel estimation buffer is required
|
||||
*/
|
||||
struct iwl_tof_config_cmd {
|
||||
u8 tof_disabled;
|
||||
u8 one_sided_disabled;
|
||||
u8 is_debug_mode;
|
||||
u8 is_buf_required;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* enum iwl_tof_bandwidth - values for iwl_tof_range_req_ap_entry.bandwidth
|
||||
* @IWL_TOF_BW_20_LEGACY: 20 MHz non-HT
|
||||
* @IWL_TOF_BW_20_HT: 20 MHz HT
|
||||
* @IWL_TOF_BW_40: 40 MHz
|
||||
* @IWL_TOF_BW_80: 80 MHz
|
||||
* @IWL_TOF_BW_160: 160 MHz
|
||||
*/
|
||||
enum iwl_tof_bandwidth {
|
||||
IWL_TOF_BW_20_LEGACY,
|
||||
IWL_TOF_BW_20_HT,
|
||||
IWL_TOF_BW_40,
|
||||
IWL_TOF_BW_80,
|
||||
IWL_TOF_BW_160,
|
||||
}; /* LOCAT_BW_TYPE_E */
|
||||
|
||||
/*
|
||||
* enum iwl_tof_algo_type - Algorithym type for range measurement request
|
||||
*/
|
||||
enum iwl_tof_algo_type {
|
||||
IWL_TOF_ALGO_TYPE_MAX_LIKE = 0,
|
||||
IWL_TOF_ALGO_TYPE_LINEAR_REG = 1,
|
||||
IWL_TOF_ALGO_TYPE_FFT = 2,
|
||||
|
||||
/* Keep last */
|
||||
IWL_TOF_ALGO_TYPE_INVALID,
|
||||
}; /* ALGO_TYPE_E */
|
||||
|
||||
/*
|
||||
* enum iwl_tof_mcsi_ntfy - Enable/Disable MCSI notifications
|
||||
*/
|
||||
enum iwl_tof_mcsi_enable {
|
||||
IWL_TOF_MCSI_DISABLED = 0,
|
||||
IWL_TOF_MCSI_ENABLED = 1,
|
||||
}; /* MCSI_ENABLE_E */
|
||||
|
||||
/**
|
||||
* enum iwl_tof_responder_cmd_valid_field - valid fields in the responder cfg
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_CHAN_INFO: channel info is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_TOA_OFFSET: ToA offset is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_COMMON_CALIB: common calibration mode is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_SPECIFIC_CALIB: spefici calibration mode is
|
||||
* valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_BSSID: BSSID is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_TX_ANT: TX antenna is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_ALGO_TYPE: algorithm type is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_NON_ASAP_SUPPORT: non-ASAP support is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_STATISTICS_REPORT_SUPPORT: statistics report
|
||||
* support is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_MCSI_NOTIF_SUPPORT: MCSI notification support
|
||||
* is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_FAST_ALGO_SUPPORT: fast algorithm support
|
||||
* is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_RETRY_ON_ALGO_FAIL: retry on algorithm failure
|
||||
* is valid
|
||||
* @IWL_TOF_RESPONDER_CMD_VALID_STA_ID: station ID is valid
|
||||
*/
|
||||
enum iwl_tof_responder_cmd_valid_field {
|
||||
IWL_TOF_RESPONDER_CMD_VALID_CHAN_INFO = BIT(0),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_TOA_OFFSET = BIT(1),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_COMMON_CALIB = BIT(2),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_SPECIFIC_CALIB = BIT(3),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_BSSID = BIT(4),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_TX_ANT = BIT(5),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_ALGO_TYPE = BIT(6),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_NON_ASAP_SUPPORT = BIT(7),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_STATISTICS_REPORT_SUPPORT = BIT(8),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_MCSI_NOTIF_SUPPORT = BIT(9),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_FAST_ALGO_SUPPORT = BIT(10),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_RETRY_ON_ALGO_FAIL = BIT(11),
|
||||
IWL_TOF_RESPONDER_CMD_VALID_STA_ID = BIT(12),
|
||||
};
|
||||
|
||||
/**
|
||||
* enum iwl_tof_responder_cfg_flags - responder configuration flags
|
||||
* @IWL_TOF_RESPONDER_FLAGS_NON_ASAP_SUPPORT: non-ASAP support
|
||||
* @IWL_TOF_RESPONDER_FLAGS_REPORT_STATISTICS: report statistics
|
||||
* @IWL_TOF_RESPONDER_FLAGS_REPORT_MCSI: report MCSI
|
||||
* @IWL_TOF_RESPONDER_FLAGS_ALGO_TYPE: algorithm type
|
||||
* @IWL_TOF_RESPONDER_FLAGS_TOA_OFFSET_MODE: ToA offset mode
|
||||
* @IWL_TOF_RESPONDER_FLAGS_COMMON_CALIB_MODE: common calibration mode
|
||||
* @IWL_TOF_RESPONDER_FLAGS_SPECIFIC_CALIB_MODE: specific calibration mode
|
||||
* @IWL_TOF_RESPONDER_FLAGS_FAST_ALGO_SUPPORT: fast algorithm support
|
||||
* @IWL_TOF_RESPONDER_FLAGS_RETRY_ON_ALGO_FAIL: retry on algorithm fail
|
||||
* @IWL_TOF_RESPONDER_FLAGS_FTM_TX_ANT: TX antenna mask
|
||||
*/
|
||||
enum iwl_tof_responder_cfg_flags {
|
||||
IWL_TOF_RESPONDER_FLAGS_NON_ASAP_SUPPORT = BIT(0),
|
||||
IWL_TOF_RESPONDER_FLAGS_REPORT_STATISTICS = BIT(1),
|
||||
IWL_TOF_RESPONDER_FLAGS_REPORT_MCSI = BIT(2),
|
||||
IWL_TOF_RESPONDER_FLAGS_ALGO_TYPE = BIT(3) | BIT(4) | BIT(5),
|
||||
IWL_TOF_RESPONDER_FLAGS_TOA_OFFSET_MODE = BIT(6),
|
||||
IWL_TOF_RESPONDER_FLAGS_COMMON_CALIB_MODE = BIT(7),
|
||||
IWL_TOF_RESPONDER_FLAGS_SPECIFIC_CALIB_MODE = BIT(8),
|
||||
IWL_TOF_RESPONDER_FLAGS_FAST_ALGO_SUPPORT = BIT(9),
|
||||
IWL_TOF_RESPONDER_FLAGS_RETRY_ON_ALGO_FAIL = BIT(10),
|
||||
IWL_TOF_RESPONDER_FLAGS_FTM_TX_ANT = RATE_MCS_ANT_ABC_MSK,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_tof_responder_config_cmd - ToF AP mode (for debug)
|
||||
* @cmd_valid_fields: &iwl_tof_responder_cmd_valid_field
|
||||
* @responder_cfg_flags: &iwl_tof_responder_cfg_flags
|
||||
* @bandwidth: current AP Bandwidth: &enum iwl_tof_bandwidth
|
||||
* @rate: current AP rate
|
||||
* @channel_num: current AP Channel
|
||||
* @ctrl_ch_position: coding of the control channel position relative to
|
||||
* the center frequency, see iwl_mvm_get_ctrl_pos()
|
||||
* @sta_id: index of the AP STA when in AP mode
|
||||
* @reserved1: reserved
|
||||
* @toa_offset: Artificial addition [pSec] for the ToA - to be used for debug
|
||||
* purposes, simulating station movement by adding various values
|
||||
* to this field
|
||||
* @common_calib: XVT: common calibration value
|
||||
* @specific_calib: XVT: specific calibration value
|
||||
* @bssid: Current AP BSSID
|
||||
* @reserved2: reserved
|
||||
*/
|
||||
struct iwl_tof_responder_config_cmd {
|
||||
__le32 cmd_valid_fields;
|
||||
__le32 responder_cfg_flags;
|
||||
u8 bandwidth;
|
||||
u8 rate;
|
||||
u8 channel_num;
|
||||
u8 ctrl_ch_position;
|
||||
u8 sta_id;
|
||||
u8 reserved1;
|
||||
__le16 toa_offset;
|
||||
__le16 common_calib;
|
||||
__le16 specific_calib;
|
||||
u8 bssid[ETH_ALEN];
|
||||
__le16 reserved2;
|
||||
} __packed; /* TOF_RESPONDER_CONFIG_CMD_API_S_VER_6 */
|
||||
|
||||
#define IWL_LCI_CIVIC_IE_MAX_SIZE 400
|
||||
|
||||
/**
|
||||
* struct iwl_tof_responder_dyn_config_cmd - Dynamic responder settings
|
||||
* @lci_len: The length of the 1st (LCI) part in the @lci_civic buffer
|
||||
* @civic_len: The length of the 2nd (CIVIC) part in the @lci_civic buffer
|
||||
* @lci_civic: The LCI/CIVIC buffer. LCI data (if exists) comes first, then, if
|
||||
* needed, 0-padding such that the next part is dword-aligned, then CIVIC
|
||||
* data (if exists) follows, and then 0-padding again to complete a
|
||||
* 4-multiple long buffer.
|
||||
*/
|
||||
struct iwl_tof_responder_dyn_config_cmd {
|
||||
__le32 lci_len;
|
||||
__le32 civic_len;
|
||||
u8 lci_civic[];
|
||||
} __packed; /* TOF_RESPONDER_DYN_CONFIG_CMD_API_S_VER_2 */
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_request_ext_cmd - extended range req for WLS
|
||||
* @tsf_timer_offset_msec: the recommended time offset (mSec) from the AP's TSF
|
||||
* @reserved: reserved
|
||||
* @min_delta_ftm: Minimal time between two consecutive measurements,
|
||||
* in units of 100us. 0 means no preference by station
|
||||
* @ftm_format_and_bw20M: FTM Channel Spacing/Format for 20MHz: recommended
|
||||
* value be sent to the AP
|
||||
* @ftm_format_and_bw40M: FTM Channel Spacing/Format for 40MHz: recommended
|
||||
* value to be sent to the AP
|
||||
* @ftm_format_and_bw80M: FTM Channel Spacing/Format for 80MHz: recommended
|
||||
* value to be sent to the AP
|
||||
*/
|
||||
struct iwl_tof_range_req_ext_cmd {
|
||||
__le16 tsf_timer_offset_msec;
|
||||
__le16 reserved;
|
||||
u8 min_delta_ftm;
|
||||
u8 ftm_format_and_bw20M;
|
||||
u8 ftm_format_and_bw40M;
|
||||
u8 ftm_format_and_bw80M;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* enum iwl_tof_location_query - values for query bitmap
|
||||
* @IWL_TOF_LOC_LCI: query LCI
|
||||
* @IWL_TOF_LOC_CIVIC: query civic
|
||||
*/
|
||||
enum iwl_tof_location_query {
|
||||
IWL_TOF_LOC_LCI = 0x01,
|
||||
IWL_TOF_LOC_CIVIC = 0x02,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_req_ap_entry - AP configuration parameters
|
||||
* @channel_num: Current AP Channel
|
||||
* @bandwidth: Current AP Bandwidth. One of iwl_tof_bandwidth.
|
||||
* @tsf_delta_direction: TSF relatively to the subject AP
|
||||
* @ctrl_ch_position: Coding of the control channel position relative to the
|
||||
* center frequency, see iwl_mvm_get_ctrl_pos().
|
||||
* @bssid: AP's BSSID
|
||||
* @measure_type: Measurement type: 0 - two sided, 1 - One sided
|
||||
* @num_of_bursts: Recommended value to be sent to the AP. 2s Exponent of the
|
||||
* number of measurement iterations (min 2^0 = 1, max 2^14)
|
||||
* @burst_period: Recommended value to be sent to the AP. Measurement
|
||||
* periodicity In units of 100ms. ignored if num_of_bursts = 0
|
||||
* @samples_per_burst: 2-sided: the number of FTMs pairs in single Burst (1-31);
|
||||
* 1-sided: how many rts/cts pairs should be used per burst.
|
||||
* @retries_per_sample: Max number of retries that the LMAC should send
|
||||
* in case of no replies by the AP.
|
||||
* @tsf_delta: TSF Delta in units of microseconds.
|
||||
* The difference between the AP TSF and the device local clock.
|
||||
* @location_req: Location Request Bit[0] LCI should be sent in the FTMR;
|
||||
* Bit[1] Civic should be sent in the FTMR
|
||||
* @asap_mode: 0 - non asap mode, 1 - asap mode (not relevant for one sided)
|
||||
* @enable_dyn_ack: Enable Dynamic ACK BW.
|
||||
* 0: Initiator interact with regular AP;
|
||||
* 1: Initiator interact with Responder machine: need to send the
|
||||
* Initiator Acks with HT 40MHz / 80MHz, since the Responder should
|
||||
* use it for its ch est measurement (this flag will be set when we
|
||||
* configure the opposite machine to be Responder).
|
||||
* @rssi: Last received value
|
||||
* legal values: -128-0 (0x7f). above 0x0 indicating an invalid value.
|
||||
* @algo_type: &enum iwl_tof_algo_type
|
||||
* @notify_mcsi: &enum iwl_tof_mcsi_ntfy.
|
||||
* @reserved: For alignment and future use
|
||||
*/
|
||||
struct iwl_tof_range_req_ap_entry {
|
||||
u8 channel_num;
|
||||
u8 bandwidth;
|
||||
u8 tsf_delta_direction;
|
||||
u8 ctrl_ch_position;
|
||||
u8 bssid[ETH_ALEN];
|
||||
u8 measure_type;
|
||||
u8 num_of_bursts;
|
||||
__le16 burst_period;
|
||||
u8 samples_per_burst;
|
||||
u8 retries_per_sample;
|
||||
__le32 tsf_delta;
|
||||
u8 location_req;
|
||||
u8 asap_mode;
|
||||
u8 enable_dyn_ack;
|
||||
s8 rssi;
|
||||
u8 algo_type;
|
||||
u8 notify_mcsi;
|
||||
__le16 reserved;
|
||||
} __packed; /* LOCATION_RANGE_REQ_AP_ENTRY_CMD_API_S_VER_3 */
|
||||
|
||||
/**
|
||||
* enum iwl_tof_response_mode
|
||||
* @IWL_MVM_TOF_RESPONSE_ASAP: report each AP measurement separately as soon as
|
||||
* possible (not supported for this release)
|
||||
* @IWL_MVM_TOF_RESPONSE_TIMEOUT: report all AP measurements as a batch upon
|
||||
* timeout expiration
|
||||
* @IWL_MVM_TOF_RESPONSE_COMPLETE: report all AP measurements as a batch at the
|
||||
* earlier of: measurements completion / timeout
|
||||
* expiration.
|
||||
*/
|
||||
enum iwl_tof_response_mode {
|
||||
IWL_MVM_TOF_RESPONSE_ASAP,
|
||||
IWL_MVM_TOF_RESPONSE_TIMEOUT,
|
||||
IWL_MVM_TOF_RESPONSE_COMPLETE,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum iwl_tof_initiator_flags
|
||||
*
|
||||
* @IWL_TOF_INITIATOR_FLAGS_FAST_ALGO_DISABLED: disable fast algo, meaning run
|
||||
* the algo on ant A+B, instead of only one of them.
|
||||
* @IWL_TOF_INITIATOR_FLAGS_RX_CHAIN_SEL_A: open RX antenna A for FTMs RX
|
||||
* @IWL_TOF_INITIATOR_FLAGS_RX_CHAIN_SEL_B: open RX antenna B for FTMs RX
|
||||
* @IWL_TOF_INITIATOR_FLAGS_RX_CHAIN_SEL_C: open RX antenna C for FTMs RX
|
||||
* @IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_A: use antenna A fo TX ACKs during FTM
|
||||
* @IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_B: use antenna B fo TX ACKs during FTM
|
||||
* @IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_C: use antenna C fo TX ACKs during FTM
|
||||
* @IWL_TOF_INITIATOR_FLAGS_MINDELTA_NO_PREF: no preference for minDeltaFTM
|
||||
*/
|
||||
enum iwl_tof_initiator_flags {
|
||||
IWL_TOF_INITIATOR_FLAGS_FAST_ALGO_DISABLED = BIT(0),
|
||||
IWL_TOF_INITIATOR_FLAGS_RX_CHAIN_SEL_A = BIT(1),
|
||||
IWL_TOF_INITIATOR_FLAGS_RX_CHAIN_SEL_B = BIT(2),
|
||||
IWL_TOF_INITIATOR_FLAGS_RX_CHAIN_SEL_C = BIT(3),
|
||||
IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_A = BIT(4),
|
||||
IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_B = BIT(5),
|
||||
IWL_TOF_INITIATOR_FLAGS_TX_CHAIN_SEL_C = BIT(6),
|
||||
IWL_TOF_INITIATOR_FLAGS_MINDELTA_NO_PREF = BIT(7),
|
||||
}; /* LOCATION_RANGE_REQ_CMD_API_S_VER_5 */
|
||||
|
||||
#define IWL_MVM_TOF_MAX_APS 5
|
||||
#define IWL_MVM_TOF_MAX_TWO_SIDED_APS 5
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_req_cmd - start measurement cmd
|
||||
* @initiator_flags: see flags @ iwl_tof_initiator_flags
|
||||
* @request_id: A Token incremented per request. The same Token will be
|
||||
* sent back in the range response
|
||||
* @initiator: 0- NW initiated, 1 - Client Initiated
|
||||
* @one_sided_los_disable: '0'- run ML-Algo for both ToF/OneSided,
|
||||
* '1' - run ML-Algo for ToF only
|
||||
* @req_timeout: Requested timeout of the response in units of 100ms.
|
||||
* This is equivalent to the session time configured to the
|
||||
* LMAC in Initiator Request
|
||||
* @report_policy: Supported partially for this release: For current release -
|
||||
* the range report will be uploaded as a batch when ready or
|
||||
* when the session is done (successfully / partially).
|
||||
* one of iwl_tof_response_mode.
|
||||
* @reserved0: reserved
|
||||
* @num_of_ap: Number of APs to measure (error if > IWL_MVM_TOF_MAX_APS)
|
||||
* @macaddr_random: '0' Use default source MAC address (i.e. p2_p),
|
||||
* '1' Use MAC Address randomization according to the below
|
||||
* @range_req_bssid: ranging request BSSID
|
||||
* @macaddr_template: MAC address template to use for non-randomized bits
|
||||
* @macaddr_mask: Bits set to 0 shall be copied from the MAC address template.
|
||||
* Bits set to 1 shall be randomized by the UMAC
|
||||
* @ftm_rx_chains: Rx chain to open to receive Responder's FTMs (XVT)
|
||||
* @ftm_tx_chains: Tx chain to send the ack to the Responder FTM (XVT)
|
||||
* @common_calib: The common calib value to inject to this measurement calc
|
||||
* @specific_calib: The specific calib value to inject to this measurement calc
|
||||
* @ap: per-AP request data
|
||||
*/
|
||||
struct iwl_tof_range_req_cmd {
|
||||
__le32 initiator_flags;
|
||||
u8 request_id;
|
||||
u8 initiator;
|
||||
u8 one_sided_los_disable;
|
||||
u8 req_timeout;
|
||||
u8 report_policy;
|
||||
u8 reserved0;
|
||||
u8 num_of_ap;
|
||||
u8 macaddr_random;
|
||||
u8 range_req_bssid[ETH_ALEN];
|
||||
u8 macaddr_template[ETH_ALEN];
|
||||
u8 macaddr_mask[ETH_ALEN];
|
||||
u8 ftm_rx_chains;
|
||||
u8 ftm_tx_chains;
|
||||
__le16 common_calib;
|
||||
__le16 specific_calib;
|
||||
struct iwl_tof_range_req_ap_entry ap[IWL_MVM_TOF_MAX_APS];
|
||||
} __packed;
|
||||
/* LOCATION_RANGE_REQ_CMD_API_S_VER_5 */
|
||||
|
||||
/*
|
||||
* enum iwl_tof_range_request_status - status of the sent request
|
||||
* @IWL_TOF_RANGE_REQUEST_STATUS_SUCCESSFUL - FW successfully received the
|
||||
* request
|
||||
* @IWL_TOF_RANGE_REQUEST_STATUS_BUSY - FW is busy with a previous request, the
|
||||
* sent request will not be handled
|
||||
*/
|
||||
enum iwl_tof_range_request_status {
|
||||
IWL_TOF_RANGE_REQUEST_STATUS_SUCCESS,
|
||||
IWL_TOF_RANGE_REQUEST_STATUS_BUSY,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum iwl_tof_entry_status
|
||||
*
|
||||
* @IWL_TOF_ENTRY_SUCCESS: successful measurement.
|
||||
* @IWL_TOF_ENTRY_GENERAL_FAILURE: General failure.
|
||||
* @IWL_TOF_ENTRY_NO_RESPONSE: Responder didn't reply to the request.
|
||||
* @IWL_TOF_ENTRY_REQUEST_REJECTED: Responder rejected the request.
|
||||
* @IWL_TOF_ENTRY_NOT_SCHEDULED: Time event was scheduled but not called yet.
|
||||
* @IWL_TOF_ENTRY_TIMING_MEASURE_TIMEOUT: Time event triggered but no
|
||||
* measurement was completed.
|
||||
* @IWL_TOF_ENTRY_TARGET_DIFF_CH_CANNOT_CHANGE: No range due inability to switch
|
||||
* from the primary channel.
|
||||
* @IWL_TOF_ENTRY_RANGE_NOT_SUPPORTED: Device doesn't support FTM.
|
||||
* @IWL_TOF_ENTRY_REQUEST_ABORT_UNKNOWN_REASON: Request aborted due to unknown
|
||||
* reason.
|
||||
* @IWL_TOF_ENTRY_LOCATION_INVALID_T1_T4_TIME_STAMP: Failure due to invalid
|
||||
* T1/T4.
|
||||
* @IWL_TOF_ENTRY_11MC_PROTOCOL_FAILURE: Failure due to invalid FTM frame
|
||||
* structure.
|
||||
* @IWL_TOF_ENTRY_REQUEST_CANNOT_SCHED: Request cannot be scheduled.
|
||||
* @IWL_TOF_ENTRY_RESPONDER_CANNOT_COLABORATE: Responder cannot serve the
|
||||
* initiator for some period, period supplied in @refusal_period.
|
||||
* @IWL_TOF_ENTRY_BAD_REQUEST_ARGS: Bad request arguments.
|
||||
* @IWL_TOF_ENTRY_WIFI_NOT_ENABLED: Wifi not enabled.
|
||||
* @IWL_TOF_ENTRY_RESPONDER_OVERRIDE_PARAMS: Responder override the original
|
||||
* parameters within the current session.
|
||||
*/
|
||||
enum iwl_tof_entry_status {
|
||||
IWL_TOF_ENTRY_SUCCESS = 0,
|
||||
IWL_TOF_ENTRY_GENERAL_FAILURE = 1,
|
||||
IWL_TOF_ENTRY_NO_RESPONSE = 2,
|
||||
IWL_TOF_ENTRY_REQUEST_REJECTED = 3,
|
||||
IWL_TOF_ENTRY_NOT_SCHEDULED = 4,
|
||||
IWL_TOF_ENTRY_TIMING_MEASURE_TIMEOUT = 5,
|
||||
IWL_TOF_ENTRY_TARGET_DIFF_CH_CANNOT_CHANGE = 6,
|
||||
IWL_TOF_ENTRY_RANGE_NOT_SUPPORTED = 7,
|
||||
IWL_TOF_ENTRY_REQUEST_ABORT_UNKNOWN_REASON = 8,
|
||||
IWL_TOF_ENTRY_LOCATION_INVALID_T1_T4_TIME_STAMP = 9,
|
||||
IWL_TOF_ENTRY_11MC_PROTOCOL_FAILURE = 10,
|
||||
IWL_TOF_ENTRY_REQUEST_CANNOT_SCHED = 11,
|
||||
IWL_TOF_ENTRY_RESPONDER_CANNOT_COLABORATE = 12,
|
||||
IWL_TOF_ENTRY_BAD_REQUEST_ARGS = 13,
|
||||
IWL_TOF_ENTRY_WIFI_NOT_ENABLED = 14,
|
||||
IWL_TOF_ENTRY_RESPONDER_OVERRIDE_PARAMS = 15,
|
||||
}; /* LOCATION_RANGE_RSP_AP_ENTRY_NTFY_API_S_VER_2 */
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_rsp_ap_entry_ntfy - AP parameters (response)
|
||||
* @bssid: BSSID of the AP
|
||||
* @measure_status: current APs measurement status, one of
|
||||
* &enum iwl_tof_entry_status.
|
||||
* @measure_bw: Current AP Bandwidth: 0 20MHz, 1 40MHz, 2 80MHz
|
||||
* @rtt: The Round Trip Time that took for the last measurement for
|
||||
* current AP [pSec]
|
||||
* @rtt_variance: The Variance of the RTT values measured for current AP
|
||||
* @rtt_spread: The Difference between the maximum and the minimum RTT
|
||||
* values measured for current AP in the current session [pSec]
|
||||
* @rssi: RSSI as uploaded in the Channel Estimation notification
|
||||
* @rssi_spread: The Difference between the maximum and the minimum RSSI values
|
||||
* measured for current AP in the current session
|
||||
* @reserved: reserved
|
||||
* @refusal_period: refusal period in case of
|
||||
* @IWL_TOF_ENTRY_RESPONDER_CANNOT_COLABORATE [sec]
|
||||
* @range: Measured range [cm]
|
||||
* @range_variance: Measured range variance [cm]
|
||||
* @timestamp: The GP2 Clock [usec] where Channel Estimation notification was
|
||||
* uploaded by the LMAC
|
||||
* @t2t3_initiator: as calculated from the algo in the initiator
|
||||
* @t1t4_responder: as calculated from the algo in the responder
|
||||
* @common_calib: Calib val that was used in for this AP measurement
|
||||
* @specific_calib: val that was used in for this AP measurement
|
||||
* @papd_calib_output: The result of the tof papd calibration that was injected
|
||||
* into the algorithm.
|
||||
*/
|
||||
struct iwl_tof_range_rsp_ap_entry_ntfy {
|
||||
u8 bssid[ETH_ALEN];
|
||||
u8 measure_status;
|
||||
u8 measure_bw;
|
||||
__le32 rtt;
|
||||
__le32 rtt_variance;
|
||||
__le32 rtt_spread;
|
||||
s8 rssi;
|
||||
u8 rssi_spread;
|
||||
u8 reserved;
|
||||
u8 refusal_period;
|
||||
__le32 range;
|
||||
__le32 range_variance;
|
||||
__le32 timestamp;
|
||||
__le32 t2t3_initiator;
|
||||
__le32 t1t4_responder;
|
||||
__le16 common_calib;
|
||||
__le16 specific_calib;
|
||||
__le32 papd_calib_output;
|
||||
} __packed; /* LOCATION_RANGE_RSP_AP_ETRY_NTFY_API_S_VER_3 */
|
||||
|
||||
/**
|
||||
* enum iwl_tof_response_status - tof response status
|
||||
*
|
||||
* @IWL_TOF_RESPONSE_SUCCESS: successful range.
|
||||
* @IWL_TOF_RESPONSE_TIMEOUT: request aborted due to timeout expiration.
|
||||
* partial result of ranges done so far is included in the response.
|
||||
* @IWL_TOF_RESPONSE_ABORTED: Measurement aborted by command.
|
||||
* @IWL_TOF_RESPONSE_FAILED: Measurement request command failed.
|
||||
*/
|
||||
enum iwl_tof_response_status {
|
||||
IWL_TOF_RESPONSE_SUCCESS = 0,
|
||||
IWL_TOF_RESPONSE_TIMEOUT = 1,
|
||||
IWL_TOF_RESPONSE_ABORTED = 4,
|
||||
IWL_TOF_RESPONSE_FAILED = 5,
|
||||
}; /* LOCATION_RNG_RSP_STATUS */
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_rsp_ntfy - ranging response notification
|
||||
* @request_id: A Token ID of the corresponding Range request
|
||||
* @request_status: status of current measurement session, one of
|
||||
* &enum iwl_tof_response_status.
|
||||
* @last_in_batch: reprot policy (when not all responses are uploaded at once)
|
||||
* @num_of_aps: Number of APs to measure (error if > IWL_MVM_TOF_MAX_APS)
|
||||
* @ap: per-AP data
|
||||
*/
|
||||
struct iwl_tof_range_rsp_ntfy {
|
||||
u8 request_id;
|
||||
u8 request_status;
|
||||
u8 last_in_batch;
|
||||
u8 num_of_aps;
|
||||
struct iwl_tof_range_rsp_ap_entry_ntfy ap[IWL_MVM_TOF_MAX_APS];
|
||||
} __packed;
|
||||
|
||||
#define IWL_MVM_TOF_MCSI_BUF_SIZE (245)
|
||||
/**
|
||||
* struct iwl_tof_mcsi_notif - used for debug
|
||||
* @token: token ID for the current session
|
||||
* @role: '0' - initiator, '1' - responder
|
||||
* @reserved: reserved
|
||||
* @initiator_bssid: initiator machine
|
||||
* @responder_bssid: responder machine
|
||||
* @mcsi_buffer: debug data
|
||||
*/
|
||||
struct iwl_tof_mcsi_notif {
|
||||
u8 token;
|
||||
u8 role;
|
||||
__le16 reserved;
|
||||
u8 initiator_bssid[ETH_ALEN];
|
||||
u8 responder_bssid[ETH_ALEN];
|
||||
u8 mcsi_buffer[IWL_MVM_TOF_MCSI_BUF_SIZE * 4];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_abort_cmd
|
||||
* @request_id: corresponds to a range request
|
||||
* @reserved: reserved
|
||||
*/
|
||||
struct iwl_tof_range_abort_cmd {
|
||||
u8 request_id;
|
||||
u8 reserved[3];
|
||||
} __packed;
|
||||
|
||||
enum ftm_responder_stats_flags {
|
||||
FTM_RESP_STAT_NON_ASAP_STARTED = BIT(0),
|
||||
FTM_RESP_STAT_NON_ASAP_IN_WIN = BIT(1),
|
||||
FTM_RESP_STAT_NON_ASAP_OUT_WIN = BIT(2),
|
||||
FTM_RESP_STAT_TRIGGER_DUP = BIT(3),
|
||||
FTM_RESP_STAT_DUP = BIT(4),
|
||||
FTM_RESP_STAT_DUP_IN_WIN = BIT(5),
|
||||
FTM_RESP_STAT_DUP_OUT_WIN = BIT(6),
|
||||
FTM_RESP_STAT_SCHED_SUCCESS = BIT(7),
|
||||
FTM_RESP_STAT_ASAP_REQ = BIT(8),
|
||||
FTM_RESP_STAT_NON_ASAP_REQ = BIT(9),
|
||||
FTM_RESP_STAT_ASAP_RESP = BIT(10),
|
||||
FTM_RESP_STAT_NON_ASAP_RESP = BIT(11),
|
||||
FTM_RESP_STAT_FAIL_INITIATOR_INACTIVE = BIT(12),
|
||||
FTM_RESP_STAT_FAIL_INITIATOR_OUT_WIN = BIT(13),
|
||||
FTM_RESP_STAT_FAIL_INITIATOR_RETRY_LIM = BIT(14),
|
||||
FTM_RESP_STAT_FAIL_NEXT_SERVED = BIT(15),
|
||||
FTM_RESP_STAT_FAIL_TRIGGER_ERR = BIT(16),
|
||||
FTM_RESP_STAT_FAIL_GC = BIT(17),
|
||||
FTM_RESP_STAT_SUCCESS = BIT(18),
|
||||
FTM_RESP_STAT_INTEL_IE = BIT(19),
|
||||
FTM_RESP_STAT_INITIATOR_ACTIVE = BIT(20),
|
||||
FTM_RESP_STAT_MEASUREMENTS_AVAILABLE = BIT(21),
|
||||
FTM_RESP_STAT_TRIGGER_UNKNOWN = BIT(22),
|
||||
FTM_RESP_STAT_PROCESS_FAIL = BIT(23),
|
||||
FTM_RESP_STAT_ACK = BIT(24),
|
||||
FTM_RESP_STAT_NACK = BIT(25),
|
||||
FTM_RESP_STAT_INVALID_INITIATOR_ID = BIT(26),
|
||||
FTM_RESP_STAT_TIMER_MIN_DELTA = BIT(27),
|
||||
FTM_RESP_STAT_INITIATOR_REMOVED = BIT(28),
|
||||
FTM_RESP_STAT_INITIATOR_ADDED = BIT(29),
|
||||
FTM_RESP_STAT_ERR_LIST_FULL = BIT(30),
|
||||
FTM_RESP_STAT_INITIATOR_SCHED_NOW = BIT(31),
|
||||
}; /* RESP_IND_E */
|
||||
|
||||
/**
|
||||
* struct iwl_ftm_responder_stats - FTM responder statistics
|
||||
* @addr: initiator address
|
||||
* @success_ftm: number of successful ftm frames
|
||||
* @ftm_per_burst: num of FTM frames that were received
|
||||
* @flags: &enum ftm_responder_stats_flags
|
||||
* @duration: actual duration of FTM
|
||||
* @allocated_duration: time that was allocated for this FTM session
|
||||
* @bw: FTM request bandwidth
|
||||
* @rate: FTM request rate
|
||||
* @reserved: for alingment and future use
|
||||
*/
|
||||
struct iwl_ftm_responder_stats {
|
||||
u8 addr[ETH_ALEN];
|
||||
u8 success_ftm;
|
||||
u8 ftm_per_burst;
|
||||
__le32 flags;
|
||||
__le32 duration;
|
||||
__le32 allocated_duration;
|
||||
u8 bw;
|
||||
u8 rate;
|
||||
__le16 reserved;
|
||||
} __packed; /* TOF_RESPONDER_STATISTICS_NTFY_S_VER_2 */
|
||||
|
||||
#define IWL_CSI_CHUNK_CTL_NUM_MASK 0x3
|
||||
#define IWL_CSI_CHUNK_CTL_IDX_MASK 0xc
|
||||
|
||||
struct iwl_csi_chunk_notification {
|
||||
__le32 token;
|
||||
__le16 seq;
|
||||
__le16 ctl;
|
||||
__le32 size;
|
||||
u8 data[];
|
||||
} __packed; /* CSI_CHUNKS_HDR_NTFY_API_S_VER_1 */
|
||||
|
||||
#endif /* __iwl_fw_api_location_h__ */
|
@@ -8,6 +8,7 @@
|
||||
* 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
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License as
|
||||
@@ -30,6 +31,7 @@
|
||||
* 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
|
||||
@@ -95,17 +97,36 @@
|
||||
#define PHY_VHT_CTRL_POS_4_ABOVE (0x7)
|
||||
|
||||
/*
|
||||
* struct iwl_fw_channel_info_v1 - channel information
|
||||
*
|
||||
* @band: PHY_BAND_*
|
||||
* @channel: channel number
|
||||
* @width: PHY_[VHT|LEGACY]_CHANNEL_*
|
||||
* @ctrl channel: PHY_[VHT|LEGACY]_CTRL_*
|
||||
*/
|
||||
struct iwl_fw_channel_info {
|
||||
struct iwl_fw_channel_info_v1 {
|
||||
u8 band;
|
||||
u8 channel;
|
||||
u8 width;
|
||||
u8 ctrl_pos;
|
||||
} __packed;
|
||||
} __packed; /* CHANNEL_CONFIG_API_S_VER_1 */
|
||||
|
||||
/*
|
||||
* struct iwl_fw_channel_info - channel information
|
||||
*
|
||||
* @channel: channel number
|
||||
* @band: PHY_BAND_*
|
||||
* @width: PHY_[VHT|LEGACY]_CHANNEL_*
|
||||
* @ctrl channel: PHY_[VHT|LEGACY]_CTRL_*
|
||||
* @reserved: for future use and alignment
|
||||
*/
|
||||
struct iwl_fw_channel_info {
|
||||
__le32 channel;
|
||||
u8 band;
|
||||
u8 width;
|
||||
u8 ctrl_pos;
|
||||
u8 reserved;
|
||||
} __packed; /*CHANNEL_CONFIG_API_S_VER_2 */
|
||||
|
||||
#define PHY_RX_CHAIN_DRIVER_FORCE_POS (0)
|
||||
#define PHY_RX_CHAIN_DRIVER_FORCE_MSK \
|
||||
@@ -133,6 +154,22 @@ struct iwl_fw_channel_info {
|
||||
#define NUM_PHY_CTX 3
|
||||
|
||||
/* TODO: complete missing documentation */
|
||||
/**
|
||||
* struct iwl_phy_context_cmd_tail - tail of iwl_phy_ctx_cmd for alignment with
|
||||
* various channel structures.
|
||||
*
|
||||
* @txchain_info: ???
|
||||
* @rxchain_info: ???
|
||||
* @acquisition_data: ???
|
||||
* @dsp_cfg_flags: set to 0
|
||||
*/
|
||||
struct iwl_phy_context_cmd_tail {
|
||||
__le32 txchain_info;
|
||||
__le32 rxchain_info;
|
||||
__le32 acquisition_data;
|
||||
__le32 dsp_cfg_flags;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_phy_context_cmd - config of the PHY context
|
||||
* ( PHY_CONTEXT_CMD = 0x8 )
|
||||
@@ -142,10 +179,7 @@ struct iwl_fw_channel_info {
|
||||
* other value means apply new params after X usecs
|
||||
* @tx_param_color: ???
|
||||
* @ci: channel info
|
||||
* @txchain_info: ???
|
||||
* @rxchain_info: ???
|
||||
* @acquisition_data: ???
|
||||
* @dsp_cfg_flags: set to 0
|
||||
* @tail: command tail
|
||||
*/
|
||||
struct iwl_phy_context_cmd {
|
||||
/* COMMON_INDEX_HDR_API_S_VER_1 */
|
||||
@@ -155,10 +189,7 @@ struct iwl_phy_context_cmd {
|
||||
__le32 apply_time;
|
||||
__le32 tx_param_color;
|
||||
struct iwl_fw_channel_info ci;
|
||||
__le32 txchain_info;
|
||||
__le32 rxchain_info;
|
||||
__le32 acquisition_data;
|
||||
__le32 dsp_cfg_flags;
|
||||
struct iwl_phy_context_cmd_tail tail;
|
||||
} __packed; /* PHY_CONTEXT_CMD_API_VER_1 */
|
||||
|
||||
#endif /* __iwl_fw_api_phy_ctxt_h__ */
|
||||
|
@@ -209,8 +209,6 @@ enum iwl_rx_phy_flags {
|
||||
* @RX_MPDU_RES_STATUS_CSUM_OK: checksum found no errors
|
||||
* @RX_MPDU_RES_STATUS_STA_ID_MSK: station ID mask
|
||||
* @RX_MDPU_RES_STATUS_STA_ID_SHIFT: station ID bit shift
|
||||
* @RX_MPDU_RES_STATUS_FILTERING_MSK: filter status
|
||||
* @RX_MPDU_RES_STATUS2_FILTERING_MSK: filter status 2
|
||||
*/
|
||||
enum iwl_mvm_rx_status {
|
||||
RX_MPDU_RES_STATUS_CRC_OK = BIT(0),
|
||||
@@ -238,8 +236,6 @@ enum iwl_mvm_rx_status {
|
||||
RX_MPDU_RES_STATUS_CSUM_OK = BIT(17),
|
||||
RX_MDPU_RES_STATUS_STA_ID_SHIFT = 24,
|
||||
RX_MPDU_RES_STATUS_STA_ID_MSK = 0x1f << RX_MDPU_RES_STATUS_STA_ID_SHIFT,
|
||||
RX_MPDU_RES_STATUS_FILTERING_MSK = (0xc00000),
|
||||
RX_MPDU_RES_STATUS2_FILTERING_MSK = (0xc0000000),
|
||||
};
|
||||
|
||||
/* 9000 series API */
|
||||
@@ -337,6 +333,8 @@ enum iwl_rx_mpdu_phy_info {
|
||||
IWL_RX_MPDU_PHY_AMPDU = BIT(5),
|
||||
IWL_RX_MPDU_PHY_AMPDU_TOGGLE = BIT(6),
|
||||
IWL_RX_MPDU_PHY_SHORT_PREAMBLE = BIT(7),
|
||||
/* short preamble is only for CCK, for non-CCK overridden by this */
|
||||
IWL_RX_MPDU_PHY_NCCK_ADDTL_NTFY = BIT(7),
|
||||
IWL_RX_MPDU_PHY_TSF_OVERLOAD = BIT(8),
|
||||
};
|
||||
|
||||
@@ -723,6 +721,9 @@ struct iwl_rx_mpdu_desc {
|
||||
#define RX_NO_DATA_FRAME_TIME_POS 0
|
||||
#define RX_NO_DATA_FRAME_TIME_MSK (0xfffff << RX_NO_DATA_FRAME_TIME_POS)
|
||||
|
||||
#define RX_NO_DATA_RX_VEC0_HE_NSTS_MSK 0x03800000
|
||||
#define RX_NO_DATA_RX_VEC0_VHT_NSTS_MSK 0x38000000
|
||||
|
||||
/**
|
||||
* struct iwl_rx_no_data - RX no data descriptor
|
||||
* @info: 7:0 frame type, 15:8 RX error type
|
||||
@@ -743,7 +744,7 @@ struct iwl_rx_no_data {
|
||||
__le32 fr_time;
|
||||
__le32 rate;
|
||||
__le32 phy_info[2];
|
||||
__le32 rx_vec[3];
|
||||
__le32 rx_vec[2];
|
||||
} __packed; /* RX_NO_DATA_NTFY_API_S_VER_1 */
|
||||
|
||||
/**
|
||||
|
@@ -8,6 +8,7 @@
|
||||
* 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
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License as
|
||||
@@ -29,6 +30,7 @@
|
||||
*
|
||||
* Copyright(c) 2012 - 2014 Intel Corporation. All rights reserved.
|
||||
* Copyright(c) 2013 - 2015 Intel Mobile Communications GmbH
|
||||
* Copyright (C) 2018 Intel Corporation
|
||||
* All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
@@ -363,14 +365,7 @@ struct mvm_statistics_general_v8 {
|
||||
u8 reserved[4 - (NUM_MAC_INDEX % 4)];
|
||||
} __packed; /* STATISTICS_GENERAL_API_S_VER_8 */
|
||||
|
||||
struct mvm_statistics_general_cdb_v9 {
|
||||
struct mvm_statistics_general_common_v19 common;
|
||||
__le32 beacon_counter[NUM_MAC_INDEX_CDB];
|
||||
u8 beacon_average_energy[NUM_MAC_INDEX_CDB];
|
||||
u8 reserved[4 - (NUM_MAC_INDEX_CDB % 4)];
|
||||
} __packed; /* STATISTICS_GENERAL_API_S_VER_9 */
|
||||
|
||||
struct mvm_statistics_general_cdb {
|
||||
struct mvm_statistics_general {
|
||||
struct mvm_statistics_general_common common;
|
||||
__le32 beacon_counter[MAC_INDEX_AUX];
|
||||
u8 beacon_average_energy[MAC_INDEX_AUX];
|
||||
@@ -435,11 +430,11 @@ struct iwl_notif_statistics_v11 {
|
||||
struct mvm_statistics_load_v1 load_stats;
|
||||
} __packed; /* STATISTICS_NTFY_API_S_VER_11 */
|
||||
|
||||
struct iwl_notif_statistics_cdb {
|
||||
struct iwl_notif_statistics {
|
||||
__le32 flag;
|
||||
struct mvm_statistics_rx rx;
|
||||
struct mvm_statistics_tx tx;
|
||||
struct mvm_statistics_general_cdb general;
|
||||
struct mvm_statistics_general general;
|
||||
struct mvm_statistics_load load_stats;
|
||||
} __packed; /* STATISTICS_NTFY_API_S_VER_13 */
|
||||
|
||||
|
@@ -8,6 +8,7 @@
|
||||
* 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
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License as
|
||||
@@ -30,6 +31,7 @@
|
||||
* 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
|
||||
@@ -110,6 +112,17 @@ struct iwl_tdls_channel_switch_frame {
|
||||
u8 data[IWL_TDLS_CH_SW_FRAME_MAX_SIZE];
|
||||
} __packed; /* TDLS_STA_CHANNEL_SWITCH_FRAME_API_S_VER_1 */
|
||||
|
||||
/**
|
||||
* struct iwl_tdls_channel_switch_cmd_tail - tail of iwl_tdls_channel_switch_cmd
|
||||
*
|
||||
* @timing: timing related data for command
|
||||
* @frame: channel-switch request/response template, depending to switch_type
|
||||
*/
|
||||
struct iwl_tdls_channel_switch_cmd_tail {
|
||||
struct iwl_tdls_channel_switch_timing timing;
|
||||
struct iwl_tdls_channel_switch_frame frame;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tdls_channel_switch_cmd - TDLS channel switch command
|
||||
*
|
||||
@@ -119,15 +132,13 @@ struct iwl_tdls_channel_switch_frame {
|
||||
* @switch_type: see &enum iwl_tdls_channel_switch_type
|
||||
* @peer_sta_id: station id of TDLS peer
|
||||
* @ci: channel we switch to
|
||||
* @timing: timing related data for command
|
||||
* @frame: channel-switch request/response template, depending to switch_type
|
||||
* @tail: command tail
|
||||
*/
|
||||
struct iwl_tdls_channel_switch_cmd {
|
||||
u8 switch_type;
|
||||
__le32 peer_sta_id;
|
||||
struct iwl_fw_channel_info ci;
|
||||
struct iwl_tdls_channel_switch_timing timing;
|
||||
struct iwl_tdls_channel_switch_frame frame;
|
||||
struct iwl_tdls_channel_switch_cmd_tail tail;
|
||||
} __packed; /* TDLS_STA_CHANNEL_SWITCH_CMD_API_S_VER_1 */
|
||||
|
||||
/**
|
||||
|
@@ -8,6 +8,7 @@
|
||||
* 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
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License as
|
||||
@@ -30,6 +31,7 @@
|
||||
* 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
|
||||
@@ -317,6 +319,25 @@ struct iwl_time_event_notif {
|
||||
__le32 status;
|
||||
} __packed; /* MAC_TIME_EVENT_NTFY_API_S_VER_1 */
|
||||
|
||||
/*
|
||||
* struct iwl_hs20_roc_req_tail - tail of iwl_hs20_roc_req
|
||||
*
|
||||
* @node_addr: Our MAC Address
|
||||
* @reserved: reserved for alignment
|
||||
* @apply_time: GP2 value to start (should always be the current GP2 value)
|
||||
* @apply_time_max_delay: Maximum apply time delay value in TU. Defines max
|
||||
* time by which start of the event is allowed to be postponed.
|
||||
* @duration: event duration in TU To calculate event duration:
|
||||
* timeEventDuration = min(duration, remainingQuota)
|
||||
*/
|
||||
struct iwl_hs20_roc_req_tail {
|
||||
u8 node_addr[ETH_ALEN];
|
||||
__le16 reserved;
|
||||
__le32 apply_time;
|
||||
__le32 apply_time_max_delay;
|
||||
__le32 duration;
|
||||
} __packed;
|
||||
|
||||
/*
|
||||
* Aux ROC command
|
||||
*
|
||||
@@ -336,13 +357,6 @@ struct iwl_time_event_notif {
|
||||
* @sta_id_and_color: station id and color, resumed during "Remain On Channel"
|
||||
* activity.
|
||||
* @channel_info: channel info
|
||||
* @node_addr: Our MAC Address
|
||||
* @reserved: reserved for alignment
|
||||
* @apply_time: GP2 value to start (should always be the current GP2 value)
|
||||
* @apply_time_max_delay: Maximum apply time delay value in TU. Defines max
|
||||
* time by which start of the event is allowed to be postponed.
|
||||
* @duration: event duration in TU To calculate event duration:
|
||||
* timeEventDuration = min(duration, remainingQuota)
|
||||
*/
|
||||
struct iwl_hs20_roc_req {
|
||||
/* COMMON_INDEX_HDR_API_S_VER_1 hdr */
|
||||
@@ -351,11 +365,7 @@ struct iwl_hs20_roc_req {
|
||||
__le32 event_unique_id;
|
||||
__le32 sta_id_and_color;
|
||||
struct iwl_fw_channel_info channel_info;
|
||||
u8 node_addr[ETH_ALEN];
|
||||
__le16 reserved;
|
||||
__le32 apply_time;
|
||||
__le32 apply_time_max_delay;
|
||||
__le32 duration;
|
||||
struct iwl_hs20_roc_req_tail tail;
|
||||
} __packed; /* HOT_SPOT_CMD_API_S_VER_1 */
|
||||
|
||||
/*
|
||||
|
@@ -1,393 +0,0 @@
|
||||
/******************************************************************************
|
||||
*
|
||||
* This file is provided under a dual BSD/GPLv2 license. When using or
|
||||
* redistributing this file, you may do so under either license.
|
||||
*
|
||||
* GPL LICENSE SUMMARY
|
||||
*
|
||||
* Copyright(c) 2015 - 2017 Intel Deutschland GmbH
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of version 2 of the GNU General Public License as
|
||||
* published by the Free Software Foundation.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but
|
||||
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* General Public License for more details.
|
||||
*
|
||||
* The full GNU General Public License is included in this distribution
|
||||
* in the file called COPYING.
|
||||
*
|
||||
* Contact Information:
|
||||
* Intel Linux Wireless <linuxwifi@intel.com>
|
||||
* Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
|
||||
*
|
||||
* BSD LICENSE
|
||||
*
|
||||
* Copyright(c) 2015 - 2017 Intel Deutschland GmbH
|
||||
* 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 __iwl_fw_api_tof_h__
|
||||
#define __iwl_fw_api_tof_h__
|
||||
|
||||
/* ToF sub-group command IDs */
|
||||
enum iwl_mvm_tof_sub_grp_ids {
|
||||
TOF_RANGE_REQ_CMD = 0x1,
|
||||
TOF_CONFIG_CMD = 0x2,
|
||||
TOF_RANGE_ABORT_CMD = 0x3,
|
||||
TOF_RANGE_REQ_EXT_CMD = 0x4,
|
||||
TOF_RESPONDER_CONFIG_CMD = 0x5,
|
||||
TOF_NW_INITIATED_RES_SEND_CMD = 0x6,
|
||||
TOF_NEIGHBOR_REPORT_REQ_CMD = 0x7,
|
||||
TOF_NEIGHBOR_REPORT_RSP_NOTIF = 0xFC,
|
||||
TOF_NW_INITIATED_REQ_RCVD_NOTIF = 0xFD,
|
||||
TOF_RANGE_RESPONSE_NOTIF = 0xFE,
|
||||
TOF_MCSI_DEBUG_NOTIF = 0xFB,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_tof_config_cmd - ToF configuration
|
||||
* @tof_disabled: 0 enabled, 1 - disabled
|
||||
* @one_sided_disabled: 0 enabled, 1 - disabled
|
||||
* @is_debug_mode: 1 debug mode, 0 - otherwise
|
||||
* @is_buf_required: 1 channel estimation buffer required, 0 - otherwise
|
||||
*/
|
||||
struct iwl_tof_config_cmd {
|
||||
__le32 sub_grp_cmd_id;
|
||||
u8 tof_disabled;
|
||||
u8 one_sided_disabled;
|
||||
u8 is_debug_mode;
|
||||
u8 is_buf_required;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tof_responder_config_cmd - ToF AP mode (for debug)
|
||||
* @burst_period: future use: (currently hard coded in the LMAC)
|
||||
* The interval between two sequential bursts.
|
||||
* @min_delta_ftm: future use: (currently hard coded in the LMAC)
|
||||
* The minimum delay between two sequential FTM Responses
|
||||
* in the same burst.
|
||||
* @burst_duration: future use: (currently hard coded in the LMAC)
|
||||
* The total time for all FTMs handshake in the same burst.
|
||||
* Affect the time events duration in the LMAC.
|
||||
* @num_of_burst_exp: future use: (currently hard coded in the LMAC)
|
||||
* The number of bursts for the current ToF request. Affect
|
||||
* the number of events allocations in the current iteration.
|
||||
* @get_ch_est: for xVT only, NA for driver
|
||||
* @abort_responder: when set to '1' - Responder will terminate its activity
|
||||
* (all other fields in the command are ignored)
|
||||
* @recv_sta_req_params: 1 - Responder will ignore the other Responder's
|
||||
* params and use the recomended Initiator params.
|
||||
* 0 - otherwise
|
||||
* @channel_num: current AP Channel
|
||||
* @bandwidth: current AP Bandwidth: 0 20MHz, 1 40MHz, 2 80MHz
|
||||
* @rate: current AP rate
|
||||
* @ctrl_ch_position: coding of the control channel position relative to
|
||||
* the center frequency:
|
||||
*
|
||||
* 40 MHz
|
||||
* 0 below center, 1 above center
|
||||
*
|
||||
* 80 MHz
|
||||
* bits [0..1]
|
||||
* * 0 the near 20MHz to the center,
|
||||
* * 1 the far 20MHz to the center
|
||||
* bit[2]
|
||||
* as above 40MHz
|
||||
* @ftm_per_burst: FTMs per Burst
|
||||
* @ftm_resp_ts_avail: '0' - we don't measure over the Initial FTM Response,
|
||||
* '1' - we measure over the Initial FTM Response
|
||||
* @asap_mode: ASAP / Non ASAP mode for the current WLS station
|
||||
* @sta_id: index of the AP STA when in AP mode
|
||||
* @tsf_timer_offset_msecs: The dictated time offset (mSec) from the AP's TSF
|
||||
* @toa_offset: Artificial addition [0.1nsec] for the ToA - to be used for debug
|
||||
* purposes, simulating station movement by adding various values
|
||||
* to this field
|
||||
* @bssid: Current AP BSSID
|
||||
*/
|
||||
struct iwl_tof_responder_config_cmd {
|
||||
__le32 sub_grp_cmd_id;
|
||||
__le16 burst_period;
|
||||
u8 min_delta_ftm;
|
||||
u8 burst_duration;
|
||||
u8 num_of_burst_exp;
|
||||
u8 get_ch_est;
|
||||
u8 abort_responder;
|
||||
u8 recv_sta_req_params;
|
||||
u8 channel_num;
|
||||
u8 bandwidth;
|
||||
u8 rate;
|
||||
u8 ctrl_ch_position;
|
||||
u8 ftm_per_burst;
|
||||
u8 ftm_resp_ts_avail;
|
||||
u8 asap_mode;
|
||||
u8 sta_id;
|
||||
__le16 tsf_timer_offset_msecs;
|
||||
__le16 toa_offset;
|
||||
u8 bssid[ETH_ALEN];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_request_ext_cmd - extended range req for WLS
|
||||
* @tsf_timer_offset_msec: the recommended time offset (mSec) from the AP's TSF
|
||||
* @reserved: reserved
|
||||
* @min_delta_ftm: Minimal time between two consecutive measurements,
|
||||
* in units of 100us. 0 means no preference by station
|
||||
* @ftm_format_and_bw20M: FTM Channel Spacing/Format for 20MHz: recommended
|
||||
* value be sent to the AP
|
||||
* @ftm_format_and_bw40M: FTM Channel Spacing/Format for 40MHz: recommended
|
||||
* value to be sent to the AP
|
||||
* @ftm_format_and_bw80M: FTM Channel Spacing/Format for 80MHz: recommended
|
||||
* value to be sent to the AP
|
||||
*/
|
||||
struct iwl_tof_range_req_ext_cmd {
|
||||
__le32 sub_grp_cmd_id;
|
||||
__le16 tsf_timer_offset_msec;
|
||||
__le16 reserved;
|
||||
u8 min_delta_ftm;
|
||||
u8 ftm_format_and_bw20M;
|
||||
u8 ftm_format_and_bw40M;
|
||||
u8 ftm_format_and_bw80M;
|
||||
} __packed;
|
||||
|
||||
#define IWL_MVM_TOF_MAX_APS 21
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_req_ap_entry - AP configuration parameters
|
||||
* @channel_num: Current AP Channel
|
||||
* @bandwidth: Current AP Bandwidth: 0 20MHz, 1 40MHz, 2 80MHz
|
||||
* @tsf_delta_direction: TSF relatively to the subject AP
|
||||
* @ctrl_ch_position: Coding of the control channel position relative to the
|
||||
* center frequency.
|
||||
* 40MHz 0 below center, 1 above center
|
||||
* 80MHz bits [0..1]: 0 the near 20MHz to the center,
|
||||
* 1 the far 20MHz to the center
|
||||
* bit[2] as above 40MHz
|
||||
* @bssid: AP's bss id
|
||||
* @measure_type: Measurement type: 0 - two sided, 1 - One sided
|
||||
* @num_of_bursts: Recommended value to be sent to the AP. 2s Exponent of the
|
||||
* number of measurement iterations (min 2^0 = 1, max 2^14)
|
||||
* @burst_period: Recommended value to be sent to the AP. Measurement
|
||||
* periodicity In units of 100ms. ignored if num_of_bursts = 0
|
||||
* @samples_per_burst: 2-sided: the number of FTMs pairs in single Burst (1-31)
|
||||
* 1-sided: how many rts/cts pairs should be used per burst.
|
||||
* @retries_per_sample: Max number of retries that the LMAC should send
|
||||
* in case of no replies by the AP.
|
||||
* @tsf_delta: TSF Delta in units of microseconds.
|
||||
* The difference between the AP TSF and the device local clock.
|
||||
* @location_req: Location Request Bit[0] LCI should be sent in the FTMR
|
||||
* Bit[1] Civic should be sent in the FTMR
|
||||
* @asap_mode: 0 - non asap mode, 1 - asap mode (not relevant for one sided)
|
||||
* @enable_dyn_ack: Enable Dynamic ACK BW.
|
||||
* 0 Initiator interact with regular AP
|
||||
* 1 Initiator interact with Responder machine: need to send the
|
||||
* Initiator Acks with HT 40MHz / 80MHz, since the Responder should
|
||||
* use it for its ch est measurement (this flag will be set when we
|
||||
* configure the opposite machine to be Responder).
|
||||
* @rssi: Last received value
|
||||
* leagal values: -128-0 (0x7f). above 0x0 indicating an invalid value.
|
||||
*/
|
||||
struct iwl_tof_range_req_ap_entry {
|
||||
u8 channel_num;
|
||||
u8 bandwidth;
|
||||
u8 tsf_delta_direction;
|
||||
u8 ctrl_ch_position;
|
||||
u8 bssid[ETH_ALEN];
|
||||
u8 measure_type;
|
||||
u8 num_of_bursts;
|
||||
__le16 burst_period;
|
||||
u8 samples_per_burst;
|
||||
u8 retries_per_sample;
|
||||
__le32 tsf_delta;
|
||||
u8 location_req;
|
||||
u8 asap_mode;
|
||||
u8 enable_dyn_ack;
|
||||
s8 rssi;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* enum iwl_tof_response_mode
|
||||
* @IWL_MVM_TOF_RESPOSE_ASAP: report each AP measurement separately as soon as
|
||||
* possible (not supported for this release)
|
||||
* @IWL_MVM_TOF_RESPOSE_TIMEOUT: report all AP measurements as a batch upon
|
||||
* timeout expiration
|
||||
* @IWL_MVM_TOF_RESPOSE_COMPLETE: report all AP measurements as a batch at the
|
||||
* earlier of: measurements completion / timeout
|
||||
* expiration.
|
||||
*/
|
||||
enum iwl_tof_response_mode {
|
||||
IWL_MVM_TOF_RESPOSE_ASAP = 1,
|
||||
IWL_MVM_TOF_RESPOSE_TIMEOUT,
|
||||
IWL_MVM_TOF_RESPOSE_COMPLETE,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_req_cmd - start measurement cmd
|
||||
* @request_id: A Token incremented per request. The same Token will be
|
||||
* sent back in the range response
|
||||
* @initiator: 0- NW initiated, 1 - Client Initiated
|
||||
* @one_sided_los_disable: '0'- run ML-Algo for both ToF/OneSided,
|
||||
* '1' - run ML-Algo for ToF only
|
||||
* @req_timeout: Requested timeout of the response in units of 100ms.
|
||||
* This is equivalent to the session time configured to the
|
||||
* LMAC in Initiator Request
|
||||
* @report_policy: Supported partially for this release: For current release -
|
||||
* the range report will be uploaded as a batch when ready or
|
||||
* when the session is done (successfully / partially).
|
||||
* one of iwl_tof_response_mode.
|
||||
* @num_of_ap: Number of APs to measure (error if > IWL_MVM_TOF_MAX_APS)
|
||||
* @macaddr_random: '0' Use default source MAC address (i.e. p2_p),
|
||||
* '1' Use MAC Address randomization according to the below
|
||||
* @macaddr_mask: Bits set to 0 shall be copied from the MAC address template.
|
||||
* Bits set to 1 shall be randomized by the UMAC
|
||||
* @ap: per-AP request data
|
||||
*/
|
||||
struct iwl_tof_range_req_cmd {
|
||||
__le32 sub_grp_cmd_id;
|
||||
u8 request_id;
|
||||
u8 initiator;
|
||||
u8 one_sided_los_disable;
|
||||
u8 req_timeout;
|
||||
u8 report_policy;
|
||||
u8 los_det_disable;
|
||||
u8 num_of_ap;
|
||||
u8 macaddr_random;
|
||||
u8 macaddr_template[ETH_ALEN];
|
||||
u8 macaddr_mask[ETH_ALEN];
|
||||
struct iwl_tof_range_req_ap_entry ap[IWL_MVM_TOF_MAX_APS];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tof_gen_resp_cmd - generic ToF response
|
||||
*/
|
||||
struct iwl_tof_gen_resp_cmd {
|
||||
__le32 sub_grp_cmd_id;
|
||||
u8 data[];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_rsp_ap_entry_ntfy - AP parameters (response)
|
||||
* @bssid: BSSID of the AP
|
||||
* @measure_status: current APs measurement status, one of
|
||||
* &enum iwl_tof_entry_status.
|
||||
* @measure_bw: Current AP Bandwidth: 0 20MHz, 1 40MHz, 2 80MHz
|
||||
* @rtt: The Round Trip Time that took for the last measurement for
|
||||
* current AP [nSec]
|
||||
* @rtt_variance: The Variance of the RTT values measured for current AP
|
||||
* @rtt_spread: The Difference between the maximum and the minimum RTT
|
||||
* values measured for current AP in the current session [nsec]
|
||||
* @rssi: RSSI as uploaded in the Channel Estimation notification
|
||||
* @rssi_spread: The Difference between the maximum and the minimum RSSI values
|
||||
* measured for current AP in the current session
|
||||
* @reserved: reserved
|
||||
* @range: Measured range [cm]
|
||||
* @range_variance: Measured range variance [cm]
|
||||
* @timestamp: The GP2 Clock [usec] where Channel Estimation notification was
|
||||
* uploaded by the LMAC
|
||||
*/
|
||||
struct iwl_tof_range_rsp_ap_entry_ntfy {
|
||||
u8 bssid[ETH_ALEN];
|
||||
u8 measure_status;
|
||||
u8 measure_bw;
|
||||
__le32 rtt;
|
||||
__le32 rtt_variance;
|
||||
__le32 rtt_spread;
|
||||
s8 rssi;
|
||||
u8 rssi_spread;
|
||||
__le16 reserved;
|
||||
__le32 range;
|
||||
__le32 range_variance;
|
||||
__le32 timestamp;
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_rsp_ntfy -
|
||||
* @request_id: A Token ID of the corresponding Range request
|
||||
* @request_status: status of current measurement session
|
||||
* @last_in_batch: reprot policy (when not all responses are uploaded at once)
|
||||
* @num_of_aps: Number of APs to measure (error if > IWL_MVM_TOF_MAX_APS)
|
||||
* @ap: per-AP data
|
||||
*/
|
||||
struct iwl_tof_range_rsp_ntfy {
|
||||
u8 request_id;
|
||||
u8 request_status;
|
||||
u8 last_in_batch;
|
||||
u8 num_of_aps;
|
||||
struct iwl_tof_range_rsp_ap_entry_ntfy ap[IWL_MVM_TOF_MAX_APS];
|
||||
} __packed;
|
||||
|
||||
#define IWL_MVM_TOF_MCSI_BUF_SIZE (245)
|
||||
/**
|
||||
* struct iwl_tof_mcsi_notif - used for debug
|
||||
* @token: token ID for the current session
|
||||
* @role: '0' - initiator, '1' - responder
|
||||
* @reserved: reserved
|
||||
* @initiator_bssid: initiator machine
|
||||
* @responder_bssid: responder machine
|
||||
* @mcsi_buffer: debug data
|
||||
*/
|
||||
struct iwl_tof_mcsi_notif {
|
||||
u8 token;
|
||||
u8 role;
|
||||
__le16 reserved;
|
||||
u8 initiator_bssid[ETH_ALEN];
|
||||
u8 responder_bssid[ETH_ALEN];
|
||||
u8 mcsi_buffer[IWL_MVM_TOF_MCSI_BUF_SIZE * 4];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tof_neighbor_report_notif
|
||||
* @bssid: BSSID of the AP which sent the report
|
||||
* @request_token: same token as the corresponding request
|
||||
* @status:
|
||||
* @report_ie_len: the length of the response frame starting from the Element ID
|
||||
* @data: the IEs
|
||||
*/
|
||||
struct iwl_tof_neighbor_report {
|
||||
u8 bssid[ETH_ALEN];
|
||||
u8 request_token;
|
||||
u8 status;
|
||||
__le16 report_ie_len;
|
||||
u8 data[];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
* struct iwl_tof_range_abort_cmd
|
||||
* @request_id: corresponds to a range request
|
||||
* @reserved: reserved
|
||||
*/
|
||||
struct iwl_tof_range_abort_cmd {
|
||||
__le32 sub_grp_cmd_id;
|
||||
u8 request_id;
|
||||
u8 reserved[3];
|
||||
} __packed;
|
||||
|
||||
#endif
|
@@ -469,6 +469,93 @@ static const struct iwl_prph_range iwl_prph_dump_addr_9000[] = {
|
||||
{ .start = 0x00a02400, .end = 0x00a02758 },
|
||||
};
|
||||
|
||||
static const struct iwl_prph_range iwl_prph_dump_addr_22000[] = {
|
||||
{ .start = 0x00a00000, .end = 0x00a00000 },
|
||||
{ .start = 0x00a0000c, .end = 0x00a00024 },
|
||||
{ .start = 0x00a0002c, .end = 0x00a00034 },
|
||||
{ .start = 0x00a0003c, .end = 0x00a0003c },
|
||||
{ .start = 0x00a00410, .end = 0x00a00418 },
|
||||
{ .start = 0x00a00420, .end = 0x00a00420 },
|
||||
{ .start = 0x00a00428, .end = 0x00a00428 },
|
||||
{ .start = 0x00a00430, .end = 0x00a0043c },
|
||||
{ .start = 0x00a00444, .end = 0x00a00444 },
|
||||
{ .start = 0x00a00840, .end = 0x00a00840 },
|
||||
{ .start = 0x00a00850, .end = 0x00a00858 },
|
||||
{ .start = 0x00a01004, .end = 0x00a01008 },
|
||||
{ .start = 0x00a01010, .end = 0x00a01010 },
|
||||
{ .start = 0x00a01018, .end = 0x00a01018 },
|
||||
{ .start = 0x00a01024, .end = 0x00a01024 },
|
||||
{ .start = 0x00a0102c, .end = 0x00a01034 },
|
||||
{ .start = 0x00a0103c, .end = 0x00a01040 },
|
||||
{ .start = 0x00a01048, .end = 0x00a01050 },
|
||||
{ .start = 0x00a01058, .end = 0x00a01058 },
|
||||
{ .start = 0x00a01060, .end = 0x00a01070 },
|
||||
{ .start = 0x00a0108c, .end = 0x00a0108c },
|
||||
{ .start = 0x00a01c20, .end = 0x00a01c28 },
|
||||
{ .start = 0x00a01d10, .end = 0x00a01d10 },
|
||||
{ .start = 0x00a01e28, .end = 0x00a01e2c },
|
||||
{ .start = 0x00a01e60, .end = 0x00a01e60 },
|
||||
{ .start = 0x00a01e80, .end = 0x00a01e80 },
|
||||
{ .start = 0x00a01ea0, .end = 0x00a01ea0 },
|
||||
{ .start = 0x00a02000, .end = 0x00a0201c },
|
||||
{ .start = 0x00a02024, .end = 0x00a02024 },
|
||||
{ .start = 0x00a02040, .end = 0x00a02048 },
|
||||
{ .start = 0x00a020c0, .end = 0x00a020e0 },
|
||||
{ .start = 0x00a02400, .end = 0x00a02404 },
|
||||
{ .start = 0x00a0240c, .end = 0x00a02414 },
|
||||
{ .start = 0x00a0241c, .end = 0x00a0243c },
|
||||
{ .start = 0x00a02448, .end = 0x00a024bc },
|
||||
{ .start = 0x00a024c4, .end = 0x00a024cc },
|
||||
{ .start = 0x00a02508, .end = 0x00a02508 },
|
||||
{ .start = 0x00a02510, .end = 0x00a02514 },
|
||||
{ .start = 0x00a0251c, .end = 0x00a0251c },
|
||||
{ .start = 0x00a0252c, .end = 0x00a0255c },
|
||||
{ .start = 0x00a02564, .end = 0x00a025a0 },
|
||||
{ .start = 0x00a025a8, .end = 0x00a025b4 },
|
||||
{ .start = 0x00a025c0, .end = 0x00a025c0 },
|
||||
{ .start = 0x00a025e8, .end = 0x00a025f4 },
|
||||
{ .start = 0x00a02c08, .end = 0x00a02c18 },
|
||||
{ .start = 0x00a02c2c, .end = 0x00a02c38 },
|
||||
{ .start = 0x00a02c68, .end = 0x00a02c78 },
|
||||
{ .start = 0x00a03000, .end = 0x00a03000 },
|
||||
{ .start = 0x00a03010, .end = 0x00a03014 },
|
||||
{ .start = 0x00a0301c, .end = 0x00a0302c },
|
||||
{ .start = 0x00a03034, .end = 0x00a03038 },
|
||||
{ .start = 0x00a03040, .end = 0x00a03044 },
|
||||
{ .start = 0x00a03060, .end = 0x00a03068 },
|
||||
{ .start = 0x00a03070, .end = 0x00a03070 },
|
||||
{ .start = 0x00a0307c, .end = 0x00a03084 },
|
||||
{ .start = 0x00a0308c, .end = 0x00a03090 },
|
||||
{ .start = 0x00a03098, .end = 0x00a03098 },
|
||||
{ .start = 0x00a030a0, .end = 0x00a030a0 },
|
||||
{ .start = 0x00a030a8, .end = 0x00a030b4 },
|
||||
{ .start = 0x00a030bc, .end = 0x00a030c0 },
|
||||
{ .start = 0x00a030c8, .end = 0x00a030f4 },
|
||||
{ .start = 0x00a03100, .end = 0x00a0312c },
|
||||
{ .start = 0x00a03c00, .end = 0x00a03c5c },
|
||||
{ .start = 0x00a04400, .end = 0x00a04454 },
|
||||
{ .start = 0x00a04460, .end = 0x00a04474 },
|
||||
{ .start = 0x00a044c0, .end = 0x00a044ec },
|
||||
{ .start = 0x00a04500, .end = 0x00a04504 },
|
||||
{ .start = 0x00a04510, .end = 0x00a04538 },
|
||||
{ .start = 0x00a04540, .end = 0x00a04548 },
|
||||
{ .start = 0x00a04560, .end = 0x00a04560 },
|
||||
{ .start = 0x00a04570, .end = 0x00a0457c },
|
||||
{ .start = 0x00a04590, .end = 0x00a04590 },
|
||||
{ .start = 0x00a04598, .end = 0x00a04598 },
|
||||
{ .start = 0x00a045c0, .end = 0x00a045f4 },
|
||||
{ .start = 0x00a0c000, .end = 0x00a0c018 },
|
||||
{ .start = 0x00a0c020, .end = 0x00a0c028 },
|
||||
{ .start = 0x00a0c038, .end = 0x00a0c094 },
|
||||
{ .start = 0x00a0c0c0, .end = 0x00a0c104 },
|
||||
{ .start = 0x00a0c10c, .end = 0x00a0c118 },
|
||||
{ .start = 0x00a0c150, .end = 0x00a0c174 },
|
||||
{ .start = 0x00a0c17c, .end = 0x00a0c188 },
|
||||
{ .start = 0x00a0c190, .end = 0x00a0c198 },
|
||||
{ .start = 0x00a0c1a0, .end = 0x00a0c1a8 },
|
||||
{ .start = 0x00a0c1b0, .end = 0x00a0c1b8 },
|
||||
};
|
||||
|
||||
static void iwl_read_prph_block(struct iwl_trans *trans, u32 start,
|
||||
u32 len_bytes, __le32 *data)
|
||||
{
|
||||
@@ -478,15 +565,20 @@ static void iwl_read_prph_block(struct iwl_trans *trans, u32 start,
|
||||
*data++ = cpu_to_le32(iwl_read_prph_no_grab(trans, start + i));
|
||||
}
|
||||
|
||||
static void iwl_dump_prph(struct iwl_trans *trans,
|
||||
struct iwl_fw_error_dump_data **data,
|
||||
static void iwl_dump_prph(struct iwl_fw_runtime *fwrt,
|
||||
const struct iwl_prph_range *iwl_prph_dump_addr,
|
||||
u32 range_len)
|
||||
u32 range_len, void *ptr)
|
||||
{
|
||||
struct iwl_fw_error_dump_prph *prph;
|
||||
struct iwl_trans *trans = fwrt->trans;
|
||||
struct iwl_fw_error_dump_data **data =
|
||||
(struct iwl_fw_error_dump_data **)ptr;
|
||||
unsigned long flags;
|
||||
u32 i;
|
||||
|
||||
if (!data)
|
||||
return;
|
||||
|
||||
IWL_DEBUG_INFO(trans, "WRT PRPH dump\n");
|
||||
|
||||
if (!iwl_trans_grab_nic_access(trans, &flags))
|
||||
@@ -552,37 +644,47 @@ static struct scatterlist *alloc_sgtable(int size)
|
||||
return table;
|
||||
}
|
||||
|
||||
static int iwl_fw_get_prph_len(struct iwl_fw_runtime *fwrt)
|
||||
static void iwl_fw_get_prph_len(struct iwl_fw_runtime *fwrt,
|
||||
const struct iwl_prph_range *iwl_prph_dump_addr,
|
||||
u32 range_len, void *ptr)
|
||||
{
|
||||
u32 prph_len = 0;
|
||||
int i;
|
||||
u32 *prph_len = (u32 *)ptr;
|
||||
int i, num_bytes_in_chunk;
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(iwl_prph_dump_addr_comm);
|
||||
i++) {
|
||||
if (!prph_len)
|
||||
return;
|
||||
|
||||
for (i = 0; i < range_len; i++) {
|
||||
/* The range includes both boundaries */
|
||||
int num_bytes_in_chunk =
|
||||
iwl_prph_dump_addr_comm[i].end -
|
||||
iwl_prph_dump_addr_comm[i].start + 4;
|
||||
num_bytes_in_chunk =
|
||||
iwl_prph_dump_addr[i].end -
|
||||
iwl_prph_dump_addr[i].start + 4;
|
||||
|
||||
prph_len += sizeof(struct iwl_fw_error_dump_data) +
|
||||
*prph_len += sizeof(struct iwl_fw_error_dump_data) +
|
||||
sizeof(struct iwl_fw_error_dump_prph) +
|
||||
num_bytes_in_chunk;
|
||||
}
|
||||
}
|
||||
|
||||
if (fwrt->trans->cfg->mq_rx_supported) {
|
||||
for (i = 0; i <
|
||||
ARRAY_SIZE(iwl_prph_dump_addr_9000); i++) {
|
||||
/* The range includes both boundaries */
|
||||
int num_bytes_in_chunk =
|
||||
iwl_prph_dump_addr_9000[i].end -
|
||||
iwl_prph_dump_addr_9000[i].start + 4;
|
||||
static void iwl_fw_prph_handler(struct iwl_fw_runtime *fwrt, void *ptr,
|
||||
void (*handler)(struct iwl_fw_runtime *,
|
||||
const struct iwl_prph_range *,
|
||||
u32, void *))
|
||||
{
|
||||
u32 range_len;
|
||||
|
||||
prph_len += sizeof(struct iwl_fw_error_dump_data) +
|
||||
sizeof(struct iwl_fw_error_dump_prph) +
|
||||
num_bytes_in_chunk;
|
||||
if (fwrt->trans->cfg->device_family >= IWL_DEVICE_FAMILY_22000) {
|
||||
range_len = ARRAY_SIZE(iwl_prph_dump_addr_22000);
|
||||
handler(fwrt, iwl_prph_dump_addr_22000, range_len, ptr);
|
||||
} else {
|
||||
range_len = ARRAY_SIZE(iwl_prph_dump_addr_comm);
|
||||
handler(fwrt, iwl_prph_dump_addr_comm, range_len, ptr);
|
||||
|
||||
if (fwrt->trans->cfg->mq_rx_supported) {
|
||||
range_len = ARRAY_SIZE(iwl_prph_dump_addr_9000);
|
||||
handler(fwrt, iwl_prph_dump_addr_9000, range_len, ptr);
|
||||
}
|
||||
}
|
||||
return prph_len;
|
||||
}
|
||||
|
||||
static void iwl_fw_dump_mem(struct iwl_fw_runtime *fwrt,
|
||||
@@ -646,6 +748,9 @@ static int iwl_fw_rxf_len(struct iwl_fw_runtime *fwrt,
|
||||
ADD_LEN(fifo_len, mem_cfg->rxfifo2_size, hdr_len);
|
||||
|
||||
/* Count RXF1 sizes */
|
||||
if (WARN_ON(mem_cfg->num_lmacs > MAX_NUM_LMAC))
|
||||
mem_cfg->num_lmacs = MAX_NUM_LMAC;
|
||||
|
||||
for (i = 0; i < mem_cfg->num_lmacs; i++)
|
||||
ADD_LEN(fifo_len, mem_cfg->lmac[i].rxfifo1_size, hdr_len);
|
||||
|
||||
@@ -664,6 +769,9 @@ static int iwl_fw_txf_len(struct iwl_fw_runtime *fwrt,
|
||||
goto dump_internal_txf;
|
||||
|
||||
/* Count TXF sizes */
|
||||
if (WARN_ON(mem_cfg->num_lmacs > MAX_NUM_LMAC))
|
||||
mem_cfg->num_lmacs = MAX_NUM_LMAC;
|
||||
|
||||
for (i = 0; i < mem_cfg->num_lmacs; i++) {
|
||||
int j;
|
||||
|
||||
@@ -733,6 +841,8 @@ _iwl_fw_error_dump(struct iwl_fw_runtime *fwrt,
|
||||
if (!fwrt->trans->cfg->dccm_offset || !fwrt->trans->cfg->dccm_len) {
|
||||
const struct fw_img *img;
|
||||
|
||||
if (fwrt->cur_fw_img >= IWL_UCODE_TYPE_MAX)
|
||||
return NULL;
|
||||
img = &fwrt->fw->img[fwrt->cur_fw_img];
|
||||
sram_ofs = img->sec[IWL_UCODE_SECTION_DATA].offset;
|
||||
sram_len = img->sec[IWL_UCODE_SECTION_DATA].len;
|
||||
@@ -747,9 +857,9 @@ _iwl_fw_error_dump(struct iwl_fw_runtime *fwrt,
|
||||
fifo_len += iwl_fw_txf_len(fwrt, mem_cfg);
|
||||
|
||||
/* Make room for PRPH registers */
|
||||
if (!fwrt->trans->cfg->gen2 &&
|
||||
iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_PRPH))
|
||||
prph_len += iwl_fw_get_prph_len(fwrt);
|
||||
if (iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_PRPH))
|
||||
iwl_fw_prph_handler(fwrt, &prph_len,
|
||||
iwl_fw_get_prph_len);
|
||||
|
||||
if (fwrt->trans->cfg->device_family == IWL_DEVICE_FAMILY_7000 &&
|
||||
iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_RADIO_REG))
|
||||
@@ -828,7 +938,13 @@ _iwl_fw_error_dump(struct iwl_fw_runtime *fwrt,
|
||||
sizeof(dump_info->dev_human_readable) - 1);
|
||||
strncpy(dump_info->bus_human_readable, fwrt->dev->bus->name,
|
||||
sizeof(dump_info->bus_human_readable) - 1);
|
||||
dump_info->rt_status = cpu_to_le32(fwrt->dump.rt_status);
|
||||
dump_info->num_of_lmacs = fwrt->smem_cfg.num_lmacs;
|
||||
dump_info->lmac_err_id[0] =
|
||||
cpu_to_le32(fwrt->dump.lmac_err_id[0]);
|
||||
if (fwrt->smem_cfg.num_lmacs > 1)
|
||||
dump_info->lmac_err_id[1] =
|
||||
cpu_to_le32(fwrt->dump.lmac_err_id[1]);
|
||||
dump_info->umac_err_id = cpu_to_le32(fwrt->dump.umac_err_id);
|
||||
|
||||
dump_data = iwl_fw_error_next_data(dump_data);
|
||||
}
|
||||
@@ -935,16 +1051,8 @@ _iwl_fw_error_dump(struct iwl_fw_runtime *fwrt,
|
||||
if (iwl_fw_dbg_is_paging_enabled(fwrt))
|
||||
iwl_dump_paging(fwrt, &dump_data);
|
||||
|
||||
if (prph_len) {
|
||||
iwl_dump_prph(fwrt->trans, &dump_data,
|
||||
iwl_prph_dump_addr_comm,
|
||||
ARRAY_SIZE(iwl_prph_dump_addr_comm));
|
||||
|
||||
if (fwrt->trans->cfg->mq_rx_supported)
|
||||
iwl_dump_prph(fwrt->trans, &dump_data,
|
||||
iwl_prph_dump_addr_9000,
|
||||
ARRAY_SIZE(iwl_prph_dump_addr_9000));
|
||||
}
|
||||
if (prph_len)
|
||||
iwl_fw_prph_handler(fwrt, &dump_data, iwl_dump_prph);
|
||||
|
||||
out:
|
||||
dump_file->file_len = cpu_to_le32(file_len);
|
||||
@@ -1108,13 +1216,13 @@ static void iwl_fw_ini_dump_trigger(struct iwl_fw_runtime *fwrt,
|
||||
iwl_dump_prph_ini(fwrt->trans, data, reg);
|
||||
break;
|
||||
case IWL_FW_INI_REGION_DRAM_BUFFER:
|
||||
*dump_mask |= IWL_FW_ERROR_DUMP_FW_MONITOR;
|
||||
*dump_mask |= BIT(IWL_FW_ERROR_DUMP_FW_MONITOR);
|
||||
break;
|
||||
case IWL_FW_INI_REGION_PAGING:
|
||||
if (iwl_fw_dbg_is_paging_enabled(fwrt))
|
||||
iwl_dump_paging(fwrt, data);
|
||||
else
|
||||
*dump_mask |= IWL_FW_ERROR_DUMP_PAGING;
|
||||
*dump_mask |= BIT(IWL_FW_ERROR_DUMP_PAGING);
|
||||
break;
|
||||
case IWL_FW_INI_REGION_TXF:
|
||||
iwl_fw_dump_txf(fwrt, data);
|
||||
@@ -1146,10 +1254,6 @@ _iwl_fw_error_ini_dump(struct iwl_fw_runtime *fwrt,
|
||||
|
||||
if (id == FW_DBG_TRIGGER_FW_ASSERT)
|
||||
id = IWL_FW_TRIGGER_ID_FW_ASSERT;
|
||||
else if (id == FW_DBG_TRIGGER_USER)
|
||||
id = IWL_FW_TRIGGER_ID_USER_TRIGGER;
|
||||
else if (id < FW_DBG_TRIGGER_MAX)
|
||||
return NULL;
|
||||
|
||||
if (WARN_ON(id >= ARRAY_SIZE(fwrt->dump.active_trigs)))
|
||||
return NULL;
|
||||
@@ -1385,7 +1489,7 @@ int iwl_fw_dbg_collect(struct iwl_fw_runtime *fwrt,
|
||||
if (WARN_ON(!fwrt->dump.active_trigs[id].active))
|
||||
return -EINVAL;
|
||||
|
||||
delay = le32_to_cpu(fwrt->dump.active_trigs[id].conf->ignore_consec);
|
||||
delay = le32_to_cpu(fwrt->dump.active_trigs[id].conf->dump_delay);
|
||||
occur = le32_to_cpu(fwrt->dump.active_trigs[id].conf->occurrences);
|
||||
if (!occur)
|
||||
return 0;
|
||||
@@ -1570,27 +1674,29 @@ iwl_fw_dbg_buffer_allocation(struct iwl_fw_runtime *fwrt,
|
||||
struct iwl_fw_ini_allocation_tlv *alloc)
|
||||
{
|
||||
struct iwl_trans *trans = fwrt->trans;
|
||||
struct iwl_continuous_record_cmd cont_rec = {};
|
||||
struct iwl_buffer_allocation_cmd *cmd = (void *)&cont_rec.pad[0];
|
||||
struct iwl_ldbg_config_cmd ldbg_cmd = {
|
||||
.type = cpu_to_le32(BUFFER_ALLOCATION),
|
||||
};
|
||||
struct iwl_buffer_allocation_cmd *cmd = &ldbg_cmd.buffer_allocation;
|
||||
struct iwl_host_cmd hcmd = {
|
||||
.id = LDBG_CONFIG_CMD,
|
||||
.flags = CMD_ASYNC,
|
||||
.data[0] = &cont_rec,
|
||||
.len[0] = sizeof(cont_rec),
|
||||
.data[0] = &ldbg_cmd,
|
||||
.len[0] = sizeof(ldbg_cmd),
|
||||
};
|
||||
void *virtual_addr = NULL;
|
||||
u32 size = le32_to_cpu(alloc->size);
|
||||
dma_addr_t phys_addr;
|
||||
|
||||
cont_rec.record_mode.enable_recording = cpu_to_le16(BUFFER_ALLOCATION);
|
||||
|
||||
if (!trans->num_blocks &&
|
||||
le32_to_cpu(alloc->buffer_location) !=
|
||||
IWL_FW_INI_LOCATION_DRAM_PATH)
|
||||
return;
|
||||
|
||||
virtual_addr = dma_alloc_coherent(fwrt->trans->dev, size,
|
||||
&phys_addr, GFP_KERNEL);
|
||||
virtual_addr =
|
||||
dma_alloc_coherent(fwrt->trans->dev, size, &phys_addr,
|
||||
GFP_KERNEL | __GFP_NOWARN | __GFP_ZERO |
|
||||
__GFP_COMP);
|
||||
|
||||
/* TODO: alloc fragments if needed */
|
||||
if (!virtual_addr)
|
||||
|
@@ -102,7 +102,10 @@ static inline void iwl_fw_free_dump_desc(struct iwl_fw_runtime *fwrt)
|
||||
if (fwrt->dump.desc != &iwl_dump_desc_assert)
|
||||
kfree(fwrt->dump.desc);
|
||||
fwrt->dump.desc = NULL;
|
||||
fwrt->dump.rt_status = 0;
|
||||
fwrt->dump.lmac_err_id[0] = 0;
|
||||
if (fwrt->smem_cfg.num_lmacs > 1)
|
||||
fwrt->dump.lmac_err_id[1] = 0;
|
||||
fwrt->dump.umac_err_id = 0;
|
||||
}
|
||||
|
||||
void iwl_fw_error_dump(struct iwl_fw_runtime *fwrt);
|
||||
@@ -266,20 +269,20 @@ _iwl_fw_dbg_trigger_simple_stop(struct iwl_fw_runtime *fwrt,
|
||||
iwl_fw_dbg_get_trigger((fwrt)->fw,\
|
||||
(trig)))
|
||||
|
||||
static int iwl_fw_dbg_start_stop_hcmd(struct iwl_fw_runtime *fwrt, bool start)
|
||||
static inline int
|
||||
iwl_fw_dbg_start_stop_hcmd(struct iwl_fw_runtime *fwrt, bool start)
|
||||
{
|
||||
struct iwl_continuous_record_cmd cont_rec = {};
|
||||
struct iwl_ldbg_config_cmd cmd = {
|
||||
.type = start ? cpu_to_le32(START_DEBUG_RECORDING) :
|
||||
cpu_to_le32(STOP_DEBUG_RECORDING),
|
||||
};
|
||||
struct iwl_host_cmd hcmd = {
|
||||
.id = LDBG_CONFIG_CMD,
|
||||
.flags = CMD_ASYNC,
|
||||
.data[0] = &cont_rec,
|
||||
.len[0] = sizeof(cont_rec),
|
||||
.data[0] = &cmd,
|
||||
.len[0] = sizeof(cmd),
|
||||
};
|
||||
|
||||
cont_rec.record_mode.enable_recording = start ?
|
||||
cpu_to_le16(START_DEBUG_RECORDING) :
|
||||
cpu_to_le16(STOP_DEBUG_RECORDING);
|
||||
|
||||
return iwl_trans_send_cmd(fwrt->trans, &hcmd);
|
||||
}
|
||||
|
||||
@@ -378,6 +381,7 @@ static inline bool iwl_fw_dbg_is_paging_enabled(struct iwl_fw_runtime *fwrt)
|
||||
{
|
||||
return iwl_fw_dbg_type_on(fwrt, IWL_FW_ERROR_DUMP_PAGING) &&
|
||||
!fwrt->trans->cfg->gen2 &&
|
||||
fwrt->cur_fw_img < IWL_UCODE_TYPE_MAX &&
|
||||
fwrt->fw->img[fwrt->cur_fw_img].paging_mem_size &&
|
||||
fwrt->fw_paging_db[0].fw_paging_block;
|
||||
}
|
||||
|
@@ -180,6 +180,8 @@ enum iwl_fw_error_dump_family {
|
||||
IWL_FW_ERROR_DUMP_FAMILY_8 = 8,
|
||||
};
|
||||
|
||||
#define MAX_NUM_LMAC 2
|
||||
|
||||
/**
|
||||
* struct iwl_fw_error_dump_info - info on the device / firmware
|
||||
* @device_family: the family of the device (7 / 8)
|
||||
@@ -187,7 +189,10 @@ enum iwl_fw_error_dump_family {
|
||||
* @fw_human_readable: human readable FW version
|
||||
* @dev_human_readable: name of the device
|
||||
* @bus_human_readable: name of the bus used
|
||||
* @rt_status: the error_id/rt_status that that triggered the latest dump
|
||||
* @num_of_lmacs: the number of lmacs
|
||||
* @lmac_err_id: the lmac 0/1 error_id/rt_status that triggered the latest dump
|
||||
* if the dump collection was not initiated by an assert, the value is 0
|
||||
* @umac_err_id: the umac error_id/rt_status that triggered the latest dump
|
||||
* if the dump collection was not initiated by an assert, the value is 0
|
||||
*/
|
||||
struct iwl_fw_error_dump_info {
|
||||
@@ -196,7 +201,9 @@ struct iwl_fw_error_dump_info {
|
||||
u8 fw_human_readable[FW_VER_HUMAN_READABLE_SZ];
|
||||
u8 dev_human_readable[64];
|
||||
u8 bus_human_readable[8];
|
||||
__le32 rt_status;
|
||||
u8 num_of_lmacs;
|
||||
__le32 umac_err_id;
|
||||
__le32 lmac_err_id[MAX_NUM_LMAC];
|
||||
} __packed;
|
||||
|
||||
/**
|
||||
|
@@ -303,7 +303,6 @@ typedef unsigned int __bitwise iwl_ucode_tlv_capa_t;
|
||||
* @IWL_UCODE_TLV_CAPA_LAR_SUPPORT: supports Location Aware Regulatory
|
||||
* @IWL_UCODE_TLV_CAPA_UMAC_SCAN: supports UMAC scan.
|
||||
* @IWL_UCODE_TLV_CAPA_BEAMFORMER: supports Beamformer
|
||||
* @IWL_UCODE_TLV_CAPA_TOF_SUPPORT: supports Time of Flight (802.11mc FTM)
|
||||
* @IWL_UCODE_TLV_CAPA_TDLS_SUPPORT: support basic TDLS functionality
|
||||
* @IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT: supports insertion of current
|
||||
* tx power value into TPC Report action frame and Link Measurement Report
|
||||
@@ -334,6 +333,8 @@ typedef unsigned int __bitwise iwl_ucode_tlv_capa_t;
|
||||
* @IWL_UCODE_TLV_CAPA_TLC_OFFLOAD: firmware implements rate scaling algorithm
|
||||
* @IWL_UCODE_TLV_CAPA_DYNAMIC_QUOTA: firmware implements quota related
|
||||
* @IWL_UCODE_TLV_CAPA_COEX_SCHEMA_2: firmware implements Coex Schema 2
|
||||
* @IWL_UCODE_TLV_CAPA_ULTRA_HB_CHANNELS: firmware supports ultra high band
|
||||
* (6 GHz).
|
||||
* @IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE: extended DTS measurement
|
||||
* @IWL_UCODE_TLV_CAPA_SHORT_PM_TIMEOUTS: supports short PM timeouts
|
||||
* @IWL_UCODE_TLV_CAPA_BT_MPLUT_SUPPORT: supports bt-coex Multi-priority LUT
|
||||
@@ -357,10 +358,13 @@ typedef unsigned int __bitwise iwl_ucode_tlv_capa_t;
|
||||
* @IWL_UCODE_TLV_CAPA_TX_POWER_ACK: reduced TX power API has larger
|
||||
* command size (command version 4) that supports toggling ACK TX
|
||||
* power reduction.
|
||||
* @IWL_UCODE_TLV_CAPA_MLME_OFFLOAD: supports MLME offload
|
||||
* @IWL_UCODE_TLV_CAPA_D3_DEBUG: supports debug recording during D3
|
||||
* @IWL_UCODE_TLV_CAPA_MCC_UPDATE_11AX_SUPPORT: MCC response support 11ax
|
||||
* capability.
|
||||
* @IWL_UCODE_TLV_CAPA_CSI_REPORTING: firmware is capable of being configured
|
||||
* to report the CSI information with (certain) RX frames
|
||||
*
|
||||
* @IWL_UCODE_TLV_CAPA_MLME_OFFLOAD: supports MLME offload
|
||||
*
|
||||
* @NUM_IWL_UCODE_TLV_CAPA: number of bits used
|
||||
*/
|
||||
@@ -369,7 +373,6 @@ enum iwl_ucode_tlv_capa {
|
||||
IWL_UCODE_TLV_CAPA_LAR_SUPPORT = (__force iwl_ucode_tlv_capa_t)1,
|
||||
IWL_UCODE_TLV_CAPA_UMAC_SCAN = (__force iwl_ucode_tlv_capa_t)2,
|
||||
IWL_UCODE_TLV_CAPA_BEAMFORMER = (__force iwl_ucode_tlv_capa_t)3,
|
||||
IWL_UCODE_TLV_CAPA_TOF_SUPPORT = (__force iwl_ucode_tlv_capa_t)5,
|
||||
IWL_UCODE_TLV_CAPA_TDLS_SUPPORT = (__force iwl_ucode_tlv_capa_t)6,
|
||||
IWL_UCODE_TLV_CAPA_TXPOWER_INSERTION_SUPPORT = (__force iwl_ucode_tlv_capa_t)8,
|
||||
IWL_UCODE_TLV_CAPA_DS_PARAM_SET_IE_SUPPORT = (__force iwl_ucode_tlv_capa_t)9,
|
||||
@@ -394,6 +397,7 @@ enum iwl_ucode_tlv_capa {
|
||||
IWL_UCODE_TLV_CAPA_TLC_OFFLOAD = (__force iwl_ucode_tlv_capa_t)43,
|
||||
IWL_UCODE_TLV_CAPA_DYNAMIC_QUOTA = (__force iwl_ucode_tlv_capa_t)44,
|
||||
IWL_UCODE_TLV_CAPA_COEX_SCHEMA_2 = (__force iwl_ucode_tlv_capa_t)45,
|
||||
IWL_UCODE_TLV_CAPA_ULTRA_HB_CHANNELS = (__force iwl_ucode_tlv_capa_t)48,
|
||||
IWL_UCODE_TLV_CAPA_EXTENDED_DTS_MEASURE = (__force iwl_ucode_tlv_capa_t)64,
|
||||
IWL_UCODE_TLV_CAPA_SHORT_PM_TIMEOUTS = (__force iwl_ucode_tlv_capa_t)65,
|
||||
IWL_UCODE_TLV_CAPA_BT_MPLUT_SUPPORT = (__force iwl_ucode_tlv_capa_t)67,
|
||||
@@ -412,6 +416,8 @@ enum iwl_ucode_tlv_capa {
|
||||
IWL_UCODE_TLV_CAPA_D3_DEBUG = (__force iwl_ucode_tlv_capa_t)87,
|
||||
IWL_UCODE_TLV_CAPA_LED_CMD_SUPPORT = (__force iwl_ucode_tlv_capa_t)88,
|
||||
IWL_UCODE_TLV_CAPA_MCC_UPDATE_11AX_SUPPORT = (__force iwl_ucode_tlv_capa_t)89,
|
||||
IWL_UCODE_TLV_CAPA_CSI_REPORTING = (__force iwl_ucode_tlv_capa_t)90,
|
||||
|
||||
IWL_UCODE_TLV_CAPA_MLME_OFFLOAD = (__force iwl_ucode_tlv_capa_t)96,
|
||||
|
||||
NUM_IWL_UCODE_TLV_CAPA
|
||||
|
@@ -142,7 +142,8 @@ struct iwl_fw_runtime {
|
||||
u32 *d3_debug_data;
|
||||
struct iwl_fw_ini_active_regs active_regs[IWL_FW_INI_MAX_REGION_ID];
|
||||
struct iwl_fw_ini_active_triggers active_trigs[IWL_FW_TRIGGER_ID_NUM];
|
||||
u32 rt_status;
|
||||
u32 lmac_err_id[MAX_NUM_LMAC];
|
||||
u32 umac_err_id;
|
||||
} dump;
|
||||
#ifdef CONFIG_IWLWIFI_DEBUGFS
|
||||
struct {
|
||||
|
Reference in New Issue
Block a user