svn commit: r280083 - head/sys/dev/wpi
Adrian Chadd
adrian at FreeBSD.org
Sun Mar 15 20:51:07 UTC 2015
Author: adrian
Date: Sun Mar 15 20:51:06 2015
New Revision: 280083
URL: https://svnweb.freebsd.org/changeset/base/280083
Log:
Move beacon initialisation to wpi_init_beacon()
PR: kern/197143
Submitted by: Andriy Voskoboinyk <s3erios at gmail.com>
Modified:
head/sys/dev/wpi/if_wpi.c
Modified: head/sys/dev/wpi/if_wpi.c
==============================================================================
--- head/sys/dev/wpi/if_wpi.c Sun Mar 15 20:50:23 2015 (r280082)
+++ head/sys/dev/wpi/if_wpi.c Sun Mar 15 20:51:06 2015 (r280083)
@@ -130,6 +130,7 @@ static int wpi_probe(device_t);
static int wpi_attach(device_t);
static void wpi_radiotap_attach(struct wpi_softc *);
static void wpi_sysctlattach(struct wpi_softc *);
+static void wpi_init_beacon(struct wpi_vap *);
static struct ieee80211vap *wpi_vap_create(struct ieee80211com *,
const char [IFNAMSIZ], int, enum ieee80211_opmode, int,
const uint8_t [IEEE80211_ADDR_LEN],
@@ -579,6 +580,23 @@ wpi_sysctlattach(struct wpi_softc *sc)
#endif
}
+static void
+wpi_init_beacon(struct wpi_vap *wvp)
+{
+ struct wpi_buf *bcn = &wvp->wv_bcbuf;
+ struct wpi_cmd_beacon *cmd = (struct wpi_cmd_beacon *)&bcn->data;
+
+ cmd->id = WPI_ID_BROADCAST;
+ cmd->ofdm_mask = 0xff;
+ cmd->cck_mask = 0x0f;
+ cmd->lifetime = htole32(WPI_LIFETIME_INFINITE);
+ cmd->flags = htole32(WPI_TX_AUTO_SEQ | WPI_TX_INSERT_TSTAMP);
+
+ bcn->code = WPI_CMD_SET_BEACON;
+ bcn->ac = WPI_CMD_QUEUE_NUM;
+ bcn->size = sizeof(struct wpi_cmd_beacon);
+}
+
static struct ieee80211vap *
wpi_vap_create(struct ieee80211com *ic, const char name[IFNAMSIZ], int unit,
enum ieee80211_opmode opmode, int flags,
@@ -598,6 +616,9 @@ wpi_vap_create(struct ieee80211com *ic,
vap = &wvp->vap;
ieee80211_vap_setup(ic, vap, name, unit, opmode, flags, bssid, mac);
+ if (opmode == IEEE80211_M_IBSS)
+ wpi_init_beacon(wvp);
+
/* Override with driver methods. */
wvp->newstate = vap->iv_newstate;
vap->iv_key_alloc = wpi_key_alloc;
@@ -3932,7 +3953,6 @@ wpi_setup_beacon(struct wpi_softc *sc, s
struct ieee80211_beacon_offsets bo;
struct wpi_cmd_beacon *cmd = (struct wpi_cmd_beacon *)&bcn->data;
struct mbuf *m;
- int totlen;
DPRINTF(sc, WPI_DEBUG_TRACE, TRACE_STR_DOING, __func__);
@@ -3945,20 +3965,8 @@ wpi_setup_beacon(struct wpi_softc *sc, s
"%s: could not allocate beacon frame\n", __func__);
return ENOMEM;
}
- totlen = m->m_pkthdr.len;
-
- cmd->id = WPI_ID_BROADCAST;
- cmd->ofdm_mask = 0xff;
- cmd->cck_mask = 0x0f;
- cmd->lifetime = htole32(WPI_LIFETIME_INFINITE);
- cmd->flags = htole32(WPI_TX_AUTO_SEQ | WPI_TX_INSERT_TSTAMP);
-
- bcn->ni = NULL;
- bcn->code = WPI_CMD_SET_BEACON;
- bcn->ac = 4;
- bcn->size = sizeof(struct wpi_cmd_beacon);
- cmd->len = htole16(totlen);
+ cmd->len = htole16(m->m_pkthdr.len);
cmd->plcp = (ic->ic_curmode == IEEE80211_MODE_11A) ?
wpi_ridx_to_plcp[WPI_RIDX_OFDM6] : wpi_ridx_to_plcp[WPI_RIDX_CCK1];
More information about the svn-src-all
mailing list