Commit dbbda7dd authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

Merge tag 'wireless-next-2026-03-04' of...

Merge tag 'wireless-next-2026-03-04' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next

Johannes Berg says:

====================
Notable features this time:
 - cfg80211/mac80211
   - finished assoc frame encryption/EPPKE/802.1X-over-auth
     (also hwsim)
   - radar detection improvements
   - 6 GHz incumbent signal detection APIs
   - multi-link support for FILS, probe response
     templates and client probling
 - ath12k:
   - monitor mode support on IPQ5332
   - basic hwmon temperature reporting

* tag 'wireless-next-2026-03-04' of https://git.kernel.org/pub/scm/linux/kernel/git/wireless/wireless-next: (38 commits)
  wifi: UHR: define DPS/DBE/P-EDCA elements and fix size parsing
  wifi: mac80211_hwsim: change hwsim_class to a const struct
  wifi: mac80211: give the AP more time for EPPKE as well
  wifi: ath12k: Remove the unused argument from the Rx data path
  wifi: ath12k: Enable monitor mode support on IPQ5332
  wifi: ath12k: Set up MLO after SSR
  wifi: ath11k: Silence remoteproc probe deferral prints
  wifi: cfg80211: support key installation on non-netdev wdevs
  wifi: cfg80211: make cluster id an array
  wifi: mac80211: update outdated comment
  wifi: mac80211: Advertise IEEE 802.1X authentication support
  wifi: mac80211: Add support for IEEE 802.1X authentication protocol in non-AP STA mode
  wifi: cfg80211: add support for IEEE 802.1X Authentication Protocol
  wifi: mac80211: Advertise EPPKE support based on driver capabilities
  wifi: mac80211_hwsim: Advertise support for (Re)Association frame encryption
  wifi: mac80211: Fix AAD/Nonce computation for management frames with MLO
  wifi: rt2x00: use generic nvmem_cell_get
  wifi: mac80211: fetch unsolicited probe response template by link ID
  wifi: mac80211: fetch FILS discovery template by link ID
  wifi: nl80211: don't allow DFS channels for NAN
  ...
====================

Link: https://patch.msgid.link/20260304113707.175181-3-johannes@sipsolutions.net


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parents 4ad96a7c 44d93cf1
Loading
Loading
Loading
Loading
+3 −7
Original line number Diff line number Diff line
@@ -807,10 +807,8 @@ static int ath11k_core_get_rproc(struct ath11k_base *ab)
	}

	prproc = rproc_get_by_phandle(rproc_phandle);
	if (!prproc) {
		ath11k_dbg(ab, ATH11K_DBG_AHB, "failed to get rproc, deferring\n");
		return -EPROBE_DEFER;
	}
	if (!prproc)
		return dev_err_probe(&ab->pdev->dev, -EPROBE_DEFER, "failed to get rproc\n");
	ab_ahb->tgt_rproc = prproc;

	return 0;
@@ -1190,10 +1188,8 @@ static int ath11k_ahb_probe(struct platform_device *pdev)
	ath11k_ahb_init_qmi_ce_config(ab);

	ret = ath11k_core_get_rproc(ab);
	if (ret) {
		ath11k_err(ab, "failed to get rproc: %d\n", ret);
	if (ret)
		goto err_ce_free;
	}

	ret = ath11k_core_init(ab);
	if (ret) {
+19 −13
Original line number Diff line number Diff line
@@ -1557,12 +1557,15 @@ static int ath11k_mac_setup_bcn_tmpl_ema(struct ath11k_vif *arvif,
	if (!beacons || !beacons->cnt) {
		ath11k_warn(arvif->ar->ab,
			    "failed to get ema beacon templates from mac80211\n");
		return -EPERM;
		ret = -EPERM;
		goto free;
	}

	if (tx_arvif == arvif) {
		if (ath11k_mac_set_vif_params(tx_arvif, beacons->bcn[0].skb))
			return -EINVAL;
		if (ath11k_mac_set_vif_params(tx_arvif, beacons->bcn[0].skb)) {
			ret = -EINVAL;
			goto free;
		}
	} else {
		arvif->wpaie_present = tx_arvif->wpaie_present;
	}
@@ -1589,11 +1592,11 @@ static int ath11k_mac_setup_bcn_tmpl_ema(struct ath11k_vif *arvif,
		}
	}

	ieee80211_beacon_free_ema_list(beacons);

	if (tx_arvif != arvif && !nontx_vif_params_set)
		return -EINVAL; /* Profile not found in the beacons */
		ret = -EINVAL; /* Profile not found in the beacons */

free:
	ieee80211_beacon_free_ema_list(beacons);
	return ret;
}

@@ -1622,19 +1625,22 @@ static int ath11k_mac_setup_bcn_tmpl_mbssid(struct ath11k_vif *arvif,
	}

	if (tx_arvif == arvif) {
		if (ath11k_mac_set_vif_params(tx_arvif, bcn))
			return -EINVAL;
		if (ath11k_mac_set_vif_params(tx_arvif, bcn)) {
			ret = -EINVAL;
			goto free;
		}
	} else if (!ath11k_mac_set_nontx_vif_params(tx_arvif, arvif, bcn)) {
		return -EINVAL;
		ret = -EINVAL;
		goto free;
	}

	ret = ath11k_wmi_bcn_tmpl(ar, arvif->vdev_id, &offs, bcn, 0);
	kfree_skb(bcn);

	if (ret)
		ath11k_warn(ab, "failed to submit beacon template command: %d\n",
			    ret);

