logo       
Google Custom Search
    AddThis Social Bookmark Button
-->

revision 2671 committed: msg#00042

Subject: revision 2671 committed
Project     : madwifi
Revision    : 2671
Author      : mickflemm (Nick Kossifidis)
Date        : 2007-08-26 18:17:52 +0200 (Sun, 26 Aug 2007)

Log Message :
 * Split ath5k_hw.c on two files, one for the initial register settings and 
one for the phy specific functions.

Affected Files:
* branches/ath5k/Kconfig                              updated             
* branches/ath5k/Makefile                             updated             
* branches/ath5k/ath5k.h                              updated             
* branches/ath5k/ath5k_hw.c                           updated             
* branches/ath5k/ath5k_hw.h                           updated             
* branches/ath5k/ath5k_hw_inivals.c                   added               
* branches/ath5k/ath5k_hw_phy.c                       added               
* branches/ath5k/ath5k_hw_regs.h                      added               
* branches/ath5k/ath5kreg.h                           deleted             


Modified: branches/ath5k/Kconfig
===================================================================
--- branches/ath5k/Kconfig      2007-08-26 09:34:43 UTC (rev 2670)
+++ branches/ath5k/Kconfig      2007-08-26 16:17:52 UTC (rev 2671)
@@ -12,3 +12,18 @@
          To compile this driver as a module, choose M here: the module will be
          called ath5k_pci.  If unsure, say N.
 
+config ATHEROS_AR5K_AR5210
+       bool "Support AR5210"
+       depends on ATHEROS_AR5K
+       default y
+
+config ATHEROS_AR5K_AR5211
+       bool "Support AR5211"
+       depends on ATHEROS_AR5K
+       default y
+
+config ATHEROS_AR5K_AR5212
+       bool "Support AR5212"
+       depends on ATHEROS_AR5K
+       default y
+

Modified: branches/ath5k/Makefile
===================================================================
--- branches/ath5k/Makefile     2007-08-26 09:34:43 UTC (rev 2670)
+++ branches/ath5k/Makefile     2007-08-26 16:17:52 UTC (rev 2671)
@@ -1,5 +1,5 @@
 obj-m += ath5k_pci.o
-ath5k_pci-objs := ath5k.o ath5k_hw.o ieee80211_regdomain.o
+ath5k_pci-objs := ath5k.o ath5k_hw.o ath5k_hw_phy.o ath5k_hw_inivals.o 
ieee80211_regdomain.o
 
 all:
        make -C /lib/modules/$(shell uname -r)/build/ M=$(PWD) modules

Modified: branches/ath5k/ath5k.h
===================================================================
--- branches/ath5k/ath5k.h      2007-08-26 09:34:43 UTC (rev 2670)
+++ branches/ath5k/ath5k.h      2007-08-26 16:17:52 UTC (rev 2671)
@@ -44,7 +44,7 @@
 #include <net/mac80211.h>
 
 /* Register addresses and values */
-#include "ath5kreg.h"
+#include "ath5k_hw_regs.h"
 /* HW structures and misc defines used by hw functions */
 #include "ath5k_hw.h"
 
@@ -1201,7 +1201,7 @@
 
 
 /*
- * Prototypes - hw functions
+ * Prototypes - MAC functions
  */
 
 /* General TODO: Clean them up */
@@ -1215,10 +1215,9 @@
 extern const AR5K_RATE_TABLE* ath5k_hw_get_rate_table(struct ath_hal*, u_int 
mode);
 
 /* Attach/detach */
