From nobody Fri Jan 17 16:05:29 2025 X-Original-To: dev-commits-src-all@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4YZPhn35SDz5l842; Fri, 17 Jan 2025 16:05:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R11" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4YZPhn2XLhz48tp; Fri, 17 Jan 2025 16:05:29 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1737129929; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=NBEH58XEo/p9I/XbjkfzWPLkPzPQr2RFI6ZnH8ogqAw=; b=sv3uGmCO/LL0bDM6NakwJjJkV2flM6nAoskrMQU5VNxaRa0GnbhCuCenQtx7UjN7NbsxeE WK2aMFR8xZJNKFx4ziGgo9Ivjw2N7kL4i2M4EaPvx0Ad3sWtD0fTYchoTQ1ujhC75qp3NW kM9RKIrfqgTcXb0cnYudyr19aS0pH0ZsJnT/EGsWl1OyjuH1eOfVNtbi6K+poJc8ppaG6x n6gzmNXawhEZutLic/flXaxMfLgpJzQzdt+lnJbKmXbw9WgFEKaaC5zRG8mCDyvW0wBkGW k1Bc+81/rjJeGv6UhuVXkalowFfHs8spk+BsF6/pt298KNBS6UTcOUTCLIF6nA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1737129929; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=NBEH58XEo/p9I/XbjkfzWPLkPzPQr2RFI6ZnH8ogqAw=; b=YNx8X3IN/MhSSao9zuqRNCTtO1li4wUX4JUoh/7NwZVOZ8npjHcNAdlqvZ293Yr6rXrRqD AVgNGXGNSMgSB6GCoyukWjHdsd2ZVrvXxL7Gcz4pdwa4b00GxACLeeKITHmWlWOoot/A4W 0PyviAYMmUxLXT+VESG1sK7sW0pueBh3Qsd7ZdYnq7315MZKKc/4k7DhgtgXhkNgvj+evQ cTYx2xO4MOWfCCdj9X8f/QyF5uKA1LnM1Rp4pq+RANa4pUbO3blgLZkSgS+QycQVOBP2Vg uCOqGy7gFkBX70/IheF7wMbyTvtcBD9DVEZrdB5xGaHwbLs4hpqazT2IGA3zmg== ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1737129929; a=rsa-sha256; cv=none; b=lCGCsnjMtyDkk0wDF/JzkuFE2CzN04qaxSaAUFu4yrf/59kC8lgGV/J8nNPVXYxDuvcnvv Vl7JIwbPLOP0pI9dJt3FEOSjShi/AVWmxHaTA1mdKP9bxq1+jliue5YmijhkW7Xdgsrprn jR3rnHEfidXKFAulIrpsL9yKv9lSyiUb+4RN98WjcZPJti9ll3oDLpWLXYdsS1swPxHSny XyVLBC+5M8Sfm0bAtUQwIzIbt5ECRdc2flSfbfIgN5JYdb2ZOL43ryePrenc57UFmU/UfP kUd68YxViXs5fi8uZ+ctTATsRrE8cXZ4NwUVzBeAFUkVabOXGpWgmWxF6Fycww== ARC-Authentication-Results: i=1; mx1.freebsd.org; none Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4YZPhn279jz95n; Fri, 17 Jan 2025 16:05:29 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.18.1/8.18.1) with ESMTP id 50HG5Txc066995; Fri, 17 Jan 2025 16:05:29 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.18.1/8.18.1/Submit) id 50HG5T8a066992; Fri, 17 Jan 2025 16:05:29 GMT (envelope-from git) Date: Fri, 17 Jan 2025 16:05:29 GMT Message-Id: <202501171605.50HG5T8a066992@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org From: Adrian Chadd Subject: git: 31a8b9782dc3 - main - iwm: update rate tables from OpenBSD List-Id: Commit messages for all branches of the src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-all List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-BeenThere: dev-commits-src-all@freebsd.org Sender: owner-dev-commits-src-all@FreeBSD.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: adrian X-Git-Repository: src X-Git-Refname: refs/heads/main X-Git-Reftype: branch X-Git-Commit: 31a8b9782dc354ebd735db7036d7945f160b2527 Auto-Submitted: auto-generated The branch main has been updated by adrian: URL: https://cgit.FreeBSD.org/src/commit/?id=31a8b9782dc354ebd735db7036d7945f160b2527 commit 31a8b9782dc354ebd735db7036d7945f160b2527 Author: Adrian Chadd AuthorDate: 2024-12-27 03:30:22 +0000 Commit: Adrian Chadd CommitDate: 2025-01-17 16:04:58 +0000 iwm: update rate tables from OpenBSD These are from an earlier version of the driver (22-Oct-2021) which I started to sync against back in 2021. These pull in the rest of the VHT and HT rates. Since that driver has functioning 802.11n support, it makes a good intermediary checkpoint. Locally tested: * 7260, STA mode, 11g and 11a modes Differential Revision: https://reviews.freebsd.org/D48209 Obtained from: OpenBSD (at a6e25c727a2214219715b51ba6af2221d7e0d674, 22-Oct-2021) --- sys/dev/iwm/if_iwm.c | 62 +++++++++++++++++++++++++++++++++++-------------- sys/dev/iwm/if_iwmreg.h | 24 +++++++++++-------- 2 files changed, 59 insertions(+), 27 deletions(-) diff --git a/sys/dev/iwm/if_iwm.c b/sys/dev/iwm/if_iwm.c index c8eb46ed9795..15ef139fd5a5 100644 --- a/sys/dev/iwm/if_iwm.c +++ b/sys/dev/iwm/if_iwm.c @@ -197,32 +197,60 @@ _Static_assert(nitems(iwm_nvm_channels_8000) <= IWM_NUM_CHANNELS_8000, #define IWM_NUM_2GHZ_CHANNELS 14 #define IWM_N_HW_ADDR_MASK 0xF -/* - * XXX For now, there's simply a fixed set of rate table entries - * that are populated. - */ const struct iwm_rate { - uint8_t rate; + uint16_t rate; uint8_t plcp; + uint8_t ht_plcp; } iwm_rates[] = { - { 2, IWM_RATE_1M_PLCP }, - { 4, IWM_RATE_2M_PLCP }, - { 11, IWM_RATE_5M_PLCP }, - { 22, IWM_RATE_11M_PLCP }, - { 12, IWM_RATE_6M_PLCP }, - { 18, IWM_RATE_9M_PLCP }, - { 24, IWM_RATE_12M_PLCP }, - { 36, IWM_RATE_18M_PLCP }, - { 48, IWM_RATE_24M_PLCP }, - { 72, IWM_RATE_36M_PLCP }, - { 96, IWM_RATE_48M_PLCP }, - { 108, IWM_RATE_54M_PLCP }, + /* Legacy */ /* HT */ + { 2, IWM_RATE_1M_PLCP, IWM_RATE_HT_SISO_MCS_INV_PLCP }, + { 4, IWM_RATE_2M_PLCP, IWM_RATE_HT_SISO_MCS_INV_PLCP }, + { 11, IWM_RATE_5M_PLCP, IWM_RATE_HT_SISO_MCS_INV_PLCP }, + { 22, IWM_RATE_11M_PLCP, IWM_RATE_HT_SISO_MCS_INV_PLCP }, + { 12, IWM_RATE_6M_PLCP, IWM_RATE_HT_SISO_MCS_0_PLCP }, + { 18, IWM_RATE_9M_PLCP, IWM_RATE_HT_SISO_MCS_INV_PLCP }, + { 24, IWM_RATE_12M_PLCP, IWM_RATE_HT_SISO_MCS_1_PLCP }, + { 26, IWM_RATE_INVM_PLCP, IWM_RATE_HT_MIMO2_MCS_8_PLCP }, + { 36, IWM_RATE_18M_PLCP, IWM_RATE_HT_SISO_MCS_2_PLCP }, + { 48, IWM_RATE_24M_PLCP, IWM_RATE_HT_SISO_MCS_3_PLCP }, + { 52, IWM_RATE_INVM_PLCP, IWM_RATE_HT_MIMO2_MCS_9_PLCP }, + { 72, IWM_RATE_36M_PLCP, IWM_RATE_HT_SISO_MCS_4_PLCP }, + { 78, IWM_RATE_INVM_PLCP, IWM_RATE_HT_MIMO2_MCS_10_PLCP }, + { 96, IWM_RATE_48M_PLCP, IWM_RATE_HT_SISO_MCS_5_PLCP }, + { 104, IWM_RATE_INVM_PLCP, IWM_RATE_HT_MIMO2_MCS_11_PLCP }, + { 108, IWM_RATE_54M_PLCP, IWM_RATE_HT_SISO_MCS_6_PLCP }, + { 128, IWM_RATE_INVM_PLCP, IWM_RATE_HT_SISO_MCS_7_PLCP }, + { 156, IWM_RATE_INVM_PLCP, IWM_RATE_HT_MIMO2_MCS_12_PLCP }, + { 208, IWM_RATE_INVM_PLCP, IWM_RATE_HT_MIMO2_MCS_13_PLCP }, + { 234, IWM_RATE_INVM_PLCP, IWM_RATE_HT_MIMO2_MCS_14_PLCP }, + { 260, IWM_RATE_INVM_PLCP, IWM_RATE_HT_MIMO2_MCS_15_PLCP }, }; #define IWM_RIDX_CCK 0 #define IWM_RIDX_OFDM 4 #define IWM_RIDX_MAX (nitems(iwm_rates)-1) #define IWM_RIDX_IS_CCK(_i_) ((_i_) < IWM_RIDX_OFDM) #define IWM_RIDX_IS_OFDM(_i_) ((_i_) >= IWM_RIDX_OFDM) +#define IWM_RVAL_IS_OFDM(_i_) ((_i_) >= 12 && (_i_) != 22) + +/* Convert an MCS index into an iwm_rates[] index. */ +const int iwm_mcs2ridx[] = { + IWM_RATE_MCS_0_INDEX, + IWM_RATE_MCS_1_INDEX, + IWM_RATE_MCS_2_INDEX, + IWM_RATE_MCS_3_INDEX, + IWM_RATE_MCS_4_INDEX, + IWM_RATE_MCS_5_INDEX, + IWM_RATE_MCS_6_INDEX, + IWM_RATE_MCS_7_INDEX, + IWM_RATE_MCS_8_INDEX, + IWM_RATE_MCS_9_INDEX, + IWM_RATE_MCS_10_INDEX, + IWM_RATE_MCS_11_INDEX, + IWM_RATE_MCS_12_INDEX, + IWM_RATE_MCS_13_INDEX, + IWM_RATE_MCS_14_INDEX, + IWM_RATE_MCS_15_INDEX, +}; struct iwm_nvm_section { uint16_t length; diff --git a/sys/dev/iwm/if_iwmreg.h b/sys/dev/iwm/if_iwmreg.h index d9c7bb7a89f9..296d07bc4b31 100644 --- a/sys/dev/iwm/if_iwmreg.h +++ b/sys/dev/iwm/if_iwmreg.h @@ -4481,9 +4481,7 @@ struct iwm_beacon_filter_cmd { #define IWM_RATE_HT_SISO_MCS_9_PLCP IWM_RATE_HT_SISO_MCS_INV_PLCP /* - * These serve as indexes into - * struct iwm_rate_info fw_rate_idx_to_plcp[IWM_RATE_COUNT]; - * TODO: avoid overlap between legacy and HT rates + * These serve as indexes into struct iwm_rate iwm_rates[IWM_RIDX_MAX]. */ enum { IWM_RATE_1M_INDEX = 0, @@ -4500,28 +4498,34 @@ enum { IWM_RATE_9M_INDEX, IWM_RATE_12M_INDEX, IWM_RATE_MCS_1_INDEX = IWM_RATE_12M_INDEX, + IWM_RATE_MCS_8_INDEX, + IWM_FIRST_HT_MIMO2_RATE = IWM_RATE_MCS_8_INDEX, IWM_RATE_18M_INDEX, IWM_RATE_MCS_2_INDEX = IWM_RATE_18M_INDEX, IWM_RATE_24M_INDEX, IWM_RATE_MCS_3_INDEX = IWM_RATE_24M_INDEX, + IWM_RATE_MCS_9_INDEX, IWM_RATE_36M_INDEX, IWM_RATE_MCS_4_INDEX = IWM_RATE_36M_INDEX, + IWM_RATE_MCS_10_INDEX, IWM_RATE_48M_INDEX, IWM_RATE_MCS_5_INDEX = IWM_RATE_48M_INDEX, + IWM_RATE_MCS_11_INDEX, IWM_RATE_54M_INDEX, IWM_RATE_MCS_6_INDEX = IWM_RATE_54M_INDEX, IWM_LAST_NON_HT_RATE = IWM_RATE_54M_INDEX, - IWM_RATE_60M_INDEX, - IWM_RATE_MCS_7_INDEX = IWM_RATE_60M_INDEX, - IWM_LAST_HT_RATE = IWM_RATE_MCS_7_INDEX, - IWM_RATE_MCS_8_INDEX, - IWM_RATE_MCS_9_INDEX, + IWM_RATE_MCS_7_INDEX, + IWM_LAST_HT_SISO_RATE = IWM_RATE_MCS_7_INDEX, + IWM_RATE_MCS_12_INDEX, + IWM_RATE_MCS_13_INDEX, + IWM_RATE_MCS_14_INDEX, + IWM_RATE_MCS_15_INDEX, + IWM_LAST_HT_RATE = IWM_RATE_MCS_15_INDEX, IWM_LAST_VHT_RATE = IWM_RATE_MCS_9_INDEX, IWM_RATE_COUNT_LEGACY = IWM_LAST_NON_HT_RATE + 1, - IWM_RATE_COUNT = IWM_LAST_VHT_RATE + 1, + IWM_RATE_COUNT = IWM_LAST_HT_RATE + 1, }; - #define IWM_RATE_BIT_MSK(r) (1 << (IWM_RATE_##r##M_INDEX)) /* fw API values for legacy bit rates, both OFDM and CCK */