Linux Audio

Check our new training course

Loading...
v5.14.15
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright 2002-2005, Instant802 Networks, Inc.
   4 * Copyright 2005-2006, Devicescape Software, Inc.
   5 * Copyright (c) 2006 Jiri Benc <jbenc@suse.cz>
   6 * Copyright 2017	Intel Deutschland GmbH
 
   7 */
   8
   9#include <linux/kernel.h>
  10#include <linux/rtnetlink.h>
  11#include <linux/module.h>
  12#include <linux/slab.h>
  13#include "rate.h"
  14#include "ieee80211_i.h"
  15#include "debugfs.h"
  16
  17struct rate_control_alg {
  18	struct list_head list;
  19	const struct rate_control_ops *ops;
  20};
  21
  22static LIST_HEAD(rate_ctrl_algs);
  23static DEFINE_MUTEX(rate_ctrl_mutex);
  24
  25static char *ieee80211_default_rc_algo = CONFIG_MAC80211_RC_DEFAULT;
  26module_param(ieee80211_default_rc_algo, charp, 0644);
  27MODULE_PARM_DESC(ieee80211_default_rc_algo,
  28		 "Default rate control algorithm for mac80211 to use");
  29
  30void rate_control_rate_init(struct sta_info *sta)
  31{
  32	struct ieee80211_local *local = sta->sdata->local;
  33	struct rate_control_ref *ref = sta->rate_ctrl;
  34	struct ieee80211_sta *ista = &sta->sta;
  35	void *priv_sta = sta->rate_ctrl_priv;
  36	struct ieee80211_supported_band *sband;
  37	struct ieee80211_chanctx_conf *chanctx_conf;
  38
  39	ieee80211_sta_set_rx_nss(sta);
  40
  41	if (!ref)
  42		return;
  43
  44	rcu_read_lock();
  45
  46	chanctx_conf = rcu_dereference(sta->sdata->vif.chanctx_conf);
  47	if (WARN_ON(!chanctx_conf)) {
  48		rcu_read_unlock();
  49		return;
  50	}
  51
  52	sband = local->hw.wiphy->bands[chanctx_conf->def.chan->band];
  53
  54	/* TODO: check for minstrel_s1g ? */
  55	if (sband->band == NL80211_BAND_S1GHZ) {
  56		ieee80211_s1g_sta_rate_init(sta);
  57		rcu_read_unlock();
  58		return;
  59	}
  60
  61	spin_lock_bh(&sta->rate_ctrl_lock);
  62	ref->ops->rate_init(ref->priv, sband, &chanctx_conf->def, ista,
  63			    priv_sta);
  64	spin_unlock_bh(&sta->rate_ctrl_lock);
  65	rcu_read_unlock();
  66	set_sta_flag(sta, WLAN_STA_RATE_CONTROL);
  67}
  68
  69void rate_control_tx_status(struct ieee80211_local *local,
  70			    struct ieee80211_supported_band *sband,
  71			    struct ieee80211_tx_status *st)
  72{
  73	struct rate_control_ref *ref = local->rate_ctrl;
  74	struct sta_info *sta = container_of(st->sta, struct sta_info, sta);
  75	void *priv_sta = sta->rate_ctrl_priv;
 
  76
  77	if (!ref || !test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
  78		return;
  79
 
 
  80	spin_lock_bh(&sta->rate_ctrl_lock);
  81	if (ref->ops->tx_status_ext)
  82		ref->ops->tx_status_ext(ref->priv, sband, priv_sta, st);
  83	else if (st->skb)
  84		ref->ops->tx_status(ref->priv, sband, st->sta, priv_sta, st->skb);
  85	else
  86		WARN_ON_ONCE(1);
  87
  88	spin_unlock_bh(&sta->rate_ctrl_lock);
  89}
  90
  91void rate_control_rate_update(struct ieee80211_local *local,
  92				    struct ieee80211_supported_band *sband,
  93				    struct sta_info *sta, u32 changed)
 
  94{
  95	struct rate_control_ref *ref = local->rate_ctrl;
  96	struct ieee80211_sta *ista = &sta->sta;
  97	void *priv_sta = sta->rate_ctrl_priv;
  98	struct ieee80211_chanctx_conf *chanctx_conf;
  99
 
 
 100	if (ref && ref->ops->rate_update) {
 101		rcu_read_lock();
 102
 103		chanctx_conf = rcu_dereference(sta->sdata->vif.chanctx_conf);
 104		if (WARN_ON(!chanctx_conf)) {
 105			rcu_read_unlock();
 106			return;
 107		}
 108
 109		spin_lock_bh(&sta->rate_ctrl_lock);
 110		ref->ops->rate_update(ref->priv, sband, &chanctx_conf->def,
 111				      ista, priv_sta, changed);
 112		spin_unlock_bh(&sta->rate_ctrl_lock);
 113		rcu_read_unlock();
 114	}
 
 115	drv_sta_rc_update(local, sta->sdata, &sta->sta, changed);
 116}
 117
 118int ieee80211_rate_control_register(const struct rate_control_ops *ops)
 119{
 120	struct rate_control_alg *alg;
 121
 122	if (!ops->name)
 123		return -EINVAL;
 124
 125	mutex_lock(&rate_ctrl_mutex);
 126	list_for_each_entry(alg, &rate_ctrl_algs, list) {
 127		if (!strcmp(alg->ops->name, ops->name)) {
 128			/* don't register an algorithm twice */
 129			WARN_ON(1);
 130			mutex_unlock(&rate_ctrl_mutex);
 131			return -EALREADY;
 132		}
 133	}
 134
 135	alg = kzalloc(sizeof(*alg), GFP_KERNEL);
 136	if (alg == NULL) {
 137		mutex_unlock(&rate_ctrl_mutex);
 138		return -ENOMEM;
 139	}
 140	alg->ops = ops;
 141
 142	list_add_tail(&alg->list, &rate_ctrl_algs);
 143	mutex_unlock(&rate_ctrl_mutex);
 144
 145	return 0;
 146}
 147EXPORT_SYMBOL(ieee80211_rate_control_register);
 148
 149void ieee80211_rate_control_unregister(const struct rate_control_ops *ops)
 150{
 151	struct rate_control_alg *alg;
 152
 153	mutex_lock(&rate_ctrl_mutex);
 154	list_for_each_entry(alg, &rate_ctrl_algs, list) {
 155		if (alg->ops == ops) {
 156			list_del(&alg->list);
 157			kfree(alg);
 158			break;
 159		}
 160	}
 161	mutex_unlock(&rate_ctrl_mutex);
 162}
 163EXPORT_SYMBOL(ieee80211_rate_control_unregister);
 164
 165static const struct rate_control_ops *
 166ieee80211_try_rate_control_ops_get(const char *name)
 167{
 168	struct rate_control_alg *alg;
 169	const struct rate_control_ops *ops = NULL;
 170
 171	if (!name)
 172		return NULL;
 173
 174	mutex_lock(&rate_ctrl_mutex);
 175	list_for_each_entry(alg, &rate_ctrl_algs, list) {
 176		if (!strcmp(alg->ops->name, name)) {
 177			ops = alg->ops;
 178			break;
 179		}
 180	}
 181	mutex_unlock(&rate_ctrl_mutex);
 182	return ops;
 183}
 184
 185/* Get the rate control algorithm. */
 186static const struct rate_control_ops *
 187ieee80211_rate_control_ops_get(const char *name)
 188{
 189	const struct rate_control_ops *ops;
 190	const char *alg_name;
 191
 192	kernel_param_lock(THIS_MODULE);
 193	if (!name)
 194		alg_name = ieee80211_default_rc_algo;
 195	else
 196		alg_name = name;
 197
 198	ops = ieee80211_try_rate_control_ops_get(alg_name);
 199	if (!ops && name)
 200		/* try default if specific alg requested but not found */
 201		ops = ieee80211_try_rate_control_ops_get(ieee80211_default_rc_algo);
 202
 203	/* Note: check for > 0 is intentional to avoid clang warning */
 204	if (!ops && (strlen(CONFIG_MAC80211_RC_DEFAULT) > 0))
 205		/* try built-in one if specific alg requested but not found */
 206		ops = ieee80211_try_rate_control_ops_get(CONFIG_MAC80211_RC_DEFAULT);
 207
 208	kernel_param_unlock(THIS_MODULE);
 209
 210	return ops;
 211}
 212
 213#ifdef CONFIG_MAC80211_DEBUGFS
 214static ssize_t rcname_read(struct file *file, char __user *userbuf,
 215			   size_t count, loff_t *ppos)
 216{
 217	struct rate_control_ref *ref = file->private_data;
 218	int len = strlen(ref->ops->name);
 219
 220	return simple_read_from_buffer(userbuf, count, ppos,
 221				       ref->ops->name, len);
 222}
 223
 224const struct file_operations rcname_ops = {
 225	.read = rcname_read,
 226	.open = simple_open,
 227	.llseek = default_llseek,
 228};
 229#endif
 230
 231static struct rate_control_ref *
 232rate_control_alloc(const char *name, struct ieee80211_local *local)
 233{
 234	struct rate_control_ref *ref;
 235
 236	ref = kmalloc(sizeof(struct rate_control_ref), GFP_KERNEL);
 237	if (!ref)
 238		return NULL;
 239	ref->ops = ieee80211_rate_control_ops_get(name);
 240	if (!ref->ops)
 241		goto free;
 242
 243	ref->priv = ref->ops->alloc(&local->hw);
 244	if (!ref->priv)
 245		goto free;
 246	return ref;
 247
 248free:
 249	kfree(ref);
 250	return NULL;
 251}
 252
 253static void rate_control_free(struct ieee80211_local *local,
 254			      struct rate_control_ref *ctrl_ref)
 255{
 256	ctrl_ref->ops->free(ctrl_ref->priv);
 257
 258#ifdef CONFIG_MAC80211_DEBUGFS
 259	debugfs_remove_recursive(local->debugfs.rcdir);
 260	local->debugfs.rcdir = NULL;
 261#endif
 262
 263	kfree(ctrl_ref);
 264}
 265
 266void ieee80211_check_rate_mask(struct ieee80211_sub_if_data *sdata)
 267{
 
 268	struct ieee80211_local *local = sdata->local;
 269	struct ieee80211_supported_band *sband;
 270	u32 user_mask, basic_rates = sdata->vif.bss_conf.basic_rates;
 271	enum nl80211_band band;
 272
 273	if (WARN_ON(!sdata->vif.bss_conf.chandef.chan))
 274		return;
 275
 276	band = sdata->vif.bss_conf.chandef.chan->band;
 277	if (band == NL80211_BAND_S1GHZ) {
 278		/* TODO */
 279		return;
 280	}
 281
 282	if (WARN_ON_ONCE(!basic_rates))
 283		return;
 284
 285	user_mask = sdata->rc_rateidx_mask[band];
 286	sband = local->hw.wiphy->bands[band];
 287
 288	if (user_mask & basic_rates)
 289		return;
 290
 291	sdata_dbg(sdata,
 292		  "no overlap between basic rates (0x%x) and user mask (0x%x on band %d) - clearing the latter",
 293		  basic_rates, user_mask, band);
 294	sdata->rc_rateidx_mask[band] = (1 << sband->n_bitrates) - 1;
 295}
 296
 297static bool rc_no_data_or_no_ack_use_min(struct ieee80211_tx_rate_control *txrc)
 298{
 299	struct sk_buff *skb = txrc->skb;
 300	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 301
 302	return (info->flags & (IEEE80211_TX_CTL_NO_ACK |
 303			       IEEE80211_TX_CTL_USE_MINRATE)) ||
 304		!ieee80211_is_tx_data(skb);
 305}
 306
 307static void rc_send_low_basicrate(struct ieee80211_tx_rate *rate,
 308				  u32 basic_rates,
 309				  struct ieee80211_supported_band *sband)
 310{
 311	u8 i;
 312
 313	if (sband->band == NL80211_BAND_S1GHZ) {
 314		/* TODO */
 315		rate->flags |= IEEE80211_TX_RC_S1G_MCS;
 316		rate->idx = 0;
 317		return;
 318	}
 319
 320	if (basic_rates == 0)
 321		return; /* assume basic rates unknown and accept rate */
 322	if (rate->idx < 0)
 323		return;
 324	if (basic_rates & (1 << rate->idx))
 325		return; /* selected rate is a basic rate */
 326
 327	for (i = rate->idx + 1; i <= sband->n_bitrates; i++) {
 328		if (basic_rates & (1 << i)) {
 329			rate->idx = i;
 330			return;
 331		}
 332	}
 333
 334	/* could not find a basic rate; use original selection */
 335}
 336
 337static void __rate_control_send_low(struct ieee80211_hw *hw,
 338				    struct ieee80211_supported_band *sband,
 339				    struct ieee80211_sta *sta,
 340				    struct ieee80211_tx_info *info,
 341				    u32 rate_mask)
 342{
 343	int i;
 344	u32 rate_flags =
 345		ieee80211_chandef_rate_flags(&hw->conf.chandef);
 346
 347	if (sband->band == NL80211_BAND_S1GHZ) {
 348		info->control.rates[0].flags |= IEEE80211_TX_RC_S1G_MCS;
 349		info->control.rates[0].idx = 0;
 350		return;
 351	}
 352
 353	if ((sband->band == NL80211_BAND_2GHZ) &&
 354	    (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE))
 355		rate_flags |= IEEE80211_RATE_ERP_G;
 356
 357	info->control.rates[0].idx = 0;
 358	for (i = 0; i < sband->n_bitrates; i++) {
 359		if (!(rate_mask & BIT(i)))
 360			continue;
 361
 362		if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
 363			continue;
 364
 365		if (!rate_supported(sta, sband->band, i))
 366			continue;
 367
 368		info->control.rates[0].idx = i;
 369		break;
 370	}
 371	WARN_ONCE(i == sband->n_bitrates,
 372		  "no supported rates for sta %pM (0x%x, band %d) in rate_mask 0x%x with flags 0x%x\n",
 373		  sta ? sta->addr : NULL,
 374		  sta ? sta->supp_rates[sband->band] : -1,
 375		  sband->band,
 376		  rate_mask, rate_flags);
 377
 378	info->control.rates[0].count =
 379		(info->flags & IEEE80211_TX_CTL_NO_ACK) ?
 380		1 : hw->max_rate_tries;
 381
 382	info->control.skip_table = 1;
 383}
 384
 385
 386static bool rate_control_send_low(struct ieee80211_sta *pubsta,
 387				  struct ieee80211_tx_rate_control *txrc)
 388{
 389	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(txrc->skb);
 390	struct ieee80211_supported_band *sband = txrc->sband;
 391	struct sta_info *sta;
 392	int mcast_rate;
 393	bool use_basicrate = false;
 394
 395	if (!pubsta || rc_no_data_or_no_ack_use_min(txrc)) {
 396		__rate_control_send_low(txrc->hw, sband, pubsta, info,
 397					txrc->rate_idx_mask);
 398
 399		if (!pubsta && txrc->bss) {
 400			mcast_rate = txrc->bss_conf->mcast_rate[sband->band];
 401			if (mcast_rate > 0) {
 402				info->control.rates[0].idx = mcast_rate - 1;
 403				return true;
 404			}
 405			use_basicrate = true;
 406		} else if (pubsta) {
 407			sta = container_of(pubsta, struct sta_info, sta);
 408			if (ieee80211_vif_is_mesh(&sta->sdata->vif))
 409				use_basicrate = true;
 410		}
 411
 412		if (use_basicrate)
 413			rc_send_low_basicrate(&info->control.rates[0],
 414					      txrc->bss_conf->basic_rates,
 415					      sband);
 416
 417		return true;
 418	}
 419	return false;
 420}
 421
 422static bool rate_idx_match_legacy_mask(s8 *rate_idx, int n_bitrates, u32 mask)
 423{
 424	int j;
 425
 426	/* See whether the selected rate or anything below it is allowed. */
 427	for (j = *rate_idx; j >= 0; j--) {
 428		if (mask & (1 << j)) {
 429			/* Okay, found a suitable rate. Use it. */
 430			*rate_idx = j;
 431			return true;
 432		}
 433	}
 434
 435	/* Try to find a higher rate that would be allowed */
 436	for (j = *rate_idx + 1; j < n_bitrates; j++) {
 437		if (mask & (1 << j)) {
 438			/* Okay, found a suitable rate. Use it. */
 439			*rate_idx = j;
 440			return true;
 441		}
 442	}
 443	return false;
 444}
 445
 446static bool rate_idx_match_mcs_mask(s8 *rate_idx, u8 *mcs_mask)
 447{
 448	int i, j;
 449	int ridx, rbit;
 450
 451	ridx = *rate_idx / 8;
 452	rbit = *rate_idx % 8;
 453
 454	/* sanity check */
 455	if (ridx < 0 || ridx >= IEEE80211_HT_MCS_MASK_LEN)
 456		return false;
 457
 458	/* See whether the selected rate or anything below it is allowed. */
 459	for (i = ridx; i >= 0; i--) {
 460		for (j = rbit; j >= 0; j--)
 461			if (mcs_mask[i] & BIT(j)) {
 462				*rate_idx = i * 8 + j;
 463				return true;
 464			}
 465		rbit = 7;
 466	}
 467
 468	/* Try to find a higher rate that would be allowed */
 469	ridx = (*rate_idx + 1) / 8;
 470	rbit = (*rate_idx + 1) % 8;
 471
 472	for (i = ridx; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
 473		for (j = rbit; j < 8; j++)
 474			if (mcs_mask[i] & BIT(j)) {
 475				*rate_idx = i * 8 + j;
 476				return true;
 477			}
 478		rbit = 0;
 479	}
 480	return false;
 481}
 482
 483static bool rate_idx_match_vht_mcs_mask(s8 *rate_idx, u16 *vht_mask)
 484{
 485	int i, j;
 486	int ridx, rbit;
 487
 488	ridx = *rate_idx >> 4;
 489	rbit = *rate_idx & 0xf;
 490
 491	if (ridx < 0 || ridx >= NL80211_VHT_NSS_MAX)
 492		return false;
 493
 494	/* See whether the selected rate or anything below it is allowed. */
 495	for (i = ridx; i >= 0; i--) {
 496		for (j = rbit; j >= 0; j--) {
 497			if (vht_mask[i] & BIT(j)) {
 498				*rate_idx = (i << 4) | j;
 499				return true;
 500			}
 501		}
 502		rbit = 15;
 503	}
 504
 505	/* Try to find a higher rate that would be allowed */
 506	ridx = (*rate_idx + 1) >> 4;
 507	rbit = (*rate_idx + 1) & 0xf;
 508
 509	for (i = ridx; i < NL80211_VHT_NSS_MAX; i++) {
 510		for (j = rbit; j < 16; j++) {
 511			if (vht_mask[i] & BIT(j)) {
 512				*rate_idx = (i << 4) | j;
 513				return true;
 514			}
 515		}
 516		rbit = 0;
 517	}
 518	return false;
 519}
 520
 521static void rate_idx_match_mask(s8 *rate_idx, u16 *rate_flags,
 522				struct ieee80211_supported_band *sband,
 523				enum nl80211_chan_width chan_width,
 524				u32 mask,
 525				u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN],
 526				u16 vht_mask[NL80211_VHT_NSS_MAX])
 527{
 528	if (*rate_flags & IEEE80211_TX_RC_VHT_MCS) {
 529		/* handle VHT rates */
 530		if (rate_idx_match_vht_mcs_mask(rate_idx, vht_mask))
 531			return;
 532
 533		*rate_idx = 0;
 534		/* keep protection flags */
 535		*rate_flags &= (IEEE80211_TX_RC_USE_RTS_CTS |
 536				IEEE80211_TX_RC_USE_CTS_PROTECT |
 537				IEEE80211_TX_RC_USE_SHORT_PREAMBLE);
 538
 539		*rate_flags |= IEEE80211_TX_RC_MCS;
 540		if (chan_width == NL80211_CHAN_WIDTH_40)
 541			*rate_flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
 542
 543		if (rate_idx_match_mcs_mask(rate_idx, mcs_mask))
 544			return;
 545
 546		/* also try the legacy rates. */
 547		*rate_flags &= ~(IEEE80211_TX_RC_MCS |
 548				 IEEE80211_TX_RC_40_MHZ_WIDTH);
 549		if (rate_idx_match_legacy_mask(rate_idx, sband->n_bitrates,
 550					       mask))
 551			return;
 552	} else if (*rate_flags & IEEE80211_TX_RC_MCS) {
 553		/* handle HT rates */
 554		if (rate_idx_match_mcs_mask(rate_idx, mcs_mask))
 555			return;
 556
 557		/* also try the legacy rates. */
 558		*rate_idx = 0;
 559		/* keep protection flags */
 560		*rate_flags &= (IEEE80211_TX_RC_USE_RTS_CTS |
 561				IEEE80211_TX_RC_USE_CTS_PROTECT |
 562				IEEE80211_TX_RC_USE_SHORT_PREAMBLE);
 563		if (rate_idx_match_legacy_mask(rate_idx, sband->n_bitrates,
 564					       mask))
 565			return;
 566	} else {
 567		/* handle legacy rates */
 568		if (rate_idx_match_legacy_mask(rate_idx, sband->n_bitrates,
 569					       mask))
 570			return;
 571
 572		/* if HT BSS, and we handle a data frame, also try HT rates */
 573		switch (chan_width) {
 574		case NL80211_CHAN_WIDTH_20_NOHT:
 575		case NL80211_CHAN_WIDTH_5:
 576		case NL80211_CHAN_WIDTH_10:
 577			return;
 578		default:
 579			break;
 580		}
 581
 582		*rate_idx = 0;
 583		/* keep protection flags */
 584		*rate_flags &= (IEEE80211_TX_RC_USE_RTS_CTS |
 585				IEEE80211_TX_RC_USE_CTS_PROTECT |
 586				IEEE80211_TX_RC_USE_SHORT_PREAMBLE);
 587
 588		*rate_flags |= IEEE80211_TX_RC_MCS;
 589
 590		if (chan_width == NL80211_CHAN_WIDTH_40)
 591			*rate_flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
 592
 593		if (rate_idx_match_mcs_mask(rate_idx, mcs_mask))
 594			return;
 595	}
 596
 597	/*
 598	 * Uh.. No suitable rate exists. This should not really happen with
 599	 * sane TX rate mask configurations. However, should someone manage to
 600	 * configure supported rates and TX rate mask in incompatible way,
 601	 * allow the frame to be transmitted with whatever the rate control
 602	 * selected.
 603	 */
 604}
 605
 606static void rate_fixup_ratelist(struct ieee80211_vif *vif,
 607				struct ieee80211_supported_band *sband,
 608				struct ieee80211_tx_info *info,
 609				struct ieee80211_tx_rate *rates,
 610				int max_rates)
 611{
 612	struct ieee80211_rate *rate;
 613	bool inval = false;
 614	int i;
 615
 616	/*
 617	 * Set up the RTS/CTS rate as the fastest basic rate
 618	 * that is not faster than the data rate unless there
 619	 * is no basic rate slower than the data rate, in which
 620	 * case we pick the slowest basic rate
 621	 *
 622	 * XXX: Should this check all retry rates?
 623	 */
 624	if (!(rates[0].flags &
 625	      (IEEE80211_TX_RC_MCS | IEEE80211_TX_RC_VHT_MCS))) {
 626		u32 basic_rates = vif->bss_conf.basic_rates;
 627		s8 baserate = basic_rates ? ffs(basic_rates) - 1 : 0;
 628
 629		rate = &sband->bitrates[rates[0].idx];
 630
 631		for (i = 0; i < sband->n_bitrates; i++) {
 632			/* must be a basic rate */
 633			if (!(basic_rates & BIT(i)))
 634				continue;
 635			/* must not be faster than the data rate */
 636			if (sband->bitrates[i].bitrate > rate->bitrate)
 637				continue;
 638			/* maximum */
 639			if (sband->bitrates[baserate].bitrate <
 640			     sband->bitrates[i].bitrate)
 641				baserate = i;
 642		}
 643
 644		info->control.rts_cts_rate_idx = baserate;
 645	}
 646
 647	for (i = 0; i < max_rates; i++) {
 648		/*
 649		 * make sure there's no valid rate following
 650		 * an invalid one, just in case drivers don't
 651		 * take the API seriously to stop at -1.
 652		 */
 653		if (inval) {
 654			rates[i].idx = -1;
 655			continue;
 656		}
 657		if (rates[i].idx < 0) {
 658			inval = true;
 659			continue;
 660		}
 661
 662		/*
 663		 * For now assume MCS is already set up correctly, this
 664		 * needs to be fixed.
 665		 */
 666		if (rates[i].flags & IEEE80211_TX_RC_MCS) {
 667			WARN_ON(rates[i].idx > 76);
 668
 669			if (!(rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) &&
 670			    info->control.use_cts_prot)
 671				rates[i].flags |=
 672					IEEE80211_TX_RC_USE_CTS_PROTECT;
 673			continue;
 674		}
 675
 676		if (rates[i].flags & IEEE80211_TX_RC_VHT_MCS) {
 677			WARN_ON(ieee80211_rate_get_vht_mcs(&rates[i]) > 9);
 678			continue;
 679		}
 680
 681		/* set up RTS protection if desired */
 682		if (info->control.use_rts) {
 683			rates[i].flags |= IEEE80211_TX_RC_USE_RTS_CTS;
 684			info->control.use_cts_prot = false;
 685		}
 686
 687		/* RC is busted */
 688		if (WARN_ON_ONCE(rates[i].idx >= sband->n_bitrates)) {
 689			rates[i].idx = -1;
 690			continue;
 691		}
 692
 693		rate = &sband->bitrates[rates[i].idx];
 694
 695		/* set up short preamble */
 696		if (info->control.short_preamble &&
 697		    rate->flags & IEEE80211_RATE_SHORT_PREAMBLE)
 698			rates[i].flags |= IEEE80211_TX_RC_USE_SHORT_PREAMBLE;
 699
 700		/* set up G protection */
 701		if (!(rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) &&
 702		    info->control.use_cts_prot &&
 703		    rate->flags & IEEE80211_RATE_ERP_G)
 704			rates[i].flags |= IEEE80211_TX_RC_USE_CTS_PROTECT;
 705	}
 706}
 707
 708
 709static void rate_control_fill_sta_table(struct ieee80211_sta *sta,
 710					struct ieee80211_tx_info *info,
 711					struct ieee80211_tx_rate *rates,
 712					int max_rates)
 713{
 714	struct ieee80211_sta_rates *ratetbl = NULL;
 715	int i;
 716
 717	if (sta && !info->control.skip_table)
 718		ratetbl = rcu_dereference(sta->rates);
 719
 720	/* Fill remaining rate slots with data from the sta rate table. */
 721	max_rates = min_t(int, max_rates, IEEE80211_TX_RATE_TABLE_SIZE);
 722	for (i = 0; i < max_rates; i++) {
 723		if (i < ARRAY_SIZE(info->control.rates) &&
 724		    info->control.rates[i].idx >= 0 &&
 725		    info->control.rates[i].count) {
 726			if (rates != info->control.rates)
 727				rates[i] = info->control.rates[i];
 728		} else if (ratetbl) {
 729			rates[i].idx = ratetbl->rate[i].idx;
 730			rates[i].flags = ratetbl->rate[i].flags;
 731			if (info->control.use_rts)
 732				rates[i].count = ratetbl->rate[i].count_rts;
 733			else if (info->control.use_cts_prot)
 734				rates[i].count = ratetbl->rate[i].count_cts;
 735			else
 736				rates[i].count = ratetbl->rate[i].count;
 737		} else {
 738			rates[i].idx = -1;
 739			rates[i].count = 0;
 740		}
 741
 742		if (rates[i].idx < 0 || !rates[i].count)
 743			break;
 744	}
 745}
 746
 747static bool rate_control_cap_mask(struct ieee80211_sub_if_data *sdata,
 748				  struct ieee80211_supported_band *sband,
 749				  struct ieee80211_sta *sta, u32 *mask,
 750				  u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN],
 751				  u16 vht_mask[NL80211_VHT_NSS_MAX])
 752{
 753	u32 i, flags;
 754
 755	*mask = sdata->rc_rateidx_mask[sband->band];
 756	flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef);
 757	for (i = 0; i < sband->n_bitrates; i++) {
 758		if ((flags & sband->bitrates[i].flags) != flags)
 759			*mask &= ~BIT(i);
 760	}
 761
 762	if (*mask == (1 << sband->n_bitrates) - 1 &&
 763	    !sdata->rc_has_mcs_mask[sband->band] &&
 764	    !sdata->rc_has_vht_mcs_mask[sband->band])
 765		return false;
 766
 767	if (sdata->rc_has_mcs_mask[sband->band])
 768		memcpy(mcs_mask, sdata->rc_rateidx_mcs_mask[sband->band],
 769		       IEEE80211_HT_MCS_MASK_LEN);
 770	else
 771		memset(mcs_mask, 0xff, IEEE80211_HT_MCS_MASK_LEN);
 772
 773	if (sdata->rc_has_vht_mcs_mask[sband->band])
 774		memcpy(vht_mask, sdata->rc_rateidx_vht_mcs_mask[sband->band],
 775		       sizeof(u16) * NL80211_VHT_NSS_MAX);
 776	else
 777		memset(vht_mask, 0xff, sizeof(u16) * NL80211_VHT_NSS_MAX);
 778
 779	if (sta) {
 780		__le16 sta_vht_cap;
 781		u16 sta_vht_mask[NL80211_VHT_NSS_MAX];
 782
 783		/* Filter out rates that the STA does not support */
 784		*mask &= sta->supp_rates[sband->band];
 785		for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
 786			mcs_mask[i] &= sta->ht_cap.mcs.rx_mask[i];
 787
 788		sta_vht_cap = sta->vht_cap.vht_mcs.rx_mcs_map;
 789		ieee80211_get_vht_mask_from_cap(sta_vht_cap, sta_vht_mask);
 790		for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
 791			vht_mask[i] &= sta_vht_mask[i];
 792	}
 793
 794	return true;
 795}
 796
 797static void
 798rate_control_apply_mask_ratetbl(struct sta_info *sta,
 799				struct ieee80211_supported_band *sband,
 800				struct ieee80211_sta_rates *rates)
 801{
 802	int i;
 803	u32 mask;
 804	u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN];
 805	u16 vht_mask[NL80211_VHT_NSS_MAX];
 806	enum nl80211_chan_width chan_width;
 807
 808	if (!rate_control_cap_mask(sta->sdata, sband, &sta->sta, &mask,
 809				   mcs_mask, vht_mask))
 810		return;
 811
 812	chan_width = sta->sdata->vif.bss_conf.chandef.width;
 813	for (i = 0; i < IEEE80211_TX_RATE_TABLE_SIZE; i++) {
 814		if (rates->rate[i].idx < 0)
 815			break;
 816
 817		rate_idx_match_mask(&rates->rate[i].idx, &rates->rate[i].flags,
 818				    sband, chan_width, mask, mcs_mask,
 819				    vht_mask);
 820	}
 821}
 822
 823static void rate_control_apply_mask(struct ieee80211_sub_if_data *sdata,
 824				    struct ieee80211_sta *sta,
 825				    struct ieee80211_supported_band *sband,
 826				    struct ieee80211_tx_rate *rates,
 827				    int max_rates)
 828{
 829	enum nl80211_chan_width chan_width;
 830	u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN];
 831	u32 mask;
 832	u16 rate_flags, vht_mask[NL80211_VHT_NSS_MAX];
 833	int i;
 834
 835	/*
 836	 * Try to enforce the rateidx mask the user wanted. skip this if the
 837	 * default mask (allow all rates) is used to save some processing for
 838	 * the common case.
 839	 */
 840	if (!rate_control_cap_mask(sdata, sband, sta, &mask, mcs_mask,
 841				   vht_mask))
 842		return;
 843
 844	/*
 845	 * Make sure the rate index selected for each TX rate is
 846	 * included in the configured mask and change the rate indexes
 847	 * if needed.
 848	 */
 849	chan_width = sdata->vif.bss_conf.chandef.width;
 850	for (i = 0; i < max_rates; i++) {
 851		/* Skip invalid rates */
 852		if (rates[i].idx < 0)
 853			break;
 854
 855		rate_flags = rates[i].flags;
 856		rate_idx_match_mask(&rates[i].idx, &rate_flags, sband,
 857				    chan_width, mask, mcs_mask, vht_mask);
 858		rates[i].flags = rate_flags;
 859	}
 860}
 861
 862void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
 863			    struct ieee80211_sta *sta,
 864			    struct sk_buff *skb,
 865			    struct ieee80211_tx_rate *dest,
 866			    int max_rates)
 867{
 868	struct ieee80211_sub_if_data *sdata;
 869	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 870	struct ieee80211_supported_band *sband;
 871
 872	rate_control_fill_sta_table(sta, info, dest, max_rates);
 873
 874	if (!vif)
 875		return;
 876
 877	sdata = vif_to_sdata(vif);
 878	sband = sdata->local->hw.wiphy->bands[info->band];
 879
 880	if (ieee80211_is_tx_data(skb))
 881		rate_control_apply_mask(sdata, sta, sband, dest, max_rates);
 882
 883	if (dest[0].idx < 0)
 884		__rate_control_send_low(&sdata->local->hw, sband, sta, info,
 885					sdata->rc_rateidx_mask[info->band]);
 886
 887	if (sta)
 888		rate_fixup_ratelist(vif, sband, info, dest, max_rates);
 889}
 890EXPORT_SYMBOL(ieee80211_get_tx_rates);
 891
 892void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
 893			   struct sta_info *sta,
 894			   struct ieee80211_tx_rate_control *txrc)
 895{
 896	struct rate_control_ref *ref = sdata->local->rate_ctrl;
 897	void *priv_sta = NULL;
 898	struct ieee80211_sta *ista = NULL;
 899	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(txrc->skb);
 900	int i;
 901
 902	for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
 903		info->control.rates[i].idx = -1;
 904		info->control.rates[i].flags = 0;
 905		info->control.rates[i].count = 0;
 906	}
 907
 908	if (rate_control_send_low(sta ? &sta->sta : NULL, txrc))
 909		return;
 910
 911	if (ieee80211_hw_check(&sdata->local->hw, HAS_RATE_CONTROL))
 912		return;
 913
 914	if (sta && test_sta_flag(sta, WLAN_STA_RATE_CONTROL)) {
 915		ista = &sta->sta;
 916		priv_sta = sta->rate_ctrl_priv;
 917	}
 918
 919	if (ista) {
 920		spin_lock_bh(&sta->rate_ctrl_lock);
 921		ref->ops->get_rate(ref->priv, ista, priv_sta, txrc);
 922		spin_unlock_bh(&sta->rate_ctrl_lock);
 923	} else {
 924		rate_control_send_low(NULL, txrc);
 925	}
 926
 927	if (ieee80211_hw_check(&sdata->local->hw, SUPPORTS_RC_TABLE))
 928		return;
 929
 930	ieee80211_get_tx_rates(&sdata->vif, ista, txrc->skb,
 931			       info->control.rates,
 932			       ARRAY_SIZE(info->control.rates));
 933}
 934
 935int rate_control_set_rates(struct ieee80211_hw *hw,
 936			   struct ieee80211_sta *pubsta,
 937			   struct ieee80211_sta_rates *rates)
 938{
 939	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
 940	struct ieee80211_sta_rates *old;
 941	struct ieee80211_supported_band *sband;
 942
 943	sband = ieee80211_get_sband(sta->sdata);
 944	if (!sband)
 945		return -EINVAL;
 946	rate_control_apply_mask_ratetbl(sta, sband, rates);
 947	/*
 948	 * mac80211 guarantees that this function will not be called
 949	 * concurrently, so the following RCU access is safe, even without
 950	 * extra locking. This can not be checked easily, so we just set
 951	 * the condition to true.
 952	 */
 953	old = rcu_dereference_protected(pubsta->rates, true);
 954	rcu_assign_pointer(pubsta->rates, rates);
 955	if (old)
 956		kfree_rcu(old, rcu_head);
 957
 958	if (sta->uploaded)
 959		drv_sta_rate_tbl_update(hw_to_local(hw), sta->sdata, pubsta);
 960
 961	ieee80211_sta_set_expected_throughput(pubsta, sta_get_expected_throughput(sta));
 962
 963	return 0;
 964}
 965EXPORT_SYMBOL(rate_control_set_rates);
 966
 967int ieee80211_init_rate_ctrl_alg(struct ieee80211_local *local,
 968				 const char *name)
 969{
 970	struct rate_control_ref *ref;
 971
 972	ASSERT_RTNL();
 973
 974	if (local->open_count)
 975		return -EBUSY;
 976
 977	if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) {
 978		if (WARN_ON(!local->ops->set_rts_threshold))
 979			return -EINVAL;
 980		return 0;
 981	}
 982
 983	ref = rate_control_alloc(name, local);
 984	if (!ref) {
 985		wiphy_warn(local->hw.wiphy,
 986			   "Failed to select rate control algorithm\n");
 987		return -ENOENT;
 988	}
 989
 990	WARN_ON(local->rate_ctrl);
 991	local->rate_ctrl = ref;
 992
 993	wiphy_debug(local->hw.wiphy, "Selected rate control algorithm '%s'\n",
 994		    ref->ops->name);
 995
 996	return 0;
 997}
 998
 999void rate_control_deinitialize(struct ieee80211_local *local)
