Changeset View
Changeset View
Standalone View
Standalone View
head/sys/net80211/ieee80211_scan_sw.c
Show First 20 Lines • Show All 94 Lines • ▼ Show 20 Lines | |||||
#define ROAM_RATE_HALF_DEFAULT 2*6 /* half-width 11a/g bss */ | #define ROAM_RATE_HALF_DEFAULT 2*6 /* half-width 11a/g bss */ | ||||
#define ROAM_RATE_QUARTER_DEFAULT 2*3 /* quarter-width 11a/g bss */ | #define ROAM_RATE_QUARTER_DEFAULT 2*3 /* quarter-width 11a/g bss */ | ||||
#define ROAM_MCS_11N_DEFAULT (1 | IEEE80211_RATE_MCS) /* 11n bss */ | #define ROAM_MCS_11N_DEFAULT (1 | IEEE80211_RATE_MCS) /* 11n bss */ | ||||
static void scan_curchan(struct ieee80211_scan_state *, unsigned long); | static void scan_curchan(struct ieee80211_scan_state *, unsigned long); | ||||
static void scan_mindwell(struct ieee80211_scan_state *); | static void scan_mindwell(struct ieee80211_scan_state *); | ||||
static void scan_signal(void *); | static void scan_signal(void *); | ||||
static void scan_task(void *, int); | static void scan_task(void *, int); | ||||
static void scan_end(struct ieee80211_scan_state *, int); | |||||
static void scan_done(struct ieee80211_scan_state *, int); | static void scan_done(struct ieee80211_scan_state *, int); | ||||
MALLOC_DEFINE(M_80211_SCAN, "80211scan", "802.11 scan state"); | MALLOC_DEFINE(M_80211_SCAN, "80211scan", "802.11 scan state"); | ||||
static void | static void | ||||
ieee80211_swscan_detach(struct ieee80211com *ic) | ieee80211_swscan_detach(struct ieee80211com *ic) | ||||
{ | { | ||||
struct ieee80211_scan_state *ss = ic->ic_scan; | struct ieee80211_scan_state *ss = ic->ic_scan; | ||||
▲ Show 20 Lines • Show All 539 Lines • ▼ Show 20 Lines | for (;;) { | ||||
IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, | IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, | ||||
"%s: loop start; scandone=%d\n", | "%s: loop start; scandone=%d\n", | ||||
__func__, | __func__, | ||||
scandone); | scandone); | ||||
if (scandone || (ss->ss_flags & IEEE80211_SCAN_GOTPICK) || | if (scandone || (ss->ss_flags & IEEE80211_SCAN_GOTPICK) || | ||||
(ss_priv->ss_iflags & ISCAN_ABORT) || | (ss_priv->ss_iflags & ISCAN_ABORT) || | ||||
time_after(ticks + ss->ss_mindwell, ss_priv->ss_scanend)) | time_after(ticks + ss->ss_mindwell, ss_priv->ss_scanend)) { | ||||
break; | scan_end(ss, scandone); | ||||
return; | |||||
} | |||||
chan = ss->ss_chans[ss->ss_next++]; | chan = ss->ss_chans[ss->ss_next++]; | ||||
/* | /* | ||||
* Watch for truncation due to the scan end time. | * Watch for truncation due to the scan end time. | ||||
*/ | */ | ||||
if (time_after(ticks + ss->ss_maxdwell, ss_priv->ss_scanend)) | if (time_after(ticks + ss->ss_maxdwell, ss_priv->ss_scanend)) | ||||
maxdwell = ss_priv->ss_scanend - ticks; | maxdwell = ss_priv->ss_scanend - ticks; | ||||
▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | for (;;) { | ||||
if (ss_priv->ss_iflags & (ISCAN_CANCEL|ISCAN_ABORT)) | if (ss_priv->ss_iflags & (ISCAN_CANCEL|ISCAN_ABORT)) | ||||
continue; | continue; | ||||
IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, "%s: waiting\n", __func__); | IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, "%s: waiting\n", __func__); | ||||
/* Wait to be signalled to scan the next channel */ | /* Wait to be signalled to scan the next channel */ | ||||
cv_wait(&ss_priv->ss_scan_cv, IEEE80211_LOCK_OBJ(ic)); | cv_wait(&ss_priv->ss_scan_cv, IEEE80211_LOCK_OBJ(ic)); | ||||
} | } | ||||
} | |||||
static void | |||||
scan_end(struct ieee80211_scan_state *ss, int scandone) | |||||
{ | |||||
struct scan_state *ss_priv = SCAN_PRIVATE(ss); | |||||
struct ieee80211vap *vap = ss->ss_vap; | |||||
struct ieee80211com *ic = ss->ss_ic; | |||||
IEEE80211_LOCK_ASSERT(ic); | |||||
IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, "%s: out\n", __func__); | IEEE80211_DPRINTF(vap, IEEE80211_MSG_SCAN, "%s: out\n", __func__); | ||||
if (ss_priv->ss_iflags & ISCAN_ABORT) { | if (ss_priv->ss_iflags & ISCAN_ABORT) { | ||||
scan_done(ss, scandone); | scan_done(ss, scandone); | ||||
return; | return; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 227 Lines • Show Last 20 Lines |