mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-10-30 21:44:27 -04:00 
			
		
		
		
	
		
			
				
	
	
		
			779 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			779 lines
		
	
	
		
			20 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
| --- 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 <net80211/ieee80211_var.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
 | |
| -
 | |
| -/*
 | |
|   * 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 <linux/config.h>
 | |
|  #endif
 | |
|  #include <linux/version.h>
 | |
| +#include <linux/init.h>
 | |
|  #include <linux/module.h>
 | |
|  #include <linux/skbuff.h>
 | |
|  #include <linux/netdevice.h>
 | |
| @@ -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 <net80211/module.h>
 | |
| +
 | |
|  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 <net80211/ieee80211_power.h>
 | |
|  #include <net80211/ieee80211_proto.h>
 | |
|  #include <net80211/ieee80211_scan.h>
 | |
| +#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 <net80211/module.h>
 | |
| +
 | |
|  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 <net80211/ieee80211_linux.h>
 | |
| +#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
 | |
|  
 |