svn commit: r327479 - in head/sys/dev: ath bwn iwi iwm iwn mwl otus ral rtwn usb/wlan wpi
Adrian Chadd
adrian at FreeBSD.org
Tue Jan 2 00:07:30 UTC 2018
Author: adrian
Date: Tue Jan 2 00:07:28 2018
New Revision: 327479
URL: https://svnweb.freebsd.org/changeset/base/327479
Log:
[net80211] convert all of the WME use over to a temporary copy of WME info.
This removes the direct WME info access in the ieee80211com struct and instead
provides a method of fetching the data. Right now it's a no-op but eventually
it'll turn into a per-VAP method for drivers that support it (eg iwn, iwm,
upcoming ath10k work) as things like p2p support require this kind of behaviour.
Tested:
* ath(4), STA and AP mode
TODO:
* yes, this is slightly stack size-y, but it is an important first step
to get drivers migrated over to a sensible WME API. A lot of per-phy things
need to be converted to per-VAP before P2P, 11ac firmware, etc stuff shows up.
Modified:
head/sys/dev/ath/if_ath_beacon.c
head/sys/dev/ath/if_ath_tx.c
head/sys/dev/bwn/if_bwn.c
head/sys/dev/iwi/if_iwi.c
head/sys/dev/iwm/if_iwm.c
head/sys/dev/iwn/if_iwn.c
head/sys/dev/mwl/if_mwl.c
head/sys/dev/otus/if_otus.c
head/sys/dev/ral/rt2661.c
head/sys/dev/ral/rt2860.c
head/sys/dev/rtwn/if_rtwn.c
head/sys/dev/usb/wlan/if_rum.c
head/sys/dev/usb/wlan/if_run.c
head/sys/dev/wpi/if_wpi.c
Modified: head/sys/dev/ath/if_ath_beacon.c
==============================================================================
--- head/sys/dev/ath/if_ath_beacon.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/ath/if_ath_beacon.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -150,8 +150,12 @@ ath_beaconq_config(struct ath_softc *sc)
qi.tqi_cwmin = ATH_BEACON_CWMIN_DEFAULT;
qi.tqi_cwmax = ATH_BEACON_CWMAX_DEFAULT;
} else {
- struct wmeParams *wmep =
- &ic->ic_wme.wme_chanParams.cap_wmeParams[WME_AC_BE];
+ struct chanAccParams chp;
+ struct wmeParams *wmep;
+
+ ieee80211_wme_ic_getparams(ic, &chp);
+ wmep = &chp.cap_wmeParams[WME_AC_BE];
+
/*
* Adhoc mode; important thing is to use 2x cwmin.
*/
Modified: head/sys/dev/ath/if_ath_tx.c
==============================================================================
--- head/sys/dev/ath/if_ath_tx.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/ath/if_ath_tx.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -1554,7 +1554,6 @@ ath_tx_normal_setup(struct ath_softc *sc, struct ieee8
{
struct ieee80211vap *vap = ni->ni_vap;
struct ieee80211com *ic = &sc->sc_ic;
- const struct chanAccParams *cap = &ic->ic_wme.wme_chanParams;
int error, iswep, ismcast, isfrag, ismrr;
int keyix, hdrlen, pktlen, try0 = 0;
u_int8_t rix = 0, txrate = 0;
@@ -1697,7 +1696,11 @@ ath_tx_normal_setup(struct ath_softc *sc, struct ieee8
ismrr = 1;
bf->bf_state.bfs_doratelookup = 1;
}
- if (cap->cap_wmeParams[pri].wmep_noackPolicy)
+
+ /*
+ * Check whether to set NOACK for this WME category or not.
+ */
+ if (ieee80211_wme_vap_ac_is_noack(vap, pri))
flags |= HAL_TXDESC_NOACK;
break;
default:
Modified: head/sys/dev/bwn/if_bwn.c
==============================================================================
--- head/sys/dev/bwn/if_bwn.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/bwn/if_bwn.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -1755,15 +1755,18 @@ bwn_wme_update(struct ieee80211com *ic)
{
struct bwn_softc *sc = ic->ic_softc;
struct bwn_mac *mac = sc->sc_curmac;
+ struct chanAccParams chp;
struct wmeParams *wmep;
int i;
+ ieee80211_wme_ic_getparams(ic, &chp);
+
BWN_LOCK(sc);
mac = sc->sc_curmac;
if (mac != NULL && mac->mac_status >= BWN_MAC_STATUS_INITED) {
bwn_mac_suspend(mac);
for (i = 0; i < N(sc->sc_wmeParams); i++) {
- wmep = &ic->ic_wme.wme_chanParams.cap_wmeParams[i];
+ wmep = &chp.cap_wmeParams[i];
bwn_wme_loadparams(mac, wmep, bwn_wme_shm_offsets[i]);
}
bwn_mac_enable(mac);
Modified: head/sys/dev/iwi/if_iwi.c
==============================================================================
--- head/sys/dev/iwi/if_iwi.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/iwi/if_iwi.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -1050,12 +1050,15 @@ static int
iwi_wme_setparams(struct iwi_softc *sc)
{
struct ieee80211com *ic = &sc->sc_ic;
+ struct chanAccParams chp;
const struct wmeParams *wmep;
int ac;
+ ieee80211_wme_ic_getparams(ic, &chp);
+
for (ac = 0; ac < WME_NUM_AC; ac++) {
/* set WME values for current operating mode */
- wmep = &ic->ic_wme.wme_chanParams.cap_wmeParams[ac];
+ wmep = &chp.cap_wmeParams[ac];
sc->wme[0].aifsn[ac] = wmep->wmep_aifsn;
sc->wme[0].cwmin[ac] = IWI_EXP2(wmep->wmep_logcwmin);
sc->wme[0].cwmax[ac] = IWI_EXP2(wmep->wmep_logcwmax);
@@ -1771,11 +1774,9 @@ iwi_tx_start(struct iwi_softc *sc, struct mbuf *m0, st
int ac)
{
struct ieee80211vap *vap = ni->ni_vap;
- struct ieee80211com *ic = ni->ni_ic;
struct iwi_node *in = (struct iwi_node *)ni;
const struct ieee80211_frame *wh;
struct ieee80211_key *k;
- const struct chanAccParams *cap;
struct iwi_tx_ring *txq = &sc->txq[ac];
struct iwi_tx_data *data;
struct iwi_tx_desc *desc;
@@ -1797,8 +1798,7 @@ iwi_tx_start(struct iwi_softc *sc, struct mbuf *m0, st
flags |= IWI_DATA_FLAG_SHPREAMBLE;
if (IEEE80211_QOS_HAS_SEQ(wh)) {
xflags |= IWI_DATA_XFLAG_QOS;
- cap = &ic->ic_wme.wme_chanParams;
- if (!cap->cap_wmeParams[ac].wmep_noackPolicy)
+ if (ieee80211_wme_vap_ac_is_noack(vap, ac))
flags &= ~IWI_DATA_FLAG_NEED_ACK;
}
Modified: head/sys/dev/iwm/if_iwm.c
==============================================================================
--- head/sys/dev/iwm/if_iwm.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/iwm/if_iwm.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -6041,6 +6041,7 @@ iwm_wme_update(struct ieee80211com *ic)
{
#define IWM_EXP2(x) ((1 << (x)) - 1) /* CWmin = 2^ECWmin - 1 */
struct iwm_softc *sc = ic->ic_softc;
+ struct chanAccParams chp;
struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
struct iwm_vap *ivp = IWM_VAP(vap);
struct iwm_node *in;
@@ -6050,9 +6051,11 @@ iwm_wme_update(struct ieee80211com *ic)
if (vap == NULL)
return (0);
+ ieee80211_wme_ic_getparams(ic, &chp);
+
IEEE80211_LOCK(ic);
for (aci = 0; aci < WME_NUM_AC; aci++)
- tmp[aci] = ic->ic_wme.wme_chanParams.cap_wmeParams[aci];
+ tmp[aci] = chp.cap_wmeParams[aci];
IEEE80211_UNLOCK(ic);
IWM_LOCK(sc);
Modified: head/sys/dev/iwn/if_iwn.c
==============================================================================
--- head/sys/dev/iwn/if_iwn.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/iwn/if_iwn.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -5301,17 +5301,19 @@ iwn_updateedca(struct ieee80211com *ic)
#define IWN_EXP2(x) ((1 << (x)) - 1) /* CWmin = 2^ECWmin - 1 */
struct iwn_softc *sc = ic->ic_softc;
struct iwn_edca_params cmd;
+ struct chanAccParams chp;
int aci;
DPRINTF(sc, IWN_DEBUG_TRACE, "->%s begin\n", __func__);
+ ieee80211_wme_ic_getparams(ic, &chp);
+
memset(&cmd, 0, sizeof cmd);
cmd.flags = htole32(IWN_EDCA_UPDATE);
IEEE80211_LOCK(ic);
for (aci = 0; aci < WME_NUM_AC; aci++) {
- const struct wmeParams *ac =
- &ic->ic_wme.wme_chanParams.cap_wmeParams[aci];
+ const struct wmeParams *ac = &chp.cap_wmeParams[aci];
cmd.ac[aci].aifsn = ac->wmep_aifsn;
cmd.ac[aci].cwmin = htole16(IWN_EXP2(ac->wmep_logcwmin));
cmd.ac[aci].cwmax = htole16(IWN_EXP2(ac->wmep_logcwmax));
Modified: head/sys/dev/mwl/if_mwl.c
==============================================================================
--- head/sys/dev/mwl/if_mwl.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/mwl/if_mwl.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -2893,10 +2893,14 @@ mwl_txq_update(struct mwl_softc *sc, int ac)
{
#define MWL_EXPONENT_TO_VALUE(v) ((1<<v)-1)
struct ieee80211com *ic = &sc->sc_ic;
+ struct chanAccParams chp;
struct mwl_txq *txq = sc->sc_ac2q[ac];
- struct wmeParams *wmep = &ic->ic_wme.wme_chanParams.cap_wmeParams[ac];
+ struct wmeParams *wmep;
struct mwl_hal *mh = sc->sc_mh;
int aifs, cwmin, cwmax, txoplim;
+
+ ieee80211_wme_ic_getparams(ic, &chp);
+ wmep = &chp.cap_wmeParams[ac];
aifs = wmep->wmep_aifsn;
/* XXX in sta mode need to pass log values for cwmin/max */
Modified: head/sys/dev/otus/if_otus.c
==============================================================================
--- head/sys/dev/otus/if_otus.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/otus/if_otus.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -2392,12 +2392,15 @@ otus_updateedca_locked(struct otus_softc *sc)
{
#define EXP2(val) ((1 << (val)) - 1)
#define AIFS(val) ((val) * 9 + 10)
+ struct chanAccParams chp;
struct ieee80211com *ic = &sc->sc_ic;
const struct wmeParams *edca;
+ ieee80211_wme_ic_getparams(ic, &chp);
+
OTUS_LOCK_ASSERT(sc);
- edca = ic->ic_wme.wme_chanParams.cap_wmeParams;
+ edca = chp.cap_wmeParams;
/* Set CWmin/CWmax values. */
otus_write(sc, AR_MAC_REG_AC0_CW,
Modified: head/sys/dev/ral/rt2661.c
==============================================================================
--- head/sys/dev/ral/rt2661.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/ral/rt2661.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -1437,7 +1437,6 @@ rt2661_tx_data(struct rt2661_softc *sc, struct mbuf *m
struct ieee80211_frame *wh;
const struct ieee80211_txparam *tp = ni->ni_txparms;
struct ieee80211_key *k;
- const struct chanAccParams *cap;
struct mbuf *mnew;
bus_dma_segment_t segs[RT2661_MAX_SCATTER];
uint16_t dur;
@@ -1458,10 +1457,8 @@ rt2661_tx_data(struct rt2661_softc *sc, struct mbuf *m
}
rate &= IEEE80211_RATE_VAL;
- if (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_QOS) {
- cap = &ic->ic_wme.wme_chanParams;
- noack = cap->cap_wmeParams[ac].wmep_noackPolicy;
- }
+ if (wh->i_fc[0] & IEEE80211_FC0_SUBTYPE_QOS)
+ noack = !! ieee80211_wme_vap_ac_is_noack(vap, ac);
if (wh->i_fc[1] & IEEE80211_FC1_PROTECTED) {
k = ieee80211_crypto_encap(ni, m0);
@@ -2045,9 +2042,12 @@ static int
rt2661_wme_update(struct ieee80211com *ic)
{
struct rt2661_softc *sc = ic->ic_softc;
+ struct chanAccParams chp;
const struct wmeParams *wmep;
- wmep = ic->ic_wme.wme_chanParams.cap_wmeParams;
+ ieee80211_wme_ic_getparams(ic, &chp);
+
+ wmep = chp.cap_wmeParams;
/* XXX: not sure about shifts. */
/* XXX: the reference driver plays with AC_VI settings too. */
Modified: head/sys/dev/ral/rt2860.c
==============================================================================
--- head/sys/dev/ral/rt2860.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/ral/rt2860.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -3115,10 +3115,13 @@ static int
rt2860_updateedca(struct ieee80211com *ic)
{
struct rt2860_softc *sc = ic->ic_softc;
+ struct chanAccParams chp;
const struct wmeParams *wmep;
int aci;
- wmep = ic->ic_wme.wme_chanParams.cap_wmeParams;
+ ieee80211_wme_ic_getparams(ic, &chp);
+
+ wmep = chp.cap_wmeParams;
/* update MAC TX configuration registers */
for (aci = 0; aci < WME_NUM_AC; aci++) {
Modified: head/sys/dev/rtwn/if_rtwn.c
==============================================================================
--- head/sys/dev/rtwn/if_rtwn.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/rtwn/if_rtwn.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -1574,17 +1574,19 @@ rtwn_set_channel(struct ieee80211com *ic)
static int
rtwn_wme_update(struct ieee80211com *ic)
{
+ struct chanAccParams chp;
struct ieee80211_channel *c = ic->ic_curchan;
struct rtwn_softc *sc = ic->ic_softc;
struct wmeParams *wmep = sc->cap_wmeParams;
uint8_t aifs, acm, slottime;
int ac;
+ ieee80211_wme_ic_getparams(ic, &chp);
+
/* Prevent possible races. */
IEEE80211_LOCK(ic); /* XXX */
RTWN_LOCK(sc);
- memcpy(wmep, ic->ic_wme.wme_chanParams.cap_wmeParams,
- sizeof(sc->cap_wmeParams));
+ memcpy(wmep, chp.cap_wmeParams, sizeof(sc->cap_wmeParams));
RTWN_UNLOCK(sc);
IEEE80211_UNLOCK(ic);
Modified: head/sys/dev/usb/wlan/if_rum.c
==============================================================================
--- head/sys/dev/usb/wlan/if_rum.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/usb/wlan/if_rum.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -2301,10 +2301,13 @@ rum_update_slot(struct ieee80211com *ic)
static int
rum_wme_update(struct ieee80211com *ic)
{
- const struct wmeParams *chanp =
- ic->ic_wme.wme_chanParams.cap_wmeParams;
+ struct chanAccParams chp;
+ const struct wmeParams *chanp;
struct rum_softc *sc = ic->ic_softc;
int error = 0;
+
+ ieee80211_wme_ic_getparams(ic, &chp);
+ chanp = chp.cap_wmeParams;
RUM_LOCK(sc);
error = rum_write(sc, RT2573_AIFSN_CSR,
Modified: head/sys/dev/usb/wlan/if_run.c
==============================================================================
--- head/sys/dev/usb/wlan/if_run.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/usb/wlan/if_run.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -2217,10 +2217,13 @@ run_newstate(struct ieee80211vap *vap, enum ieee80211_
static int
run_wme_update(struct ieee80211com *ic)
{
+ struct chanAccParams chp;
struct run_softc *sc = ic->ic_softc;
- const struct wmeParams *ac =
- ic->ic_wme.wme_chanParams.cap_wmeParams;
+ const struct wmeParams *ac;
int aci, error = 0;
+
+ ieee80211_wme_ic_getparams(ic, &chp);
+ ac = chp.cap_wmeParams;
/* update MAC TX configuration registers */
RUN_LOCK(sc);
Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c Tue Jan 2 00:02:36 2018 (r327478)
+++ head/sys/dev/wpi/if_wpi.c Tue Jan 2 00:07:28 2018 (r327479)
@@ -3521,16 +3521,18 @@ wpi_updateedca(struct ieee80211com *ic)
{
#define WPI_EXP2(x) ((1 << (x)) - 1) /* CWmin = 2^ECWmin - 1 */
struct wpi_softc *sc = ic->ic_softc;
+ struct chanAccParams chp;
struct wpi_edca_params cmd;
int aci, error;
+ ieee80211_wme_ic_getparams(ic, &chp);
+
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_BEGIN, __func__);
memset(&cmd, 0, sizeof cmd);
cmd.flags = htole32(WPI_EDCA_UPDATE);
for (aci = 0; aci < WME_NUM_AC; aci++) {
- const struct wmeParams *ac =
- &ic->ic_wme.wme_chanParams.cap_wmeParams[aci];
+ const struct wmeParams *ac = &chp.cap_wmeParams[aci];
cmd.ac[aci].aifsn = ac->wmep_aifsn;
cmd.ac[aci].cwmin = htole16(WPI_EXP2(ac->wmep_logcwmin));
cmd.ac[aci].cwmax = htole16(WPI_EXP2(ac->wmep_logcwmax));
More information about the svn-src-all
mailing list