Skip to content

Commit

Permalink
wifi: mac80211: refactor chanreq.ap setting
Browse files Browse the repository at this point in the history
There are now three places setting up chanreq.ap which always
depends on the mode (EHT being used or not) and override flag.
Refactor that code into a common function with a comment, to
make that clearer.

Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240506215543.5cd6a209e58a.I3be318959d9e2df5dccd2d0938c3d2fcc6688030@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Johannes Berg committed May 23, 2024
1 parent 4540568 commit 9f47252
Showing 1 changed file with 29 additions and 14 deletions.
43 changes: 29 additions & 14 deletions net/mac80211/mlme.c
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,29 @@ static void ieee80211_rearrange_tpe(struct ieee80211_parsed_tpe *tpe,
}
}

/*
* The AP part of the channel request is used to distinguish settings
* to the device used for wider bandwidth OFDMA. This is used in the
* channel context code to assign two channel contexts even if they're
* both for the same channel, if the AP bandwidths are incompatible.
* If not EHT (or driver override) then ap.chan == NULL indicates that
* there's no wider BW OFDMA used.
*/
static void ieee80211_set_chanreq_ap(struct ieee80211_sub_if_data *sdata,
struct ieee80211_chan_req *chanreq,
struct ieee80211_conn_settings *conn,
struct cfg80211_chan_def *ap_chandef)
{
chanreq->ap.chan = NULL;

if (conn->mode < IEEE80211_CONN_MODE_EHT)
return;
if (sdata->vif.driver_flags & IEEE80211_VIF_IGNORE_OFDMA_WIDER_BW)
return;

chanreq->ap = *ap_chandef;
}

static struct ieee802_11_elems *
ieee80211_determine_chan_mode(struct ieee80211_sub_if_data *sdata,
struct ieee80211_conn_settings *conn,
Expand Down Expand Up @@ -886,12 +909,7 @@ ieee80211_determine_chan_mode(struct ieee80211_sub_if_data *sdata,

chanreq->oper = *ap_chandef;

/* wider-bandwidth OFDMA is only done in EHT */
if (conn->mode >= IEEE80211_CONN_MODE_EHT &&
!(sdata->vif.driver_flags & IEEE80211_VIF_IGNORE_OFDMA_WIDER_BW))
chanreq->ap = *ap_chandef;
else
chanreq->ap.chan = NULL;
ieee80211_set_chanreq_ap(sdata, chanreq, conn, ap_chandef);

while (!ieee80211_chandef_usable(sdata, &chanreq->oper,
IEEE80211_CHAN_DISABLED)) {
Expand Down Expand Up @@ -999,11 +1017,9 @@ static int ieee80211_config_bw(struct ieee80211_link_data *link,
return -EINVAL;
}

chanreq.ap = ap_chandef;
chanreq.oper = ap_chandef;
if (link->u.mgd.conn.mode < IEEE80211_CONN_MODE_EHT ||
sdata->vif.driver_flags & IEEE80211_VIF_IGNORE_OFDMA_WIDER_BW)
chanreq.ap.chan = NULL;
ieee80211_set_chanreq_ap(sdata, &chanreq, &link->u.mgd.conn,
&ap_chandef);

/*
* if HT operation mode changed store the new one -
Expand Down Expand Up @@ -2535,10 +2551,9 @@ ieee80211_sta_process_chanswitch(struct ieee80211_link_data *link,

link->u.mgd.csa.ap_chandef = csa_ie.chanreq.ap;

link->csa.chanreq = csa_ie.chanreq;
if (link->u.mgd.conn.mode < IEEE80211_CONN_MODE_EHT ||
sdata->vif.driver_flags & IEEE80211_VIF_IGNORE_OFDMA_WIDER_BW)
link->csa.chanreq.ap.chan = NULL;
link->csa.chanreq.oper = csa_ie.chanreq.oper;
ieee80211_set_chanreq_ap(sdata, &link->csa.chanreq, &link->u.mgd.conn,
&csa_ie.chanreq.ap);

if (chanctx) {
res = ieee80211_link_reserve_chanctx(link, &link->csa.chanreq,
Expand Down

0 comments on commit 9f47252

Please sign in to comment.