--- a/ath/Makefile +++ b/ath/Makefile @@ -41,7 +41,6 @@ # obj := $(firstword $(obj) $(SUBDIRS) .) -TOP = $(obj)/.. ifeq ($(strip $(BUS)),AHB) BUSNAME=ahb @@ -57,7 +56,24 @@ COPTS += -DDFS_DOMAIN_ETSI -DDFS_DOMAIN_ include $(TOP)/Makefile.inc obj-m += ath_$(BUSNAME).o -ath_$(BUSNAME)-objs := if_ath.o if_ath_radar.o if_ath_$(BUSNAME).o +ath_objs := if_ath.o if_ath_radar.o if_ath_$(BUSNAME).o +ath_$(BUSNAME)-objs := $(ath_objs) + +ifneq ($(SINGLE_MODULE),) +include $(TOP)/net80211/Makefile +include $(TOP)/ath_rate/sample/Makefile +include $(TOP)/ath_rate/minstrel/Makefile +RC_DECLARE=$(foreach R,$(ATH_RATE),extern void ath_rate_$(R)_init(void);extern void ath_rate_$(R)_exit(void);) +RC_INIT=$(foreach R,$(ATH_RATE),ath_rate_$(R)_init();) +RC_EXIT=$(foreach R,$(ATH_RATE),ath_rate_$(R)_exit();) + +ath_$(BUSNAME)-objs += $(patsubst %,../net80211/%,$(wlan-objs) $(foreach var,wep tkip ccmp acl xauth scan_sta scan_ap,$(wlan_$(var)-objs))) $(foreach RC,$(ATH_RATE),$(patsubst %,../ath_rate/$(RC)/%,$(ath_rate_$(RC)-objs))) +ifdef LINUX24 + ath_$(BUSNAME)-linkobjs := $(ath_objs) $(wlan-objs) $(foreach var,wep tkip ccmp acl xauth scan_sta scan_ap,$(wlan_$(var)-objs)) $(foreach RC,$(ATH_RATE),$(ath_rate_$(RC)-objs)) +endif + +EXTRA_CFLAGS += -DSINGLE_MODULE -DRC_INIT="$(RC_INIT)" -DRC_EXIT="$(RC_EXIT)" -DRC_DECLARE="$(RC_DECLARE)" +endif INCS += -I$(TOP) -I$(ATH_HAL) -I$(HAL) -I$(WLAN) @@ -72,13 +88,8 @@ install: test -d $(DESTDIR)/$(KMODPATH) || mkdir -p $(DESTDIR)/$(KMODPATH) install -m 0644 ath_$(BUSNAME).$(KMODSUF) $(DESTDIR)/$(KMODPATH) -clean: - rm -f *~ *.o *.ko *.mod.c .*.cmd - rm -f .depend .version .*.o.flags .*.o.d - rm -rf .tmp_versions - ath_$(BUSNAME).o: $(ath_$(BUSNAME)-objs) - $(LD) $(LDOPTS) -o ath_$(BUSNAME).$(KMODSUF) -r $(ath_$(BUSNAME)-objs) + $(LD) $(LDOPTS) -o ath_$(BUSNAME).$(KMODSUF) -r $(if $(ath_$(BUSNAME)-linkobjs),$(ath_$(BUSNAME)-linkobjs),$(ath_$(BUSNAME)-objs)) if_ath_hal.h: $(HAL)/ah.h $(TOP)/scripts/if_ath_hal_generator.pl $< $@ --- a/net80211/ieee80211_acl.c +++ b/net80211/ieee80211_acl.c @@ -281,16 +281,6 @@ acl_getpolicy(struct ieee80211vap *vap) return as->as_policy; } -/* - * Module glue. - */ - -MODULE_AUTHOR("Errno Consulting, Sam Leffler"); -MODULE_DESCRIPTION("802.11 wireless support: MAC-based ACL policy"); -#ifdef MODULE_LICENSE -MODULE_LICENSE("Dual BSD/GPL"); -#endif - static const struct ieee80211_aclator mac = { .iac_name = "mac", .iac_attach = acl_attach, @@ -303,6 +293,18 @@ static const struct ieee80211_aclator ma .iac_getpolicy = acl_getpolicy, }; +#include "module.h" +/* + * Module glue. + */ + +MODULE_AUTHOR("Errno Consulting, Sam Leffler"); +MODULE_DESCRIPTION("802.11 wireless support: MAC-based ACL policy"); +#ifdef MODULE_LICENSE +MODULE_LICENSE("Dual BSD/GPL"); +#endif + + static int __init init_ieee80211_acl(void) { --- a/net80211/ieee80211_crypto_ccmp.c +++ b/net80211/ieee80211_crypto_ccmp.c @@ -686,6 +686,8 @@ ccmp_decrypt(struct ieee80211_key *key, } #undef CCMP_DECRYPT +#include "module.h" + /* * Module glue. */ --- a/net80211/ieee80211_crypto_tkip.c +++ b/net80211/ieee80211_crypto_tkip.c @@ -1046,6 +1046,8 @@ tkip_decrypt(struct tkip_ctx *ctx, struc return 1; } +#include "module.h" + /* * Module glue. */ --- a/net80211/ieee80211_crypto_wep.c +++ b/net80211/ieee80211_crypto_wep.c @@ -497,6 +497,8 @@ wep_decrypt(struct ieee80211_key *key, s * Module glue. */ +#include "module.h" + MODULE_AUTHOR("Errno Consulting, Sam Leffler"); MODULE_DESCRIPTION("802.11 wireless support: WEP cipher"); #ifdef MODULE_LICENSE --- a/net80211/ieee80211_linux.c +++ b/net80211/ieee80211_linux.c @@ -1015,6 +1015,10 @@ static struct notifier_block ieee80211_e static char *version = RELEASE_VERSION; static char *dev_info = "wlan"; +extern void ieee80211_auth_setup(void); + +#include "module.h" + MODULE_AUTHOR("Errno Consulting, Sam Leffler"); MODULE_DESCRIPTION("802.11 wireless LAN protocol support"); #ifdef MODULE_VERSION @@ -1024,8 +1028,6 @@ MODULE_VERSION(RELEASE_VERSION); MODULE_LICENSE("Dual BSD/GPL"); #endif -extern void ieee80211_auth_setup(void); - static int __init init_wlan(void) { --- a/net80211/ieee80211_scan_ap.c +++ b/net80211/ieee80211_scan_ap.c @@ -763,15 +763,6 @@ action_tasklet(IEEE80211_TQUEUE_ARG data (*ss->ss_ops->scan_default)(vap, &as->as_selbss); } -/* - * Module glue. - */ -MODULE_AUTHOR("Errno Consulting, Sam Leffler"); -MODULE_DESCRIPTION("802.11 wireless support: default ap scanner"); -#ifdef MODULE_LICENSE -MODULE_LICENSE("Dual BSD/GPL"); -#endif - static const struct ieee80211_scanner ap_default = { .scan_name = "default", .scan_attach = ap_attach, @@ -789,6 +780,16 @@ static const struct ieee80211_scanner ap .scan_default = ap_default_action, }; +#include "module.h" + +/* + * Module glue. + */ +MODULE_AUTHOR("Errno Consulting, Sam Leffler"); +MODULE_DESCRIPTION("802.11 wireless support: default ap scanner"); +#ifdef MODULE_LICENSE +MODULE_LICENSE("Dual BSD/GPL"); +#endif static int __init init_scanner_ap(void) --- a/net80211/ieee80211_scan_sta.c +++ b/net80211/ieee80211_scan_sta.c @@ -1208,6 +1208,8 @@ action_tasklet(IEEE80211_TQUEUE_ARG data ieee80211_start_scan(vap, ss->ss_flags, ss->ss_duration, ss->ss_nssid, ss->ss_ssid); } +#include "module.h" + /* * Module glue. */ @@ -1217,6 +1219,7 @@ MODULE_DESCRIPTION("802.11 wireless supp MODULE_LICENSE("Dual BSD/GPL"); #endif + static int __init init_scanner_sta(void) { --- a/net80211/ieee80211_xauth.c +++ b/net80211/ieee80211_xauth.c @@ -65,15 +65,6 @@ #include /* - * Module glue. - */ -MODULE_AUTHOR("Errno Consulting, Sam Leffler"); -MODULE_DESCRIPTION("802.11 wireless support: external (user mode) authenticator"); -#ifdef MODULE_LICENSE -MODULE_LICENSE("Dual BSD/GPL"); -#endif - -/* * One module handles everything for now. May want * to split things up for embedded applications. */ @@ -85,6 +76,18 @@ static const struct ieee80211_authentica .ia_node_leave = NULL, }; +#include "module.h" + +/* + * Module glue. + */ +MODULE_AUTHOR("Errno Consulting, Sam Leffler"); +MODULE_DESCRIPTION("802.11 wireless support: external (user mode) authenticator"); +#ifdef MODULE_LICENSE +MODULE_LICENSE("Dual BSD/GPL"); +#endif + + static int __init init_ieee80211_xauth(void) { --- a/net80211/Makefile +++ b/net80211/Makefile @@ -40,7 +40,11 @@ # Makefile for the 802.11 WLAN modules. # obj := $(firstword $(obj) $(SUBDIRS) .) -TOP = $(obj)/.. + +include $(TOP)/Makefile.inc + +ifeq ($(SINGLE_MODULE),) + # # There is one authenticator mechanism: an in-kernel implementation # (wlan_xauth). @@ -59,29 +63,8 @@ MOD_INSTALL := wlan.o wlan_wep.o wlan_tk obj-m += $(MOD_INSTALL) -wlan-objs := if_media.o \ - ieee80211_skb.o \ - ieee80211.o ieee80211_beacon.o ieee80211_crypto.o \ - ieee80211_crypto_none.o ieee80211_input.o ieee80211_node.o \ - ieee80211_output.o ieee80211_power.o ieee80211_proto.o \ - ieee80211_scan.o ieee80211_wireless.o ieee80211_linux.o \ - ieee80211_monitor.o ieee80211_rate.o -wlan_wep-objs := ieee80211_crypto_wep.o -wlan_tkip-objs := ieee80211_crypto_tkip.o -wlan_ccmp-objs := ieee80211_crypto_ccmp.o -wlan_acl-objs := ieee80211_acl.o -wlan_xauth-objs := ieee80211_xauth.o -wlan_scan_sta-objs :=ieee80211_scan_sta.o -wlan_scan_ap-objs := ieee80211_scan_ap.o - -include $(TOP)/Makefile.inc - INCS += -I$(TOP) -I$(ATH_HAL) -I$(HAL) -EXTRA_CFLAGS+=$(INCS) $(COPTS) -DOPT_AH_H=\"public/$(TARGET).opt_ah.h\" - --include $(TOPDIR)/Rules.make - all: $(MAKE) -C $(KERNELPATH) SUBDIRS=$(shell pwd) modules @@ -108,8 +91,28 @@ install: f=`basename $$i .o`; \ install -m 0644 $$f.$(KMODSUF) $(DESTDIR)/$(KMODPATH); \ done +else +all: +endif + +wlan-objs := if_media.o \ + ieee80211_skb.o \ + ieee80211.o ieee80211_beacon.o ieee80211_crypto.o \ + ieee80211_crypto_none.o ieee80211_input.o ieee80211_node.o \ + ieee80211_output.o ieee80211_power.o ieee80211_proto.o \ + ieee80211_scan.o ieee80211_wireless.o ieee80211_linux.o \ + ieee80211_monitor.o ieee80211_rate.o +wlan_wep-objs := ieee80211_crypto_wep.o +wlan_tkip-objs := ieee80211_crypto_tkip.o +wlan_ccmp-objs := ieee80211_crypto_ccmp.o +wlan_acl-objs := ieee80211_acl.o +wlan_xauth-objs := ieee80211_xauth.o +wlan_scan_sta-objs :=ieee80211_scan_sta.o +wlan_scan_ap-objs := ieee80211_scan_ap.o + + +EXTRA_CFLAGS+=$(INCS) $(COPTS) -DOPT_AH_H=\"public/$(TARGET).opt_ah.h\" + +-include $(TOPDIR)/Rules.make + -clean: - -rm -f *~ *.o *.ko *.mod.c - -rm -f .depend .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd - -rm -rf .tmp_versions --- /dev/null +++ b/net80211/module.h @@ -0,0 +1,19 @@ +#ifdef SINGLE_MODULE + +#undef static +#define static +#undef module_init +#undef module_exit +#define module_init(...) +#define module_exit(...) + +#undef MODULE_AUTHOR +#undef MODULE_LICENSE +#undef MODULE_VERSION +#undef MODULE_DESCRIPTION +#define MODULE_AUTHOR(...) +#define MODULE_LICENSE(...) +#define MODULE_VERSION(...) +#define MODULE_DESCRIPTION(...) + +#endif --- a/ath/if_ath.c +++ b/ath/if_ath.c @@ -13780,3 +13780,5 @@ cleanup_ath_buf(struct ath_softc *sc, st return bf; } + + --- a/net80211/ieee80211.c +++ b/net80211/ieee80211.c @@ -42,6 +42,7 @@ #include #endif #include +#include #include #include #include @@ -2015,3 +2016,65 @@ ieee80211_build_sc_ie(struct ieee80211co int ath_debug_global = 0; EXPORT_SYMBOL(ath_debug_global); +#ifdef SINGLE_MODULE +typedef void (*initfunc)(void); + +extern void init_ieee80211_acl(void); +extern void init_crypto_ccmp(void); +extern void init_crypto_tkip(void); +extern void init_crypto_wep(void); +extern void init_wlan(void); +extern void init_scanner_ap(void); +extern void init_scanner_sta(void); +extern void init_ieee80211_xauth(void); + +extern void exit_ieee80211_acl(void); +extern void exit_crypto_ccmp(void); +extern void exit_crypto_tkip(void); +extern void exit_crypto_wep(void); +extern void exit_wlan(void); +extern void exit_scanner_ap(void); +extern void exit_scanner_sta(void); +extern void exit_ieee80211_xauth(void); + +static __initdata initfunc net80211_init[] = { + init_wlan, + init_ieee80211_acl, + init_crypto_ccmp, + init_crypto_tkip, + init_crypto_wep, + init_ieee80211_xauth, + init_scanner_ap, + init_scanner_sta, +}; + +static __exitdata initfunc net80211_exit[] = { + exit_crypto_ccmp, + exit_crypto_tkip, + exit_crypto_wep, + exit_scanner_ap, + exit_scanner_sta, + exit_ieee80211_xauth, + exit_ieee80211_acl, + exit_wlan, +}; + +void net80211_init_module(void) +{ + int i; + for (i = 0; i < sizeof(net80211_init)/sizeof(net80211_init[0]); i++) { + if (net80211_init[i]) + net80211_init[i](); + } +} + +void net80211_exit_module(void) +{ + int i; + for (i = 0; i < sizeof(net80211_exit)/sizeof(net80211_exit[0]); i++) { + if (net80211_exit[i]) + net80211_exit[i](); + } +} + +#endif --- a/ath/if_ath_ahb.c +++ b/ath/if_ath_ahb.c @@ -447,10 +447,18 @@ MODULE_SUPPORTED_DEVICE("Atheros WLAN ca MODULE_LICENSE("Dual BSD/GPL"); #endif +#ifdef SINGLE_MODULE +RC_DECLARE +#endif + static int __init init_ath_ahb(void) { printk(KERN_INFO "%s: %s\n", dev_info, version); +#ifdef SINGLE_MODULE + net80211_init_module(); + RC_INIT +#endif platform_driver_register(&ahb_wmac_driver); ath_sysctl_register(); @@ -463,6 +471,10 @@ exit_ath_ahb(void) { ath_sysctl_unregister(); platform_driver_unregister(&ahb_wmac_driver); +#ifdef SINGLE_MODULE + RC_EXIT + net80211_exit_module(); +#endif printk(KERN_INFO "%s: driver unloaded\n", dev_info); } module_exit(exit_ath_ahb); --- a/ath/if_ath_pci.c +++ b/ath/if_ath_pci.c @@ -415,11 +415,19 @@ MODULE_SUPPORTED_DEVICE("Atheros WLAN ca MODULE_LICENSE("Dual BSD/GPL"); #endif +#ifdef SINGLE_MODULE +RC_DECLARE +#endif + static int __init init_ath_pci(void) { printk(KERN_INFO "%s: %s\n", dev_info, version); +#ifdef SINGLE_MODULE + net80211_init_module(); + RC_INIT +#endif if (pci_register_driver(&ath_pci_driver) < 0) { printk(KERN_ERR "%s: No devices found, driver not installed.\n", dev_info); return (-ENODEV); @@ -434,6 +442,10 @@ exit_ath_pci(void) { ath_sysctl_unregister(); pci_unregister_driver(&ath_pci_driver); +#ifdef SINGLE_MODULE + RC_EXIT + net80211_exit_module(); +#endif printk(KERN_INFO "%s: driver unloaded\n", dev_info); } --- a/ath_rate/minstrel/Makefile +++ b/ath_rate/minstrel/Makefile @@ -39,9 +39,7 @@ # Makefile for the Atheros Rate Control Support. # obj := $(firstword $(obj) $(SUBDIRS) .) -TOP = $(obj)/../.. -obj-m += ath_rate_minstrel.o ath_rate_minstrel-objs := minstrel.o include $(TOP)/Makefile.inc @@ -50,6 +48,10 @@ INCS += -I$(TOP) -I$(ATH) -I$(ATH_HAL) - EXTRA_CFLAGS+= $(INCS) $(COPTS) -DOPT_AH_H=\"public/$(TARGET).opt_ah.h\" +ifeq ($(SINGLE_MODULE),) + +obj-m += ath_rate_minstrel.o + -include $(TOPDIR)/Rules.make all: @@ -59,10 +61,9 @@ install: test -d $(DESTDIR)/$(KMODPATH) || mkdir -p $(DESTDIR)/$(KMODPATH) install -m 0644 ath_rate_minstrel.$(KMODSUF) $(DESTDIR)/$(KMODPATH) -clean: - -rm -f *~ *.o *.ko *.mod.c - -rm -f .depend .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd - -rm -rf .tmp_versions - ath_rate_minstrel.o: $(ath_rate_minstrel-objs) $(LD) $(LDOPTS) -o ath_rate_minstrel.$(KMODSUF) -r $(ath_rate_minstrel-objs) +else +all: +install: +endif --- a/ath_rate/minstrel/minstrel.c +++ b/ath_rate/minstrel/minstrel.c @@ -945,6 +945,8 @@ static struct ieee80211_rate_ops ath_rat .dynamic_proc_register = ath_rate_dynamic_proc_register, }; +#include + MODULE_AUTHOR("John Bicket/Derek Smithies"); MODULE_DESCRIPTION("Minstrel Rate bit-rate selection algorithm for Atheros devices"); #ifdef MODULE_VERSION --- a/net80211/ieee80211_var.h +++ b/net80211/ieee80211_var.h @@ -47,6 +47,7 @@ #include #include #include +#include "symbol.h" /* NB: * - Atheros chips use 6 bits when power is specified in whole dBm units, with @@ -740,6 +741,8 @@ void ieee80211_dfs_action(struct ieee802 void ieee80211_expire_channel_excl_restrictions(struct ieee80211com *); void ieee80211_setpuregbasicrates(struct ieee80211_rateset *rs); int ieee80211_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd); +void net80211_init_module(void); +void net80211_exit_module(void); /* * Iterate through ic_channels to enumerate all distinct ic_ieee channel numbers. --- a/net80211/ieee80211_linux.h +++ b/net80211/ieee80211_linux.h @@ -521,7 +521,10 @@ extern struct sk_buff * ieee80211_getmgt #define IF_DRAIN(_q) skb_queue_drain(_q) extern void skb_queue_drain(struct sk_buff_head *q); -#ifndef __MOD_INC_USE_COUNT +#ifdef SINGLE_MODULE +#define _MOD_DEC_USE(_m) do {} while(0) +#define _MOD_INC_USE(_m, _err) do {} while(0) +#elif !defined(__MOD_INC_USE_COUNT) #define _MOD_INC_USE(_m, _err) \ if (!try_module_get(_m)) { \ printk(KERN_WARNING "%s: try_module_get failed\n", \ --- a/ath_rate/sample/Makefile +++ b/ath_rate/sample/Makefile @@ -39,9 +39,7 @@ # Makefile for the Atheros Rate Control Support. # obj := $(firstword $(obj) $(SUBDIRS) .) -TOP = $(obj)/../.. -obj-m += ath_rate_sample.o ath_rate_sample-objs := sample.o include $(TOP)/Makefile.inc @@ -50,6 +48,9 @@ INCS += -I$(TOP) -I$(ATH) -I$(ATH_HAL) - EXTRA_CFLAGS+= $(INCS) $(COPTS) -DOPT_AH_H=\"public/$(TARGET).opt_ah.h\" +ifeq ($(SINGLE_MODULE),) +obj-m += ath_rate_sample.o + -include $(TOPDIR)/Rules.make all: @@ -59,10 +60,9 @@ install: test -d $(DESTDIR)/$(KMODPATH) || mkdir -p $(DESTDIR)/$(KMODPATH) install -m 0644 ath_rate_sample.$(KMODSUF) $(DESTDIR)/$(KMODPATH) -clean: - -rm -f *~ *.o *.ko *.mod.c - -rm -f .depend .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd - -rm -rf .tmp_versions - ath_rate_sample.o: $(ath_rate_sample-objs) $(LD) $(LDOPTS) -o ath_rate_sample.$(KMODSUF) -r $(ath_rate_sample-objs) +else +all: +install: +endif --- a/Makefile +++ b/Makefile @@ -41,7 +41,7 @@ # obj := $(firstword $(obj) $(SUBDIRS) .) -TOP = $(obj) +export TOP:=$(if $(wildcard $(firstword $(SUBDIRS))/Makefile.inc),$(firstword $(SUBDIRS)),$(CURDIR)) ifneq (svnversion.h,$(MAKECMDGOALS)) include $(TOP)/Makefile.inc @@ -54,7 +54,7 @@ all: modules tools modules: configcheck svnversion.h ifdef LINUX24 for i in $(obj-y); do \ - $(MAKE) -C $$i || exit 1; \ + $(MAKE) -C $$i TOP="$(TOP)" || exit 1; \ done else $(MAKE) -C $(KERNELPATH) SUBDIRS=$(shell pwd) modules @@ -89,7 +89,7 @@ install-modules: modules sh scripts/find-madwifi-modules.sh -r $(KERNELRELEASE) $(DESTDIR) for i in $(obj-y); do \ - $(MAKE) -C $$i install || exit 1; \ + $(MAKE) -C $$i install TOP="$(TOP)" || exit 1; \ done ifeq ($(DESTDIR),) (export KMODPATH=$(KMODPATH); /sbin/depmod -ae $(KERNELRELEASE)) @@ -114,12 +114,21 @@ reinstall-tools: uninstall-tools install reinstall-modules: uninstall-modules install-modules clean: - for i in $(obj-y); do \ - $(MAKE) -C $$i clean; \ - done - -$(MAKE) -C $(TOOLS) clean - rm -rf .tmp_versions + -find $(obj-y) -name '*~' \ + -or -name '*.o' \ + -or -name '*.o.d' \ + -or -name '*.o.cmd' \ + -or -name '*.o.flags' \ + -or -name '*.ko' \ + -or -name '*.ko.cmd' \ + -or -name '*.mod.c' \ + -or -name '.depend' \ + -or -name '.version' \ + -or -name '.symvers' | \ + xargs -r rm -f rm -f *.symvers svnversion.h + rm -rf .tmp_versions + make -C tools clean info: @echo "The following settings will be used for compilation:" @@ -135,18 +144,6 @@ info: @echo "KMODPATH : $(KMODPATH)" @echo "KMODSUF : $(KMODSUF)" -sanitycheck: - @echo -n "Checking requirements... " - - @# check if specified rate control is available - @if [ ! -d $(ATH_RATE) ]; then \ - echo "FAILED"; \ - echo "Selected rate control $(ATH_RATE) not available."; \ - exit 1; \ - fi - - @echo "ok." - .PHONY: release release: sh scripts/make-release.bash @@ -155,7 +152,7 @@ release: unload: bash scripts/madwifi-unload -configcheck: sanitycheck +configcheck: @echo -n "Checking kernel configuration... " @# check version of kernel --- a/Makefile.inc +++ b/Makefile.inc @@ -68,6 +68,9 @@ endif export KERNELPATH endif +# build net80211 and ath_ahb/ath_pci into a single module +export SINGLE_MODULE=1 + # KERNELRELEASE is the target kernel's version. It's always taken from # the kernel build tree. Kernel Makefile doesn't always know the exact # kernel version (especially for vendor stock kernels), so we get it @@ -100,6 +103,7 @@ export ARCH include $(TOP)/ath_hal/ah_target.inc export TARGET COPTS += -DTARGET='"$(TARGET)"' +COPTS += -DCONFIG_ATHEROS_RATE_DEFAULT='"$(firstword $(ATH_RATE))"' # KMODPATH nominates the directory where the modules will be # installed to @@ -141,7 +145,7 @@ ATH= $(TOP)/ath # # Path to the rate control algorithms. # -ATH_RATE= $(TOP)/ath_rate +ATH_RATE= minstrel # # Path to the userspace utilities. # --- a/ath_rate/sample/sample.c +++ b/ath_rate/sample/sample.c @@ -991,6 +991,8 @@ static struct ieee80211_rate_ops ath_rat .dynamic_proc_register = ath_rate_dynamic_proc_register, }; +#include + MODULE_AUTHOR("John Bicket"); MODULE_DESCRIPTION("SampleRate bit-rate selection algorithm for Atheros devices"); #ifdef MODULE_VERSION @@ -1000,18 +1002,17 @@ MODULE_VERSION(RELEASE_VERSION); MODULE_LICENSE("Dual BSD/GPL"); #endif -static int __init -init_ath_rate_sample(void) +static int __init ath_rate_sample_init(void) { printk(KERN_INFO "%s: %s\n", dev_info, version); return ieee80211_rate_register(&ath_rate_ops); } -module_init(init_ath_rate_sample); +module_init(ath_rate_sample_init); static void __exit -exit_ath_rate_sample(void) +ath_rate_sample_exit(void) { ieee80211_rate_unregister(&ath_rate_ops); printk(KERN_INFO "%s: unloaded\n", dev_info); } -module_exit(exit_ath_rate_sample); +module_exit(ath_rate_sample_exit); --- a/net80211/if_media.h +++ b/net80211/if_media.h @@ -42,6 +42,7 @@ #define _NET_IF_MEDIA_H_ #include +#include "symbol.h" /* * Prototypes and definitions for BSD/OS-compatible network interface --- /dev/null +++ b/net80211/symbol.h @@ -0,0 +1,4 @@ +#ifdef SINGLE_MODULE +#undef EXPORT_SYMBOL +#define EXPORT_SYMBOL(...) +#endif --- a/ath_rate/Makefile +++ b/ath_rate/Makefile @@ -1,7 +1,7 @@ obj := $(firstword $(obj) $(SUBDIRS) .) TOP = $(obj)/.. -obj-y := amrr/ onoe/ sample/ minstrel/ +obj-y := sample/ minstrel/ include $(TOP)/Makefile.inc