rpms/kernel/devel kernel.spec, 1.347, 1.348 linux-2.6-ath5k.patch, 1.10, 1.11 linux-2.6-rtl8180.patch, 1.5, 1.6 linux-2.6-wireless-pending.patch, 1.19, 1.20 linux-2.6-wireless.patch, 1.15, 1.16

John W. Linville (linville) fedora-extras-commits at redhat.com
Wed Jan 9 02:13:40 UTC 2008


Author: linville

Update of /cvs/pkgs/rpms/kernel/devel
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv24616

Modified Files:
	kernel.spec linux-2.6-ath5k.patch linux-2.6-rtl8180.patch 
	linux-2.6-wireless-pending.patch linux-2.6-wireless.patch 
Log Message:
More wireless fixes headed for 2.6.24 ; More wireless updates headed for 2.6.25


Index: kernel.spec
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/kernel.spec,v
retrieving revision 1.347
retrieving revision 1.348
diff -u -r1.347 -r1.348
--- kernel.spec	7 Jan 2008 01:17:07 -0000	1.347
+++ kernel.spec	9 Jan 2008 02:12:37 -0000	1.348
@@ -1115,7 +1115,7 @@
 ApplyPatch linux-2.6-ata-quirk.patch
 
 # wireless patches headed for 2.6.24
-#ApplyPatch linux-2.6-wireless.patch
+ApplyPatch linux-2.6-wireless.patch
 # wireless patches headed for 2.6.25
 ApplyPatch linux-2.6-wireless-pending.patch
 
@@ -1735,6 +1735,10 @@
 %kernel_variant_files -a /%{image_install_path}/xen*-%{KVERREL} -e /etc/ld.so.conf.d/kernelcap-%{KVERREL}.conf %{with_xen} xen
 
 %changelog
+* Tue Jan 08 2008 John W. Linville <linville at redhat.com>
+- More wireless fixes headed for 2.6.24
+- More wireless updates headed for 2.6.25
+
 * Sun Jan  6 2008 Roland McGrath <roland at redhat.com>
 - Reenable utrace after pulling current patches that already applied fine.
 

linux-2.6-ath5k.patch:

Index: linux-2.6-ath5k.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-ath5k.patch,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- linux-2.6-ath5k.patch	4 Jan 2008 21:55:12 -0000	1.10
+++ linux-2.6-ath5k.patch	9 Jan 2008 02:12:37 -0000	1.11
@@ -1,4 +1,15 @@
-commit a09d1e8fd6aaea60578d2cee852ec476da3e6b66
+commit c8b7de755e09acd128db3998747989e1c2b118c8
+Author: Johannes Berg <johannes at sipsolutions.net>
+Date:   Fri Dec 21 00:59:04 2007 +0100
+
+    ath5k: don't build by default
+    
+    Must have been hubris, everybody needs ath5k, right?
+    
+    Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit f4d792831145e8daedcee7d7f2d6b2b902b9a43f
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 03:11:48 2007 +0200
 
@@ -11,7 +22,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit b46b4130750fd0e37c677a12382ec679845b07ff
+commit cd408c0f5efb63be272169ecd0b4e4a18622cbfd
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 03:10:27 2007 +0200
 
@@ -25,7 +36,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8d91d68029b494bbcc242633e5ce3fcfbcf10f0a
+commit 4319e64105ae8f7c066e77c5180caa1e8a191648
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 03:07:33 2007 +0200
 
@@ -40,7 +51,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 3077d9ecc53b14d946cedd87317a5163e2a66dc9
+commit f2e51a049df5d81e91478f63120a0ce3ade60363
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 03:03:01 2007 +0200
 
@@ -52,7 +63,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 528f1b9fa5d46d35ee076ec41860a74fb4d0a801
+commit 98b8b1b4f8b4edae53514f670b931a6e91a6530d
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 03:01:04 2007 +0200
 
@@ -64,7 +75,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 41cb0aa95ce0fcade56d267f3804284092360d24
+commit 180a0032ebfc26da729bad8af03ca309849949af
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 02:58:57 2007 +0200
 
@@ -76,7 +87,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8fb46b91e6ed72ccfefa6c3f4850b9b58c1463d1
+commit 014da3fa2471f44befbb28881845fff86b7290ec
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 02:55:52 2007 +0200
 
@@ -90,7 +101,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit b6aa459673f61c1288acebec013905a7256f3a5a
+commit 168e6d8c0b6f2cff05b7aa79983ead80e6943eaf
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 02:53:18 2007 +0200
 
@@ -102,7 +113,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a7da8f9d4b256c6014edfe63079c4220e9430e68
+commit 9918e3d8a2cd0a4050203db294a22f974f2bb3d5
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Dec 16 02:47:55 2007 +0200
 
@@ -115,7 +126,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8e685b758aea2c0e82f41813690e229543af9622
+commit 4cd93d7f382ffd81c87664bc5ef42d323219734c
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Fri Dec 14 18:48:57 2007 +0900
 
@@ -130,7 +141,7 @@
     Signed-off-by: Bruno Randolf <bruno at thinktube.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit fc0374171b9f750790b88b795aac3becf4524a92
+commit e1de9954d1bcacbd97c5ca6590a6f371e792d2e1
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Mon Dec 10 19:21:17 2007 +0900
 
@@ -161,7 +172,7 @@
     Acked-by: Jiri Slaby <jirislaby at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 73a8222564a86bf9e38470dbfe44a4826c5d3a0a
+commit d27966de73873eaf4acc58fa1efec76914b3c248
 Author: Dave Young <hidave.darkstar at gmail.com>
 Date:   Fri Dec 7 10:12:58 2007 +0800
 
@@ -175,7 +186,7 @@
     Signed-off-by: Dave Young <hidave.darkstar at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1a54daf7f3963bd1c04cc28500f48280d6c8dcf3
+commit 2b4710b100b5a14ef5cde9d2cc4f6a3a3fc82d45
 Author: Francesco Gringoli <francesco.gringoli at ing.unibs.it>
 Date:   Thu Nov 29 21:39:51 2007 +0100
 
@@ -191,7 +202,7 @@
     Signed-off-by: Francesco Gringoli <francesco.gringoli at ing.unibs.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 04f840943842a4870fd1ddd735140dd0ba73f984
+commit b9a3a7961b63f58ecabddd35d26364c77f66e93d
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Fri Nov 30 11:26:37 2007 +0900
 
@@ -211,7 +222,7 @@
     Acked-by: Luis R. Rodriguez <mcgrof at winlab.rutgers.edu>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8003ffec8e1dca7224fd9e2a8adf8e887197c32c
+commit a10add49914144ff6412196b6cffdd778b1ffaa0
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Fri Nov 30 11:26:36 2007 +0900
 
@@ -226,7 +237,7 @@
     Acked-by: Luis R. Rodriguez <mcgrof at winlab.rutgers.edu>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 335223282459681668ebb0247530020e777d84f5
+commit f1029b306ec99db87cf1a1906e8d570c2b7f81be
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Fri Nov 30 11:26:35 2007 +0900
 
@@ -249,7 +260,7 @@
     Acked-by: Luis R. Rodriguez <mcgrof at winlab.rutgers.edu>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 93be8761d08247a45a095b4d9ebdf16ba0c66b68
+commit 39e8b9ccfa5183bd209e8c650e34b50ace6fae54
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Fri Nov 30 11:26:34 2007 +0900
 
@@ -297,7 +308,7 @@
     Acked-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 07700ba6c1fe652f0c0b9ad5b9d6525664740cf4
+commit 78b9bcc8def7f63f3c43d9f065c570a7d6d43ab4
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Fri Nov 30 11:26:33 2007 +0900
 
@@ -331,7 +342,7 @@
     Acked-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit fd5be00a58244ffd045c5b5fa1eb4e2279d8c5b3
+commit 93970cff4d723ae4b909a5f2e496f2e056b9f2ef
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Wed Nov 14 19:49:49 2007 +0200
 
@@ -343,7 +354,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e856715ffedc6b73c546d5f472e4cd876703091d
+commit 7b5fc553e1783b7533b3b69258ba1d633604626c
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Wed Nov 14 18:23:59 2007 +0200
 
@@ -364,7 +375,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 838904d60eeab7d4206451a5503d80a0ef8a2884
+commit f14ab741b4094f8ed12533f4febb49524b0843bb
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Wed Nov 14 18:17:37 2007 +0200
 
@@ -380,7 +391,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 93e5669cf00f5323f65303c4ef096e0c8919d292
+commit a1fb4384f3c9e93e3bdf910d8543e1fc0d75a0e7
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Wed Nov 14 18:14:40 2007 +0200
 
@@ -393,7 +404,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 41bf49ef5be651dfe06e597389a0237ce5298d20
+commit a059fd5d1987ebea519c7d2d2822926c1c2d08ee
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Wed Nov 14 18:11:40 2007 +0200
 
@@ -411,7 +422,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1ce29f8277f8d9e44995f81e5986361fbdd87615
+commit 06b26c606786d2265a4d66b01541741b8f06726e
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Fri Nov 2 16:46:38 2007 -0400
 
@@ -439,7 +450,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 01584d2b0e88eea833c378d4da292f8a7e2a4a49
+commit 07516a921d2874a691b760ae9b9ed6f78b6a15b2
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Nov 1 23:11:31 2007 -0400
 
@@ -464,7 +475,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2e046652afab548b98ceee3043173e17cf7f7145
+commit bd0225b26f2e8bc3f776df3f985b141e2a27a240
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Nov 1 17:55:53 2007 -0400
 
@@ -479,7 +490,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 9b83892f2c0a16f087dc45d7b8a6353c69c0fcfb
+commit a18255049206bc5825fa56953aa619f0a3981189
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Nov 1 17:53:18 2007 -0400
 
@@ -494,7 +505,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit f75a5a95a1fc5287143afbeb99c0e238ef4cbd79
+commit f3d5e0ae18b14e85c2aaf6dab22b772cfbfb1a16
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Nov 1 00:38:16 2007 -0400
 
@@ -510,7 +521,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 6f95039ebee8f0d79b940f06bcde1e0711334a83
+commit df19bdfe6ea2878a32b177e0996c3bf8824ac576
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Nov 1 17:50:30 2007 -0400
 
@@ -530,7 +541,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 012198ddffdb66120528823c73318379b6a59a77
+commit dc3a890b378ab2cb258d122804ba8e4973351de9
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Nov 1 00:35:20 2007 -0400
 
@@ -550,7 +561,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e23be3f08baf10d7ded7eab076b68dc6696d230e
+commit 6f56a51c82c42c3de298ef21c7187bbf40e90285
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Nov 1 00:34:24 2007 -0400
 
@@ -575,7 +586,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 45cededd2df27b8c2a4b7c37a02c7f3830d1d243
+commit adef1b4fb9434fce0b6a036fb027dfb9baeac014
 Author: Ulrich Meis <meis at nets.rwth-aachen.de>
 Date:   Tue Oct 30 22:20:56 2007 +0100
 
@@ -588,7 +599,7 @@
     Signed-off-by: Ulrich Meis <meis at nets.rwth-aachen.de>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 168048516dbf42ca2deb3cd36101f9b76ecdb030
+commit 5f29323196f05b80ac05fc6da8342716a08995e4
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Oct 28 02:58:27 2007 +0300
 
@@ -610,7 +621,7 @@
     Signed-Off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 7ed69f54e345a9897b0b4617311858303e781aff
+commit 727152d1b3d200a963cacd8c2d2b1cb12eb10ea0
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Oct 28 02:44:18 2007 +0300
 
@@ -633,7 +644,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 24d2eab68057de8e63d262e84c0ba3a12a69f0c1
+commit 88b3108cf99eb0cd253eb98341f9d0022c02d522
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Oct 28 02:31:13 2007 +0300
 
@@ -654,7 +665,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit d17a1cea1bfc35c735f3ebcf1ef823f06389748d
+commit 7b63c1e80c44c5e5669a963c1df01c549db21c00
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Oct 28 02:24:59 2007 +0300
 
@@ -671,7 +682,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 85364fdd0649d1590e9ae18d1961c6861b7b9288
+commit 7227484241ea38e341c5953f8793b7903fd82b9b
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Oct 28 02:20:33 2007 +0300
 
@@ -691,7 +702,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 73a0794c3746635652f10bcfe99821b3526163b5
+commit 2a12ca036a3058c28b003ce332c2a0e57d0baa18
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Oct 28 02:13:32 2007 +0300
 
@@ -706,7 +717,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e05ef94a6f9a5b2c485f552e46e334a2a4d17d85
+commit d24942d9e24bee128d5eb92cc7ebba25ef1b3588
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Oct 28 02:06:42 2007 +0300
 
@@ -751,7 +762,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4528852951e6ad64171f584f6b685eb802f6293f
+commit 505a5f55ac6a514b9b11e34b11bde89a5dbdbfe3
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Sun Oct 28 02:04:25 2007 +0300
 
@@ -771,7 +782,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1f480e2920877d373e2a547cf53509fc513e02a9
+commit 1cfa5273bfba934b9e651c1b0244ecea9dd9267f
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Fri Oct 19 18:57:13 2007 -0400
 
@@ -788,7 +799,7 @@
     Signed-off-by: Jiri Slaby <jirislaby at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 96a596f082e92fcdf6308b6224104f93e8916394
+commit f05e8574a0f9fe0b8e4e3d407963dd49bca88f3e
 Author: John W. Linville <linville at tuxdriver.com>
 Date:   Tue Oct 23 13:41:37 2007 -0400
 
@@ -799,7 +810,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 05a920250b6385c7eb23a94f0532f94dbd4b6160
+commit 8d981085dde2f01ffe4375abe75d643792bfff3c
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Fri Oct 19 23:57:27 2007 +0900
 
@@ -816,7 +827,7 @@
     Signed-off-by: Bruno Randolf <bruno at thinktube.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 14ca910b99e3dc5a1082e7e7b13a2957ffe44fe0
+commit aa72b7a1758c4020c95a0e9922a609992fab34e4
 Author: Nick Kossifidis <mick at madwifi.org>
 Date:   Fri Oct 19 13:56:19 2007 +0000
 
@@ -834,7 +845,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 34edd82ca97a76b921ac52c99f07dbfe324feaae
+commit 6e3ccf09d90d05cee09a050f4e23d107cdcb97a1
 Author: mick at ics.forth.gr <mick at ics.forth.gr>
 Date:   Thu Oct 18 00:18:43 2007 +0300
 
@@ -848,7 +859,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4c367a11d4502a6e54fa64514cee61c67be9b411
+commit 80785589d7d1ae2199f575479775711da732f454
 Author: mick at ics.forth.gr <mick at ics.forth.gr>
 Date:   Thu Oct 18 00:17:12 2007 +0300
 
@@ -864,7 +875,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4472d002f92b4365184acd6d38e4e417afd5b857
+commit 4766bd970128740cb44eb7a25197797b019197be
 Author: mick at ics.forth.gr <mick at ics.forth.gr>
 Date:   Thu Oct 18 00:13:26 2007 +0300
 
@@ -883,7 +894,7 @@
     Signed-off-by: Nick Kossifidis <mickflemm at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 9d0d2389d863cc3ef433e5103bd6d37f7a5bc983
+commit 8d9d5b5d7bb9463e9cb5ad11957935dda4840361
 Author: John W. Linville <linville at tuxdriver.com>
 Date:   Wed Oct 17 15:01:48 2007 -0400
 
@@ -895,7 +906,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4cdfeb9398897c3969f89a8d32ad7632ead0fc6a
+commit 1b489431cccdd64bd7934c84ee214b973d5bd2d6
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Tue Oct 16 22:20:37 2007 +0900
 
@@ -907,7 +918,7 @@
     Acked-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 75b99ae66c33cfd5664102c2588ebd505577fc7e
+commit 1c9fe46bb427338312f2b8b744ba5303f97a6d77
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Sun Oct 14 10:45:54 2007 -0400
 
@@ -921,7 +932,7 @@
     Signed-off-by: Jiri Slaby <jirislaby at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2ad8cab5071e6059c7333cac965f2b7e7a3342a5
+commit 49f80dff400c9a7ca12244cca6977ec3afa9b645
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Sat Oct 13 16:08:29 2007 -0400
 
@@ -954,7 +965,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 33e9ca7f21695f2f285833cd296f70a2cd345730
+commit 29e0f5dfa9d80228333dd15ac389f91a5df33229
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Fri Oct 12 11:07:09 2007 -0400
 
@@ -979,7 +990,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 953389189d1790b4346a43309719893400a31fc5
+commit 3112cb20a5efc5d59984643990e9dcb7fbeefdc2
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Fri Oct 12 11:05:43 2007 -0400
 
@@ -992,7 +1003,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8462b5d694f20a522ba4dfbb153648ba332b5627
+commit eac99ea545ae91b6b8625179caee7a337d286237
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Fri Oct 12 11:04:38 2007 -0400
 
@@ -1016,7 +1027,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ad134b6e277058f4ce929fb4903bac8f2ffa2565
+commit 60964785b9f0cd09580689390d071fb1b7bad482
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Fri Oct 12 11:03:49 2007 -0400
 
@@ -1043,7 +1054,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit cc79ada2dc67857c1fd922e16ca3769a302f0b06
+commit e415fa9d482d60842d9ea4367e40dcfc628d0cdf
 Author: Bruno Randolf <bruno at thinktube.com>
 Date:   Mon Oct 15 21:30:38 2007 +0900
 
@@ -1061,7 +1072,7 @@
     Signed-off-by: Bruno Randolf <bruno at thinktube.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1c4a64df662171bf85081aea39d155c683966a56
+commit d3d208f9e217795a838bc86c5a791e4a06e86299
 Author: John W. Linville <linville at tuxdriver.com>
 Date:   Tue Oct 2 19:56:29 2007 -0400
 
@@ -1069,7 +1080,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ac82c3d69dca0977ad408153109311faabaa73d3
+commit d4ea14a1d44516b070cad5007938192b8ed81f0f
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Fri Sep 28 11:26:16 2007 -0400
 
@@ -1088,7 +1099,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a1f0e21e5ba549ae9208faf9076b0c807adca7c6
+commit fef2a2fcb5dd085dd065c3fe571dbb41ac9b4df6
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Sep 27 21:04:19 2007 -0400
 
@@ -1114,7 +1125,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 6a0f742dac6bd0c396eb24c021c6c048f496af6e
+commit ba1549c3f5be2c03beb6a55105e31f71e4d692b1
 Author: Bradley M. Kuhn <bkuhn at softwarefreedom.org>
 Date:   Thu Sep 27 18:58:24 2007 -0400
 
@@ -1156,7 +1167,7 @@
     Acked-by: Michael Taylor <mike.taylor at apprion.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4adaee6d7ab1bfd4d9709495a2cb97df4b5afed8
+commit 6e3405416da705b187d5b203a4426a39c91b97a4
 Author: Andrew Morton <akpm at linux-foundation.org>
 Date:   Thu Sep 20 14:02:31 2007 -0700
 
@@ -1167,7 +1178,7 @@
     Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 260dea31422e4c97b88b2f26474eac3b20ee76a4
+commit cd11fcee4006ff4bb9ab8cc018daa50c5f59a1d4
 Author: Stephen Hemminger <shemminger at linux-foundation.org>
 Date:   Tue Sep 18 10:06:47 2007 -0700
 
