Commit 52363af3 authored by Johannes Berg's avatar Johannes Berg
Browse files

wifi: mac80211: simplify ieee80211_recalc_chanctx_min_def() API

ieee80211_recalc_chanctx_min_def() is used outside the chandef
code, but then should/is always used with NULL/false for the
two last arguments. Remove them, and create another level of
indirection for use inside the file.

Link: https://patch.msgid.link/20251105160431.33408844c392.I4f52298861780c17a27cd229609e8a3e29c8d740@changeid


Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent a1dc648a
Loading
Loading
Loading
Loading
+27 −19
Original line number Diff line number Diff line
@@ -410,7 +410,7 @@ ieee80211_get_chanctx_max_required_bw(struct ieee80211_local *local,
 * channel context.
 */
static u32
_ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
__ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
				   struct ieee80211_chanctx *ctx,
				   struct ieee80211_link_data *rsvd_for,
				   bool check_reserved)
@@ -518,12 +518,13 @@ static void ieee80211_chan_bw_change(struct ieee80211_local *local,
 * the max of min required widths of all the interfaces bound to this
 * channel context.
 */
void ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
static void
_ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
				  struct ieee80211_chanctx *ctx,
				  struct ieee80211_link_data *rsvd_for,
				  bool check_reserved)
{
	u32 changed = _ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for,
	u32 changed = __ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for,
							 check_reserved);

	if (!changed)
@@ -538,6 +539,12 @@ void ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
	ieee80211_chan_bw_change(local, ctx, false, false);
}

void ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
				      struct ieee80211_chanctx *ctx)
{
	_ieee80211_recalc_chanctx_min_def(local, ctx, NULL, false);
}

static void _ieee80211_change_chanctx(struct ieee80211_local *local,
				      struct ieee80211_chanctx *ctx,
				      struct ieee80211_chanctx *old_ctx,
@@ -572,7 +579,7 @@ static void _ieee80211_change_chanctx(struct ieee80211_local *local,
	ieee80211_chan_bw_change(local, old_ctx, false, true);

	if (ieee80211_chanreq_identical(&ctx_req, chanreq)) {
		ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for, false);
		_ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for, false);
		return;
	}

@@ -593,7 +600,8 @@ static void _ieee80211_change_chanctx(struct ieee80211_local *local,
	ctx->conf.ap = chanreq->ap;

	/* check if min chanctx also changed */
	changed |= _ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for, false);
	changed |= __ieee80211_recalc_chanctx_min_def(local, ctx, rsvd_for,
						      false);

	ieee80211_add_wbrf(local, &ctx->conf.def);

