diff options
| author | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
|---|---|---|
| committer | Dmitry Torokhov <[email protected]> | 2023-08-30 16:06:38 -0700 | 
| commit | 1ac731c529cd4d6adbce134754b51ff7d822b145 (patch) | |
| tree | 143ab3f35ca5f3b69f583c84e6964b17139c2ec1 /drivers/net/wireless/intel/iwlwifi/fw/api | |
| parent | 07b4c950f27bef0362dc6ad7ee713aab61d58149 (diff) | |
| parent | 54116d442e001e1b6bd482122043b1870998a1f3 (diff) | |
Merge branch 'next' into for-linus
Prepare input updates for 6.6 merge window.
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/fw/api')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/commands.h | 18 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/d3.h | 37 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/datapath.h | 184 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/debug.h | 96 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h | 418 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/rs.h | 27 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/rx.h | 86 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/scan.h | 3 | ||||
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/fw/api/tx.h | 10 | 
9 files changed, 836 insertions, 43 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h b/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h index 28c87a480246..111d96cbde6f 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/commands.h @@ -266,6 +266,24 @@ enum iwl_legacy_cmds {  	HOT_SPOT_CMD = 0x53,  	/** +	 * @WNM_80211V_TIMING_MEASUREMENT_NOTIFICATION: Time Sync +	 *	measurement notification for TM/FTM. Sent on receipt of +	 *	respective WNM action frame for TM protocol or public action +	 *	frame for FTM protocol from peer device along with additional +	 *	meta data specified in &struct iwl_time_msmt_notify +	 */ +	WNM_80211V_TIMING_MEASUREMENT_NOTIFICATION = 0x67, + +	/** +	 * @WNM_80211V_TIMING_MEASUREMENT_CONFIRM_NOTIFICATION: Time Sync +	 *	measurement confirmation notification for TM/FTM. Sent on +	 *	receipt of Ack from peer for previously Tx'ed TM/FTM +	 *	action frame along with additional meta data specified in +	 *	&struct iwl_time_msmt_cfm_notify +	 */ +	WNM_80211V_TIMING_MEASUREMENT_CONFIRM_NOTIFICATION = 0x68, + +	/**  	 * @SCAN_OFFLOAD_COMPLETE:  	 * notification, &struct iwl_periodic_scan_complete  	 */ diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h b/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h index df0833890e55..8a613e150a02 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/d3.h @@ -767,7 +767,7 @@ struct iwl_wowlan_status_v12 {  } __packed; /* WOWLAN_STATUSES_RSP_API_S_VER_12 */  /** - * struct iwl_wowlan_info_notif - WoWLAN information notification + * struct iwl_wowlan_info_notif_v1 - WoWLAN information notification   * @gtk: GTK data   * @igtk: IGTK data   * @replay_ctr: GTK rekey replay counter @@ -785,7 +785,7 @@ struct iwl_wowlan_status_v12 {   * @station_id: station id   * @reserved2: reserved   */ -struct iwl_wowlan_info_notif { +struct iwl_wowlan_info_notif_v1 {  	struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM];  	struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM];  	__le64 replay_ctr; @@ -804,6 +804,39 @@ struct iwl_wowlan_info_notif {  } __packed; /* WOWLAN_INFO_NTFY_API_S_VER_1 */  /** + * struct iwl_wowlan_info_notif - WoWLAN information notification + * @gtk: GTK data + * @igtk: IGTK data + * @replay_ctr: GTK rekey replay counter + * @pattern_number: number of the matched patterns + * @reserved1: reserved + * @qos_seq_ctr: QoS sequence counters to use next + * @wakeup_reasons: wakeup reasons, see &enum iwl_wowlan_wakeup_reason + * @num_of_gtk_rekeys: number of GTK rekeys + * @transmitted_ndps: number of transmitted neighbor discovery packets + * @received_beacons: number of received beacons + * @tid_tear_down: bit mask of tids whose BA sessions were closed + *	in suspend state + * @station_id: station id + * @reserved2: reserved + */ +struct iwl_wowlan_info_notif { +	struct iwl_wowlan_gtk_status_v3 gtk[WOWLAN_GTK_KEYS_NUM]; +	struct iwl_wowlan_igtk_status igtk[WOWLAN_IGTK_KEYS_NUM]; +	__le64 replay_ctr; +	__le16 pattern_number; +	__le16 reserved1; +	__le16 qos_seq_ctr[8]; +	__le32 wakeup_reasons; +	__le32 num_of_gtk_rekeys; +	__le32 transmitted_ndps; +	__le32 received_beacons; +	u8 tid_tear_down; +	u8 station_id; +	u8 reserved2[2]; +} __packed; /* WOWLAN_INFO_NTFY_API_S_VER_2 */ + +/**   * struct iwl_wowlan_wake_pkt_notif - WoWLAN wake packet notification   * @wake_packet_length: wakeup packet length   * @station_id: station id diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/datapath.h b/drivers/net/wireless/intel/iwlwifi/fw/api/datapath.h index 8b38a0073077..6f59381b9f9a 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/datapath.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/datapath.h @@ -1,6 +1,6 @@  /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */  /* - * Copyright (C) 2012-2014, 2018-2020 Intel Corporation + * Copyright (C) 2012-2014, 2018-2022 Intel Corporation   * Copyright (C) 2013-2015 Intel Mobile Communications GmbH   * Copyright (C) 2016-2017 Intel Deutschland GmbH   */ @@ -27,6 +27,17 @@ enum iwl_data_path_subcmd_ids {  	TRIGGER_RX_QUEUES_NOTIF_CMD = 0x2,  	/** +	 * @WNM_PLATFORM_PTM_REQUEST_CMD: &struct iwl_time_sync_cfg_cmd +	 */ +	WNM_PLATFORM_PTM_REQUEST_CMD = 0x3, + +	/** +	 * @WNM_80211V_TIMING_MEASUREMENT_CONFIG_CMD: +	 *	&struct iwl_time_sync_cfg_cmd +	 */ +	WNM_80211V_TIMING_MEASUREMENT_CONFIG_CMD = 0x4, + +	/**  	 * @STA_HE_CTXT_CMD: &struct iwl_he_sta_context_cmd  	 */  	STA_HE_CTXT_CMD = 0x7, @@ -146,6 +157,177 @@ enum iwl_channel_estimation_flags {  	IWL_CHANNEL_ESTIMATION_COUNTER	= BIT(2),  }; +enum iwl_time_sync_protocol_type { +	IWL_TIME_SYNC_PROTOCOL_TM	= BIT(0), +	IWL_TIME_SYNC_PROTOCOL_FTM	= BIT(1), +}; /* WNM_TIMING_ENABLED_PROTOCOL_API_E_VER_1 */ + +/** + * struct iwl_time_sync_cfg_cmd - TM/FTM time sync measurement configuration + * + * @protocols: The type of frames to raise notifications for. A bitmap + *	of @iwl_time_sync_protocol_type + * @peer_addr: peer address with which TM/FTM measurements are required + * @reserved: for alignment + */ +struct iwl_time_sync_cfg_cmd { +	__le32 protocols; +	u8 peer_addr[ETH_ALEN]; +	u8 reserved[2]; +} __packed; /* WNM_80211V_TIMING_MEASUREMENT_CONFIG_CMD_API_S_VER_1 */ + +/** + * enum iwl_synced_time_operation - PTM request options + * + * @IWL_SYNCED_TIME_OPERATION_READ_ARTB: read only the ARTB time + * @IWL_SYNCED_TIME_OPERATION_READ_GP2: read only the GP2 time + * @IWL_SYNCED_TIME_OPERATION_READ_BOTH: latch the ARTB and GP2 clocks and + *	provide timestamps from both clocks for the same time point + */ +enum iwl_synced_time_operation { +	IWL_SYNCED_TIME_OPERATION_READ_ARTB = 1, +	IWL_SYNCED_TIME_OPERATION_READ_GP2, +	IWL_SYNCED_TIME_OPERATION_READ_BOTH, +}; + +/** + * struct iwl_synced_time_cmd - request synced GP2/ARTB timestamps + * + * @operation: one of &enum iwl_synced_time_operation + */ +struct iwl_synced_time_cmd { +	__le32 operation; +} __packed; /* WNM_80211V_TIMING_CMD_API_S_VER_1 */ + +/** + * struct iwl_synced_time_rsp - response to iwl_synced_time_cmd + * + * @operation: one of &enum iwl_synced_time_operation + * @platform_timestamp_hi: high DWORD of the ARTB clock timestamp in nanoseconds + * @platform_timestamp_lo: low DWORD of the ARTB clock timestamp in nanoseconds + * @gp2_timestamp_hi: high DWORD of the GP2 clock timestamp in 10's of + *	nanoseconds + * @gp2_timestamp_lo: low DWORD of the GP2 clock timestamp in 10's of + *	nanoseconds + */ +struct iwl_synced_time_rsp { +	__le32 operation; +	__le32 platform_timestamp_hi; +	__le32 platform_timestamp_lo; +	__le32 gp2_timestamp_hi; +	__le32 gp2_timestamp_lo; +} __packed; /* WNM_80211V_TIMING_RSP_API_S_VER_1 */ + +/* PTP_CTX_MAX_DATA_SIZE_IN_API_D_VER_1 */ +#define PTP_CTX_MAX_DATA_SIZE   128 + +/** + * struct iwl_time_msmt_ptp_ctx - Vendor specific information element + * to allow a space for flexibility for the userspace App + * + * @element_id: element id of vendor specific ie + * @length: length of vendor specific ie + * @reserved: for alignment + * @data: vendor specific data blob + */ +struct iwl_time_msmt_ptp_ctx { +	/* Differentiate between FTM and TM specific Vendor IEs */ +	union { +		struct { +			u8 element_id; +			u8 length; +			__le16 reserved; +			u8 data[PTP_CTX_MAX_DATA_SIZE]; +		} ftm; /* FTM specific vendor IE */ +		struct { +			u8 element_id; +			u8 length; +			u8 data[PTP_CTX_MAX_DATA_SIZE]; +		} tm; /* TM specific vendor IE */ +	}; +} __packed /* PTP_CTX_VER_1 */; + +/** + * struct iwl_time_msmt_notify - Time Sync measurement notification + * for TM/FTM, along with additional meta data. + * + * @peer_addr: peer address + * @reserved: for alignment + * @dialog_token: measurement flow dialog token number + * @followup_dialog_token: Measurement flow previous dialog token number + * @t1_hi: high dword of t1-time of the Tx'ed action frame departure on + *	sender side in units of 10 nano seconds + * @t1_lo: low dword of t1-time of the Tx'ed action frame departure on + *	sender side in units of 10 nano seconds + * @t1_max_err: maximum t1-time error in units of 10 nano seconds + * @t4_hi: high dword of t4-time of the Rx'ed action frame's Ack arrival on + *	sender side in units of 10 nano seconds + * @t4_lo: low dword of t4-time of the Rx'ed action frame's Ack arrival on + *	sender side in units of 10 nano seconds + * @t4_max_err: maximum t4-time error in units of 10 nano seconds + * @t2_hi: high dword of t2-time of the Rx'ed action frame arrival on + *	receiver side in units of 10 nano seconds + * @t2_lo: low dword of t2-time of the Rx'ed action frame arrival on + *	receiver side in units of 10 nano seconds + * @t2_max_err: maximum t2-time error in units of 10 nano seconds + * @t3_hi: high dword of t3-time of the Tx'ed action frame's Ack departure on + *	receiver side in units of 10 nano seconds + * @t3_lo: low dword of t3-time of the Tx'ed action frame's Ack departure on + *	receiver side in units of 10 nano seconds + * @t3_max_err: maximum t3-time error in units of 10 nano seconds + * @ptp: vendor specific information element + */ +struct iwl_time_msmt_notify { +	u8 peer_addr[ETH_ALEN]; +	u8 reserved[2]; +	__le32 dialog_token; +	__le32 followup_dialog_token; +	__le32 t1_hi; +	__le32 t1_lo; +	__le32 t1_max_err; +	__le32 t4_hi; +	__le32 t4_lo; +	__le32 t4_max_err; +	__le32 t2_hi; +	__le32 t2_lo; +	__le32 t2_max_err; +	__le32 t3_hi; +	__le32 t3_lo; +	__le32 t3_max_err; +	struct iwl_time_msmt_ptp_ctx ptp; +} __packed; /* WNM_80211V_TIMING_MEASUREMENT_NTFY_API_S_VER_1 */ + +/** + * struct iwl_time_msmt_cfm_notify - Time Sync measurement confirmation + * notification for TM/FTM. Sent on receipt of 802.11 Ack from peer for the + * Tx'ed TM/FTM measurement action frame. + * + * @peer_addr: peer address + * @reserved: for alignment + * @dialog_token: measurement flow dialog token number + * @t1_hi: high dword of t1-time of the Tx'ed action frame departure on + *	sender side in units of 10 nano seconds + * @t1_lo: low dword of t1-time of the Tx'ed action frame departure on + *	sender side in units of 10 nano seconds + * @t1_max_err: maximum t1-time error in units of 10 nano seconds + * @t4_hi: high dword of t4-time of the Rx'ed action frame's Ack arrival on + *	sender side in units of 10 nano seconds + * @t4_lo: low dword of t4-time of the Rx'ed action frame's Ack arrival on + *	sender side in units of 10 nano seconds + * @t4_max_err: maximum t4-time error in units of 10 nano seconds + */ +struct iwl_time_msmt_cfm_notify { +	u8 peer_addr[ETH_ALEN]; +	u8 reserved[2]; +	__le32 dialog_token; +	__le32 t1_hi; +	__le32 t1_lo; +	__le32 t1_max_err; +	__le32 t4_hi; +	__le32 t4_lo; +	__le32 t4_max_err; +} __packed; /* WNM_80211V_TIMING_MEASUREMENT_CONFIRM_NTFY_API_S_VER_1 */ +  /**   * struct iwl_channel_estimation_cfg - channel estimation reporting config   */ diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/debug.h b/drivers/net/wireless/intel/iwlwifi/fw/api/debug.h index 0c555089e05f..8fef38139bf6 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/debug.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/debug.h @@ -43,6 +43,12 @@ enum iwl_debug_cmds {  	 */  	BUFFER_ALLOCATION = 0x8,  	/** +	 * @GET_TAS_STATUS: +	 * sends command to fw to get TAS status +	 * the response is &struct iwl_mvm_tas_status_resp +	 */ +	GET_TAS_STATUS = 0xA, +	/**  	 * @FW_DUMP_COMPLETE_CMD:  	 * sends command to fw once dump collection completed  	 * &struct iwl_dbg_dump_complete_cmd @@ -421,4 +427,94 @@ struct iwl_dbg_dump_complete_cmd {  	__le32 tp_data;  } __packed; /* FW_DUMP_COMPLETE_CMD_API_S_VER_1 */ +#define TAS_LMAC_BAND_HB       0 +#define TAS_LMAC_BAND_LB       1 +#define TAS_LMAC_BAND_UHB      2 +#define TAS_LMAC_BAND_INVALID  3 + +/** + * struct iwl_mvm_tas_status_per_mac - tas status per lmac + * @static_status: tas statically enabled or disabled per lmac - TRUE/FALSE + * @static_dis_reason: TAS static disable reason, uses + *	&enum iwl_mvm_tas_statically_disabled_reason + * @dynamic_status: Current TAS  status. uses + *	&enum iwl_mvm_tas_dyna_status + * @near_disconnection: is TAS currently near disconnection per lmac? - TRUE/FALSE + * @max_reg_pwr_limit: Regulatory power limits in dBm + * @sar_limit: SAR limits per lmac in dBm + * @band: Band per lmac + * @reserved: reserved + */ +struct iwl_mvm_tas_status_per_mac { +	u8 static_status; +	u8 static_dis_reason; +	u8 dynamic_status; +	u8 near_disconnection; +	__le16 max_reg_pwr_limit; +	__le16 sar_limit; +	u8 band; +	u8 reserved[3]; +} __packed; /*DEBUG_GET_TAS_STATUS_PER_MAC_S_VER_1*/ + +/** + * struct iwl_mvm_tas_status_resp - Response to GET_TAS_STATUS + * @tas_fw_version: TAS FW version + * @is_uhb_for_usa_enable: is UHB enabled in USA? - TRUE/FALSE + * @curr_mcc: current mcc + * @block_list: country block list + * @tas_status_mac: TAS status per lmac, uses + *	&struct iwl_mvm_tas_status_per_mac + * @in_dual_radio: is TAS in dual radio? - TRUE/FALSE + * @reserved: reserved + */ +struct iwl_mvm_tas_status_resp { +	u8 tas_fw_version; +	u8 is_uhb_for_usa_enable; +	__le16 curr_mcc; +	__le16 block_list[16]; +	struct iwl_mvm_tas_status_per_mac tas_status_mac[2]; +	u8 in_dual_radio; +	u8 reserved[3]; +} __packed; /*DEBUG_GET_TAS_STATUS_RSP_API_S_VER_3*/ + +/** + * enum iwl_mvm_tas_dyna_status - TAS current running status + * @TAS_DYNA_INACTIVE: TAS status is inactive + * @TAS_DYNA_INACTIVE_MVM_MODE: TAS is disabled due because FW is in MVM mode + *	or is in softap mode. + * @TAS_DYNA_INACTIVE_TRIGGER_MODE: TAS is disabled because FW is in + *	multi user trigger mode + * @TAS_DYNA_INACTIVE_BLOCK_LISTED: TAS is disabled because  current mcc + *	is blocklisted mcc + * @TAS_DYNA_INACTIVE_UHB_NON_US: TAS is disabled because current band is UHB + *	and current mcc is USA + * @TAS_DYNA_ACTIVE: TAS is currently active + * @TAS_DYNA_STATUS_MAX: TAS status max value + */ +enum iwl_mvm_tas_dyna_status { +	TAS_DYNA_INACTIVE, +	TAS_DYNA_INACTIVE_MVM_MODE, +	TAS_DYNA_INACTIVE_TRIGGER_MODE, +	TAS_DYNA_INACTIVE_BLOCK_LISTED, +	TAS_DYNA_INACTIVE_UHB_NON_US, +	TAS_DYNA_ACTIVE, + +	TAS_DYNA_STATUS_MAX, +}; /*_TAS_DYNA_STATUS_E*/ + +/** + * enum iwl_mvm_tas_statically_disabled_reason - TAS statically disabled reason + * @TAS_DISABLED_DUE_TO_BIOS: TAS is disabled because TAS is disabled in BIOS + * @TAS_DISABLED_DUE_TO_SAR_6DBM: TAS is disabled because SAR limit is less than 6 Dbm + * @TAS_DISABLED_REASON_INVALID: TAS disable reason is invalid + * @TAS_DISABLED_REASON_MAX: TAS disable reason max value + */ +enum iwl_mvm_tas_statically_disabled_reason { +	TAS_DISABLED_DUE_TO_BIOS, +	TAS_DISABLED_DUE_TO_SAR_6DBM, +	TAS_DISABLED_REASON_INVALID, + +	TAS_DISABLED_REASON_MAX, +}; /*_TAS_STATICALLY_DISABLED_REASON_E*/ +  #endif /* __iwl_fw_api_debug_h__ */ diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h b/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h index 712532f17630..74f2efbad34e 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h @@ -1,12 +1,14 @@  /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */  /* - * Copyright (C) 2012-2014, 2018-2019, 2021 Intel Corporation + * Copyright (C) 2012-2014, 2018-2019, 2021-2022 Intel Corporation   * Copyright (C) 2013-2015 Intel Mobile Communications GmbH   * Copyright (C) 2016-2017 Intel Deutschland GmbH   */  #ifndef __iwl_fw_api_mac_cfg_h__  #define __iwl_fw_api_mac_cfg_h__ +#include "mac.h" +  /**   * enum iwl_mac_conf_subcmd_ids - mac configuration command IDs   */ @@ -31,7 +33,30 @@ enum iwl_mac_conf_subcmd_ids {  	 * @CANCEL_CHANNEL_SWITCH_CMD: &struct iwl_cancel_channel_switch_cmd  	 */  	CANCEL_CHANNEL_SWITCH_CMD = 0x6, - +	/** +	 * @MAC_CONFIG_CMD: &struct iwl_mac_config_cmd +	 */ +	MAC_CONFIG_CMD = 0x8, +	/** +	 * @LINK_CONFIG_CMD: &struct iwl_link_config_cmd +	 */ +	LINK_CONFIG_CMD = 0x9, +	/** +	 * @STA_CONFIG_CMD: &struct iwl_mvm_sta_cfg_cmd +	 */ +	STA_CONFIG_CMD = 0xA, +	/** +	 * @AUX_STA_CMD: &struct iwl_mvm_aux_sta_cmd +	 */ +	AUX_STA_CMD = 0xB, +	/** +	 * @STA_REMOVE_CMD: &struct iwl_mvm_remove_sta_cmd +	 */ +	STA_REMOVE_CMD = 0xC, +	/** +	 * @STA_DISABLE_TX_CMD: &struct iwl_mvm_sta_disable_tx_cmd +	 */ +	STA_DISABLE_TX_CMD = 0xD,  	/**  	 * @SESSION_PROTECTION_NOTIF: &struct iwl_mvm_session_prot_notif  	 */ @@ -182,4 +207,393 @@ struct iwl_mac_low_latency_cmd {  	__le16 reserved;  } __packed; /* MAC_LOW_LATENCY_API_S_VER_1 */ +/** + * struct iwl_mac_client_data - configuration data for client MAC context + * + * @is_assoc: 1 for associated state, 0 otherwise + * @assoc_id: unique ID assigned by the AP during association + * @data_policy: see &enum iwl_mac_data_policy + * @ctwin: client traffic window in TU (period after TBTT when GO is present). + *	0 indicates that there is no CT window. + */ +struct iwl_mac_client_data { +	__le32 is_assoc; +	__le32 assoc_id; +	__le32 data_policy; +	__le32 ctwin; +} __packed; /* MAC_CONTEXT_CONFIG_CLIENT_DATA_API_S_VER_1 */ + +/** + * struct iwl_mac_p2p_dev_data  - configuration data for P2P device MAC context + * + * @is_disc_extended: if set to true, P2P Device discoverability is enabled on + *	other channels as well. This should be to true only in case that the + *	device is discoverable and there is an active GO. Note that setting this + *	field when not needed, will increase the number of interrupts and have + *	effect on the platform power, as this setting opens the Rx filters on + *	all macs. + */ +struct iwl_mac_p2p_dev_data { +	__le32 is_disc_extended; +} __packed; /* MAC_CONTEXT_CONFIG_P2P_DEV_DATA_API_S_VER_1 */ + +/** + * enum iwl_mac_config_filter_flags - MAC context configuration filter flags + * + * @MAC_CFG_FILTER_PROMISC: accept all data frames + * @MAC_CFG_FILTER_ACCEPT_CONTROL_AND_MGMT: pass all management and + *	control frames to the host + * @MAC_CFG_FILTER_ACCEPT_GRP: accept multicast frames + * @MAC_CFG_FILTER_ACCEPT_BEACON: accept beacon frames + * @MAC_CFG_FILTER_ACCEPT_BCAST_PROBE_RESP: accept broadcast probe response + * @MAC_CFG_FILTER_ACCEPT_PROBE_REQ: accept probe requests + */ +enum iwl_mac_config_filter_flags { +	MAC_CFG_FILTER_PROMISC			= BIT(0), +	MAC_CFG_FILTER_ACCEPT_CONTROL_AND_MGMT	= BIT(1), +	MAC_CFG_FILTER_ACCEPT_GRP		= BIT(2), +	MAC_CFG_FILTER_ACCEPT_BEACON		= BIT(3), +	MAC_CFG_FILTER_ACCEPT_BCAST_PROBE_RESP	= BIT(4), +	MAC_CFG_FILTER_ACCEPT_PROBE_REQ		= BIT(5), +}; /* MAC_FILTER_FLAGS_MASK_E_VER_1 */ + +/** + * struct iwl_mac_config_cmd - command structure to configure MAC contexts in + *	MLD API + * ( MAC_CONTEXT_CONFIG_CMD = 0x8 ) + * + * @id_and_color: ID and color of the MAC + * @action: action to perform, one of FW_CTXT_ACTION_* + * @mac_type: one of &enum iwl_mac_types + * @local_mld_addr: mld address + * @reserved_for_local_mld_addr: reserved + * @filter_flags: combination of &enum iwl_mac_config_filter_flags + * @he_support: does this MAC support HE + * @he_ap_support: HE AP enabled, "pseudo HE", no trigger frame handling + * @eht_support: does this MAC support EHT. Requires he_support + * @nic_not_ack_enabled: mark that the NIC doesn't support receiving + *	ACK-enabled AGG, (i.e. both BACK and non-BACK frames in single AGG). + *	If the NIC is not ACK_ENABLED it may use the EOF-bit in first non-0 + *	len delim to determine if AGG or single. + * @client: client mac data + * @go_ibss: mac data for go or ibss + * @p2p_dev: mac data for p2p device + */ +struct iwl_mac_config_cmd { +	/* COMMON_INDEX_HDR_API_S_VER_1 */ +	__le32 id_and_color; +	__le32 action; +	/* MAC_CONTEXT_TYPE_API_E */ +	__le32 mac_type; +	u8 local_mld_addr[6]; +	__le16 reserved_for_local_mld_addr; +	__le32 filter_flags; +	__le16 he_support; +	__le16 he_ap_support; +	__le32 eht_support; +	__le32 nic_not_ack_enabled; +	/* MAC_CONTEXT_CONFIG_SPECIFIC_DATA_API_U_VER_1 */ +	union { +		struct iwl_mac_client_data client; +		struct iwl_mac_p2p_dev_data p2p_dev; +	}; +} __packed; /* MAC_CONTEXT_CONFIG_CMD_API_S_VER_1 */ + +/** + * enum iwl_link_ctx_modify_flags - indicate to the fw what fields are being + *	modified in &iwl_link_ctx_cfg_cmd + * + * @LINK_CONTEXT_MODIFY_ACTIVE: covers iwl_link_ctx_cfg_cmd::active + * @LINK_CONTEXT_MODIFY_RATES_INFO: covers iwl_link_ctx_cfg_cmd::cck_rates, + *	iwl_link_ctx_cfg_cmd::ofdm_rates, + *	iwl_link_ctx_cfg_cmd::cck_short_preamble, + *	iwl_link_ctx_cfg_cmd::short_slot + * @LINK_CONTEXT_MODIFY_PROTECT_FLAGS: covers + *	iwl_link_ctx_cfg_cmd::protection_flags + * @LINK_CONTEXT_MODIFY_QOS_PARAMS: covers iwl_link_ctx_cfg_cmd::qos_flags, + *	iwl_link_ctx_cfg_cmd::ac, + * @LINK_CONTEXT_MODIFY_BEACON_TIMING: covers iwl_link_ctx_cfg_cmd::bi, + *	iwl_link_ctx_cfg_cmd::dtim_interval, + *	iwl_link_ctx_cfg_cmd::dtim_time, + *	iwl_link_ctx_cfg_cmd::dtim_tsf, + *	iwl_link_ctx_cfg_cmd::assoc_beacon_arrive_time. + *	This flag can be set only once after assoc. + * @LINK_CONTEXT_MODIFY_HE_PARAMS: covers + *	iwl_link_ctx_cfg_cmd::htc_trig_based_pkt_ext + *	iwl_link_ctx_cfg_cmd::rand_alloc_ecwmin, + *	iwl_link_ctx_cfg_cmd::rand_alloc_ecwmax, + *	iwl_link_ctx_cfg_cmd::trig_based_txf, + *	iwl_link_ctx_cfg_cmd::bss_color, + *	iwl_link_ctx_cfg_cmd::ndp_fdbk_buff_th_exp, + *	iwl_link_ctx_cfg_cmd::ref_bssid_addr + *	iwl_link_ctx_cfg_cmd::bssid_index, + *	iwl_link_ctx_cfg_cmd::frame_time_rts_th. + *	This flag can be set any time. + * @LINK_CONTEXT_MODIFY_BSS_COLOR_DISABLE: covers + *	iwl_link_ctx_cfg_cmd::bss_color_disable + * @LINK_CONTEXT_MODIFY_EHT_PARAMS: covers iwl_link_ctx_cfg_cmd::puncture_mask. + *	This flag can be set only if the MAC that this link relates to has + *	eht_support set to true. + * @LINK_CONTEXT_MODIFY_ALL: set all above flags + */ +enum iwl_link_ctx_modify_flags { +	LINK_CONTEXT_MODIFY_ACTIVE		= BIT(0), +	LINK_CONTEXT_MODIFY_RATES_INFO		= BIT(1), +	LINK_CONTEXT_MODIFY_PROTECT_FLAGS	= BIT(2), +	LINK_CONTEXT_MODIFY_QOS_PARAMS		= BIT(3), +	LINK_CONTEXT_MODIFY_BEACON_TIMING	= BIT(4), +	LINK_CONTEXT_MODIFY_HE_PARAMS		= BIT(5), +	LINK_CONTEXT_MODIFY_BSS_COLOR_DISABLE	= BIT(6), +	LINK_CONTEXT_MODIFY_EHT_PARAMS		= BIT(7), +	LINK_CONTEXT_MODIFY_ALL			= 0xff, +}; /* LINK_CONTEXT_MODIFY_MASK_E_VER_1 */ + +/** + * enum iwl_link_ctx_protection_flags - link protection flags + * @LINK_PROT_FLG_TGG_PROTECT: 11g protection when transmitting OFDM frames, + *	this will require CCK RTS/CTS2self. + *	RTS/CTS will protect full burst time. + * @LINK_PROT_FLG_HT_PROT: enable HT protection + * @LINK_PROT_FLG_FAT_PROT: protect 40 MHz transmissions + * @LINK_PROT_FLG_SELF_CTS_EN: allow CTS2self + */ +enum iwl_link_ctx_protection_flags { +	LINK_PROT_FLG_TGG_PROTECT	= BIT(0), +	LINK_PROT_FLG_HT_PROT		= BIT(1), +	LINK_PROT_FLG_FAT_PROT		= BIT(2), +	LINK_PROT_FLG_SELF_CTS_EN	= BIT(3), +}; /* LINK_PROTECT_FLAGS_E_VER_1 */ + +/** + * enum iwl_link_ctx_flags - link context flags + * + * @LINK_FLG_BSS_COLOR_DIS: BSS color disable, don't use the BSS + *	color for RX filter but use MAC header + *	enabled AGG, i.e. both BACK and non-BACK frames in a single AGG + * @LINK_FLG_MU_EDCA_CW: indicates that there is an element of MU EDCA + *	parameter set, i.e. the backoff counters for trig-based ACs + * @LINK_FLG_RU_2MHZ_BLOCK: indicates that 26-tone RU OFDMA transmission are + *      not allowed (as there are OBSS that might classify such transmissions as + *      radar pulses). + * @LINK_FLG_NDP_FEEDBACK_ENABLED: mark support for NDP feedback and change + *	of threshold + */ +enum iwl_link_ctx_flags { +	LINK_FLG_BSS_COLOR_DIS		= BIT(0), +	LINK_FLG_MU_EDCA_CW		= BIT(1), +	LINK_FLG_RU_2MHZ_BLOCK		= BIT(2), +	LINK_FLG_NDP_FEEDBACK_ENABLED	= BIT(3), +}; /* LINK_CONTEXT_FLAG_E_VER_1 */ + +/** + * struct iwl_link_config_cmd - command structure to configure the LINK context + *	in MLD API + * ( LINK_CONFIG_CMD =0x9 ) + * + * @action: action to perform, one of FW_CTXT_ACTION_* + * @link_id: the id of the link that this cmd configures + * @mac_id: interface ID. Relevant only if action is FW_CTXT_ACTION_ADD + * @phy_id: PHY index. Can be changed only if the link was inactive + *	(and stays inactive). If the link is active (or becomes active), + *	this field is ignored. + * @local_link_addr: the links MAC address. Can be changed only if the link was + *	inactive (and stays inactive). If the link is active + *	(or becomes active), this field is ignored. + * @reserved_for_local_link_addr: reserved + * @modify_mask: from &enum iwl_link_ctx_modify_flags, selects what to change. + *	Relevant only if action is FW_CTXT_ACTION_MODIFY + * @active: indicates whether the link is active or not + * @listen_lmac: indicates whether the link should be allocated on the Listen + *	Lmac or on the Main Lmac. Cannot be changed on an active Link. + *	Relevant only for eSR. + * @cck_rates: basic rates available for CCK + * @ofdm_rates: basic rates available for OFDM + * @cck_short_preamble: 1 for enabling short preamble, 0 otherwise + * @short_slot: 1 for enabling short slots, 0 otherwise + * @protection_flags: combination of &enum iwl_link_ctx_protection_flags + * @qos_flags: from &enum iwl_mac_qos_flags + * @ac: one iwl_mac_qos configuration for each AC + * @htc_trig_based_pkt_ext: default PE in 4us units + * @rand_alloc_ecwmin: random CWmin = 2**ECWmin-1 + * @rand_alloc_ecwmax: random CWmax = 2**ECWmax-1 + * @ndp_fdbk_buff_th_exp: set exponent for the NDP feedback buffered threshold + * @trig_based_txf: MU EDCA Parameter set for the trigger based traffic queues + * @bi: beacon interval in TU, applicable only when associated + * @dtim_interval: DTIM interval in TU. + *	Relevant only for GO, otherwise this is offloaded. + * @puncture_mask: puncture mask for EHT + * @frame_time_rts_th: HE duration RTS threshold, in units of 32us + * @flags: a combination from &enum iwl_link_ctx_flags + * @flags_mask: what of %flags have changed. Also &enum iwl_link_ctx_flags + * Below fields are for multi-bssid: + * @ref_bssid_addr: reference BSSID used by the AP + * @reserved_for_ref_bssid_addr: reserved + * @bssid_index: index of the associated VAP + * @bss_color: 11ax AP ID that is used in the HE SIG-A to mark inter BSS frame + * @reserved: alignment + * @ibss_bssid_addr: bssid for ibss + * @reserved_for_ibss_bssid_addr: reserved + * @reserved1: reserved for future use + */ +struct iwl_link_config_cmd { +	__le32 action; +	__le32 link_id; +	__le32 mac_id; +	__le32 phy_id; +	u8 local_link_addr[6]; +	__le16 reserved_for_local_link_addr; +	__le32 modify_mask; +	__le32 active; +	__le32 listen_lmac; +	__le32 cck_rates; +	__le32 ofdm_rates; +	__le32 cck_short_preamble; +	__le32 short_slot; +	__le32 protection_flags; +	/* MAC_QOS_PARAM_API_S_VER_1 */ +	__le32 qos_flags; +	struct iwl_ac_qos ac[AC_NUM + 1]; +	u8 htc_trig_based_pkt_ext; +	u8 rand_alloc_ecwmin; +	u8 rand_alloc_ecwmax; +	u8 ndp_fdbk_buff_th_exp; +	struct iwl_he_backoff_conf trig_based_txf[AC_NUM]; +	__le32 bi; +	__le32 dtim_interval; +	__le16 puncture_mask; +	__le16 frame_time_rts_th; +	__le32 flags; +	__le32 flags_mask; +	/* The below fields are for multi-bssid */ +	u8 ref_bssid_addr[6]; +	__le16 reserved_for_ref_bssid_addr; +	u8 bssid_index; +	u8 bss_color; +	u8 reserved[2]; +	u8 ibss_bssid_addr[6]; +	__le16 reserved_for_ibss_bssid_addr; +	__le32 reserved1[8]; +} __packed; /* LINK_CONTEXT_CONFIG_CMD_API_S_VER_1 */ + +/* Currently FW supports link ids in the range 0-3 and can have + * at most two active links for each vif. + */ +#define IWL_MVM_FW_MAX_ACTIVE_LINKS_NUM 2 +#define IWL_MVM_FW_MAX_LINK_ID 3 + +/** + * enum iwl_fw_sta_type - FW station types + * @STATION_TYPE_PEER: represents a peer - AP in BSS, a TDLS sta, a client in + *	P2P. + * @STATION_TYPE_BCAST_MGMT: The station used to send beacons and + *	probe responses. Also used for traffic injection in sniffer mode + * @STATION_TYPE_MCAST: the station used for BCAST / MCAST in GO. Will be + *	suspended / resumed at the right timing depending on the clients' + *	power save state and the DTIM timing + * @STATION_TYPE_AUX: aux sta. In the FW there is no need for a special type + *	for the aux sta, so this type is only for driver - internal use. + */ +enum iwl_fw_sta_type { +	STATION_TYPE_PEER, +	STATION_TYPE_BCAST_MGMT, +	STATION_TYPE_MCAST, +	STATION_TYPE_AUX, +}; /* STATION_TYPE_E_VER_1 */ + +/** + * struct iwl_mvm_sta_cfg_cmd - cmd structure to add a peer sta to the uCode's + *	station table + * ( STA_CONFIG_CMD = 0xA ) + * + * @sta_id: index of station in uCode's station table + * @link_id: the id of the link that is used to communicate with this sta + * @peer_mld_address: the peers mld address + * @reserved_for_peer_mld_address: reserved + * @peer_link_address: the address of the link that is used to communicate + *	with this sta + * @reserved_for_peer_link_address: reserved + * @station_type: type of this station. See &enum iwl_fw_sta_type + * @assoc_id: for GO only + * @beamform_flags: beam forming controls + * @mfp: indicates whether the STA uses management frame protection or not. + * @mimo: indicates whether the sta uses mimo or not + * @mimo_protection: indicates whether the sta uses mimo protection or not + * @ack_enabled: indicates that the AP supports receiving ACK- + *	enabled AGG, i.e. both BACK and non-BACK frames in a single AGG + * @trig_rnd_alloc: indicates that trigger based random allocation + *	is enabled according to UORA element existence + * @tx_ampdu_spacing: minimum A-MPDU spacing: + *	4 - 2us density, 5 - 4us density, 6 - 8us density, 7 - 16us density + * @tx_ampdu_max_size: maximum A-MPDU length: 0 - 8K, 1 - 16K, 2 - 32K, + *	3 - 64K, 4 - 128K, 5 - 256K, 6 - 512K, 7 - 1024K. + * @sp_length: the size of the SP in actual number of frames + * @uapsd_acs:  4 LS bits are trigger enabled ACs, 4 MS bits are the deliver + *	enabled ACs. + * @pkt_ext: optional, exists according to PPE-present bit in the HE/EHT-PHY + *	capa + * @htc_flags: which features are supported in HTC + */ +struct iwl_mvm_sta_cfg_cmd { +	__le32 sta_id; +	__le32 link_id; +	u8 peer_mld_address[ETH_ALEN]; +	__le16 reserved_for_peer_mld_address; +	u8 peer_link_address[ETH_ALEN]; +	__le16 reserved_for_peer_link_address; +	__le32 station_type; +	__le32 assoc_id; +	__le32 beamform_flags; +	__le32 mfp; +	__le32 mimo; +	__le32 mimo_protection; +	__le32 ack_enabled; +	__le32 trig_rnd_alloc; +	__le32 tx_ampdu_spacing; +	__le32 tx_ampdu_max_size; +	__le32 sp_length; +	__le32 uapsd_acs; +	struct iwl_he_pkt_ext_v2 pkt_ext; +	__le32 htc_flags; +} __packed; /* STA_CMD_API_S_VER_1 */ + +/** + * struct iwl_mvm_aux_sta_cmd - command for AUX STA configuration + * ( AUX_STA_CMD = 0xB ) + * + * @sta_id: index of aux sta to configure + * @lmac_id: ? + * @mac_addr: mac addr of the auxilary sta + * @reserved_for_mac_addr: reserved + */ +struct iwl_mvm_aux_sta_cmd { +	__le32 sta_id; +	__le32 lmac_id; +	u8 mac_addr[ETH_ALEN]; +	__le16 reserved_for_mac_addr; + +} __packed; /* AUX_STA_CMD_API_S_VER_1 */ + +/** + * struct iwl_mvm_remove_sta_cmd - a cmd structure to remove a sta added by + *	STA_CONFIG_CMD or AUX_STA_CONFIG_CMD + * ( STA_REMOVE_CMD = 0xC ) + * + * @sta_id: index of station to remove + */ +struct iwl_mvm_remove_sta_cmd { +	__le32 sta_id; +} __packed; /* REMOVE_STA_API_S_VER_1 */ + +/** + * struct iwl_mvm_sta_disable_tx_cmd - disable / re-enable tx to a sta + * ( STA_DISABLE_TX_CMD = 0xD ) + * + * @sta_id: index of the station to disable tx to + * @disable: indicates if to disable or re-enable tx + */ +struct iwl_mvm_sta_disable_tx_cmd { +	__le32 sta_id; +	__le32 disable; +} __packed; /* STA_DISABLE_TX_API_S_VER_1 */ +  #endif /* __iwl_fw_api_mac_cfg_h__ */ diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h b/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h index ddacd5b45aea..c9a48fc5fac8 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/rs.h @@ -373,9 +373,6 @@ enum {  /* Bit 4-5: (0) SISO, (1) MIMO2 (2) MIMO3 */  #define RATE_VHT_MCS_RATE_CODE_MSK	0xf -#define RATE_VHT_MCS_NSS_POS		4 -#define RATE_VHT_MCS_NSS_MSK		(3 << RATE_VHT_MCS_NSS_POS) -#define RATE_VHT_MCS_MIMO2_MSK		BIT(RATE_VHT_MCS_NSS_POS)  /*   * Legacy OFDM rate format for bits 7:0 @@ -449,11 +446,16 @@ enum {   *	1			2xLTF+0.8us   *	2			2xLTF+1.6us   *	3			4xLTF+3.2us - * HE TRIG: + * HE-EHT TRIG:   *	0			1xLTF+1.6us   *	1			2xLTF+1.6us   *	2			4xLTF+3.2us   *	3			(does not occur) + * EHT MU: + *	0			2xLTF+0.8us + *	1			2xLTF+1.6us + *	2			4xLTF+0.8us + *	3			4xLTF+3.2us   */  #define RATE_MCS_HE_GI_LTF_POS		20  #define RATE_MCS_HE_GI_LTF_MSK_V1		(3 << RATE_MCS_HE_GI_LTF_POS) @@ -546,12 +548,17 @@ enum {  /*   * Bits 13-11: (0) 20MHz, (1) 40MHz, (2) 80MHz, (3) 160MHz, (4) 320MHz   */ -#define RATE_MCS_CHAN_WIDTH_MSK			(0x7 << RATE_MCS_CHAN_WIDTH_POS) -#define RATE_MCS_CHAN_WIDTH_20			(0 << RATE_MCS_CHAN_WIDTH_POS) -#define RATE_MCS_CHAN_WIDTH_40			(1 << RATE_MCS_CHAN_WIDTH_POS) -#define RATE_MCS_CHAN_WIDTH_80			(2 << RATE_MCS_CHAN_WIDTH_POS) -#define RATE_MCS_CHAN_WIDTH_160			(3 << RATE_MCS_CHAN_WIDTH_POS) -#define RATE_MCS_CHAN_WIDTH_320			(4 << RATE_MCS_CHAN_WIDTH_POS) +#define RATE_MCS_CHAN_WIDTH_MSK		(0x7 << RATE_MCS_CHAN_WIDTH_POS) +#define RATE_MCS_CHAN_WIDTH_20_VAL	0 +#define RATE_MCS_CHAN_WIDTH_20		(RATE_MCS_CHAN_WIDTH_20_VAL << RATE_MCS_CHAN_WIDTH_POS) +#define RATE_MCS_CHAN_WIDTH_40_VAL	1 +#define RATE_MCS_CHAN_WIDTH_40		(RATE_MCS_CHAN_WIDTH_40_VAL << RATE_MCS_CHAN_WIDTH_POS) +#define RATE_MCS_CHAN_WIDTH_80_VAL	2 +#define RATE_MCS_CHAN_WIDTH_80		(RATE_MCS_CHAN_WIDTH_80_VAL << RATE_MCS_CHAN_WIDTH_POS) +#define RATE_MCS_CHAN_WIDTH_160_VAL	3 +#define RATE_MCS_CHAN_WIDTH_160		(RATE_MCS_CHAN_WIDTH_160_VAL << RATE_MCS_CHAN_WIDTH_POS) +#define RATE_MCS_CHAN_WIDTH_320_VAL	4 +#define RATE_MCS_CHAN_WIDTH_320		(RATE_MCS_CHAN_WIDTH_320_VAL << RATE_MCS_CHAN_WIDTH_POS)  /* Bit 15-14: Antenna selection:   * Bit 14: Ant A active diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/rx.h b/drivers/net/wireless/intel/iwlwifi/fw/api/rx.h index 1c4e84932058..fdd8b01f09e4 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/rx.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/rx.h @@ -367,7 +367,8 @@ enum iwl_rx_phy_eht_data1 {  	/* number of EHT-LTF symbols 0 - 1 EHT-LTF, 1 - 2 EHT-LTFs, 2 - 4 EHT-LTFs,  	 * 3 - 6 EHT-LTFs, 4 - 8 EHT-LTFs */  	IWL_RX_PHY_DATA1_EHT_SIG_LTF_NUM		= 0x000000e0, -	IWL_RX_PHY_DATA1_EHT_RU_ALLOC			= 0x0000ff00, +	IWL_RX_PHY_DATA1_EHT_B0				= 0x00000100, +	IWL_RX_PHY_DATA1_EHT_RU_B1_B7_ALLOC		= 0x0000fe00,  };  /* goes into Metadata DW 7 */ @@ -413,7 +414,7 @@ enum iwl_rx_phy_eht_data2 {  	/* OFDM_RX_VECTOR_COMMON_RU_ALLOC_0_OUT */  	IWL_RX_PHY_DATA2_EHT_MU_EXT_RU_ALLOC_A1	= 0x000001ff,  	IWL_RX_PHY_DATA2_EHT_MU_EXT_RU_ALLOC_A2	= 0x0003fe00, -	IWL_RX_PHY_DATA2_EHT_MU_EXT_RU_ALLOC_A3	= 0x01fc0000, +	IWL_RX_PHY_DATA2_EHT_MU_EXT_RU_ALLOC_B1	= 0x07fc0000,  	/* info type: EHT-TB-EXT */  	IWL_RX_PHY_DATA2_EHT_TB_EXT_TRIG_SIGA1	= 0xffffffff, @@ -423,19 +424,18 @@ enum iwl_rx_phy_eht_data2 {  enum iwl_rx_phy_eht_data3 {  	/* info type: EHT-MU-EXT */  	/* OFDM_RX_VECTOR_COMMON_RU_ALLOC_1_OUT */ -	IWL_RX_PHY_DATA3_EHT_MU_EXT_RU_ALLOC_B1	= 0x000001ff, -	IWL_RX_PHY_DATA3_EHT_MU_EXT_RU_ALLOC_B2	= 0x0003fe00, -	IWL_RX_PHY_DATA3_EHT_MU_EXT_RU_ALLOC_B3	= 0x01fc0000, +	IWL_RX_PHY_DATA3_EHT_MU_EXT_RU_ALLOC_B2	= 0x000001ff, +	IWL_RX_PHY_DATA3_EHT_MU_EXT_RU_ALLOC_C1	= 0x0003fe00, +	IWL_RX_PHY_DATA3_EHT_MU_EXT_RU_ALLOC_C2	= 0x07fc0000,  };  /* goes into Metadata DW 4 */  enum iwl_rx_phy_eht_data4 {  	/* info type: EHT-MU-EXT */  	/* OFDM_RX_VECTOR_COMMON_RU_ALLOC_2_OUT */ -	IWL_RX_PHY_DATA4_EHT_MU_EXT_RU_ALLOC_C1	= 0x000001ff, -	IWL_RX_PHY_DATA4_EHT_MU_EXT_RU_ALLOC_C2	= 0x0003fe00, -	IWL_RX_PHY_DATA4_EHT_MU_EXT_RU_ALLOC_C3	= 0x01fc0000, -	IWL_RX_PHY_DATA4_EHT_MU_EXT_SIGB_MCS	= 0x18000000, +	IWL_RX_PHY_DATA4_EHT_MU_EXT_RU_ALLOC_D1	= 0x000001ff, +	IWL_RX_PHY_DATA4_EHT_MU_EXT_RU_ALLOC_D2	= 0x0003fe00, +	IWL_RX_PHY_DATA4_EHT_MU_EXT_SIGB_MCS	= 0x000c0000,  };  /* goes into Metadata DW 16 */ @@ -673,22 +673,31 @@ struct iwl_rx_mpdu_desc {  	 * @mac_phy_idx: MAC/PHY index  	 */  	u8 mac_phy_idx; -	/* DW4 - carries csum data only when rpa_en == 1 */ -	/** -	 * @raw_csum: raw checksum (alledgedly unreliable) -	 */ -	__le16 raw_csum; - +	/* DW4 */  	union { +		struct { +			/* carries csum data only when rpa_en == 1 */ +			/** +			 * @raw_csum: raw checksum (alledgedly unreliable) +			 */ +			__le16 raw_csum; + +			union { +				/** +				 * @l3l4_flags: &enum iwl_rx_l3l4_flags +				 */ +				__le16 l3l4_flags; + +				/** +				 * @phy_data4: depends on info type, see phy_data1 +				 */ +				__le16 phy_data4; +			}; +		};  		/** -		 * @l3l4_flags: &enum iwl_rx_l3l4_flags -		 */ -		__le16 l3l4_flags; - -		/** -		 * @phy_data4: depends on info type, see phy_data1 +		 * @phy_eht_data4: depends on info type, see phy_data1  		 */ -		__le16 phy_data4; +		__le32 phy_eht_data4;  	};  	/* DW5 */  	/** @@ -725,7 +734,7 @@ struct iwl_rx_mpdu_desc {  #define RX_NO_DATA_INFO_TYPE_RX_ERR	1  #define RX_NO_DATA_INFO_TYPE_NDP	2  #define RX_NO_DATA_INFO_TYPE_MU_UNMATCHED	3 -#define RX_NO_DATA_INFO_TYPE_HE_TB_UNMATCHED	4 +#define RX_NO_DATA_INFO_TYPE_TB_UNMATCHED	4  #define RX_NO_DATA_INFO_ERR_POS		8  #define RX_NO_DATA_INFO_ERR_MSK		(0xff << RX_NO_DATA_INFO_ERR_POS) @@ -743,6 +752,35 @@ struct iwl_rx_mpdu_desc {  #define RX_NO_DATA_RX_VEC0_VHT_NSTS_MSK	0x38000000  #define RX_NO_DATA_RX_VEC2_EHT_NSTS_MSK	0x00f00000 +/* content of OFDM_RX_VECTOR_USIG_A1_OUT */ +enum iwl_rx_usig_a1 { +	IWL_RX_USIG_A1_ENHANCED_WIFI_VER_ID	= 0x00000007, +	IWL_RX_USIG_A1_BANDWIDTH		= 0x00000038, +	IWL_RX_USIG_A1_UL_FLAG			= 0x00000040, +	IWL_RX_USIG_A1_BSS_COLOR		= 0x00001f80, +	IWL_RX_USIG_A1_TXOP_DURATION		= 0x000fe000, +	IWL_RX_USIG_A1_DISREGARD		= 0x01f00000, +	IWL_RX_USIG_A1_VALIDATE			= 0x02000000, +	IWL_RX_USIG_A1_EHT_BW320_SLOT		= 0x04000000, +	IWL_RX_USIG_A1_EHT_TYPE			= 0x18000000, +	IWL_RX_USIG_A1_RDY			= 0x80000000, +}; + +/* content of OFDM_RX_VECTOR_USIG_A2_EHT_OUT */ +enum iwl_rx_usig_a2_eht { +	IWL_RX_USIG_A2_EHT_PPDU_TYPE		= 0x00000003, +	IWL_RX_USIG_A2_EHT_USIG2_VALIDATE_B2	= 0x00000004, +	IWL_RX_USIG_A2_EHT_PUNC_CHANNEL		= 0x000000f8, +	IWL_RX_USIG_A2_EHT_USIG2_VALIDATE_B8	= 0x00000100, +	IWL_RX_USIG_A2_EHT_SIG_MCS		= 0x00000600, +	IWL_RX_USIG_A2_EHT_SIG_SYM_NUM		= 0x0000f800, +	IWL_RX_USIG_A2_EHT_TRIG_SPATIAL_REUSE_1 = 0x000f0000, +	IWL_RX_USIG_A2_EHT_TRIG_SPATIAL_REUSE_2 = 0x00f00000, +	IWL_RX_USIG_A2_EHT_TRIG_USIG2_DISREGARD	= 0x1f000000, +	IWL_RX_USIG_A2_EHT_CRC_OK		= 0x40000000, +	IWL_RX_USIG_A2_EHT_RDY			= 0x80000000, +}; +  /**   * struct iwl_rx_no_data - RX no data descriptor   * @info: 7:0 frame type, 15:8 RX error type @@ -780,7 +818,7 @@ struct iwl_rx_no_data {   * @rx_vec: DW-12:9 raw RX vectors from DSP according to modulation type.   *	for VHT: OFDM_RX_VECTOR_SIGA1_OUT, OFDM_RX_VECTOR_SIGA2_OUT   *	for HE: OFDM_RX_VECTOR_HE_SIGA1_OUT, OFDM_RX_VECTOR_HE_SIGA2_OUT - *	for EHT: OFDM_RX_VECTOR_USIG_A1_OUT, OFDM_RX_VECTOR_USIG_A2_OUT, + *	for EHT: OFDM_RX_VECTOR_USIG_A1_OUT, OFDM_RX_VECTOR_USIG_A2_EHT_OUT,   *	OFDM_RX_VECTOR_EHT_OUT, OFDM_RX_VECTOR_EHT_USER_FIELD_OUT   */  struct iwl_rx_no_data_ver_3 { diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h b/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h index 7ba0e3409199..ec96ba053a5c 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/scan.h @@ -709,10 +709,13 @@ enum iwl_umac_scan_general_flags_v2 {   *     should be aware of a P2P GO operation on the 2GHz band.   * @IWL_UMAC_SCAN_GEN_PARAMS_FLAGS2_RESPECT_P2P_GO_HB: scan event scheduling   *     should be aware of a P2P GO operation on the 5GHz or 6GHz band. + * @IWL_UMAC_SCAN_GEN_PARAMS_FLAGS2_DONT_TOGGLE_ANT: don't toggle between + *     valid antennas, and use the same antenna as in previous scan   */  enum iwl_umac_scan_general_params_flags2 {  	IWL_UMAC_SCAN_GEN_PARAMS_FLAGS2_RESPECT_P2P_GO_LB = BIT(0),  	IWL_UMAC_SCAN_GEN_PARAMS_FLAGS2_RESPECT_P2P_GO_HB = BIT(1), +	IWL_UMAC_SCAN_GEN_PARAMS_FLAGS2_DONT_TOGGLE_ANT   = BIT(2),  };  /** diff --git a/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h b/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h index ecc6706f66ed..97edf5477ba7 100644 --- a/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h +++ b/drivers/net/wireless/intel/iwlwifi/fw/api/tx.h @@ -800,7 +800,7 @@ enum iwl_mac_beacon_flags {   *	is &enum iwl_mac_beacon_flags.   * @short_ssid: Short SSID   * @reserved: reserved - * @template_id: currently equal to the mac context id of the coresponding mac. + * @link_id: the firmware id of the link that will use this beacon   * @tim_idx: the offset of the tim IE in the beacon   * @tim_size: the length of the tim IE   * @ecsa_offset: offset to the ECSA IE if present @@ -812,15 +812,17 @@ struct iwl_mac_beacon_cmd {  	__le16 flags;  	__le32 short_ssid;  	__le32 reserved; -	__le32 template_id; +	__le32 link_id;  	__le32 tim_idx;  	__le32 tim_size;  	__le32 ecsa_offset;  	__le32 csa_offset;  	struct ieee80211_hdr frame[];  } __packed; /* BEACON_TEMPLATE_CMD_API_S_VER_10, -	       BEACON_TEMPLATE_CMD_API_S_VER_11, -	       BEACON_TEMPLATE_CMD_API_S_VER_12 */ +	     * BEACON_TEMPLATE_CMD_API_S_VER_11, +	     * BEACON_TEMPLATE_CMD_API_S_VER_12, +	     * BEACON_TEMPLATE_CMD_API_S_VER_13 +	     */  struct iwl_beacon_notif {  	struct iwl_mvm_tx_resp beacon_notify_hdr;  |