-struct ath_hal*                ath5k_hw_init(u_int16_t device, AR5K_SOFTC sc, 
AR5K_BUS_TAG,
+extern struct ath_hal* ath5k_hw_init(u_int16_t device, AR5K_SOFTC sc, 
AR5K_BUS_TAG,
                                        AR5K_BUS_HANDLE, AR5K_STATUS *);
 AR5K_BOOL              ath5k_hw_nic_wakeup(struct ath_hal *, u_int16_t, 
AR5K_BOOL);
-u_int16_t              ath5k_hw_radio_revision(struct ath_hal *, AR5K_CHIP);
 extern void            ath5k_hw_detach(struct ath_hal *);      
 
 /* Reset */
@@ -1344,7 +1343,6 @@
 extern AR5K_STATUS     ath5k_hw_proc_new_rx_status(struct ath_hal *, struct 
ath5k_desc *,
                                                u_int32_t phyAddr, struct 
ath5k_desc *next);
 
-
 /* GPIO */
 extern void            ath5k_hw_set_ledstate(struct ath_hal*, AR5K_LED_STATE);
 extern AR5K_BOOL       ath5k_hw_set_gpio_output(struct ath_hal *, u_int32_t 
gpio);
@@ -1356,38 +1354,31 @@
 ieee80211_regdomain_t  ath5k_regdomain_to_ieee(u_int16_t);
 extern u_int16_t       ath5k_hw_get_regdomain(struct ath_hal*);
 
+
+/*
+ * Prototypes - PHY functions
+ */
+
 /* Channel/RF setup */
-AR5K_BOOL              ath5k_hw_check_channel(struct ath_hal *, u_int16_t, 
u_int flags);
+extern AR5K_BOOL       ath5k_hw_check_channel(struct ath_hal *, u_int16_t, 
u_int flags);
 extern AR5K_BOOL       ath5k_hw_phy_calibrate(struct ath_hal*, AR5K_CHANNEL *);
-AR5K_BOOL              ath5k_hw_channel(struct ath_hal *, AR5K_CHANNEL *);
-u_int32_t              ath5k_hw_rf5110_chan2athchan(AR5K_CHANNEL *);
-AR5K_BOOL              ath5k_hw_rf5110_channel(struct ath_hal *, AR5K_CHANNEL 
*);
-AR5K_BOOL              ath5k_hw_rf5111_chan2athchan(u_int, struct 
ath5k_athchan_2ghz *);
-AR5K_BOOL              ath5k_hw_rf5111_channel(struct ath_hal *, AR5K_CHANNEL 
*);
-AR5K_BOOL              ath5k_hw_rf5112_channel(struct ath_hal *, AR5K_CHANNEL 
*);
-AR5K_BOOL              ath5k_hw_phy_calibrate(struct ath_hal *hal, 
AR5K_CHANNEL *channel);
-AR5K_BOOL              ath5k_hw_rf5110_calibrate(struct ath_hal *hal, 
AR5K_CHANNEL *channel);
-AR5K_BOOL              ath5k_hw_rf511x_calibrate(struct ath_hal *hal, 
AR5K_CHANNEL *channel);
+extern AR5K_BOOL       ath5k_hw_channel(struct ath_hal *, AR5K_CHANNEL *);
+extern AR5K_BOOL       ath5k_hw_phy_calibrate(struct ath_hal *hal, 
AR5K_CHANNEL *channel);
 extern AR5K_BOOL       ath5k_hw_phy_disable(struct ath_hal *);
 extern void            ath5k_hw_set_def_antenna(struct ath_hal *, u_int);
 extern u_int           ath5k_hw_get_def_antenna(struct ath_hal *);
-u_int                  ath5k_hw_rfregs_op(u_int32_t *, u_int32_t, u_int32_t, 
u_int32_t,
-                                               u_int32_t, u_int32_t, 
AR5K_BOOL);
-u_int32_t              ath5k_hw_rfregs_gainf_corr(struct ath_hal *);
-AR5K_BOOL              ath5k_hw_rfregs_gain_readback(struct ath_hal *);
-int32_t                        ath5k_hw_rfregs_gain_adjust(struct ath_hal *);
-AR5K_BOOL              ath5k_hw_rfregs(struct ath_hal *, AR5K_CHANNEL *, 
u_int);
-AR5K_BOOL              ath5k_hw_rf5111_rfregs(struct ath_hal *, AR5K_CHANNEL 
*, u_int);
-AR5K_BOOL              ath5k_hw_rf5112_rfregs(struct ath_hal *, AR5K_CHANNEL 
*, u_int);
-void                   ath5k_hw_ar5211_rfregs(struct ath_hal *, AR5K_CHANNEL 
*, u_int, u_int);
-AR5K_BOOL              ath5k_hw_rfgain(struct ath_hal *, u_int);
+extern AR5K_BOOL       ath5k_hw_rfgain(struct ath_hal *, u_int);
 extern AR5K_RFGAIN     ath5k_hw_get_rf_gain(struct ath_hal*);
-void                   ath5k_hw_txpower_table(struct ath_hal *, AR5K_CHANNEL 
*, int16_t);
-AR5K_BOOL              ath5k_hw_txpower(struct ath_hal *, AR5K_CHANNEL *, 
u_int);
+extern AR5K_BOOL       ath5k_hw_txpower(struct ath_hal *, AR5K_CHANNEL *, 
u_int);
 extern AR5K_BOOL       ath5k_hw_set_txpower_limit(struct ath_hal *, u_int);
+extern void            ath5k_hw_set_rfgain_opt(struct ath_hal *hal);
+extern AR5K_BOOL       ath5k_hw_rfregs(struct ath_hal *hal, AR5K_CHANNEL 
*channel, u_int mode);
+extern u_int16_t       ath5k_hw_radio_revision(struct ath_hal *hal, AR5K_CHIP 
chip);
 
-
-/* Misc */
+/* Misc TODO: Clean them up ! */
+extern void            ath5k_write_initvals(struct ath_hal *hal, u_int8_t 
mode, AR5K_BOOL change_channel);
+extern AR5K_BOOL       ath5k_hw_register_timeout(struct ath_hal *hal, 
u_int32_t reg, u_int32_t flag,
+                                               u_int32_t val, AR5K_BOOL 
is_set);
 extern void            ath5k_hw_dump_state(struct ath_hal *);
 extern AR5K_BOOL       ath5k_hw_has_veol(struct ath_hal *);
 extern void            ath5k_hw_get_tx_inter_queue(struct ath_hal *, u_int32_t 
*);
@@ -1453,8 +1444,41 @@
 void ath5k_reset_tsf(struct ieee80211_hw *hw);
 
 
-/*ah_osdep.c*/
-struct ath_hal * _ath_hal_attach(u_int16_t devid, AR5K_SOFTC sc, AR5K_BUS_TAG 
t,
-                                       AR5K_BUS_HANDLE h, void* s);
-void ath_hal_detach(struct ath_hal *hal);
+/*
+ * Read from a device register
+ */
+static inline u32 ath5k_hw_reg_read(struct ath_hal *hal, u16 reg)
+{
+       return readl(hal->ah_sh + reg);
+}
+
+/*
+ * Write to a device register
+ */
+static inline void ath5k_hw_reg_write(struct ath_hal *hal, u32 val, u16 reg)
+{
+       writel(val, hal->ah_sh + reg);
+}
+
+static inline __u16 ath5k_hw_unaligned_read_16(__le16 *p)
+{
+       return le16_to_cpu(get_unaligned(p));
+}
+
+static inline void ath5k_hw_unaligned_write_16(__u16 v, __le16* p)
+{
+       put_unaligned(cpu_to_le16(v), p);
+}
+
+static inline __u32 ath5k_hw_unaligned_read_32(__le32 *p)
+{
+       return le32_to_cpu(get_unaligned(p));
+}
+
+static inline void ath5k_hw_unaligned_write_32(__u32 v, __le32 *p)
+{
+       put_unaligned(cpu_to_le32(v), p);
+}
+
+
 #endif /* _AR5K_H */

Modified: branches/ath5k/ath5k_hw.c
===================================================================
--- branches/ath5k/ath5k_hw.c   2007-08-26 09:34:43 UTC (rev 2670)
+++ branches/ath5k/ath5k_hw.c   2007-08-26 16:17:52 UTC (rev 2671)
@@ -96,39 +96,8 @@
  * Initial register dumps
  */
 
-/*
- * MAC/PHY Settings
- */
-/* Common for all modes */
-static const struct ath5k_ini ar5210_ini[] = AR5K_AR5210_INI;
-static const struct ath5k_ini ar5211_ini[] = AR5K_AR5211_INI;
-static const struct ath5k_ini ar5212_ini[] = AR5K_AR5212_INI;
-/* Mode-specific settings */
-static const struct ath5k_ini_mode ar5211_ini_mode[] = AR5K_AR5211_INI_MODE;
-static const struct ath5k_ini_mode ar5212_ini_mode[] = AR5K_AR5212_INI_MODE;
-static const struct ath5k_ini_mode ar5212_rf5111_ini_mode[] = 
AR5K_AR5212_RF5111_INI_MODE;
-static const struct ath5k_ini_mode ar5212_rf5112_ini_mode[] = 
AR5K_AR5212_RF5112_INI_MODE;
-/* RF Initial BB gain settings */
-static const struct ath5k_ini rf5111_ini_bbgain[] = AR5K_RF5111_INI_BBGAIN;
-static const struct ath5k_ini rf5112_ini_bbgain[] = AR5K_RF5112_INI_BBGAIN;
 
-
 /*
- * RF Settings
- */
-/* RF Banks */
-static const struct ath5k_ini_rf rf5111_rf[] = AR5K_RF5111_INI_RF;
-static const struct ath5k_ini_rf rf5112_rf[] = AR5K_RF5112_INI_RF;
-static const struct ath5k_ini_rf rf5112a_rf[] = AR5K_RF5112A_INI_RF;
-/* Initial mode-specific RF gain table for 5111/5112 */
-static const struct ath5k_ini_rfgain rf5111_ini_rfgain[] = 
AR5K_RF5111_INI_RFGAIN;
-static const struct ath5k_ini_rfgain rf5112_ini_rfgain[] = 
AR5K_RF5112_INI_RFGAIN;
-/* Initial gain optimization tables */
-static const struct ath5k_gain_opt rf5111_gain_opt = AR5K_RF5111_GAIN_OPT;
-static const struct ath5k_gain_opt rf5112_gain_opt = AR5K_RF5112_GAIN_OPT;
-
-
-/*
  * Enable to overwrite the country code (use "00" for debug)
  */
 #if 0
@@ -241,19 +210,6 @@
  * Functions used internaly
  */
 
-static u_int32_t
-ath5k_hw_bitswap(u_int32_t val, u_int bits)
-{
-       u_int32_t retval = 0, bit, i;
-
-       for (i = 0; i < bits; i++) {
-               bit = (val >> i) & 1;
-               retval = (retval << 1) | bit;
-       }
-
-       return (retval);
-}
-
 inline u_int
 ath5k_hw_htoclock(u_int usec, AR5K_BOOL turbo)
 {
@@ -306,45 +262,9 @@
 }
 
 /*
- * Read from a device register
- */
-static inline u32 ath5k_hw_reg_read(struct ath_hal *hal, u16 reg)
-{
-       return readl(hal->ah_sh + reg);
-}
-
-/*
- * Write to a device register
- */
-static inline void ath5k_hw_reg_write(struct ath_hal *hal, u32 val, u16 reg)
-{
-       writel(val, hal->ah_sh + reg);
-}
-
-static inline __u16 ath5k_hw_unaligned_read_16(__le16 *p)
-{
-       return le16_to_cpu(get_unaligned(p));
-}
-
-static inline void ath5k_hw_unaligned_write_16(__u16 v, __le16* p)
-{
-       put_unaligned(cpu_to_le16(v), p);
-}
-
-static inline __u32 ath5k_hw_unaligned_read_32(__le32 *p)
-{
-       return le32_to_cpu(get_unaligned(p));
-}
-
-static inline void ath5k_hw_unaligned_write_32(__u32 v, __le32 *p)
-{
-       put_unaligned(cpu_to_le32(v), p);
-}
-
-/*
  * Check if a register write has been completed
  */
-static AR5K_BOOL
+AR5K_BOOL
 ath5k_hw_register_timeout(struct ath_hal *hal, u_int32_t reg, u_int32_t flag,
     u_int32_t val, AR5K_BOOL is_set)
 {
@@ -366,52 +286,6 @@
        return (TRUE);
 }
 
-/*
- * Write initial register dump
- */
-static void
-ath5k_hw_ini_registers(struct ath_hal *hal, int size,
-               const struct ath5k_ini *ini_regs, AR5K_BOOL change_channel)
-{
-       int i;
-
-       /* Write initial registers */
-       for (i = 0; i < size ; i++) {
-               /* On channel change there is 
-                * no need to mess with PCU */
-               if (change_channel == TRUE &&
-                   ini_regs[i].ini_register >= AR5K_PCU_MIN &&
-                   ini_regs[i].ini_register <= AR5K_PCU_MAX)
-                       continue;
-
-               switch (ini_regs[i].ini_mode) {
-               case AR5K_INI_READ:
-                       /* Cleared on read */
-                       AR5K_REG_READ(ini_regs[i].ini_register);
-                       break;
-               case AR5K_INI_WRITE:
-               default:
-                       AR5K_REG_WAIT(i);
-                       AR5K_REG_WRITE(ini_regs[i].ini_register,
-                                       ini_regs[i].ini_value);
-               }
-       }
-}
-
-static void
-ath5k_hw_ini_mode_registers(struct ath_hal *hal, int size,
-               const struct ath5k_ini_mode *ini_mode, u_int8_t mode)
-{
-       int i;
-
-       for (i = 0; i < size; i++) {
-               AR5K_REG_WAIT(i);
-               AR5K_REG_WRITE((u_int32_t)ini_mode[i].mode_register,
-                   ini_mode[i].mode_value[mode]);
-       }
-
-}
-
 /***************************************\
        Attach/Detach Functions
 \***************************************/
@@ -582,33 +456,15 @@
 
        ath5k_hw_set_lladdr(hal, mac);
 
-       /* Initialize the gain optimization values */
-       /*For RF5111*/
-       if (hal->ah_radio == AR5K_RF5111) {
-               hal->ah_gain.g_step_idx = rf5111_gain_opt.go_default;
-               hal->ah_gain.g_step =
-                   &rf5111_gain_opt.go_step[hal->ah_gain.g_step_idx];
-               hal->ah_gain.g_low = 20;
-               hal->ah_gain.g_high = 35;
-               hal->ah_gain.g_active = 1;
-       /*For RF5112*/
-       } else if (hal->ah_radio == AR5K_RF5112) {
-               hal->ah_gain.g_step_idx = rf5112_gain_opt.go_default;
-               hal->ah_gain.g_step =
-                   &rf5111_gain_opt.go_step[hal->ah_gain.g_step_idx];
-               hal->ah_gain.g_low = 20;
-               hal->ah_gain.g_high = 85;
-               hal->ah_gain.g_active = 1;
-       }
-
+       ath5k_hw_set_rfgain_opt(hal);
        *status = AR5K_OK;
 
-       printk(KERN_INFO "ath_hal: Atheros HW found \n");
-       printk(KERN_INFO "ath_hal: MAC version: %s\n",
+       printk(KERN_INFO "ath5k: Atheros HW found \n");
+       printk(KERN_INFO "ath5k: MAC version: %s\n",
                ath5k_hw_get_part_name(AR5K_VERSION_VER,hal->ah_mac_srev));
-       printk(KERN_INFO "ath_hal: PHY version: %s\n",
+       printk(KERN_INFO "ath5k: PHY version: %s\n",
                
ath5k_hw_get_part_name(AR5K_VERSION_RAD,hal->ah_radio_5ghz_revision));
-       printk(KERN_INFO "ath_hal: EEPROM version: %x.%x\n",
+       printk(KERN_INFO "ath5k: EEPROM version: %x.%x\n",
                (hal->ah_ee_version & 0xF000) >> 12, hal->ah_ee_version & 
0xFFF);
 
        return (hal);
@@ -765,56 +621,6 @@
 }
 
 /*
- * Get the PHY Chip revision
- */
-u_int16_t
-ath5k_hw_radio_revision(struct ath_hal *hal, AR5K_CHIP chip)
-{
-       int i;
-       u_int32_t srev;
-       u_int16_t ret;
-
-       AR5K_TRACE;
-
-       /*
-        * Set the radio chip access register
-        */
-       switch (chip) {
-       case AR5K_CHIP_2GHZ:
-               AR5K_REG_WRITE(AR5K_PHY(0), AR5K_PHY_SHIFT_2GHZ);
-               break;
-       case AR5K_CHIP_5GHZ:
-               AR5K_REG_WRITE(AR5K_PHY(0), AR5K_PHY_SHIFT_5GHZ);
-               break;
-       default:
-               return (0);
-       }
-
-       udelay(2000);
-
-       /* ...wait until PHY is ready and read the selected radio revision */
-       AR5K_REG_WRITE(AR5K_PHY(0x34), 0x00001c16);
-
-       for (i = 0; i < 8; i++)
-               AR5K_REG_WRITE(AR5K_PHY(0x20), 0x00010000);
-
-       if (hal->ah_version == AR5K_AR5210) {
-               srev = AR5K_REG_READ(AR5K_PHY(256) >> 28) & 0xf;
-
-               ret = (u_int16_t) ath5k_hw_bitswap(srev, 4) + 1;
-       } else {
-               srev = (AR5K_REG_READ(AR5K_PHY(0x100)) >> 24) & 0xff;
-
-               ret = (u_int16_t) ath5k_hw_bitswap(((srev & 0xf0) >> 4) | 
((srev & 0x0f) << 4), 8);
-       }
-
-       /* Reset to the 5GHz mode */
-       AR5K_REG_WRITE(AR5K_PHY(0), AR5K_PHY_SHIFT_5GHZ);
-
-       return (ret);
-}
-
-/*
  * Free the hal struct
  */
 void
@@ -953,60 +759,9 @@
 
        }
 
-       /*
-        * Write initial mode-specific settings
-        */
-       /*For 5212*/
-       if (hal->ah_version == AR5K_AR5212) {
-               ath5k_hw_ini_mode_registers(hal, AR5K_ELEMENTS(ar5212_ini_mode),
-                                               ar5212_ini_mode, mode);
-               if (hal->ah_radio == AR5K_RF5111) {
-                       ath5k_hw_ini_mode_registers(hal, 
AR5K_ELEMENTS(ar5212_rf5111_ini_mode),
-                                                       ar5212_rf5111_ini_mode, 
mode);
-               } else if (hal->ah_radio == AR5K_RF5112) {
-                       ath5k_hw_ini_mode_registers(hal, 
AR5K_ELEMENTS(ar5212_rf5112_ini_mode),
-                                                       ar5212_rf5112_ini_mode, 
mode);
-               }
-       }
-       /*For 5211*/
-       if (hal->ah_version == AR5K_AR5211) {
-               ath5k_hw_ini_mode_registers(hal, AR5K_ELEMENTS(ar5211_ini_mode),
-                                               ar5211_ini_mode, mode);
-       }
-       /* For 5210 mode settings check out ath5k_hw_reset_tx_queue */
+       ath5k_write_initvals(hal, mode, change_channel);
 
        /*
-        * Write initial settings common for all modes
-        */
-       if (hal->ah_version == AR5K_AR5212) {
-               ath5k_hw_ini_registers(hal, AR5K_ELEMENTS(ar5212_ini),
-                                       ar5212_ini, change_channel);
-               if (hal->ah_radio == AR5K_RF5112) {
-                       AR5K_REG_WRITE(AR5K_PHY_PAPD_PROBE,
-                                       AR5K_PHY_PAPD_PROBE_INI_5112);
-                       ath5k_hw_ini_registers(hal, 
AR5K_ELEMENTS(rf5112_ini_bbgain),
-                                               rf5112_ini_bbgain, 
change_channel);
-               } else if (hal->ah_radio == AR5K_RF5111) {
-                       AR5K_REG_WRITE( AR5K_PHY_GAIN_2GHZ,
-                                       AR5K_PHY_GAIN_2GHZ_INI_5111); 
-                       AR5K_REG_WRITE( AR5K_PHY_PAPD_PROBE,
-                                       AR5K_PHY_PAPD_PROBE_INI_5111 );
-                       ath5k_hw_ini_registers(hal, 
AR5K_ELEMENTS(rf5111_ini_bbgain),
-                                               rf5111_ini_bbgain, 
change_channel);
-               }
-       } else if (hal->ah_version == AR5K_AR5211) {
-               ath5k_hw_ini_registers(hal, AR5K_ELEMENTS(ar5211_ini),
-                                       ar5211_ini, change_channel);
-               /* AR5211 only comes with 5111 */
-               ath5k_hw_ini_registers(hal, AR5K_ELEMENTS(rf5111_ini_bbgain),
-                                       rf5111_ini_bbgain, change_channel);
-       } else if (hal->ah_version == AR5K_AR5210) {
-               ath5k_hw_ini_registers(hal, AR5K_ELEMENTS(ar5210_ini),
-                                       ar5210_ini, change_channel);
-       }
-
-
-       /*
         * 5211/5212 Specific
         */
        if (hal->ah_version != AR5K_AR5210) {
@@ -4750,36 +4505,12 @@
 \*********************************/
 
 /*
- * Following 2 functions come from net80211 
  * TODO: These do not belong here, they have nothing
  * to do with hw. I left them here temporarily for
  * combatibility.
  * M.F.
  */
 
-/*
- * Check if a channel is inside supported range
- */
-AR5K_BOOL
-ath5k_hw_check_channel(struct ath_hal *hal, u_int16_t freq, u_int flags)
-{
-       /* Check if the channel is in our supported range */
-       if (flags & CHANNEL_2GHZ) {
-               if ((freq >= hal->ah_capabilities.cap_range.range_2ghz_min) &&
-                   (freq <= hal->ah_capabilities.cap_range.range_2ghz_max))
-                       return (TRUE);
-       } else if (flags & CHANNEL_5GHZ) 
-               if ((freq >= hal->ah_capabilities.cap_range.range_5ghz_min) &&
-                   (freq <= hal->ah_capabilities.cap_range.range_5ghz_max))
-                       return (TRUE);
-
-       return (FALSE);
-}
-
-/*
- * Regdomain stuff, these also don't belong here etc
- */
-
 u_int16_t
 ath5k_regdomain_from_ieee(ieee80211_regdomain_t ieee)
 {
@@ -4832,1077 +4563,6 @@
        return (regdomain);
 }
 
-
-
-
-/*************************\
-  PHY/RF access functions
-\*************************/
-
-/*
- * Set a channel on the radio chip
- */
-AR5K_BOOL
-ath5k_hw_channel(struct ath_hal *hal, AR5K_CHANNEL *channel)
-{
-       AR5K_BOOL ret;
-
-       /*
-        * Check bounds supported by the PHY
-        * (don't care about regulation restrictions at this point)
-        */
-       if ((channel->freq < hal->ah_capabilities.cap_range.range_2ghz_min ||
-           channel->freq > hal->ah_capabilities.cap_range.range_2ghz_max) &&
-           (channel->freq < hal->ah_capabilities.cap_range.range_5ghz_min ||
-           channel->freq > hal->ah_capabilities.cap_range.range_5ghz_max)) {
-               AR5K_PRINTF("channel out of supported range (%u MHz)\n",
-                   channel->freq);
-               return (FALSE);
-       }
-
-       /*
-        * Set the channel and wait
-        */
-       if (hal->ah_radio == AR5K_RF5110)
-               ret = ath5k_hw_rf5110_channel(hal, channel);
-       else if (hal->ah_radio == AR5K_RF5111)
-               ret = ath5k_hw_rf5111_channel(hal, channel);
-       else
-               ret = ath5k_hw_rf5112_channel(hal, channel);
-
-       if (ret == FALSE)
-               return (ret);
-
-       hal->ah_current_channel.freq = channel->freq;
-       hal->ah_current_channel.channel_flags = channel->channel_flags;
-       hal->ah_turbo = channel->channel_flags == CHANNEL_T ?
-           TRUE : FALSE;
-
-       return (TRUE);
-}
-
-/*
- * Convertion needed for RF5110
- */
-u_int32_t
-ath5k_hw_rf5110_chan2athchan(AR5K_CHANNEL *channel)
-{
-       u_int32_t athchan;
-
-       /*
-        * Convert IEEE channel/MHz to an internal channel value used
-        * by the AR5210 chipset. This has not been verified with
-        * newer chipsets like the AR5212A who have a completely
-        * different RF/PHY part.
-        */
-       athchan = (ath5k_hw_bitswap((ath5k_mhz2ieee(channel->freq,
-           channel->channel_flags) - 24) / 2, 5) << 1) |
-           (1 << 6) | 0x1;
-
-       return (athchan);
-}
-
-/*
- * Set channel on RF5110
- */
-AR5K_BOOL
-ath5k_hw_rf5110_channel(struct ath_hal *hal, AR5K_CHANNEL *channel)
-{
-       u_int32_t data;
-
-       /*
-        * Set the channel and wait
-        */
-       data = ath5k_hw_rf5110_chan2athchan(channel);
-       AR5K_REG_WRITE(AR5K_RF_BUFFER, data);
-       AR5K_REG_WRITE(AR5K_RF_BUFFER_CONTROL_0, 0);
-       udelay(1000);
-
-       return (TRUE);
-}
-
-/*
- * Convertion needed for 5111
- */
-AR5K_BOOL
-ath5k_hw_rf5111_chan2athchan(u_int ieee, struct ath5k_athchan_2ghz *athchan)
-{
-       int channel;
-
-       /* Cast this value to catch negative channel numbers (>= -19) */ 
-       channel = (int)ieee;
-
-       /*
-        * Map 2GHz IEEE channel to 5GHz Atheros channel
-        */
-       if (channel <= 13) {
-               athchan->a2_athchan = 115 + channel;
-               athchan->a2_flags = 0x46;
-       } else if (channel == 14) {
-               athchan->a2_athchan = 124;
-               athchan->a2_flags = 0x44;
-       } else if (channel >= 15 && channel <= 26) {
-               athchan->a2_athchan = ((channel - 14) * 4) + 132;
-               athchan->a2_flags = 0x46;
-       } else
-               return (FALSE);
-
-       return (TRUE);
-}
-
-/*
- * Set channel on 5111
- */
-AR5K_BOOL
-ath5k_hw_rf5111_channel(struct ath_hal *hal, AR5K_CHANNEL *channel)
-{
-       u_int ieee_channel, ath_channel;
-       u_int32_t data0, data1, clock;
-       struct ath5k_athchan_2ghz ath_channel_2ghz;
-
-       /*
-        * Set the channel on the RF5111 radio
-        */
-       data0 = data1 = 0;
-       ath_channel = ieee_channel = ath5k_mhz2ieee(channel->freq,
-           channel->channel_flags);
-
-       if (channel->channel_flags & CHANNEL_2GHZ) {
-               /* Map 2GHz channel to 5GHz Atheros channel ID */
-               if (ath5k_hw_rf5111_chan2athchan(ieee_channel,
-                       &ath_channel_2ghz) == FALSE)
-                       return (FALSE);
-
-               ath_channel = ath_channel_2ghz.a2_athchan;
-               data0 = ((ath5k_hw_bitswap(ath_channel_2ghz.a2_flags, 8) & 0xff)
-                   << 5) | (1 << 4);
-       }
-
-       if (ath_channel < 145 || !(ath_channel & 1)) {
-               clock = 1;
-               data1 = ((ath5k_hw_bitswap(ath_channel - 24, 8) & 0xff) << 2)
-                   | (clock << 1) | (1 << 10) | 1;
-       } else {
-               clock = 0;
-               data1 = ((ath5k_hw_bitswap((ath_channel - 24) / 2, 8) & 0xff) 
<< 2)
-                   | (clock << 1) | (1 << 10) | 1;
-       }
-
-       AR5K_REG_WRITE(AR5K_RF_BUFFER, (data1 & 0xff) | ((data0 & 0xff) << 8));
-       AR5K_REG_WRITE(AR5K_RF_BUFFER_CONTROL_3, ((data1 >> 8) & 0xff) | (data0 
& 0xff00));
-
-       return (TRUE);
-}
-
-/*
- * Set channel on 5112
- */
-AR5K_BOOL
-ath5k_hw_rf5112_channel(struct ath_hal *hal, AR5K_CHANNEL *channel)
-{
-       u_int32_t data, data0, data1, data2;
-       u_int16_t c;
-
-       data = data0 = data1 = data2 = 0;
-       c = channel->freq;
-
-       /*
-        * Set the channel on the RF5112 or newer
-        */
-       if (c < 4800) {
-               if (!((c - 2224) % 5)) {
-                       data0 = ((2 * (c - 704)) - 3040) / 10;
-                       data1 = 1;
-               } else if (!((c - 2192) % 5)) {
-                       data0 = ((2 * (c - 672)) - 3040) / 10;
-                       data1 = 0;
-               } else
-                       return (FALSE);
-
-               data0 = ath5k_hw_bitswap((data0 << 2) & 0xff, 8);
-       } else {
-               if (!(c % 20) && c >= 5120) {
-                       data0 = ath5k_hw_bitswap(((c - 4800) / 20 << 2), 8);
-                       data2 = ath5k_hw_bitswap(3, 2);
-               } else if (!(c % 10)) {
-                       data0 = ath5k_hw_bitswap(((c - 4800) / 10 << 1), 8);
-                       data2 = ath5k_hw_bitswap(2, 2);
-               } else if (!(c % 5)) {
-                       data0 = ath5k_hw_bitswap((c - 4800) / 5, 8);
-                       data2 = ath5k_hw_bitswap(1, 2);
-               } else
-                       return (FALSE);
-       }
-
-       data = (data0 << 4) | (data1 << 1) | (data2 << 2) | 0x1001;
-
-       AR5K_REG_WRITE(AR5K_RF_BUFFER, data & 0xff);
-       AR5K_REG_WRITE(AR5K_RF_BUFFER_CONTROL_5, (data >> 8) & 0x7f);
-
-       return (TRUE);
-}
-
-/*
- * Perform a PHY calibration
- */
-AR5K_BOOL
-ath5k_hw_phy_calibrate(struct ath_hal *hal, AR5K_CHANNEL *channel){
-
-       AR5K_BOOL ret;
-
-       if (hal->ah_radio == AR5K_RF5110)
-               ret = ath5k_hw_rf5110_calibrate(hal,channel);
-       else
-               ret = ath5k_hw_rf511x_calibrate(hal,channel);
-
-       return (ret);
-}
-/*
- * Perform a PHY calibration on RF5110
- */
-AR5K_BOOL
-ath5k_hw_rf5110_calibrate(struct ath_hal *hal, AR5K_CHANNEL *channel)
-{
-       AR5K_BOOL ret = TRUE;
-       u_int32_t phy_sig, phy_agc, phy_sat, beacon, noise_floor;
-       u_int i;
-
-#define AGC_DISABLE    {                       \
-       AR5K_REG_ENABLE_BITS(AR5K_PHY_AGC,      \
-               AR5K_PHY_AGC_DISABLE);          \
-       udelay(10);                             \
-}
-
-#define AGC_ENABLE     {                       \
-       AR5K_REG_DISABLE_BITS(AR5K_PHY_AGC,     \
-           AR5K_PHY_AGC_DISABLE);              \
-}
-
-       /*
-        * Disable beacons and RX/TX queues, wait
-        */
-       AR5K_REG_ENABLE_BITS(AR5K_DIAG_SW_5210,
-           AR5K_DIAG_SW_DIS_TX | AR5K_DIAG_SW_DIS_RX_5210);
-       beacon = AR5K_REG_READ(AR5K_BEACON_5210);
-       AR5K_REG_WRITE(AR5K_BEACON_5210, beacon & ~AR5K_BEACON_ENABLE);
-
-       udelay(2300);
-
-       /*
-        * Set the channel (with AGC turned off)
-        */
-       AGC_DISABLE;
-       ret = ath5k_hw_channel(hal, channel);
-
-       /*
-        * Activate PHY and wait
-        */
-       AR5K_REG_WRITE(AR5K_PHY_ACT, AR5K_PHY_ACT_ENABLE);
-       udelay(1000);
-
-       AGC_ENABLE;
-
-       if (ret == FALSE)
-               return (ret);
-
-       /*
-        * Calibrate the radio chip
-        */
-
-       /* Remember normal state */
-       phy_sig = AR5K_REG_READ(AR5K_PHY_SIG);
-       phy_agc = AR5K_REG_READ(AR5K_PHY_AGCCOARSE);
-       phy_sat = AR5K_REG_READ(AR5K_PHY_ADCSAT);
-
-       /* Update radio registers */
-       AR5K_REG_WRITE(AR5K_PHY_SIG,
-               (phy_sig & ~(AR5K_PHY_SIG_FIRPWR)) |
-               AR5K_REG_SM(-1, AR5K_PHY_SIG_FIRPWR));
-
-       AR5K_REG_WRITE(AR5K_PHY_AGCCOARSE,
-               (phy_agc & ~(AR5K_PHY_AGCCOARSE_HI |
-                       AR5K_PHY_AGCCOARSE_LO)) |
-               AR5K_REG_SM(-1, AR5K_PHY_AGCCOARSE_HI) |
-               AR5K_REG_SM(-127, AR5K_PHY_AGCCOARSE_LO));
-
-       AR5K_REG_WRITE(AR5K_PHY_ADCSAT,
-               (phy_sat & ~(AR5K_PHY_ADCSAT_ICNT |
-                       AR5K_PHY_ADCSAT_THR)) |
-               AR5K_REG_SM(2, AR5K_PHY_ADCSAT_ICNT) |
-               AR5K_REG_SM(12, AR5K_PHY_ADCSAT_THR));
-
-       udelay(20);
-
-       AGC_DISABLE;
-       AR5K_REG_WRITE(AR5K_PHY_RFSTG, AR5K_PHY_RFSTG_DISABLE);
-       AGC_ENABLE;
-
-       udelay(1000);
-
-       /*
-        * Enable calibration and wait until completion
-        */
-       AR5K_REG_ENABLE_BITS(AR5K_PHY_AGCCTL,
-                               AR5K_PHY_AGCCTL_CAL);
-
-       if (ath5k_hw_register_timeout(hal, AR5K_PHY_AGCCTL,
-               AR5K_PHY_AGCCTL_CAL, 0, FALSE) == FALSE) {
-               AR5K_PRINTF("calibration timeout (%uMHz)\n",
-                       channel->freq);
-               ret = FALSE;
-       }
-
-       /* Reset to normal state */
-       AR5K_REG_WRITE(AR5K_PHY_SIG, phy_sig);
-       AR5K_REG_WRITE(AR5K_PHY_AGCCOARSE, phy_agc);
-       AR5K_REG_WRITE(AR5K_PHY_ADCSAT, phy_sat);
-
-       if (ret == FALSE)
-               return (FALSE);
-
-       /*
-        * Enable noise floor calibration and wait until completion
-        */
-       AR5K_REG_ENABLE_BITS(AR5K_PHY_AGCCTL,
-                               AR5K_PHY_AGCCTL_NF);
-
-       if (ath5k_hw_register_timeout(hal, AR5K_PHY_AGCCTL,
-               AR5K_PHY_AGCCTL_NF, 0, FALSE) == FALSE) {
-               AR5K_PRINTF("noise floor calibration timeout (%uMHz)\n",
-                               channel->freq);
-               return (FALSE);
-       }
-
-       /* Wait until the noise floor is calibrated */
-       for (i = 20; i > 0; i--) {
-               udelay(1000);
-               noise_floor = AR5K_REG_READ(AR5K_PHY_NF);
-
-               if (AR5K_PHY_NF_RVAL(noise_floor) &
-               AR5K_PHY_NF_ACTIVE)
-                       noise_floor = AR5K_PHY_NF_AVAL(noise_floor);
-       
-               if (noise_floor <= AR5K_TUNE_NOISE_FLOOR)
-                       break;
-       }
-
-       if (noise_floor > AR5K_TUNE_NOISE_FLOOR) {
-               AR5K_PRINTF("noise floor calibration failed (%uMHz)\n",
-                       channel->freq);
-               return (FALSE);
-       }
-
-
-       /*
-        * Re-enable RX/TX and beacons
-        */
-       AR5K_REG_DISABLE_BITS(AR5K_DIAG_SW_5210,
-               AR5K_DIAG_SW_DIS_TX | AR5K_DIAG_SW_DIS_RX_5210);
-       AR5K_REG_WRITE(AR5K_BEACON_5210, beacon);
-
-#undef AGC_ENABLE
-#undef AGC_DISABLE
-
-       return (TRUE);
-}
-
-/*
- * Perform a PHY calibration on RF5111/5112
- * (Sync I/Q for inter-symbol interference)
- */
-AR5K_BOOL
-ath5k_hw_rf511x_calibrate(struct ath_hal *hal, AR5K_CHANNEL *channel)
-{
-       u_int32_t i_pwr, q_pwr;
-       int32_t iq_corr, i_coff, i_coffd, q_coff, q_coffd;
-       AR5K_TRACE;
-
-       if (hal->ah_calibration == FALSE ||
-           AR5K_REG_READ(AR5K_PHY_IQ) & AR5K_PHY_IQ_RUN)
-               goto done;
-
-       hal->ah_calibration = FALSE;
-
-       iq_corr = AR5K_REG_READ(AR5K_PHY_IQRES_CAL_CORR);
-       i_pwr = AR5K_REG_READ(AR5K_PHY_IQRES_CAL_PWR_I);
-       q_pwr = AR5K_REG_READ(AR5K_PHY_IQRES_CAL_PWR_Q);
-       i_coffd = ((i_pwr >> 1) + (q_pwr >> 1)) >> 7;
-       q_coffd = q_pwr >> 6;
-
-       if (i_coffd == 0 || q_coffd == 0)
-               goto done;
-
-       i_coff = ((-iq_corr) / i_coffd) & 0x3f;
-       q_coff = (((int32_t)i_pwr / q_coffd) - 64) & 0x1f;
-
-       /* Commit new IQ value */
-       AR5K_REG_ENABLE_BITS(AR5K_PHY_IQ,
-               AR5K_PHY_IQ_CORR_ENABLE |
-               ((u_int32_t)q_coff) |
-               ((u_int32_t)i_coff << AR5K_PHY_IQ_CORR_Q_I_COFF_S));
-
- done:
-       /* Start noise floor calibration */
-       AR5K_REG_ENABLE_BITS(AR5K_PHY_AGCCTL,
-               AR5K_PHY_AGCCTL_NF);
-
-       /* Request RF gain */
-       if (channel->channel_flags & CHANNEL_5GHZ) {
-               AR5K_REG_WRITE(AR5K_PHY_PAPD_PROBE,
-                       AR5K_REG_SM(hal->ah_txpower.txp_max,
-                       AR5K_PHY_PAPD_PROBE_TXPOWER) |
-                       AR5K_PHY_PAPD_PROBE_TX_NEXT);
-               hal->ah_rf_gain = AR5K_RFGAIN_READ_REQUESTED;
-       }
-
-       return (TRUE);
-}
-
-AR5K_BOOL
-ath5k_hw_phy_disable(struct ath_hal *hal)
-{
-       AR5K_TRACE;
-       /*Just a try M.F.*/
-       AR5K_REG_WRITE(AR5K_PHY_ACT, AR5K_PHY_ACT_DISABLE);
-       return (TRUE);
-}
-
-void /*TODO:Boundary check*/
-ath5k_hw_set_def_antenna(struct ath_hal *hal, u_int ant)
-{
-       AR5K_TRACE;
-       /*Just a try M.F.*/
-       if (hal->ah_version != AR5K_AR5210)
-               AR5K_REG_WRITE(AR5K_DEFAULT_ANTENNA, ant);
-
-       return;
-}
-
-u_int
-ath5k_hw_get_def_antenna(struct ath_hal *hal)
-{
-       AR5K_TRACE;
-       /*Just a try M.F.*/
-       if (hal->ah_version != AR5K_AR5210)
-               return AR5K_REG_READ(AR5K_DEFAULT_ANTENNA);
-
-       return (FALSE); /*XXX: What do we return for 5210 ?*/
-}
-
-/*
- * Used to modify RF Banks before writing them to AR5K_RF_BUFFER
- */
-u_int
-ath5k_hw_rfregs_op(u_int32_t *rf, u_int32_t offset, u_int32_t reg, u_int32_t 
bits,
-    u_int32_t first, u_int32_t col, AR5K_BOOL set)
-{
-       u_int32_t mask, entry, last, data, shift, position;
-       int32_t left;
-       int i;
-
-       data = 0;
-
-       if (rf == NULL)
-               /* should not happen */
-               return (0);
-
-       if (!(col <= 3 && bits <= 32 && first + bits <= 319)) {
-               AR5K_PRINTF("invalid values at offset %u\n", offset);
-               return (0);
-       }
-
-       entry = ((first - 1) / 8) + offset;
-       position = (first - 1) % 8;
-
-       if (set == TRUE)
-               data = ath5k_hw_bitswap(reg, bits);
-
-       for (i = shift = 0, left = bits; left > 0; position = 0, entry++, i++) {
-               last = (position + left > 8) ? 8 : position + left;
-               mask = (((1 << last) - 1) ^ ((1 << position) - 1)) <<
-                   (col * 8);
-
-               if (set == TRUE) {
-                       rf[entry] &= ~mask;
-                       rf[entry] |= ((data << position) << (col * 8)) & mask;
-                       data >>= (8 - position);
-               } else {
-                       data = (((rf[entry] & mask) >> (col * 8)) >>
-                           position) << shift;
-                       shift += last - position;
-               }
-
-               left -= 8 - position;
-       }
-
-       data = set == TRUE ? 1 : ath5k_hw_bitswap(data, bits);
-
-       return (data);
-}
-
-u_int32_t
-ath5k_hw_rfregs_gainf_corr(struct ath_hal *hal)
-{
-       u_int32_t mix, step;
-       u_int32_t *rf;
-
-       if (hal->ah_rf_banks == NULL)
-               return (0);
-
-       rf = hal->ah_rf_banks;
-       hal->ah_gain.g_f_corr = 0;
-
-       if (ath5k_hw_rfregs_op(rf, hal->ah_offset[7], 0, 1, 36, 0, FALSE) != 1)
-               return (0);
-
-       step = ath5k_hw_rfregs_op(rf, hal->ah_offset[7], 0, 4, 32, 0, FALSE);
-       mix = hal->ah_gain.g_step->gos_param[0];
-
-       switch (mix) {
-       case 3:
-               hal->ah_gain.g_f_corr = step * 2;
-               break;
-       case 2:
-               hal->ah_gain.g_f_corr = (step - 5) * 2;
-               break;
-       case 1:
-               hal->ah_gain.g_f_corr = step;
-               break;
-       default:
-               hal->ah_gain.g_f_corr = 0;
-               break;
-       }
-
-       return (hal->ah_gain.g_f_corr);
-}
-
-AR5K_BOOL
-ath5k_hw_rfregs_gain_readback(struct ath_hal *hal)
-{
-       u_int32_t step, mix, level[4];
-       u_int32_t *rf;
-
-       if (hal->ah_rf_banks == NULL)
-               return (0);
-
-       rf = hal->ah_rf_banks;
-
-       if (hal->ah_radio == AR5K_RF5111) {
-               step = ath5k_hw_rfregs_op(rf, hal->ah_offset[7],
-                   0, 6, 37, 0, FALSE);
-               level[0] = 0;
-               level[1] = (step == 0x3f) ? 0x32 : step + 4;
-               level[2] = (step != 0x3f) ? 0x40 : level[0];
-               level[3] = level[2] + 0x32;
-
-               hal->ah_gain.g_high = level[3] -
-                   (step == 0x3f ? AR5K_GAIN_DYN_ADJUST_HI_MARGIN : -5);
-               hal->ah_gain.g_low = level[0] +
-                   (step == 0x3f ? AR5K_GAIN_DYN_ADJUST_LO_MARGIN : 0);
-       } else {
-               mix = ath5k_hw_rfregs_op(rf, hal->ah_offset[7],
-                   0, 1, 36, 0, FALSE);
-               level[0] = level[2] = 0;
-
-               if (mix == 1) {
-                       level[1] = level[3] = 83;
-               } else {
-                       level[1] = level[3] = 107;
-                       hal->ah_gain.g_high = 55;
-               }
-       }
-
-       return ((hal->ah_gain.g_current >= level[0] &&
-           hal->ah_gain.g_current <= level[1]) ||
-           (hal->ah_gain.g_current >= level[2] &&
-           hal->ah_gain.g_current <= level[3]));
-}
-
-int32_t
-ath5k_hw_rfregs_gain_adjust(struct ath_hal *hal)
-{
-       int ret = 0;
-       const struct ath5k_gain_opt *go;
-
-       go = hal->ah_radio == AR5K_RF5111 ?
-           &rf5111_gain_opt : &rf5112_gain_opt;
-
-       hal->ah_gain.g_step = &go->go_step[hal->ah_gain.g_step_idx];
-
-       if (hal->ah_gain.g_current >= hal->ah_gain.g_high) {
-               if (hal->ah_gain.g_step_idx == 0)
-                       return (-1);
-               for (hal->ah_gain.g_target = hal->ah_gain.g_current;
-                   hal->ah_gain.g_target >=  hal->ah_gain.g_high &&
-                   hal->ah_gain.g_step_idx > 0;
-                   hal->ah_gain.g_step =
-                   &go->go_step[hal->ah_gain.g_step_idx]) {
-                       hal->ah_gain.g_target -= 2 *
-                           (go->go_step[--(hal->ah_gain.g_step_idx)].gos_gain -
-                           hal->ah_gain.g_step->gos_gain);
-               }
-
-               ret = 1;
-               goto done;
-       }
-
-       if (hal->ah_gain.g_current <= hal->ah_gain.g_low) {
-               if (hal->ah_gain.g_step_idx == (go->go_steps_count - 1))
-                       return (-2);
-               for (hal->ah_gain.g_target = hal->ah_gain.g_current;
-                   hal->ah_gain.g_target <=  hal->ah_gain.g_low &&
-                   hal->ah_gain.g_step_idx < (go->go_steps_count - 1);
-                   hal->ah_gain.g_step =
-                   &go->go_step[hal->ah_gain.g_step_idx]) {
-                       hal->ah_gain.g_target -= 2 *
-                           (go->go_step[++(hal->ah_gain.g_step_idx)].gos_gain -
-                           hal->ah_gain.g_step->gos_gain);
-               }
-
-               ret = 2;
-               goto done;
-       }
-
- done:
-#ifdef AR5K_DEBUG
-       AR5K_PRINTF("ret %d, gain step %u, current gain %u, target gain %u\n",
-           ret,
-           hal->ah_gain.g_step_idx,
-           hal->ah_gain.g_current,
-           hal->ah_gain.g_target);
-#endif
-
-       return (ret);
-}
-
-/*
- * Initialize RF
- */
-AR5K_BOOL
-ath5k_hw_rfregs(struct ath_hal *hal, AR5K_CHANNEL *channel, u_int mode)
-{
-       ath5k_rfgain_t *func = NULL;
-       AR5K_BOOL ret;
-
-       if (hal->ah_radio == AR5K_RF5111) {
-               hal->ah_rf_banks_size = sizeof(rf5111_rf);
-               func = ath5k_hw_rf5111_rfregs;
-       } else if (hal->ah_radio == AR5K_RF5112) {
-               if (hal->ah_radio_5ghz_revision >= AR5K_SREV_RAD_5112A)
-                       hal->ah_rf_banks_size = sizeof(rf5112a_rf);
-               else
-               hal->ah_rf_banks_size = sizeof(rf5112_rf);
-               func = ath5k_hw_rf5112_rfregs;
-       } else
-               return (FALSE);
-
-       if (hal->ah_rf_banks == NULL) {
-               /* XXX do extra checks? */
-               if ((hal->ah_rf_banks = kmalloc(hal->ah_rf_banks_size,
-                   GFP_KERNEL)) == NULL) {
-                       AR5K_PRINT("out of memory\n");
-                       return (FALSE);
-               }
-       }
-
-       ret = (func)(hal, channel, mode);
-
-       if (ret == TRUE)
-               hal->ah_rf_gain = AR5K_RFGAIN_INACTIVE;
-
-       return (ret);
-}
-
-/*
- * Read EEPROM Calibration data, modify RF Banks and Initialize RF5111
- */
-AR5K_BOOL
-ath5k_hw_rf5111_rfregs(struct ath_hal *hal, AR5K_CHANNEL *channel, u_int mode)
-{
-       struct ath5k_eeprom_info *ee = &hal->ah_capabilities.cap_eeprom;
-       const u_int rf_size = AR5K_ELEMENTS(rf5111_rf);
-       u_int32_t *rf;
-       int i, obdb = -1, bank = -1;
-       u_int32_t ee_mode;
-
-       AR5K_ASSERT_ENTRY(mode, AR5K_INI_VAL_MAX);
-
-       rf = hal->ah_rf_banks;
-
-       /* Copy values to modify them */
-       for (i = 0; i < rf_size; i++) {
-               if (rf5111_rf[i].rf_bank >=
-                   AR5K_RF5111_INI_RF_MAX_BANKS) {
-                       AR5K_PRINT("invalid bank\n");
-                       return (FALSE);
-               }
-
-               if (bank != rf5111_rf[i].rf_bank) {
-                       bank = rf5111_rf[i].rf_bank;
-                       hal->ah_offset[bank] = i;
-               }
-
-               rf[i] = rf5111_rf[i].rf_value[mode];
-       }
-
-       /* Modify bank 0 */
-       if (channel->channel_flags & CHANNEL_2GHZ) {
-               if (channel->channel_flags & CHANNEL_B)
-                       ee_mode = AR5K_EEPROM_MODE_11B;
-               else
-                       ee_mode = AR5K_EEPROM_MODE_11G;
-               obdb = 0;
-
-               if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[0],
-                       ee->ee_ob[ee_mode][obdb], 3, 119, 0, TRUE))
-                       return (FALSE);
-
-               if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[0],
-                       ee->ee_ob[ee_mode][obdb], 3, 122, 0, TRUE))
-                       return (FALSE);
-
-               obdb = 1;
-       /* Modify bank 6 */
-       } else {
-               /* For 11a, Turbo and XR */
-               ee_mode = AR5K_EEPROM_MODE_11A;
-               obdb = channel->freq >= 5725 ? 3 :
-                   (channel->freq >= 5500 ? 2 :
-                       (channel->freq >= 5260 ? 1 :
-                           (channel->freq > 4000 ? 0 : -1)));
-
-               if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-                       ee->ee_pwd_84, 1, 51, 3, TRUE))
-                       return (FALSE);
-
-               if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-                       ee->ee_pwd_90, 1, 45, 3, TRUE))
-                       return (FALSE);
-       }
-
-       if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-               !ee->ee_xpd[ee_mode], 1, 95, 0, TRUE))
-               return (FALSE);
-
-       if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-               ee->ee_x_gain[ee_mode], 4, 96, 0, TRUE))
-               return (FALSE);
-
-       if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-               obdb >= 0 ? ee->ee_ob[ee_mode][obdb] : 0, 3, 104, 0, TRUE))
-               return (FALSE);
-
-       if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-               obdb >= 0 ? ee->ee_db[ee_mode][obdb] : 0, 3, 107, 0, TRUE))
-               return (FALSE);
-
-       /* Modify bank 7 */
-       if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[7],
-               ee->ee_i_gain[ee_mode], 6, 29, 0, TRUE))
-               return (FALSE);
-
-       if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[7],
-               ee->ee_xpd[ee_mode], 1, 4, 0, TRUE))
-               return (FALSE);
-
-       /* Write RF values */
-       for (i = 0; i < rf_size; i++) {
-               AR5K_REG_WAIT(i);
-               AR5K_REG_WRITE(rf5111_rf[i].rf_register, rf[i]);
-       }
-
-       return (TRUE);
-}
-
-/*
- * Read EEPROM Calibration data, modify RF Banks and Initialize RF5112
- */
-AR5K_BOOL
-ath5k_hw_rf5112_rfregs(struct ath_hal *hal, AR5K_CHANNEL *channel, u_int mode)
-{
-       struct ath5k_eeprom_info *ee = &hal->ah_capabilities.cap_eeprom;
-       u_int rf_size;
-       u_int32_t *rf;
-       int i, obdb = -1, bank = -1;
-       u_int32_t ee_mode;
-       const struct ath5k_ini_rf *rf_ini;
-
-       AR5K_ASSERT_ENTRY(mode, AR5K_INI_VAL_MAX);
-
-       rf = hal->ah_rf_banks;
-
-       if (hal->ah_radio_5ghz_revision >= AR5K_SREV_RAD_5112A) {
-               rf_ini = rf5112a_rf;
-               rf_size = AR5K_ELEMENTS(rf5112a_rf);
-       } else {
-               rf_ini = rf5112_rf;
-               rf_size = AR5K_ELEMENTS(rf5112_rf);
-       }
-
-       /* Copy values to modify them */
-       for (i = 0; i < rf_size; i++) {
-               if (rf_ini[i].rf_bank >=
-                   AR5K_RF5112_INI_RF_MAX_BANKS) {
-                       AR5K_PRINT("invalid bank\n");
-                       return (FALSE);
-               }
-
-               if (bank != rf_ini[i].rf_bank) {
-                       bank = rf_ini[i].rf_bank;
-                       hal->ah_offset[bank] = i;
-               }
-
-               rf[i] = rf_ini[i].rf_value[mode];
-       }
-
-       /* Modify bank 6 */
-       if (channel->channel_flags & CHANNEL_2GHZ) {
-               if (channel->channel_flags & CHANNEL_B)
-                       ee_mode = AR5K_EEPROM_MODE_11B;
-               else
-                       ee_mode = AR5K_EEPROM_MODE_11G;
-               obdb = 0;
-
-               if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-                       ee->ee_ob[ee_mode][obdb], 3, 287, 0, TRUE))
-                       return (FALSE);
-
-               if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-                       ee->ee_ob[ee_mode][obdb], 3, 290, 0, TRUE))
-                       return (FALSE);
-       } else {
-               /* For 11a, Turbo and XR */
-               ee_mode = AR5K_EEPROM_MODE_11A;
-               obdb = channel->freq >= 5725 ? 3 :
-                   (channel->freq >= 5500 ? 2 :
-                       (channel->freq >= 5260 ? 1 :
-                           (channel->freq > 4000 ? 0 : -1)));
-
-               if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-                       ee->ee_ob[ee_mode][obdb], 3, 279, 0, TRUE))
-                       return (FALSE);
-
-               if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-                       ee->ee_ob[ee_mode][obdb], 3, 282, 0, TRUE))
-                       return (FALSE);
-       }
-
-#ifdef notyet
-       ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-           ee->ee_x_gain[ee_mode], 2, 270, 0, TRUE);
-       ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-           ee->ee_x_gain[ee_mode], 2, 257, 0, TRUE);
-#endif
-
-       if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[6],
-               ee->ee_xpd[ee_mode], 1, 302, 0, TRUE))
-               return (FALSE);
-
-       /* Modify bank 7 */
-       if (!ath5k_hw_rfregs_op(rf, hal->ah_offset[7],
-               ee->ee_i_gain[ee_mode], 6, 14, 0, TRUE))
-               return (FALSE);
-
-       /* Write RF values */
-       for (i = 0; i < rf_size; i++)
-               AR5K_REG_WRITE(rf_ini[i].rf_register, rf[i]);
-
-       return (TRUE);
-}
-
-AR5K_BOOL
-ath5k_hw_rfgain(struct ath_hal *hal, u_int freq)
-{
-       int i;
-       struct ath5k_ini_rfgain *ath5k_rfg;
-
-       switch (hal->ah_radio) {
-       case AR5K_RF5111:
-               ath5k_rfg = (struct ath5k_ini_rfgain*) &rf5111_ini_rfgain;
-               break;
-       case AR5K_RF5112:
-               ath5k_rfg = (struct ath5k_ini_rfgain*) &rf5112_ini_rfgain;
-               break;
-       default:
-               return (FALSE);
-       }
-
-       switch (freq) {
-       case AR5K_INI_RFGAIN_2GHZ:
-       case AR5K_INI_RFGAIN_5GHZ:
-               break;
-       default:
-               return (FALSE);
-       }
-
-       for (i = 0; i < AR5K_ELEMENTS(ath5k_rfg); i++) {
-               AR5K_REG_WAIT(i);
-               AR5K_REG_WRITE((u_int32_t)ath5k_rfg[i].rfg_register,
-                   ath5k_rfg[i].rfg_value[freq]);
-       }
-
-       return (TRUE);
-}
-
-AR5K_RFGAIN
-ath5k_hw_get_rf_gain(struct ath_hal *hal)
-{
-       u_int32_t data, type;
-
-       AR5K_TRACE;
-
-       if ((hal->ah_rf_banks == NULL) || (!hal->ah_gain.g_active) 
-                       || (hal->ah_version <= AR5K_AR5211))
-               return (AR5K_RFGAIN_INACTIVE);
-
-       if (hal->ah_rf_gain != AR5K_RFGAIN_READ_REQUESTED)
-               goto done;
-
-       data = AR5K_REG_READ(AR5K_PHY_PAPD_PROBE);
-
-       if (!(data & AR5K_PHY_PAPD_PROBE_TX_NEXT)) {
-               hal->ah_gain.g_current =
-                       data >> AR5K_PHY_PAPD_PROBE_GAINF_S;
-               type = AR5K_REG_MS(data, AR5K_PHY_PAPD_PROBE_TYPE);
-
-               if (type == AR5K_PHY_PAPD_PROBE_TYPE_CCK)
-                       hal->ah_gain.g_current += AR5K_GAIN_CCK_PROBE_CORR;
-
-               if (hal->ah_radio == AR5K_RF5112) {
-                       ath5k_hw_rfregs_gainf_corr(hal);
-                       hal->ah_gain.g_current =
-                               hal->ah_gain.g_current >= hal->ah_gain.g_f_corr 
?
-                               (hal->ah_gain.g_current - 
hal->ah_gain.g_f_corr) :
-                               0;
-               }
-
-               if (ath5k_hw_rfregs_gain_readback(hal) &&
-               AR5K_GAIN_CHECK_ADJUST(&hal->ah_gain) &&
-               ath5k_hw_rfregs_gain_adjust(hal))
-                       hal->ah_rf_gain = AR5K_RFGAIN_NEED_CHANGE;
-       }
-
- done:
-       return (hal->ah_rf_gain);
-}
-
-/*
- * TX power setup
- */
-
-/*
- * Initialize the tx power table (not fully implemented)
- */
-void
-ath5k_hw_txpower_table(struct ath_hal *hal, AR5K_CHANNEL *channel, int16_t 
max_power)
-{
-       u_int16_t txpower, *rates;
-       int i, min, max, n;
-
-       rates = hal->ah_txpower.txp_rates;
-
-       txpower = AR5K_TUNE_DEFAULT_TXPOWER * 2;
-       if (max_power > txpower)
-               txpower = max_power > AR5K_TUNE_MAX_TXPOWER ?
-                   AR5K_TUNE_MAX_TXPOWER : max_power;
-
-       for (i = 0; i < AR5K_MAX_RATES; i++)
-               rates[i] = txpower;
-
-       /* XXX setup target powers by rate */
-
-       hal->ah_txpower.txp_min = rates[7];
-       hal->ah_txpower.txp_max = rates[0];
-       hal->ah_txpower.txp_ofdm = rates[0];
-
-       /* Calculate the power table */
-       n = AR5K_ELEMENTS(hal->ah_txpower.txp_pcdac);
-       min = AR5K_EEPROM_PCDAC_START;
-       max = AR5K_EEPROM_PCDAC_STOP;
-       for (i = 0; i < n; i += AR5K_EEPROM_PCDAC_STEP)
-               hal->ah_txpower.txp_pcdac[i] =
-#ifdef notyet
-               min + ((i * (max - min)) / n);
-#else
-               min;
-#endif
-}
-
-/*
- * Set transmition power
- */
-AR5K_BOOL /*O.K. - txpower_table is unimplemented so this doesn't work*/
-ath5k_hw_txpower(struct ath_hal *hal, AR5K_CHANNEL *channel, u_int txpower)
-{
-       AR5K_BOOL tpc = hal->ah_txpower.txp_tpc;
-       int i;
-
-       AR5K_TRACE;
-       if (txpower > AR5K_TUNE_MAX_TXPOWER) {
-               AR5K_PRINTF("invalid tx power: %u\n", txpower);
-               return (FALSE);
-       }
-
-       /* Reset TX power values */
-       memset(&hal->ah_txpower, 0, sizeof(hal->ah_txpower));
-       hal->ah_txpower.txp_tpc = tpc;
-
-       /* Initialize TX power table */
-       ath5k_hw_txpower_table(hal, channel, txpower);
-
-       /* 
-        * Write TX power values
-        */
-       for (i = 0; i < (AR5K_EEPROM_POWER_TABLE_SIZE / 2); i++) {
-               AR5K_REG_WRITE(AR5K_PHY_PCDAC_TXPOWER(i),
-                     ((((hal->ah_txpower.txp_pcdac[(i << 1) + 1] << 8) | 0xff) 
& 0xffff) << 16) 
-                   | ((((hal->ah_txpower.txp_pcdac[(i << 1)    ] << 8) | 0xff) 
& 0xffff)      )
-                   );
-       }
-
-       AR5K_REG_WRITE(AR5K_PHY_TXPOWER_RATE1,
-           AR5K_TXPOWER_OFDM(3, 24) | AR5K_TXPOWER_OFDM(2, 16)
-           | AR5K_TXPOWER_OFDM(1, 8) | AR5K_TXPOWER_OFDM(0, 0));
-
-       AR5K_REG_WRITE(AR5K_PHY_TXPOWER_RATE2,
-           AR5K_TXPOWER_OFDM(7, 24) | AR5K_TXPOWER_OFDM(6, 16)
-           | AR5K_TXPOWER_OFDM(5, 8) | AR5K_TXPOWER_OFDM(4, 0));
-
-       AR5K_REG_WRITE(AR5K_PHY_TXPOWER_RATE3,
-           AR5K_TXPOWER_CCK(10, 24) | AR5K_TXPOWER_CCK(9, 16)
-           | AR5K_TXPOWER_CCK(15, 8) | AR5K_TXPOWER_CCK(8, 0));
-
-       AR5K_REG_WRITE(AR5K_PHY_TXPOWER_RATE4,
-           AR5K_TXPOWER_CCK(14, 24) | AR5K_TXPOWER_CCK(13, 16)
-           | AR5K_TXPOWER_CCK(12, 8) | AR5K_TXPOWER_CCK(11, 0));
-
-       if (hal->ah_txpower.txp_tpc == TRUE) {
-               AR5K_REG_WRITE(AR5K_PHY_TXPOWER_RATE_MAX,
-                   AR5K_PHY_TXPOWER_RATE_MAX_TPC_ENABLE |
-                   AR5K_TUNE_MAX_TXPOWER);
-       } else {
-               AR5K_REG_WRITE(AR5K_PHY_TXPOWER_RATE_MAX,
-                   AR5K_PHY_TXPOWER_RATE_MAX |
-                   AR5K_TUNE_MAX_TXPOWER);
-       }
-
-       return (TRUE);
-}
-
-AR5K_BOOL
-ath5k_hw_set_txpower_limit(struct ath_hal *hal, u_int power)
-{
-       /*Just a try M.F.*/
-       AR5K_CHANNEL *channel = &hal->ah_current_channel;
-
-       AR5K_TRACE;
-       AR5K_PRINTF("changing txpower to %d\n",power);
-       return (ath5k_hw_txpower(hal, channel, power));
-}
-
-
-
-
 /****************\
   Misc functions
 \****************/

