rum(4): sync rum_enable_tsf(_sync) with run(4).

Submitted by:	<s3erios@gmail.com>
Differential Revision:	https://reviews.freebsd.org/D3611
This commit is contained in:
Adrian Chadd 2015-10-02 15:30:37 +00:00
parent a05022b22c
commit d847071cf6
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=288504
2 changed files with 38 additions and 12 deletions

View File

@ -1730,12 +1730,35 @@ rum_enable_tsf_sync(struct rum_softc *sc)
/* set beacon interval (in 1/16ms unit) */
tmp |= vap->iv_bss->ni_intval * 16;
tmp |= RT2573_TSF_TIMER_EN | RT2573_TBTT_TIMER_EN;
tmp |= RT2573_TSF_TICKING | RT2573_ENABLE_TBTT;
if (vap->iv_opmode == IEEE80211_M_STA)
tmp |= RT2573_TSF_MODE(1);
else
tmp |= RT2573_TSF_MODE(2) | RT2573_GENERATE_BEACON;
switch (vap->iv_opmode) {
case IEEE80211_M_STA:
/*
* Local TSF is always updated with remote TSF on beacon
* reception.
*/
tmp |= RT2573_TSF_SYNC_MODE(RT2573_TSF_SYNC_MODE_STA);
break;
case IEEE80211_M_IBSS:
/*
* Local TSF is updated with remote TSF on beacon reception
* only if the remote TSF is greater than local TSF.
*/
tmp |= RT2573_TSF_SYNC_MODE(RT2573_TSF_SYNC_MODE_IBSS);
tmp |= RT2573_BCN_TX_EN;
break;
case IEEE80211_M_HOSTAP:
/* SYNC with nobody */
tmp |= RT2573_TSF_SYNC_MODE(RT2573_TSF_SYNC_MODE_HOSTAP);
tmp |= RT2573_BCN_TX_EN;
break;
default:
device_printf(sc->sc_dev,
"Enabling TSF failed. undefined opmode %d\n",
vap->iv_opmode);
return;
}
rum_write(sc, RT2573_TXRX_CSR9, tmp);
}
@ -1743,8 +1766,8 @@ rum_enable_tsf_sync(struct rum_softc *sc)
static void
rum_enable_tsf(struct rum_softc *sc)
{
rum_modbits(sc, RT2573_TXRX_CSR9,
RT2573_TSF_TICKING | RT2573_TSF_MODE(2), 0x00ffffff);
rum_modbits(sc, RT2573_TXRX_CSR9, RT2573_TSF_TIMER_EN |
RT2573_TSF_SYNC_MODE(RT2573_TSF_SYNC_MODE_DIS), 0x00ffffff);
}
static void

View File

@ -124,11 +124,14 @@
#define RT2573_MRR_CCK_FALLBACK (1 << 22)
/* possible flags for register TXRX_CSR9 */
#define RT2573_TSF_TICKING (1 << 16)
#define RT2573_TSF_MODE(x) (((x) & 0x3) << 17)
/* TBTT stands for Target Beacon Transmission Time */
#define RT2573_ENABLE_TBTT (1 << 19)
#define RT2573_GENERATE_BEACON (1 << 20)
#define RT2573_TSF_TIMER_EN (1 << 16)
#define RT2573_TSF_SYNC_MODE(x) (((x) & 0x3) << 17)
#define RT2573_TSF_SYNC_MODE_DIS 0
#define RT2573_TSF_SYNC_MODE_STA 1
#define RT2573_TSF_SYNC_MODE_IBSS 2
#define RT2573_TSF_SYNC_MODE_HOSTAP 3
#define RT2573_TBTT_TIMER_EN (1 << 19)
#define RT2573_BCN_TX_EN (1 << 20)
/* possible flags for register PHY_CSR0 */
#define RT2573_PA_PE_2GHZ (1 << 16)