From 5ce504e2896869ce7b243798c99b04a898e98153 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Colin=20G=C3=BCnther?= Date: Wed, 30 Dec 2009 00:37:23 +0000 Subject: [PATCH] * Reworked scanner registration. Scanners are getting cleanly unregistered on wlan stack shutdown, now. * Added patch by mmlr to support IBSS (aka Ad-hoc) mode. To activate IBSS mode one would need recompile the wlan stack, though, once the constant in start_wlan() is switched from IEEE80211_M_STA to IEEE80211_M_IBSS. There is no runtime configuration, yet. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34821 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../freebsd_wlan/net80211/ieee80211_haiku.h | 20 ++++++----------- .../freebsd_wlan/net80211/ieee80211_scan.c | 8 ++++++- .../freebsd_wlan/net80211/ieee80211_scan.h | 1 - .../net80211/ieee80211_scan_sta.c | 22 ++++++++++++++----- 4 files changed, 30 insertions(+), 21 deletions(-) diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h b/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h index b4038f79d3..a13d2e9855 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h @@ -268,24 +268,18 @@ void ieee80211_load_module(const char *); */ #define _IEEE80211_POLICY_MODULE(policy, name, version) \ typedef void (*policy##_setup)(int); \ -SET_DECLARE(policy##_set, policy##_setup); \ +SET_DECLARE(policy##_set, policy##_setup); /* * Scanner modules provide scanning policy. */ -#define IEEE80211_SCANNER_MODULE(name, version) \ - _IEEE80211_POLICY_MODULE(scanner, name, version) +#define IEEE80211_SCANNER_MODULE(name, version) +#define IEEE80211_SCANNER_ALG(name, alg, v) + + +void ieee80211_scan_sta_init(void); +void ieee80211_scan_sta_uninit(void); -#define IEEE80211_SCANNER_ALG(name, alg, v) \ -static void \ -name##_modevent(int type) \ -{ \ - if (type == MOD_LOAD) \ - ieee80211_scanner_register(alg, &v); \ - else \ - ieee80211_scanner_unregister(alg, &v); \ -} \ -TEXT_SET(scanner_set, name##_modevent); \ struct ieee80211req; typedef int ieee80211_ioctl_getfunc(struct ieee80211vap *, diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.c b/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.c index 2f15b95ef4..db2802a399 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.c +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.c @@ -117,8 +117,9 @@ ieee80211_scan_attach(struct ieee80211com *ic) ic->ic_scan_curchan = scan_curchan; ic->ic_scan_mindwell = scan_mindwell; +#if defined(__HAIKU__) ieee80211_scan_sta_init(); - +#endif } void @@ -142,6 +143,11 @@ ieee80211_scan_detach(struct ieee80211com *ic) ic->ic_scan = NULL; free(SCAN_PRIVATE(ss), M_80211_SCAN); } + + +#if defined(__HAIKU__) + ieee80211_scan_sta_uninit(); +#endif } static const struct ieee80211_roamparam defroam[IEEE80211_MODE_MAX] = { diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.h b/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.h index 9b5ecf7ad4..55df7a9d02 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.h +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.h @@ -123,7 +123,6 @@ struct ieee80211_scan_state { #define IEEE80211_SCAN_NOSSID 0x80000000 /* don't update ssid list */ struct ieee80211com; -void ieee80211_scan_sta_init(void); void ieee80211_scan_attach(struct ieee80211com *); void ieee80211_scan_detach(struct ieee80211com *); void ieee80211_scan_vattach(struct ieee80211vap *); diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan_sta.c b/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan_sta.c index 2a7eb2c166..341e85345e 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan_sta.c +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan_sta.c @@ -1450,12 +1450,6 @@ static const struct ieee80211_scanner sta_default = { .scan_assoc_success = sta_assoc_success, }; -void ieee80211_scan_sta_init() -{ - ieee80211_scanner_register(IEEE80211_M_STA, &sta_default); -} - - /* * Adhoc mode-specific support. */ @@ -1929,3 +1923,19 @@ static const struct ieee80211_scanner mesh_default = { }; IEEE80211_SCANNER_ALG(mesh, IEEE80211_M_MBSS, mesh_default); #endif /* IEEE80211_SUPPORT_MESH */ + +#if defined(__HAIKU__) +void +ieee80211_scan_sta_init() +{ + ieee80211_scanner_register(IEEE80211_M_STA, &sta_default); + ieee80211_scanner_register(IEEE80211_M_IBSS, &adhoc_default); +} + +void +ieee80211_scan_sta_uninit() +{ + ieee80211_scanner_unregister(IEEE80211_M_STA, &sta_default); + ieee80211_scanner_unregister(IEEE80211_M_IBSS, &adhoc_default); +} +#endif /* __HAIKU__ */