Modified: branches/ath5k/ath5k_hw.h
===================================================================
--- branches/ath5k/ath5k_hw.h   2007-08-26 09:34:43 UTC (rev 2670)
+++ branches/ath5k/ath5k_hw.h   2007-08-26 16:17:52 UTC (rev 2671)
@@ -54,12 +54,6 @@
        int32_t                         gos_gain;
 };
 
-struct ath5k_gain_opt {
-       u_int32_t                       go_default;
-       u_int32_t                       go_steps_count;
-       const struct ath5k_gain_opt_step        go_step[AR5K_GAIN_STEP_COUNT];
-};
-
 struct ath5k_gain {
        u_int32_t                       g_step_idx;
        u_int32_t                       g_current;
@@ -71,40 +65,6 @@
        const struct ath5k_gain_opt_step        *g_step;
 };
 
-/*
- * Gain optimization tables...
- */
-#define AR5K_RF5111_GAIN_OPT   {               \
-       4,                                      \
-       9,                                      \
-       {                                       \
-               { { 4, 1, 1, 1 }, 6 },          \
-               { { 4, 0, 1, 1 }, 4 },          \
-               { { 3, 1, 1, 1 }, 3 },          \
-               { { 4, 0, 0, 1 }, 1 },          \
-               { { 4, 1, 1, 0 }, 0 },          \
-               { { 4, 0, 1, 0 }, -2 },         \
-               { { 3, 1, 1, 0 }, -3 },         \
-               { { 4, 0, 0, 0 }, -4 },         \
-               { { 2, 1, 1, 0 }, -6 }          \
-       }                                       \
-}
-
-#define AR5K_RF5112_GAIN_OPT   {                       \
-       1,                                              \
-       8,                                              \
-       {                                               \
-               { { 3, 0, 0, 0, 0, 0, 0 }, 6 },         \
-               { { 2, 0, 0, 0, 0, 0, 0 }, 0 },         \
-               { { 1, 0, 0, 0, 0, 0, 0 }, -3 },        \
-               { { 0, 0, 0, 0, 0, 0, 0 }, -6 },        \
-               { { 0, 1, 1, 0, 0, 0, 0 }, -8 },        \
-               { { 0, 1, 1, 0, 1, 1, 0 }, -10 },       \
-               { { 0, 1, 0, 1, 1, 1, 0 }, -13 },       \
-               { { 0, 1, 0, 1, 1, 0, 1 }, -16 },       \
-       }                                               \
-}
-
 /* 
  * HW SPECIFIC STRUCTS
  */
@@ -652,6 +612,9 @@
  */
 
 /* Register dumps are done per operation mode */
+#define AR5K_INI_RFGAIN_5GHZ   0
+#define AR5K_INI_RFGAIN_2GHZ   1
+
 #define AR5K_INI_VAL_11A               0
 #define AR5K_INI_VAL_11A_TURBO         1
 #define AR5K_INI_VAL_11B               2
@@ -663,1465 +626,17 @@
 #define AR5K_RF5111_INI_RF_MAX_BANKS   AR5K_MAX_RF_BANKS
 #define AR5K_RF5112_INI_RF_MAX_BANKS   AR5K_MAX_RF_BANKS
 
+static inline u_int32_t
+ath5k_hw_bitswap(u_int32_t val, u_int bits)
+{
+       u_int32_t retval = 0, bit, i;
 
-/* Struct to hold initial RF register values (RF Banks)*/
-struct ath5k_ini_rf {
-       u_int8_t        rf_bank;        /* check out ath5kreg.h */
-       u_int16_t       rf_register;    /* register address */
-       u_int32_t       rf_value[5];    /* register value for
-                                          different modes (see avove) */
-};
-
-/* RF5111 mode-specific init registers */
-#define AR5K_RF5111_INI_RF     {                                               
\
-       { 0, 0x989c,                                                            
\
-       /*     mode a/XR  mode aTurbo   mode b     mode g     mode gTurbo */    
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00380000, 0x00380000, 0x00380000, 0x00380000, 0x00380000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x000000c0, 0x00000080, 0x00000080 } },   
\
-       { 0, 0x989c,                                                            
\
-           { 0x000400f9, 0x000400f9, 0x000400ff, 0x000400fd, 0x000400fd } },   
\
-       { 0, 0x98d4,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000004, 0x00000004, 0x00000004 } },   
\
-       { 1, 0x98d4,                                                            
\
-           { 0x00000020, 0x00000020, 0x00000020, 0x00000020, 0x00000020 } },   
\
-       { 2, 0x98d4,                                                            
\
-           { 0x00000010, 0x00000014, 0x00000010, 0x00000010, 0x00000014 } },   
\
-       { 3, 0x98d8,                                                            
\
-           { 0x00601068, 0x00601068, 0x00601068, 0x00601068, 0x00601068 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x10000000, 0x10000000, 0x10000000, 0x10000000, 0x10000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x04000000, 0x04000000, 0x04000000, 0x04000000, 0x04000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x0a000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x003800c0, 0x00380080, 0x023800c0, 0x003800c0, 0x003800c0 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00020006, 0x00020006, 0x00000006, 0x00020006, 0x00020006 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000089, 0x00000089, 0x00000089, 0x00000089, 0x00000089 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x000000a0, 0x000000a0, 0x000000a0, 0x000000a0, 0x000000a0 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00040007, 0x00040007, 0x00040007, 0x00040007, 0x00040007 } },   
\
-       { 6, 0x98d4,                                                            
\
-           { 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a, 0x0000001a } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000040, 0x00000048, 0x00000040, 0x00000040, 0x00000040 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000010, 0x00000010, 0x00000010, 0x00000010, 0x00000010 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000008, 0x00000008, 0x00000008, 0x00000008, 0x00000008 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x0000004f, 0x0000004f, 0x0000004f, 0x0000004f, 0x0000004f } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000000f1, 0x000000f1, 0x00000061, 0x000000f1, 0x000000f1 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x0000904f, 0x0000904f, 0x0000904c, 0x0000904f, 0x0000904f } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x0000125a, 0x0000125a, 0x0000129a, 0x0000125a, 0x0000125a } },   
\
-       { 7, 0x98cc,                                                            
\
-           { 0x0000000e, 0x0000000e, 0x0000000f, 0x0000000e, 0x0000000e } },   
\
-}
-
-/* RF5112 mode-specific init registers */
-#define AR5K_RF5112_INI_RF     {                                               
\
-       { 1, 0x98d4,                                                            
\
-       /*     mode a/XR  mode aTurbo   mode b     mode g     mode gTurbo */    
\
-           { 0x00000020, 0x00000020, 0x00000020, 0x00000020, 0x00000020 } },   
\
-       { 2, 0x98d0,                                                            
\
-           { 0x03060408, 0x03070408, 0x03060408, 0x03060408, 0x03070408 } },   
\
-       { 3, 0x98dc,                                                            
\
-           { 0x00a0c0c0, 0x00a0c0c0, 0x00e0c0c0, 0x00e0c0c0, 0x00e0c0c0 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00a00000, 0x00a00000, 0x00a00000, 0x00a00000, 0x00a00000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x000a0000, 0x000a0000, 0x000a0000, 0x000a0000, 0x000a0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00660000, 0x00660000, 0x00660000, 0x00660000, 0x00660000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00db0000, 0x00db0000, 0x00db0000, 0x00db0000, 0x00db0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00f10000, 0x00f10000, 0x00f10000, 0x00f10000, 0x00f10000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00120000, 0x00120000, 0x00120000, 0x00120000, 0x00120000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00120000, 0x00120000, 0x00120000, 0x00120000, 0x00120000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00730000, 0x00730000, 0x00730000, 0x00730000, 0x00730000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x000c0000, 0x000c0000, 0x000c0000, 0x000c0000, 0x000c0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x008b0000, 0x008b0000, 0x008b0000, 0x008b0000, 0x008b0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00600000, 0x00600000, 0x00600000, 0x00600000, 0x00600000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x000c0000, 0x000c0000, 0x000c0000, 0x000c0000, 0x000c0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00840000, 0x00840000, 0x00840000, 0x00840000, 0x00840000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00640000, 0x00640000, 0x00640000, 0x00640000, 0x00640000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00200000, 0x00200000, 0x00200000, 0x00200000, 0x00200000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00240000, 0x00240000, 0x00240000, 0x00240000, 0x00240000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00250000, 0x00250000, 0x00250000, 0x00250000, 0x00250000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00110000, 0x00110000, 0x00110000, 0x00110000, 0x00110000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00110000, 0x00110000, 0x00110000, 0x00110000, 0x00110000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00510000, 0x00510000, 0x00510000, 0x00510000, 0x00510000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x1c040000, 0x1c040000, 0x1c040000, 0x1c040000, 0x1c040000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x000a0000, 0x000a0000, 0x000a0000, 0x000a0000, 0x000a0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00a10000, 0x00a10000, 0x00a10000, 0x00a10000, 0x00a10000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00400000, 0x00400000, 0x00400000, 0x00400000, 0x00400000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x03090000, 0x03090000, 0x03090000, 0x03090000, 0x03090000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x06000000, 0x06000000, 0x06000000, 0x06000000, 0x06000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x000000b0, 0x000000b0, 0x000000a8, 0x000000a8, 0x000000a8 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x0000002e, 0x0000002e, 0x0000002e, 0x0000002e, 0x0000002e } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x006c4a41, 0x006c4a41, 0x006c4af1, 0x006c4a61, 0x006c4a61 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x0050892a, 0x0050892a, 0x0050892b, 0x0050892b, 0x0050892b } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00842400, 0x00842400, 0x00842400, 0x00842400, 0x00842400 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00c69200, 0x00c69200, 0x00c69200, 0x00c69200, 0x00c69200 } },   
\
-       { 6, 0x98d0,                                                            
\
-           { 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c, 0x0002000c } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000094, 0x00000094, 0x00000094, 0x00000094, 0x00000094 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000091, 0x00000091, 0x00000091, 0x00000091, 0x00000091 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x0000000a, 0x0000000a, 0x00000012, 0x00000012, 0x00000012 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000080, 0x00000080, 0x00000080, 0x00000080, 0x00000080 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000000c1, 0x000000c1, 0x000000c1, 0x000000c1, 0x000000c1 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000060, 0x00000060, 0x00000060, 0x00000060, 0x00000060 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000000f0, 0x000000f0, 0x000000f0, 0x000000f0, 0x000000f0 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000022, 0x00000022, 0x00000022, 0x00000022, 0x00000022 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000092, 0x00000092, 0x00000092, 0x00000092, 0x00000092 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000000d4, 0x000000d4, 0x000000d4, 0x000000d4, 0x000000d4 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000014cc, 0x000014cc, 0x000014cc, 0x000014cc, 0x000014cc } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x0000048c, 0x0000048c, 0x0000048c, 0x0000048c, 0x0000048c } },   
\
-       { 7, 0x98c4,                                                            
\
-           { 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003 } },   
\
+       for (i = 0; i < bits; i++) {
+               bit = (val >> i) & 1;
+               retval = (retval << 1) | bit;
        }
 