@@ -1178,7 +1189,7 @@
     Signed-off-by: Stephen Hemminger <shemminger at linux-foundation.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 6ebc3f5df03a301a173e10dd72b513fe23ecbbce
+commit f05bede87ac77674e8bca1ecaa38e127603a3175
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Sep 20 17:13:26 2007 -0400
 
@@ -1215,7 +1226,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit eae99b799ce2aff97ad9016cac834405678c3d6b
+commit 346a6c93de5ed9f19bb0e83a93de9170c302a990
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Wed Sep 26 14:04:10 2007 -0400
 
@@ -1231,7 +1242,7 @@
     Cc: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 9ab409d9f834472b2fdf9705cde52f8b4bc2436e
+commit a8ea32c2f68a931cba77fa4f87e98a33f71e3850
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Wed Sep 26 14:03:27 2007 -0400
 
@@ -1244,7 +1255,7 @@
     Cc: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 5034f1e5e0610667a77e8ac991255162e5fe9982
+commit b7d1c25c0d38efa15a3a496f3c224d88dd3b1a6f
 Author: Nick Kossifidis <mickflemm at gmail.com>
 Date:   Wed Sep 26 14:02:50 2007 -0400
 
@@ -1263,7 +1274,7 @@
     Cc: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit c0a7d16f73da9c33bd71ec8b303bc735f604350c
+commit 1124e682413ed56f4256249bf394f3ffe0ccf564
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Wed Sep 26 14:02:11 2007 -0400
 
@@ -1278,7 +1289,7 @@
     Cc: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 71b0b4547745b849f1a2535d37e02cff91cb83ad
+commit 55351cd4fcb0cc955b9111c60be8114e4554a0f0
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Mon Sep 17 17:31:51 2007 -0400
 
@@ -1299,7 +1310,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit aa03e9134b6aca4522e8f0a772f4509a5cfe4b13
+commit c4ddc3304c6ae8e0225ae2067e6241483a03f3e5
 Author: John W. Linville <linville at tuxdriver.com>
 Date:   Mon Sep 17 17:11:29 2007 -0400
 
@@ -1307,7 +1318,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit a05767ddbfb1138042b5f08c822a54610bd7d437
+commit fea5ce5b99361fe5341e94103e1f6bd03348307b
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Mon Sep 17 00:48:27 2007 -0400
 
@@ -1320,7 +1331,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit fb31173e6ccfbcadd9d7645a384c9add3ce7be4f
+commit 9e1fda939e3a5632b698fc1255344678a43d7214
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Mon Sep 17 00:01:09 2007 -0400
 
@@ -1332,7 +1343,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 5bc68c49c1bdbb92cfcbbea4a57a77b7067350fb
+commit 48d804ad5c68f1cb1b1dcaff25c036a23ab0c7eb
 Author: Krzysztof Halasa <khc at pm.waw.pl>
 Date:   Mon Sep 3 20:35:52 2007 +0200
 
@@ -1343,7 +1354,7 @@
     Signed-off-by: Krzysztof Halasa <khc at pm.waw.pl>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 967ee4db879de997e8aadb397317c691480cc9d9
+commit 27a834473cdb0f478b8476423bca96897daeeef8
 Author: John W. Linville <linville at tuxdriver.com>
 Date:   Sat Sep 15 11:05:32 2007 -0400
 
@@ -1351,7 +1362,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 847a9375af07c677f74934e24f779d90bcc9a7c7
+commit 58d4931278d3bdb768f2fae19e03418892f26143
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Mon Sep 10 16:00:38 2007 -0400
 
@@ -1370,7 +1381,7 @@
     Signed-off-by: Luis R. Rodriguez <mcgrof at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4ac1d5eb15b9f5a31568d06d38326059bacee642
+commit 6652e9e8c4037dfd5d3461c3f5e133bdfea3c0a8
 Author: Luis R. Rodriguez <mcgrof at gmail.com>
 Date:   Thu Sep 6 10:18:22 2007 -0400
 
@@ -1389,7 +1400,7 @@
     Changes-licensed-under: ISC
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 82f2f4094eddd1993b9f2bc0d53f26def57c3fae
+commit 15eebdfe01639313dcd585b1cffdacfc9c218290
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Tue Aug 28 11:59:54 2007 -0400
 
@@ -1403,7 +1414,7 @@
     Signed-off-by: Jiri Slaby <jirislaby at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit c2877048ec6f854d417e9141bb18cf4ae15f7b33
+commit 0c2a3e294f77d278e9145d17e7efcce1a2bd8a3c
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Sat Aug 25 03:59:28 2007 -0400
 
@@ -1418,7 +1429,7 @@
     Cc: <linville at tuxdriver.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 9d6c3cef55cbbd6f4358d9bd7a59a2b7655eaaa3
+commit c4a1e303676a67be1a14755f9eb367d3560d43c4
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Sat Aug 25 03:58:47 2007 -0400
 
@@ -1438,7 +1449,7 @@
     Cc: <linville at tuxdriver.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8695faaeffc78924829afb21fd7602dc3a4d81b9
+commit 45040418733e0c44634f4374c4bbc652e115d202
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Sat Aug 25 03:51:51 2007 -0400
 
@@ -1452,7 +1463,7 @@
     Cc: <linville at tuxdriver.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 5f56d31da11ddf176e313828d168365662ee7b19
+commit c68e3c811241892f7fa10bf23c32bda62bbf2857
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Sat Aug 25 03:57:26 2007 -0400
 
@@ -1466,7 +1477,7 @@
     Cc: <linville at tuxdriver.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit f2854f11abaef57d219103380ab8410eda6a4c83
+commit 55e002de32ea64392a7b7388b0c5458986226ba8
 Author: John W. Linville <linville at tuxdriver.com>
 Date:   Thu Aug 23 15:23:30 2007 -0400
 
@@ -1474,7 +1485,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 042c3bcd643fc46949ddd1e71d16ec1dcc0dcf18
+commit 6ffec76db19cd9d32d60dfdd0124021fb53937da
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Wed Aug 22 22:54:07 2007 +0200
 
@@ -1487,7 +1498,7 @@
     Signed-off-by: Jiri Slaby <jirislaby at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1fea1eeb34e4092d45e94e6c3e9f2c93b3bc268a
+commit 8667a78ef514cbba5ae87fe6d2f97416a8a29f0c
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Wed Aug 22 22:53:25 2007 +0200
 
@@ -1501,7 +1512,7 @@
     Signed-off-by: Jiri Slaby <jirislaby at gmail.com>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 88ee097caeeb0561c293296c03da47d3b6e688fb
+commit 031485773f72e11a680868574d3ebd3e43619b8a
 Author: akpm at linux-foundation.org <akpm at linux-foundation.org>
 Date:   Tue Aug 21 16:53:53 2007 -0700
 
@@ -1515,7 +1526,7 @@
     Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8ddf75b76f0b704971cb0df635557b5cad84ed7d
+commit b65e48d48b7c1f4f059f0f7966df051bcd27e404
 Author: akpm at linux-foundation.org <akpm at linux-foundation.org>
 Date:   Tue Aug 21 00:51:20 2007 -0700
 
@@ -1527,7 +1538,7 @@
     Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit cd59338a9249ea6f216ba291167fa9728f8bc1ce
+commit 3d32a0acdec33a60ee05a694a8443f502773743b
 Author: akpm at linux-foundation.org <akpm at linux-foundation.org>
 Date:   Tue Aug 21 00:42:32 2007 -0700
 
@@ -1540,7 +1551,7 @@
     Signed-off-by: Andrew Morton <akpm at linux-foundation.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit d58bf444cd868ce93b29501c013b2c057007eed5
+commit d3f368bdccdc14d781153b95bb3486e8e265d508
 Author: Jiri Slaby <jirislaby at gmail.com>
 Date:   Sun Aug 12 17:33:16 2007 +0200
 
@@ -1552,8 +1563,8 @@
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
 diff -up linux-2.6.23.noarch/MAINTAINERS.orig linux-2.6.23.noarch/MAINTAINERS
---- linux-2.6.23.noarch/MAINTAINERS.orig	2007-12-21 12:15:17.000000000 -0500
-+++ linux-2.6.23.noarch/MAINTAINERS	2007-12-21 12:18:50.000000000 -0500
+--- linux-2.6.23.noarch/MAINTAINERS.orig	2008-01-08 20:58:04.000000000 -0500
++++ linux-2.6.23.noarch/MAINTAINERS	2008-01-08 21:00:40.000000000 -0500
 @@ -646,6 +646,17 @@ M:	ecashin at coraid.com
  W:	http://www.coraid.com/support/linux
  S:	Supported
@@ -1573,8 +1584,8 @@
  P:	Jay Cliburn
  M:	jcliburn at gmail.com
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig linux-2.6.23.noarch/drivers/net/wireless/Makefile
---- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-12-21 12:15:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-12-21 12:18:50.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2008-01-08 20:58:04.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2008-01-08 21:00:40.000000000 -0500
 @@ -61,3 +61,5 @@ obj-$(CONFIG_RT2X00)	+= rt2x00/
  obj-$(CONFIG_P54_COMMON)	+= p54common.o
  obj-$(CONFIG_P54_USB)		+= p54usb.o
@@ -1582,16 +1593,15 @@
 +
 +obj-$(CONFIG_ATH5K)	+= ath5k/
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-21 12:15:17.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-21 12:18:50.000000000 -0500
-@@ -656,6 +656,24 @@ config P54_PCI
+--- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2008-01-08 20:58:04.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2008-01-08 21:00:40.000000000 -0500
+@@ -656,6 +656,23 @@ config P54_PCI
  
  	  If you choose to build a module, it'll be called p54pci.
  
 +config ATH5K
 +	tristate "Atheros 5xxx wireless cards support"
 +	depends on PCI && MAC80211 && WLAN_80211 && EXPERIMENTAL
-+	default m
 +	---help---
 +	  This module adds support for wireless adapters based on
 +	  Atheros 5xxx chipset.
@@ -1610,8 +1620,8 @@
  source "drivers/net/wireless/hostap/Kconfig"
  source "drivers/net/wireless/bcm43xx/Kconfig"
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/phy.c	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,2071 @@
 +/*
 + * PHY functions
@@ -3685,8 +3695,8 @@
 +	return ath5k_hw_txpower(ah, channel, power);
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/ath5k.h	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,1153 @@
 +/*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -4842,14 +4852,14 @@
 +
 +#endif
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/Makefile	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,2 @@
 +ath5k-objs		= base.o hw.o regdom.o initvals.o phy.o debug.o
 +obj-$(CONFIG_ATH5K)	+= ath5k.o
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/reg.h	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,1987 @@
 +/*
 + * Copyright (c) 2007 Nick Kossifidis <mickflemm at gmail.com>
@@ -6839,8 +6849,8 @@
 +#define	AR5K_PHY_GAIN_2GHZ_MARGIN_TXRX_S	18
 +#define	AR5K_PHY_GAIN_2GHZ_INI_5111	0x6480416c
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.h	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,500 @@
 +/*
 + * Copyright (c) 2004, 2005 Reyk Floeter <reyk at openbsd.org>
@@ -7343,8 +7353,8 @@
 +
 +#endif
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.h	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.h	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,216 @@
 +/*
 + * Copyright (c) 2007 Bruno Randolf <bruno at thinktube.com>
@@ -7563,8 +7573,8 @@
 +
 +#endif /* ifndef _ATH5K_DEBUG_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.c	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,4349 @@
 + /*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -11916,8 +11926,8 @@
 +	return -EIO;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/hw.h	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,588 @@
 +/*
 + * Copyright (c) 2004-2007 Reyk Floeter <reyk at openbsd.org>
@@ -12508,8 +12518,8 @@
 +	return retval;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/initvals.c	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,1347 @@
 +/*
 + * Initial register settings functions
@@ -13859,8 +13869,8 @@
 +	return 0;
 +}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.c	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,2822 @@
 +/*-
 + * Copyright (c) 2002-2005 Sam Leffler, Errno Consulting
@@ -16685,8 +16695,8 @@
 +}
 +
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.c	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/debug.c	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,469 @@
 +/*
 + * Copyright (c) 2007 Bruno Randolf <bruno at thinktube.com>
@@ -17158,8 +17168,8 @@
 +
 +#endif /* if ATH5K_DEBUG */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/base.h	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,178 @@
 +/*-
 + * Copyright (c) 2002-2007 Sam Leffler, Errno Consulting
@@ -17340,8 +17350,8 @@
 +
 +#endif
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c	2007-12-21 12:18:50.000000000 -0500
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/ath5k/regdom.c	2008-01-08 21:00:40.000000000 -0500
 @@ -0,0 +1,121 @@
 +/*
 + * Copyright (c) 2004, 2005 Reyk Floeter <reyk at vantronix.net>

linux-2.6-rtl8180.patch:

Index: linux-2.6-rtl8180.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-rtl8180.patch,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- linux-2.6-rtl8180.patch	4 Jan 2008 21:55:12 -0000	1.5
+++ linux-2.6-rtl8180.patch	9 Jan 2008 02:12:37 -0000	1.6
@@ -1,4 +1,65 @@
-commit 7156f27bc972aaaaf5241acfd40172da6b250e5c
+commit 386616bc13a8fdc0b87234aeceed6001a61bb1d6
+Author: Michael Wu <flamingice at sourmilk.net>
+Date:   Wed Dec 26 20:16:37 2007 -0500
+
+    rtl8180: remove calibration error message for rtl8225z2
+    
+    The radio seems to work fine despite this message. Remove it for now.
+    
+    Signed-off-by: Michael Wu <flamingice at sourmilk.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit a414d3e4ab11bda7c914ab4c7416a106a89f40ac
+Author: Andrea Merello <andreamrl at tiscali.it>
+Date:   Wed Dec 26 20:16:37 2007 -0500
+
+    rtl8180: sync radio V2 code with vendor reference
+    
+    We have to set ofdm register 0x2 to 0x62 (0x64 is for rtl8187). We did this
+    correctly in init function, but we overwrite it when setting TX power.
+    As reference code suggest, we still rewrite it, but with right value.
+    
+    Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
+    Signed-off-by: Michael Wu <flamingice at sourmilk.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 0bcb498ca8c8510d301b02a788abb70b43ea7703
+Author: Michael Wu <flamingice at sourmilk.net>
+Date:   Tue Dec 25 01:42:29 2007 -0500
+
+    rtl8180: Update Kconfig
+    
+    We should let people know what this is.
+    
+    Signed-off-by: Michael Wu <flamingice at sourmilk.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit b444e913ac42dd4adbd9b86db7104f9c68e30611
+Author: Michael Wu <flamingice at sourmilk.net>
+Date:   Tue Dec 25 01:23:59 2007 -0500
+
+    rtl818x: Use RF ops tables
+    
+    Unfortunately, merging the usb and pci rtl8225 rf code is currently
+    more pain than gain. Switch to RF ops tables to avoid symbol conflicts
+    when building in the rtl818x drivers.
+    
+    Signed-off-by: Michael Wu <flamingice at sourmilk.net>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 533c5787ba6b825c2eec9503bcd9627bcbc3b16e
+Author: John W. Linville <linville at tuxdriver.com>
+Date:   Mon Jan 7 23:05:12 2008 -0500
+
+    Revert "rtl8180: add "rtl8180_" to symbols in rtl8180_rtl8225.c"
+    
+    This reverts commit a2ef4d22ae8511739f2b1626ef1d56bb7d7454ad.
+    
+    Conflicts:
+    
+    	drivers/net/wireless/rtl8180_rtl8225.c
+
+commit 1867f3c5a292c022c4091d61ca1d1c139f764ee1
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Wed Dec 19 01:17:36 2007 -0500
 
@@ -14,7 +75,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 2c1911cfac77adeb1bfbd05e163d05cfd1770a98
+commit dd9c3109d768274207777c0ebdd21c2255ee03c2
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Wed Dec 19 01:17:36 2007 -0500
 
@@ -27,7 +88,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 01e862fb2436e93e15c96e9319ba332f6e8ce344
+commit 2a20f225f6b50c744641e017fb6e28ed96a68c1b
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Wed Dec 19 01:17:36 2007 -0500
 
@@ -39,7 +100,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit ca0fb53ceb4aa7fce24139c16075e07bde8a39a0
+commit 7261cb16044186c348fae87b5cfe40b6876d2252
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Wed Dec 19 01:17:35 2007 -0500
 
@@ -51,7 +112,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit df9943f67f1b791a00ee471fa327622a4df899f7
+commit 722375e8727325fae2a42522bd19e9c301bc4469
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Wed Dec 19 01:17:35 2007 -0500
 
@@ -64,7 +125,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 10b435a109dcb5741de8d9de10bd630137d2a2b6
+commit db3232abb1826b8b854c56d9cee7663be71ef03b
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Wed Dec 19 01:17:35 2007 -0500
 
@@ -83,7 +144,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 1bb9190fafae5bcd4cc2190d89fdcfeaa4e2b56e
+commit cdf0dbcdb455f387b763762dd659206cd097f820
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Tue Dec 18 17:28:44 2007 -0500
 
@@ -96,7 +157,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 4a5654152819d7ececdc3b484ff065e7aef46203
+commit ee172363a470b781d31c535b239a49cec7cdc88c
 Author: Johannes Berg <johannes at sipsolutions.net>
 Date:   Tue Dec 4 20:33:40 2007 +0100
 
@@ -109,7 +170,7 @@
     Signed-off-by: Johannes Berg <johannes at sipsolutions.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 3ed77a761f33d9d709349e75d5dc39465e0cff52
+commit 602fb63ec049cfe02c40b94e080818beb0326492
 Author: Michael Wu <flamingice at sourmilk.net>
 Date:   Mon Dec 3 22:55:08 2007 -0500
 
@@ -120,7 +181,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit e4062a578a14658007f78f587358603221c1f766
+commit ca6b137bd9bdcabf3872276e4215e0a4f22fe0e1
 Author: Pavel Roskin <proski at gnu.org>
 Date:   Sat Nov 24 20:35:25 2007 -0500
 
@@ -129,7 +190,7 @@
     Signed-off-by: Pavel Roskin <proski at gnu.org>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit d36bf4a65cc5e82dbac785adfd6238765ff7d1ef
+commit a2ef4d22ae8511739f2b1626ef1d56bb7d7454ad
 Author: John W. Linville <linville at tuxdriver.com>
 Date:   Mon Dec 3 21:43:26 2007 -0500
 
@@ -140,7 +201,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 0ef47702ac1d414db545c378ffa41a3c052f855c
+commit bce13f311c90c4b53da8267cf6a11042d3fc8bc0
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Sun Dec 2 17:17:51 2007 -0500
 
@@ -152,7 +213,7 @@
     Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 9f2098e01be9403d486dea5029624d0f9febb9af
+commit 3dc98653e13ad690e98d810cec3850f4f6cb4baa
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Sun Dec 2 17:17:51 2007 -0500
 
@@ -164,7 +225,7 @@
     Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit bff8c62a95511a4ba33150c9bf8e61725dae61a2
+commit 216f7b62e468a4876b50c4b959ac7d38f880fd95
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Sun Dec 2 17:17:51 2007 -0500
 
@@ -178,7 +239,7 @@
     Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 7a3a110a27f08294008da27d6f05c35de029e48b
+commit c5281862482acf002b9b73020801dcb12e1c3c70
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Sun Dec 2 17:17:51 2007 -0500
 
@@ -190,7 +251,7 @@
     Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 37c8bb6c3c83148c8dbb5a50968d8c0d6c273dc5
+commit 98e578b30fa5590021e651d40aee3cbac6a2dcac
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Sun Dec 2 17:17:51 2007 -0500
 
@@ -203,7 +264,7 @@
     Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 5300aa6958712cc9dd6def888a277bfdbdc1d8ce
+commit b3893ff34dc801983c40aa5ec804205cf916ed6d
 Author: Andrea Merello <andreamrl at tiscali.it>
 Date:   Sun Dec 2 17:17:51 2007 -0500
 
@@ -215,7 +276,7 @@
     Signed-off-by: Andrea Merello <andreamrl at tiscali.it>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 15ef977469ade9397a5c8502dd2d8efc5e3466a0
+commit 2cf3e2447ad48d82bdd3a87ac9799a501c81fd77
 Author: John W. Linville <linville at tuxdriver.com>
 Date:   Wed Nov 14 20:29:48 2007 -0500
 
@@ -223,7 +284,7 @@
     
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit daa725bf7e2184463022688ebd5954149c3a569c
+commit c47cc9b0ecad8888ee59c901adbe716693c77ff2
 Author: Michael Wu <flamingice at sourmilk.net>
 Date:   Wed Nov 14 17:19:52 2007 -0500
 
@@ -234,7 +295,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 76ca790000438a17bd0c08351307f9bb994f9357
+commit b2bb93c1608b3b97cb86118c344887f9e7ae2378
 Author: Michael Wu <flamingice at sourmilk.net>
 Date:   Sat Oct 20 20:05:31 2007 -0400
 
@@ -245,7 +306,7 @@
     Signed-off-by: Michael Wu <flamingice at sourmilk.net>
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
-commit 8a68259e579a40378644c39da08267df8d420547
+commit 5a0bacbbcbad7c8a2976f52486ba9da7b776ff25
 Author: Michael Wu <flamingice at sourmilk.net>
 Date:   Sun Oct 14 14:43:16 2007 -0400
 
@@ -266,8 +327,8 @@
     Signed-off-by: John W. Linville <linville at tuxdriver.com>
 
 diff -up linux-2.6.23.noarch/include/linux/pci_ids.h.orig linux-2.6.23.noarch/include/linux/pci_ids.h
---- linux-2.6.23.noarch/include/linux/pci_ids.h.orig	2007-12-21 10:43:39.000000000 -0500
-+++ linux-2.6.23.noarch/include/linux/pci_ids.h	2007-12-21 12:28:05.000000000 -0500
+--- linux-2.6.23.noarch/include/linux/pci_ids.h.orig	2008-01-08 20:02:59.000000000 -0500
++++ linux-2.6.23.noarch/include/linux/pci_ids.h	2008-01-08 21:03:07.000000000 -0500
 @@ -2078,6 +2078,9 @@
  #define PCI_DEVICE_ID_ALTIMA_AC9100	0x03ea
  #define PCI_DEVICE_ID_ALTIMA_AC1003	0x03eb
@@ -279,9 +340,9 @@
  
  #define PCI_VENDOR_ID_ARECA		0x17d3
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.c	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,193 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.c	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,201 @@
 +
 +/*
 + * Radio tuning for Philips SA2400 on RTL8180
@@ -360,7 +421,8 @@
 +
 +}
 +
-+void sa2400_rf_set_channel(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
++static void sa2400_rf_set_channel(struct ieee80211_hw *dev,
++				  struct ieee80211_conf *conf)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u32 txpw = priv->channels[conf->channel - 1].val & 0xFF;
@@ -376,12 +438,12 @@
 +	write_sa2400(dev, 3, 0);
 +}
 +
-+void sa2400_rf_stop(struct ieee80211_hw *dev)
++static void sa2400_rf_stop(struct ieee80211_hw *dev)
 +{
 +	write_sa2400(dev, 4, 0);
 +}
 +
-+void sa2400_rf_init(struct ieee80211_hw *dev)
++static void sa2400_rf_init(struct ieee80211_hw *dev)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u32 anaparam, txconf;
@@ -475,9 +537,16 @@
 +	rtl8180_write_phy(dev, 0x19, 0x0);
 +	rtl8180_write_phy(dev, 0x1a, 0xa0);
 +}
++
++const struct rtl818x_rf_ops sa2400_rf_ops = {
++	.name		= "Philips",
++	.init		= sa2400_rf_init,
++	.stop		= sa2400_rf_stop,
++	.set_chan	= sa2400_rf_set_channel
++};
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig linux-2.6.23.noarch/drivers/net/wireless/Makefile
---- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2007-12-21 12:19:55.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2007-12-21 12:28:05.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/Makefile.orig	2008-01-08 21:00:40.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Makefile	2008-01-08 21:03:07.000000000 -0500
 @@ -49,7 +49,10 @@ obj-$(CONFIG_PCMCIA_WL3501)	+= wl3501_cs
  obj-$(CONFIG_USB_ZD1201)	+= zd1201.o
  obj-$(CONFIG_LIBERTAS)		+= libertas/
@@ -490,9 +559,9 @@
  
  obj-$(CONFIG_ADM8211)	+= adm8211.o
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.h	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,30 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.h	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,28 @@
 +#ifndef RTL8180_MAX2820_H
 +#define RTL8180_MAX2820_H
 +
@@ -518,15 +587,13 @@
 +
 +#define MAXIM_ANTENNA 0xb3
 +
-+void max2820_rf_init(struct ieee80211_hw *);
-+void max2820_rf_stop(struct ieee80211_hw *);
-+void max2820_rf_set_channel(struct ieee80211_hw *, struct ieee80211_conf *);
++extern const struct rtl818x_rf_ops max2820_rf_ops;
 +
 +#endif /* RTL8180_MAX2820_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.h	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,38 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_sa2400.h	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,36 @@
 +#ifndef RTL8180_SA2400_H
 +#define RTL8180_SA2400_H
 +
@@ -560,15 +627,13 @@
 +
 +#define SA2400_REG4_FIRDAC_SHIFT 7
 +
-+void sa2400_rf_init(struct ieee80211_hw *);
-+void sa2400_rf_stop(struct ieee80211_hw *);
-+void sa2400_rf_set_channel(struct ieee80211_hw *, struct ieee80211_conf *);
++extern const struct rtl818x_rf_ops sa2400_rf_ops;
 +
 +#endif /* RTL8180_SA2400_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.c	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,763 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.c	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,779 @@
 +
 +/*
 + * Radio tuning for RTL8225 on RTL8180
@@ -594,7 +659,7 @@
 +#include "rtl8180.h"
 +#include "rtl8180_rtl8225.h"
 +
-+static void rtl8180_rtl8225_write(struct ieee80211_hw *dev, u8 addr, u16 data)
++static void rtl8225_write(struct ieee80211_hw *dev, u8 addr, u16 data)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u16 reg80, reg84, reg82;
@@ -642,7 +707,7 @@
 +	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
 +}
 +
-+static u16 rtl8180_rtl8225_read(struct ieee80211_hw *dev, u8 addr)
++static u16 rtl8225_read(struct ieee80211_hw *dev, u8 addr)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u16 reg80, reg82, reg84, out;
@@ -745,7 +810,7 @@
 +	return out;
 +}
 +
-+static const u16 rtl8180_rtl8225bcd_rxgain[] = {
++static const u16 rtl8225bcd_rxgain[] = {
 +	0x0400, 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0408, 0x0409,
 +	0x040a, 0x040b, 0x0502, 0x0503, 0x0504, 0x0505, 0x0540, 0x0541,
 +	0x0542, 0x0543, 0x0544, 0x0545, 0x0580, 0x0581, 0x0582, 0x0583,
@@ -760,7 +825,7 @@
 +	0x07b4, 0x07b5, 0x07b8, 0x07b9, 0x07ba, 0x07bb, 0x07bb
 +};
 +
-+static const u8 rtl8180_rtl8225_agc[] = {
++static const u8 rtl8225_agc[] = {
 +	0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e, 0x9e,
 +	0x9d, 0x9c, 0x9b, 0x9a, 0x99, 0x98, 0x97, 0x96,
 +	0x95, 0x94, 0x93, 0x92, 0x91, 0x90, 0x8f, 0x8e,
@@ -779,7 +844,7 @@
 +	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01
 +};
 +
-+static const u8 rtl8180_rtl8225_gain[] = {
++static const u8 rtl8225_gain[] = {
 +	0x23, 0x88, 0x7c, 0xa5, /* -82dbm */
 +	0x23, 0x88, 0x7c, 0xb5, /* -82dbm */
 +	0x23, 0x88, 0x7c, 0xc5, /* -82dbm */
