package/madwifi: refresh madwifi patches
[openwrt.git] / package / madwifi / patches / 446-single_module.patch
1 --- a/ath/Makefile
2 +++ b/ath/Makefile
3 @@ -41,7 +41,6 @@
4  #
5  
6  obj := $(firstword $(obj) $(SUBDIRS) .)
7 -TOP = $(obj)/..
8  
9  ifeq ($(strip $(BUS)),AHB)
10  BUSNAME=ahb
11 @@ -57,7 +56,24 @@ COPTS        += -DDFS_DOMAIN_ETSI -DDFS_DOMAIN_
12  include $(TOP)/Makefile.inc
13  
14  obj-m          += ath_$(BUSNAME).o
15 -ath_$(BUSNAME)-objs    := if_ath.o if_ath_radar.o if_ath_$(BUSNAME).o
16 +ath_objs := if_ath.o if_ath_radar.o if_ath_$(BUSNAME).o
17 +ath_$(BUSNAME)-objs    := $(ath_objs)
18 +
19 +ifneq ($(SINGLE_MODULE),)
20 +include $(TOP)/net80211/Makefile
21 +include $(TOP)/ath_rate/sample/Makefile
22 +include $(TOP)/ath_rate/minstrel/Makefile
23 +RC_DECLARE=$(foreach R,$(ATH_RATE),extern void ath_rate_$(R)_init(void);extern void ath_rate_$(R)_exit(void);)
24 +RC_INIT=$(foreach R,$(ATH_RATE),ath_rate_$(R)_init();)
25 +RC_EXIT=$(foreach R,$(ATH_RATE),ath_rate_$(R)_exit();)
26 +
27 +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)))
28 +ifdef LINUX24
29 +  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))
30 +endif
31 +
32 +EXTRA_CFLAGS += -DSINGLE_MODULE -DRC_INIT="$(RC_INIT)" -DRC_EXIT="$(RC_EXIT)" -DRC_DECLARE="$(RC_DECLARE)"
33 +endif
34  
35  INCS += -I$(TOP) -I$(ATH_HAL) -I$(HAL) -I$(WLAN)
36  
37 @@ -72,13 +88,8 @@ install:
38         test -d $(DESTDIR)/$(KMODPATH) || mkdir -p $(DESTDIR)/$(KMODPATH)
39         install -m 0644 ath_$(BUSNAME).$(KMODSUF) $(DESTDIR)/$(KMODPATH)
40  
41 -clean:
42 -       rm -f *~ *.o *.ko *.mod.c .*.cmd
43 -       rm -f .depend .version .*.o.flags .*.o.d
44 -       rm -rf .tmp_versions
45 -
46  ath_$(BUSNAME).o: $(ath_$(BUSNAME)-objs)
47 -       $(LD) $(LDOPTS) -o ath_$(BUSNAME).$(KMODSUF) -r $(ath_$(BUSNAME)-objs)
48 +       $(LD) $(LDOPTS) -o ath_$(BUSNAME).$(KMODSUF) -r $(if $(ath_$(BUSNAME)-linkobjs),$(ath_$(BUSNAME)-linkobjs),$(ath_$(BUSNAME)-objs))
49  
50  if_ath_hal.h: $(HAL)/ah.h
51         $(TOP)/scripts/if_ath_hal_generator.pl $< $@
52 --- a/net80211/ieee80211_acl.c
53 +++ b/net80211/ieee80211_acl.c
54 @@ -281,16 +281,6 @@ acl_getpolicy(struct ieee80211vap *vap)
55         return as->as_policy;
56  }
57  
58 -/*
59 - * Module glue.
60 - */
61 -
62 -MODULE_AUTHOR("Errno Consulting, Sam Leffler");
63 -MODULE_DESCRIPTION("802.11 wireless support: MAC-based ACL policy");
64 -#ifdef MODULE_LICENSE
65 -MODULE_LICENSE("Dual BSD/GPL");
66 -#endif
67 -
68  static const struct ieee80211_aclator mac = {
69         .iac_name       = "mac",
70         .iac_attach     = acl_attach,
71 @@ -303,6 +293,18 @@ static const struct ieee80211_aclator ma
72         .iac_getpolicy  = acl_getpolicy,
73  };
74  
75 +#include "module.h"
76 +/*
77 + * Module glue.
78 + */
79 +
80 +MODULE_AUTHOR("Errno Consulting, Sam Leffler");
81 +MODULE_DESCRIPTION("802.11 wireless support: MAC-based ACL policy");
82 +#ifdef MODULE_LICENSE
83 +MODULE_LICENSE("Dual BSD/GPL");
84 +#endif
85 +
86 +
87  static int __init
88  init_ieee80211_acl(void)
89  {
90 --- a/net80211/ieee80211_crypto_ccmp.c
91 +++ b/net80211/ieee80211_crypto_ccmp.c
92 @@ -686,6 +686,8 @@ ccmp_decrypt(struct ieee80211_key *key,
93  }
94  #undef CCMP_DECRYPT
95  
96 +#include "module.h"
97 +
98  /*
99   * Module glue.
100   */
101 --- a/net80211/ieee80211_crypto_tkip.c
102 +++ b/net80211/ieee80211_crypto_tkip.c
103 @@ -1046,6 +1046,8 @@ tkip_decrypt(struct tkip_ctx *ctx, struc
104         return 1;
105  }
106  
107 +#include "module.h"
108 +
109  /*
110   * Module glue.
111   */
112 --- a/net80211/ieee80211_crypto_wep.c
113 +++ b/net80211/ieee80211_crypto_wep.c
114 @@ -497,6 +497,8 @@ wep_decrypt(struct ieee80211_key *key, s
115   * Module glue.
116   */
117  
118 +#include "module.h"
119 +
120  MODULE_AUTHOR("Errno Consulting, Sam Leffler");
121  MODULE_DESCRIPTION("802.11 wireless support: WEP cipher");
122  #ifdef MODULE_LICENSE
123 --- a/net80211/ieee80211_linux.c
124 +++ b/net80211/ieee80211_linux.c
125 @@ -1015,6 +1015,10 @@ static struct notifier_block ieee80211_e
126  static char *version = RELEASE_VERSION;
127  static char *dev_info = "wlan";
128  
129 +extern void ieee80211_auth_setup(void);
130 +
131 +#include "module.h"
132 +
133  MODULE_AUTHOR("Errno Consulting, Sam Leffler");
134  MODULE_DESCRIPTION("802.11 wireless LAN protocol support");
135  #ifdef MODULE_VERSION
136 @@ -1024,8 +1028,6 @@ MODULE_VERSION(RELEASE_VERSION);
137  MODULE_LICENSE("Dual BSD/GPL");
138  #endif
139  
140 -extern void ieee80211_auth_setup(void);
141 -
142  static int __init
143  init_wlan(void)
144  {
145 --- a/net80211/ieee80211_scan_ap.c
146 +++ b/net80211/ieee80211_scan_ap.c
147 @@ -763,15 +763,6 @@ action_tasklet(IEEE80211_TQUEUE_ARG data
148         (*ss->ss_ops->scan_default)(vap, &as->as_selbss);
149  }
150  
151 -/*
152 - * Module glue.
153 - */
154 -MODULE_AUTHOR("Errno Consulting, Sam Leffler");
155 -MODULE_DESCRIPTION("802.11 wireless support: default ap scanner");
156 -#ifdef MODULE_LICENSE
157 -MODULE_LICENSE("Dual BSD/GPL");
158 -#endif
159 -
160  static const struct ieee80211_scanner ap_default = {
161         .scan_name              = "default",
162         .scan_attach            = ap_attach,
163 @@ -789,6 +780,16 @@ static const struct ieee80211_scanner ap
164         .scan_default           = ap_default_action,
165  };
166  
167 +#include "module.h"
168 +
169 +/*
170 + * Module glue.
171 + */
172 +MODULE_AUTHOR("Errno Consulting, Sam Leffler");
173 +MODULE_DESCRIPTION("802.11 wireless support: default ap scanner");
174 +#ifdef MODULE_LICENSE
175 +MODULE_LICENSE("Dual BSD/GPL");
176 +#endif
177  
178  static int __init
179  init_scanner_ap(void)
180 --- a/net80211/ieee80211_scan_sta.c
181 +++ b/net80211/ieee80211_scan_sta.c
182 @@ -1208,6 +1208,8 @@ action_tasklet(IEEE80211_TQUEUE_ARG data
183                 ieee80211_start_scan(vap, ss->ss_flags, ss->ss_duration, ss->ss_nssid, ss->ss_ssid);
184  }
185  
186 +#include "module.h"
187 +
188  /*
189   * Module glue.
190   */
191 @@ -1217,6 +1219,7 @@ MODULE_DESCRIPTION("802.11 wireless supp
192  MODULE_LICENSE("Dual BSD/GPL");
193  #endif
194  
195 +
196  static int __init
197  init_scanner_sta(void)
198  {
199 --- a/net80211/ieee80211_xauth.c
200 +++ b/net80211/ieee80211_xauth.c
201 @@ -65,15 +65,6 @@
202  #include <net80211/ieee80211_var.h>
203  
204  /*
205 - * Module glue.
206 - */
207 -MODULE_AUTHOR("Errno Consulting, Sam Leffler");
208 -MODULE_DESCRIPTION("802.11 wireless support: external (user mode) authenticator");
209 -#ifdef MODULE_LICENSE
210 -MODULE_LICENSE("Dual BSD/GPL");
211 -#endif
212 -
213 -/*
214   * One module handles everything for now.  May want
215   * to split things up for embedded applications.
216   */
217 @@ -85,6 +76,18 @@ static const struct ieee80211_authentica
218         .ia_node_leave  = NULL,
219  };
220  
221 +#include "module.h"
222 +
223 +/*
224 + * Module glue.
225 + */
226 +MODULE_AUTHOR("Errno Consulting, Sam Leffler");
227 +MODULE_DESCRIPTION("802.11 wireless support: external (user mode) authenticator");
228 +#ifdef MODULE_LICENSE
229 +MODULE_LICENSE("Dual BSD/GPL");
230 +#endif
231 +
232 +
233  static int __init
234  init_ieee80211_xauth(void)
235  {
236 --- a/net80211/Makefile
237 +++ b/net80211/Makefile
238 @@ -40,7 +40,11 @@
239  # Makefile for the 802.11 WLAN modules.
240  #
241  obj := $(firstword $(obj) $(SUBDIRS) .)
242 -TOP = $(obj)/..
243 +
244 +include $(TOP)/Makefile.inc
245 +
246 +ifeq ($(SINGLE_MODULE),)
247 +
248  #
249  # There is one authenticator mechanism: an in-kernel implementation
250  # (wlan_xauth). 
251 @@ -59,29 +63,8 @@ MOD_INSTALL  := wlan.o wlan_wep.o wlan_tk
252  
253  obj-m          += $(MOD_INSTALL)
254  
255 -wlan-objs      := if_media.o \
256 -                  ieee80211_skb.o \
257 -                  ieee80211.o ieee80211_beacon.o ieee80211_crypto.o \
258 -                  ieee80211_crypto_none.o ieee80211_input.o ieee80211_node.o \
259 -                  ieee80211_output.o ieee80211_power.o ieee80211_proto.o \
260 -                  ieee80211_scan.o ieee80211_wireless.o ieee80211_linux.o \
261 -                  ieee80211_monitor.o ieee80211_rate.o
262 -wlan_wep-objs  := ieee80211_crypto_wep.o
263 -wlan_tkip-objs := ieee80211_crypto_tkip.o
264 -wlan_ccmp-objs := ieee80211_crypto_ccmp.o
265 -wlan_acl-objs  := ieee80211_acl.o
266 -wlan_xauth-objs        := ieee80211_xauth.o
267 -wlan_scan_sta-objs :=ieee80211_scan_sta.o
268 -wlan_scan_ap-objs := ieee80211_scan_ap.o
269 -
270 -include $(TOP)/Makefile.inc
271 -
272  INCS += -I$(TOP) -I$(ATH_HAL) -I$(HAL)
273  
274 -EXTRA_CFLAGS+=$(INCS) $(COPTS) -DOPT_AH_H=\"public/$(TARGET).opt_ah.h\"
275 -
276 --include $(TOPDIR)/Rules.make
277 -
278  all:
279         $(MAKE) -C $(KERNELPATH) SUBDIRS=$(shell pwd) modules
280  
281 @@ -108,8 +91,28 @@ install:
282                 f=`basename $$i .o`; \
283                 install -m 0644  $$f.$(KMODSUF) $(DESTDIR)/$(KMODPATH); \
284         done
285 +else
286 +all:
287 +endif
288 +
289 +wlan-objs      := if_media.o \
290 +                  ieee80211_skb.o \
291 +                  ieee80211.o ieee80211_beacon.o ieee80211_crypto.o \
292 +                  ieee80211_crypto_none.o ieee80211_input.o ieee80211_node.o \
293 +                  ieee80211_output.o ieee80211_power.o ieee80211_proto.o \
294 +                  ieee80211_scan.o ieee80211_wireless.o ieee80211_linux.o \
295 +                  ieee80211_monitor.o ieee80211_rate.o
296 +wlan_wep-objs  := ieee80211_crypto_wep.o
297 +wlan_tkip-objs := ieee80211_crypto_tkip.o
298 +wlan_ccmp-objs := ieee80211_crypto_ccmp.o
299 +wlan_acl-objs  := ieee80211_acl.o
300 +wlan_xauth-objs        := ieee80211_xauth.o
301 +wlan_scan_sta-objs :=ieee80211_scan_sta.o
302 +wlan_scan_ap-objs := ieee80211_scan_ap.o
303 +
304 +
305 +EXTRA_CFLAGS+=$(INCS) $(COPTS) -DOPT_AH_H=\"public/$(TARGET).opt_ah.h\"
306 +
307 +-include $(TOPDIR)/Rules.make
308 +
309  
310 -clean:
311 -       -rm -f *~ *.o *.ko *.mod.c
312 -       -rm -f .depend .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd
313 -       -rm -rf .tmp_versions
314 --- /dev/null
315 +++ b/net80211/module.h
316 @@ -0,0 +1,19 @@
317 +#ifdef SINGLE_MODULE
318 +
319 +#undef static
320 +#define static
321 +#undef module_init
322 +#undef module_exit
323 +#define module_init(...)
324 +#define module_exit(...)
325 +
326 +#undef MODULE_AUTHOR
327 +#undef MODULE_LICENSE
328 +#undef MODULE_VERSION
329 +#undef MODULE_DESCRIPTION
330 +#define MODULE_AUTHOR(...)
331 +#define MODULE_LICENSE(...)
332 +#define MODULE_VERSION(...)
333 +#define MODULE_DESCRIPTION(...)
334 +
335 +#endif
336 --- a/ath/if_ath.c
337 +++ b/ath/if_ath.c
338 @@ -13780,3 +13780,5 @@ cleanup_ath_buf(struct ath_softc *sc, st
339         return bf;
340  }
341  
342 +
343 +
344 --- a/net80211/ieee80211.c
345 +++ b/net80211/ieee80211.c
346 @@ -42,6 +42,7 @@
347  #include <linux/config.h>
348  #endif
349  #include <linux/version.h>
350 +#include <linux/init.h>
351  #include <linux/module.h>
352  #include <linux/skbuff.h>
353  #include <linux/netdevice.h>
354 @@ -2015,3 +2016,65 @@ ieee80211_build_sc_ie(struct ieee80211co
355  int ath_debug_global = 0;
356  EXPORT_SYMBOL(ath_debug_global);
357  
358 +#ifdef SINGLE_MODULE
359 +typedef void (*initfunc)(void);
360 +
361 +extern void init_ieee80211_acl(void);
362 +extern void init_crypto_ccmp(void);
363 +extern void init_crypto_tkip(void);
364 +extern void init_crypto_wep(void);
365 +extern void init_wlan(void);
366 +extern void init_scanner_ap(void);
367 +extern void init_scanner_sta(void);
368 +extern void init_ieee80211_xauth(void);
369 +
370 +extern void exit_ieee80211_acl(void);
371 +extern void exit_crypto_ccmp(void);
372 +extern void exit_crypto_tkip(void);
373 +extern void exit_crypto_wep(void);
374 +extern void exit_wlan(void);
375 +extern void exit_scanner_ap(void);
376 +extern void exit_scanner_sta(void);
377 +extern void exit_ieee80211_xauth(void);
378 +
379 +static __initdata initfunc net80211_init[] = {
380 +       init_wlan,
381 +       init_ieee80211_acl,
382 +       init_crypto_ccmp,
383 +       init_crypto_tkip,
384 +       init_crypto_wep,
385 +       init_ieee80211_xauth,
386 +       init_scanner_ap,
387 +       init_scanner_sta,
388 +};
389 +
390 +static __exitdata initfunc net80211_exit[] = {
391 +       exit_crypto_ccmp,
392 +       exit_crypto_tkip,
393 +       exit_crypto_wep,
394 +       exit_scanner_ap,
395 +       exit_scanner_sta,
396 +       exit_ieee80211_xauth,
397 +       exit_ieee80211_acl,
398 +       exit_wlan,
399 +};
400 +
401 +void net80211_init_module(void)
402 +{
403 +       int i;
404 +       for (i = 0; i < sizeof(net80211_init)/sizeof(net80211_init[0]); i++) {
405 +               if (net80211_init[i])
406 +                       net80211_init[i]();
407 +       }
408 +}
409 +
410 +void net80211_exit_module(void)
411 +{
412 +       int i;
413 +       for (i = 0; i < sizeof(net80211_exit)/sizeof(net80211_exit[0]); i++) {
414 +               if (net80211_exit[i])
415 +                       net80211_exit[i]();
416 +       }
417 +}
418 +
419 +#endif
420 --- a/ath/if_ath_ahb.c
421 +++ b/ath/if_ath_ahb.c
422 @@ -447,10 +447,18 @@ MODULE_SUPPORTED_DEVICE("Atheros WLAN ca
423  MODULE_LICENSE("Dual BSD/GPL");
424  #endif
425  
426 +#ifdef SINGLE_MODULE
427 +RC_DECLARE
428 +#endif
429 +
430  static int __init
431  init_ath_ahb(void)
432  {
433         printk(KERN_INFO "%s: %s\n", dev_info, version);
434 +#ifdef SINGLE_MODULE
435 +       net80211_init_module();
436 +       RC_INIT
437 +#endif
438         platform_driver_register(&ahb_wmac_driver);
439         ath_sysctl_register();
440  
441 @@ -463,6 +471,10 @@ exit_ath_ahb(void)
442  {
443         ath_sysctl_unregister();
444         platform_driver_unregister(&ahb_wmac_driver);
445 +#ifdef SINGLE_MODULE
446 +       RC_EXIT
447 +       net80211_exit_module();
448 +#endif
449         printk(KERN_INFO "%s: driver unloaded\n", dev_info);
450  }
451  module_exit(exit_ath_ahb);
452 --- a/ath/if_ath_pci.c
453 +++ b/ath/if_ath_pci.c
454 @@ -415,11 +415,19 @@ MODULE_SUPPORTED_DEVICE("Atheros WLAN ca
455  MODULE_LICENSE("Dual BSD/GPL");
456  #endif
457  
458 +#ifdef SINGLE_MODULE
459 +RC_DECLARE
460 +#endif
461 +
462  static int __init
463  init_ath_pci(void)
464  {
465         printk(KERN_INFO "%s: %s\n", dev_info, version);
466  
467 +#ifdef SINGLE_MODULE
468 +       net80211_init_module();
469 +       RC_INIT
470 +#endif
471         if (pci_register_driver(&ath_pci_driver) < 0) {
472                 printk(KERN_ERR "%s: No devices found, driver not installed.\n", dev_info);
473                 return (-ENODEV);
474 @@ -434,6 +442,10 @@ exit_ath_pci(void)
475  {
476         ath_sysctl_unregister();
477         pci_unregister_driver(&ath_pci_driver);
478 +#ifdef SINGLE_MODULE
479 +       RC_EXIT
480 +       net80211_exit_module();
481 +#endif
482  
483         printk(KERN_INFO "%s: driver unloaded\n", dev_info);
484  }
485 --- a/ath_rate/minstrel/Makefile
486 +++ b/ath_rate/minstrel/Makefile
487 @@ -39,9 +39,7 @@
488  # Makefile for the Atheros Rate Control Support.
489  #
490  obj := $(firstword $(obj) $(SUBDIRS) .)
491 -TOP = $(obj)/../..
492  
493 -obj-m          += ath_rate_minstrel.o
494  ath_rate_minstrel-objs := minstrel.o
495  
496  include $(TOP)/Makefile.inc
497 @@ -50,6 +48,10 @@ INCS += -I$(TOP) -I$(ATH) -I$(ATH_HAL) -
498  
499  EXTRA_CFLAGS+= $(INCS) $(COPTS) -DOPT_AH_H=\"public/$(TARGET).opt_ah.h\"
500  
501 +ifeq ($(SINGLE_MODULE),)
502 +
503 +obj-m          += ath_rate_minstrel.o
504 +
505  -include $(TOPDIR)/Rules.make
506  
507  all:
508 @@ -59,10 +61,9 @@ install:
509         test -d $(DESTDIR)/$(KMODPATH) || mkdir -p $(DESTDIR)/$(KMODPATH)
510         install -m 0644 ath_rate_minstrel.$(KMODSUF) $(DESTDIR)/$(KMODPATH)
511  
512 -clean:
513 -       -rm -f *~ *.o *.ko *.mod.c
514 -       -rm -f .depend .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd
515 -       -rm -rf .tmp_versions
516 -
517  ath_rate_minstrel.o: $(ath_rate_minstrel-objs)
518         $(LD) $(LDOPTS) -o ath_rate_minstrel.$(KMODSUF) -r $(ath_rate_minstrel-objs)
519 +else
520 +all:
521 +install:
522 +endif
523 --- a/ath_rate/minstrel/minstrel.c
524 +++ b/ath_rate/minstrel/minstrel.c
525 @@ -945,6 +945,8 @@ static struct ieee80211_rate_ops ath_rat
526                 .dynamic_proc_register = ath_rate_dynamic_proc_register,
527  };
528  
529 +#include <net80211/module.h>
530 +
531  MODULE_AUTHOR("John Bicket/Derek Smithies");
532  MODULE_DESCRIPTION("Minstrel Rate bit-rate selection algorithm for Atheros devices");
533  #ifdef MODULE_VERSION
534 --- a/net80211/ieee80211_var.h
535 +++ b/net80211/ieee80211_var.h
536 @@ -47,6 +47,7 @@
537  #include <net80211/ieee80211_power.h>
538  #include <net80211/ieee80211_proto.h>
539  #include <net80211/ieee80211_scan.h>
540 +#include "symbol.h"
541  
542  /* NB: 
543   * - Atheros chips use 6 bits when power is specified in whole dBm units, with 
544 @@ -740,6 +741,8 @@ void ieee80211_dfs_action(struct ieee802
545  void ieee80211_expire_channel_excl_restrictions(struct ieee80211com *);
546  void ieee80211_setpuregbasicrates(struct ieee80211_rateset *rs);
547  int ieee80211_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd);
548 +void net80211_init_module(void);
549 +void net80211_exit_module(void);
550  
551  /*
552   * Iterate through ic_channels to enumerate all distinct ic_ieee channel numbers.
553 --- a/net80211/ieee80211_linux.h
554 +++ b/net80211/ieee80211_linux.h
555 @@ -521,7 +521,10 @@ extern struct sk_buff * ieee80211_getmgt
556  #define        IF_DRAIN(_q)            skb_queue_drain(_q)
557  extern void skb_queue_drain(struct sk_buff_head *q);
558  
559 -#ifndef __MOD_INC_USE_COUNT
560 +#ifdef SINGLE_MODULE
561 +#define _MOD_DEC_USE(_m) do {} while(0)
562 +#define _MOD_INC_USE(_m, _err) do {} while(0)
563 +#elif !defined(__MOD_INC_USE_COUNT)
564  #define        _MOD_INC_USE(_m, _err)                                          \
565         if (!try_module_get(_m)) {                                      \
566                 printk(KERN_WARNING "%s: try_module_get failed\n",      \
567 --- a/ath_rate/sample/Makefile
568 +++ b/ath_rate/sample/Makefile
569 @@ -39,9 +39,7 @@
570  # Makefile for the Atheros Rate Control Support.
571  #
572  obj := $(firstword $(obj) $(SUBDIRS) .)
573 -TOP = $(obj)/../..
574  
575 -obj-m          += ath_rate_sample.o
576  ath_rate_sample-objs   := sample.o
577  
578  include $(TOP)/Makefile.inc
579 @@ -50,6 +48,9 @@ INCS += -I$(TOP) -I$(ATH) -I$(ATH_HAL) -
580  
581  EXTRA_CFLAGS+= $(INCS) $(COPTS) -DOPT_AH_H=\"public/$(TARGET).opt_ah.h\"
582  
583 +ifeq ($(SINGLE_MODULE),)
584 +obj-m          += ath_rate_sample.o
585 +
586  -include $(TOPDIR)/Rules.make
587  
588  all:
589 @@ -59,10 +60,9 @@ install:
590         test -d $(DESTDIR)/$(KMODPATH) || mkdir -p $(DESTDIR)/$(KMODPATH)
591         install -m 0644 ath_rate_sample.$(KMODSUF) $(DESTDIR)/$(KMODPATH)
592  
593 -clean:
594 -       -rm -f *~ *.o *.ko *.mod.c
595 -       -rm -f .depend .version .*.o.flags .*.o.d .*.o.cmd .*.ko.cmd
596 -       -rm -rf .tmp_versions
597 -
598  ath_rate_sample.o: $(ath_rate_sample-objs)
599         $(LD) $(LDOPTS) -o ath_rate_sample.$(KMODSUF) -r $(ath_rate_sample-objs)
600 +else
601 +all:
602 +install:
603 +endif
604 --- a/Makefile
605 +++ b/Makefile
606 @@ -41,7 +41,7 @@
607  #
608  
609  obj := $(firstword $(obj) $(SUBDIRS) .)
610 -TOP = $(obj)
611 +export TOP:=$(if $(wildcard $(firstword $(SUBDIRS))/Makefile.inc),$(firstword $(SUBDIRS)),$(CURDIR))
612  
613  ifneq (svnversion.h,$(MAKECMDGOALS))
614  include $(TOP)/Makefile.inc
615 @@ -54,7 +54,7 @@ all: modules tools
616  modules: configcheck svnversion.h
617  ifdef LINUX24
618         for i in $(obj-y); do \
619 -               $(MAKE) -C $$i || exit 1; \
620 +               $(MAKE) -C $$i TOP="$(TOP)" || exit 1; \
621         done
622  else
623         $(MAKE) -C $(KERNELPATH) SUBDIRS=$(shell pwd) modules
624 @@ -89,7 +89,7 @@ install-modules: modules
625         sh scripts/find-madwifi-modules.sh -r $(KERNELRELEASE) $(DESTDIR)
626  
627         for i in $(obj-y); do \
628 -               $(MAKE) -C $$i install || exit 1; \
629 +               $(MAKE) -C $$i install TOP="$(TOP)" || exit 1; \
630         done
631  ifeq ($(DESTDIR),)
632         (export KMODPATH=$(KMODPATH); /sbin/depmod -ae $(KERNELRELEASE))
633 @@ -114,12 +114,21 @@ reinstall-tools: uninstall-tools install
634  reinstall-modules: uninstall-modules install-modules
635  
636  clean:
637 -       for i in $(obj-y); do \
638 -               $(MAKE) -C $$i clean; \
639 -       done
640 -       -$(MAKE) -C $(TOOLS) clean
641 -       rm -rf .tmp_versions
642 +       -find $(obj-y) -name '*~' \
643 +               -or -name '*.o' \
644 +               -or -name '*.o.d' \
645 +               -or -name '*.o.cmd' \
646 +               -or -name '*.o.flags' \
647 +               -or -name '*.ko' \
648 +               -or -name '*.ko.cmd' \
649 +               -or -name '*.mod.c' \
650 +               -or -name '.depend' \
651 +               -or -name '.version' \
652 +               -or -name '.symvers' | \
653 +               xargs -r rm -f
654         rm -f *.symvers svnversion.h
655 +       rm -rf .tmp_versions
656 +       make -C tools clean
657  
658  info:
659         @echo "The following settings will be used for compilation:"
660 @@ -135,18 +144,6 @@ info:
661         @echo "KMODPATH     : $(KMODPATH)"
662         @echo "KMODSUF      : $(KMODSUF)"
663  
664 -sanitycheck:
665 -       @echo -n "Checking requirements... "
666 -       
667 -       @# check if specified rate control is available
668 -       @if [ ! -d $(ATH_RATE) ]; then \
669 -           echo "FAILED"; \
670 -           echo "Selected rate control $(ATH_RATE) not available."; \
671 -           exit 1; \
672 -       fi
673 -       
674 -       @echo "ok."
675 -
676  .PHONY: release
677  release:
678         sh scripts/make-release.bash
679 @@ -155,7 +152,7 @@ release:
680  unload:
681         bash scripts/madwifi-unload
682  
683 -configcheck: sanitycheck
684 +configcheck:
685         @echo -n "Checking kernel configuration... "
686         
687         @# check version of kernel
688 --- a/Makefile.inc
689 +++ b/Makefile.inc
690 @@ -68,6 +68,9 @@ endif
691  export KERNELPATH
692  endif
693  
694 +# build net80211 and ath_ahb/ath_pci into a single module
695 +export SINGLE_MODULE=1
696 +
697  # KERNELRELEASE is the target kernel's version.  It's always taken from
698  # the kernel build tree.  Kernel Makefile doesn't always know the exact
699  # kernel version (especially for vendor stock kernels), so we get it
700 @@ -100,6 +103,7 @@ export ARCH
701  include $(TOP)/ath_hal/ah_target.inc
702  export TARGET
703  COPTS += -DTARGET='"$(TARGET)"'
704 +COPTS += -DCONFIG_ATHEROS_RATE_DEFAULT='"$(firstword $(ATH_RATE))"'
705  
706  # KMODPATH nominates the directory where the modules will be
707  # installed to
708 @@ -141,7 +145,7 @@ ATH=        $(TOP)/ath
709  #
710  # Path to the rate control algorithms.
711  #
712 -ATH_RATE=      $(TOP)/ath_rate
713 +ATH_RATE=      minstrel
714  #
715  # Path to the userspace utilities. 
716  # 
717 --- a/ath_rate/sample/sample.c
718 +++ b/ath_rate/sample/sample.c
719 @@ -991,6 +991,8 @@ static struct ieee80211_rate_ops ath_rat
720         .dynamic_proc_register = ath_rate_dynamic_proc_register,
721  };
722  
723 +#include <net80211/module.h>
724 +
725  MODULE_AUTHOR("John Bicket");
726  MODULE_DESCRIPTION("SampleRate bit-rate selection algorithm for Atheros devices");
727  #ifdef MODULE_VERSION
728 @@ -1000,18 +1002,17 @@ MODULE_VERSION(RELEASE_VERSION);
729  MODULE_LICENSE("Dual BSD/GPL");
730  #endif
731  
732 -static int __init
733 -init_ath_rate_sample(void)
734 +static int __init ath_rate_sample_init(void)
735  {
736         printk(KERN_INFO "%s: %s\n", dev_info, version);
737         return ieee80211_rate_register(&ath_rate_ops);
738  }
739 -module_init(init_ath_rate_sample);
740 +module_init(ath_rate_sample_init);
741  
742  static void __exit
743 -exit_ath_rate_sample(void)
744 +ath_rate_sample_exit(void)
745  {
746         ieee80211_rate_unregister(&ath_rate_ops);
747         printk(KERN_INFO "%s: unloaded\n", dev_info);
748  }
749 -module_exit(exit_ath_rate_sample);
750 +module_exit(ath_rate_sample_exit);
751 --- a/net80211/if_media.h
752 +++ b/net80211/if_media.h
753 @@ -42,6 +42,7 @@
754  #define _NET_IF_MEDIA_H_
755  
756  #include <net80211/ieee80211_linux.h>
757 +#include "symbol.h"
758  
759  /*
760   * Prototypes and definitions for BSD/OS-compatible network interface
761 --- /dev/null
762 +++ b/net80211/symbol.h
763 @@ -0,0 +1,4 @@
764 +#ifdef SINGLE_MODULE
765 +#undef EXPORT_SYMBOL
766 +#define EXPORT_SYMBOL(...)
767 +#endif
768 --- a/ath_rate/Makefile
769 +++ b/ath_rate/Makefile
770 @@ -1,7 +1,7 @@
771  obj := $(firstword $(obj) $(SUBDIRS) .)
772  TOP = $(obj)/..
773  
774 -obj-y := amrr/ onoe/ sample/ minstrel/
775 +obj-y := sample/ minstrel/
776  
777  include $(TOP)/Makefile.inc
778