-/* RF5112A mode-specific init registers */      
-#define AR5K_RF5112A_INI_RF     {                                              
\
-       { 1, 0x98d4,                                                            
\
-       /*     mode a/XR  mode aTurbo   mode b     mode g     mode gTurbo */    
\
-           { 0x00000020, 0x00000020, 0x00000020, 0x00000020, 0x00000020 } },   
\
-       { 2, 0x98d0,                                                            
\
-           { 0x03060408, 0x03070408, 0x03060408, 0x03060408, 0x03070408 } },   
\
-       { 3, 0x98dc,                                                            
\
-           { 0x00a0c0c0, 0x00a0c0c0, 0x00e0c0c0, 0x00e0c0c0, 0x00e0c0c0 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x0f000000, 0x0f000000, 0x0f000000, 0x0f000000, 0x0f000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00800000, 0x00800000, 0x00800000, 0x00800000, 0x00800000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x002a0000, 0x002a0000, 0x002a0000, 0x002a0000, 0x002a0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00010000, 0x00010000, 0x00010000, 0x00010000, 0x00010000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00180000, 0x00180000, 0x00180000, 0x00180000, 0x00180000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00600000, 0x00600000, 0x006e0000, 0x006e0000, 0x006e0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00c70000, 0x00c70000, 0x00c70000, 0x00c70000, 0x00c70000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x004b0000, 0x004b0000, 0x004b0000, 0x004b0000, 0x004b0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x04480000, 0x04480000, 0x04480000, 0x04480000, 0x04480000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00220000, 0x00220000, 0x00220000, 0x00220000, 0x00220000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00e40000, 0x00e40000, 0x00e40000, 0x00e40000, 0x00e40000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00fc0000, 0x00fc0000, 0x00fc0000, 0x00fc0000, 0x00fc0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000, 0x00ff0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x043f0000, 0x043f0000, 0x043f0000, 0x043f0000, 0x043f0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x000c0000, 0x000c0000, 0x000c0000, 0x000c0000, 0x000c0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00190000, 0x00190000, 0x00190000, 0x00190000, 0x00190000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00240000, 0x00240000, 0x00240000, 0x00240000, 0x00240000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00b40000, 0x00b40000, 0x00b40000, 0x00b40000, 0x00b40000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00990000, 0x00990000, 0x00990000, 0x00990000, 0x00990000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00500000, 0x00500000, 0x00500000, 0x00500000, 0x00500000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x002a0000, 0x002a0000, 0x002a0000, 0x002a0000, 0x002a0000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00120000, 0x00120000, 0x00120000, 0x00120000, 0x00120000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0xc0320000, 0xc0320000, 0xc0320000, 0xc0320000, 0xc0320000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x01740000, 0x01740000, 0x01740000, 0x01740000, 0x01740000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00110000, 0x00110000, 0x00110000, 0x00110000, 0x00110000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x86280000, 0x86280000, 0x86280000, 0x86280000, 0x86280000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x31840000, 0x31840000, 0x31840000, 0x31840000, 0x31840000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00020080, 0x00020080, 0x00020080, 0x00020080, 0x00020080 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00080009, 0x00080009, 0x00080009, 0x00080009, 0x00080009 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x000000b2, 0x000000b2, 0x000000b2, 0x000000b2, 0x000000b2 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00b02084, 0x00b02084, 0x00b02084, 0x00b02084, 0x00b02084 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x004125a4, 0x004125a4, 0x004125a4, 0x004125a4, 0x004125a4 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x00119220, 0x00119220, 0x00119220, 0x00119220, 0x00119220 } },   
\
-       { 6, 0x989c,                                                            
\
-           { 0x001a4800, 0x001a4800, 0x001a4800, 0x001a4800, 0x001a4800 } },   
\
-       { 6, 0x98d8,                                                            
\
-           { 0x000b0230, 0x000b0230, 0x000b0230, 0x000b0230, 0x000b0230 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000094, 0x00000094, 0x00000094, 0x00000094, 0x00000094 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000091, 0x00000091, 0x00000091, 0x00000091, 0x00000091 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000012, 0x00000012, 0x00000012, 0x00000012, 0x00000012 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000080, 0x00000080, 0x00000080, 0x00000080, 0x00000080 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000000d9, 0x000000d9, 0x000000d9, 0x000000d9, 0x000000d9 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000060, 0x00000060, 0x00000060, 0x00000060, 0x00000060 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000000f0, 0x000000f0, 0x000000f0, 0x000000f0, 0x000000f0 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000000a2, 0x000000a2, 0x000000a2, 0x000000a2, 0x000000a2 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x00000052, 0x00000052, 0x00000052, 0x00000052, 0x00000052 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000000d4, 0x000000d4, 0x000000d4, 0x000000d4, 0x000000d4 } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x000014cc, 0x000014cc, 0x000014cc, 0x000014cc, 0x000014cc } },   
\
-       { 7, 0x989c,                                                            
\
-           { 0x0000048c, 0x0000048c, 0x0000048c, 0x0000048c, 0x0000048c } },   
\
-       { 7, 0x98c4,                                                            
\
-           { 0x00000003, 0x00000003, 0x00000003, 0x00000003, 0x00000003 } },   
\
+       return (retval);
 }
 
