Phoronix reported (March 2020) that the FreeBSD Foundation would sponsor 802.11ac wireless work (I think based on a Tweet). I started working on the Intel driver and wireless in April 2020 (with some gaps). At that point in time FreeBSD had (and still has) iwn(4) and iwm(4) support for various (older) Intel chipsets. There were various requests on the mailing lists and the bug tracking system for support for newer chipsets. There were also requests for drivers from other vendors. I did not feel that FreeBSD would have the man power at that point to write (or port and keep up-to-date from another BSD) native drivers for all the wireless cards (often exceeding the size of a wired driver by a magnitude in size these days). We also had no-one working on both sides of drivers anymore (having vendor resources or firmware access) and hence are dependent on public information to write drivers. This lead to multiple points:
Upfront I would love to thank the FreeBSD Foundation for sponsoring most of this project. I would also love to thank everyone who has reviewed changes, did initial testing, helped with drm-kmod, helped in various other ways, answered questions, encouraged, or patiently waited for any results or running code. – BjoernZeeb, 20210619
The iwlwifi driver based on upstream Linux iwlwifi-next repository along with the firmware from linux-firmware.git. This driver was already updated multiple times during the last year of development pulling in support for newer chipsets, bugfixes, and enhancements. Updates were on the order of 20-90 minutes. We will keep updating as iwlwifi moves forward.
Projects funded by The FreeBSD Foundation:
devmatch_blocklist="if_iwlwifi" to rc.conf.kld_list="${kld_list} if_iwlwifi" in rc.conf is the best way currently.iwm(4) wireless card, can I try the new driver but fallback to iwm(4) for daily use for now? A: Yes! See devmatch question above and Testing section below.iwn(4) wireless card, can I try the new driver? A: No. The dwm support of the iwlwifi driver is GPL-only code and thus not supported.if_iwlwifi.ko currently is not auto-loading. In case something goes wrong the next boot will not leave you in an endless loop of problems. Auto-loading support is in Phabricator and will be re-added at a later time for all LinuxKPI based drivers.lkpi_ic_getradiocaps: Adding chan ... returned error 55 messages. Should I be concerned? A: kenv compat.linuxkpi.iwlwifi_disable_msix=1 before loading the driver inside the guest or add the entry to loader.conf: compat.linuxkpi.iwlwifi_disable_msix=1).)–kenv compat.linuxkpi.debug_napi=0x1000 prior to loading the kernel modules or sysctl compat.linuxkpi.debug_napi=0x1000 if the linuxkpi module is already loaded and see if that helps. Please report back!iwx(4) driver from OpenBSD? A: There were other people looking into this. When I started there was limited support for various chipsets already supported by iwlwifi, the code was highly BSD-ified and mangled so that comparing to the original code was not longer possible in an automated way and it would have helped any other of the goals listed above and it would have added another driver to change and support (in addition to iwm).dmesg -a into a file and email it to me. Note: the real error usually happens before the firmware traceback. Try to share that too please.dmesg -a | tail -10 for information. You are likely missing symbols, which means your tree is too old or your are running a custom kernel config and the code is missing a dependency. This should not happen if you build a GENERIC in-tree from FreeBSD git.Instead of tracking each bug here, there is a 'meta-bug' in Bugzilla which depends on all iwlwifi PRs. Please check those first before reporting a new PR.
Please include:
Please allow me some time to reply and help; I am not doing this full-time but I will try to acknowledge email as soon as I can.
src/ tree.
In order to help debugging it is advisable to add the following lines to /boot/loader.conf or /boot/loader.conf.local
boot_verbose="YES" kern.msgbufsize=1146880
This will help making the kernel and drivers more verbose and massively increasing the kernel message buffer to keep more information.
You want to setup wireless configuration in /etc/rc.conf and probably /etc/wpa_supplicant.conf if you have not done so already.
There is some information in the FreeBSD Handbook to help you getting started.
Here is a short sample I copied from a test setup. For rc.conf I assume a wlan99 (while most people will likely use wlan0 or wlan1). You will have to replace the XX bits with something suitable to your location. You can also enable some wlan debugging so we can try to see what happened in case something goes wrong. If you have your own configuration already please add the wlandebug line in case you experience problems. Feel free to add/remove flags as you see fit or ask if in doubt. `man wlandebug' has a list of all flags and descriptions for each.
wlans_iwlwifi0="wlan99" create_args_wlan99="wlanmode sta regdomain XXXX country XX" #wlandebug_wlan99="+state +node +auth +assoc +dot1xsm +wpa +scan" ifconfig_wlan99="WPA SYNCDHCP" ifconfig_wlan99_ipv6="inet6 accept_rtadv"
It is only necessary to rebuild the kernel, not userland at this point.
Check the FreeBSD Handbook:: Kernel Configuration for instructions.
Reboot your system to the newly installed kernel.
You may see a lot more messages on the screen due to “boot_verbose” being on, which you may not be used to.
In a normal setup the driver will be auto-loaded for you nowadays and you do not have to do anything.
Should debugging require manual intervention here are the (old) notes from the early days which can still be useful:
(Optional) Sometimes it makes sense to disable auto-loading of the driver. In that case you may want to clear the kernel message buffer in order to minimize logs running sysctl kern.msgbuf_clear=1.
If not auto-loaded already, kldload /boot/kernel/if_iwlwifi.ko should load the driver and you should see some information scrolling on the console.
(If you are using iwm(4) please see below at this point.)
A sysctl net.wlan.devices should now list iwlwifi0 as a possible wireless device.
If it does and you have not yet automatically gotten a wlan<n> device (see ifconfig -l) you can now run sh /etc/rc.d/netif start wlan99 (or wlan0 or wlan1 depending on your setup).
Depending on your configuration WPA and then DCHPv4 may run, IPv6 will autoconfigure and you should see the output from ifocnfig about the wireless device.
You can test and see what is working. At this point please do not expect a fully-functional device giving you 11ac. Should anything go wrong, simply toggling the interface or unloading and reloading the driver will likely not be enough and you will have to reboot.
If you get to this point, please email me a sample of your log and the pciconf -lv lines for the iwlwifi0 entry so we can add the information to the table below.
(Contact details can be found on this page)
If you have an iwm(4) supported device, you will need to detach the iwm(4) and attach iwlwifi.
Please check pciconf -l for your wireless device and remember (or copy and paste later) the first bit.
% pciconf -l | grep iwm iwm0@pci0:3:0:0: class=0x028000 rev=0x78 hdr=0x00 vendor=0x8086 device=0x24fd subvendor=0x8086 subdevice=0x0010
After loading the iwlwifi kernel module run the following commands (replacing the device selector with what you found for your computer):
devctl detach pci0:3:0:0 devctl set driver pci0:3:0:0 iwlwifi
That should do the trick.
For a full list of supported chipsets see here.
Which chipsets have been tested? This list is here from the early days of driver upbringing and testing and is no longer maintained actively. Feel free to add your card with status and a possible reference to a bsd-hardware.info report or a reference of a posting to public wireless list.
| Card | PCI IDs | Current state |
| 8000/AC 8265 | 0x8086/0x24fd/0x8086/0x0010 | 36.ca7b901d.0 8265-36.ucode, Intel(R) Dual Band Wireless AC 8265, REV=0x230 |
| 8000/AC 8265 | 0x8086/0x24fd/0x8086/0x0010 | 36.ca7b901d.0 8265-36.ucode, Intel(R) Dual Band Wireless AC 8265, REV=0x230, works so far (20210923) |
| 8000/AC 8265 | 0x8086/0x24fd/0x8086/0x1010 | 36.ca7b901d.0 8265-36.ucode, Intel(R) Dual Band Wireless AC 8265, REV=0x230, ok on amd64 (own, 20211004) |
| 9000/AC 9260 | 0x8086/0x2526/0x8086/0x0014 | |
| 9000/AC 9560 | 0x8086/0x9df0/?/? | 46.6b541b68.0 9000-pu-b0-jf-b0-46.ucode, Intel(R) Wireless-AC 9560 160MHz, REV=0x318, failed to scan (wpa issue?), (20210909 freebsd-wireless) |
| 22000/AX200 | 0x8086/0x2723/0x8086/0x0084 | 63.c04f3485.0 cc-a0-63.ucode, Intel(R) Wi-Fi 6 AX200 160MHz, REV=0x340, FW assert (20210816) |
| 22000/AX200 | 0x8086/0x2723/0x1a56/0x1653 | |
| 22000/AX200 | 0x8086/0x2723/0x1a56/0x1654 | 63.c04f3485.0 cc-a0-63.ucode, Killer, Intel(R) Wi-Fi 6 AX200 160MHz, REV=0x340, FW assert |
| 22000/AX200 | 0x8086/0x34f0/0x1a56/0x1651 | 63.c04f3485.0 Qu-c0-hr-b0-63.ucode, Intel(R) Wi-Fi 6 AX203, REV=0x338, Killer Wi-Fi 6 AX1650i 160MHz Wireless Network Adapter (201NGW) |
| 22000/AC 9560 | 0x8086/0x02f0/0x8086/0x0034 | 63.c04f3485.0 QuZ-a0-jf-b0-63.ucode Intel(R) Wireless-AC 9560 160MHz, REV=0x35, scanning does not find anything (email: 20210911) |
| 22000/AX201 | 0x8086/0x02f0/0x8086/0x0070 | 63.c04f3485.0 QuZ-a0-hr-b0-63.ucode, Intel(R) Wi-Fi 6 AX201 160MHz, REV=0x354, works as much as compat framework provides it seems (email: 20210909, stable/13) |
| 20000/AX201 | 0x8086/0x06f0/0x8086/0x0074 | 63.c04f3485.0 QuZ-a0-hr-b0-63.ucode, Intel(R) Wi-Fi 6 AX201 160MHz, REV=0x354, works (20210923 freebsd-wireless) |
| 20000/AX201 | 0x8086/0x02f0/0x8086/0x0074 | 63.c04f3485.0 QuZ-a0-hr-b0-63.ucode, Intel(R) Wi-Fi 6 AX201 160MHz, REV=0x354, scanning ok, fw assert on wpa (20211006) |
| 22000/AX201 | 0x8086/0x06f0/0x8086/0x4070 | quz_hr, Comet Lake PCH CNVi WiFi, works as much as the compat framework works. |
| 22000/AX201 | 0x8086/0xa0f0/0x8086/0x0070 | 63.c04f3485.0 QuZ-a0-hr-b0-63.ucode, Detected Intel(R) Wi-Fi 6 AX201 160MHz, REV=0x354, https://bsd-hardware.info/?probe=ad4f0d967d (20211117) |
| 22000/AX210 | 0x8086/0x2725/0x8086/0x0024 | 63.c04f3485.0 ty-a0-gf-a0-63.ucode, Intel(R) Wi-Fi 6 AX210 160MHz, REV=0x420. Wifi 6E (20211022) |
To keep track and references to some problems or other significant changes during development / testing: