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-head mailing list