| 12 - sys/contrib/dev/iwlwifi/iwl-fh.h | 85 +- sys/contrib/dev/iwlwifi/iwl-io.c | 4 +- sys/contrib/dev/iwlwifi/iwl-modparams.h | 21 +- sys/contrib/dev/iwlwifi/iwl-nvm-parse.c | 223 ++- sys/contrib/dev/iwlwifi/iwl-nvm-parse.h | 23 +- sys/contrib/dev/iwlwifi/iwl-nvm-utils.c | 118 ++ .../{iwl-eeprom-parse.h => iwl-nvm-utils.h} | 19 +- sys/contrib/dev/iwlwifi/iwl-op-mode.h | 32 +- sys/contrib/dev/iwlwifi/iwl-prph.h | 42 +- sys/contrib/dev/iwlwifi/iwl-trans.c | 456 ++++- sys/contrib/dev/iwlwifi/iwl-trans.h | 736 ++------ sys/contrib/dev/iwlwifi/mei/iwl-mei.h | 7 +- sys/contrib/dev/iwlwifi/mvm/coex.c | 124 +- sys/contrib/dev/iwlwifi/mvm/constants.h | 26 +- sys/contrib/dev/iwlwifi/mvm/d3.c | 649 ++++++- sys/contrib/dev/iwlwifi/mvm/debugfs-vif.c | 272 ++- sys/contrib/dev/iwlwifi/mvm/debugfs.c | 418 ++--- sys/contrib/dev/iwlwifi/mvm/debugfs.h | 1 + sys/contrib/dev/iwlwifi/mvm/ftm-initiator.c | 277 ++- sys/contrib/dev/iwlwifi/mvm/ftm-responder.c | 49 +- sys/contrib/dev/iwlwifi/mvm/fw.c | 522 ++---- sys/contrib/dev/iwlwifi/mvm/link.c | 953 +++++++++- sys/contrib/dev/iwlwifi/mvm/mac-ctxt.c | 117 +- sys/contrib/dev/iwlwifi/mvm/mac80211.c | 1423 +++++++++------ sys/contrib/dev/iwlwifi/mvm/mld-key.c | 42 +- sys/contrib/dev/iwlwifi/mvm/mld-mac.c | 11 +- sys/contrib/dev/iwlwifi/mvm/mld-mac80211.c | 672 ++++--- sys/contrib/dev/iwlwifi/mvm/mld-sta.c | 98 +- sys/contrib/dev/iwlwifi/mvm/mvm.h | 592 ++++-- sys/contrib/dev/iwlwifi/mvm/nvm.c | 19 +- sys/contrib/dev/iwlwifi/mvm/offloading.c | 8 +- sys/contrib/dev/iwlwifi/mvm/ops.c | 319 +++- sys/contrib/dev/iwlwifi/mvm/phy-ctxt.c | 115 +- sys/contrib/dev/iwlwifi/mvm/power.c | 179 +- sys/contrib/dev/iwlwifi/mvm/rfi.c | 8 +- sys/contrib/dev/iwlwifi/mvm/rs-fw.c | 33 +- sys/contrib/dev/iwlwifi/mvm/rx.c | 329 +++- sys/contrib/dev/iwlwifi/mvm/rxmq.c | 473 ++--- sys/contrib/dev/iwlwifi/mvm/scan.c | 694 +++++-- sys/contrib/dev/iwlwifi/mvm/sf.c | 5 +- sys/contrib/dev/iwlwifi/mvm/sta.c | 258 ++- sys/contrib/dev/iwlwifi/mvm/sta.h | 47 +- sys/contrib/dev/iwlwifi/mvm/tdls.c | 39 +- sys/contrib/dev/iwlwifi/mvm/testmode.h | 92 + sys/contrib/dev/iwlwifi/mvm/time-event.c | 470 ++++- sys/contrib/dev/iwlwifi/mvm/time-event.h | 21 +- sys/contrib/dev/iwlwifi/mvm/tt.c | 146 +- sys/contrib/dev/iwlwifi/mvm/tx.c | 325 ++-- sys/contrib/dev/iwlwifi/mvm/utils.c | 99 +- sys/contrib/dev/iwlwifi/pcie/ctxt-info-gen3.c | 42 +- sys/contrib/dev/iwlwifi/pcie/ctxt-info.c | 6 +- sys/contrib/dev/iwlwifi/pcie/drv.c | 211 ++- sys/contrib/dev/iwlwifi/pcie/internal.h | 362 +++- sys/contrib/dev/iwlwifi/pcie/rx.c | 47 +- sys/contrib/dev/iwlwifi/pcie/trans-gen2.c | 29 +- sys/contrib/dev/iwlwifi/pcie/trans.c | 482 ++--- sys/contrib/dev/iwlwifi/pcie/tx-gen2.c | 1191 +++++++++++- sys/contrib/dev/iwlwifi/pcie/tx.c | 1270 +++++++++++-- sys/contrib/dev/iwlwifi/queue/tx.c | 1903 -------------------- sys/contrib/dev/iwlwifi/queue/tx.h | 183 -- sys/contrib/dev/iwlwifi/tests/Makefile | 7 + sys/contrib/dev/iwlwifi/tests/devinfo.c | 78 + sys/contrib/dev/iwlwifi/tests/module.c | 10 + sys/modules/iwlwifi/Makefile | 7 +- usr.sbin/fwget/pci/pci_network_intel | 33 +- 127 files changed, 14821 insertions(+), 9009 deletions(-) diff --git a/share/man/man4/iwlwifi.4 b/share/man/man4/iwlwifi.4 index b4dce91f1ee4..04317c22936f 100644 --- a/share/man/man4/iwlwifi.4 +++ b/share/man/man4/iwlwifi.4 @@ -220,15 +220,19 @@ Intel(R) Wi-Fi 6 AX101 .It Intel(R) Wi-Fi 6 AX203 .It -Intel(R) Wi-Fi 6E AX221 160MHz -.It Intel(R) Wi-Fi 6E AX231 160MHz .It -Intel(R) TBD Bz device +Intel(R) Wi-Fi 7 BE201 320MHz +.It +Intel(R) Wi-Fi 7 BE200 320MHz .It -Intel(R) Wi-Fi 6 AX204 160MHz +Intel(R) Wi-Fi 7 BE202 160MHz .It Intel(R) TBD Sc device +.It +Intel(R) TBD Sc2 device +.It +Intel(R) TBD Sc2f device .\" -------------------------------------------------------------------- .El .Sh SEE ALSO diff --git a/share/man/man4/iwlwififw.4 b/share/man/man4/iwlwififw.4 index debd0cda36b5..491a634e70b5 100644 --- a/share/man/man4/iwlwififw.4 +++ b/share/man/man4/iwlwififw.4 @@ -1,5 +1,5 @@ .\"- -.\" Copyright (c) 2021-2023 The FreeBSD Foundation +.\" Copyright (c) 2021-2024 The FreeBSD Foundation .\" .\" This documentation was written by Bj\xc3\xb6rn Zeeb under sponsorship from .\" the FreeBSD Foundation. @@ -25,7 +25,7 @@ .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" -.Dd September 21, 2023 +.Dd October 12, 2024 .Dt iwlwififw 4 .Os .Sh NAME @@ -43,13 +43,18 @@ models supported by the .Xr iwlwifi 4 driver. .Pp +One can use +.Xr fwget 8 +to install the correct firmware package. +.Pp .Bl -column -compact "Vendor" "Device" "Subv. " "Subd. " "Firmware-Prefix" .It Ar Name .It Ar Vendor Ta Ar Device Ta Ar Subv. Ta Ar Subd. Ta Ar Firmware-Prefix -.\" --------------------------------------------------------------------- -.\" This list is manually generated from a sysctl and post-processing. -.\" Edits will be overwritten on next update. -.\" --------------------------------------------------------------------- +.% --------------------------------------------------------------------- +.% This list is manually generated from a sysctl and post-processing +.% by sys/contrib/dev/iwlwifi/zzz_fw_ports_fwget.sh generating the list. +.% Edits will be overwritten on next update. +.% --------------------------------------------------------------------- .It "" .It Intel(R) Dual Band Wireless AC 7260 .It 0x8086 Ta 0x08b1 Ta any Ta 0x4070 Ta iwlwifi-7260 @@ -735,6 +740,198 @@ driver. .It Intel(R) Dual Band Wireless AC 8265 .It 0x8086 Ta 0x24fd Ta any Ta 0x9074 Ta iwlwifi-8265 .It "" +.It (unknown) +.It 0x8086 Ta 0x2526 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x271b Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x271c Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x30dc Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x31dc Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x9df0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa370 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x02f0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x06f0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x34f0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x3df0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x4df0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x43f0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa0f0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x2723 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x2725 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x7a70 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x7af0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x51f0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x51f1 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x54f0 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x7f70 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x2729 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x7e40 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x2727 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x272d Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x272b Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 000000 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0090 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0094 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0098 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x009c Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x00c0 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x00c4 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x00e0 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x00e4 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x00e8 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x00ec Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0100 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0110 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0114 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0118 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x011c Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0310 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0314 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0510 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x0a10 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x1671 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x1672 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x1771 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x1772 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x1791 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x1792 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x4090 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x40c4 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x40e0 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x4110 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xa840 Ta any Ta 0x4314 Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x7740 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x4d40 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xe440 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xe340 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0xd340 Ta any Ta any Ta (unknown) +.It "" +.It (unknown) +.It 0x8086 Ta 0x6e70 Ta any Ta any Ta (unknown) +.It "" .It Killer (R) Wireless-AC 1550 Wireless Network Adapter (9260NGW) 160MHz .It 0x8086 Ta 0x2526 Ta any Ta 0x1550 Ta iwlwifi-9260-th-b0-jf-b0 .It "" @@ -1290,9 +1487,6 @@ driver. .It Intel(R) Wi-Fi 6E AX211 160MHz .It 0x8086 Ta any Ta any Ta any Ta (null) .It "" -.It Intel(R) Wi-Fi 6E AX221 160MHz -.It 0x8086 Ta any Ta any Ta any Ta (null) -.It "" .It Intel(R) Wi-Fi 6E AX231 160MHz .It 0x8086 Ta any Ta any Ta any Ta (null) .It "" @@ -1311,9 +1505,6 @@ driver. .It Intel(R) Wi-Fi 6E AX411 160MHz .It 0x8086 Ta any Ta any Ta any Ta iwlwifi-so-a0-gf4-a0 .It "" -.It Intel(R) TBD Bz device -.It 0x8086 Ta any Ta any Ta any Ta (null) -.It "" .It Intel(R) Wireless-AC 9560 160MHz .It 0x8086 Ta any Ta any Ta any Ta iwlwifi-so-a0-jf-b0 .It "" @@ -1332,14 +1523,23 @@ driver. .It Intel(R) Wireless-AC 9462 .It 0x8086 Ta any Ta any Ta any Ta iwlwifi-so-a0-jf-b0 .It "" -.It Intel(R) Wi-Fi 6 AX204 160MHz -.It 0x8086 Ta any Ta any Ta any Ta iwlwifi-so-a0-mr-a0 +.It Intel(R) Wi-Fi 7 BE201 320MHz +.It 0x8086 Ta any Ta any Ta any Ta (null) +.It "" +.It Intel(R) Wi-Fi 7 BE200 320MHz +.It 0x8086 Ta any Ta any Ta any Ta (null) .It "" -.It Intel(R) Wi-Fi 6 AX204 160MHz +.It Intel(R) Wi-Fi 7 BE202 160MHz .It 0x8086 Ta any Ta any Ta any Ta (null) .It "" .It Intel(R) TBD Sc device .It 0x8086 Ta any Ta any Ta any Ta (null) +.It "" +.It Intel(R) TBD Sc2 device +.It 0x8086 Ta any Ta any Ta any Ta (null) +.It "" +.It Intel(R) TBD Sc2f device +.It 0x8086 Ta any Ta any Ta any Ta (null) .\" --------------------------------------------------------------------- .El .Pp @@ -1350,10 +1550,14 @@ in the above listing). .Sh FILES A copy of the .Xr iwlwifi 4 -firmware license is installed at -.Em /usr/share/doc/legal/intel_iwlwifi_firmware.LICENCE . +firmware license is installed along with the +.Pa wifi-firmware-iwlwifi-kmod +package or the +.Pa ports/net/wifi-firmware-iwlwifi-kmod +port (or each of its flavors). .Sh SEE ALSO .Xr iwlwifi 4 , +.Xr fwget 8 , .Xr firmware 9 .Sh HISTORY The diff --git a/sys/contrib/dev/iwlwifi/cfg/22000.c b/sys/contrib/dev/iwlwifi/cfg/22000.c index d594694206b3..2e2fcb3807ef 100644 --- a/sys/contrib/dev/iwlwifi/cfg/22000.c +++ b/sys/contrib/dev/iwlwifi/cfg/22000.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* * Copyright (C) 2015-2017 Intel Deutschland GmbH - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2024 Intel Corporation */ #include #include @@ -13,7 +13,7 @@ #define IWL_22000_UCODE_API_MAX 77 /* Lowest firmware API version supported */ -#define IWL_22000_UCODE_API_MIN 50 +#define IWL_22000_UCODE_API_MIN 77 /* NVM versions */ #define IWL_22000_NVM_VERSION 0x0a1d diff --git a/sys/contrib/dev/iwlwifi/cfg/ax210.c b/sys/contrib/dev/iwlwifi/cfg/ax210.c index 8d5f9dce71d5..975e8aed1526 100644 --- a/sys/contrib/dev/iwlwifi/cfg/ax210.c +++ b/sys/contrib/dev/iwlwifi/cfg/ax210.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* * Copyright (C) 2015-2017 Intel Deutschland GmbH - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2024 Intel Corporation */ #include #include @@ -10,10 +10,10 @@ #include "fw/api/txq.h" /* Highest firmware API version supported */ -#define IWL_AX210_UCODE_API_MAX 83 +#define IWL_AX210_UCODE_API_MAX 89 /* Lowest firmware API version supported */ -#define IWL_AX210_UCODE_API_MIN 59 +#define IWL_AX210_UCODE_API_MIN 77 /* NVM versions */ #define IWL_AX210_NVM_VERSION 0x0a1d @@ -299,3 +299,9 @@ MODULE_FIRMWARE(IWL_MA_B_HR_B_FW_MODULE_FIRMWARE(IWL_AX210_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_MA_B_GF_A_FW_MODULE_FIRMWARE(IWL_AX210_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_MA_B_GF4_A_FW_MODULE_FIRMWARE(IWL_AX210_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_MA_B_MR_A_FW_MODULE_FIRMWARE(IWL_AX210_UCODE_API_MAX)); + +MODULE_FIRMWARE("iwlwifi-so-a0-gf-a0.pnvm"); +MODULE_FIRMWARE("iwlwifi-so-a0-gf4-a0.pnvm"); +MODULE_FIRMWARE("iwlwifi-ty-a0-gf-a0.pnvm"); +MODULE_FIRMWARE("iwlwifi-ma-b0-gf-a0.pnvm"); +MODULE_FIRMWARE("iwlwifi-ma-b0-gf4-a0.pnvm"); diff --git a/sys/contrib/dev/iwlwifi/cfg/bz.c b/sys/contrib/dev/iwlwifi/cfg/bz.c index b9893b22e41d..3b6b8b410be5 100644 --- a/sys/contrib/dev/iwlwifi/cfg/bz.c +++ b/sys/contrib/dev/iwlwifi/cfg/bz.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* * Copyright (C) 2015-2017 Intel Deutschland GmbH - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2024 Intel Corporation */ #include #include @@ -10,10 +10,10 @@ #include "fw/api/txq.h" /* Highest firmware API version supported */ -#define IWL_BZ_UCODE_API_MAX 83 +#define IWL_BZ_UCODE_API_MAX 92 /* Lowest firmware API version supported */ -#define IWL_BZ_UCODE_API_MIN 80 +#define IWL_BZ_UCODE_API_MIN 90 /* NVM versions */ #define IWL_BZ_NVM_VERSION 0x0a1d @@ -129,17 +129,11 @@ static const struct iwl_base_params iwl_bz_base_params = { IWL_DEVICE_BZ_COMMON, \ .ht_params = &iwl_22000_ht_params -#define IWL_DEVICE_GL_A \ - IWL_DEVICE_BZ_COMMON, \ - .ht_params = &iwl_gl_a_ht_params - /* - * If the device doesn't support HE, no need to have that many buffers. - * These sizes were picked according to 8 MSDUs inside 256 A-MSDUs in an + * This size was picked according to 8 MSDUs inside 512 A-MSDUs in an * A-MPDU, with additional overhead to account for processing time. */ -#define IWL_NUM_RBDS_NON_HE 512 -#define IWL_NUM_RBDS_BZ_HE 4096 +#define IWL_NUM_RBDS_BZ_EHT (512 * 16) const struct iwl_cfg_trans_params iwl_bz_trans_cfg = { .device_family = IWL_DEVICE_FAMILY_BZ, @@ -155,21 +149,24 @@ const struct iwl_cfg_trans_params iwl_bz_trans_cfg = { }; const char iwl_bz_name[] = "Intel(R) TBD Bz device"; +const char iwl_fm_name[] = "Intel(R) Wi-Fi 7 BE201 320MHz"; +const char iwl_gl_name[] = "Intel(R) Wi-Fi 7 BE200 320MHz"; +const char iwl_mtp_name[] = "Intel(R) Wi-Fi 7 BE202 160MHz"; const struct iwl_cfg iwl_cfg_bz = { .fw_name_mac = "bz", .uhb_supported = true, IWL_DEVICE_BZ, - .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM, - .num_rbds = IWL_NUM_RBDS_BZ_HE, + .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, + .num_rbds = IWL_NUM_RBDS_BZ_EHT, }; const struct iwl_cfg iwl_cfg_gl = { .fw_name_mac = "gl", .uhb_supported = true, IWL_DEVICE_BZ, - .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM, - .num_rbds = IWL_NUM_RBDS_BZ_HE, + .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, + .num_rbds = IWL_NUM_RBDS_BZ_EHT, }; @@ -181,3 +178,5 @@ MODULE_FIRMWARE(IWL_BZ_A_FM_C_MODULE_FIRMWARE(IWL_BZ_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_BZ_A_FM4_B_MODULE_FIRMWARE(IWL_BZ_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_GL_B_FM_B_MODULE_FIRMWARE(IWL_BZ_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_GL_C_FM_C_MODULE_FIRMWARE(IWL_BZ_UCODE_API_MAX)); + +MODULE_FIRMWARE("iwlwifi-gl-c0-fm-c0.pnvm"); diff --git a/sys/contrib/dev/iwlwifi/cfg/sc.c b/sys/contrib/dev/iwlwifi/cfg/sc.c index ad283fd22e2a..4ccb0b7bdc20 100644 --- a/sys/contrib/dev/iwlwifi/cfg/sc.c +++ b/sys/contrib/dev/iwlwifi/cfg/sc.c @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* * Copyright (C) 2015-2017 Intel Deutschland GmbH - * Copyright (C) 2018-2023 Intel Corporation + * Copyright (C) 2018-2024 Intel Corporation */ #include #include @@ -10,10 +10,10 @@ #include "fw/api/txq.h" /* Highest firmware API version supported */ -#define IWL_SC_UCODE_API_MAX 83 +#define IWL_SC_UCODE_API_MAX 92 /* Lowest firmware API version supported */ -#define IWL_SC_UCODE_API_MIN 82 +#define IWL_SC_UCODE_API_MIN 90 /* NVM versions */ #define IWL_SC_NVM_VERSION 0x0a1d @@ -33,6 +33,10 @@ #define IWL_SC_A_GF_A_FW_PRE "iwlwifi-sc-a0-gf-a0" #define IWL_SC_A_GF4_A_FW_PRE "iwlwifi-sc-a0-gf4-a0" #define IWL_SC_A_WH_A_FW_PRE "iwlwifi-sc-a0-wh-a0" +#define IWL_SC2_A_FM_C_FW_PRE "iwlwifi-sc2-a0-fm-c0" +#define IWL_SC2_A_WH_A_FW_PRE "iwlwifi-sc2-a0-wh-a0" +#define IWL_SC2F_A_FM_C_FW_PRE "iwlwifi-sc2f-a0-fm-c0" +#define IWL_SC2F_A_WH_A_FW_PRE "iwlwifi-sc2f-a0-wh-a0" #define IWL_SC_A_FM_B_FW_MODULE_FIRMWARE(api) \ IWL_SC_A_FM_B_FW_PRE "-" __stringify(api) ".ucode" @@ -48,6 +52,14 @@ IWL_SC_A_GF4_A_FW_PRE "-" __stringify(api) ".ucode" #define IWL_SC_A_WH_A_FW_MODULE_FIRMWARE(api) \ IWL_SC_A_WH_A_FW_PRE "-" __stringify(api) ".ucode" +#define IWL_SC2_A_FM_C_FW_MODULE_FIRMWARE(api) \ + IWL_SC2_A_FM_C_FW_PRE "-" __stringify(api) ".ucode" +#define IWL_SC2_A_WH_A_FW_MODULE_FIRMWARE(api) \ + IWL_SC2_A_WH_A_FW_PRE "-" __stringify(api) ".ucode" +#define IWL_SC2F_A_FM_C_FW_MODULE_FIRMWARE(api) \ + IWL_SC2F_A_FM_C_FW_PRE "-" __stringify(api) ".ucode" +#define IWL_SC2F_A_WH_A_FW_MODULE_FIRMWARE(api) \ + IWL_SC2F_A_WH_A_FW_PRE "-" __stringify(api) ".ucode" static const struct iwl_base_params iwl_sc_base_params = { .eeprom_size = OTP_LOW_IMAGE_SIZE_32K, @@ -124,15 +136,16 @@ static const struct iwl_base_params iwl_sc_base_params = { #define IWL_DEVICE_SC \ IWL_DEVICE_BZ_COMMON, \ + .uhb_supported = true, \ + .features = IWL_TX_CSUM_NETIF_FLAGS | NETIF_F_RXCSUM, \ + .num_rbds = IWL_NUM_RBDS_SC_EHT, \ .ht_params = &iwl_22000_ht_params /* - * If the device doesn't support HE, no need to have that many buffers. - * These sizes were picked according to 8 MSDUs inside 256 A-MSDUs in an + * This size was picked according to 8 MSDUs inside 512 A-MSDUs in an * A-MPDU, with additional overhead to account for processing time. */ -#define IWL_NUM_RBDS_NON_HE 512 -#define IWL_NUM_RBDS_SC_HE 4096 +#define IWL_NUM_RBDS_SC_EHT (512 * 16) const struct iwl_cfg_trans_params iwl_sc_trans_cfg = { .device_family = IWL_DEVICE_FAMILY_SC, @@ -151,10 +164,21 @@ const char iwl_sc_name[] = "Intel(R) TBD Sc device"; const struct iwl_cfg iwl_cfg_sc = { .fw_name_mac = "sc", - .uhb_supported = true, IWL_DEVICE_SC, - .features = IWL_TX_CSUM_NETIF_FLAGS_BZ | NETIF_F_RXCSUM, - .num_rbds = IWL_NUM_RBDS_SC_HE, +}; + +const char iwl_sc2_name[] = "Intel(R) TBD Sc2 device"; + +const struct iwl_cfg iwl_cfg_sc2 = { + .fw_name_mac = "sc2", + IWL_DEVICE_SC, +}; + +const char iwl_sc2f_name[] = "Intel(R) TBD Sc2f device"; + +const struct iwl_cfg iwl_cfg_sc2f = { + .fw_name_mac = "sc2f", + IWL_DEVICE_SC, }; MODULE_FIRMWARE(IWL_SC_A_FM_B_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); @@ -164,3 +188,7 @@ MODULE_FIRMWARE(IWL_SC_A_HR_B_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_SC_A_GF_A_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_SC_A_GF4_A_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); MODULE_FIRMWARE(IWL_SC_A_WH_A_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); +MODULE_FIRMWARE(IWL_SC2_A_FM_C_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); +MODULE_FIRMWARE(IWL_SC2_A_WH_A_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); +MODULE_FIRMWARE(IWL_SC2F_A_FM_C_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); +MODULE_FIRMWARE(IWL_SC2F_A_WH_A_FW_MODULE_FIRMWARE(IWL_SC_UCODE_API_MAX)); diff --git a/sys/contrib/dev/iwlwifi/fw/acpi.c b/sys/contrib/dev/iwlwifi/fw/acpi.c index dfe8357036eb..8c8880b44827 100644 --- a/sys/contrib/dev/iwlwifi/fw/acpi.c +++ b/sys/contrib/dev/iwlwifi/fw/acpi.c @@ -1,10 +1,9 @@ // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause /* * Copyright (C) 2017 Intel Deutschland GmbH - * Copyright (C) 2019-2023 Intel Corporation + * Copyright (C) 2019-2024 Intel Corporation */ #include -#include #include "iwl-drv.h" #include "iwl-debug.h" #include "acpi.h" @@ -13,63 +12,22 @@ const guid_t iwl_guid = GUID_INIT(0xF21202BF, 0x8F78, 0x4DC6, 0xA5, 0xB3, 0x1F, 0x73, 0x8E, 0x28, 0x5A, 0xDE); -IWL_EXPORT_SYMBOL(iwl_guid); -const guid_t iwl_rfi_guid = GUID_INIT(0x7266172C, 0x220B, 0x4B29, - 0x81, 0x4F, 0x75, 0xE4, - 0xDD, 0x26, 0xB5, 0xFD); -IWL_EXPORT_SYMBOL(iwl_rfi_guid); - -static const struct dmi_system_id dmi_ppag_approved_list[] = { - { .ident = "HP", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "HP"), - }, - }, - { .ident = "SAMSUNG", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "SAMSUNG ELECTRONICS CO., LTD"), - }, - }, - { .ident = "MSFT", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), - }, - }, - { .ident = "ASUS", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."), - }, - }, - { .ident = "GOOGLE-HP", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Google"), - DMI_MATCH(DMI_BOARD_VENDOR, "HP"), - }, - }, - { .ident = "GOOGLE-ASUS", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Google"), - DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTek COMPUTER INC."), - }, - }, - { .ident = "GOOGLE-SAMSUNG", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Google"), - DMI_MATCH(DMI_BOARD_VENDOR, "SAMSUNG ELECTRONICS CO., LTD"), - }, - }, - { .ident = "DELL", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), - }, - }, - { .ident = "DELL", - .matches = { - DMI_MATCH(DMI_SYS_VENDOR, "Alienware"), - }, - }, - {} +static const size_t acpi_dsm_size[DSM_FUNC_NUM_FUNCS] = { + [DSM_FUNC_QUERY] = sizeof(u32), + [DSM_FUNC_DISABLE_SRD] = sizeof(u8), + [DSM_FUNC_ENABLE_INDONESIA_5G2] = sizeof(u8), + [DSM_FUNC_ENABLE_6E] = sizeof(u32), + [DSM_FUNC_REGULATORY_CONFIG] = sizeof(u32), + /* Not supported in driver */ + [5] = (size_t)0, + [DSM_FUNC_11AX_ENABLEMENT] = sizeof(u32), + [DSM_FUNC_ENABLE_UNII4_CHAN] = sizeof(u32), + [DSM_FUNC_ACTIVATE_CHANNEL] = sizeof(u32), + [DSM_FUNC_FORCE_DISABLE_CHANNELS] = sizeof(u32), + [DSM_FUNC_ENERGY_DETECTION_THRESHOLD] = sizeof(u32), + [DSM_FUNC_RFI_CONFIG] = sizeof(u32), + [DSM_FUNC_ENABLE_11BE] = sizeof(u32), }; static int iwl_acpi_get_handle(struct device *dev, acpi_string method, @@ -195,46 +153,41 @@ out: } /* - * Evaluate a DSM with no arguments and a u8 return value, + * This function receives a DSM function number, calculates its expected size + * according to Intel BIOS spec, and fills in the value in a 32-bit field. + * In case the expected size is smaller than 32-bit, padding will be added. */ -int iwl_acpi_get_dsm_u8(struct device *dev, int rev, int func, - const guid_t *guid, u8 *value) +int iwl_acpi_get_dsm(struct iwl_fw_runtime *fwrt, + enum iwl_dsm_funcs func, u32 *value) { + size_t expected_size; + u64 tmp; int ret; - u64 val; - ret = iwl_acpi_get_dsm_integer(dev, rev, func, - guid, &val, sizeof(u8)); + BUILD_BUG_ON(ARRAY_SIZE(acpi_dsm_size) != DSM_FUNC_NUM_FUNCS); - if (ret < 0) - return ret; - - /* cast val (u64) to be u8 */ - *value = (u8)val; - return 0; -} -IWL_EXPORT_SYMBOL(iwl_acpi_get_dsm_u8); + if (WARN_ON(func >= ARRAY_SIZE(acpi_dsm_size))) + return -EINVAL; -/* - * Evaluate a DSM with no arguments and a u32 return value, - */ -int iwl_acpi_get_dsm_u32(struct device *dev, int rev, int func, - const guid_t *guid, u32 *value) -{ - int ret; - u64 val; + expected_size = acpi_dsm_size[func]; - ret = iwl_acpi_get_dsm_integer(dev, rev, func, - guid, &val, sizeof(u32)); + /* Currently all ACPI DSMs are either 8-bit or 32-bit */ + if (expected_size != sizeof(u8) && expected_size != sizeof(u32)) + return -EOPNOTSUPP; - if (ret < 0) + ret = iwl_acpi_get_dsm_integer(fwrt->dev, ACPI_DSM_REV, func, + &iwl_guid, &tmp, expected_size); + if (ret) return ret; - /* cast val (u64) to be u32 */ - *value = (u32)val; + if ((expected_size == sizeof(u8) && tmp != (u8)tmp) || + (expected_size == sizeof(u32) && tmp != (u32)tmp)) + IWL_DEBUG_RADIO(fwrt, + "DSM value overflows the expected size, truncating\n"); + *value = (u32)tmp; + return 0; } -IWL_EXPORT_SYMBOL(iwl_acpi_get_dsm_u32); static union acpi_object * iwl_acpi_get_wifi_pkg_range(struct device *dev, @@ -302,9 +255,8 @@ iwl_acpi_get_wifi_pkg(struct device *dev, tbl_rev); } - -int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, - union iwl_tas_config_cmd *cmd, int fw_ver) +int iwl_acpi_get_tas_table(struct iwl_fw_runtime *fwrt, + struct iwl_tas_data *tas_data) { union acpi_object *wifi_pkg, *data; int ret, tbl_rev, i, block_list_size, enabled; @@ -326,22 +278,9 @@ int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, ACPI_TYPE_INTEGER) { u32 tas_selection = (u32)wifi_pkg->package.elements[1].integer.value; - u16 override_iec = - (tas_selection & ACPI_WTAS_OVERRIDE_IEC_MSK) >> ACPI_WTAS_OVERRIDE_IEC_POS; - u16 enabled_iec = (tas_selection & ACPI_WTAS_ENABLE_IEC_MSK) >> - ACPI_WTAS_ENABLE_IEC_POS; - u8 usa_tas_uhb = (tas_selection & ACPI_WTAS_USA_UHB_MSK) >> ACPI_WTAS_USA_UHB_POS; - - enabled = tas_selection & ACPI_WTAS_ENABLED_MSK; - if (fw_ver <= 3) { - cmd->v3.override_tas_iec = cpu_to_le16(override_iec); - cmd->v3.enable_tas_iec = cpu_to_le16(enabled_iec); - } else { - cmd->v4.usa_tas_uhb_allowed = usa_tas_uhb; - cmd->v4.override_tas_iec = (u8)override_iec; - cmd->v4.enable_tas_iec = (u8)enabled_iec; - } + enabled = iwl_parse_tas_selection(fwrt, tas_data, + tas_selection); } else if (tbl_rev == 0 && wifi_pkg->package.elements[1].type == ACPI_TYPE_INTEGER) { @@ -360,22 +299,16 @@ int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, IWL_DEBUG_RADIO(fwrt, "Reading TAS table revision %d\n", tbl_rev); if (wifi_pkg->package.elements[2].type != ACPI_TYPE_INTEGER || wifi_pkg->package.elements[2].integer.value > - APCI_WTAS_BLACK_LIST_MAX) { + IWL_WTAS_BLACK_LIST_MAX) { IWL_DEBUG_RADIO(fwrt, "TAS invalid array size %llu\n", wifi_pkg->package.elements[2].integer.value); ret = -EINVAL; goto out_free; } block_list_size = wifi_pkg->package.elements[2].integer.value; - cmd->v4.block_list_size = cpu_to_le32(block_list_size); + tas_data->block_list_size = cpu_to_le32(block_list_size); IWL_DEBUG_RADIO(fwrt, "TAS array size %u\n", block_list_size); - if (block_list_size > APCI_WTAS_BLACK_LIST_MAX) { - IWL_DEBUG_RADIO(fwrt, "TAS invalid array size value %u\n", - block_list_size); - ret = -EINVAL; - goto out_free; - } for (i = 0; i < block_list_size; i++) { u32 country; @@ -389,7 +322,7 @@ int iwl_acpi_get_tas(struct iwl_fw_runtime *fwrt, } country = wifi_pkg->package.elements[3 + i].integer.value; - cmd->v4.block_list_array[i] = cpu_to_le32(country); + tas_data->block_list_array[i] = cpu_to_le32(country); IWL_DEBUG_RADIO(fwrt, "TAS block list country %d\n", country); } @@ -398,19 +331,19 @@ out_free: kfree(data); return ret; } -IWL_EXPORT_SYMBOL(iwl_acpi_get_tas); -int iwl_acpi_get_mcc(struct device *dev, char *mcc) +int iwl_acpi_get_mcc(struct iwl_fw_runtime *fwrt, char *mcc) { union acpi_object *wifi_pkg, *data; u32 mcc_val; int ret, tbl_rev; - data = iwl_acpi_get_object(dev, ACPI_WRDD_METHOD); + data = iwl_acpi_get_object(fwrt->dev, ACPI_WRDD_METHOD); if (IS_ERR(data)) return PTR_ERR(data); - wifi_pkg = iwl_acpi_get_wifi_pkg(dev, data, ACPI_WRDD_WIFI_DATA_SIZE, + wifi_pkg = iwl_acpi_get_wifi_pkg(fwrt->dev, data, + ACPI_WRDD_WIFI_DATA_SIZE, &tbl_rev); *** 36914 LINES SKIPPED ***