Changeset View
Changeset View
Standalone View
Standalone View
sys/dev/bwn/if_bwn.c
Show First 20 Lines • Show All 2,116 Lines • ▼ Show 20 Lines | bwn_stop(struct bwn_softc *sc) | ||||
sc->sc_rf_enabled = 0; | sc->sc_rf_enabled = 0; | ||||
sc->sc_flags &= ~BWN_FLAG_RUNNING; | sc->sc_flags &= ~BWN_FLAG_RUNNING; | ||||
} | } | ||||
static void | static void | ||||
bwn_wme_clear(struct bwn_softc *sc) | bwn_wme_clear(struct bwn_softc *sc) | ||||
{ | { | ||||
#define MS(_v, _f) (((_v) & _f) >> _f##_S) | |||||
struct wmeParams *p; | struct wmeParams *p; | ||||
unsigned int i; | unsigned int i; | ||||
KASSERT(N(bwn_wme_shm_offsets) == N(sc->sc_wmeParams), | KASSERT(N(bwn_wme_shm_offsets) == N(sc->sc_wmeParams), | ||||
("%s:%d: fail", __func__, __LINE__)); | ("%s:%d: fail", __func__, __LINE__)); | ||||
for (i = 0; i < N(sc->sc_wmeParams); i++) { | for (i = 0; i < N(sc->sc_wmeParams); i++) { | ||||
p = &(sc->sc_wmeParams[i]); | p = &(sc->sc_wmeParams[i]); | ||||
switch (bwn_wme_shm_offsets[i]) { | switch (bwn_wme_shm_offsets[i]) { | ||||
case BWN_WME_VOICE: | case BWN_WME_VOICE: | ||||
p->wmep_txopLimit = 0; | p->wmep_txopLimit = 0; | ||||
p->wmep_aifsn = 2; | p->wmep_aifsn = 2; | ||||
/* XXX FIXME: log2(cwmin) */ | /* XXX FIXME: log2(cwmin) */ | ||||
p->wmep_logcwmin = MS(0x0001, WME_PARAM_LOGCWMIN); | p->wmep_logcwmin = _IEEE80211_MASKSHIFT(0x0001, WME_PARAM_LOGCWMIN); | ||||
p->wmep_logcwmax = MS(0x0001, WME_PARAM_LOGCWMAX); | p->wmep_logcwmax = _IEEE80211_MASKSHIFT(0x0001, WME_PARAM_LOGCWMAX); | ||||
break; | break; | ||||
case BWN_WME_VIDEO: | case BWN_WME_VIDEO: | ||||
p->wmep_txopLimit = 0; | p->wmep_txopLimit = 0; | ||||
p->wmep_aifsn = 2; | p->wmep_aifsn = 2; | ||||
/* XXX FIXME: log2(cwmin) */ | /* XXX FIXME: log2(cwmin) */ | ||||
p->wmep_logcwmin = MS(0x0001, WME_PARAM_LOGCWMIN); | p->wmep_logcwmin = _IEEE80211_MASKSHIFT(0x0001, WME_PARAM_LOGCWMIN); | ||||
p->wmep_logcwmax = MS(0x0001, WME_PARAM_LOGCWMAX); | p->wmep_logcwmax = _IEEE80211_MASKSHIFT(0x0001, WME_PARAM_LOGCWMAX); | ||||
break; | break; | ||||
case BWN_WME_BESTEFFORT: | case BWN_WME_BESTEFFORT: | ||||
p->wmep_txopLimit = 0; | p->wmep_txopLimit = 0; | ||||
p->wmep_aifsn = 3; | p->wmep_aifsn = 3; | ||||
/* XXX FIXME: log2(cwmin) */ | /* XXX FIXME: log2(cwmin) */ | ||||
p->wmep_logcwmin = MS(0x0001, WME_PARAM_LOGCWMIN); | p->wmep_logcwmin = _IEEE80211_MASKSHIFT(0x0001, WME_PARAM_LOGCWMIN); | ||||
p->wmep_logcwmax = MS(0x03ff, WME_PARAM_LOGCWMAX); | p->wmep_logcwmax = _IEEE80211_MASKSHIFT(0x03ff, WME_PARAM_LOGCWMAX); | ||||
break; | break; | ||||
case BWN_WME_BACKGROUND: | case BWN_WME_BACKGROUND: | ||||
p->wmep_txopLimit = 0; | p->wmep_txopLimit = 0; | ||||
p->wmep_aifsn = 7; | p->wmep_aifsn = 7; | ||||
/* XXX FIXME: log2(cwmin) */ | /* XXX FIXME: log2(cwmin) */ | ||||
p->wmep_logcwmin = MS(0x0001, WME_PARAM_LOGCWMIN); | p->wmep_logcwmin = _IEEE80211_MASKSHIFT(0x0001, WME_PARAM_LOGCWMIN); | ||||
p->wmep_logcwmax = MS(0x03ff, WME_PARAM_LOGCWMAX); | p->wmep_logcwmax = _IEEE80211_MASKSHIFT(0x03ff, WME_PARAM_LOGCWMAX); | ||||
break; | break; | ||||
default: | default: | ||||
KASSERT(0 == 1, ("%s:%d: fail", __func__, __LINE__)); | KASSERT(0 == 1, ("%s:%d: fail", __func__, __LINE__)); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
static int | static int | ||||
▲ Show 20 Lines • Show All 2,436 Lines • ▼ Show 20 Lines | bwn_wme_loadparams(mac, &(sc->sc_wmeParams[i]), | ||||
bwn_wme_shm_offsets[i]); | bwn_wme_shm_offsets[i]); | ||||
bwn_mac_enable(mac); | bwn_mac_enable(mac); | ||||
} | } | ||||
static void | static void | ||||
bwn_wme_loadparams(struct bwn_mac *mac, | bwn_wme_loadparams(struct bwn_mac *mac, | ||||
const struct wmeParams *p, uint16_t shm_offset) | const struct wmeParams *p, uint16_t shm_offset) | ||||
{ | { | ||||
#define SM(_v, _f) (((_v) << _f##_S) & _f) | |||||
struct bwn_softc *sc = mac->mac_sc; | struct bwn_softc *sc = mac->mac_sc; | ||||
uint16_t params[BWN_NR_WMEPARAMS]; | uint16_t params[BWN_NR_WMEPARAMS]; | ||||
int slot, tmp; | int slot, tmp; | ||||
unsigned int i; | unsigned int i; | ||||
slot = BWN_READ_2(mac, BWN_RNG) & | slot = BWN_READ_2(mac, BWN_RNG) & | ||||
SM(p->wmep_logcwmin, WME_PARAM_LOGCWMIN); | _IEEE80211_SHIFTMASK(p->wmep_logcwmin, WME_PARAM_LOGCWMIN); | ||||
memset(¶ms, 0, sizeof(params)); | memset(¶ms, 0, sizeof(params)); | ||||
DPRINTF(sc, BWN_DEBUG_WME, "wmep_txopLimit %d wmep_logcwmin %d " | DPRINTF(sc, BWN_DEBUG_WME, "wmep_txopLimit %d wmep_logcwmin %d " | ||||
"wmep_logcwmax %d wmep_aifsn %d\n", p->wmep_txopLimit, | "wmep_logcwmax %d wmep_aifsn %d\n", p->wmep_txopLimit, | ||||
p->wmep_logcwmin, p->wmep_logcwmax, p->wmep_aifsn); | p->wmep_logcwmin, p->wmep_logcwmax, p->wmep_aifsn); | ||||
params[BWN_WMEPARAM_TXOP] = p->wmep_txopLimit * 32; | params[BWN_WMEPARAM_TXOP] = p->wmep_txopLimit * 32; | ||||
params[BWN_WMEPARAM_CWMIN] = SM(p->wmep_logcwmin, WME_PARAM_LOGCWMIN); | params[BWN_WMEPARAM_CWMIN] = _IEEE80211_SHIFTMASK(p->wmep_logcwmin, WME_PARAM_LOGCWMIN); | ||||
params[BWN_WMEPARAM_CWMAX] = SM(p->wmep_logcwmax, WME_PARAM_LOGCWMAX); | params[BWN_WMEPARAM_CWMAX] = _IEEE80211_SHIFTMASK(p->wmep_logcwmax, WME_PARAM_LOGCWMAX); | ||||
params[BWN_WMEPARAM_CWCUR] = SM(p->wmep_logcwmin, WME_PARAM_LOGCWMIN); | params[BWN_WMEPARAM_CWCUR] = _IEEE80211_SHIFTMASK(p->wmep_logcwmin, WME_PARAM_LOGCWMIN); | ||||
params[BWN_WMEPARAM_AIFS] = p->wmep_aifsn; | params[BWN_WMEPARAM_AIFS] = p->wmep_aifsn; | ||||
params[BWN_WMEPARAM_BSLOTS] = slot; | params[BWN_WMEPARAM_BSLOTS] = slot; | ||||
params[BWN_WMEPARAM_REGGAP] = slot + p->wmep_aifsn; | params[BWN_WMEPARAM_REGGAP] = slot + p->wmep_aifsn; | ||||
for (i = 0; i < N(params); i++) { | for (i = 0; i < N(params); i++) { | ||||
if (i == BWN_WMEPARAM_STATUS) { | if (i == BWN_WMEPARAM_STATUS) { | ||||
tmp = bwn_shm_read_2(mac, BWN_SHARED, | tmp = bwn_shm_read_2(mac, BWN_SHARED, | ||||
shm_offset + (i * 2)); | shm_offset + (i * 2)); | ||||
▲ Show 20 Lines • Show All 3,103 Lines • Show Last 20 Lines |