1000{
1001	struct rate_control_ref *ref;
1002
1003	ref = local->rate_ctrl;
1004
1005	if (!ref)
1006		return;
1007
1008	local->rate_ctrl = NULL;
1009	rate_control_free(local, ref);
1010}
v6.2
   1// SPDX-License-Identifier: GPL-2.0-only
   2/*
   3 * Copyright 2002-2005, Instant802 Networks, Inc.
   4 * Copyright 2005-2006, Devicescape Software, Inc.
   5 * Copyright (c) 2006 Jiri Benc <jbenc@suse.cz>
   6 * Copyright 2017	Intel Deutschland GmbH
   7 * Copyright (C) 2022 Intel Corporation
   8 */
   9
  10#include <linux/kernel.h>
  11#include <linux/rtnetlink.h>
  12#include <linux/module.h>
  13#include <linux/slab.h>
  14#include "rate.h"
  15#include "ieee80211_i.h"
  16#include "debugfs.h"
  17
  18struct rate_control_alg {
  19	struct list_head list;
  20	const struct rate_control_ops *ops;
  21};
  22
  23static LIST_HEAD(rate_ctrl_algs);
  24static DEFINE_MUTEX(rate_ctrl_mutex);
  25
  26static char *ieee80211_default_rc_algo = CONFIG_MAC80211_RC_DEFAULT;
  27module_param(ieee80211_default_rc_algo, charp, 0644);
  28MODULE_PARM_DESC(ieee80211_default_rc_algo,
  29		 "Default rate control algorithm for mac80211 to use");
  30
  31void rate_control_rate_init(struct sta_info *sta)
  32{
  33	struct ieee80211_local *local = sta->sdata->local;
  34	struct rate_control_ref *ref = sta->rate_ctrl;
  35	struct ieee80211_sta *ista = &sta->sta;
  36	void *priv_sta = sta->rate_ctrl_priv;
  37	struct ieee80211_supported_band *sband;
  38	struct ieee80211_chanctx_conf *chanctx_conf;
  39
  40	ieee80211_sta_set_rx_nss(&sta->deflink);
  41
  42	if (!ref)
  43		return;
  44
  45	rcu_read_lock();
  46
  47	chanctx_conf = rcu_dereference(sta->sdata->vif.bss_conf.chanctx_conf);
  48	if (WARN_ON(!chanctx_conf)) {
  49		rcu_read_unlock();
  50		return;
  51	}
  52
  53	sband = local->hw.wiphy->bands[chanctx_conf->def.chan->band];
  54
  55	/* TODO: check for minstrel_s1g ? */
  56	if (sband->band == NL80211_BAND_S1GHZ) {
  57		ieee80211_s1g_sta_rate_init(sta);
  58		rcu_read_unlock();
  59		return;
  60	}
  61
  62	spin_lock_bh(&sta->rate_ctrl_lock);
  63	ref->ops->rate_init(ref->priv, sband, &chanctx_conf->def, ista,
  64			    priv_sta);
  65	spin_unlock_bh(&sta->rate_ctrl_lock);
  66	rcu_read_unlock();
  67	set_sta_flag(sta, WLAN_STA_RATE_CONTROL);
  68}
  69
  70void rate_control_tx_status(struct ieee80211_local *local,
 
  71			    struct ieee80211_tx_status *st)
  72{
  73	struct rate_control_ref *ref = local->rate_ctrl;
  74	struct sta_info *sta = container_of(st->sta, struct sta_info, sta);
  75	void *priv_sta = sta->rate_ctrl_priv;
  76	struct ieee80211_supported_band *sband;
  77
  78	if (!ref || !test_sta_flag(sta, WLAN_STA_RATE_CONTROL))
  79		return;
  80
  81	sband = local->hw.wiphy->bands[st->info->band];
  82
  83	spin_lock_bh(&sta->rate_ctrl_lock);
  84	if (ref->ops->tx_status_ext)
  85		ref->ops->tx_status_ext(ref->priv, sband, priv_sta, st);
  86	else if (st->skb)
  87		ref->ops->tx_status(ref->priv, sband, st->sta, priv_sta, st->skb);
  88	else
  89		WARN_ON_ONCE(1);
  90
  91	spin_unlock_bh(&sta->rate_ctrl_lock);
  92}
  93
  94void rate_control_rate_update(struct ieee80211_local *local,
  95			      struct ieee80211_supported_band *sband,
  96			      struct sta_info *sta, unsigned int link_id,
  97			      u32 changed)
  98{
  99	struct rate_control_ref *ref = local->rate_ctrl;
 100	struct ieee80211_sta *ista = &sta->sta;
 101	void *priv_sta = sta->rate_ctrl_priv;
 102	struct ieee80211_chanctx_conf *chanctx_conf;
 103
 104	WARN_ON(link_id != 0);
 105
 106	if (ref && ref->ops->rate_update) {
 107		rcu_read_lock();
 108
 109		chanctx_conf = rcu_dereference(sta->sdata->vif.bss_conf.chanctx_conf);
 110		if (WARN_ON(!chanctx_conf)) {
 111			rcu_read_unlock();
 112			return;
 113		}
 114
 115		spin_lock_bh(&sta->rate_ctrl_lock);
 116		ref->ops->rate_update(ref->priv, sband, &chanctx_conf->def,
 117				      ista, priv_sta, changed);
 118		spin_unlock_bh(&sta->rate_ctrl_lock);
 119		rcu_read_unlock();
 120	}
 121
 122	drv_sta_rc_update(local, sta->sdata, &sta->sta, changed);
 123}
 124
 125int ieee80211_rate_control_register(const struct rate_control_ops *ops)
 126{
 127	struct rate_control_alg *alg;
 128
 129	if (!ops->name)
 130		return -EINVAL;
 131
 132	mutex_lock(&rate_ctrl_mutex);
 133	list_for_each_entry(alg, &rate_ctrl_algs, list) {
 134		if (!strcmp(alg->ops->name, ops->name)) {
 135			/* don't register an algorithm twice */
 136			WARN_ON(1);
 137			mutex_unlock(&rate_ctrl_mutex);
 138			return -EALREADY;
 139		}
 140	}
 141
 142	alg = kzalloc(sizeof(*alg), GFP_KERNEL);
 143	if (alg == NULL) {
 144		mutex_unlock(&rate_ctrl_mutex);
 145		return -ENOMEM;
 146	}
 147	alg->ops = ops;
 148
 149	list_add_tail(&alg->list, &rate_ctrl_algs);
 150	mutex_unlock(&rate_ctrl_mutex);
 151
 152	return 0;
 153}
 154EXPORT_SYMBOL(ieee80211_rate_control_register);
 155
 156void ieee80211_rate_control_unregister(const struct rate_control_ops *ops)
 157{
 158	struct rate_control_alg *alg;
 159
 160	mutex_lock(&rate_ctrl_mutex);
 161	list_for_each_entry(alg, &rate_ctrl_algs, list) {
 162		if (alg->ops == ops) {
 163			list_del(&alg->list);
 164			kfree(alg);
 165			break;
 166		}
 167	}
 168	mutex_unlock(&rate_ctrl_mutex);
 169}
 170EXPORT_SYMBOL(ieee80211_rate_control_unregister);
 171
 172static const struct rate_control_ops *
 173ieee80211_try_rate_control_ops_get(const char *name)
 174{
 175	struct rate_control_alg *alg;
 176	const struct rate_control_ops *ops = NULL;
 177
 178	if (!name)
 179		return NULL;
 180
 181	mutex_lock(&rate_ctrl_mutex);
 182	list_for_each_entry(alg, &rate_ctrl_algs, list) {
 183		if (!strcmp(alg->ops->name, name)) {
 184			ops = alg->ops;
 185			break;
 186		}
 187	}
 188	mutex_unlock(&rate_ctrl_mutex);
 189	return ops;
 190}
 191
 192/* Get the rate control algorithm. */
 193static const struct rate_control_ops *
 194ieee80211_rate_control_ops_get(const char *name)
 195{
 196	const struct rate_control_ops *ops;
 197	const char *alg_name;
 198
 199	kernel_param_lock(THIS_MODULE);
 200	if (!name)
 201		alg_name = ieee80211_default_rc_algo;
 202	else
 203		alg_name = name;
 204
 205	ops = ieee80211_try_rate_control_ops_get(alg_name);
 206	if (!ops && name)
 207		/* try default if specific alg requested but not found */
 208		ops = ieee80211_try_rate_control_ops_get(ieee80211_default_rc_algo);
 209
 210	/* Note: check for > 0 is intentional to avoid clang warning */
 211	if (!ops && (strlen(CONFIG_MAC80211_RC_DEFAULT) > 0))
 212		/* try built-in one if specific alg requested but not found */
 213		ops = ieee80211_try_rate_control_ops_get(CONFIG_MAC80211_RC_DEFAULT);
 214
 215	kernel_param_unlock(THIS_MODULE);
 216
 217	return ops;
 218}
 219
 220#ifdef CONFIG_MAC80211_DEBUGFS
 221static ssize_t rcname_read(struct file *file, char __user *userbuf,
 222			   size_t count, loff_t *ppos)
 223{
 224	struct rate_control_ref *ref = file->private_data;
 225	int len = strlen(ref->ops->name);
 226
 227	return simple_read_from_buffer(userbuf, count, ppos,
 228				       ref->ops->name, len);
 229}
 230
 231const struct file_operations rcname_ops = {
 232	.read = rcname_read,
 233	.open = simple_open,
 234	.llseek = default_llseek,
 235};
 236#endif
 237
 238static struct rate_control_ref *
 239rate_control_alloc(const char *name, struct ieee80211_local *local)
 240{
 241	struct rate_control_ref *ref;
 242
 243	ref = kmalloc(sizeof(struct rate_control_ref), GFP_KERNEL);
 244	if (!ref)
 245		return NULL;
 246	ref->ops = ieee80211_rate_control_ops_get(name);
 247	if (!ref->ops)
 248		goto free;
 249
 250	ref->priv = ref->ops->alloc(&local->hw);
 251	if (!ref->priv)
 252		goto free;
 253	return ref;
 254
 255free:
 256	kfree(ref);
 257	return NULL;
 258}
 259
 260static void rate_control_free(struct ieee80211_local *local,
 261			      struct rate_control_ref *ctrl_ref)
 262{
 263	ctrl_ref->ops->free(ctrl_ref->priv);
 264
 265#ifdef CONFIG_MAC80211_DEBUGFS
 266	debugfs_remove_recursive(local->debugfs.rcdir);
 267	local->debugfs.rcdir = NULL;
 268#endif
 269
 270	kfree(ctrl_ref);
 271}
 272
 273void ieee80211_check_rate_mask(struct ieee80211_link_data *link)
 274{
 275	struct ieee80211_sub_if_data *sdata = link->sdata;
 276	struct ieee80211_local *local = sdata->local;
 277	struct ieee80211_supported_band *sband;
 278	u32 user_mask, basic_rates = link->conf->basic_rates;
 279	enum nl80211_band band;
 280
 281	if (WARN_ON(!link->conf->chandef.chan))
 282		return;
 283
 284	band = link->conf->chandef.chan->band;
 285	if (band == NL80211_BAND_S1GHZ) {
 286		/* TODO */
 287		return;
 288	}
 289
 290	if (WARN_ON_ONCE(!basic_rates))
 291		return;
 292
 293	user_mask = sdata->rc_rateidx_mask[band];
 294	sband = local->hw.wiphy->bands[band];
 295
 296	if (user_mask & basic_rates)
 297		return;
 298
 299	sdata_dbg(sdata,
 300		  "no overlap between basic rates (0x%x) and user mask (0x%x on band %d) - clearing the latter",
 301		  basic_rates, user_mask, band);
 302	sdata->rc_rateidx_mask[band] = (1 << sband->n_bitrates) - 1;
 303}
 304
 305static bool rc_no_data_or_no_ack_use_min(struct ieee80211_tx_rate_control *txrc)
 306{
 307	struct sk_buff *skb = txrc->skb;
 308	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 309
 310	return (info->flags & (IEEE80211_TX_CTL_NO_ACK |
 311			       IEEE80211_TX_CTL_USE_MINRATE)) ||
 312		!ieee80211_is_tx_data(skb);
 313}
 314
 315static void rc_send_low_basicrate(struct ieee80211_tx_rate *rate,
 316				  u32 basic_rates,
 317				  struct ieee80211_supported_band *sband)
 318{
 319	u8 i;
 320
 321	if (sband->band == NL80211_BAND_S1GHZ) {
 322		/* TODO */
 323		rate->flags |= IEEE80211_TX_RC_S1G_MCS;
 324		rate->idx = 0;
 325		return;
 326	}
 327
 328	if (basic_rates == 0)
 329		return; /* assume basic rates unknown and accept rate */
 330	if (rate->idx < 0)
 331		return;
 332	if (basic_rates & (1 << rate->idx))
 333		return; /* selected rate is a basic rate */
 334
 335	for (i = rate->idx + 1; i <= sband->n_bitrates; i++) {
 336		if (basic_rates & (1 << i)) {
 337			rate->idx = i;
 338			return;
 339		}
 340	}
 341
 342	/* could not find a basic rate; use original selection */
 343}
 344
 345static void __rate_control_send_low(struct ieee80211_hw *hw,
 346				    struct ieee80211_supported_band *sband,
 347				    struct ieee80211_sta *sta,
 348				    struct ieee80211_tx_info *info,
 349				    u32 rate_mask)
 350{
 351	int i;
 352	u32 rate_flags =
 353		ieee80211_chandef_rate_flags(&hw->conf.chandef);
 354
 355	if (sband->band == NL80211_BAND_S1GHZ) {
 356		info->control.rates[0].flags |= IEEE80211_TX_RC_S1G_MCS;
 357		info->control.rates[0].idx = 0;
 358		return;
 359	}
 360
 361	if ((sband->band == NL80211_BAND_2GHZ) &&
 362	    (info->flags & IEEE80211_TX_CTL_NO_CCK_RATE))
 363		rate_flags |= IEEE80211_RATE_ERP_G;
 364
 365	info->control.rates[0].idx = 0;
 366	for (i = 0; i < sband->n_bitrates; i++) {
 367		if (!(rate_mask & BIT(i)))
 368			continue;
 369
 370		if ((rate_flags & sband->bitrates[i].flags) != rate_flags)
 371			continue;
 372
 373		if (!rate_supported(sta, sband->band, i))
 374			continue;
 375
 376		info->control.rates[0].idx = i;
 377		break;
 378	}
 379	WARN_ONCE(i == sband->n_bitrates,
 380		  "no supported rates for sta %pM (0x%x, band %d) in rate_mask 0x%x with flags 0x%x\n",
 381		  sta ? sta->addr : NULL,
 382		  sta ? sta->deflink.supp_rates[sband->band] : -1,
 383		  sband->band,
 384		  rate_mask, rate_flags);
 385
 386	info->control.rates[0].count =
 387		(info->flags & IEEE80211_TX_CTL_NO_ACK) ?
 388		1 : hw->max_rate_tries;
 389
 390	info->control.skip_table = 1;
 391}
 392
 393
 394static bool rate_control_send_low(struct ieee80211_sta *pubsta,
 395				  struct ieee80211_tx_rate_control *txrc)
 396{
 397	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(txrc->skb);
 398	struct ieee80211_supported_band *sband = txrc->sband;
 399	struct sta_info *sta;
 400	int mcast_rate;
 401	bool use_basicrate = false;
 402
 403	if (!pubsta || rc_no_data_or_no_ack_use_min(txrc)) {
 404		__rate_control_send_low(txrc->hw, sband, pubsta, info,
 405					txrc->rate_idx_mask);
 406
 407		if (!pubsta && txrc->bss) {
 408			mcast_rate = txrc->bss_conf->mcast_rate[sband->band];
 409			if (mcast_rate > 0) {
 410				info->control.rates[0].idx = mcast_rate - 1;
 411				return true;
 412			}
 413			use_basicrate = true;
 414		} else if (pubsta) {
 415			sta = container_of(pubsta, struct sta_info, sta);
 416			if (ieee80211_vif_is_mesh(&sta->sdata->vif))
 417				use_basicrate = true;
 418		}
 419
 420		if (use_basicrate)
 421			rc_send_low_basicrate(&info->control.rates[0],
 422					      txrc->bss_conf->basic_rates,
 423					      sband);
 424
 425		return true;
 426	}
 427	return false;
 428}
 429
 430static bool rate_idx_match_legacy_mask(s8 *rate_idx, int n_bitrates, u32 mask)
 431{
 432	int j;
 433
 434	/* See whether the selected rate or anything below it is allowed. */
 435	for (j = *rate_idx; j >= 0; j--) {
 436		if (mask & (1 << j)) {
 437			/* Okay, found a suitable rate. Use it. */
 438			*rate_idx = j;
 439			return true;
 440		}
 441	}
 442
 443	/* Try to find a higher rate that would be allowed */
 444	for (j = *rate_idx + 1; j < n_bitrates; j++) {
 445		if (mask & (1 << j)) {
 446			/* Okay, found a suitable rate. Use it. */
 447			*rate_idx = j;
 448			return true;
 449		}
 450	}
 451	return false;
 452}
 453
 454static bool rate_idx_match_mcs_mask(s8 *rate_idx, u8 *mcs_mask)
 455{
 456	int i, j;
 457	int ridx, rbit;
 458
 459	ridx = *rate_idx / 8;
 460	rbit = *rate_idx % 8;
 461
 462	/* sanity check */
 463	if (ridx < 0 || ridx >= IEEE80211_HT_MCS_MASK_LEN)
 464		return false;
 465
 466	/* See whether the selected rate or anything below it is allowed. */
 467	for (i = ridx; i >= 0; i--) {
 468		for (j = rbit; j >= 0; j--)
 469			if (mcs_mask[i] & BIT(j)) {
 470				*rate_idx = i * 8 + j;
 471				return true;
 472			}
 473		rbit = 7;
 474	}
 475
 476	/* Try to find a higher rate that would be allowed */
 477	ridx = (*rate_idx + 1) / 8;
 478	rbit = (*rate_idx + 1) % 8;
 479
 480	for (i = ridx; i < IEEE80211_HT_MCS_MASK_LEN; i++) {
 481		for (j = rbit; j < 8; j++)
 482			if (mcs_mask[i] & BIT(j)) {
 483				*rate_idx = i * 8 + j;
 484				return true;
 485			}
 486		rbit = 0;
 487	}
 488	return false;
 489}
 490
 491static bool rate_idx_match_vht_mcs_mask(s8 *rate_idx, u16 *vht_mask)
 492{
 493	int i, j;
 494	int ridx, rbit;
 495
 496	ridx = *rate_idx >> 4;
 497	rbit = *rate_idx & 0xf;
 498
 499	if (ridx < 0 || ridx >= NL80211_VHT_NSS_MAX)
 500		return false;
 501
 502	/* See whether the selected rate or anything below it is allowed. */
 503	for (i = ridx; i >= 0; i--) {
 504		for (j = rbit; j >= 0; j--) {
 505			if (vht_mask[i] & BIT(j)) {
 506				*rate_idx = (i << 4) | j;
 507				return true;
 508			}
 509		}
 510		rbit = 15;
 511	}
 512
 513	/* Try to find a higher rate that would be allowed */
 514	ridx = (*rate_idx + 1) >> 4;
 515	rbit = (*rate_idx + 1) & 0xf;
 516
 517	for (i = ridx; i < NL80211_VHT_NSS_MAX; i++) {
 518		for (j = rbit; j < 16; j++) {
 519			if (vht_mask[i] & BIT(j)) {
 520				*rate_idx = (i << 4) | j;
 521				return true;
 522			}
 523		}
 524		rbit = 0;
 525	}
 526	return false;
 527}
 528
 529static void rate_idx_match_mask(s8 *rate_idx, u16 *rate_flags,
 530				struct ieee80211_supported_band *sband,
 531				enum nl80211_chan_width chan_width,
 532				u32 mask,
 533				u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN],
 534				u16 vht_mask[NL80211_VHT_NSS_MAX])
 535{
 536	if (*rate_flags & IEEE80211_TX_RC_VHT_MCS) {
 537		/* handle VHT rates */
 538		if (rate_idx_match_vht_mcs_mask(rate_idx, vht_mask))
 539			return;
 540
 541		*rate_idx = 0;
 542		/* keep protection flags */
 543		*rate_flags &= (IEEE80211_TX_RC_USE_RTS_CTS |
 544				IEEE80211_TX_RC_USE_CTS_PROTECT |
 545				IEEE80211_TX_RC_USE_SHORT_PREAMBLE);
 546
 547		*rate_flags |= IEEE80211_TX_RC_MCS;
 548		if (chan_width == NL80211_CHAN_WIDTH_40)
 549			*rate_flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
 550
 551		if (rate_idx_match_mcs_mask(rate_idx, mcs_mask))
 552			return;
 553
 554		/* also try the legacy rates. */
 555		*rate_flags &= ~(IEEE80211_TX_RC_MCS |
 556				 IEEE80211_TX_RC_40_MHZ_WIDTH);
 557		if (rate_idx_match_legacy_mask(rate_idx, sband->n_bitrates,
 558					       mask))
 559			return;
 560	} else if (*rate_flags & IEEE80211_TX_RC_MCS) {
 561		/* handle HT rates */
 562		if (rate_idx_match_mcs_mask(rate_idx, mcs_mask))
 563			return;
 564
 565		/* also try the legacy rates. */
 566		*rate_idx = 0;
 567		/* keep protection flags */
 568		*rate_flags &= (IEEE80211_TX_RC_USE_RTS_CTS |
 569				IEEE80211_TX_RC_USE_CTS_PROTECT |
 570				IEEE80211_TX_RC_USE_SHORT_PREAMBLE);
 571		if (rate_idx_match_legacy_mask(rate_idx, sband->n_bitrates,
 572					       mask))
 573			return;
 574	} else {
 575		/* handle legacy rates */
 576		if (rate_idx_match_legacy_mask(rate_idx, sband->n_bitrates,
 577					       mask))
 578			return;
 579
 580		/* if HT BSS, and we handle a data frame, also try HT rates */
 581		switch (chan_width) {
 582		case NL80211_CHAN_WIDTH_20_NOHT:
 583		case NL80211_CHAN_WIDTH_5:
 584		case NL80211_CHAN_WIDTH_10:
 585			return;
 586		default:
 587			break;
 588		}
 589
 590		*rate_idx = 0;
 591		/* keep protection flags */
 592		*rate_flags &= (IEEE80211_TX_RC_USE_RTS_CTS |
 593				IEEE80211_TX_RC_USE_CTS_PROTECT |
 594				IEEE80211_TX_RC_USE_SHORT_PREAMBLE);
 595
 596		*rate_flags |= IEEE80211_TX_RC_MCS;
 597
 598		if (chan_width == NL80211_CHAN_WIDTH_40)
 599			*rate_flags |= IEEE80211_TX_RC_40_MHZ_WIDTH;
 600
 601		if (rate_idx_match_mcs_mask(rate_idx, mcs_mask))
 602			return;
 603	}
 604
 605	/*
 606	 * Uh.. No suitable rate exists. This should not really happen with
 607	 * sane TX rate mask configurations. However, should someone manage to
 608	 * configure supported rates and TX rate mask in incompatible way,
 609	 * allow the frame to be transmitted with whatever the rate control
 610	 * selected.
 611	 */
 612}
 613
 614static void rate_fixup_ratelist(struct ieee80211_vif *vif,
 615				struct ieee80211_supported_band *sband,
 616				struct ieee80211_tx_info *info,
 617				struct ieee80211_tx_rate *rates,
 618				int max_rates)
 619{
 620	struct ieee80211_rate *rate;
 621	bool inval = false;
 622	int i;
 623
 624	/*
 625	 * Set up the RTS/CTS rate as the fastest basic rate
 626	 * that is not faster than the data rate unless there
 627	 * is no basic rate slower than the data rate, in which
 628	 * case we pick the slowest basic rate
 629	 *
 630	 * XXX: Should this check all retry rates?
 631	 */
 632	if (!(rates[0].flags &
 633	      (IEEE80211_TX_RC_MCS | IEEE80211_TX_RC_VHT_MCS))) {
 634		u32 basic_rates = vif->bss_conf.basic_rates;
 635		s8 baserate = basic_rates ? ffs(basic_rates) - 1 : 0;
 636
 637		rate = &sband->bitrates[rates[0].idx];
 638
 639		for (i = 0; i < sband->n_bitrates; i++) {
 640			/* must be a basic rate */
 641			if (!(basic_rates & BIT(i)))
 642				continue;
 643			/* must not be faster than the data rate */
 644			if (sband->bitrates[i].bitrate > rate->bitrate)
 645				continue;
 646			/* maximum */
 647			if (sband->bitrates[baserate].bitrate <
 648			     sband->bitrates[i].bitrate)
 649				baserate = i;
 650		}
 651
 652		info->control.rts_cts_rate_idx = baserate;
 653	}
 654
 655	for (i = 0; i < max_rates; i++) {
 656		/*
 657		 * make sure there's no valid rate following
 658		 * an invalid one, just in case drivers don't
 659		 * take the API seriously to stop at -1.
 660		 */
 661		if (inval) {
 662			rates[i].idx = -1;
 663			continue;
 664		}
 665		if (rates[i].idx < 0) {
 666			inval = true;
 667			continue;
 668		}
 669
 670		/*
 671		 * For now assume MCS is already set up correctly, this
 672		 * needs to be fixed.
 673		 */
 674		if (rates[i].flags & IEEE80211_TX_RC_MCS) {
 675			WARN_ON(rates[i].idx > 76);
 676
 677			if (!(rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) &&
 678			    info->control.use_cts_prot)
 679				rates[i].flags |=
 680					IEEE80211_TX_RC_USE_CTS_PROTECT;
 681			continue;
 682		}
 683
 684		if (rates[i].flags & IEEE80211_TX_RC_VHT_MCS) {
 685			WARN_ON(ieee80211_rate_get_vht_mcs(&rates[i]) > 9);
 686			continue;
 687		}
 688
 689		/* set up RTS protection if desired */
 690		if (info->control.use_rts) {
 691			rates[i].flags |= IEEE80211_TX_RC_USE_RTS_CTS;
 692			info->control.use_cts_prot = false;
 693		}
 694
 695		/* RC is busted */
 696		if (WARN_ON_ONCE(rates[i].idx >= sband->n_bitrates)) {
 697			rates[i].idx = -1;
 698			continue;
 699		}
 700
 701		rate = &sband->bitrates[rates[i].idx];
 702
 703		/* set up short preamble */
 704		if (info->control.short_preamble &&
 705		    rate->flags & IEEE80211_RATE_SHORT_PREAMBLE)
 706			rates[i].flags |= IEEE80211_TX_RC_USE_SHORT_PREAMBLE;
 707
 708		/* set up G protection */
 709		if (!(rates[i].flags & IEEE80211_TX_RC_USE_RTS_CTS) &&
 710		    info->control.use_cts_prot &&
 711		    rate->flags & IEEE80211_RATE_ERP_G)
 712			rates[i].flags |= IEEE80211_TX_RC_USE_CTS_PROTECT;
 713	}
 714}
 715
 716
 717static void rate_control_fill_sta_table(struct ieee80211_sta *sta,
 718					struct ieee80211_tx_info *info,
 719					struct ieee80211_tx_rate *rates,
 720					int max_rates)
 721{
 722	struct ieee80211_sta_rates *ratetbl = NULL;
 723	int i;
 724
 725	if (sta && !info->control.skip_table)
 726		ratetbl = rcu_dereference(sta->rates);
 727
 728	/* Fill remaining rate slots with data from the sta rate table. */
 729	max_rates = min_t(int, max_rates, IEEE80211_TX_RATE_TABLE_SIZE);
 730	for (i = 0; i < max_rates; i++) {
 731		if (i < ARRAY_SIZE(info->control.rates) &&
 732		    info->control.rates[i].idx >= 0 &&
 733		    info->control.rates[i].count) {
 734			if (rates != info->control.rates)
 735				rates[i] = info->control.rates[i];
 736		} else if (ratetbl) {
 737			rates[i].idx = ratetbl->rate[i].idx;
 738			rates[i].flags = ratetbl->rate[i].flags;
 739			if (info->control.use_rts)
 740				rates[i].count = ratetbl->rate[i].count_rts;
 741			else if (info->control.use_cts_prot)
 742				rates[i].count = ratetbl->rate[i].count_cts;
 743			else
 744				rates[i].count = ratetbl->rate[i].count;
 745		} else {
 746			rates[i].idx = -1;
 747			rates[i].count = 0;
 748		}
 749
 750		if (rates[i].idx < 0 || !rates[i].count)
 751			break;
 752	}
 753}
 754
 755static bool rate_control_cap_mask(struct ieee80211_sub_if_data *sdata,
 756				  struct ieee80211_supported_band *sband,
 757				  struct ieee80211_sta *sta, u32 *mask,
 758				  u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN],
 759				  u16 vht_mask[NL80211_VHT_NSS_MAX])
 760{
 761	u32 i, flags;
 762
 763	*mask = sdata->rc_rateidx_mask[sband->band];
 764	flags = ieee80211_chandef_rate_flags(&sdata->vif.bss_conf.chandef);
 765	for (i = 0; i < sband->n_bitrates; i++) {
 766		if ((flags & sband->bitrates[i].flags) != flags)
 767			*mask &= ~BIT(i);
 768	}
 769
 770	if (*mask == (1 << sband->n_bitrates) - 1 &&
 771	    !sdata->rc_has_mcs_mask[sband->band] &&
 772	    !sdata->rc_has_vht_mcs_mask[sband->band])
 773		return false;
 774
 775	if (sdata->rc_has_mcs_mask[sband->band])
 776		memcpy(mcs_mask, sdata->rc_rateidx_mcs_mask[sband->band],
 777		       IEEE80211_HT_MCS_MASK_LEN);
 778	else
 779		memset(mcs_mask, 0xff, IEEE80211_HT_MCS_MASK_LEN);
 780
 781	if (sdata->rc_has_vht_mcs_mask[sband->band])
 782		memcpy(vht_mask, sdata->rc_rateidx_vht_mcs_mask[sband->band],
 783		       sizeof(u16) * NL80211_VHT_NSS_MAX);
 784	else
 785		memset(vht_mask, 0xff, sizeof(u16) * NL80211_VHT_NSS_MAX);
 786
 787	if (sta) {
 788		__le16 sta_vht_cap;
 789		u16 sta_vht_mask[NL80211_VHT_NSS_MAX];
 790
 791		/* Filter out rates that the STA does not support */
 792		*mask &= sta->deflink.supp_rates[sband->band];
 793		for (i = 0; i < IEEE80211_HT_MCS_MASK_LEN; i++)
 794			mcs_mask[i] &= sta->deflink.ht_cap.mcs.rx_mask[i];
 795
 796		sta_vht_cap = sta->deflink.vht_cap.vht_mcs.rx_mcs_map;
 797		ieee80211_get_vht_mask_from_cap(sta_vht_cap, sta_vht_mask);
 798		for (i = 0; i < NL80211_VHT_NSS_MAX; i++)
 799			vht_mask[i] &= sta_vht_mask[i];
 800	}
 801
 802	return true;
 803}
 804
 805static void
 806rate_control_apply_mask_ratetbl(struct sta_info *sta,
 807				struct ieee80211_supported_band *sband,
 808				struct ieee80211_sta_rates *rates)
 809{
 810	int i;
 811	u32 mask;
 812	u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN];
 813	u16 vht_mask[NL80211_VHT_NSS_MAX];
 814	enum nl80211_chan_width chan_width;
 815
 816	if (!rate_control_cap_mask(sta->sdata, sband, &sta->sta, &mask,
 817				   mcs_mask, vht_mask))
 818		return;
 819
 820	chan_width = sta->sdata->vif.bss_conf.chandef.width;
 821	for (i = 0; i < IEEE80211_TX_RATE_TABLE_SIZE; i++) {
 822		if (rates->rate[i].idx < 0)
 823			break;
 824
 825		rate_idx_match_mask(&rates->rate[i].idx, &rates->rate[i].flags,
 826				    sband, chan_width, mask, mcs_mask,
 827				    vht_mask);
 828	}
 829}
 830
 831static void rate_control_apply_mask(struct ieee80211_sub_if_data *sdata,
 832				    struct ieee80211_sta *sta,
 833				    struct ieee80211_supported_band *sband,
 834				    struct ieee80211_tx_rate *rates,
 835				    int max_rates)
 836{
 837	enum nl80211_chan_width chan_width;
 838	u8 mcs_mask[IEEE80211_HT_MCS_MASK_LEN];
 839	u32 mask;
 840	u16 rate_flags, vht_mask[NL80211_VHT_NSS_MAX];
 841	int i;
 842
 843	/*
 844	 * Try to enforce the rateidx mask the user wanted. skip this if the
 845	 * default mask (allow all rates) is used to save some processing for
 846	 * the common case.
 847	 */
 848	if (!rate_control_cap_mask(sdata, sband, sta, &mask, mcs_mask,
 849				   vht_mask))
 850		return;
 851
 852	/*
 853	 * Make sure the rate index selected for each TX rate is
 854	 * included in the configured mask and change the rate indexes
 855	 * if needed.
 856	 */
 857	chan_width = sdata->vif.bss_conf.chandef.width;
 858	for (i = 0; i < max_rates; i++) {
 859		/* Skip invalid rates */
 860		if (rates[i].idx < 0)
 861			break;
 862
 863		rate_flags = rates[i].flags;
 864		rate_idx_match_mask(&rates[i].idx, &rate_flags, sband,
 865				    chan_width, mask, mcs_mask, vht_mask);
 866		rates[i].flags = rate_flags;
 867	}
 868}
 869
 870void ieee80211_get_tx_rates(struct ieee80211_vif *vif,
 871			    struct ieee80211_sta *sta,
 872			    struct sk_buff *skb,
 873			    struct ieee80211_tx_rate *dest,
 874			    int max_rates)
 875{
 876	struct ieee80211_sub_if_data *sdata;
 877	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
 878	struct ieee80211_supported_band *sband;
 879
 880	rate_control_fill_sta_table(sta, info, dest, max_rates);
 881
 882	if (!vif)
 883		return;
 884
 885	sdata = vif_to_sdata(vif);
 886	sband = sdata->local->hw.wiphy->bands[info->band];
 887
 888	if (ieee80211_is_tx_data(skb))
 889		rate_control_apply_mask(sdata, sta, sband, dest, max_rates);
 890
 891	if (dest[0].idx < 0)
 892		__rate_control_send_low(&sdata->local->hw, sband, sta, info,
 893					sdata->rc_rateidx_mask[info->band]);
 894
 895	if (sta)
 896		rate_fixup_ratelist(vif, sband, info, dest, max_rates);
 897}
 898EXPORT_SYMBOL(ieee80211_get_tx_rates);
 899
 900void rate_control_get_rate(struct ieee80211_sub_if_data *sdata,
 901			   struct sta_info *sta,
 902			   struct ieee80211_tx_rate_control *txrc)
 903{
 904	struct rate_control_ref *ref = sdata->local->rate_ctrl;
 905	void *priv_sta = NULL;
 906	struct ieee80211_sta *ista = NULL;
 907	struct ieee80211_tx_info *info = IEEE80211_SKB_CB(txrc->skb);
 908	int i;
 909
 910	for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) {
 911		info->control.rates[i].idx = -1;
 912		info->control.rates[i].flags = 0;
 913		info->control.rates[i].count = 0;
 914	}
 915
 916	if (rate_control_send_low(sta ? &sta->sta : NULL, txrc))
 917		return;
 918
 919	if (ieee80211_hw_check(&sdata->local->hw, HAS_RATE_CONTROL))
 920		return;
 921
 922	if (sta && test_sta_flag(sta, WLAN_STA_RATE_CONTROL)) {
 923		ista = &sta->sta;
 924		priv_sta = sta->rate_ctrl_priv;
 925	}
 926
 927	if (ista) {
 928		spin_lock_bh(&sta->rate_ctrl_lock);
 929		ref->ops->get_rate(ref->priv, ista, priv_sta, txrc);
 930		spin_unlock_bh(&sta->rate_ctrl_lock);
 931	} else {
 932		rate_control_send_low(NULL, txrc);
 933	}
 934
 935	if (ieee80211_hw_check(&sdata->local->hw, SUPPORTS_RC_TABLE))
 936		return;
 937
 938	ieee80211_get_tx_rates(&sdata->vif, ista, txrc->skb,
 939			       info->control.rates,
 940			       ARRAY_SIZE(info->control.rates));
 941}
 942
 943int rate_control_set_rates(struct ieee80211_hw *hw,
 944			   struct ieee80211_sta *pubsta,
 945			   struct ieee80211_sta_rates *rates)
 946{
 947	struct sta_info *sta = container_of(pubsta, struct sta_info, sta);
 948	struct ieee80211_sta_rates *old;
 949	struct ieee80211_supported_band *sband;
 950
 951	sband = ieee80211_get_sband(sta->sdata);
 952	if (!sband)
 953		return -EINVAL;
 954	rate_control_apply_mask_ratetbl(sta, sband, rates);
 955	/*
 956	 * mac80211 guarantees that this function will not be called
 957	 * concurrently, so the following RCU access is safe, even without
 958	 * extra locking. This can not be checked easily, so we just set
 959	 * the condition to true.
 960	 */
 961	old = rcu_dereference_protected(pubsta->rates, true);
 962	rcu_assign_pointer(pubsta->rates, rates);
 963	if (old)
 964		kfree_rcu(old, rcu_head);
 965
 966	if (sta->uploaded)
 967		drv_sta_rate_tbl_update(hw_to_local(hw), sta->sdata, pubsta);
 968
 969	ieee80211_sta_set_expected_throughput(pubsta, sta_get_expected_throughput(sta));
 970
 971	return 0;
 972}
 973EXPORT_SYMBOL(rate_control_set_rates);
 974
 975int ieee80211_init_rate_ctrl_alg(struct ieee80211_local *local,
 976				 const char *name)
 977{
 978	struct rate_control_ref *ref;
 979
 980	ASSERT_RTNL();
 981
 982	if (local->open_count)
 983		return -EBUSY;
 984
 985	if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL)) {
 986		if (WARN_ON(!local->ops->set_rts_threshold))
 987			return -EINVAL;
 988		return 0;
 989	}
 990
 991	ref = rate_control_alloc(name, local);
 992	if (!ref) {
 993		wiphy_warn(local->hw.wiphy,
 994			   "Failed to select rate control algorithm\n");
 995		return -ENOENT;
 996	}
 997
 998	WARN_ON(local->rate_ctrl);
 999	local->rate_ctrl = ref;
1000
1001	wiphy_debug(local->hw.wiphy, "Selected rate control algorithm '%s'\n",
1002		    ref->ops->name);
1003
1004	return 0;
1005}
1006
1007void rate_control_deinitialize(struct ieee80211_local *local)
1008{
1009	struct rate_control_ref *ref;
1010
1011	ref = local->rate_ctrl;
1012
1013	if (!ref)
1014		return;
1015
1016	local->rate_ctrl = NULL;
1017	rate_control_free(local, ref);
1018}