@@ -789,15 +854,15 @@
 +	0x63, 0x58, 0x70, 0xc5, /* -66dbm */
 +};
 +
-+static const u8 rtl8180_rtl8225_threshold[] = {
++static const u8 rtl8225_threshold[] = {
 +	0x8d, 0x8d, 0x8d, 0x8d, 0x9d, 0xad, 0xbd
 +};
 +
-+static const u8 rtl8180_rtl8225_tx_gain_cck_ofdm[] = {
++static const u8 rtl8225_tx_gain_cck_ofdm[] = {
 +	0x02, 0x06, 0x0e, 0x1e, 0x3e, 0x7e
 +};
 +
-+static const u8 rtl8180_rtl8225_tx_power_cck[] = {
++static const u8 rtl8225_tx_power_cck[] = {
 +	0x18, 0x17, 0x15, 0x11, 0x0c, 0x08, 0x04, 0x02,
 +	0x1b, 0x1a, 0x17, 0x13, 0x0e, 0x09, 0x04, 0x02,
 +	0x1f, 0x1e, 0x1a, 0x15, 0x10, 0x0a, 0x05, 0x02,
@@ -806,7 +871,7 @@
 +	0x2b, 0x2a, 0x25, 0x1e, 0x16, 0x0e, 0x07, 0x03
 +};
 +
-+static const u8 rtl8180_rtl8225_tx_power_cck_ch14[] = {
++static const u8 rtl8225_tx_power_cck_ch14[] = {
 +	0x18, 0x17, 0x15, 0x0c, 0x00, 0x00, 0x00, 0x00,
 +	0x1b, 0x1a, 0x17, 0x0e, 0x00, 0x00, 0x00, 0x00,
 +	0x1f, 0x1e, 0x1a, 0x0f, 0x00, 0x00, 0x00, 0x00,
@@ -815,16 +880,16 @@
 +	0x2b, 0x2a, 0x25, 0x15, 0x00, 0x00, 0x00, 0x00
 +};
 +
-+static const u8 rtl8180_rtl8225_tx_power_ofdm[] = {
++static const u8 rtl8225_tx_power_ofdm[] = {
 +	0x80, 0x90, 0xa2, 0xb5, 0xcb, 0xe4
 +};
 +
-+static const u32 rtl8180_rtl8225_chan[] = {
++static const u32 rtl8225_chan[] = {
 +	0x085c, 0x08dc, 0x095c, 0x09dc, 0x0a5c, 0x0adc, 0x0b5c,
 +	0x0bdc, 0x0c5c, 0x0cdc, 0x0d5c, 0x0ddc, 0x0e5c, 0x0f72
 +};
 +
-+static void rtl8180_rtl8225_rf_set_tx_power(struct ieee80211_hw *dev, int channel)
++static void rtl8225_rf_set_tx_power(struct ieee80211_hw *dev, int channel)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u8 cck_power, ofdm_power;
@@ -839,15 +904,15 @@
 +	ofdm_power = min(ofdm_power, (u8)35);
 +
 +	rtl818x_iowrite8(priv, &priv->map->TX_GAIN_CCK,
-+			 rtl8180_rtl8225_tx_gain_cck_ofdm[cck_power / 6] >> 1);
++			 rtl8225_tx_gain_cck_ofdm[cck_power / 6] >> 1);
 +
 +	if (channel == 14)
-+		tmp = &rtl8180_rtl8225_tx_power_cck_ch14[(cck_power % 6) * 8];
++		tmp = &rtl8225_tx_power_cck_ch14[(cck_power % 6) * 8];
 +	else
-+		tmp = &rtl8180_rtl8225_tx_power_cck[(cck_power % 6) * 8];
++		tmp = &rtl8225_tx_power_cck[(cck_power % 6) * 8];
 +
 +	for (i = 0; i < 8; i++)
-+		rtl8180_rtl8225_write_phy_cck(dev, 0x44 + i, *tmp++);
++		rtl8225_write_phy_cck(dev, 0x44 + i, *tmp++);
 +
 +	msleep(1); /* FIXME: optional? */
 +
@@ -860,38 +925,17 @@
 +	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
 +
 +	rtl818x_iowrite8(priv, &priv->map->TX_GAIN_OFDM,
-+			 rtl8180_rtl8225_tx_gain_cck_ofdm[ofdm_power/6] >> 1);
++			 rtl8225_tx_gain_cck_ofdm[ofdm_power/6] >> 1);
 +
-+	tmp = &rtl8180_rtl8225_tx_power_ofdm[ofdm_power % 6];
++	tmp = &rtl8225_tx_power_ofdm[ofdm_power % 6];
 +
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 5, *tmp);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 7, *tmp);
++	rtl8225_write_phy_ofdm(dev, 5, *tmp);
++	rtl8225_write_phy_ofdm(dev, 7, *tmp);
 +
 +	msleep(1);
 +}
 +
-+int rtl8180_rtl8225_is_z2(struct ieee80211_hw *dev)
-+{
-+	struct rtl8180_priv *priv = dev->priv;
-+	int z2 = 0;
-+
-+	rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, 0x0480);
-+	rtl818x_iowrite16(priv, &priv->map->RFPinsSelect, 0x0488);
-+	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
-+	rtl818x_ioread8(priv, &priv->map->EEPROM_CMD);
-+	msleep(100);
-+
-+	rtl8180_rtl8225_write(dev, 0, 0x1B7);
-+
-+	if (rtl8180_rtl8225_read(dev, 8) == 0x588 && rtl8180_rtl8225_read(dev, 9) == 0x700)
-+		z2 = 1;
-+
-+	rtl8180_rtl8225_write(dev, 0, 0x0B7);
-+
-+	return z2;
-+}
-+
-+void rtl8180_rtl8225_rf_init(struct ieee80211_hw *dev)
++static void rtl8225_rf_init(struct ieee80211_hw *dev)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	int i;
@@ -917,151 +961,151 @@
 +	rtl818x_iowrite8(priv, &priv->map->CONFIG3, 0x44);
 +	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
 +
-+	rtl8180_rtl8225_write(dev, 0x0, 0x067);
-+	rtl8180_rtl8225_write(dev, 0x1, 0xFE0);
-+	rtl8180_rtl8225_write(dev, 0x2, 0x44D);
-+	rtl8180_rtl8225_write(dev, 0x3, 0x441);
-+	rtl8180_rtl8225_write(dev, 0x4, 0x8BE);
-+	rtl8180_rtl8225_write(dev, 0x5, 0xBF0);		/* TODO: minipci */
-+	rtl8180_rtl8225_write(dev, 0x6, 0xAE6);
-+	rtl8180_rtl8225_write(dev, 0x7, rtl8180_rtl8225_chan[0]);
-+	rtl8180_rtl8225_write(dev, 0x8, 0x01F);
-+	rtl8180_rtl8225_write(dev, 0x9, 0x334);
-+	rtl8180_rtl8225_write(dev, 0xA, 0xFD4);
-+	rtl8180_rtl8225_write(dev, 0xB, 0x391);
-+	rtl8180_rtl8225_write(dev, 0xC, 0x050);
-+	rtl8180_rtl8225_write(dev, 0xD, 0x6DB);
-+	rtl8180_rtl8225_write(dev, 0xE, 0x029);
-+	rtl8180_rtl8225_write(dev, 0xF, 0x914); msleep(1);
-+
-+	rtl8180_rtl8225_write(dev, 0x2, 0xC4D); msleep(100);
-+
-+	rtl8180_rtl8225_write(dev, 0x0, 0x127);
-+
-+	for (i = 0; i < ARRAY_SIZE(rtl8180_rtl8225bcd_rxgain); i++) {
-+		rtl8180_rtl8225_write(dev, 0x1, i + 1);
-+		rtl8180_rtl8225_write(dev, 0x2, rtl8180_rtl8225bcd_rxgain[i]);
++	rtl8225_write(dev, 0x0, 0x067);
++	rtl8225_write(dev, 0x1, 0xFE0);
++	rtl8225_write(dev, 0x2, 0x44D);
++	rtl8225_write(dev, 0x3, 0x441);
++	rtl8225_write(dev, 0x4, 0x8BE);
++	rtl8225_write(dev, 0x5, 0xBF0);		/* TODO: minipci */
++	rtl8225_write(dev, 0x6, 0xAE6);
++	rtl8225_write(dev, 0x7, rtl8225_chan[0]);
++	rtl8225_write(dev, 0x8, 0x01F);
++	rtl8225_write(dev, 0x9, 0x334);
++	rtl8225_write(dev, 0xA, 0xFD4);
++	rtl8225_write(dev, 0xB, 0x391);
++	rtl8225_write(dev, 0xC, 0x050);
++	rtl8225_write(dev, 0xD, 0x6DB);
++	rtl8225_write(dev, 0xE, 0x029);
++	rtl8225_write(dev, 0xF, 0x914); msleep(1);
++
++	rtl8225_write(dev, 0x2, 0xC4D); msleep(100);
++
++	rtl8225_write(dev, 0x0, 0x127);
++
++	for (i = 0; i < ARRAY_SIZE(rtl8225bcd_rxgain); i++) {
++		rtl8225_write(dev, 0x1, i + 1);
++		rtl8225_write(dev, 0x2, rtl8225bcd_rxgain[i]);
 +	}
 +
-+	rtl8180_rtl8225_write(dev, 0x0, 0x027);
-+	rtl8180_rtl8225_write(dev, 0x0, 0x22F);
++	rtl8225_write(dev, 0x0, 0x027);
++	rtl8225_write(dev, 0x0, 0x22F);
 +	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
 +
-+	for (i = 0; i < ARRAY_SIZE(rtl8180_rtl8225_agc); i++) {
-+		rtl8180_rtl8225_write_phy_ofdm(dev, 0xB, rtl8180_rtl8225_agc[i]);
++	for (i = 0; i < ARRAY_SIZE(rtl8225_agc); i++) {
++		rtl8225_write_phy_ofdm(dev, 0xB, rtl8225_agc[i]);
 +		msleep(1);
-+		rtl8180_rtl8225_write_phy_ofdm(dev, 0xA, 0x80 + i);
++		rtl8225_write_phy_ofdm(dev, 0xA, 0x80 + i);
 +		msleep(1);
 +	}
 +
 +	msleep(1);
 +
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x00, 0x01); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x01, 0x02); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x02, 0x62); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x03, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x04, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x05, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x06, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x07, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x08, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x09, 0xfe); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0a, 0x09); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0b, 0x80); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0c, 0x01); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0e, 0xd3); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0f, 0x38); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x10, 0x84); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x11, 0x03); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x12, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x13, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x14, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x15, 0x40); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x16, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x17, 0x40); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x18, 0xef); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x19, 0x19); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1a, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1b, 0x76); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1c, 0x04); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1e, 0x95); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1f, 0x75); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x20, 0x1f); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x21, 0x27); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x22, 0x16); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x24, 0x46); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x25, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x27, 0x88); msleep(1);
-+
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x00, 0x98); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x03, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x04, 0x7e); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x05, 0x12); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x06, 0xfc); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x07, 0x78); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x08, 0x2e); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x10, 0x93); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x11, 0x88); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x12, 0x47); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x13, 0xd0);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x19, 0x00);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x1a, 0xa0);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x1b, 0x08);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x40, 0x86);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x41, 0x8d); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x42, 0x15); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x43, 0x18); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x44, 0x1f); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x45, 0x1e); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x46, 0x1a); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x47, 0x15); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x48, 0x10); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x49, 0x0a); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x4a, 0x05); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x4b, 0x02); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x4c, 0x05); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x00, 0x01); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x01, 0x02); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x02, 0x62); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x03, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x04, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x05, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x06, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x07, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x08, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x09, 0xfe); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0a, 0x09); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0b, 0x80); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0c, 0x01); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0e, 0xd3); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0f, 0x38); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x10, 0x84); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x11, 0x03); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x12, 0x20); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x13, 0x20); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x14, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x15, 0x40); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x16, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x17, 0x40); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x18, 0xef); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x19, 0x19); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1a, 0x20); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1b, 0x76); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1c, 0x04); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1e, 0x95); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1f, 0x75); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x20, 0x1f); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x21, 0x27); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x22, 0x16); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x24, 0x46); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x25, 0x20); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x27, 0x88); msleep(1);
++
++	rtl8225_write_phy_cck(dev, 0x00, 0x98); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x03, 0x20); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x04, 0x7e); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x05, 0x12); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x06, 0xfc); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x07, 0x78); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x08, 0x2e); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x10, 0x93); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x11, 0x88); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x12, 0x47); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x13, 0xd0);
++	rtl8225_write_phy_cck(dev, 0x19, 0x00);
++	rtl8225_write_phy_cck(dev, 0x1a, 0xa0);
++	rtl8225_write_phy_cck(dev, 0x1b, 0x08);
++	rtl8225_write_phy_cck(dev, 0x40, 0x86);
++	rtl8225_write_phy_cck(dev, 0x41, 0x8d); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x42, 0x15); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x43, 0x18); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x44, 0x1f); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x45, 0x1e); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x46, 0x1a); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x47, 0x15); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x48, 0x10); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x49, 0x0a); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x4a, 0x05); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x4b, 0x02); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x4c, 0x05); msleep(1);
 +
 +	rtl818x_iowrite8(priv, &priv->map->TESTR, 0x0D); msleep(1);
 +
