PERFORCE change 139484 for review
Sam Leffler
sam at FreeBSD.org
Sun Apr 6 23:30:38 UTC 2008
http://perforce.freebsd.org/chv.cgi?CH=139484
Change 139484 by sam at sam_ebb on 2008/04/06 23:29:52
Handle beacon miss: we cannot use the 802.11 layer to do the
right thing; instead we need to tell the firmware to disassociate
so we clear state and on completion we then kick the state machine.
Affected files ...
.. //depot/projects/vap/sys/dev/iwi/if_iwi.c#20 edit
.. //depot/projects/vap/sys/dev/iwi/if_iwivar.h#13 edit
Differences ...
==== //depot/projects/vap/sys/dev/iwi/if_iwi.c#20 (text+ko) ====
@@ -157,7 +157,6 @@
static uint16_t iwi_read_prom_word(struct iwi_softc *, uint8_t);
static void iwi_frame_intr(struct iwi_softc *, struct iwi_rx_data *, int,
struct iwi_frame *);
-static void iwi_bmiss(void *, int);
static void iwi_authsuccess(void *, int);
static void iwi_assocsuccess(void *, int);
static void iwi_assocfailed(void *, int);
@@ -371,8 +370,6 @@
iwi_wme_init(sc);
- TASK_INIT(&sc->sc_bmiss_task, 0, iwi_bmiss, ic);
-
ifp->if_softc = sc;
if_initname(ifp, device_get_name(dev), device_get_unit(dev));
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
@@ -1392,14 +1389,7 @@
/*
* Task queue callbacks for iwi_notification_intr used to avoid LOR's.
*/
-static void
-iwi_bmiss(void *arg, int npending)
-{
- struct ieee80211com *ic = arg;
- ieee80211_beacon_miss(ic);
-}
-
static void
iwi_authsuccess(void *arg, int npending)
{
@@ -1519,6 +1509,7 @@
&IWI_VAP(vap)->iwi_assocsuccess_task);
break;
case IWI_ASSOC_INIT:
+ sc->flags &= ~IWI_FLAG_ASSOCIATED;
switch (sc->fw_state) {
case IWI_FW_ASSOCIATING:
DPRINTFN(2, ("Association failed\n"));
@@ -1530,10 +1521,10 @@
case IWI_FW_DISASSOCIATING:
DPRINTFN(2, ("Dissassociated\n"));
IWI_STATE_END(sc, IWI_FW_DISASSOCIATING);
- /* XXX what next? */
+ taskqueue_enqueue(taskqueue_swi,
+ &IWI_VAP(vap)->iwi_assocfailed_task);
break;
}
- sc->flags &= ~IWI_FLAG_ASSOCIATED;
break;
default:
device_printf(sc->sc_dev,
@@ -1561,8 +1552,15 @@
DPRINTF(("Beacon miss: %u >= %u\n",
le32toh(beacon->number),
vap->iv_bmissthreshold));
- taskqueue_enqueue(taskqueue_swi,
- &sc->sc_bmiss_task);
+ /*
+ * It's pointless to notify the 802.11 layer
+ * as it'll try to send a probe request (which
+ * we'll discard) and then timeout and drop us
+ * into scan state. Instead tell the firmware
+ * to disassociate and then on completion we'll
+ * kick the state machine to scan.
+ */
+ iwi_queue_cmd(sc, IWI_DISASSOC, 1);
}
}
break;
==== //depot/projects/vap/sys/dev/iwi/if_iwivar.h#13 (text+ko) ====
@@ -198,7 +198,6 @@
struct task sc_scanaborttask; /* cancel active scan */
struct task sc_restarttask; /* restart adapter processing */
struct task sc_opstask; /* scan / auth processing */
- struct task sc_bmiss_task; /* beacon miss processing */
unsigned int sc_softled : 1, /* enable LED gpio status */
sc_ledstate: 1, /* LED on/off state */
More information about the p4-projects
mailing list