madwifi: merge fixes from trunk
[openwrt/svn-archive/archive.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