-+	rtl8180_rtl8225_rf_set_tx_power(dev, 1);
++	rtl8225_rf_set_tx_power(dev, 1);
 +
 +	/* RX antenna default to A */
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x10, 0x9b); msleep(1);	/* B: 0xDB */
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);	/* B: 0x10 */
++	rtl8225_write_phy_cck(dev, 0x10, 0x9b); msleep(1);	/* B: 0xDB */
++	rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);	/* B: 0x10 */
 +
 +	rtl818x_iowrite8(priv, &priv->map->TX_ANTENNA, 0x03);	/* B: 0x00 */
 +	msleep(1);
 +	rtl818x_iowrite32(priv, (__le32 __iomem *)((void __iomem *)priv->map + 0x94), 0x15c00002);
 +	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
 +
-+	rtl8180_rtl8225_write(dev, 0x0c, 0x50);
++	rtl8225_write(dev, 0x0c, 0x50);
 +	/* set OFDM initial gain */
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0d, rtl8180_rtl8225_gain[4 * 4]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x23, rtl8180_rtl8225_gain[4 * 4 + 1]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1b, rtl8180_rtl8225_gain[4 * 4 + 2]);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1d, rtl8180_rtl8225_gain[4 * 4 + 3]);
++	rtl8225_write_phy_ofdm(dev, 0x0d, rtl8225_gain[4 * 4]);
++	rtl8225_write_phy_ofdm(dev, 0x23, rtl8225_gain[4 * 4 + 1]);
++	rtl8225_write_phy_ofdm(dev, 0x1b, rtl8225_gain[4 * 4 + 2]);
++	rtl8225_write_phy_ofdm(dev, 0x1d, rtl8225_gain[4 * 4 + 3]);
 +	/* set CCK threshold */
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x41, rtl8180_rtl8225_threshold[0]);
++	rtl8225_write_phy_cck(dev, 0x41, rtl8225_threshold[0]);
 +}
 +
-+static const u8 rtl8180_rtl8225z2_tx_power_cck_ch14[] = {
++static const u8 rtl8225z2_tx_power_cck_ch14[] = {
 +	0x36, 0x35, 0x2e, 0x1b, 0x00, 0x00, 0x00, 0x00
 +};
 +
-+static const u8 rtl8180_rtl8225z2_tx_power_cck_B[] = {
++static const u8 rtl8225z2_tx_power_cck_B[] = {
 +	0x30, 0x2f, 0x29, 0x21, 0x19, 0x10, 0x08, 0x04
 +};
 +
-+static const u8 rtl8180_rtl8225z2_tx_power_cck_A[] = {
++static const u8 rtl8225z2_tx_power_cck_A[] = {
 +	0x33, 0x32, 0x2b, 0x23, 0x1a, 0x11, 0x08, 0x04
 +};
 +
-+static const u8 rtl8180_rtl8225z2_tx_power_cck[] = {
++static const u8 rtl8225z2_tx_power_cck[] = {
 +	0x36, 0x35, 0x2e, 0x25, 0x1c, 0x12, 0x09, 0x04
 +};
 +
-+static void rtl8180_rtl8225z2_rf_set_tx_power(struct ieee80211_hw *dev, int channel)
++static void rtl8225z2_rf_set_tx_power(struct ieee80211_hw *dev, int channel)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u8 cck_power, ofdm_power;
@@ -1072,16 +1116,16 @@
 +	ofdm_power = priv->channels[channel - 1].val >> 8;
 +
 +	if (channel == 14)
-+		tmp = rtl8180_rtl8225z2_tx_power_cck_ch14;
++		tmp = rtl8225z2_tx_power_cck_ch14;
 +	else if (cck_power == 12)
-+		tmp = rtl8180_rtl8225z2_tx_power_cck_B;
++		tmp = rtl8225z2_tx_power_cck_B;
 +	else if (cck_power == 13)
-+		tmp = rtl8180_rtl8225z2_tx_power_cck_A;
++		tmp = rtl8225z2_tx_power_cck_A;
 +	else
-+		tmp = rtl8180_rtl8225z2_tx_power_cck;
++		tmp = rtl8225z2_tx_power_cck;
 +
 +	for (i = 0; i < 8; i++)
-+		rtl8180_rtl8225_write_phy_cck(dev, 0x44 + i, *tmp++);
++		rtl8225_write_phy_cck(dev, 0x44 + i, *tmp++);
 +
 +	cck_power = min(cck_power, (u8)35);
 +	if (cck_power == 13 || cck_power == 14)
@@ -1096,16 +1140,16 @@
 +	ofdm_power = min(ofdm_power, (u8)35);
 +	rtl818x_iowrite8(priv, &priv->map->TX_GAIN_OFDM, ofdm_power);
 +
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 2, 0x42);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 5, 0x00);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 6, 0x40);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 7, 0x00);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 8, 0x40);
++	rtl8225_write_phy_ofdm(dev, 2, 0x62);
++	rtl8225_write_phy_ofdm(dev, 5, 0x00);
++	rtl8225_write_phy_ofdm(dev, 6, 0x40);
++	rtl8225_write_phy_ofdm(dev, 7, 0x00);
++	rtl8225_write_phy_ofdm(dev, 8, 0x40);
 +
 +	msleep(1);
 +}
 +
-+static const u16 rtl8180_rtl8225z2_rxgain[] = {
++static const u16 rtl8225z2_rxgain[] = {
 +	0x0000, 0x0001, 0x0002, 0x0003, 0x0004, 0x0005, 0x0008, 0x0009,
 +	0x000a, 0x000b, 0x0102, 0x0103, 0x0104, 0x0105, 0x0140, 0x0141,
 +	0x0142, 0x0143, 0x0144, 0x0145, 0x0180, 0x0181, 0x0182, 0x0183,
@@ -1120,7 +1164,7 @@
 +	0x03b4, 0x03b5, 0x03b8, 0x03b9, 0x03ba, 0x03bb, 0x03bb
 +};
 +
-+void rtl8180_rtl8225z2_rf_init(struct ieee80211_hw *dev)
++static void rtl8225z2_rf_init(struct ieee80211_hw *dev)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	int i;
@@ -1148,140 +1192,139 @@
 +
 +	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
 +
-+	rtl8180_rtl8225_write(dev, 0x0, 0x0B7); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x1, 0xEE0); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x2, 0x44D); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x3, 0x441); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x4, 0x8C3); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x5, 0xC72); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x6, 0x0E6); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x7, 0x82A); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x8, 0x03F); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0x9, 0x335); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0xa, 0x9D4); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0xb, 0x7BB); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0xc, 0x850); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0xd, 0xCDF); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0xe, 0x02B); msleep(1);
-+	rtl8180_rtl8225_write(dev, 0xf, 0x114); msleep(100);
++	rtl8225_write(dev, 0x0, 0x0B7); msleep(1);
++	rtl8225_write(dev, 0x1, 0xEE0); msleep(1);
++	rtl8225_write(dev, 0x2, 0x44D); msleep(1);
++	rtl8225_write(dev, 0x3, 0x441); msleep(1);
++	rtl8225_write(dev, 0x4, 0x8C3); msleep(1);
++	rtl8225_write(dev, 0x5, 0xC72); msleep(1);
++	rtl8225_write(dev, 0x6, 0x0E6); msleep(1);
++	rtl8225_write(dev, 0x7, 0x82A); msleep(1);
++	rtl8225_write(dev, 0x8, 0x03F); msleep(1);
++	rtl8225_write(dev, 0x9, 0x335); msleep(1);
++	rtl8225_write(dev, 0xa, 0x9D4); msleep(1);
++	rtl8225_write(dev, 0xb, 0x7BB); msleep(1);
++	rtl8225_write(dev, 0xc, 0x850); msleep(1);
++	rtl8225_write(dev, 0xd, 0xCDF); msleep(1);
++	rtl8225_write(dev, 0xe, 0x02B); msleep(1);
++	rtl8225_write(dev, 0xf, 0x114); msleep(100);
 +
-+	if (!(rtl8180_rtl8225_read(dev, 6) & (1 << 7))) {
-+		rtl8180_rtl8225_write(dev, 0x02, 0x0C4D);
++	if (!(rtl8225_read(dev, 6) & (1 << 7))) {
++		rtl8225_write(dev, 0x02, 0x0C4D);
 +		msleep(200);
-+		rtl8180_rtl8225_write(dev, 0x02, 0x044D);
++		rtl8225_write(dev, 0x02, 0x044D);
 +		msleep(100);
-+		if (!(rtl8180_rtl8225_read(dev, 6) & (1 << 7)))
-+			printk(KERN_WARNING "%s: RF Calibration Failed! %x\n",
-+			       wiphy_name(dev->wiphy), rtl8180_rtl8225_read(dev, 6));
++		/* TODO: readd calibration failure message when the calibration
++		   check works */
 +	}
 +
-+	rtl8180_rtl8225_write(dev, 0x0, 0x1B7);
-+	rtl8180_rtl8225_write(dev, 0x3, 0x002);
-+	rtl8180_rtl8225_write(dev, 0x5, 0x004);
++	rtl8225_write(dev, 0x0, 0x1B7);
++	rtl8225_write(dev, 0x3, 0x002);
++	rtl8225_write(dev, 0x5, 0x004);
 +
-+	for (i = 0; i < ARRAY_SIZE(rtl8180_rtl8225z2_rxgain); i++) {
-+		rtl8180_rtl8225_write(dev, 0x1, i + 1);
-+		rtl8180_rtl8225_write(dev, 0x2, rtl8180_rtl8225z2_rxgain[i]);
++	for (i = 0; i < ARRAY_SIZE(rtl8225z2_rxgain); i++) {
++		rtl8225_write(dev, 0x1, i + 1);
++		rtl8225_write(dev, 0x2, rtl8225z2_rxgain[i]);
 +	}
 +
-+	rtl8180_rtl8225_write(dev, 0x0, 0x0B7); msleep(100);
-+	rtl8180_rtl8225_write(dev, 0x2, 0xC4D);
++	rtl8225_write(dev, 0x0, 0x0B7); msleep(100);
++	rtl8225_write(dev, 0x2, 0xC4D);
 +
 +	msleep(200);
-+	rtl8180_rtl8225_write(dev, 0x2, 0x44D);
++	rtl8225_write(dev, 0x2, 0x44D);
 +	msleep(100);
 +
-+	rtl8180_rtl8225_write(dev, 0x00, 0x2BF);
-+	rtl8180_rtl8225_write(dev, 0xFF, 0xFFFF);
++	rtl8225_write(dev, 0x00, 0x2BF);
++	rtl8225_write(dev, 0xFF, 0xFFFF);
 +
 +	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
 +
-+	for (i = 0; i < ARRAY_SIZE(rtl8180_rtl8225_agc); i++) {
-+		rtl8180_rtl8225_write_phy_ofdm(dev, 0xB, rtl8180_rtl8225_agc[i]);
++	for (i = 0; i < ARRAY_SIZE(rtl8225_agc); i++) {
++		rtl8225_write_phy_ofdm(dev, 0xB, rtl8225_agc[i]);
 +		msleep(1);
-+		rtl8180_rtl8225_write_phy_ofdm(dev, 0xA, 0x80 + i);
++		rtl8225_write_phy_ofdm(dev, 0xA, 0x80 + i);
 +		msleep(1);
 +	}
 +
 +	msleep(1);
 +
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x00, 0x01); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x01, 0x02); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x02, 0x62); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x03, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x04, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x05, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x06, 0x40); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x07, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x08, 0x40); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x09, 0xfe); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0a, 0x09); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x18, 0xef); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0b, 0x80); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0c, 0x01); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0d, 0x43);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0e, 0xd3); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x0f, 0x38); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x10, 0x84); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x11, 0x06); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x12, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x13, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x14, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x15, 0x40); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x16, 0x00); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x17, 0x40); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x18, 0xef); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x19, 0x19); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1a, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1b, 0x11); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1c, 0x04); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1d, 0xc5); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1e, 0xb3); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x1f, 0x75); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x20, 0x1f); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x21, 0x27); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x22, 0x16); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x23, 0x80); msleep(1); /* FIXME: not needed? */
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x24, 0x46); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x25, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x27, 0x88); msleep(1);
-+
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x00, 0x98); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x03, 0x20); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x04, 0x7e); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x05, 0x12); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x06, 0xfc); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x07, 0x78); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x08, 0x2e); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x10, 0x93); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x11, 0x88); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x12, 0x47); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x13, 0xd0);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x19, 0x00);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x1a, 0xa0);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x1b, 0x08);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x40, 0x86);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x41, 0x8a); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x42, 0x15); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x43, 0x18); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x44, 0x36); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x45, 0x35); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x46, 0x2e); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x47, 0x25); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x48, 0x1c); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x49, 0x12); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x4a, 0x09); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x4b, 0x04); msleep(1);
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x4c, 0x05); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x00, 0x01); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x01, 0x02); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x02, 0x62); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x03, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x04, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x05, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x06, 0x40); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x07, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x08, 0x40); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x09, 0xfe); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0a, 0x09); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x18, 0xef); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0b, 0x80); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0c, 0x01); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0d, 0x43);
++	rtl8225_write_phy_ofdm(dev, 0x0e, 0xd3); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x0f, 0x38); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x10, 0x84); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x11, 0x06); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x12, 0x20); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x13, 0x20); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x14, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x15, 0x40); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x16, 0x00); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x17, 0x40); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x18, 0xef); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x19, 0x19); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1a, 0x20); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1b, 0x11); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1c, 0x04); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1d, 0xc5); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1e, 0xb3); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x1f, 0x75); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x20, 0x1f); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x21, 0x27); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x22, 0x16); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x23, 0x80); msleep(1); /* FIXME: not needed? */
++	rtl8225_write_phy_ofdm(dev, 0x24, 0x46); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x25, 0x20); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);
++	rtl8225_write_phy_ofdm(dev, 0x27, 0x88); msleep(1);
++
++	rtl8225_write_phy_cck(dev, 0x00, 0x98); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x03, 0x20); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x04, 0x7e); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x05, 0x12); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x06, 0xfc); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x07, 0x78); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x08, 0x2e); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x10, 0x93); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x11, 0x88); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x12, 0x47); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x13, 0xd0);
++	rtl8225_write_phy_cck(dev, 0x19, 0x00);
++	rtl8225_write_phy_cck(dev, 0x1a, 0xa0);
++	rtl8225_write_phy_cck(dev, 0x1b, 0x08);
++	rtl8225_write_phy_cck(dev, 0x40, 0x86);
++	rtl8225_write_phy_cck(dev, 0x41, 0x8a); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x42, 0x15); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x43, 0x18); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x44, 0x36); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x45, 0x35); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x46, 0x2e); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x47, 0x25); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x48, 0x1c); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x49, 0x12); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x4a, 0x09); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x4b, 0x04); msleep(1);
++	rtl8225_write_phy_cck(dev, 0x4c, 0x05); msleep(1);
 +
 +	rtl818x_iowrite8(priv, (u8 __iomem *)((void __iomem *)priv->map + 0x5B), 0x0D); msleep(1);
 +
-+	rtl8180_rtl8225z2_rf_set_tx_power(dev, 1);
++	rtl8225z2_rf_set_tx_power(dev, 1);
 +
 +	/* RX antenna default to A */
-+	rtl8180_rtl8225_write_phy_cck(dev, 0x10, 0x9b); msleep(1);	/* B: 0xDB */
-+	rtl8180_rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);	/* B: 0x10 */
++	rtl8225_write_phy_cck(dev, 0x10, 0x9b); msleep(1);	/* B: 0xDB */
++	rtl8225_write_phy_ofdm(dev, 0x26, 0x90); msleep(1);	/* B: 0x10 */
 +
 +	rtl818x_iowrite8(priv, &priv->map->TX_ANTENNA, 0x03);	/* B: 0x00 */
 +	msleep(1);
@@ -1289,12 +1332,12 @@
 +	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
 +}
 +
-+void rtl8180_rtl8225_rf_stop(struct ieee80211_hw *dev)
++static void rtl8225_rf_stop(struct ieee80211_hw *dev)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u8 reg;
 +
-+	rtl8180_rtl8225_write(dev, 0x4, 0x1f); msleep(1);
++	rtl8225_write(dev, 0x4, 0x1f); msleep(1);
 +
 +	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
 +	reg = rtl818x_ioread8(priv, &priv->map->CONFIG3);
@@ -1305,17 +1348,17 @@
 +	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
 +}
 +
-+void rtl8180_rtl8225_rf_set_channel(struct ieee80211_hw *dev,
-+			    struct ieee80211_conf *conf)
++static void rtl8225_rf_set_channel(struct ieee80211_hw *dev,
++				   struct ieee80211_conf *conf)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +
-+	if (priv->rf_init == rtl8180_rtl8225_rf_init)
-+		rtl8180_rtl8225_rf_set_tx_power(dev, conf->channel);
++	if (priv->rf->init == rtl8225_rf_init)
++		rtl8225_rf_set_tx_power(dev, conf->channel);
 +	else