@@ -732,7 +740,7 @@ ieee80211_alloc_chanctx(struct ieee80211_local *local,
	ctx->conf.radar_enabled = false;
	ctx->conf.radio_idx = radio_idx;
	ctx->radar_detected = false;
	_ieee80211_recalc_chanctx_min_def(local, ctx, NULL, false);
	__ieee80211_recalc_chanctx_min_def(local, ctx, NULL, false);

	return ctx;
}
@@ -925,7 +933,7 @@ static int ieee80211_assign_link_chanctx(struct ieee80211_link_data *link,

	if (new_ctx) {
		/* recalc considering the link we'll use it for now */
		ieee80211_recalc_chanctx_min_def(local, new_ctx, link, false);
		_ieee80211_recalc_chanctx_min_def(local, new_ctx, link, false);

		ret = drv_assign_vif_chanctx(local, sdata, link->conf, new_ctx);
		if (assign_on_failure || !ret) {
@@ -946,12 +954,12 @@ static int ieee80211_assign_link_chanctx(struct ieee80211_link_data *link,
		ieee80211_recalc_chanctx_chantype(local, curr_ctx);
		ieee80211_recalc_smps_chanctx(local, curr_ctx);
		ieee80211_recalc_radar_chanctx(local, curr_ctx);
		ieee80211_recalc_chanctx_min_def(local, curr_ctx, NULL, false);
		ieee80211_recalc_chanctx_min_def(local, curr_ctx);
	}

	if (new_ctx && ieee80211_chanctx_num_assigned(local, new_ctx) > 0) {
		ieee80211_recalc_txpower(link, false);
		ieee80211_recalc_chanctx_min_def(local, new_ctx, NULL, false);
		ieee80211_recalc_chanctx_min_def(local, new_ctx);
	}

	if (conf) {
@@ -1414,7 +1422,7 @@ ieee80211_link_use_reserved_reassign(struct ieee80211_link_data *link)
	if (ieee80211_chanctx_refcount(local, old_ctx) == 0)
		ieee80211_free_chanctx(local, old_ctx, false);

	ieee80211_recalc_chanctx_min_def(local, new_ctx, NULL, false);
	ieee80211_recalc_chanctx_min_def(local, new_ctx);
	ieee80211_recalc_smps_chanctx(local, new_ctx);
	ieee80211_recalc_radar_chanctx(local, new_ctx);

@@ -1709,7 +1717,7 @@ static int ieee80211_vif_use_reserved_switch(struct ieee80211_local *local)
						 true, true);
		}

		ieee80211_recalc_chanctx_min_def(local, ctx, NULL, true);
		_ieee80211_recalc_chanctx_min_def(local, ctx, NULL, true);
	}

	/*
@@ -1781,7 +1789,7 @@ static int ieee80211_vif_use_reserved_switch(struct ieee80211_local *local)
		ieee80211_recalc_chanctx_chantype(local, ctx);
		ieee80211_recalc_smps_chanctx(local, ctx);
		ieee80211_recalc_radar_chanctx(local, ctx);
		ieee80211_recalc_chanctx_min_def(local, ctx, NULL, false);
		ieee80211_recalc_chanctx_min_def(local, ctx);

		for_each_sdata_link(local, link) {
			if (link->reserved_chanctx != ctx)
+3 −3
Original line number Diff line number Diff line
@@ -3,7 +3,7 @@
 * HE handling
 *
 * Copyright(c) 2017 Intel Deutschland GmbH
 * Copyright(c) 2019 - 2024 Intel Corporation
 * Copyright(c) 2019-2025 Intel Corporation
 */

#include "ieee80211_i.h"
@@ -313,7 +313,7 @@ bool ieee80211_prepare_rx_omi_bw(struct ieee80211_link_sta *pub_link_sta,
		ieee80211_link_sta_rc_update_omi(link, link_sta);
	} else {
		link_sta->rx_omi_bw_rx = bw;
		ieee80211_recalc_chanctx_min_def(local, chanctx, NULL, false);
		ieee80211_recalc_chanctx_min_def(local, chanctx);
	}

	link_sta->rx_omi_bw_staging = bw;
@@ -359,7 +359,7 @@ void ieee80211_finalize_rx_omi_bw(struct ieee80211_link_sta *pub_link_sta)
		/* channel context in finalize only when narrowing bandwidth */
		WARN_ON(link_sta->rx_omi_bw_rx < link_sta->rx_omi_bw_staging);
		link_sta->rx_omi_bw_rx = link_sta->rx_omi_bw_staging;
		ieee80211_recalc_chanctx_min_def(local, chanctx, NULL, false);
		ieee80211_recalc_chanctx_min_def(local, chanctx);
	}

	trace_api_return_void(local);
+1 −3
Original line number Diff line number Diff line
@@ -2768,9 +2768,7 @@ int ieee80211_chanctx_refcount(struct ieee80211_local *local,
void ieee80211_recalc_smps_chanctx(struct ieee80211_local *local,
				   struct ieee80211_chanctx *chanctx);
void ieee80211_recalc_chanctx_min_def(struct ieee80211_local *local,
				      struct ieee80211_chanctx *ctx,
				      struct ieee80211_link_data *rsvd_for,
				      bool check_reserved);
				      struct ieee80211_chanctx *ctx);
bool ieee80211_is_radar_required(struct ieee80211_local *local,
				 struct cfg80211_scan_request *req);
bool ieee80211_is_radio_idx_in_scan_req(struct wiphy *wiphy,
+1 −1
Original line number Diff line number Diff line
@@ -2347,7 +2347,7 @@ void ieee80211_recalc_min_chandef(struct ieee80211_sub_if_data *sdata,

		chanctx = container_of(chanctx_conf, struct ieee80211_chanctx,
				       conf);
		ieee80211_recalc_chanctx_min_def(local, chanctx, NULL, false);
		ieee80211_recalc_chanctx_min_def(local, chanctx);
	}
}