Author: colin Date: 2009-12-30 01:37:23 +0100 (Wed, 30 Dec 2009) New Revision: 34821 Changeset: http://dev.haiku-os.org/changeset/34821/haiku Modified: haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.c haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.h haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan_sta.c Log: * 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. Modified: haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h =================================================================== --- haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h 2009-12-30 00:30:56 UTC (rev 34820) +++ haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h 2009-12-30 00:37:23 UTC (rev 34821) @@ -268,25 +268,19 @@ */ #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) -#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); \ +void ieee80211_scan_sta_init(void); +void ieee80211_scan_sta_uninit(void); + + struct ieee80211req; typedef int ieee80211_ioctl_getfunc(struct ieee80211vap *, struct ieee80211req *); Modified: haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.c =================================================================== --- haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.c 2009-12-30 00:30:56 UTC (rev 34820) +++ haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.c 2009-12-30 00:37:23 UTC (rev 34821) @@ -117,8 +117,9 @@ 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 @@ 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] = { Modified: haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.h =================================================================== --- haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.h 2009-12-30 00:30:56 UTC (rev 34820) +++ haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan.h 2009-12-30 00:37:23 UTC (rev 34821) @@ -123,7 +123,6 @@ #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 *); Modified: haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan_sta.c =================================================================== --- haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan_sta.c 2009-12-30 00:30:56 UTC (rev 34820) +++ haiku/trunk/src/libs/compat/freebsd_wlan/net80211/ieee80211_scan_sta.c 2009-12-30 00:37:23 UTC (rev 34821) @@ -1450,12 +1450,6 @@ .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 @@ }; 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__ */