-+		rtl8180_rtl8225z2_rf_set_tx_power(dev, conf->channel);
++		rtl8225z2_rf_set_tx_power(dev, conf->channel);
 +
-+	rtl8180_rtl8225_write(dev, 0x7, rtl8180_rtl8225_chan[conf->channel - 1]);
++	rtl8225_write(dev, 0x7, rtl8225_chan[conf->channel - 1]);
 +	msleep(10);
 +
 +	if (conf->flags & IEEE80211_CONF_SHORT_SLOT_TIME) {
@@ -1332,11 +1375,53 @@
 +		rtl818x_iowrite8(priv, &priv->map->CW_VAL, 0xa5);
 +	}
 +}
++
++static const struct rtl818x_rf_ops rtl8225_ops = {
++	.name		= "rtl8225",
++	.init		= rtl8225_rf_init,
++	.stop		= rtl8225_rf_stop,
++	.set_chan	= rtl8225_rf_set_channel
++};
++
++static const struct rtl818x_rf_ops rtl8225z2_ops = {
++	.name		= "rtl8225z2",
++	.init		= rtl8225z2_rf_init,
++	.stop		= rtl8225_rf_stop,
++	.set_chan	= rtl8225_rf_set_channel
++};
++
++const struct rtl818x_rf_ops * rtl8180_detect_rf(struct ieee80211_hw *dev)
++{
++	struct rtl8180_priv *priv = dev->priv;
++	u16 reg8, reg9;
++
++	rtl818x_iowrite16(priv, &priv->map->RFPinsOutput, 0x0480);
++	rtl818x_iowrite16(priv, &priv->map->RFPinsSelect, 0x0488);
++	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FFF);
++	rtl818x_ioread8(priv, &priv->map->EEPROM_CMD);
++	msleep(100);
++
++	rtl8225_write(dev, 0, 0x1B7);
++
++	reg8 = rtl8225_read(dev, 8);
++	reg9 = rtl8225_read(dev, 9);
++
++	rtl8225_write(dev, 0, 0x0B7);
++
++	if (reg8 != 0x588 || reg9 != 0x700)
++		return &rtl8225_ops;
++
++	return &rtl8225z2_ops;
++}
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c
---- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2007-12-21 12:19:55.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-12-21 12:28:05.000000000 -0500
-@@ -395,12 +395,12 @@ static int rtl8187_init_hw(struct ieee80
- 	priv->rf_init(dev);
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2008-01-08 20:02:56.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2008-01-08 21:03:07.000000000 -0500
+@@ -392,37 +392,19 @@ static int rtl8187_init_hw(struct ieee80
+ 	rtl818x_iowrite16(priv, &priv->map->RFPinsEnable, 0x1FF7);
+ 	msleep(100);
+ 
+-	priv->rf_init(dev);
++	priv->rf->init(dev);
  
  	rtl818x_iowrite16(priv, &priv->map->BRSR, 0x01F3);
 -	reg = rtl818x_ioread16(priv, &priv->map->PGSELECT) & 0xfffe;
@@ -1351,7 +1436,59 @@
  
  	return 0;
  }
-@@ -752,13 +752,13 @@ static int __devinit rtl8187_probe(struc
+ 
+-static void rtl8187_set_channel(struct ieee80211_hw *dev, int channel)
+-{
+-	u32 reg;
+-	struct rtl8187_priv *priv = dev->priv;
+-
+-	reg = rtl818x_ioread32(priv, &priv->map->TX_CONF);
+-	/* Enable TX loopback on MAC level to avoid TX during channel
+-	 * changes, as this has be seen to causes problems and the
+-	 * card will stop work until next reset
+-	 */
+-	rtl818x_iowrite32(priv, &priv->map->TX_CONF,
+-			  reg | RTL818X_TX_CONF_LOOPBACK_MAC);
+-	msleep(10);
+-	rtl8225_rf_set_channel(dev, channel);
+-	msleep(10);
+-	rtl818x_iowrite32(priv, &priv->map->TX_CONF, reg);
+-}
+-
+ static int rtl8187_start(struct ieee80211_hw *dev)
+ {
+ 	struct rtl8187_priv *priv = dev->priv;
+@@ -491,7 +473,7 @@ static void rtl8187_stop(struct ieee8021
+ 	reg &= ~RTL818X_CMD_RX_ENABLE;
+ 	rtl818x_iowrite8(priv, &priv->map->CMD, reg);
+ 
+-	rtl8225_rf_stop(dev);
++	priv->rf->stop(dev);
+ 
+ 	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
+ 	reg = rtl818x_ioread8(priv, &priv->map->CONFIG4);
+@@ -542,7 +524,19 @@ static void rtl8187_remove_interface(str
+ static int rtl8187_config(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
+ {
+ 	struct rtl8187_priv *priv = dev->priv;
+-	rtl8187_set_channel(dev, conf->channel);
++	u32 reg;
++
++	reg = rtl818x_ioread32(priv, &priv->map->TX_CONF);
++	/* Enable TX loopback on MAC level to avoid TX during channel
++	 * changes, as this has be seen to causes problems and the
++	 * card will stop work until next reset
++	 */
++	rtl818x_iowrite32(priv, &priv->map->TX_CONF,
++			  reg | RTL818X_TX_CONF_LOOPBACK_MAC);
++	msleep(10);
++	priv->rf->set_chan(dev, conf);
++	msleep(10);
++	rtl818x_iowrite32(priv, &priv->map->TX_CONF, reg);
+ 
+ 	rtl818x_iowrite8(priv, &priv->map->SIFS, 0x22);
+ 
+@@ -752,23 +746,16 @@ static int __devinit rtl8187_probe(struc
  	eeprom_93cx6_read(&eeprom, RTL8187_EEPROM_TXPWR_BASE,
  			  &priv->txpwr_base);
  
@@ -1367,10 +1504,31 @@
 +	rtl818x_iowrite8(priv, &priv->map->PGSELECT, reg);
  	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
  
- 	rtl8225_write(dev, 0, 0x1B7);
+-	rtl8225_write(dev, 0, 0x1B7);
+-
+-	if (rtl8225_read(dev, 8) != 0x588 || rtl8225_read(dev, 9) != 0x700)
+-		priv->rf_init = rtl8225_rf_init;
+-	else
+-		priv->rf_init = rtl8225z2_rf_init;
+-
+-	rtl8225_write(dev, 0, 0x0B7);
++	priv->rf = rtl8187_detect_rf(dev);
+ 
+ 	err = ieee80211_register_hw(dev);
+ 	if (err) {
+@@ -778,8 +765,7 @@ static int __devinit rtl8187_probe(struc
+ 
+ 	printk(KERN_INFO "%s: hwaddr %s, rtl8187 V%d + %s\n",
+ 	       wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr),
+-	       priv->asic_rev, priv->rf_init == rtl8225_rf_init ?
+-	       "rtl8225" : "rtl8225z2");
++	       priv->asic_rev, priv->rf->name);
+ 
+ 	return 0;
+ 
 diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h.orig linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h
---- linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h.orig	2007-12-21 10:43:36.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h	2007-12-21 12:28:05.000000000 -0500
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h.orig	2008-01-08 20:02:56.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl818x.h	2008-01-08 21:03:07.000000000 -0500
 @@ -58,13 +58,17 @@ struct rtl818x_csr {
  #define RTL818X_INT_TX_FO		(1 << 15)
  	__le32	TX_CONF;
@@ -1430,7 +1588,7 @@
  	u8	PHY[4];
  	__le16	RFPinsOutput;
  	__le16	RFPinsEnable;
-@@ -149,8 +161,10 @@ struct rtl818x_csr {
+@@ -149,11 +161,20 @@ struct rtl818x_csr {
  	u8	RETRY_CTR;
  	u8	reserved_18[5];
  	__le32	RDSAR;
@@ -1443,10 +1601,20 @@
  	u8	TALLY_SEL;
  } __attribute__((packed));
  
++struct rtl818x_rf_ops {
++	char *name;
++	void (*init)(struct ieee80211_hw *);
++	void (*stop)(struct ieee80211_hw *);
++	void (*set_chan)(struct ieee80211_hw *, struct ieee80211_conf *);
++};
++
+ static const struct ieee80211_rate rtl818x_rates[] = {
+ 	{ .rate = 10,
+ 	  .val = 0,
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.c	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,172 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.c	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,179 @@
 +
 +/*
 + * Radio tuning for GCT GRF5101 on RTL8180
@@ -1518,8 +1686,8 @@
 +	rtl8180_write_phy(dev, 0x10, ant);
 +}
 +
-+void grf5101_rf_set_channel(struct ieee80211_hw *dev,
-+			    struct ieee80211_conf *conf)
++static void grf5101_rf_set_channel(struct ieee80211_hw *dev,
++				   struct ieee80211_conf *conf)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u32 txpw = priv->channels[conf->channel - 1].val & 0xFF;
@@ -1539,7 +1707,7 @@
 +	grf5101_write_phy_antenna(dev, chan);
 +}
 +
-+void grf5101_rf_stop(struct ieee80211_hw *dev)
++static void grf5101_rf_stop(struct ieee80211_hw *dev)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	u32 anaparam;
@@ -1555,7 +1723,7 @@
 +	write_grf5101(dev, 0x00, 0x8e4);
 +}
 +
-+void grf5101_rf_init(struct ieee80211_hw *dev)
++static void grf5101_rf_init(struct ieee80211_hw *dev)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +
@@ -1619,10 +1787,149 @@
 +	rtl8180_write_phy(dev, 0x1a, 0xa0);
 +	rtl8180_write_phy(dev, 0x1b, 0x44);
 +}
++
++const struct rtl818x_rf_ops grf5101_rf_ops = {
++	.name		= "GCT",
++	.init		= grf5101_rf_init,
++	.stop		= grf5101_rf_stop,
++	.set_chan	= grf5101_rf_set_channel
++};
+diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187.h.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187.h
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl8187.h.orig	2008-01-08 20:02:56.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187.h	2008-01-08 21:03:07.000000000 -0500
+@@ -64,7 +64,7 @@ struct rtl8187_tx_hdr {
+ struct rtl8187_priv {
+ 	/* common between rtl818x drivers */
+ 	struct rtl818x_csr *map;
+-	void (*rf_init)(struct ieee80211_hw *);
++	const struct rtl818x_rf_ops *rf;
+ 	int mode;
+ 	int if_id;
+ 
+diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187_rtl8225.h.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187_rtl8225.h
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_rtl8225.h.orig	2007-10-09 16:31:38.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_rtl8225.h	2008-01-08 21:03:07.000000000 -0500
+@@ -20,14 +20,7 @@
+ #define RTL8225_ANAPARAM_OFF	0xa00beb59
+ #define RTL8225_ANAPARAM2_OFF	0x840dec11
+ 
+-void rtl8225_write(struct ieee80211_hw *, u8 addr, u16 data);
+-u16  rtl8225_read(struct ieee80211_hw *, u8 addr);
+-
+-void rtl8225_rf_init(struct ieee80211_hw *);
+-void rtl8225z2_rf_init(struct ieee80211_hw *);
+-void rtl8225_rf_stop(struct ieee80211_hw *);
+-void rtl8225_rf_set_channel(struct ieee80211_hw *, int);
+-
++const struct rtl818x_rf_ops * rtl8187_detect_rf(struct ieee80211_hw *);
+ 
+ static inline void rtl8225_write_phy_ofdm(struct ieee80211_hw *dev,
+ 					  u8 addr, u32 data)
+diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187_rtl8225.c.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187_rtl8225.c
+--- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_rtl8225.c.orig	2007-10-09 16:31:38.000000000 -0400
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_rtl8225.c	2008-01-08 21:03:07.000000000 -0500
+@@ -101,7 +101,7 @@ static void rtl8225_write_8051(struct ie
+ 	msleep(2);
+ }
+ 
+-void rtl8225_write(struct ieee80211_hw *dev, u8 addr, u16 data)
++static void rtl8225_write(struct ieee80211_hw *dev, u8 addr, u16 data)
+ {
+ 	struct rtl8187_priv *priv = dev->priv;
+ 
+@@ -111,7 +111,7 @@ void rtl8225_write(struct ieee80211_hw *
+ 		rtl8225_write_bitbang(dev, addr, data);
+ }
+ 
+-u16 rtl8225_read(struct ieee80211_hw *dev, u8 addr)
++static u16 rtl8225_read(struct ieee80211_hw *dev, u8 addr)
+ {
+ 	struct rtl8187_priv *priv = dev->priv;
+ 	u16 reg80, reg82, reg84, out;
+@@ -325,7 +325,7 @@ static void rtl8225_rf_set_tx_power(stru
+ 	msleep(1);
+ }
+ 
+-void rtl8225_rf_init(struct ieee80211_hw *dev)
++static void rtl8225_rf_init(struct ieee80211_hw *dev)
+ {
+ 	struct rtl8187_priv *priv = dev->priv;
+ 	int i;
+@@ -567,7 +567,7 @@ static const u8 rtl8225z2_gain_bg[] = {
+ 	0x63, 0x15, 0xc5  /* -66dBm */
+ };
+ 
+-void rtl8225z2_rf_init(struct ieee80211_hw *dev)
++static void rtl8225z2_rf_init(struct ieee80211_hw *dev)
+ {
+ 	struct rtl8187_priv *priv = dev->priv;
+ 	int i;
+@@ -715,7 +715,7 @@ void rtl8225z2_rf_init(struct ieee80211_
+ 	rtl818x_iowrite32(priv, (__le32 *)0xFF94, 0x3dc00002);
+ }
+ 
+-void rtl8225_rf_stop(struct ieee80211_hw *dev)
++static void rtl8225_rf_stop(struct ieee80211_hw *dev)
+ {
+ 	u8 reg;
+ 	struct rtl8187_priv *priv = dev->priv;
+@@ -731,15 +731,47 @@ void rtl8225_rf_stop(struct ieee80211_hw
+ 	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_NORMAL);
+ }
+ 
+-void rtl8225_rf_set_channel(struct ieee80211_hw *dev, int channel)
++static void rtl8225_rf_set_channel(struct ieee80211_hw *dev,
++				   struct ieee80211_conf *conf)
+ {
+ 	struct rtl8187_priv *priv = dev->priv;
+ 
+-	if (priv->rf_init == rtl8225_rf_init)
+-		rtl8225_rf_set_tx_power(dev, channel);
++	if (priv->rf->init == rtl8225_rf_init)
++		rtl8225_rf_set_tx_power(dev, conf->channel);
+ 	else
+-		rtl8225z2_rf_set_tx_power(dev, channel);
++		rtl8225z2_rf_set_tx_power(dev, conf->channel);
+ 
+-	rtl8225_write(dev, 0x7, rtl8225_chan[channel - 1]);
++	rtl8225_write(dev, 0x7, rtl8225_chan[conf->channel - 1]);
+ 	msleep(10);
+ }
++
++static const struct rtl818x_rf_ops rtl8225_ops = {
++	.name		= "rtl8225",
++	.init		= rtl8225_rf_init,
++	.stop		= rtl8225_rf_stop,
++	.set_chan	= rtl8225_rf_set_channel
++};
++
++static const struct rtl818x_rf_ops rtl8225z2_ops = {
++	.name		= "rtl8225z2",
++	.init		= rtl8225z2_rf_init,
++	.stop		= rtl8225_rf_stop,
++	.set_chan	= rtl8225_rf_set_channel
++};
++
++const struct rtl818x_rf_ops * rtl8187_detect_rf(struct ieee80211_hw *dev)
++{
++	u16 reg8, reg9;
++
++	rtl8225_write(dev, 0, 0x1B7);
++
++	reg8 = rtl8225_read(dev, 8);
++	reg9 = rtl8225_read(dev, 9);
++
++	rtl8225_write(dev, 0, 0x0B7);
++
++	if (reg8 != 0x588 || reg9 != 0x700)
++		return &rtl8225_ops;
++
++	return &rtl8225z2_ops;
++}
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_dev.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_dev.c	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,1071 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_dev.c	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,1048 @@
 +
 +/*
 + * Linux device driver for RTL8180 / RTL8185
@@ -1999,7 +2306,7 @@
 +		rtl818x_iowrite8(priv, &priv->map->CARRIER_SENSE_COUNTER, 0x4C);
 +	}
 +
-+	priv->rf_init(dev);
++	priv->rf->init(dev);
 +	if (priv->r8185)
 +		rtl818x_iowrite16(priv, &priv->map->BRSR, 0x01F3);
 +	return 0;
@@ -2233,7 +2540,7 @@
 +	reg &= ~RTL818X_CMD_RX_ENABLE;
 +	rtl818x_iowrite8(priv, &priv->map->CMD, reg);
 +
-+	priv->rf_stop(dev);
++	priv->rf->stop(dev);
 +
 +	rtl818x_iowrite8(priv, &priv->map->EEPROM_CMD, RTL818X_EEPROM_CMD_CONFIG);
 +	reg = rtl818x_ioread8(priv, &priv->map->CONFIG4);
@@ -2284,7 +2591,7 @@
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +
-+	priv->rf_set_chan(dev, conf);
++	priv->rf->set_chan(dev, conf);
 +
 +	return 0;
 +}
@@ -2392,7 +2699,7 @@
 +	unsigned int io_addr, io_len;
 +	int err, i;
 +	struct eeprom_93cx6 eeprom;
-+	const char *chip_name, *rf_name;
++	const char *chip_name, *rf_name = NULL;
 +	u32 reg;
 +	u16 eeprom_val;
 +	DECLARE_MAC_BUF(mac);
@@ -2522,40 +2829,17 @@
 +	eeprom_93cx6_read(&eeprom, 0x06, &eeprom_val);
 +	eeprom_val &= 0xFF;
 +	switch (eeprom_val) {
-+	case 1:
-+		rf_name = "Intersil";
++	case 1:	rf_name = "Intersil";
 +		break;
-+	case 2:
-+		rf_name = "RFMD";
++	case 2:	rf_name = "RFMD";
 +		break;
-+	case 3:
-+		rf_name = "Philips";
-+		priv->rf_init = sa2400_rf_init;
-+		priv->rf_stop = sa2400_rf_stop;
-+		priv->rf_set_chan = sa2400_rf_set_channel;
++	case 3:	priv->rf = &sa2400_rf_ops;
 +		break;
-+	case 4:
-+		rf_name = "Maxim";
-+		priv->rf_init = max2820_rf_init;
-+		priv->rf_stop = max2820_rf_stop;
-+		priv->rf_set_chan = max2820_rf_set_channel;
++	case 4:	priv->rf = &max2820_rf_ops;
 +		break;
-+	case 5:
-+		rf_name = "GCT";
-+		priv->rf_init = grf5101_rf_init;
-+		priv->rf_stop = grf5101_rf_stop;
-+		priv->rf_set_chan = grf5101_rf_set_channel;
++	case 5:	priv->rf = &grf5101_rf_ops;
 +		break;
-+	case 9:
-+		if (rtl8180_rtl8225_is_z2(dev)) {
-+			rf_name = "RTL8225z2";
-+			priv->rf_init = rtl8180_rtl8225z2_rf_init;
-+		} else {
-+			rf_name = "RTL8225";
-+			priv->rf_init = rtl8180_rtl8225_rf_init;
-+		}
-+		priv->rf_stop = rtl8180_rtl8225_rf_stop;
-+		priv->rf_set_chan = rtl8180_rtl8225_rf_set_channel;
++	case 9:	priv->rf = rtl8180_detect_rf(dev);
 +		break;
 +	case 10:
 +		rf_name = "RTL8255";
@@ -2566,7 +2850,7 @@
 +		goto err_iounmap;
 +	}
 +
-+	if (eeprom_val < 3) {
++	if (!priv->rf) {
 +		printk(KERN_ERR "%s (rtl8180): %s RF frontend not supported!\n",
 +		       pci_name(pdev), rf_name);
 +		goto err_iounmap;
@@ -2619,7 +2903,7 @@
 +
 +	printk(KERN_INFO "%s: hwaddr %s, %s + %s\n",
 +	       wiphy_name(dev->wiphy), print_mac(mac, dev->wiphy->perm_addr),
-+	       chip_name, rf_name);
++	       chip_name, priv->rf->name);
 +
 +	return 0;
 +
@@ -2695,9 +2979,9 @@
 +module_init(rtl8180_init);
 +module_exit(rtl8180_exit);
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180.h	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,153 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180.h	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,151 @@
 +#ifndef RTL8180_H
 +#define RTL8180_H
 +
@@ -2789,9 +3073,7 @@
 +struct rtl8180_priv {
 +	/* common between rtl818x drivers */
 +	struct rtl818x_csr __iomem *map;
-+	void (*rf_init)(struct ieee80211_hw *);
-+	void (*rf_stop)(struct ieee80211_hw *);
-+	void (*rf_set_chan)(struct ieee80211_hw *, struct ieee80211_conf *);
++	const struct rtl818x_rf_ops *rf;
 +	int mode;
 +	int if_id;
 +
@@ -2852,24 +3134,75 @@
 +
 +#endif /* RTL8180_H */
 diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-21 12:19:55.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-21 12:28:05.000000000 -0500
-@@ -553,6 +553,11 @@ config USB_ZD1201
+--- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2008-01-08 21:00:40.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2008-01-08 21:03:07.000000000 -0500
+@@ -553,6 +553,62 @@ config USB_ZD1201
  	  To compile this driver as a module, choose M here: the
  	  module will be called zd1201.
  
 +config RTL8180
-+	tristate "Realtek 8185 PCI support"
++	tristate "Realtek 8180/8185 PCI support"
 +	depends on MAC80211 && PCI && WLAN_80211 && EXPERIMENTAL
 +	select EEPROM_93CX6
++	---help---
++	  This is a driver for RTL8180 and RTL8185 based cards.
++	  These are PCI based chips found in cards such as:
++
++	  (RTL8185 802.11g)
++	  A-Link WL54PC
++
++	  (RTL8180 802.11b)
++	  Belkin F5D6020 v3
++	  Belkin F5D6020 v3
++	  Dlink DWL-610
++	  Dlink DWL-510
++	  Netgear MA521
++	  Level-One WPC-0101
++	  Acer Aspire 1357 LMi
++	  VCTnet PC-11B1
++	  Ovislink AirLive WL-1120PCM
++	  Mentor WL-PCI
++	  Linksys WPC11 v4
++	  TrendNET TEW-288PI
++	  D-Link DWL-520 Rev D
++	  Repotec RP-WP7126
++	  TP-Link TL-WN250/251
++	  Zonet ZEW1000
++	  Longshine LCS-8031-R
++	  HomeLine HLW-PCC200
++	  GigaFast WF721-AEX
++	  Planet WL-3553
++	  Encore ENLWI-PCI1-NT
++	  TrendNET TEW-266PC
++	  Gigabyte GN-WLMR101
++	  Siemens-fujitsu Amilo D1840W
++	  Edimax EW-7126
++	  PheeNet WL-11PCIR
++	  Tonze PC-2100T
++	  Planet WL-8303
++	  Dlink DWL-650 v M1
++	  Edimax EW-7106
++	  Q-Tec 770WC
++	  Topcom Skyr at cer 4011b
++	  Roper FreeLan 802.11b (edition 2004)
++	  Wistron Neweb Corp CB-200B
++	  Pentagram HorNET
++	  QTec 775WC
++	  TwinMOS Booming B Series
++	  Micronet SP906BB
++	  Sweex LC700010
++	  Surecom EP-9428
++	  Safecom SWLCR-1100
++
++	  Thanks to Realtek for their support!
 +
  config RTL8187
  	tristate "Realtek 8187 USB support"
  	depends on MAC80211 && USB && WLAN_80211 && EXPERIMENTAL
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.h	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,28 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_rtl8225.h	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,23 @@
 +#ifndef RTL8180_RTL8225_H
 +#define RTL8180_RTL8225_H
 +
@@ -2878,20 +3211,15 @@
 +#define RTL8225_ANAPARAM_OFF	0xa00beb59
 +#define RTL8225_ANAPARAM2_OFF	0x840dec11
 +
-+int rtl8180_rtl8225_is_z2(struct ieee80211_hw *dev);
++const struct rtl818x_rf_ops * rtl8180_detect_rf(struct ieee80211_hw *);
 +
-+void rtl8180_rtl8225_rf_init(struct ieee80211_hw *);
-+void rtl8180_rtl8225z2_rf_init(struct ieee80211_hw *);
-+void rtl8180_rtl8225_rf_stop(struct ieee80211_hw *);
-+void rtl8180_rtl8225_rf_set_channel(struct ieee80211_hw *, struct ieee80211_conf *);
-+
-+static inline void rtl8180_rtl8225_write_phy_ofdm(struct ieee80211_hw *dev,
++static inline void rtl8225_write_phy_ofdm(struct ieee80211_hw *dev,
 +					  u8 addr, u8 data)
 +{
 +	rtl8180_write_phy(dev, addr, data);
 +}
 +
-+static inline void rtl8180_rtl8225_write_phy_cck(struct ieee80211_hw *dev,
++static inline void rtl8225_write_phy_cck(struct ieee80211_hw *dev,
 +					 u8 addr, u8 data)
 +{
 +	rtl8180_write_phy(dev, addr, data | 0x10000);
@@ -2899,9 +3227,9 @@
 +
 +#endif /* RTL8180_RTL8225_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.h
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.h	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,30 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_grf5101.h	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,28 @@
 +#ifndef RTL8180_GRF5101_H
 +#define RTL8180_GRF5101_H
 +
@@ -2927,15 +3255,13 @@
 +
 +#define GRF5101_ANTENNA 0xA3
 +
-+void grf5101_rf_init(struct ieee80211_hw *);
-+void grf5101_rf_stop(struct ieee80211_hw *);
-+void grf5101_rf_set_channel(struct ieee80211_hw *, struct ieee80211_conf *);
++extern const struct rtl818x_rf_ops grf5101_rf_ops;
 +
 +#endif /* RTL8180_GRF5101_H */
 diff -up /dev/null linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.c
---- /dev/null	2007-12-21 08:33:07.834165456 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.c	2007-12-21 12:28:05.000000000 -0500
-@@ -0,0 +1,142 @@
+--- /dev/null	2008-01-08 19:44:41.586069818 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/rtl8180_max2820.c	2008-01-08 21:03:07.000000000 -0500
+@@ -0,0 +1,150 @@
 +/*
 + * Radio tuning for Maxim max2820 on RTL8180
 + *
@@ -2964,7 +3290,7 @@
 +#include "rtl8180.h"
 +#include "rtl8180_max2820.h"
 +
-+u32 max2820_chan[] = {
++static const u32 max2820_chan[] = {
 +	12, /* CH 1 */
 +	17,
 +	22,
@@ -3012,7 +3338,8 @@
 +	rtl8180_write_phy(dev, 0x10, ant);
 +}
 +
-+void max2820_rf_set_channel(struct ieee80211_hw *dev, struct ieee80211_conf *conf)
++static void max2820_rf_set_channel(struct ieee80211_hw *dev,
++				   struct ieee80211_conf *conf)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +	unsigned int chan_idx = conf ? conf->channel - 1 : 0;
@@ -3027,14 +3354,14 @@
 +	write_max2820(dev, 3, chan);
 +}
 +
-+void max2820_rf_stop(struct ieee80211_hw *dev)
++static void max2820_rf_stop(struct ieee80211_hw *dev)
 +{
 +	rtl8180_write_phy(dev, 3, 0x8);
 +	write_max2820(dev, 1, 0);
 +}
 +
 +
-+void max2820_rf_init(struct ieee80211_hw *dev)
++static void max2820_rf_init(struct ieee80211_hw *dev)
 +{
 +	struct rtl8180_priv *priv = dev->priv;
 +
@@ -3078,3 +3405,10 @@
 +
 +	max2820_rf_set_channel(dev, NULL);
 +}
++
++const struct rtl818x_rf_ops max2820_rf_ops = {
++	.name		= "Maxim",
++	.init		= max2820_rf_init,
++	.stop		= max2820_rf_stop,
++	.set_chan	= max2820_rf_set_channel
++};

linux-2.6-wireless-pending.patch:

View full diff with command:
/usr/bin/cvs -f diff  -kk -u -N -r 1.19 -r 1.20 linux-2.6-wireless-pending.patch
Index: linux-2.6-wireless-pending.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-wireless-pending.patch,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- linux-2.6-wireless-pending.patch	4 Jan 2008 21:55:12 -0000	1.19
+++ linux-2.6-wireless-pending.patch	9 Jan 2008 02:12:37 -0000	1.20
@@ -1,3 +1,1166 @@
+commit 620fdb92d74f94ef5608c08cf9825a427e1ecfff
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Sat Dec 29 17:24:23 2007 +0100
+
+    zd1211rw: fix alignment for QOS and WDS frames
+    
+    This patch fixes RX packet alignment issues in the zd1211rw driver.
+    This is based on a patch by Johannes Berg.
+    
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit f94de7b013f78ad8bbe1064c108dd55141efb177
+Author: Miguel Botón <mboton.lkml at gmail.com>
+Date:   Fri Jan 4 23:34:35 2008 +0100
+
+    iwlwifi: fix compilation warning in 'iwl-4965.c'
+    
+    This patch fixes a compilation warning in 'iwl-4965.c'.
+    
+    "warning: format ‘%d’ expects type ‘int’, but argument 3 has type ‘long unsigned int’"
+    
+    Signed-off-by: Miguel Botón <mboton at gmail.com
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit d285ab9bd9dd17662cc628fd402cc5ca6590e873
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Mon Jan 7 12:55:14 2008 +0100
+
+    b43: Add N-PHY related initvals firmware filenames.
+    
+    This adds the initval filenames for the N-PHY firmware.
+    
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit c6227910a3aa6ac87d82b8309282d574a10954f0
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:42:21 2008 +0100
+
+    rt2x00: Release rt2x00 2.0.14
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit ec41503f4eb1e1675098861ca51d8fc3accb11c3
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:42:04 2008 +0100
+
+    rt2x00: Correctly initialize data and desc pointer
+    
+    rt2500usb and rt73usb store the descriptor in different
+    places. This means we should move the initialization of
+    the 2 pointers to the driver callback function fill_rxdone().
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 773c8f682c18c91b76b2c0ce65598ca3486935dd
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:41:45 2008 +0100
+
+    rt2x00: Move init_txring and init_rxring into rt2x00lib
+    
+    Prior to enabling the radio rt2x00lib should go through all
+    rings and for each entry should call the callback function
+    init_txentry() and init_rxentry().
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit f631a156231a252dda6a738955915e79180cc23b
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:41:28 2008 +0100
+
+    rt2x00: Determine MY_BSS from descriptor
+    
+    Use the MY_BSS descriptor field to determine if the
+    received frame belongs to the same BSS as the interface.
+    This can be used by rxdone to determine if the frame
+    should be updated or not.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit cdf589ffb50aa7146a1b11f1d366f6a2f57349eb
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:41:10 2008 +0100
+
+    rt2x00: Cleanup write_tx_desc() arguments
+    
+    Send the skb structure with write_tx_desc() and use
+    the skbdesc structure to read all information about
+    the frame. This saves several arguments in the function
+    definition and it is easier to send more information
+    later as well.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit a4200f27560df2f2da98b38afbcf2ad5c72f4f05
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:40:49 2008 +0100
+
+    rt2x00: Move packet filter flags
+    
+    The packet filter flags don't belong in the interface structure
+    because they are device based instead of interface based.
+    So move the filter fields out of struct interface and into rt2x00_dev.
+    
+    Additionally we shouldn't change the filter based on the working
+    mode, if such a thing is needed than mac80211 should have done that.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit c9bf26a302c65cde82e8e50cce14d307c82cc9a2
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:40:27 2008 +0100
+
+    rt2x00: Put 802.11 data on 4 byte boundary
+    
+    Check the size of the ieee80211 header during rxdone
+    and make sure the data behind the ieee80211 header
+    is placed on a 4 byte boundary.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit cf629bd6e996d6991ea690c6fb06d6a72767e444
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:40:07 2008 +0100
+
+    rt2x00: Move start() and stop() handlers into rt2x00lib.c
+    
+    suspend & resume was broken since it called rt2x00mac_start()
+    and rt2x00mac_stop() which would fail to execute because the
+    DEVICE_PRESENT flag was not set.
+    
+    Move the start and stop handlers into rt2x00lib.c which are called
+    from rt2x00mac_start() and rt2x00mac_stop() after they have checked
+    the DEVICE_PRESENT flag, while suspend and resume handlers can
+    directly call those functions.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 945a99f31293b2a0881b4753bbdcc2220882ac19
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:39:25 2008 +0100
+
+    rt2x00: Store queue idx and entry idx in data_ring and data_entry
+    
+    Store the queue idx inside structure data_ring
+    Store the entry idx inside structure data_entry
+    This saves us a few calls to ARRAY_INDEX() which is now unused.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 352ee73adab6ecdd5900d7fc8d072536aa8f5fb6
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:38:58 2008 +0100
+
+    rt2x00: Only set the TBCN flag when the interface is configured to send beacons.
+    
+    These flags used to be fixed to one in rt2500pci_config_type, which
+    caused the beacon timer interrupt to fire. This would lead to
+    rt2x00lib_beacondone adding work which called
+    rt2x00lib_beacondone_scheduled which called ieee80211_beacon_get which
+    printed an error about not having any beacon data.
+    
+    With this patch, these interrupts are only generated when the interface
+    is configured to send beacons.
+    
+    Signed-off-by: Matthijs Kooijman <matthijs at stdin.nl>
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 06b53ccbc2fefad0911d772b6c707a7e61571f39
+Author: Ivo van Doorn <ivdoorn at gmail.com>
+Date:   Sun Jan 6 23:38:34 2008 +0100
+
+    rt2x00: Always call ieee80211_stop_queue() when return NETDEV_TX_BUSY
+    
+    Apparently it was possible that ieee80211_stop_queue() was not full while
+    NETDEV_TX_BUSY was being reported back. I think that is what causing the WARN_ON().
+    This moves all calls to ieee80211_stop_queue() in rt2x00mac.c where it is easier
+    to determine if the queue should be halted.
+    
+    Signed-off-by: Ivo van Doorn <IvDoorn at gmail.com>
[...17082 lines suppressed...]
  
 -	SPEX(pci_spid, SSB_SPROM1_SPID, 0xFFFF, 0);
@@ -78051,28 +89429,45 @@
  		*(((__be16 *)out->et1mac) + i) = cpu_to_be16(v);
  	}
  	SPEX(et0phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0A, 0);
- 	SPEX(et1phyaddr, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1A,
- 	     SSB_SPROM1_ETHPHY_ET1A_SHIFT);
--	SPEX(et0mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET0M, 14);
--	SPEX(et1mdcport, SSB_SPROM1_ETHPHY, SSB_SPROM1_ETHPHY_ET1M, 15);
--	SPEX(board_rev, SSB_SPROM1_BINF, SSB_SPROM1_BINF_BREV, 0);
+@@ -324,9 +354,9 @@ static void sprom_extract_r1(struct ssb_
+ 	SPEX(board_rev, SSB_SPROM1_BINF, SSB_SPROM1_BINF_BREV, 0);
  	SPEX(country_code, SSB_SPROM1_BINF, SSB_SPROM1_BINF_CCODE,
  	     SSB_SPROM1_BINF_CCODE_SHIFT);
 -	SPEX(antenna_a, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTA,
--	     SSB_SPROM1_BINF_ANTA_SHIFT);
++	SPEX(ant_available_a, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTA,
+ 	     SSB_SPROM1_BINF_ANTA_SHIFT);
 -	SPEX(antenna_bg, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTBG,
--	     SSB_SPROM1_BINF_ANTBG_SHIFT);
++	SPEX(ant_available_bg, SSB_SPROM1_BINF, SSB_SPROM1_BINF_ANTBG,
+ 	     SSB_SPROM1_BINF_ANTBG_SHIFT);
  	SPEX(pa0b0, SSB_SPROM1_PA0B0, 0xFFFF, 0);
  	SPEX(pa0b1, SSB_SPROM1_PA0B1, 0xFFFF, 0);
- 	SPEX(pa0b2, SSB_SPROM1_PA0B2, 0xFFFF, 0);
-@@ -350,97 +351,75 @@ static void sprom_extract_r1(struct ssb_
- 	SPEX(antenna_gain_a, SSB_SPROM1_AGAIN, SSB_SPROM1_AGAIN_A, 0);
- 	SPEX(antenna_gain_bg, SSB_SPROM1_AGAIN, SSB_SPROM1_AGAIN_BG,
- 	     SSB_SPROM1_AGAIN_BG_SHIFT);
+@@ -347,100 +377,105 @@ static void sprom_extract_r1(struct ssb_
+ 	     SSB_SPROM1_ITSSI_A_SHIFT);
+ 	SPEX(itssi_bg, SSB_SPROM1_ITSSI, SSB_SPROM1_ITSSI_BG, 0);
+ 	SPEX(boardflags_lo, SSB_SPROM1_BFLLO, 0xFFFF, 0);
+-	SPEX(antenna_gain_a, SSB_SPROM1_AGAIN, SSB_SPROM1_AGAIN_A, 0);
+-	SPEX(antenna_gain_bg, SSB_SPROM1_AGAIN, SSB_SPROM1_AGAIN_BG,
+-	     SSB_SPROM1_AGAIN_BG_SHIFT);
 -	for (i = 0; i < 4; i++) {
 -		v = in[SPOFF(SSB_SPROM1_OEM) + i];
 -		*(((__le16 *)out->oem) + i) = cpu_to_le16(v);
 -	}
++
++	/* Extract the antenna gain values. */
++	gain = r123_extract_antgain(out->revision, in,
++				    SSB_SPROM1_AGAIN_BG,
++				    SSB_SPROM1_AGAIN_BG_SHIFT);
++	out->antenna_gain.ghz24.a0 = gain;
++	out->antenna_gain.ghz24.a1 = gain;
++	out->antenna_gain.ghz24.a2 = gain;
++	out->antenna_gain.ghz24.a3 = gain;
++	gain = r123_extract_antgain(out->revision, in,
++				    SSB_SPROM1_AGAIN_A,
++				    SSB_SPROM1_AGAIN_A_SHIFT);
++	out->antenna_gain.ghz5.a0 = gain;
++	out->antenna_gain.ghz5.a1 = gain;
++	out->antenna_gain.ghz5.a2 = gain;
++	out->antenna_gain.ghz5.a3 = gain;
  }
  
 -static void sprom_extract_r2(struct ssb_sprom_r2 *out, const u16 *in)
@@ -78100,6 +89495,7 @@
 +		v = in[SPOFF(SSB_SPROM4_IL0MAC) + i];
 +		*(((__be16 *)out->il0mac) + i) = cpu_to_be16(v);
  	}
+-}
 +	for (i = 0; i < 3; i++) {
 +		v = in[SPOFF(SSB_SPROM4_ET0MAC) + i];
 +		*(((__be16 *)out->et0mac) + i) = cpu_to_be16(v);
@@ -78113,9 +89509,10 @@
 +	     SSB_SPROM4_ETHPHY_ET1A_SHIFT);
 +	SPEX(country_code, SSB_SPROM4_CCODE, 0xFFFF, 0);
 +	SPEX(boardflags_lo, SSB_SPROM4_BFLLO, 0xFFFF, 0);
-+	SPEX(antenna_gain_a, SSB_SPROM4_AGAIN, SSB_SPROM4_AGAIN_0, 0);
-+	SPEX(antenna_gain_bg, SSB_SPROM4_AGAIN, SSB_SPROM4_AGAIN_1,
-+	     SSB_SPROM4_AGAIN_1_SHIFT);
++	SPEX(ant_available_a, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_A,
++	     SSB_SPROM4_ANTAVAIL_A_SHIFT);
++	SPEX(ant_available_bg, SSB_SPROM4_ANTAVAIL, SSB_SPROM4_ANTAVAIL_BG,
++	     SSB_SPROM4_ANTAVAIL_BG_SHIFT);
 +	SPEX(maxpwr_bg, SSB_SPROM4_MAXP_BG, SSB_SPROM4_MAXP_BG_MASK, 0);
 +	SPEX(itssi_bg, SSB_SPROM4_MAXP_BG, SSB_SPROM4_ITSSI_BG,
 +	     SSB_SPROM4_ITSSI_BG_SHIFT);
@@ -78128,8 +89525,18 @@
 +	SPEX(gpio2, SSB_SPROM4_GPIOB, SSB_SPROM4_GPIOB_P2, 0);
 +	SPEX(gpio3, SSB_SPROM4_GPIOB, SSB_SPROM4_GPIOB_P3,
 +	     SSB_SPROM4_GPIOB_P3_SHIFT);
-+	/* TODO - get remaining rev 4 stuff needed */
- }
++
++	/* Extract the antenna gain values. */
++	SPEX(antenna_gain.ghz24.a0, SSB_SPROM4_AGAIN01,
++	     SSB_SPROM4_AGAIN0, SSB_SPROM4_AGAIN0_SHIFT);
++	SPEX(antenna_gain.ghz24.a1, SSB_SPROM4_AGAIN01,
++	     SSB_SPROM4_AGAIN1, SSB_SPROM4_AGAIN1_SHIFT);
++	SPEX(antenna_gain.ghz24.a2, SSB_SPROM4_AGAIN23,
++	     SSB_SPROM4_AGAIN2, SSB_SPROM4_AGAIN2_SHIFT);
++	SPEX(antenna_gain.ghz24.a3, SSB_SPROM4_AGAIN23,
++	     SSB_SPROM4_AGAIN3, SSB_SPROM4_AGAIN3_SHIFT);
++	memcpy(&out->antenna_gain.ghz5, &out->antenna_gain.ghz24,
++	       sizeof(out->antenna_gain.ghz5));
  
 -static void sprom_extract_r3(struct ssb_sprom_r3 *out, const u16 *in)
 -{
@@ -78168,8 +89575,9 @@
 -	out->ofdmgpo <<= 16;
 -	out->ofdmgpo |= (in[SPOFF(SSB_SPROM3_OFDMGPO) + 1] & 0xFF00) >> 8;
 -	out->ofdmgpo |= (in[SPOFF(SSB_SPROM3_OFDMGPO) + 1] & 0x00FF) << 8;
--}
--
++	/* TODO - get remaining rev 4 stuff needed */
+ }
+ 
 -static int sprom_extract(struct ssb_bus *bus,
 -			 struct ssb_sprom *out, const u16 *in)
 +static int sprom_extract(struct ssb_bus *bus, struct ssb_sprom *out,
@@ -78182,7 +89590,7 @@
 -	     SSB_SPROM_REVISION_CRC_SHIFT);
 -
 +	out->revision = in[size - 1] & 0x00FF;
-+	ssb_printk(KERN_INFO PFX "SPROM revision %d detected.\n", out->revision);
++	ssb_dprintk(KERN_DEBUG PFX "SPROM revision %d detected.\n", out->revision);
  	if ((bus->chip_id & 0xFF00) == 0x4400) {
  		/* Workaround: The BCM44XX chip has a stupid revision
  		 * number stored in the SPROM.
@@ -78213,7 +89621,7 @@
  			goto unsupported;
  	}
  
-@@ -448,7 +427,7 @@ static int sprom_extract(struct ssb_bus 
+@@ -448,7 +483,7 @@ static int sprom_extract(struct ssb_bus 
  unsupported:
  	ssb_printk(KERN_WARNING PFX "Unsupported SPROM revision %d "
  		   "detected. Will extract v1\n", out->revision);
@@ -78222,7 +89630,7 @@
  	return 0;
  }
  
-@@ -458,16 +437,31 @@ static int ssb_pci_sprom_get(struct ssb_
+@@ -458,16 +493,29 @@ static int ssb_pci_sprom_get(struct ssb_
  	int err = -ENOMEM;
  	u16 *buf;
  
@@ -78238,9 +89646,7 @@
 -		ssb_printk(KERN_WARNING PFX
 -			   "WARNING: Invalid SPROM CRC (corrupt SPROM)\n");
 +		/* check for rev 4 sprom - has special signature */
-+		if (buf [32] == 0x5372) {
-+			ssb_printk(KERN_WARNING PFX "Extracting a rev 4"
-+				   " SPROM\n");
++		if (buf[32] == 0x5372) {
 +			kfree(buf);
 +			buf = kcalloc(SSB_SPROMSIZE_WORDS_R4, sizeof(u16),
 +				      GFP_KERNEL);
@@ -78259,7 +89665,7 @@
  
  	kfree(buf);
  out:
-@@ -581,29 +575,28 @@ const struct ssb_bus_ops ssb_pci_ops = {
+@@ -581,29 +629,28 @@ const struct ssb_bus_ops ssb_pci_ops = {
  	.write32	= ssb_pci_write32,
  };
  
@@ -78294,7 +89700,7 @@
  		memcpy(tmp, dump, 4);
  		dump += 4;
  		parsed = simple_strtoul(tmp, NULL, 16);
-@@ -627,7 +620,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
+@@ -627,7 +674,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
  	if (!bus)
  		goto out;
  	err = -ENOMEM;
@@ -78303,7 +89709,7 @@
  	if (!sprom)
  		goto out;
  
-@@ -640,7 +633,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
+@@ -640,7 +687,7 @@ static ssize_t ssb_pci_attr_sprom_show(s
  	sprom_do_read(bus, sprom);
  	mutex_unlock(&bus->pci_sprom_mutex);
  
@@ -78312,7 +89718,7 @@
  	err = 0;
  
  out_kfree:
-@@ -662,15 +655,15 @@ static ssize_t ssb_pci_attr_sprom_store(
+@@ -662,15 +709,15 @@ static ssize_t ssb_pci_attr_sprom_store(
  	if (!bus)
  		goto out;
  	err = -ENOMEM;
@@ -78332,8 +89738,8 @@
  		err = -EINVAL;
  		goto out_kfree;
 diff -up linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt.orig linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt
---- linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt.orig	2007-12-21 10:43:26.000000000 -0500
-+++ linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt	2007-12-21 11:57:47.000000000 -0500
+--- linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt.orig	2008-01-08 20:02:48.000000000 -0500
++++ linux-2.6.23.noarch/Documentation/feature-removal-schedule.txt	2008-01-08 20:31:10.000000000 -0500
 @@ -333,3 +333,28 @@ Why:	This driver has been marked obsolet
  Who:	Stephen Hemminger <shemminger at linux-foundation.org>
  

linux-2.6-wireless.patch:

Index: linux-2.6-wireless.patch
===================================================================
RCS file: /cvs/pkgs/rpms/kernel/devel/linux-2.6-wireless.patch,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -r1.15 -r1.16
--- linux-2.6-wireless.patch	21 Dec 2007 17:35:24 -0000	1.15
+++ linux-2.6-wireless.patch	9 Jan 2008 02:12:37 -0000	1.16
@@ -1,323 +1,282 @@
-diff -up linux-2.6.23.noarch/net/mac80211/rx.c.orig linux-2.6.23.noarch/net/mac80211/rx.c
---- linux-2.6.23.noarch/net/mac80211/rx.c.orig	2007-12-21 10:56:14.000000000 -0500
-+++ linux-2.6.23.noarch/net/mac80211/rx.c	2007-12-21 10:56:21.000000000 -0500
-@@ -1443,6 +1443,7 @@ void __ieee80211_rx(struct ieee80211_hw 
- 	struct ieee80211_sub_if_data *prev = NULL;
- 	struct sk_buff *skb_new;
- 	u8 *bssid;
-+	int hdrlen;
- 
- 	/*
- 	 * key references and virtual interfaces are protected using RCU
-@@ -1472,6 +1473,18 @@ void __ieee80211_rx(struct ieee80211_hw 
- 	rx.fc = le16_to_cpu(hdr->frame_control);
- 	type = rx.fc & IEEE80211_FCTL_FTYPE;
- 
-+	/*
-+	 * Drivers are required to align the payload data to a four-byte
-+	 * boundary, so the last two bits of the address where it starts
-+	 * may not be set. The header is required to be directly before
-+	 * the payload data, padding like atheros hardware adds which is
-+	 * inbetween the 802.11 header and the payload is not supported,
-+	 * the driver is required to move the 802.11 header further back
-+	 * in that case.
-+	 */
-+	hdrlen = ieee80211_get_hdrlen(rx.fc);
-+	WARN_ON_ONCE(((unsigned long)(skb->data + hdrlen)) & 3);
-+
- 	if (type == IEEE80211_FTYPE_DATA || type == IEEE80211_FTYPE_MGMT)
- 		local->dot11ReceivedFragmentCount++;
- 
-diff -up linux-2.6.23.noarch/net/mac80211/sta_info.c.orig linux-2.6.23.noarch/net/mac80211/sta_info.c
---- linux-2.6.23.noarch/net/mac80211/sta_info.c.orig	2007-12-21 10:56:14.000000000 -0500
-+++ linux-2.6.23.noarch/net/mac80211/sta_info.c	2007-12-21 10:56:21.000000000 -0500
-@@ -14,6 +14,7 @@
- #include <linux/slab.h>
- #include <linux/skbuff.h>
- #include <linux/if_arp.h>
-+#include <linux/timer.h>
- 
- #include <net/mac80211.h>
- #include "ieee80211_i.h"
-@@ -306,7 +307,8 @@ static void sta_info_cleanup(unsigned lo
+commit 85ae82313303ded51b3d49ae8b586224476abd33
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Wed Jan 2 18:55:53 2008 +0100
+
+    b43: Fix rxheader channel parsing
+    
+    This patch fixes the parsing of the RX data header channel field.
+    
+    The current code parses the header incorrectly and passes a wrong
+    channel number and frequency for each frame to mac80211.
+    The FIXMEs added by this patch don't matter for now as the code
+    where they live won't get executed anyway. They will be fixed later.
+    
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 74692096aa876d5a7b5bd73cd518f75840af3877
+Author: Andrew Lutomirski <andy at luto.us>
+Date:   Thu Jan 3 21:03:19 2008 -0800
+
+    mac80211: return an error when SIWRATE doesn't match any rate
+    
+    Currently mac80211 fails silently when trying to set a nonexistent
+    rate.  Return an error instead.
+    
+    Signed-Off-By: Andy Lutomirski <luto at myrealbox.com>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+
+commit 3e9533e4d7bea8e9d7622da3baa1a1125cafbe17
+Author: Michael Buesch <mb at bu3sch.de>
+Date:   Thu Jan 3 18:59:25 2008 +0100
+
+    ssb: Fix probing of PCI cores if PCI and PCIE core is available
+    
+    This will make sure that always the correct core is selected, even if
+    there are both a PCI and PCI-E core on a PCI or PCI-E card.
+    
+    Signed-off-by: Michael Buesch <mb at bu3sch.de>
+    Signed-off-by: John W. Linville <linville at tuxdriver.com>
+diff -up linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c.orig linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c
+--- linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c.orig	2008-01-08 20:03:00.000000000 -0500
++++ linux-2.6.23.noarch/net/mac80211/ieee80211_ioctl.c	2008-01-08 20:15:18.000000000 -0500
+@@ -591,7 +591,7 @@ static int ieee80211_ioctl_siwrate(struc
+ 	sdata->bss->force_unicast_rateidx = -1;
+ 	if (rate->value < 0)
+ 		return 0;
+-	for (i=0; i< mode->num_rates; i++) {
++	for (i=0; i < mode->num_rates; i++) {
+ 		struct ieee80211_rate *rates = &mode->rates[i];
+ 		int this_rate = rates->rate;
+ 
+@@ -599,10 +599,10 @@ static int ieee80211_ioctl_siwrate(struc
+ 			sdata->bss->max_ratectrl_rateidx = i;
+ 			if (rate->fixed)
+ 				sdata->bss->force_unicast_rateidx = i;
+-			break;
++			return 0;
+ 		}
  	}
- 	read_unlock_bh(&local->sta_lock);
- 
--	local->sta_cleanup.expires = jiffies + STA_INFO_CLEANUP_INTERVAL;
-+	local->sta_cleanup.expires =
-+		round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL);
- 	add_timer(&local->sta_cleanup);
+-	return 0;
++	return -EINVAL;
  }
  
-@@ -345,7 +347,8 @@ void sta_info_init(struct ieee80211_loca
- 	INIT_LIST_HEAD(&local->sta_list);
- 
- 	init_timer(&local->sta_cleanup);
--	local->sta_cleanup.expires = jiffies + STA_INFO_CLEANUP_INTERVAL;
-+	local->sta_cleanup.expires =
-+		round_jiffies(jiffies + STA_INFO_CLEANUP_INTERVAL);
- 	local->sta_cleanup.data = (unsigned long) local;
- 	local->sta_cleanup.function = sta_info_cleanup;
- 
-diff -up linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c
---- linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c.orig	2007-12-21 10:43:36.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/rtl8187_dev.c	2007-12-21 10:56:25.000000000 -0500
-@@ -38,6 +38,8 @@ static struct usb_device_id rtl8187_tabl
- 	{USB_DEVICE(0x0846, 0x6a00)},
- 	/* HP */
- 	{USB_DEVICE(0x03f0, 0xca02)},
-+	/* Sitecom */
-+	{USB_DEVICE(0x0df6, 0x000d)},
- 	{}
- };
- 
-diff -up linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig linux-2.6.23.noarch/drivers/net/wireless/Kconfig
---- linux-2.6.23.noarch/drivers/net/wireless/Kconfig.orig	2007-12-21 10:43:36.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/Kconfig	2007-12-21 10:56:24.000000000 -0500
-@@ -587,15 +587,66 @@ config ADM8211
- config P54_COMMON
- 	tristate "Softmac Prism54 support"
- 	depends on MAC80211 && WLAN_80211 && FW_LOADER && EXPERIMENTAL
-+	---help---
-+	  This is common code for isl38xx based cards.
-+	  This module does nothing by itself - the USB/PCI frontends
-+	  also need to be enabled in order to support any devices.
-+
-+	  These devices require softmac firmware which can be found at
-+	  http://prism54.org/
-+
-+	  If you choose to build a module, it'll be called p54common.
- 
- config P54_USB
- 	tristate "Prism54 USB support"
- 	depends on P54_COMMON && USB
- 	select CRC32
-+	---help---
-+	  This driver is for USB isl38xx based wireless cards.
-+	  These are USB based adapters found in devices such as:
-+
-+	  3COM 3CRWE254G72
-+	  SMC 2862W-G
-+	  Accton 802.11g WN4501 USB
-+	  Siemens Gigaset USB
-+	  Netgear WG121
-+	  Netgear WG111
-+	  Medion 40900, Roper Europe
-+	  Shuttle PN15, Airvast WM168g, IOGear GWU513
-+	  Linksys WUSB54G
-+	  Linksys WUSB54G Portable
-+	  DLink DWL-G120 Spinnaker
-+	  DLink DWL-G122
-+	  Belkin F5D7050 ver 1000
-+	  Cohiba Proto board
-+	  SMC 2862W-G version 2
-+	  U.S. Robotics U5 802.11g Adapter
-+	  FUJITSU E-5400 USB D1700
-+	  Sagem XG703A
-+	  DLink DWL-G120 Cohiba
-+	  Spinnaker Proto board
-+	  Linksys WUSB54AG
-+	  Inventel UR054G
-+	  Spinnaker DUT
-+
-+	  These devices require softmac firmware which can be found at
-+	  http://prism54.org/
-+
-+	  If you choose to build a module, it'll be called p54usb.
- 
- config P54_PCI
- 	tristate "Prism54 PCI support"
- 	depends on P54_COMMON && PCI
-+	---help---
-+	  This driver is for PCI isl38xx based wireless cards.
-+	  This driver supports most devices that are supported by the
-+	  fullmac prism54 driver plus many devices which are not
-+	  supported by the fullmac driver/firmware.
-+
-+	  This driver requires softmac firmware which can be found at
-+	  http://prism54.org/
-+
-+	  If you choose to build a module, it'll be called p54pci.
+ static int ieee80211_ioctl_giwrate(struct net_device *dev,
+diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/xmit.c.orig linux-2.6.23.noarch/drivers/net/wireless/b43/xmit.c
+--- linux-2.6.23.noarch/drivers/net/wireless/b43/xmit.c.orig	2008-01-08 20:02:56.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/b43/xmit.c	2008-01-08 20:15:18.000000000 -0500
+@@ -531,21 +531,32 @@ void b43_rx(struct b43_wldev *dev, struc
+ 	switch (chanstat & B43_RX_CHAN_PHYTYPE) {
+ 	case B43_PHYTYPE_A:
+ 		status.phymode = MODE_IEEE80211A;
+-		status.freq = chanid;
+-		status.channel = b43_freq_to_channel_a(chanid);
+-		break;
+-	case B43_PHYTYPE_B:
+-		status.phymode = MODE_IEEE80211B;
+-		status.freq = chanid + 2400;
+-		status.channel = b43_freq_to_channel_bg(chanid + 2400);
++		B43_WARN_ON(1);
++		/* FIXME: We don't really know which value the "chanid" contains.
++		 *        So the following assignment might be wrong. */
++		status.channel = chanid;
++		status.freq = b43_channel_to_freq_5ghz(status.channel);
+ 		break;
+ 	case B43_PHYTYPE_G:
+ 		status.phymode = MODE_IEEE80211G;
++		/* chanid is the radio channel cookie value as used
++		 * to tune the radio. */
+ 		status.freq = chanid + 2400;
+-		status.channel = b43_freq_to_channel_bg(chanid + 2400);
++		status.channel = b43_freq_to_channel_2ghz(status.freq);
++		break;
++	case B43_PHYTYPE_N:
++		status.phymode = 0xDEAD /*FIXME MODE_IEEE80211N*/;
++		/* chanid is the SHM channel cookie. Which is the plain
++		 * channel number in b43. */
++		status.channel = chanid;
++		if (chanstat & B43_RX_CHAN_5GHZ)
++			status.freq = b43_freq_to_channel_5ghz(status.freq);
++		else
++			status.freq = b43_freq_to_channel_2ghz(status.freq);
+ 		break;
+ 	default:
+ 		B43_WARN_ON(1);
++		goto drop;
+ 	}
  
- source "drivers/net/wireless/iwlwifi/Kconfig"
- source "drivers/net/wireless/hostap/Kconfig"
-diff -up linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c.orig linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c
---- linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c.orig	2007-12-21 10:43:36.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/ipw2200.c	2007-12-21 10:56:24.000000000 -0500
-@@ -1233,9 +1233,19 @@ static ssize_t show_event_log(struct dev
+ 	dev->stats.last_rx = jiffies;
+diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/main.h.orig linux-2.6.23.noarch/drivers/net/wireless/b43/main.h
+--- linux-2.6.23.noarch/drivers/net/wireless/b43/main.h.orig	2008-01-08 20:02:56.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/b43/main.h	2008-01-08 20:15:18.000000000 -0500
+@@ -39,11 +39,11 @@
+ #define PAD_BYTES(nr_bytes)		P4D_BYTES( __LINE__ , (nr_bytes))
+ 
+ /* Lightweight function to convert a frequency (in Mhz) to a channel number. */
+-static inline u8 b43_freq_to_channel_a(int freq)
++static inline u8 b43_freq_to_channel_5ghz(int freq)
  {
- 	struct ipw_priv *priv = dev_get_drvdata(d);
- 	u32 log_len = ipw_get_event_log_len(priv);
--	struct ipw_event log[log_len];
-+	u32 log_size;
-+	struct ipw_event *log;
- 	u32 len = 0, i;
- 
-+	/* not using min() because of its strict type checking */
-+	log_size = PAGE_SIZE / sizeof(*log) > log_len ?
-+			sizeof(*log) * log_len : PAGE_SIZE;
-+	log = kzalloc(log_size, GFP_KERNEL);
-+	if (!log) {
-+		IPW_ERROR("Unable to allocate memory for log\n");
-+		return 0;
-+	}
-+	log_len = log_size / sizeof(*log);
- 	ipw_capture_event_log(priv, log_len, log);
- 
- 	len += snprintf(buf + len, PAGE_SIZE - len, "%08X", log_len);
-@@ -1244,6 +1254,7 @@ static ssize_t show_event_log(struct dev
- 				"\n%08X%08X%08X",
- 				log[i].time, log[i].event, log[i].data);
- 	len += snprintf(buf + len, PAGE_SIZE - len, "\n");
-+	kfree(log);
- 	return len;
- }
- 
-diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c
---- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c.orig	2007-12-21 10:43:36.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl4965-base.c	2007-12-21 10:56:24.000000000 -0500
-@@ -6601,8 +6601,6 @@ static void __iwl_down(struct iwl_priv *
- 	/* Unblock any waiting calls */
- 	wake_up_interruptible_all(&priv->wait_command_queue);
- 
--	iwl_cancel_deferred_work(priv);
--
- 	/* Wipe out the EXIT_PENDING status bit if we are not actually
- 	 * exiting the module */
- 	if (!exit_pending)
-@@ -6677,6 +6675,8 @@ static void iwl_down(struct iwl_priv *pr
- 	mutex_lock(&priv->mutex);
- 	__iwl_down(priv);
- 	mutex_unlock(&priv->mutex);
-+
-+	iwl_cancel_deferred_work(priv);
+ 	return ((freq - 5000) / 5);
  }
- 
- #define MAX_HW_RESTARTS 5
-@@ -9174,10 +9174,9 @@ static void iwl_pci_remove(struct pci_de
- 
- 	IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n");
- 
--	mutex_lock(&priv->mutex);
- 	set_bit(STATUS_EXIT_PENDING, &priv->status);
--	__iwl_down(priv);
--	mutex_unlock(&priv->mutex);
-+
-+	iwl_down(priv);
- 
- 	/* Free MAC hash list for ADHOC */
- 	for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++) {
-@@ -9236,12 +9235,10 @@ static int iwl_pci_suspend(struct pci_de
+-static inline u8 b43_freq_to_channel_bg(int freq)
++static inline u8 b43_freq_to_channel_2ghz(int freq)
  {
- 	struct iwl_priv *priv = pci_get_drvdata(pdev);
- 
--	mutex_lock(&priv->mutex);
--
- 	set_bit(STATUS_IN_SUSPEND, &priv->status);
- 
- 	/* Take down the device; powers it off, etc. */
--	__iwl_down(priv);
-+	iwl_down(priv);
- 
- 	if (priv->mac80211_registered)
- 		ieee80211_stop_queues(priv->hw);
-@@ -9250,8 +9247,6 @@ static int iwl_pci_suspend(struct pci_de
- 	pci_disable_device(pdev);
- 	pci_set_power_state(pdev, PCI_D3hot);
- 
--	mutex_unlock(&priv->mutex);
--
- 	return 0;
- }
- 
-@@ -9309,8 +9304,6 @@ static int iwl_pci_resume(struct pci_dev
- 
- 	printk(KERN_INFO "Coming out of suspend...\n");
+ 	u8 channel;
  
--	mutex_lock(&priv->mutex);
--
- 	pci_set_power_state(pdev, PCI_D0);
- 	err = pci_enable_device(pdev);
- 	pci_restore_state(pdev);
-@@ -9324,7 +9317,6 @@ static int iwl_pci_resume(struct pci_dev
- 	pci_write_config_byte(pdev, 0x41, 0x00);
+@@ -54,19 +54,13 @@ static inline u8 b43_freq_to_channel_bg(
  
- 	iwl_resume(priv);
--	mutex_unlock(&priv->mutex);
- 
- 	return 0;
- }
-diff -up linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c
---- linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c.orig	2007-12-21 10:43:36.000000000 -0500
-+++ linux-2.6.23.noarch/drivers/net/wireless/iwlwifi/iwl3945-base.c	2007-12-21 10:56:24.000000000 -0500
-@@ -6246,8 +6246,6 @@ static void __iwl_down(struct iwl_priv *
- 	/* Unblock any waiting calls */
- 	wake_up_interruptible_all(&priv->wait_command_queue);
- 
--	iwl_cancel_deferred_work(priv);
--
- 	/* Wipe out the EXIT_PENDING status bit if we are not actually
- 	 * exiting the module */
- 	if (!exit_pending)
-@@ -6322,6 +6320,8 @@ static void iwl_down(struct iwl_priv *pr
- 	mutex_lock(&priv->mutex);
- 	__iwl_down(priv);
- 	mutex_unlock(&priv->mutex);
-+
-+	iwl_cancel_deferred_work(priv);
+ 	return channel;
  }
- 
- #define MAX_HW_RESTARTS 5
-@@ -8580,10 +8580,9 @@ static void iwl_pci_remove(struct pci_de
- 
- 	IWL_DEBUG_INFO("*** UNLOAD DRIVER ***\n");
- 
--	mutex_lock(&priv->mutex);
- 	set_bit(STATUS_EXIT_PENDING, &priv->status);
--	__iwl_down(priv);
--	mutex_unlock(&priv->mutex);
-+
-+	iwl_down(priv);
- 
- 	/* Free MAC hash list for ADHOC */
- 	for (i = 0; i < IWL_IBSS_MAC_HASH_SIZE; i++) {
-@@ -8642,12 +8641,10 @@ static int iwl_pci_suspend(struct pci_de
+-static inline u8 b43_freq_to_channel(struct b43_wldev *dev, int freq)
+-{
+-	if (dev->phy.type == B43_PHYTYPE_A)
+-		return b43_freq_to_channel_a(freq);
+-	return b43_freq_to_channel_bg(freq);
+-}
+ 
+ /* Lightweight function to convert a channel number to a frequency (in Mhz). */
+-static inline int b43_channel_to_freq_a(u8 channel)
++static inline int b43_channel_to_freq_5ghz(u8 channel)
  {
- 	struct iwl_priv *priv = pci_get_drvdata(pdev);
- 
--	mutex_lock(&priv->mutex);
--
- 	set_bit(STATUS_IN_SUSPEND, &priv->status);
- 
- 	/* Take down the device; powers it off, etc. */
--	__iwl_down(priv);
-+	iwl_down(priv);
- 
- 	if (priv->mac80211_registered)
- 		ieee80211_stop_queues(priv->hw);
-@@ -8656,8 +8653,6 @@ static int iwl_pci_suspend(struct pci_de
- 	pci_disable_device(pdev);
- 	pci_set_power_state(pdev, PCI_D3hot);
- 
--	mutex_unlock(&priv->mutex);
--
- 	return 0;
+ 	return (5000 + (5 * channel));
  }
+-static inline int b43_channel_to_freq_bg(u8 channel)
++static inline int b43_channel_to_freq_2ghz(u8 channel)
+ {
+ 	int freq;
  
-@@ -8715,8 +8710,6 @@ static int iwl_pci_resume(struct pci_dev
- 
- 	printk(KERN_INFO "Coming out of suspend...\n");
- 
--	mutex_lock(&priv->mutex);
--
- 	pci_set_power_state(pdev, PCI_D0);
- 	err = pci_enable_device(pdev);
- 	pci_restore_state(pdev);
-@@ -8730,7 +8723,6 @@ static int iwl_pci_resume(struct pci_dev
- 	pci_write_config_byte(pdev, 0x41, 0x00);
- 
- 	iwl_resume(priv);
--	mutex_unlock(&priv->mutex);
+@@ -77,12 +71,6 @@ static inline int b43_channel_to_freq_bg
  
- 	return 0;
+ 	return freq;
  }
+-static inline int b43_channel_to_freq(struct b43_wldev *dev, u8 channel)
+-{
+-	if (dev->phy.type == B43_PHYTYPE_A)
+-		return b43_channel_to_freq_a(channel);
+-	return b43_channel_to_freq_bg(channel);
+-}
+ 
+ static inline int b43_is_cck_rate(int rate)
+ {
+diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/xmit.h.orig linux-2.6.23.noarch/drivers/net/wireless/b43/xmit.h
+--- linux-2.6.23.noarch/drivers/net/wireless/b43/xmit.h.orig	2008-01-08 20:02:56.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/b43/xmit.h	2008-01-08 20:15:18.000000000 -0500
+@@ -142,49 +142,56 @@ struct b43_rxhdr_fw4 {
+ } __attribute__ ((__packed__));
+ 
+ /* PHY RX Status 0 */
+-#define B43_RX_PHYST0_GAINCTL	0x4000	/* Gain Control */
+-#define B43_RX_PHYST0_PLCPHCF	0x0200
+-#define B43_RX_PHYST0_PLCPFV	0x0100
+-#define B43_RX_PHYST0_SHORTPRMBL	0x0080	/* Received with Short Preamble */
++#define B43_RX_PHYST0_GAINCTL		0x4000 /* Gain Control */
++#define B43_RX_PHYST0_PLCPHCF		0x0200
++#define B43_RX_PHYST0_PLCPFV		0x0100
++#define B43_RX_PHYST0_SHORTPRMBL	0x0080 /* Received with Short Preamble */
+ #define B43_RX_PHYST0_LCRS		0x0040
+-#define B43_RX_PHYST0_ANT		0x0020	/* Antenna */
+-#define B43_RX_PHYST0_UNSRATE	0x0010
++#define B43_RX_PHYST0_ANT		0x0020 /* Antenna */
++#define B43_RX_PHYST0_UNSRATE		0x0010
+ #define B43_RX_PHYST0_CLIP		0x000C
+ #define B43_RX_PHYST0_CLIP_SHIFT	2
+-#define B43_RX_PHYST0_FTYPE		0x0003	/* Frame type */
+-#define  B43_RX_PHYST0_CCK		0x0000	/* Frame type: CCK */
+-#define  B43_RX_PHYST0_OFDM		0x0001	/* Frame type: OFDM */
+-#define  B43_RX_PHYST0_PRE_N	0x0002	/* Pre-standard N-PHY frame */
+-#define  B43_RX_PHYST0_STD_N	0x0003	/* Standard N-PHY frame */
++#define B43_RX_PHYST0_FTYPE		0x0003 /* Frame type */
++#define  B43_RX_PHYST0_CCK		0x0000 /* Frame type: CCK */
++#define  B43_RX_PHYST0_OFDM		0x0001 /* Frame type: OFDM */
++#define  B43_RX_PHYST0_PRE_N		0x0002 /* Pre-standard N-PHY frame */
++#define  B43_RX_PHYST0_STD_N		0x0003 /* Standard N-PHY frame */
+ 
+ /* PHY RX Status 2 */
+-#define B43_RX_PHYST2_LNAG		0xC000	/* LNA Gain */
++#define B43_RX_PHYST2_LNAG		0xC000 /* LNA Gain */
+ #define B43_RX_PHYST2_LNAG_SHIFT	14
+-#define B43_RX_PHYST2_PNAG		0x3C00	/* PNA Gain */
++#define B43_RX_PHYST2_PNAG		0x3C00 /* PNA Gain */
+ #define B43_RX_PHYST2_PNAG_SHIFT	10
+-#define B43_RX_PHYST2_FOFF		0x03FF	/* F offset */
++#define B43_RX_PHYST2_FOFF		0x03FF /* F offset */
+ 
+ /* PHY RX Status 3 */
+-#define B43_RX_PHYST3_DIGG		0x1800	/* DIG Gain */
++#define B43_RX_PHYST3_DIGG		0x1800 /* DIG Gain */
+ #define B43_RX_PHYST3_DIGG_SHIFT	11
+-#define B43_RX_PHYST3_TRSTATE	0x0400	/* TR state */
++#define B43_RX_PHYST3_TRSTATE		0x0400 /* TR state */
+ 
+ /* MAC RX Status */
+-#define B43_RX_MAC_BEACONSENT	0x00008000	/* Beacon send flag */
+-#define B43_RX_MAC_KEYIDX		0x000007E0	/* Key index */
+-#define B43_RX_MAC_KEYIDX_SHIFT	5
+-#define B43_RX_MAC_DECERR		0x00000010	/* Decrypt error */
+-#define B43_RX_MAC_DEC		0x00000008	/* Decryption attempted */
+-#define B43_RX_MAC_PADDING		0x00000004	/* Pad bytes present */
+-#define B43_RX_MAC_RESP		0x00000002	/* Response frame transmitted */
+-#define B43_RX_MAC_FCSERR		0x00000001	/* FCS error */
++#define B43_RX_MAC_RXST_VALID		0x01000000 /* PHY RXST valid */
++#define B43_RX_MAC_TKIP_MICERR		0x00100000 /* TKIP MIC error */
++#define B43_RX_MAC_TKIP_MICATT		0x00080000 /* TKIP MIC attempted */
++#define B43_RX_MAC_AGGTYPE		0x00060000 /* Aggregation type */
++#define B43_RX_MAC_AGGTYPE_SHIFT	17
++#define B43_RX_MAC_AMSDU		0x00010000 /* A-MSDU mask */
++#define B43_RX_MAC_BEACONSENT		0x00008000 /* Beacon sent flag */
++#define B43_RX_MAC_KEYIDX		0x000007E0 /* Key index */
++#define B43_RX_MAC_KEYIDX_SHIFT		5
++#define B43_RX_MAC_DECERR		0x00000010 /* Decrypt error */
++#define B43_RX_MAC_DEC			0x00000008 /* Decryption attempted */
++#define B43_RX_MAC_PADDING		0x00000004 /* Pad bytes present */
++#define B43_RX_MAC_RESP			0x00000002 /* Response frame transmitted */
++#define B43_RX_MAC_FCSERR		0x00000001 /* FCS error */
+ 
+ /* RX channel */
+-#define B43_RX_CHAN_GAIN		0xFC00	/* Gain */
+-#define B43_RX_CHAN_GAIN_SHIFT	10
+-#define B43_RX_CHAN_ID		0x03FC	/* Channel ID */
+-#define B43_RX_CHAN_ID_SHIFT	2
+-#define B43_RX_CHAN_PHYTYPE		0x0003	/* PHY type */
++#define B43_RX_CHAN_40MHZ		0x1000 /* 40 Mhz channel width */
++#define B43_RX_CHAN_5GHZ		0x0800 /* 5 Ghz band */
++#define B43_RX_CHAN_ID			0x07F8 /* Channel ID */
++#define B43_RX_CHAN_ID_SHIFT		3
++#define B43_RX_CHAN_PHYTYPE		0x0007 /* PHY type */
++
+ 
+ u8 b43_plcp_get_ratecode_cck(const u8 bitrate);
+ u8 b43_plcp_get_ratecode_ofdm(const u8 bitrate);
+diff -up linux-2.6.23.noarch/drivers/net/wireless/b43/b43.h.orig linux-2.6.23.noarch/drivers/net/wireless/b43/b43.h
+--- linux-2.6.23.noarch/drivers/net/wireless/b43/b43.h.orig	2008-01-08 20:02:56.000000000 -0500
++++ linux-2.6.23.noarch/drivers/net/wireless/b43/b43.h	2008-01-08 20:15:18.000000000 -0500
+@@ -273,6 +273,8 @@ enum {
+ #define B43_PHYTYPE_A			0x00
+ #define B43_PHYTYPE_B			0x01
+ #define B43_PHYTYPE_G			0x02
++#define B43_PHYTYPE_N			0x04
++#define B43_PHYTYPE_LP			0x05
+ 
+ /* PHYRegisters */
+ #define B43_PHY_ILT_A_CTRL		0x0072
+diff -up linux-2.6.23.noarch/drivers/ssb/scan.c.orig linux-2.6.23.noarch/drivers/ssb/scan.c
+--- linux-2.6.23.noarch/drivers/ssb/scan.c.orig	2008-01-08 20:02:57.000000000 -0500
++++ linux-2.6.23.noarch/drivers/ssb/scan.c	2008-01-08 20:15:18.000000000 -0500
+@@ -388,6 +388,17 @@ int ssb_bus_scan(struct ssb_bus *bus,
+ 		case SSB_DEV_PCI:
+ 		case SSB_DEV_PCIE:
+ #ifdef CONFIG_SSB_DRIVER_PCICORE
++			if (bus->bustype == SSB_BUSTYPE_PCI) {
++				/* Ignore PCI cores on PCI-E cards.
++				 * Ignore PCI-E cores on PCI cards. */
++				if (dev->id.coreid == SSB_DEV_PCI) {
++					if (bus->host_pci->is_pcie)
++						continue;
++				} else {
++					if (!bus->host_pci->is_pcie)
++						continue;
++				}
++			}
+ 			if (bus->pcicore.dev) {
+ 				ssb_printk(KERN_WARNING PFX
+ 					   "WARNING: Multiple PCI(E) cores found\n");




More information about the fedora-extras-commits mailing list