Commit a1346cea authored by Yedidya Benshimol's avatar Yedidya Benshimol Committed by Miri Korenblit
Browse files

wifi: iwlwifi: Add a new version for sta config command



Add a new version of sta configuration command
which includes these wifi8 features:

1. LDPC X2 CW size support indication
2. Indication if ICF frame is needed instead of RTS
3. support for MIC padding delays for protected control frames

Signed-off-by: default avatarYedidya Benshimol <yedidya.ben.shimol@intel.com>
Link: https://patch.msgid.link/20250506194102.3407967-4-miriam.rachel.korenblit@intel.com


Signed-off-by: default avatarMiri Korenblit <miriam.rachel.korenblit@intel.com>
parent e12bc6f4
Loading
Loading
Loading
Loading
+72 −1
Original line number Diff line number Diff line
@@ -588,6 +588,62 @@ enum iwl_fw_sta_type {
	STATION_TYPE_AUX,
}; /* STATION_TYPE_E_VER_1 */

/**
 * struct iwl_sta_cfg_cmd_v1 - 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_sta_cfg_cmd_v1 {
	__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_sta_cfg_cmd - cmd structure to add a peer sta to the uCode's
 *	station table
@@ -620,6 +676,14 @@ enum iwl_fw_sta_type {
 * @pkt_ext: optional, exists according to PPE-present bit in the HE/EHT-PHY
 *	capa
 * @htc_flags: which features are supported in HTC
 * @use_ldpc_x2_cw: Indicates whether to use LDPC with double CW
 * @use_icf: Indicates whether to use ICF instead of RTS
 * @dps_pad_time: DPS (Dynamic Power Save) padding delay resolution to ensure
 *	proper timing alignment
 * @dps_trans_delay: DPS minimal time that takes the peer to return to low power
 * @mic_prep_pad_delay: MIC prep time padding
 * @mic_compute_pad_delay: MIC compute time padding
 * @reserved: Reserved for alignment
 */
struct iwl_sta_cfg_cmd {
	__le32 sta_id;
@@ -642,7 +706,14 @@ struct iwl_sta_cfg_cmd {
	__le32 uapsd_acs;
	struct iwl_he_pkt_ext_v2 pkt_ext;
	__le32 htc_flags;
} __packed; /* STA_CMD_API_S_VER_1 */
	u8 use_ldpc_x2_cw;
	u8 use_icf;
	u8 dps_pad_time;
	u8 dps_trans_delay;
	u8 mic_prep_pad_delay;
	u8 mic_compute_pad_delay;
	u8 reserved[2];
} __packed; /* STA_CMD_API_S_VER_2 */

/**
 * struct iwl_aux_sta_cmd - command for AUX STA configuration
+5 −3
Original line number Diff line number Diff line
@@ -401,9 +401,11 @@ static u32 iwl_mld_get_htc_flags(struct ieee80211_link_sta *link_sta)
static int iwl_mld_send_sta_cmd(struct iwl_mld *mld,
				const struct iwl_sta_cfg_cmd *cmd)
{
	int ret = iwl_mld_send_cmd_pdu(mld,
				       WIDE_ID(MAC_CONF_GROUP, STA_CONFIG_CMD),
				       cmd);
	u32 cmd_id = WIDE_ID(MAC_CONF_GROUP, STA_CONFIG_CMD);
	int cmd_len = iwl_fw_lookup_cmd_ver(mld->fw, cmd_id, 0) > 1 ?
		      sizeof(*cmd) :
		      sizeof(struct iwl_sta_cfg_cmd_v1);
	int ret = iwl_mld_send_cmd_pdu(mld, cmd_id, cmd, cmd_len);
	if (ret)
		IWL_ERR(mld, "STA_CONFIG_CMD send failed, ret=0x%x\n", ret);
	return ret;
+6 −2
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
/*
 * Copyright (C) 2022-2024 Intel Corporation
 * Copyright (C) 2022-2025 Intel Corporation
 */
#include "mvm.h"
#include "time-sync.h"
@@ -48,9 +48,13 @@ u32 iwl_mvm_sta_fw_id_mask(struct iwl_mvm *mvm, struct ieee80211_sta *sta,
static int iwl_mvm_mld_send_sta_cmd(struct iwl_mvm *mvm,
				    struct iwl_sta_cfg_cmd *cmd)
{
	u32 cmd_id = WIDE_ID(MAC_CONF_GROUP, STA_CONFIG_CMD);
	int cmd_len = iwl_fw_lookup_cmd_ver(mvm->fw, cmd_id, 0) > 1 ?
		      sizeof(*cmd) :
		      sizeof(struct iwl_sta_cfg_cmd_v1);
	int ret = iwl_mvm_send_cmd_pdu(mvm,
				       WIDE_ID(MAC_CONF_GROUP, STA_CONFIG_CMD),
				       0, sizeof(*cmd), cmd);
				       0, cmd_len, cmd);
	if (ret)
		IWL_ERR(mvm, "STA_CONFIG_CMD send failed, ret=0x%x\n", ret);
	return ret;