-/*
- * Mode-specific RF Gain table (64bytes) for RF5111/5112
- * (RF5110 only comes with AR5210 and only supports a/turbo a 
- * mode so initial RF Gain values are included in AR5K_AR5210_INI)
- */
-struct ath5k_ini_rfgain {
-       u_int16_t       rfg_register;           /* RF Gain register address */
-       u_int32_t       rfg_value[2];           /* Register value [freq (see 
below)] */
 
-#define AR5K_INI_RFGAIN_5GHZ   0
-#define AR5K_INI_RFGAIN_2GHZ   1
-};
-
-/* Initial RF Gain settings for RF5111 */
-#define AR5K_RF5111_INI_RFGAIN {                               \
-       /*                            5Ghz      2Ghz    */      \
-       { AR5K_RF_GAIN(0),      { 0x000001a9, 0x00000000 } },   \
-       { AR5K_RF_GAIN(1),      { 0x000001e9, 0x00000040 } },   \
-       { AR5K_RF_GAIN(2),      { 0x00000029, 0x00000080 } },   \
-       { AR5K_RF_GAIN(3),      { 0x00000069, 0x00000150 } },   \
-       { AR5K_RF_GAIN(4),      { 0x00000199, 0x00000190 } },   \
-       { AR5K_RF_GAIN(5),      { 0x000001d9, 0x000001d0 } },   \
-       { AR5K_RF_GAIN(6),      { 0x00000019, 0x00000010 } },   \
-       { AR5K_RF_GAIN(7),      { 0x00000059, 0x00000044 } },   \
-       { AR5K_RF_GAIN(8),      { 0x00000099, 0x00000084 } },   \
-       { AR5K_RF_GAIN(9),      { 0x000001a5, 0x00000148 } },   \
-       { AR5K_RF_GAIN(10),     { 0x000001e5, 0x00000188 } },   \
-       { AR5K_RF_GAIN(11),     { 0x00000025, 0x000001c8 } },   \
-       { AR5K_RF_GAIN(12),     { 0x000001c8, 0x00000014 } },   \
-       { AR5K_RF_GAIN(13),     { 0x00000008, 0x00000042 } },   \
-       { AR5K_RF_GAIN(14),     { 0x00000048, 0x00000082 } },   \
-       { AR5K_RF_GAIN(15),     { 0x00000088, 0x00000178 } },   \
-       { AR5K_RF_GAIN(16),     { 0x00000198, 0x000001b8 } },   \
-       { AR5K_RF_GAIN(17),     { 0x000001d8, 0x000001f8 } },   \
-       { AR5K_RF_GAIN(18),     { 0x00000018, 0x00000012 } },   \
-       { AR5K_RF_GAIN(19),     { 0x00000058, 0x00000052 } },   \
-       { AR5K_RF_GAIN(20),     { 0x00000098, 0x00000092 } },   \
-       { AR5K_RF_GAIN(21),     { 0x000001a4, 0x0000017c } },   \
-       { AR5K_RF_GAIN(22),     { 0x000001e4, 0x000001bc } },   \
-       { AR5K_RF_GAIN(23),     { 0x00000024, 0x000001fc } },   \
-       { AR5K_RF_GAIN(24),     { 0x00000064, 0x0000000a } },   \
-       { AR5K_RF_GAIN(25),     { 0x000000a4, 0x0000004a } },   \
-       { AR5K_RF_GAIN(26),     { 0x000000e4, 0x0000008a } },   \
-       { AR5K_RF_GAIN(27),     { 0x0000010a, 0x0000015a } },   \
-       { AR5K_RF_GAIN(28),     { 0x0000014a, 0x0000019a } },   \
-       { AR5K_RF_GAIN(29),     { 0x0000018a, 0x000001da } },   \
-       { AR5K_RF_GAIN(30),     { 0x000001ca, 0x0000000e } },   \
-       { AR5K_RF_GAIN(31),     { 0x0000000a, 0x0000004e } },   \
-       { AR5K_RF_GAIN(32),     { 0x0000004a, 0x0000008e } },   \
-       { AR5K_RF_GAIN(33),     { 0x0000008a, 0x0000015e } },   \
-       { AR5K_RF_GAIN(34),     { 0x000001ba, 0x0000019e } },   \
-       { AR5K_RF_GAIN(35),     { 0x000001fa, 0x000001de } },   \
-       { AR5K_RF_GAIN(36),     { 0x0000003a, 0x00000009 } },   \
-       { AR5K_RF_GAIN(37),     { 0x0000007a, 0x00000049 } },   \
-       { AR5K_RF_GAIN(38),     { 0x00000186, 0x00000089 } },   \
-       { AR5K_RF_GAIN(39),     { 0x000001c6, 0x00000179 } },   \
-       { AR5K_RF_GAIN(40),     { 0x00000006, 0x000001b9 } },   \
-       { AR5K_RF_GAIN(41),     { 0x00000046, 0x000001f9 } },   \
-       { AR5K_RF_GAIN(42),     { 0x00000086, 0x00000039 } },   \
-       { AR5K_RF_GAIN(43),     { 0x000000c6, 0x00000079 } },   \
-       { AR5K_RF_GAIN(44),     { 0x000000c6, 0x000000b9 } },   \
-       { AR5K_RF_GAIN(45),     { 0x000000c6, 0x000001bd } },   \
-       { AR5K_RF_GAIN(46),     { 0x000000c6, 0x000001fd } },   \
-       { AR5K_RF_GAIN(47),     { 0x000000c6, 0x0000003d } },   \
-       { AR5K_RF_GAIN(48),     { 0x000000c6, 0x0000007d } },   \
-       { AR5K_RF_GAIN(49),     { 0x000000c6, 0x000000bd } },   \
-       { AR5K_RF_GAIN(50),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(51),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(52),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(53),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(54),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(55),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(56),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(57),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(58),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(59),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(60),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(61),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(62),     { 0x000000c6, 0x000000fd } },   \
-       { AR5K_RF_GAIN(63),     { 0x000000c6, 0x000000fd } },   \
-}
-
-/* Initial RF Gain settings for RF5112 */
-#define AR5K_RF5112_INI_RFGAIN {                               \
-       /*                            5Ghz      2Ghz    */      \
-       { AR5K_RF_GAIN(0),      { 0x00000007, 0x00000007 } },   \
-       { AR5K_RF_GAIN(1),      { 0x00000047, 0x00000047 } },   \
-       { AR5K_RF_GAIN(2),      { 0x00000087, 0x00000087 } },   \
-       { AR5K_RF_GAIN(3),      { 0x000001a0, 0x000001a0 } },   \
-       { AR5K_RF_GAIN(4),      { 0x000001e0, 0x000001e0 } },   \
-       { AR5K_RF_GAIN(5),      { 0x00000020, 0x00000020 } },   \
-       { AR5K_RF_GAIN(6),      { 0x00000060, 0x00000060 } },   \
-       { AR5K_RF_GAIN(7),      { 0x000001a1, 0x000001a1 } },   \
-       { AR5K_RF_GAIN(8),      { 0x000001e1, 0x000001e1 } },   \
-       { AR5K_RF_GAIN(9),      { 0x00000021, 0x00000021 } },   \
-       { AR5K_RF_GAIN(10),     { 0x00000061, 0x00000061 } },   \
-       { AR5K_RF_GAIN(11),     { 0x00000162, 0x00000162 } },   \
-       { AR5K_RF_GAIN(12),     { 0x000001a2, 0x000001a2 } },   \
-       { AR5K_RF_GAIN(13),     { 0x000001e2, 0x000001e2 } },   \
-       { AR5K_RF_GAIN(14),     { 0x00000022, 0x00000022 } },   \
-       { AR5K_RF_GAIN(15),     { 0x00000062, 0x00000062 } },   \
-       { AR5K_RF_GAIN(16),     { 0x00000163, 0x00000163 } },   \
-       { AR5K_RF_GAIN(17),     { 0x000001a3, 0x000001a3 } },   \
-       { AR5K_RF_GAIN(18),     { 0x000001e3, 0x000001e3 } },   \
-       { AR5K_RF_GAIN(19),     { 0x00000023, 0x00000023 } },   \
-       { AR5K_RF_GAIN(20),     { 0x00000063, 0x00000063 } },   \
-       { AR5K_RF_GAIN(21),     { 0x00000184, 0x00000184 } },   \
-       { AR5K_RF_GAIN(22),     { 0x000001c4, 0x000001c4 } },   \
-       { AR5K_RF_GAIN(23),     { 0x00000004, 0x00000004 } },   \
-       { AR5K_RF_GAIN(24),     { 0x000001ea, 0x0000000b } },   \
-       { AR5K_RF_GAIN(25),     { 0x0000002a, 0x0000004b } },   \
-       { AR5K_RF_GAIN(26),     { 0x0000006a, 0x0000008b } },   \
-       { AR5K_RF_GAIN(27),     { 0x000000aa, 0x000001ac } },   \
-       { AR5K_RF_GAIN(28),     { 0x000001ab, 0x000001ec } },   \
-       { AR5K_RF_GAIN(29),     { 0x000001eb, 0x0000002c } },   \
-       { AR5K_RF_GAIN(30),     { 0x0000002b, 0x00000012 } },   \
-       { AR5K_RF_GAIN(31),     { 0x0000006b, 0x00000052 } },   \
-       { AR5K_RF_GAIN(32),     { 0x000000ab, 0x00000092 } },   \
-       { AR5K_RF_GAIN(33),     { 0x000001ac, 0x00000193 } },   \
-       { AR5K_RF_GAIN(34),     { 0x000001ec, 0x000001d3 } },   \
-       { AR5K_RF_GAIN(35),     { 0x0000002c, 0x00000013 } },   \
-       { AR5K_RF_GAIN(36),     { 0x0000003a, 0x00000053 } },   \
-       { AR5K_RF_GAIN(37),     { 0x0000007a, 0x00000093 } },   \
-       { AR5K_RF_GAIN(38),     { 0x000000ba, 0x00000194 } },   \
-       { AR5K_RF_GAIN(39),     { 0x000001bb, 0x000001d4 } },   \
-       { AR5K_RF_GAIN(40),     { 0x000001fb, 0x00000014 } },   \
-       { AR5K_RF_GAIN(41),     { 0x0000003b, 0x0000003a } },   \
-       { AR5K_RF_GAIN(42),     { 0x0000007b, 0x0000007a } },   \
-       { AR5K_RF_GAIN(43),     { 0x000000bb, 0x000000ba } },   \
-       { AR5K_RF_GAIN(44),     { 0x000001bc, 0x000001bb } },   \
-       { AR5K_RF_GAIN(45),     { 0x000001fc, 0x000001fb } },   \
-       { AR5K_RF_GAIN(46),     { 0x0000003c, 0x0000003b } },   \
-       { AR5K_RF_GAIN(47),     { 0x0000007c, 0x0000007b } },   \
-       { AR5K_RF_GAIN(48),     { 0x000000bc, 0x000000bb } },   \
-       { AR5K_RF_GAIN(49),     { 0x000000fc, 0x000001bc } },   \
-       { AR5K_RF_GAIN(50),     { 0x000000fc, 0x000001fc } },   \
-       { AR5K_RF_GAIN(51),     { 0x000000fc, 0x0000003c } },   \
-       { AR5K_RF_GAIN(52),     { 0x000000fc, 0x0000007c } },   \
-       { AR5K_RF_GAIN(53),     { 0x000000fc, 0x000000bc } },   \
-       { AR5K_RF_GAIN(54),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(55),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(56),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(57),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(58),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(59),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(60),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(61),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(62),     { 0x000000fc, 0x000000fc } },   \
-       { AR5K_RF_GAIN(63),     { 0x000000fc, 0x000000fc } },   \
-}
-
-
-
-/*
- * MAC/PHY REGISTERS
- */
-
-/*
- * Mode-independed initial register writes
- */
-
-struct ath5k_ini {
-       u_int16_t       ini_register;
-       u_int32_t       ini_value;
-
-       enum {
-               AR5K_INI_WRITE = 0,     /* Default */
-               AR5K_INI_READ = 1,      /* Cleared on read */
-       } ini_mode;
-};
-
-/* Initial register settings for AR5210 */
-#define AR5K_AR5210_INI {              \
-       /* PCU and MAC registers */     \
-       { AR5K_NOQCU_TXDP0,     0 },    \
-       { AR5K_NOQCU_TXDP1,     0 },    \
-       { AR5K_RXDP,            0 },    \
-       { AR5K_CR,              0 },    \
-       { AR5K_ISR,             0, AR5K_INI_READ },     \
-       { AR5K_IMR,             0 },    \
-       { AR5K_IER,             AR5K_IER_DISABLE },     \
-       { AR5K_BSR,             0, AR5K_INI_READ },     \
-       { AR5K_TXCFG,           AR5K_DMASIZE_128B },    \
-       { AR5K_RXCFG,           AR5K_DMASIZE_128B },    \
-       { AR5K_CFG,             AR5K_INIT_CFG },        \
-       { AR5K_TOPS,            AR5K_INIT_TOPS },       \
-       { AR5K_RXNOFRM,         AR5K_INIT_RXNOFRM },    \
-       { AR5K_RPGTO,           AR5K_INIT_RPGTO },      \
-       { AR5K_TXNOFRM,         AR5K_INIT_TXNOFRM },    \
-       { AR5K_SFR,             0 },    \
-       { AR5K_MIBC,            0 },    \
-       { AR5K_MISC,            0 },    \
-       { AR5K_RX_FILTER_5210,  0 },    \
-       { AR5K_MCAST_FILTER0_5210, 0 }, \
-       { AR5K_MCAST_FILTER1_5210, 0 }, \
-       { AR5K_TX_MASK0,        0 },    \
-       { AR5K_TX_MASK1,        0 },    \
-       { AR5K_CLR_TMASK,       0 },    \
-       { AR5K_TRIG_LVL,        AR5K_TUNE_MIN_TX_FIFO_THRES },  \
-       { AR5K_DIAG_SW_5210,    0 },    \
-       { AR5K_RSSI_THR,        AR5K_TUNE_RSSI_THRES }, \
-       { AR5K_TSF_L32_5210,    0 },    \
-       { AR5K_TIMER0_5210,     0 },    \
-       { AR5K_TIMER1_5210,     0xffffffff },   \
-       { AR5K_TIMER2_5210,     0xffffffff },   \
-       { AR5K_TIMER3_5210,     1 },    \
-       { AR5K_CFP_DUR_5210,    0 },    \
-       { AR5K_CFP_PERIOD_5210, 0 },    \
-       /* PHY registers */             \
-       { AR5K_PHY(0),  0x00000047 },   \
-       { AR5K_PHY_AGC, 0x00000000 },   \
-       { AR5K_PHY(3),  0x09848ea6 },   \
-       { AR5K_PHY(4),  0x3d32e000 },   \
-       { AR5K_PHY(5),  0x0000076b },   \
-       { AR5K_PHY_ACT, AR5K_PHY_ACT_DISABLE }, \
-       { AR5K_PHY(8),  0x02020200 },   \
-       { AR5K_PHY(9),  0x00000e0e },   \
-       { AR5K_PHY(10), 0x0a020201 },   \
-       { AR5K_PHY(11), 0x00036ffc },   \
-       { AR5K_PHY(12), 0x00000000 },   \
-       { AR5K_PHY(13), 0x00000e0e },   \
-       { AR5K_PHY(14), 0x00000007 },   \
-       { AR5K_PHY(15), 0x00020100 },   \
-       { AR5K_PHY(16), 0x89630000 },   \
-       { AR5K_PHY(17), 0x1372169c },   \
-       { AR5K_PHY(18), 0x0018b633 },   \
-       { AR5K_PHY(19), 0x1284613c },   \
-       { AR5K_PHY(20), 0x0de8b8e0 },   \
-       { AR5K_PHY(21), 0x00074859 },   \
-       { AR5K_PHY(22), 0x7e80beba },   \
-       { AR5K_PHY(23), 0x313a665e },   \
-       { AR5K_PHY_AGCCTL, 0x00001d08 },\
-       { AR5K_PHY(25), 0x0001ce00 },   \
-       { AR5K_PHY(26), 0x409a4190 },   \
-       { AR5K_PHY(28), 0x0000000f },   \
-       { AR5K_PHY(29), 0x00000080 },   \
-       { AR5K_PHY(30), 0x00000004 },   \
-       { AR5K_PHY(31), 0x00000018 },   /* 0x987c */    \
-       { AR5K_PHY(64), 0x00000000 },   /* 0x9900 */    \
-       { AR5K_PHY(65), 0x00000000 },   \
-       { AR5K_PHY(66), 0x00000000 },   \
-       { AR5K_PHY(67), 0x00800000 },   \
-       { AR5K_PHY(68), 0x00000003 },   \
-       /* BB gain table (64bytes) */   \
-       { AR5K_BB_GAIN(0), 0x00000000 },        \
-       { AR5K_BB_GAIN(1), 0x00000020 },        \
-       { AR5K_BB_GAIN(2), 0x00000010 },        \
-       { AR5K_BB_GAIN(3), 0x00000030 },        \
-       { AR5K_BB_GAIN(4), 0x00000008 },        \
-       { AR5K_BB_GAIN(5), 0x00000028 },        \
-       { AR5K_BB_GAIN(6), 0x00000028 },        \
-       { AR5K_BB_GAIN(7), 0x00000004 },        \
-       { AR5K_BB_GAIN(8), 0x00000024 },        \
-       { AR5K_BB_GAIN(9), 0x00000014 },        \
-       { AR5K_BB_GAIN(10), 0x00000034 },       \
-       { AR5K_BB_GAIN(11), 0x0000000c },       \
-       { AR5K_BB_GAIN(12), 0x0000002c },       \
-       { AR5K_BB_GAIN(13), 0x00000002 },       \
-       { AR5K_BB_GAIN(14), 0x00000022 },       \
-       { AR5K_BB_GAIN(15), 0x00000012 },       \
-       { AR5K_BB_GAIN(16), 0x00000032 },       \
-       { AR5K_BB_GAIN(17), 0x0000000a },       \
-       { AR5K_BB_GAIN(18), 0x0000002a },       \
-       { AR5K_BB_GAIN(19), 0x00000001 },       \
-       { AR5K_BB_GAIN(20), 0x00000021 },       \
-       { AR5K_BB_GAIN(21), 0x00000011 },       \
-       { AR5K_BB_GAIN(22), 0x00000031 },       \
-       { AR5K_BB_GAIN(23), 0x00000009 },       \
-       { AR5K_BB_GAIN(24), 0x00000029 },       \
-       { AR5K_BB_GAIN(25), 0x00000005 },       \
-       { AR5K_BB_GAIN(26), 0x00000025 },       \
-       { AR5K_BB_GAIN(27), 0x00000015 },       \
-       { AR5K_BB_GAIN(28), 0x00000035 },       \
-       { AR5K_BB_GAIN(29), 0x0000000d },       \
-       { AR5K_BB_GAIN(30), 0x0000002d },       \
-       { AR5K_BB_GAIN(31), 0x00000003 },       \
-       { AR5K_BB_GAIN(32), 0x00000023 },       \
-       { AR5K_BB_GAIN(33), 0x00000013 },       \
-       { AR5K_BB_GAIN(34), 0x00000033 },       \
-       { AR5K_BB_GAIN(35), 0x0000000b },       \
-       { AR5K_BB_GAIN(36), 0x0000002b },       \
-       { AR5K_BB_GAIN(37), 0x00000007 },       \
-       { AR5K_BB_GAIN(38), 0x00000027 },       \
-       { AR5K_BB_GAIN(39), 0x00000017 },       \
-       { AR5K_BB_GAIN(40), 0x00000037 },       \
-       { AR5K_BB_GAIN(41), 0x0000000f },       \
-       { AR5K_BB_GAIN(42), 0x0000002f },       \
-       { AR5K_BB_GAIN(43), 0x0000002f },       \
-       { AR5K_BB_GAIN(44), 0x0000002f },       \
-       { AR5K_BB_GAIN(45), 0x0000002f },       \
-       { AR5K_BB_GAIN(46), 0x0000002f },       \
-       { AR5K_BB_GAIN(47), 0x0000002f },       \
-       { AR5K_BB_GAIN(48), 0x0000002f },       \
-       { AR5K_BB_GAIN(49), 0x0000002f },       \
-       { AR5K_BB_GAIN(50), 0x0000002f },       \
-       { AR5K_BB_GAIN(51), 0x0000002f },       \
-       { AR5K_BB_GAIN(52), 0x0000002f },       \
-       { AR5K_BB_GAIN(53), 0x0000002f },       \
-       { AR5K_BB_GAIN(54), 0x0000002f },       \
-       { AR5K_BB_GAIN(55), 0x0000002f },       \
-       { AR5K_BB_GAIN(56), 0x0000002f },       \
-       { AR5K_BB_GAIN(57), 0x0000002f },       \
-       { AR5K_BB_GAIN(58), 0x0000002f },       \
-       { AR5K_BB_GAIN(59), 0x0000002f },       \
-       { AR5K_BB_GAIN(60), 0x0000002f },       \
-       { AR5K_BB_GAIN(61), 0x0000002f },       \
-       { AR5K_BB_GAIN(62), 0x0000002f },       \
-       { AR5K_BB_GAIN(63), 0x0000002f },       \
-       /* 5110 RF gain table (64btes) */       \
-       { AR5K_RF_GAIN(0), 0x0000001d },        \
-       { AR5K_RF_GAIN(1), 0x0000005d },        \
-       { AR5K_RF_GAIN(2), 0x0000009d },        \
-       { AR5K_RF_GAIN(3), 0x000000dd },        \
-       { AR5K_RF_GAIN(4), 0x0000011d },        \
-       { AR5K_RF_GAIN(5), 0x00000021 },        \
-       { AR5K_RF_GAIN(6), 0x00000061 },        \
-       { AR5K_RF_GAIN(7), 0x000000a1 },        \
-       { AR5K_RF_GAIN(8), 0x000000e1 },        \
-       { AR5K_RF_GAIN(9), 0x00000031 },        \
-       { AR5K_RF_GAIN(10), 0x00000071 },       \
-       { AR5K_RF_GAIN(11), 0x000000b1 },       \
-       { AR5K_RF_GAIN(12), 0x0000001c },       \
-       { AR5K_RF_GAIN(13), 0x0000005c },       \
-       { AR5K_RF_GAIN(14), 0x00000029 },       \
-       { AR5K_RF_GAIN(15), 0x00000069 },       \
-       { AR5K_RF_GAIN(16), 0x000000a9 },       \
-       { AR5K_RF_GAIN(17), 0x00000020 },       \
-       { AR5K_RF_GAIN(18), 0x00000019 },       \
-       { AR5K_RF_GAIN(19), 0x00000059 },       \
-       { AR5K_RF_GAIN(20), 0x00000099 },       \
-       { AR5K_RF_GAIN(21), 0x00000030 },       \
-       { AR5K_RF_GAIN(22), 0x00000005 },       \
-       { AR5K_RF_GAIN(23), 0x00000025 },       \
-       { AR5K_RF_GAIN(24), 0x00000065 },       \
-       { AR5K_RF_GAIN(25), 0x000000a5 },       \
-       { AR5K_RF_GAIN(26), 0x00000028 },       \
-       { AR5K_RF_GAIN(27), 0x00000068 },       \
-       { AR5K_RF_GAIN(28), 0x0000001f },       \
-       { AR5K_RF_GAIN(29), 0x0000001e },       \
-       { AR5K_RF_GAIN(30), 0x00000018 },       \
-       { AR5K_RF_GAIN(31), 0x00000058 },       \
-       { AR5K_RF_GAIN(32), 0x00000098 },       \
-       { AR5K_RF_GAIN(33), 0x00000003 },       \
-       { AR5K_RF_GAIN(34), 0x00000004 },       \
-       { AR5K_RF_GAIN(35), 0x00000044 },       \
-       { AR5K_RF_GAIN(36), 0x00000084 },       \
-       { AR5K_RF_GAIN(37), 0x00000013 },       \
-       { AR5K_RF_GAIN(38), 0x00000012 },       \
-       { AR5K_RF_GAIN(39), 0x00000052 },       \
-       { AR5K_RF_GAIN(40), 0x00000092 },       \
-       { AR5K_RF_GAIN(41), 0x000000d2 },       \
-       { AR5K_RF_GAIN(42), 0x0000002b },       \
-       { AR5K_RF_GAIN(43), 0x0000002a },       \
-       { AR5K_RF_GAIN(44), 0x0000006a },       \
-       { AR5K_RF_GAIN(45), 0x000000aa },       \
-       { AR5K_RF_GAIN(46), 0x0000001b },       \
-       { AR5K_RF_GAIN(47), 0x0000001a },       \
-       { AR5K_RF_GAIN(48), 0x0000005a },       \
-       { AR5K_RF_GAIN(49), 0x0000009a },       \
-       { AR5K_RF_GAIN(50), 0x000000da },       \
-       { AR5K_RF_GAIN(51), 0x00000006 },       \
-       { AR5K_RF_GAIN(52), 0x00000006 },       \
-       { AR5K_RF_GAIN(53), 0x00000006 },       \
-       { AR5K_RF_GAIN(54), 0x00000006 },       \
-       { AR5K_RF_GAIN(55), 0x00000006 },       \
-       { AR5K_RF_GAIN(56), 0x00000006 },       \
-       { AR5K_RF_GAIN(57), 0x00000006 },       \
-       { AR5K_RF_GAIN(58), 0x00000006 },       \
-       { AR5K_RF_GAIN(59), 0x00000006 },       \
-       { AR5K_RF_GAIN(60), 0x00000006 },       \
-       { AR5K_RF_GAIN(61), 0x00000006 },       \
-       { AR5K_RF_GAIN(62), 0x00000006 },       \
-       { AR5K_RF_GAIN(63), 0x00000006 },       \
-       /* PHY activation */                    \
-       { AR5K_PHY(53), 0x00000020 },           \
-       { AR5K_PHY(51), 0x00000004 },           \
-       { AR5K_PHY(50), 0x00060106 },           \
-       { AR5K_PHY(39), 0x0000006d },           \
-       { AR5K_PHY(48), 0x00000000 },           \
-       { AR5K_PHY(52), 0x00000014 },           \
-       { AR5K_PHY_ACT, AR5K_PHY_ACT_ENABLE },  \
-}
-
-
-/* Initial register settings for AR5211 */
-#define AR5K_AR5211_INI {                      \
-       { AR5K_RXDP,            0x00000000 },   \
-       { AR5K_RTSD0,           0x84849c9c },   \
-       { AR5K_RTSD1,           0x7c7c7c7c },   \
-       { AR5K_RXCFG,           0x00000005 },   \
-       { AR5K_MIBC,            0x00000000 },   \
-       { AR5K_TOPS,            0x00000008 },   \
-       { AR5K_RXNOFRM,         0x00000008 },   \
-       { AR5K_TXNOFRM,         0x00000010 },   \
-       { AR5K_RPGTO,           0x00000000 },   \
-       { AR5K_RFCNT,           0x0000001f },   \
-       { AR5K_QUEUE_TXDP(0),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(1),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(2),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(3),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(4),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(5),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(6),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(7),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(8),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(9),   0x00000000 },   \
-       { AR5K_DCU_FP,          0x00000000 },   \
-       { AR5K_STA_ID1,         0x00000000 },   \
-       { AR5K_BSS_ID0,         0x00000000 },   \
-       { AR5K_BSS_ID1,         0x00000000 },   \
-       { AR5K_RSSI_THR,        0x00000000 },   \
-       { AR5K_CFP_PERIOD_5211, 0x00000000 },   \
-       { AR5K_TIMER0_5211,     0x00000030 },   \
-       { AR5K_TIMER1_5211,     0x0007ffff },   \
-       { AR5K_TIMER2_5211,     0x01ffffff },   \
-       { AR5K_TIMER3_5211,     0x00000031 },   \
-       { AR5K_CFP_DUR_5211,    0x00000000 },   \
-       { AR5K_RX_FILTER_5211,  0x00000000 },   \
-       { AR5K_MCAST_FILTER0_5211, 0x00000000 },\
-       { AR5K_MCAST_FILTER1_5211, 0x00000002 },\
-       { AR5K_DIAG_SW_5211,    0x00000000 },   \
-       { AR5K_ADDAC_TEST,      0x00000000 },   \
-       { AR5K_DEFAULT_ANTENNA, 0x00000000 },   \
-        /* PHY registers */                    \
-       { AR5K_PHY_AGC, 0x00000000 },           \
-       { AR5K_PHY(3),  0x2d849093 },           \
-       { AR5K_PHY(4),  0x7d32e000 },           \
-       { AR5K_PHY(5),  0x00000f6b },           \
-       { AR5K_PHY_ACT, 0x00000000 },           \
-       { AR5K_PHY(11), 0x00026ffe },           \
-       { AR5K_PHY(12), 0x00000000 },           \
-       { AR5K_PHY(15), 0x00020100 },           \
-       { AR5K_PHY(16), 0x206a017a },           \
-       { AR5K_PHY(19), 0x1284613c },           \
-       { AR5K_PHY(21), 0x00000859 },           \
-       { AR5K_PHY(26), 0x409a4190 },   /* 0x9868 */    \
-       { AR5K_PHY(27), 0x050cb081 },           \
-       { AR5K_PHY(28), 0x0000000f },           \
-       { AR5K_PHY(29), 0x00000080 },           \
-       { AR5K_PHY(30), 0x0000000c },           \
-       { AR5K_PHY(64), 0x00000000 },           \
-       { AR5K_PHY(65), 0x00000000 },           \
-       { AR5K_PHY(66), 0x00000000 },           \
-       { AR5K_PHY(67), 0x00800000 },           \
-       { AR5K_PHY(68), 0x00000001 },           \
-       { AR5K_PHY(71), 0x0000092a },           \
-       { AR5K_PHY_IQ,  0x00000000 },           \
-       { AR5K_PHY(73), 0x00058a05 },           \
-       { AR5K_PHY(74), 0x00000001 },           \
-       { AR5K_PHY(75), 0x00000000 },           \
-       { AR5K_PHY_PAPD_PROBE, 0x00000000 },    \
-       { AR5K_PHY(77), 0x00000000 },   /* 0x9934 */    \
-       { AR5K_PHY(78), 0x00000000 },   /* 0x9938 */    \
-       { AR5K_PHY(79), 0x0000003f },   /* 0x993c */    \
-       { AR5K_PHY(80), 0x00000004 },           \
-       { AR5K_PHY(82), 0x00000000 },           \
-       { AR5K_PHY(83), 0x00000000 },           \
-       { AR5K_PHY(84), 0x00000000 },           \
-       { AR5K_PHY_RADAR, 0x5d50f14c },         \
-       { AR5K_PHY(86), 0x00000018 },           \
-       { AR5K_PHY(87), 0x004b6a8e },           \
-       /* Power table (32bytes) */                     \
-       { AR5K_PHY_PCDAC_TXPOWER(1), 0x06ff05ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(2), 0x07ff07ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(3), 0x08ff08ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(4), 0x09ff09ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(5), 0x0aff0aff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(6), 0x0bff0bff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(7), 0x0cff0cff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(8), 0x0dff0dff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(9), 0x0fff0eff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(10), 0x12ff12ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(11), 0x14ff13ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(12), 0x16ff15ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(13), 0x19ff17ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(14), 0x1bff1aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(15), 0x1eff1dff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(16), 0x23ff20ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(17), 0x27ff25ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(18), 0x2cff29ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(19), 0x31ff2fff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(20), 0x37ff34ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(21), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(22), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(23), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(24), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(25), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(26), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(27), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(28), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(29), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(30), 0x3aff3aff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(31), 0x3aff3aff },     \
-       { AR5K_PHY_CCKTXCTL, 0x00000000 },      \
-       { AR5K_PHY(642), 0x503e4646 },          \
-       { AR5K_PHY_GAIN_2GHZ, 0x6480416c },     \
-       { AR5K_PHY(644), 0x0199a003 },          \
-       { AR5K_PHY(645), 0x044cd610 },          \
-       { AR5K_PHY(646), 0x13800040 },          \
-       { AR5K_PHY(647), 0x1be00060 },          \
-       { AR5K_PHY(648), 0x0c53800a },          \
-       { AR5K_PHY(649), 0x0014df3b },          \
-       { AR5K_PHY(650), 0x000001b5 },          \
-       { AR5K_PHY(651), 0x00000020 },          \
-}
-
-/* Initial register settings for AR5212 */
-#define AR5K_AR5212_INI {                      \
-       { AR5K_RXDP,            0x00000000 },   \
-       { AR5K_RXCFG,           0x00000005 },   \
-       { AR5K_MIBC,            0x00000000 },   \
-       { AR5K_TOPS,            0x00000008 },   \
-       { AR5K_RXNOFRM,         0x00000008 },   \
-       { AR5K_TXNOFRM,         0x00000010 },   \
-       { AR5K_RPGTO,           0x00000000 },   \
-       { AR5K_RFCNT,           0x0000001f },   \
-       { AR5K_QUEUE_TXDP(0),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(1),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(2),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(3),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(4),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(5),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(6),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(7),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(8),   0x00000000 },   \
-       { AR5K_QUEUE_TXDP(9),   0x00000000 },   \
-       { AR5K_DCU_FP,          0x00000000 },   \
-       { AR5K_DCU_TXP,         0x00000000 },   \
-       { AR5K_DCU_TX_FILTER,   0x00000000 },   \
-       /* Unknown table */                     \
-       { 0x1078, 0x00000000 },                 \
-       { 0x10b8, 0x00000000 },                 \
-       { 0x10f8, 0x00000000 },                 \
-       { 0x1138, 0x00000000 },                 \
-       { 0x1178, 0x00000000 },                 \
-       { 0x11b8, 0x00000000 },                 \
-       { 0x11f8, 0x00000000 },                 \
-       { 0x1238, 0x00000000 },                 \
-       { 0x1278, 0x00000000 },                 \
-       { 0x12b8, 0x00000000 },                 \
-       { 0x12f8, 0x00000000 },                 \
-       { 0x1338, 0x00000000 },                 \
-       { 0x1378, 0x00000000 },                 \
-       { 0x13b8, 0x00000000 },                 \
-       { 0x13f8, 0x00000000 },                 \
-       { 0x1438, 0x00000000 },                 \
-       { 0x1478, 0x00000000 },                 \
-       { 0x14b8, 0x00000000 },                 \
-       { 0x14f8, 0x00000000 },                 \
-       { 0x1538, 0x00000000 },                 \
-       { 0x1578, 0x00000000 },                 \
-       { 0x15b8, 0x00000000 },                 \
-       { 0x15f8, 0x00000000 },                 \
-       { 0x1638, 0x00000000 },                 \
-       { 0x1678, 0x00000000 },                 \
-       { 0x16b8, 0x00000000 },                 \
-       { 0x16f8, 0x00000000 },                 \
-       { 0x1738, 0x00000000 },                 \
-       { 0x1778, 0x00000000 },                 \
-       { 0x17b8, 0x00000000 },                 \
-       { 0x17f8, 0x00000000 },                 \
-       { 0x103c, 0x00000000 },                 \
-       { 0x107c, 0x00000000 },                 \
-       { 0x10bc, 0x00000000 },                 \
-       { 0x10fc, 0x00000000 },                 \
-       { 0x113c, 0x00000000 },                 \
-       { 0x117c, 0x00000000 },                 \
-       { 0x11bc, 0x00000000 },                 \
-       { 0x11fc, 0x00000000 },                 \
-       { 0x123c, 0x00000000 },                 \
-       { 0x127c, 0x00000000 },                 \
-       { 0x12bc, 0x00000000 },                 \
-       { 0x12fc, 0x00000000 },                 \
-       { 0x133c, 0x00000000 },                 \
-       { 0x137c, 0x00000000 },                 \
-       { 0x13bc, 0x00000000 },                 \
-       { 0x13fc, 0x00000000 },                 \
-       { 0x143c, 0x00000000 },                 \
-       { 0x147c, 0x00000000 },                 \
-       { AR5K_STA_ID1,         0x00000000 },   \
-       { AR5K_BSS_ID0,         0x00000000 },   \
-       { AR5K_BSS_ID1,         0x00000000 },   \
-       { AR5K_RSSI_THR,        0x00000000 },   \
-       { AR5K_BEACON_5211,     0x00000000 },   \
-       { AR5K_CFP_PERIOD_5211, 0x00000000 },   \
-       { AR5K_TIMER0_5211,     0x00000030 },   \
-       { AR5K_TIMER1_5211,     0x0007ffff },   \
-       { AR5K_TIMER2_5211,     0x01ffffff },   \
-       { AR5K_TIMER3_5211,     0x00000031 },   \
-       { AR5K_CFP_DUR_5211,    0x00000000 },   \
-       { AR5K_RX_FILTER_5211,  0x00000000 },   \
-       { AR5K_DIAG_SW_5211,    0x00000000 },   \
-       { AR5K_ADDAC_TEST,      0x00000000 },   \
-       { AR5K_DEFAULT_ANTENNA, 0x00000000 },   \
-       { 0x805c, 0xffffc7ff },                 \
-       { 0x8080, 0x00000000 },                 \
-       { AR5K_NAV_5211,        0x00000000 },   \
-       { AR5K_RTS_OK_5211,     0x00000000 },   \
-       { AR5K_RTS_FAIL_5211,   0x00000000 },   \
-       { AR5K_ACK_FAIL_5211,   0x00000000 },   \
-       { AR5K_FCS_FAIL_5211,   0x00000000 },   \
-       { AR5K_BEACON_CNT_5211, 0x00000000 },   \
-       { AR5K_XRMODE,          0x2a82301a },   \
-       { AR5K_XRDELAY,         0x05dc01e0 },   \
-       { AR5K_XRTIMEOUT,       0x1f402710 },   \
-       { AR5K_XRCHIRP,         0x01f40000 },   \
-       { AR5K_XRSTOMP,         0x00001e1c },   \
-       { AR5K_SLEEP0,          0x0002aaaa },   \
-       { AR5K_SLEEP1,          0x02005555 },   \
-       { AR5K_SLEEP2,          0x00000000 },   \
-       { AR5K_BSS_IDM0,        0xffffffff },   \
-       { AR5K_BSS_IDM1,        0x0000ffff },   \
-       { AR5K_TXPC,            0x00000000 },   \
-       { AR5K_PROFCNT_TX,      0x00000000 },   \
-       { AR5K_PROFCNT_RX,      0x00000000 },   \
-       { AR5K_PROFCNT_RXCLR,   0x00000000 },   \
-       { AR5K_PROFCNT_CYCLE,   0x00000000 },   \
-       { 0x80fc, 0x00000088 },                 \
-       { AR5K_RATE_DUR(0),     0x00000000 },   \
-       { AR5K_RATE_DUR(1),     0x0000008c },   \
-       { AR5K_RATE_DUR(2),     0x000000e4 },   \
-       { AR5K_RATE_DUR(3),     0x000002d5 },   \
-       { AR5K_RATE_DUR(4),     0x00000000 },   \
-       { AR5K_RATE_DUR(5),     0x00000000 },   \
-       { AR5K_RATE_DUR(6),     0x000000a0 },   \
-       { AR5K_RATE_DUR(7),     0x000001c9 },   \
-       { AR5K_RATE_DUR(8),     0x0000002c },   \
-       { AR5K_RATE_DUR(9),     0x0000002c },   \
-       { AR5K_RATE_DUR(10),    0x00000030 },   \
-       { AR5K_RATE_DUR(11),    0x0000003c },   \
-       { AR5K_RATE_DUR(12),    0x0000002c },   \
-       { AR5K_RATE_DUR(13),    0x0000002c },   \
-       { AR5K_RATE_DUR(14),    0x00000030 },   \
-       { AR5K_RATE_DUR(15),    0x0000003c },   \
-       { AR5K_RATE_DUR(16),    0x00000000 },   \
-       { AR5K_RATE_DUR(17),    0x00000000 },   \
-       { AR5K_RATE_DUR(18),    0x00000000 },   \
-       { AR5K_RATE_DUR(19),    0x00000000 },   \
-       { AR5K_RATE_DUR(20),    0x00000000 },   \
-       { AR5K_RATE_DUR(21),    0x00000000 },   \
-       { AR5K_RATE_DUR(22),    0x00000000 },   \
-       { AR5K_RATE_DUR(23),    0x00000000 },   \
-       { AR5K_RATE_DUR(24),    0x000000d5 },   \
-       { AR5K_RATE_DUR(25),    0x000000df },   \
-       { AR5K_RATE_DUR(26),    0x00000102 },   \
-       { AR5K_RATE_DUR(27),    0x0000013a },   \
-       { AR5K_RATE_DUR(28),    0x00000075 },   \
-       { AR5K_RATE_DUR(29),    0x0000007f },   \
-       { AR5K_RATE_DUR(30),    0x000000a2 },   \
-       { AR5K_RATE_DUR(31),    0x00000000 },   \
-       { 0x8100, 0x00010002},                  \
-       { AR5K_TSF_PARM,        0x00000001 },   \
-       { 0x8108, 0x000000c0 },                 \
-       { AR5K_PHY_ERR_FIL,     0x00000000 },   \
-       { 0x8110, 0x00000168 },                 \
-       { 0x8114, 0x00000000 },                 \
-       /* Some kind of table                   \
-        * also notice ...03<-02<-01<-00) */    \
-       { 0x87c0, 0x03020100 },                 \
-       { 0x87c4, 0x07060504 },                 \
-       { 0x87c8, 0x0b0a0908 },                 \
-       { 0x87cc, 0x0f0e0d0c },                 \
-       { 0x87d0, 0x13121110 },                 \
-       { 0x87d4, 0x17161514 },                 \
-       { 0x87d8, 0x1b1a1918 },                 \
-       { 0x87dc, 0x1f1e1d1c },                 \
-       /* loop ? */                            \
-       { 0x87e0, 0x03020100 },                 \
-       { 0x87e4, 0x07060504 },                 \
-       { 0x87e8, 0x0b0a0908 },                 \
-       { 0x87ec, 0x0f0e0d0c },                 \
-       { 0x87f0, 0x13121110 },                 \
-       { 0x87f4, 0x17161514 },                 \
-       { 0x87f8, 0x1b1a1918 },                 \
-       { 0x87fc, 0x1f1e1d1c },                 \
-       /* PHY registers */                     \
-       { AR5K_PHY_AGC, 0x00000000 },           \
-       { AR5K_PHY(3),  0xad848e19 },           \
-       { AR5K_PHY(4),  0x7d28e000 },           \
-       { AR5K_PHY_TIMING_3, 0x9c0a9f6b },      \
-       { AR5K_PHY_ACT, 0x00000000 },           \
-       { AR5K_PHY(11), 0x00022ffe },           \
-       { AR5K_PHY(15), 0x00020100 },           \
-       { AR5K_PHY(16), 0x206a017a },           \
-       { AR5K_PHY(19), 0x1284613c },           \
-       { AR5K_PHY(21), 0x00000859 },           \
-       { AR5K_PHY(64), 0x00000000 },           \
-       { AR5K_PHY(65), 0x00000000 },           \
-       { AR5K_PHY(66), 0x00000000 },           \
-       { AR5K_PHY(67), 0x00800000 },           \
-       { AR5K_PHY(68), 0x00000001 },           \
-       { AR5K_PHY(71), 0x0000092a },           \
-       { AR5K_PHY_IQ,  0x05100000 },           \
-       { AR5K_PHY(74), 0x00000001 },           \
-       { AR5K_PHY(75), 0x00000004 },           \
-       { AR5K_PHY_TXPOWER_RATE1, 0x1e1f2022 }, \
-       { AR5K_PHY_TXPOWER_RATE2, 0x0a0b0c0d }, \
-       { AR5K_PHY_TXPOWER_RATE_MAX, 0x0000003f },\
-       { AR5K_PHY(80), 0x00000004 },           \
-       { AR5K_PHY(82), 0x9280b212 },           \
-       { AR5K_PHY_RADAR, 0x5d50e188 },         \
-       { AR5K_PHY(86), 0x000000ff },           \
-       { AR5K_PHY(87), 0x004b6a8e },           \
-       { AR5K_PHY(90), 0x000003ce },           \
-       { AR5K_PHY(92), 0x192fb515 },           \
-       { AR5K_PHY(93), 0x00000000 },           \
-       { AR5K_PHY(94), 0x00000001 },           \
-       { AR5K_PHY(95), 0x00000000 },           \
-       /* Power table (32bytes) */             \
-       { AR5K_PHY_PCDAC_TXPOWER(1), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(2), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(3), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(4), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(5), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(6), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(7), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(8), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(9), 0x10ff10ff },      \
-       { AR5K_PHY_PCDAC_TXPOWER(10), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(11), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(12), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(13), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(14), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(15), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(16), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(17), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(18), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(19), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(20), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(21), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(22), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(23), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(24), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(25), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(26), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(27), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(28), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(29), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(30), 0x10ff10ff },     \
-       { AR5K_PHY_PCDAC_TXPOWER(31),0x10ff10ff },      \
-       { AR5K_PHY(644), 0x0080a333 },          \
-       { AR5K_PHY(645), 0x00206c10 },          \
-       { AR5K_PHY(646), 0x009c4060 },          \
-       { AR5K_PHY(647), 0x1483800a },          \
-       { AR5K_PHY(648), 0x01831061 },          \
-       { AR5K_PHY(649), 0x00000400 },          \
-       { AR5K_PHY(650), 0x000001b5 },          \
-       { AR5K_PHY(651), 0x00000000 },          \
-       { AR5K_PHY_TXPOWER_RATE3, 0x20202020 }, \
-       { AR5K_PHY_TXPOWER_RATE2, 0x20202020 }, \
-       { AR5K_PHY(655), 0x13c889af },          \
-       { AR5K_PHY(656), 0x38490a20 },          \
-       { AR5K_PHY(657), 0x00007bb6 },          \
-       { AR5K_PHY(658), 0x0fff3ffc },          \
-       { AR5K_PHY_CCKTXCTL, 0x00000000 },      \
-}
-
-/*
- * Initial BaseBand Gain settings for RF5111/5112
- * (only AR5210 comes with RF5110 so initial
- * BB Gain settings are included in AR5K_AR5210_INI)
- */
-
-/* RF5111 Initial BaseBand Gain settings */
-#