free:
	kfree_skb(bcn);
	return ret;
}

@@ -3305,7 +3311,7 @@ static int ath11k_mac_fils_discovery(struct ath11k_vif *arvif,
	if (info->fils_discovery.max_interval) {
		interval = info->fils_discovery.max_interval;

		tmpl = ieee80211_get_fils_discovery_tmpl(ar->hw, arvif->vif);
		tmpl = ieee80211_get_fils_discovery_tmpl(ar->hw, arvif->vif, 0);
		if (tmpl)
			ret = ath11k_wmi_fils_discovery_tmpl(ar, arvif->vdev_id,
							     tmpl);
@@ -3314,7 +3320,7 @@ static int ath11k_mac_fils_discovery(struct ath11k_vif *arvif,
		interval = info->unsol_bcast_probe_resp_interval;

		tmpl = ieee80211_get_unsol_bcast_probe_resp_tmpl(ar->hw,
								 arvif->vif);
								 arvif->vif, 0);
		if (tmpl)
			ret = ath11k_wmi_probe_resp_tmpl(ar, arvif->vdev_id,
							 tmpl);
+1 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ ath12k-$(CONFIG_ATH12K_TRACING) += trace.o
ath12k-$(CONFIG_PM) += wow.o
ath12k-$(CONFIG_ATH12K_COREDUMP) += coredump.o
ath12k-$(CONFIG_NL80211_TESTMODE) += testmode.o
ath12k-$(CONFIG_THERMAL) += thermal.o

# for tracing framework to find trace.h
CFLAGS_trace.o := -I$(src)
+22 −1
Original line number Diff line number Diff line
@@ -863,11 +863,22 @@ static int ath12k_core_pdev_create(struct ath12k_base *ab)
		return ret;
	}

	ret = ath12k_thermal_register(ab);
	if (ret) {
		ath12k_err(ab, "could not register thermal device: %d\n", ret);
		goto err_dp_pdev_free;
	}

	return 0;

err_dp_pdev_free:
	ath12k_dp_pdev_free(ab);
	return ret;
}

static void ath12k_core_pdev_destroy(struct ath12k_base *ab)
{
	ath12k_thermal_unregister(ab);
	ath12k_dp_pdev_free(ab);
}

@@ -1006,6 +1017,8 @@ static void ath12k_core_hw_group_stop(struct ath12k_hw_group *ag)

	ath12k_mac_unregister(ag);

	ath12k_mac_mlo_teardown(ag);

	for (i = ag->num_devices - 1; i >= 0; i--) {
		ab = ag->ab[i];
		if (!ab)
@@ -1123,8 +1136,14 @@ static int ath12k_core_hw_group_start(struct ath12k_hw_group *ag)

	lockdep_assert_held(&ag->mutex);

	if (test_bit(ATH12K_GROUP_FLAG_REGISTERED, &ag->flags))
	if (test_bit(ATH12K_GROUP_FLAG_REGISTERED, &ag->flags)) {
		ret = ath12k_core_mlo_setup(ag);
		if (WARN_ON(ret)) {
			ath12k_mac_unregister(ag);
			goto err_mac_destroy;
		}
		goto core_pdev_create;
	}

	ret = ath12k_mac_allocate(ag);
	if (WARN_ON(ret))
@@ -1361,6 +1380,7 @@ static int ath12k_core_reconfigure_on_crash(struct ath12k_base *ab)

	mutex_lock(&ab->core_lock);
	ath12k_link_sta_rhash_tbl_destroy(ab);
	ath12k_thermal_unregister(ab);
	ath12k_dp_pdev_free(ab);
	ath12k_ce_cleanup_pipes(ab);
	ath12k_wmi_detach(ab);
@@ -1502,6 +1522,7 @@ static void ath12k_core_pre_reconfigure_recovery(struct ath12k_base *ab)
			complete(&ar->vdev_delete_done);
			complete(&ar->bss_survey_done);
			complete_all(&ar->regd_update_completed);
			complete_all(&ar->thermal.wmi_sync);

			wake_up(&ar->dp.tx_empty_waitq);
			idr_for_each(&ar->txmgmt_idr,
+3 −0
Original line number Diff line number Diff line
@@ -36,6 +36,7 @@
#include "coredump.h"
#include "cmn_defs.h"
#include "dp_cmn.h"
#include "thermal.h"

#define SM(_v, _f) (((_v) << _f##_LSB) & _f##_MASK)

@@ -757,6 +758,8 @@ struct ath12k {

	s8 max_allowed_tx_power;
	struct ath12k_pdev_rssi_offsets rssi_info;

	struct ath12k_thermal thermal;
};

struct ath12k_hw {
Loading