iwlwifi: adjust driver description
Adjust the module driver descriptions for mvm and mld to make it clear
that this is not a driver for Linux but a Linux-based driver for FreeBSD.
Cleanup surroundings.
Sponsored by: The FreeBSD Foundation
(cherry picked from commit 782fe2f8d90488a61ecdbe1d4b245900a88bee56)
iwlwifi: mld: add LINUXKPI_PARAM_PREFIX
Add a LINUXKPI_PARAM_PREFIX to mld to properly export the
power_scheme module_param (sysctl). This is especially needed given
mvm has the same parameter and we need to avoid a clash.
Sponsored by: The FreeBSD Foundation
(cherry picked from commit 7db8503bda2724ae145475c3260d581bb98613ad)
iwlwifi: mld: move module_init() to SI_ORDER_SECOND
In FreeBSD the iwlwifi driver is a single kernel module.
As for iwlwifi/mvm we need to make sure the common "iwlwifi drv" code
is initialized before trying to register the mld sub-driver
in order for lists, etc. in the registration code to be initialized.
We do this by using an extended (FreeBSD specific) version of
module_init which overrides the order parameter of the SYSINIT.
Otherwise we can randomly (depending on SYSINIT run order) run into
a NULL pointer deref panic.
Sponsored by: The FreeBSD Foundation
PR: 291120
(cherry picked from commit 551c4cb74a807ceae55288bf273f5cfeb37c7c91)
LinuxKPI: 802.11: change teardown order of disassoc and sta rm
In lkpi_sta_auth_to_scan() we remove the sta from the firmware
for everything supporting (*sta_state).
We used to run into issues here with iwlwifi in that we had to
use a specific order: set vif->cfg.assoc = false, .aid = 0,
then remove the sta, and then send the mac update as otherwise
we would either have the sta silently removed (if we run
(*bss_info_change) first and fail then or silently not have the
sta removed and upon sta add we would trigger the fw crash.
The order of events seem to have changed now and especially BE200
(iwlwifi/mld) is picky about this and would crash the firmware with
something like:
iwlwifi0: 0x20103311 | ADVANCED_SYSASSERT
iwlwifi0: 0x00000000 | umac branchlink1
iwlwifi0: 0xC00808AA | umac branchlink2
[22 lines not shown]
LinuxKPI: 802.11: split (*bss_info_changed) up for more modern drivers
With the advent of MLO some of the updates (*bss_info_changed) would
have done are not per-link. This had (*vif_cfg_changed) and
(*link_conf_changed) introduced which are used by iwlwifi, rtw89,
select mt76 drivers, and ath12k currently it seems.
A driver normally only supports on or the other set.
Factor out the call to (*bss_info_changed) into an internal function.
There split the options up depending on whether they are for the
vif or a link and leave a fallback to (*bss_info_changed) for older
drivers.
Add the mac80211 ops implementations for the two new calls along with
a currently unused backup option for (*bss_info_changed) for each
as I assume we will eventually call the directly rather than from the
internal wrapper function.
Sponsored by: The FreeBSD Foundation
[2 lines not shown]
LinuxKPI: pass attrs in more places in dma-mapping.h
Various macros (dma_map_sg_attrs, dma_unmap_sg_attrs,
dma_map_single_attrs, and dma_unmap_single_attrs) currently supress
passing on the attrs argument. Their implementation (even though at
times still marked the argument __unused; we remove that) have long
gained support for handling the argument.
With ofed fixed (5edf24aac1d09), pass the argument through so that
other drivers using these functions may hopefully work just a bit
better as well.
Sponsored by: The FreeBSD Foundation
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D55391
(cherry picked from commit 31c3cba807839a1a16e6f4bca91d530d9342b61a)
iwlwifi: fixup link_id for certain cases
In iwl_mvm_mld_vif_cfg_changed_station() if we do not do MLO (which we
do not do yet at all), dtim_period is not yet set but asssoc is
(our common case) the link_id can become -1 as active_links is always
0 for the non-MLO case.
This leads to logging of a WARN;
Invalid link ID for session protection: 4294967295
Fixup the link_id if it is -1 to be 0. This is the deflink link_id so
that should always be fine in this case.
For Linux 7.0-rc2 that code is already gone so this is a local temporary
stopgap measure for the mvm-mld devices (e.g., some AX210).
Sponosred by: The FreeBSD Foundation
(cherry picked from commit 760e0a18d3033152899fbd0e3f587dfe3c28d6bf)
net80211: sta: use IEEE80211_STATUS_SUCCESS instead of magic 0
Rather than using the status != 0 check use the way more descriptive
status != IEEE80211_STATUS_SUCCESS definition. This makes it a lot
more clear what is checked here. While here add a comment in case
aof the (Re)Assoc Resp failure as we do not update state in that case
but rely on a timeout which will bounce us back to State 1
(cf. 802.11-2024, Figure 11-23) which means SCAN in our case, rather
than possibly moving us back to AUTH. We will likely have to revisit
this when SAE hits the tree.
Sponsored by: The FreeBSD Foundation
Reviewed by: adrian
Differential Revision: https://reviews.freebsd.org/D55643
(cherry picked from commit 9b03cc2a70e4b6354c5f5b90e4c51b850b6b1dd2)
LinuxKPI: 802.11: improve prep_tx_info
Over time struct ieee80211_prep_tx_info has grown further fields.
One which is becoming mandatory is the subtype (of the mgmt frame).
iwlwifi(mld) has a WARN for it if it does not match, so we now have
to set this for proper operation. In addition we are tyring to improve
the situation of setting/unsetting (prepare_tx/complete_tx) in various
states and cleanup the use of other fields but link_id which we now
leave as a marker for the future everywhere.
The general problem we are facing is that our hook surface in this case
is the state machine but likely would have to be tx/rx mgmt frames but
we would alos have to driver the TX queues from there which is tricky.
The long-term answer is to change net80211.
Further the hardware flag DEAUTH_NEED_MGD_TX_PREP is dead and was
removed again in favour of leting drivers deal with it. iwlwifi(mvm)
likely being the only driver which ever used this.
Sponsored by: The FreeBSD Foundation
[2 lines not shown]
dpaa2: improve error messages and log requested cluster size
If m_getjcl() fails we want to know the size we requested in order to
have a chance to evaluate the problem better.
Reviewed by: tuexen
Differential Revision: https://reviews.freebsd.org/D55555
(cherry picked from commit c3577fcf3fd0494cc992021d4debbca09241a49e)
LinuxKPI: 802.11: move linuxkpi_ieee80211_handle_wake_tx_queue()
No functional changes. Just moved the function within the file.
Sponsored by: The FreeBSD Foundation
(cherry picked from commit 3d3303b756ad4ee3ae520f6d07df6978d049a871)
netinet6: Fix memory leak on auto_linklocal
release the refcount of link-local prefix information to ensure
it gets freed when the address is deleted.
Reviewed By: zlei, ivy
MFC after: 1 week
Differential Revision: https://reviews.freebsd.org/D55593
(cherry picked from commit b55bffeaaf9bae5dc7aa21eae441d89c999ebab8)