diff --git a/src/libs/compat/freebsd_wlan/net80211/Jamfile b/src/libs/compat/freebsd_wlan/net80211/Jamfile index f43e19c25b..6e63b3eb1e 100644 --- a/src/libs/compat/freebsd_wlan/net80211/Jamfile +++ b/src/libs/compat/freebsd_wlan/net80211/Jamfile @@ -59,7 +59,6 @@ KernelStaticLibrary libfreebsd_wlan.a : # NOT SUPPORTED YET ieee80211_ddb.c # NOT SUPPORTED YET ieee80211_hwmp.c # NOT SUPPORTED YET ieee80211_mesh.c - # NOT SUPPORTED YET ieee80211_rssadapt.c # NOT SUPPORTED YET ieee80211_superg.c # NOT SUPPORTED YET ieee80211_tdma.c ieee80211_xauth.c diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211.c b/src/libs/compat/freebsd_wlan/net80211/ieee80211.c index 2f20bd15eb..fff964f61f 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211.c +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211.c @@ -293,6 +293,9 @@ ieee80211_ifattach(struct ieee80211com *ic, ieee80211_scan_attach(ic); ieee80211_regdomain_attach(ic); ieee80211_dfs_attach(ic); +#if defined(__HAIKU__) + ieee80211_ratectl_attach(ic); +#endif ieee80211_sysctl_attach(ic); @@ -337,6 +340,9 @@ ieee80211_ifdetach(struct ieee80211com *ic) ieee80211_waitfor_parent(ic); ieee80211_sysctl_detach(ic); +#if defined(__HAIKU__) + ieee80211_ratectl_detach(ic); +#endif ieee80211_dfs_detach(ic); ieee80211_regdomain_detach(ic); ieee80211_scan_detach(ic); diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp b/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp index 342049d98f..1ffcdb24c8 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.cpp @@ -64,9 +64,9 @@ extern "C" { #define TRACE_WLAN #ifdef TRACE_WLAN -# define TRACE(x, ...) dprintf(x, __VA_ARGS__); +# define TRACE(x...) dprintf(x); #else -# define TRACE(x, ...) ; +# define TRACE(x...) ; #endif diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h b/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h index 6186debb96..ce6846afc6 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_haiku.h @@ -326,17 +326,20 @@ void ieee80211_scan_sta_uninit(void); */ #define IEEE80211_RATECTL_MODULE(alg, version) \ _IEEE80211_POLICY_MODULE(ratectl, alg, version); \ + +#define IEEE80211_RATECTL_ALG(name, alg, v) \ + void \ + ieee80211_ratectl_##name##_load() { \ + ieee80211_ratectl_register(alg, &v); \ + } \ +\ +\ + void \ + ieee80211_ratectl_##name##_unload() \ + { \ + ieee80211_ratectl_unregister(alg); \ + } -#define IEEE80211_RATECTL_ALG(name, alg, v) \ -static void \ -alg##_modevent(int type) \ -{ \ - if (type == MOD_LOAD) \ - ieee80211_ratectl_register(alg, &v); \ - else \ - ieee80211_ratectl_unregister(alg); \ -} \ -TEXT_SET(ratectl##_set, alg##_modevent) struct ieee80211req; typedef int ieee80211_ioctl_getfunc(struct ieee80211vap *, diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_ratectl.c b/src/libs/compat/freebsd_wlan/net80211/ieee80211_ratectl.c index 0ad46bd3bd..3e7fa19354 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_ratectl.c +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_ratectl.c @@ -49,6 +49,31 @@ static const char *ratectl_modnames[IEEE80211_RATECTL_MAX] = { MALLOC_DEFINE(M_80211_RATECTL, "80211ratectl", "802.11 rate control"); + +#if defined(__HAIKU__) +/* + * Setup ratectl support for a device/shared instance. + */ +void +ieee80211_ratectl_attach(struct ieee80211com *ic) +{ + ieee80211_ratectl_none_load(); + ieee80211_ratectl_amrr_load(); + ieee80211_ratectl_rssadapt_load(); +} + +/* + * Teardown ratectl support. + */ +void +ieee80211_ratectl_detach(struct ieee80211com *ic) +{ + ieee80211_ratectl_none_unload(); + ieee80211_ratectl_amrr_unload(); + ieee80211_ratectl_rssadapt_unload(); +} +#endif + void ieee80211_ratectl_register(int type, const struct ieee80211_ratectl *ratectl) { diff --git a/src/libs/compat/freebsd_wlan/net80211/ieee80211_ratectl.h b/src/libs/compat/freebsd_wlan/net80211/ieee80211_ratectl.h index 81a18d0338..30fee1ba12 100644 --- a/src/libs/compat/freebsd_wlan/net80211/ieee80211_ratectl.h +++ b/src/libs/compat/freebsd_wlan/net80211/ieee80211_ratectl.h @@ -60,6 +60,17 @@ void ieee80211_ratectl_unregister(int); void ieee80211_ratectl_init(struct ieee80211vap *); void ieee80211_ratectl_set(struct ieee80211vap *, int); +#if defined (__HAIKU__) +void ieee80211_ratectl_attach(struct ieee80211com *ic); +void ieee80211_ratectl_detach(struct ieee80211com *ic); +void ieee80211_ratectl_none_load(void); +void ieee80211_ratectl_none_unload(void); +void ieee80211_ratectl_amrr_load(void); +void ieee80211_ratectl_amrr_unload(void); +void ieee80211_ratectl_rssadapt_load(void); +void ieee80211_ratectl_rssadapt_unload(void); +#endif + MALLOC_DECLARE(M_80211_RATECTL); static void __inline