From: Luis R. Rodriguez Date: Sat, 22 May 2010 01:09:56 +0000 (-0700) Subject: compat-wireless: add a set of pending patches for linux-wireless X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=fcc48d309d6ee54beed24cf35c948d96de56f2e6;p=openwrt%2Fstaging%2Fblogic.git compat-wireless: add a set of pending patches for linux-wireless We're in the merge window, so this adds all the patches pending merge from Atheros. Note that these are not applied by default, to apply then you must use the "-p" flag for ./scripts/admin-update.sh Signed-off-by: Luis R. Rodriguez --- diff --git a/linux-next-pending/0001-ath9k_hw-add-support-for-the-AR9003-2.2.patch b/linux-next-pending/0001-ath9k_hw-add-support-for-the-AR9003-2.2.patch new file mode 100644 index 000000000000..cc8f3c08b64d --- /dev/null +++ b/linux-next-pending/0001-ath9k_hw-add-support-for-the-AR9003-2.2.patch @@ -0,0 +1,2034 @@ +From ad4baba0d48d47ecf52779ec1425f0f34f9c9bb3 Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez +Date: Wed, 12 May 2010 16:56:17 -0700 +Subject: [PATCH 01/19] ath9k_hw: add support for the AR9003 2.2 + +The checksums of the initvals are: + +initvals -f ar9003-2p2 +0x00000000c2bfa7d5 ar9300_2p2_radio_postamble +0x00000000ada2b114 ar9300Modes_lowest_ob_db_tx_gain_table_2p2 +0x00000000e0bc2c84 ar9300Modes_fast_clock_2p2 +0x00000000056eaf74 ar9300_2p2_radio_core +0x0000000000000000 ar9300Common_rx_gain_table_merlin_2p2 +0x0000000078658fb5 ar9300_2p2_mac_postamble +0x0000000023235333 ar9300_2p2_soc_postamble +0x0000000054d41904 ar9200_merlin_2p2_radio_core +0x000000008475a084 ar9300_2p2_baseband_postamble +0x000000009aaafd90 ar9300_2p2_baseband_core +0x000000003df9a326 ar9300Modes_high_power_tx_gain_table_2p2 +0x000000001cfba124 ar9300Modes_high_ob_db_tx_gain_table_2p2 +0x0000000011302700 ar9300Common_rx_gain_table_2p2 +0x00000000a9a2b114 ar9300Modes_low_ob_db_tx_gain_table_2p2 +0x00000000a9d66d40 ar9300_2p2_mac_core +0x000000001e1d0800 ar9300Common_wo_xlna_rx_gain_table_2p2 +0x00000000a0c531c8 ar9300_2p2_soc_preamble +0x00000000292e2544 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2 +0x000000002d3e2544 ar9300PciePhy_clkreq_enable_L1_2p2 +0x00000000293e2544 ar9300PciePhy_clkreq_disable_L1_2p2 + +Signed-off-by: Luis R. Rodriguez +--- + .../net/wireless/ath/ath9k/ar9003_2p2_initvals.h | 1785 ++++++++++++++++++++ + drivers/net/wireless/ath/ath9k/ar9003_hw.c | 161 ++- + 2 files changed, 1921 insertions(+), 25 deletions(-) + create mode 100644 drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h + +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h +new file mode 100644 +index 0000000..7451505 +--- /dev/null ++++ b/drivers/net/wireless/ath/ath9k/ar9003_2p2_initvals.h +@@ -0,0 +1,1785 @@ ++/* ++ * Copyright (c) 2010 Atheros Communications Inc. ++ * ++ * Permission to use, copy, modify, and/or distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#ifndef INITVALS_9003_2P2_H ++#define INITVALS_9003_2P2_H ++ ++/* AR9003 2.2 */ ++ ++static const u32 ar9300_2p2_radio_postamble[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0001609c, 0x0dd08f29, 0x0dd08f29, 0x0b283f31, 0x0b283f31}, ++ {0x000160ac, 0xa4653c00, 0xa4653c00, 0x24652800, 0x24652800}, ++ {0x000160b0, 0x03284f3e, 0x03284f3e, 0x05d08f20, 0x05d08f20}, ++ {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x00016140, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, ++ {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x00016540, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, ++ {0x0001690c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x00016940, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, ++}; ++ ++static const u32 ar9300Modes_lowest_ob_db_tx_gain_table_2p2[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, ++ {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, ++ {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, ++ {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, ++ {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, ++ {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, ++ {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402}, ++ {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404}, ++ {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, ++ {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, ++ {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, ++ {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, ++ {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, ++ {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, ++ {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, ++ {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, ++ {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, ++ {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861}, ++ {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81}, ++ {0x0000a54c, 0x5c02486b, 0x5c02486b, 0x47001a83, 0x47001a83}, ++ {0x0000a550, 0x61024a6c, 0x61024a6c, 0x4a001c84, 0x4a001c84}, ++ {0x0000a554, 0x66026a6c, 0x66026a6c, 0x4e001ce3, 0x4e001ce3}, ++ {0x0000a558, 0x6b026e6c, 0x6b026e6c, 0x52001ce5, 0x52001ce5}, ++ {0x0000a55c, 0x7002708c, 0x7002708c, 0x56001ce9, 0x56001ce9}, ++ {0x0000a560, 0x7302b08a, 0x7302b08a, 0x5a001ceb, 0x5a001ceb}, ++ {0x0000a564, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a568, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a56c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a570, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a574, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a578, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a57c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, ++ {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, ++ {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, ++ {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, ++ {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, ++ {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, ++ {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402}, ++ {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404}, ++ {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, ++ {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, ++ {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, ++ {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, ++ {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, ++ {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, ++ {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, ++ {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, ++ {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, ++ {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861}, ++ {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81}, ++ {0x0000a5cc, 0x5c82486b, 0x5c82486b, 0x47801a83, 0x47801a83}, ++ {0x0000a5d0, 0x61824a6c, 0x61824a6c, 0x4a801c84, 0x4a801c84}, ++ {0x0000a5d4, 0x66826a6c, 0x66826a6c, 0x4e801ce3, 0x4e801ce3}, ++ {0x0000a5d8, 0x6b826e6c, 0x6b826e6c, 0x52801ce5, 0x52801ce5}, ++ {0x0000a5dc, 0x7082708c, 0x7082708c, 0x56801ce9, 0x56801ce9}, ++ {0x0000a5e0, 0x7382b08a, 0x7382b08a, 0x5a801ceb, 0x5a801ceb}, ++ {0x0000a5e4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5e8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5ec, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f0, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5fc, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016048, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, ++ {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016448, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, ++ {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016848, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, ++ {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++}; ++ ++static const u32 ar9300Modes_fast_clock_2p2[][3] = { ++ /* Addr 5G_HT20 5G_HT40 */ ++ {0x00001030, 0x00000268, 0x000004d0}, ++ {0x00001070, 0x0000018c, 0x00000318}, ++ {0x000010b0, 0x00000fd0, 0x00001fa0}, ++ {0x00008014, 0x044c044c, 0x08980898}, ++ {0x0000801c, 0x148ec02b, 0x148ec057}, ++ {0x00008318, 0x000044c0, 0x00008980}, ++ {0x00009e00, 0x03721821, 0x03721821}, ++ {0x0000a230, 0x0000000b, 0x00000016}, ++ {0x0000a254, 0x00000898, 0x00001130}, ++}; ++ ++static const u32 ar9300_2p2_radio_core[][2] = { ++ /* Addr allmodes */ ++ {0x00016000, 0x36db6db6}, ++ {0x00016004, 0x6db6db40}, ++ {0x00016008, 0x73f00000}, ++ {0x0001600c, 0x00000000}, ++ {0x00016040, 0x7f80fff8}, ++ {0x0001604c, 0x76d005b5}, ++ {0x00016050, 0x556cf031}, ++ {0x00016054, 0x13449440}, ++ {0x00016058, 0x0c51c92c}, ++ {0x0001605c, 0x3db7fffc}, ++ {0x00016060, 0xfffffffc}, ++ {0x00016064, 0x000f0278}, ++ {0x0001606c, 0x6db60000}, ++ {0x00016080, 0x00000000}, ++ {0x00016084, 0x0e48048c}, ++ {0x00016088, 0x54214514}, ++ {0x0001608c, 0x119f481e}, ++ {0x00016090, 0x24926490}, ++ {0x00016098, 0xd2888888}, ++ {0x000160a0, 0x0a108ffe}, ++ {0x000160a4, 0x812fc370}, ++ {0x000160a8, 0x423c8000}, ++ {0x000160b4, 0x92480080}, ++ {0x000160c0, 0x00adb6d0}, ++ {0x000160c4, 0x6db6db60}, ++ {0x000160c8, 0x6db6db6c}, ++ {0x000160cc, 0x01e6c000}, ++ {0x00016100, 0x3fffbe01}, ++ {0x00016104, 0xfff80000}, ++ {0x00016108, 0x00080010}, ++ {0x00016144, 0x02084080}, ++ {0x00016148, 0x00000000}, ++ {0x00016280, 0x058a0001}, ++ {0x00016284, 0x3d840208}, ++ {0x00016288, 0x05a20408}, ++ {0x0001628c, 0x00038c07}, ++ {0x00016290, 0x00000004}, ++ {0x00016294, 0x458aa14f}, ++ {0x00016380, 0x00000000}, ++ {0x00016384, 0x00000000}, ++ {0x00016388, 0x00800700}, ++ {0x0001638c, 0x00800700}, ++ {0x00016390, 0x00800700}, ++ {0x00016394, 0x00000000}, ++ {0x00016398, 0x00000000}, ++ {0x0001639c, 0x00000000}, ++ {0x000163a0, 0x00000001}, ++ {0x000163a4, 0x00000001}, ++ {0x000163a8, 0x00000000}, ++ {0x000163ac, 0x00000000}, ++ {0x000163b0, 0x00000000}, ++ {0x000163b4, 0x00000000}, ++ {0x000163b8, 0x00000000}, ++ {0x000163bc, 0x00000000}, ++ {0x000163c0, 0x000000a0}, ++ {0x000163c4, 0x000c0000}, ++ {0x000163c8, 0x14021402}, ++ {0x000163cc, 0x00001402}, ++ {0x000163d0, 0x00000000}, ++ {0x000163d4, 0x00000000}, ++ {0x00016400, 0x36db6db6}, ++ {0x00016404, 0x6db6db40}, ++ {0x00016408, 0x73f00000}, ++ {0x0001640c, 0x00000000}, ++ {0x00016440, 0x7f80fff8}, ++ {0x0001644c, 0x76d005b5}, ++ {0x00016450, 0x556cf031}, ++ {0x00016454, 0x13449440}, ++ {0x00016458, 0x0c51c92c}, ++ {0x0001645c, 0x3db7fffc}, ++ {0x00016460, 0xfffffffc}, ++ {0x00016464, 0x000f0278}, ++ {0x0001646c, 0x6db60000}, ++ {0x00016500, 0x3fffbe01}, ++ {0x00016504, 0xfff80000}, ++ {0x00016508, 0x00080010}, ++ {0x00016544, 0x02084080}, ++ {0x00016548, 0x00000000}, ++ {0x00016780, 0x00000000}, ++ {0x00016784, 0x00000000}, ++ {0x00016788, 0x00800700}, ++ {0x0001678c, 0x00800700}, ++ {0x00016790, 0x00800700}, ++ {0x00016794, 0x00000000}, ++ {0x00016798, 0x00000000}, ++ {0x0001679c, 0x00000000}, ++ {0x000167a0, 0x00000001}, ++ {0x000167a4, 0x00000001}, ++ {0x000167a8, 0x00000000}, ++ {0x000167ac, 0x00000000}, ++ {0x000167b0, 0x00000000}, ++ {0x000167b4, 0x00000000}, ++ {0x000167b8, 0x00000000}, ++ {0x000167bc, 0x00000000}, ++ {0x000167c0, 0x000000a0}, ++ {0x000167c4, 0x000c0000}, ++ {0x000167c8, 0x14021402}, ++ {0x000167cc, 0x00001402}, ++ {0x000167d0, 0x00000000}, ++ {0x000167d4, 0x00000000}, ++ {0x00016800, 0x36db6db6}, ++ {0x00016804, 0x6db6db40}, ++ {0x00016808, 0x73f00000}, ++ {0x0001680c, 0x00000000}, ++ {0x00016840, 0x7f80fff8}, ++ {0x0001684c, 0x76d005b5}, ++ {0x00016850, 0x556cf031}, ++ {0x00016854, 0x13449440}, ++ {0x00016858, 0x0c51c92c}, ++ {0x0001685c, 0x3db7fffc}, ++ {0x00016860, 0xfffffffc}, ++ {0x00016864, 0x000f0278}, ++ {0x0001686c, 0x6db60000}, ++ {0x00016900, 0x3fffbe01}, ++ {0x00016904, 0xfff80000}, ++ {0x00016908, 0x00080010}, ++ {0x00016944, 0x02084080}, ++ {0x00016948, 0x00000000}, ++ {0x00016b80, 0x00000000}, ++ {0x00016b84, 0x00000000}, ++ {0x00016b88, 0x00800700}, ++ {0x00016b8c, 0x00800700}, ++ {0x00016b90, 0x00800700}, ++ {0x00016b94, 0x00000000}, ++ {0x00016b98, 0x00000000}, ++ {0x00016b9c, 0x00000000}, ++ {0x00016ba0, 0x00000001}, ++ {0x00016ba4, 0x00000001}, ++ {0x00016ba8, 0x00000000}, ++ {0x00016bac, 0x00000000}, ++ {0x00016bb0, 0x00000000}, ++ {0x00016bb4, 0x00000000}, ++ {0x00016bb8, 0x00000000}, ++ {0x00016bbc, 0x00000000}, ++ {0x00016bc0, 0x000000a0}, ++ {0x00016bc4, 0x000c0000}, ++ {0x00016bc8, 0x14021402}, ++ {0x00016bcc, 0x00001402}, ++ {0x00016bd0, 0x00000000}, ++ {0x00016bd4, 0x00000000}, ++}; ++ ++static const u32 ar9300Common_rx_gain_table_merlin_2p2[][2] = { ++ /* Addr allmodes */ ++ {0x0000a000, 0x02000101}, ++ {0x0000a004, 0x02000102}, ++ {0x0000a008, 0x02000103}, ++ {0x0000a00c, 0x02000104}, ++ {0x0000a010, 0x02000200}, ++ {0x0000a014, 0x02000201}, ++ {0x0000a018, 0x02000202}, ++ {0x0000a01c, 0x02000203}, ++ {0x0000a020, 0x02000204}, ++ {0x0000a024, 0x02000205}, ++ {0x0000a028, 0x02000208}, ++ {0x0000a02c, 0x02000302}, ++ {0x0000a030, 0x02000303}, ++ {0x0000a034, 0x02000304}, ++ {0x0000a038, 0x02000400}, ++ {0x0000a03c, 0x02010300}, ++ {0x0000a040, 0x02010301}, ++ {0x0000a044, 0x02010302}, ++ {0x0000a048, 0x02000500}, ++ {0x0000a04c, 0x02010400}, ++ {0x0000a050, 0x02020300}, ++ {0x0000a054, 0x02020301}, ++ {0x0000a058, 0x02020302}, ++ {0x0000a05c, 0x02020303}, ++ {0x0000a060, 0x02020400}, ++ {0x0000a064, 0x02030300}, ++ {0x0000a068, 0x02030301}, ++ {0x0000a06c, 0x02030302}, ++ {0x0000a070, 0x02030303}, ++ {0x0000a074, 0x02030400}, ++ {0x0000a078, 0x02040300}, ++ {0x0000a07c, 0x02040301}, ++ {0x0000a080, 0x02040302}, ++ {0x0000a084, 0x02040303}, ++ {0x0000a088, 0x02030500}, ++ {0x0000a08c, 0x02040400}, ++ {0x0000a090, 0x02050203}, ++ {0x0000a094, 0x02050204}, ++ {0x0000a098, 0x02050205}, ++ {0x0000a09c, 0x02040500}, ++ {0x0000a0a0, 0x02050301}, ++ {0x0000a0a4, 0x02050302}, ++ {0x0000a0a8, 0x02050303}, ++ {0x0000a0ac, 0x02050400}, ++ {0x0000a0b0, 0x02050401}, ++ {0x0000a0b4, 0x02050402}, ++ {0x0000a0b8, 0x02050403}, ++ {0x0000a0bc, 0x02050500}, ++ {0x0000a0c0, 0x02050501}, ++ {0x0000a0c4, 0x02050502}, ++ {0x0000a0c8, 0x02050503}, ++ {0x0000a0cc, 0x02050504}, ++ {0x0000a0d0, 0x02050600}, ++ {0x0000a0d4, 0x02050601}, ++ {0x0000a0d8, 0x02050602}, ++ {0x0000a0dc, 0x02050603}, ++ {0x0000a0e0, 0x02050604}, ++ {0x0000a0e4, 0x02050700}, ++ {0x0000a0e8, 0x02050701}, ++ {0x0000a0ec, 0x02050702}, ++ {0x0000a0f0, 0x02050703}, ++ {0x0000a0f4, 0x02050704}, ++ {0x0000a0f8, 0x02050705}, ++ {0x0000a0fc, 0x02050708}, ++ {0x0000a100, 0x02050709}, ++ {0x0000a104, 0x0205070a}, ++ {0x0000a108, 0x0205070b}, ++ {0x0000a10c, 0x0205070c}, ++ {0x0000a110, 0x0205070d}, ++ {0x0000a114, 0x02050710}, ++ {0x0000a118, 0x02050711}, ++ {0x0000a11c, 0x02050712}, ++ {0x0000a120, 0x02050713}, ++ {0x0000a124, 0x02050714}, ++ {0x0000a128, 0x02050715}, ++ {0x0000a12c, 0x02050730}, ++ {0x0000a130, 0x02050731}, ++ {0x0000a134, 0x02050732}, ++ {0x0000a138, 0x02050733}, ++ {0x0000a13c, 0x02050734}, ++ {0x0000a140, 0x02050735}, ++ {0x0000a144, 0x02050750}, ++ {0x0000a148, 0x02050751}, ++ {0x0000a14c, 0x02050752}, ++ {0x0000a150, 0x02050753}, ++ {0x0000a154, 0x02050754}, ++ {0x0000a158, 0x02050755}, ++ {0x0000a15c, 0x02050770}, ++ {0x0000a160, 0x02050771}, ++ {0x0000a164, 0x02050772}, ++ {0x0000a168, 0x02050773}, ++ {0x0000a16c, 0x02050774}, ++ {0x0000a170, 0x02050775}, ++ {0x0000a174, 0x00000776}, ++ {0x0000a178, 0x00000776}, ++ {0x0000a17c, 0x00000776}, ++ {0x0000a180, 0x00000776}, ++ {0x0000a184, 0x00000776}, ++ {0x0000a188, 0x00000776}, ++ {0x0000a18c, 0x00000776}, ++ {0x0000a190, 0x00000776}, ++ {0x0000a194, 0x00000776}, ++ {0x0000a198, 0x00000776}, ++ {0x0000a19c, 0x00000776}, ++ {0x0000a1a0, 0x00000776}, ++ {0x0000a1a4, 0x00000776}, ++ {0x0000a1a8, 0x00000776}, ++ {0x0000a1ac, 0x00000776}, ++ {0x0000a1b0, 0x00000776}, ++ {0x0000a1b4, 0x00000776}, ++ {0x0000a1b8, 0x00000776}, ++ {0x0000a1bc, 0x00000776}, ++ {0x0000a1c0, 0x00000776}, ++ {0x0000a1c4, 0x00000776}, ++ {0x0000a1c8, 0x00000776}, ++ {0x0000a1cc, 0x00000776}, ++ {0x0000a1d0, 0x00000776}, ++ {0x0000a1d4, 0x00000776}, ++ {0x0000a1d8, 0x00000776}, ++ {0x0000a1dc, 0x00000776}, ++ {0x0000a1e0, 0x00000776}, ++ {0x0000a1e4, 0x00000776}, ++ {0x0000a1e8, 0x00000776}, ++ {0x0000a1ec, 0x00000776}, ++ {0x0000a1f0, 0x00000776}, ++ {0x0000a1f4, 0x00000776}, ++ {0x0000a1f8, 0x00000776}, ++ {0x0000a1fc, 0x00000776}, ++ {0x0000b000, 0x02000101}, ++ {0x0000b004, 0x02000102}, ++ {0x0000b008, 0x02000103}, ++ {0x0000b00c, 0x02000104}, ++ {0x0000b010, 0x02000200}, ++ {0x0000b014, 0x02000201}, ++ {0x0000b018, 0x02000202}, ++ {0x0000b01c, 0x02000203}, ++ {0x0000b020, 0x02000204}, ++ {0x0000b024, 0x02000205}, ++ {0x0000b028, 0x02000208}, ++ {0x0000b02c, 0x02000302}, ++ {0x0000b030, 0x02000303}, ++ {0x0000b034, 0x02000304}, ++ {0x0000b038, 0x02000400}, ++ {0x0000b03c, 0x02010300}, ++ {0x0000b040, 0x02010301}, ++ {0x0000b044, 0x02010302}, ++ {0x0000b048, 0x02000500}, ++ {0x0000b04c, 0x02010400}, ++ {0x0000b050, 0x02020300}, ++ {0x0000b054, 0x02020301}, ++ {0x0000b058, 0x02020302}, ++ {0x0000b05c, 0x02020303}, ++ {0x0000b060, 0x02020400}, ++ {0x0000b064, 0x02030300}, ++ {0x0000b068, 0x02030301}, ++ {0x0000b06c, 0x02030302}, ++ {0x0000b070, 0x02030303}, ++ {0x0000b074, 0x02030400}, ++ {0x0000b078, 0x02040300}, ++ {0x0000b07c, 0x02040301}, ++ {0x0000b080, 0x02040302}, ++ {0x0000b084, 0x02040303}, ++ {0x0000b088, 0x02030500}, ++ {0x0000b08c, 0x02040400}, ++ {0x0000b090, 0x02050203}, ++ {0x0000b094, 0x02050204}, ++ {0x0000b098, 0x02050205}, ++ {0x0000b09c, 0x02040500}, ++ {0x0000b0a0, 0x02050301}, ++ {0x0000b0a4, 0x02050302}, ++ {0x0000b0a8, 0x02050303}, ++ {0x0000b0ac, 0x02050400}, ++ {0x0000b0b0, 0x02050401}, ++ {0x0000b0b4, 0x02050402}, ++ {0x0000b0b8, 0x02050403}, ++ {0x0000b0bc, 0x02050500}, ++ {0x0000b0c0, 0x02050501}, ++ {0x0000b0c4, 0x02050502}, ++ {0x0000b0c8, 0x02050503}, ++ {0x0000b0cc, 0x02050504}, ++ {0x0000b0d0, 0x02050600}, ++ {0x0000b0d4, 0x02050601}, ++ {0x0000b0d8, 0x02050602}, ++ {0x0000b0dc, 0x02050603}, ++ {0x0000b0e0, 0x02050604}, ++ {0x0000b0e4, 0x02050700}, ++ {0x0000b0e8, 0x02050701}, ++ {0x0000b0ec, 0x02050702}, ++ {0x0000b0f0, 0x02050703}, ++ {0x0000b0f4, 0x02050704}, ++ {0x0000b0f8, 0x02050705}, ++ {0x0000b0fc, 0x02050708}, ++ {0x0000b100, 0x02050709}, ++ {0x0000b104, 0x0205070a}, ++ {0x0000b108, 0x0205070b}, ++ {0x0000b10c, 0x0205070c}, ++ {0x0000b110, 0x0205070d}, ++ {0x0000b114, 0x02050710}, ++ {0x0000b118, 0x02050711}, ++ {0x0000b11c, 0x02050712}, ++ {0x0000b120, 0x02050713}, ++ {0x0000b124, 0x02050714}, ++ {0x0000b128, 0x02050715}, ++ {0x0000b12c, 0x02050730}, ++ {0x0000b130, 0x02050731}, ++ {0x0000b134, 0x02050732}, ++ {0x0000b138, 0x02050733}, ++ {0x0000b13c, 0x02050734}, ++ {0x0000b140, 0x02050735}, ++ {0x0000b144, 0x02050750}, ++ {0x0000b148, 0x02050751}, ++ {0x0000b14c, 0x02050752}, ++ {0x0000b150, 0x02050753}, ++ {0x0000b154, 0x02050754}, ++ {0x0000b158, 0x02050755}, ++ {0x0000b15c, 0x02050770}, ++ {0x0000b160, 0x02050771}, ++ {0x0000b164, 0x02050772}, ++ {0x0000b168, 0x02050773}, ++ {0x0000b16c, 0x02050774}, ++ {0x0000b170, 0x02050775}, ++ {0x0000b174, 0x00000776}, ++ {0x0000b178, 0x00000776}, ++ {0x0000b17c, 0x00000776}, ++ {0x0000b180, 0x00000776}, ++ {0x0000b184, 0x00000776}, ++ {0x0000b188, 0x00000776}, ++ {0x0000b18c, 0x00000776}, ++ {0x0000b190, 0x00000776}, ++ {0x0000b194, 0x00000776}, ++ {0x0000b198, 0x00000776}, ++ {0x0000b19c, 0x00000776}, ++ {0x0000b1a0, 0x00000776}, ++ {0x0000b1a4, 0x00000776}, ++ {0x0000b1a8, 0x00000776}, ++ {0x0000b1ac, 0x00000776}, ++ {0x0000b1b0, 0x00000776}, ++ {0x0000b1b4, 0x00000776}, ++ {0x0000b1b8, 0x00000776}, ++ {0x0000b1bc, 0x00000776}, ++ {0x0000b1c0, 0x00000776}, ++ {0x0000b1c4, 0x00000776}, ++ {0x0000b1c8, 0x00000776}, ++ {0x0000b1cc, 0x00000776}, ++ {0x0000b1d0, 0x00000776}, ++ {0x0000b1d4, 0x00000776}, ++ {0x0000b1d8, 0x00000776}, ++ {0x0000b1dc, 0x00000776}, ++ {0x0000b1e0, 0x00000776}, ++ {0x0000b1e4, 0x00000776}, ++ {0x0000b1e8, 0x00000776}, ++ {0x0000b1ec, 0x00000776}, ++ {0x0000b1f0, 0x00000776}, ++ {0x0000b1f4, 0x00000776}, ++ {0x0000b1f8, 0x00000776}, ++ {0x0000b1fc, 0x00000776}, ++}; ++ ++static const u32 ar9300_2p2_mac_postamble[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160}, ++ {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c}, ++ {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38}, ++ {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00}, ++ {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b}, ++ {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810}, ++ {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a}, ++ {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440}, ++}; ++ ++static const u32 ar9300_2p2_soc_postamble[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023}, ++}; ++ ++static const u32 ar9200_merlin_2p2_radio_core[][2] = { ++ /* Addr allmodes */ ++ {0x00007800, 0x00040000}, ++ {0x00007804, 0xdb005012}, ++ {0x00007808, 0x04924914}, ++ {0x0000780c, 0x21084210}, ++ {0x00007810, 0x6d801300}, ++ {0x00007814, 0x0019beff}, ++ {0x00007818, 0x07e41000}, ++ {0x0000781c, 0x00392000}, ++ {0x00007820, 0x92592480}, ++ {0x00007824, 0x00040000}, ++ {0x00007828, 0xdb005012}, ++ {0x0000782c, 0x04924914}, ++ {0x00007830, 0x21084210}, ++ {0x00007834, 0x6d801300}, ++ {0x00007838, 0x0019beff}, ++ {0x0000783c, 0x07e40000}, ++ {0x00007840, 0x00392000}, ++ {0x00007844, 0x92592480}, ++ {0x00007848, 0x00100000}, ++ {0x0000784c, 0x773f0567}, ++ {0x00007850, 0x54214514}, ++ {0x00007854, 0x12035828}, ++ {0x00007858, 0x92592692}, ++ {0x0000785c, 0x00000000}, ++ {0x00007860, 0x56400000}, ++ {0x00007864, 0x0a8e370e}, ++ {0x00007868, 0xc0102850}, ++ {0x0000786c, 0x812d4000}, ++ {0x00007870, 0x807ec400}, ++ {0x00007874, 0x001b6db0}, ++ {0x00007878, 0x00376b63}, ++ {0x0000787c, 0x06db6db6}, ++ {0x00007880, 0x006d8000}, ++ {0x00007884, 0xffeffffe}, ++ {0x00007888, 0xffeffffe}, ++ {0x0000788c, 0x00010000}, ++ {0x00007890, 0x02060aeb}, ++ {0x00007894, 0x5a108000}, ++}; ++ ++static const u32 ar9300_2p2_baseband_postamble[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8011, 0xd00a8011}, ++ {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e}, ++ {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0}, ++ {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881}, ++ {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4}, ++ {0x00009830, 0x0000059c, 0x0000059c, 0x0000119c, 0x0000119c}, ++ {0x00009c00, 0x000000c4, 0x000000c4, 0x000000c4, 0x000000c4}, ++ {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0}, ++ {0x00009e04, 0x00802020, 0x00802020, 0x00802020, 0x00802020}, ++ {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2}, ++ {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e}, ++ {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e}, ++ {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c}, ++ {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce}, ++ {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021}, ++ {0x00009e44, 0x02321e27, 0x02321e27, 0x02291e27, 0x02291e27}, ++ {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012}, ++ {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000}, ++ {0x0000a204, 0x000037c0, 0x000037c4, 0x000037c4, 0x000037c0}, ++ {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004}, ++ {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b}, ++ {0x0000a234, 0x00000fff, 0x10000fff, 0x10000fff, 0x00000fff}, ++ {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018}, ++ {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108}, ++ {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898}, ++ {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002}, ++ {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e}, ++ {0x0000a260, 0x0a021501, 0x0a021501, 0x3a021501, 0x3a021501}, ++ {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e}, ++ {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b}, ++ {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, ++ {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110}, ++ {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222}, ++ {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18}, ++ {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982}, ++ {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a}, ++ {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, ++ {0x0000ae04, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, ++ {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, ++ {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce}, ++ {0x0000b284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, ++ {0x0000b830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, ++ {0x0000be04, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, ++ {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000be1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, ++ {0x0000be20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce}, ++ {0x0000c284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, ++}; ++ ++static const u32 ar9300_2p2_baseband_core[][2] = { ++ /* Addr allmodes */ ++ {0x00009800, 0xafe68e30}, ++ {0x00009804, 0xfd14e000}, ++ {0x00009808, 0x9c0a9f6b}, ++ {0x0000980c, 0x04900000}, ++ {0x00009814, 0x9280c00a}, ++ {0x00009818, 0x00000000}, ++ {0x0000981c, 0x00020028}, ++ {0x00009834, 0x5f3ca3de}, ++ {0x00009838, 0x0108ecff}, ++ {0x0000983c, 0x14750600}, ++ {0x00009880, 0x201fff00}, ++ {0x00009884, 0x00001042}, ++ {0x000098a4, 0x00200400}, ++ {0x000098b0, 0x52440bbe}, ++ {0x000098d0, 0x004b6a8e}, ++ {0x000098d4, 0x00000820}, ++ {0x000098dc, 0x00000000}, ++ {0x000098f0, 0x00000000}, ++ {0x000098f4, 0x00000000}, ++ {0x00009c04, 0xff55ff55}, ++ {0x00009c08, 0x0320ff55}, ++ {0x00009c0c, 0x00000000}, ++ {0x00009c10, 0x00000000}, ++ {0x00009c14, 0x00046384}, ++ {0x00009c18, 0x05b6b440}, ++ {0x00009c1c, 0x00b6b440}, ++ {0x00009d00, 0xc080a333}, ++ {0x00009d04, 0x40206c10}, ++ {0x00009d08, 0x009c4060}, ++ {0x00009d0c, 0x9883800a}, ++ {0x00009d10, 0x01834061}, ++ {0x00009d14, 0x00c0040b}, ++ {0x00009d18, 0x00000000}, ++ {0x00009e08, 0x0038230c}, ++ {0x00009e24, 0x990bb515}, ++ {0x00009e28, 0x0c6f0000}, ++ {0x00009e30, 0x06336f77}, ++ {0x00009e34, 0x6af6532f}, ++ {0x00009e38, 0x0cc80c00}, ++ {0x00009e3c, 0xcf946222}, ++ {0x00009e40, 0x0d261820}, ++ {0x00009e4c, 0x00001004}, ++ {0x00009e50, 0x00ff03f1}, ++ {0x00009e54, 0x00000000}, ++ {0x00009fc0, 0x803e4788}, ++ {0x00009fc4, 0x0001efb5}, ++ {0x00009fcc, 0x40000014}, ++ {0x00009fd0, 0x01193b93}, ++ {0x0000a20c, 0x00000000}, ++ {0x0000a220, 0x00000000}, ++ {0x0000a224, 0x00000000}, ++ {0x0000a228, 0x10002310}, ++ {0x0000a22c, 0x01036a1e}, ++ {0x0000a23c, 0x00000000}, ++ {0x0000a244, 0x0c000000}, ++ {0x0000a2a0, 0x00000001}, ++ {0x0000a2c0, 0x00000001}, ++ {0x0000a2c8, 0x00000000}, ++ {0x0000a2cc, 0x18c43433}, ++ {0x0000a2d4, 0x00000000}, ++ {0x0000a2dc, 0x00000000}, ++ {0x0000a2e0, 0x00000000}, ++ {0x0000a2e4, 0x00000000}, ++ {0x0000a2e8, 0x00000000}, ++ {0x0000a2ec, 0x00000000}, ++ {0x0000a2f0, 0x00000000}, ++ {0x0000a2f4, 0x00000000}, ++ {0x0000a2f8, 0x00000000}, ++ {0x0000a344, 0x00000000}, ++ {0x0000a34c, 0x00000000}, ++ {0x0000a350, 0x0000a000}, ++ {0x0000a364, 0x00000000}, ++ {0x0000a370, 0x00000000}, ++ {0x0000a390, 0x00000001}, ++ {0x0000a394, 0x00000444}, ++ {0x0000a398, 0x001f0e0f}, ++ {0x0000a39c, 0x0075393f}, ++ {0x0000a3a0, 0xb79f6427}, ++ {0x0000a3a4, 0x00000000}, ++ {0x0000a3a8, 0xaaaaaaaa}, ++ {0x0000a3ac, 0x3c466478}, ++ {0x0000a3c0, 0x20202020}, ++ {0x0000a3c4, 0x22222220}, ++ {0x0000a3c8, 0x20200020}, ++ {0x0000a3cc, 0x20202020}, ++ {0x0000a3d0, 0x20202020}, ++ {0x0000a3d4, 0x20202020}, ++ {0x0000a3d8, 0x20202020}, ++ {0x0000a3dc, 0x20202020}, ++ {0x0000a3e0, 0x20202020}, ++ {0x0000a3e4, 0x20202020}, ++ {0x0000a3e8, 0x20202020}, ++ {0x0000a3ec, 0x20202020}, ++ {0x0000a3f0, 0x00000000}, ++ {0x0000a3f4, 0x00000246}, ++ {0x0000a3f8, 0x0cdbd380}, ++ {0x0000a3fc, 0x000f0f01}, ++ {0x0000a400, 0x8fa91f01}, ++ {0x0000a404, 0x00000000}, ++ {0x0000a408, 0x0e79e5c6}, ++ {0x0000a40c, 0x00820820}, ++ {0x0000a414, 0x1ce739ce}, ++ {0x0000a418, 0x2d001dce}, ++ {0x0000a41c, 0x1ce739ce}, ++ {0x0000a420, 0x000001ce}, ++ {0x0000a424, 0x1ce739ce}, ++ {0x0000a428, 0x000001ce}, ++ {0x0000a42c, 0x1ce739ce}, ++ {0x0000a430, 0x1ce739ce}, ++ {0x0000a434, 0x00000000}, ++ {0x0000a438, 0x00001801}, ++ {0x0000a43c, 0x00000000}, ++ {0x0000a440, 0x00000000}, ++ {0x0000a444, 0x00000000}, ++ {0x0000a448, 0x06000080}, ++ {0x0000a44c, 0x00000001}, ++ {0x0000a450, 0x00010000}, ++ {0x0000a458, 0x00000000}, ++ {0x0000a600, 0x00000000}, ++ {0x0000a604, 0x00000000}, ++ {0x0000a608, 0x00000000}, ++ {0x0000a60c, 0x00000000}, ++ {0x0000a610, 0x00000000}, ++ {0x0000a614, 0x00000000}, ++ {0x0000a618, 0x00000000}, ++ {0x0000a61c, 0x00000000}, ++ {0x0000a620, 0x00000000}, ++ {0x0000a624, 0x00000000}, ++ {0x0000a628, 0x00000000}, ++ {0x0000a62c, 0x00000000}, ++ {0x0000a630, 0x00000000}, ++ {0x0000a634, 0x00000000}, ++ {0x0000a638, 0x00000000}, ++ {0x0000a63c, 0x00000000}, ++ {0x0000a640, 0x00000000}, ++ {0x0000a644, 0x3fad9d74}, ++ {0x0000a648, 0x0048060a}, ++ {0x0000a64c, 0x00000637}, ++ {0x0000a670, 0x03020100}, ++ {0x0000a674, 0x09080504}, ++ {0x0000a678, 0x0d0c0b0a}, ++ {0x0000a67c, 0x13121110}, ++ {0x0000a680, 0x31301514}, ++ {0x0000a684, 0x35343332}, ++ {0x0000a688, 0x00000036}, ++ {0x0000a690, 0x00000838}, ++ {0x0000a7c0, 0x00000000}, ++ {0x0000a7c4, 0xfffffffc}, ++ {0x0000a7c8, 0x00000000}, ++ {0x0000a7cc, 0x00000000}, ++ {0x0000a7d0, 0x00000000}, ++ {0x0000a7d4, 0x00000004}, ++ {0x0000a7dc, 0x00000001}, ++ {0x0000a8d0, 0x004b6a8e}, ++ {0x0000a8d4, 0x00000820}, ++ {0x0000a8dc, 0x00000000}, ++ {0x0000a8f0, 0x00000000}, ++ {0x0000a8f4, 0x00000000}, ++ {0x0000b2d0, 0x00000080}, ++ {0x0000b2d4, 0x00000000}, ++ {0x0000b2dc, 0x00000000}, ++ {0x0000b2e0, 0x00000000}, ++ {0x0000b2e4, 0x00000000}, ++ {0x0000b2e8, 0x00000000}, ++ {0x0000b2ec, 0x00000000}, ++ {0x0000b2f0, 0x00000000}, ++ {0x0000b2f4, 0x00000000}, ++ {0x0000b2f8, 0x00000000}, ++ {0x0000b408, 0x0e79e5c0}, ++ {0x0000b40c, 0x00820820}, ++ {0x0000b420, 0x00000000}, ++ {0x0000b8d0, 0x004b6a8e}, ++ {0x0000b8d4, 0x00000820}, ++ {0x0000b8dc, 0x00000000}, ++ {0x0000b8f0, 0x00000000}, ++ {0x0000b8f4, 0x00000000}, ++ {0x0000c2d0, 0x00000080}, ++ {0x0000c2d4, 0x00000000}, ++ {0x0000c2dc, 0x00000000}, ++ {0x0000c2e0, 0x00000000}, ++ {0x0000c2e4, 0x00000000}, ++ {0x0000c2e8, 0x00000000}, ++ {0x0000c2ec, 0x00000000}, ++ {0x0000c2f0, 0x00000000}, ++ {0x0000c2f4, 0x00000000}, ++ {0x0000c2f8, 0x00000000}, ++ {0x0000c408, 0x0e79e5c0}, ++ {0x0000c40c, 0x00820820}, ++ {0x0000c420, 0x00000000}, ++}; ++ ++static const u32 ar9300Modes_high_power_tx_gain_table_2p2[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, ++ {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000}, ++ {0x0000a504, 0x06002223, 0x06002223, 0x04000002, 0x04000002}, ++ {0x0000a508, 0x0a022220, 0x0a022220, 0x08000004, 0x08000004}, ++ {0x0000a50c, 0x0f022223, 0x0f022223, 0x0b000200, 0x0b000200}, ++ {0x0000a510, 0x14022620, 0x14022620, 0x0f000202, 0x0f000202}, ++ {0x0000a514, 0x18022622, 0x18022622, 0x11000400, 0x11000400}, ++ {0x0000a518, 0x1b022822, 0x1b022822, 0x15000402, 0x15000402}, ++ {0x0000a51c, 0x20022842, 0x20022842, 0x19000404, 0x19000404}, ++ {0x0000a520, 0x22022c41, 0x22022c41, 0x1b000603, 0x1b000603}, ++ {0x0000a524, 0x28023042, 0x28023042, 0x1f000a02, 0x1f000a02}, ++ {0x0000a528, 0x2c023044, 0x2c023044, 0x23000a04, 0x23000a04}, ++ {0x0000a52c, 0x2f023644, 0x2f023644, 0x26000a20, 0x26000a20}, ++ {0x0000a530, 0x34025643, 0x34025643, 0x2a000e20, 0x2a000e20}, ++ {0x0000a534, 0x38025a44, 0x38025a44, 0x2e000e22, 0x2e000e22}, ++ {0x0000a538, 0x3b025e45, 0x3b025e45, 0x31000e24, 0x31000e24}, ++ {0x0000a53c, 0x41025e4a, 0x41025e4a, 0x34001640, 0x34001640}, ++ {0x0000a540, 0x48025e6c, 0x48025e6c, 0x38001660, 0x38001660}, ++ {0x0000a544, 0x4e025e8e, 0x4e025e8e, 0x3b001861, 0x3b001861}, ++ {0x0000a548, 0x53025eb2, 0x53025eb2, 0x3e001a81, 0x3e001a81}, ++ {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83}, ++ {0x0000a550, 0x5f025ef6, 0x5f025ef6, 0x44001c84, 0x44001c84}, ++ {0x0000a554, 0x62025f56, 0x62025f56, 0x48001ce3, 0x48001ce3}, ++ {0x0000a558, 0x66027f56, 0x66027f56, 0x4c001ce5, 0x4c001ce5}, ++ {0x0000a55c, 0x6a029f56, 0x6a029f56, 0x50001ce9, 0x50001ce9}, ++ {0x0000a560, 0x70049f56, 0x70049f56, 0x54001ceb, 0x54001ceb}, ++ {0x0000a564, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a568, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a56c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a570, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a574, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a578, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a57c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000}, ++ {0x0000a584, 0x06802223, 0x06802223, 0x04800002, 0x04800002}, ++ {0x0000a588, 0x0a822220, 0x0a822220, 0x08800004, 0x08800004}, ++ {0x0000a58c, 0x0f822223, 0x0f822223, 0x0b800200, 0x0b800200}, ++ {0x0000a590, 0x14822620, 0x14822620, 0x0f800202, 0x0f800202}, ++ {0x0000a594, 0x18822622, 0x18822622, 0x11800400, 0x11800400}, ++ {0x0000a598, 0x1b822822, 0x1b822822, 0x15800402, 0x15800402}, ++ {0x0000a59c, 0x20822842, 0x20822842, 0x19800404, 0x19800404}, ++ {0x0000a5a0, 0x22822c41, 0x22822c41, 0x1b800603, 0x1b800603}, ++ {0x0000a5a4, 0x28823042, 0x28823042, 0x1f800a02, 0x1f800a02}, ++ {0x0000a5a8, 0x2c823044, 0x2c823044, 0x23800a04, 0x23800a04}, ++ {0x0000a5ac, 0x2f823644, 0x2f823644, 0x26800a20, 0x26800a20}, ++ {0x0000a5b0, 0x34825643, 0x34825643, 0x2a800e20, 0x2a800e20}, ++ {0x0000a5b4, 0x38825a44, 0x38825a44, 0x2e800e22, 0x2e800e22}, ++ {0x0000a5b8, 0x3b825e45, 0x3b825e45, 0x31800e24, 0x31800e24}, ++ {0x0000a5bc, 0x41825e4a, 0x41825e4a, 0x34801640, 0x34801640}, ++ {0x0000a5c0, 0x48825e6c, 0x48825e6c, 0x38801660, 0x38801660}, ++ {0x0000a5c4, 0x4e825e8e, 0x4e825e8e, 0x3b801861, 0x3b801861}, ++ {0x0000a5c8, 0x53825eb2, 0x53825eb2, 0x3e801a81, 0x3e801a81}, ++ {0x0000a5cc, 0x59825eb5, 0x59825eb5, 0x42801a83, 0x42801a83}, ++ {0x0000a5d0, 0x5f825ef6, 0x5f825ef6, 0x44801c84, 0x44801c84}, ++ {0x0000a5d4, 0x62825f56, 0x62825f56, 0x48801ce3, 0x48801ce3}, ++ {0x0000a5d8, 0x66827f56, 0x66827f56, 0x4c801ce5, 0x4c801ce5}, ++ {0x0000a5dc, 0x6a829f56, 0x6a829f56, 0x50801ce9, 0x50801ce9}, ++ {0x0000a5e0, 0x70849f56, 0x70849f56, 0x54801ceb, 0x54801ceb}, ++ {0x0000a5e4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5e8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5ec, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f0, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5fc, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, ++ {0x00016048, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, ++ {0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, ++ {0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, ++ {0x00016448, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, ++ {0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, ++ {0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, ++ {0x00016848, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, ++ {0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, ++}; ++ ++static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p2[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, ++ {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000}, ++ {0x0000a504, 0x06002223, 0x06002223, 0x04000002, 0x04000002}, ++ {0x0000a508, 0x0a022220, 0x0a022220, 0x08000004, 0x08000004}, ++ {0x0000a50c, 0x0f022223, 0x0f022223, 0x0b000200, 0x0b000200}, ++ {0x0000a510, 0x14022620, 0x14022620, 0x0f000202, 0x0f000202}, ++ {0x0000a514, 0x18022622, 0x18022622, 0x11000400, 0x11000400}, ++ {0x0000a518, 0x1b022822, 0x1b022822, 0x15000402, 0x15000402}, ++ {0x0000a51c, 0x20022842, 0x20022842, 0x19000404, 0x19000404}, ++ {0x0000a520, 0x22022c41, 0x22022c41, 0x1b000603, 0x1b000603}, ++ {0x0000a524, 0x28023042, 0x28023042, 0x1f000a02, 0x1f000a02}, ++ {0x0000a528, 0x2c023044, 0x2c023044, 0x23000a04, 0x23000a04}, ++ {0x0000a52c, 0x2f023644, 0x2f023644, 0x26000a20, 0x26000a20}, ++ {0x0000a530, 0x34025643, 0x34025643, 0x2a000e20, 0x2a000e20}, ++ {0x0000a534, 0x38025a44, 0x38025a44, 0x2e000e22, 0x2e000e22}, ++ {0x0000a538, 0x3b025e45, 0x3b025e45, 0x31000e24, 0x31000e24}, ++ {0x0000a53c, 0x41025e4a, 0x41025e4a, 0x34001640, 0x34001640}, ++ {0x0000a540, 0x48025e6c, 0x48025e6c, 0x38001660, 0x38001660}, ++ {0x0000a544, 0x4e025e8e, 0x4e025e8e, 0x3b001861, 0x3b001861}, ++ {0x0000a548, 0x53025eb2, 0x53025eb2, 0x3e001a81, 0x3e001a81}, ++ {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83}, ++ {0x0000a550, 0x5f025ef6, 0x5f025ef6, 0x44001c84, 0x44001c84}, ++ {0x0000a554, 0x62025f56, 0x62025f56, 0x48001ce3, 0x48001ce3}, ++ {0x0000a558, 0x66027f56, 0x66027f56, 0x4c001ce5, 0x4c001ce5}, ++ {0x0000a55c, 0x6a029f56, 0x6a029f56, 0x50001ce9, 0x50001ce9}, ++ {0x0000a560, 0x70049f56, 0x70049f56, 0x54001ceb, 0x54001ceb}, ++ {0x0000a564, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a568, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a56c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a570, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a574, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a578, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a57c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000}, ++ {0x0000a584, 0x06802223, 0x06802223, 0x04800002, 0x04800002}, ++ {0x0000a588, 0x0a822220, 0x0a822220, 0x08800004, 0x08800004}, ++ {0x0000a58c, 0x0f822223, 0x0f822223, 0x0b800200, 0x0b800200}, ++ {0x0000a590, 0x14822620, 0x14822620, 0x0f800202, 0x0f800202}, ++ {0x0000a594, 0x18822622, 0x18822622, 0x11800400, 0x11800400}, ++ {0x0000a598, 0x1b822822, 0x1b822822, 0x15800402, 0x15800402}, ++ {0x0000a59c, 0x20822842, 0x20822842, 0x19800404, 0x19800404}, ++ {0x0000a5a0, 0x22822c41, 0x22822c41, 0x1b800603, 0x1b800603}, ++ {0x0000a5a4, 0x28823042, 0x28823042, 0x1f800a02, 0x1f800a02}, ++ {0x0000a5a8, 0x2c823044, 0x2c823044, 0x23800a04, 0x23800a04}, ++ {0x0000a5ac, 0x2f823644, 0x2f823644, 0x26800a20, 0x26800a20}, ++ {0x0000a5b0, 0x34825643, 0x34825643, 0x2a800e20, 0x2a800e20}, ++ {0x0000a5b4, 0x38825a44, 0x38825a44, 0x2e800e22, 0x2e800e22}, ++ {0x0000a5b8, 0x3b825e45, 0x3b825e45, 0x31800e24, 0x31800e24}, ++ {0x0000a5bc, 0x41825e4a, 0x41825e4a, 0x34801640, 0x34801640}, ++ {0x0000a5c0, 0x48825e6c, 0x48825e6c, 0x38801660, 0x38801660}, ++ {0x0000a5c4, 0x4e825e8e, 0x4e825e8e, 0x3b801861, 0x3b801861}, ++ {0x0000a5c8, 0x53825eb2, 0x53825eb2, 0x3e801a81, 0x3e801a81}, ++ {0x0000a5cc, 0x59825eb5, 0x59825eb5, 0x42801a83, 0x42801a83}, ++ {0x0000a5d0, 0x5f825ef6, 0x5f825ef6, 0x44801c84, 0x44801c84}, ++ {0x0000a5d4, 0x62825f56, 0x62825f56, 0x48801ce3, 0x48801ce3}, ++ {0x0000a5d8, 0x66827f56, 0x66827f56, 0x4c801ce5, 0x4c801ce5}, ++ {0x0000a5dc, 0x6a829f56, 0x6a829f56, 0x50801ce9, 0x50801ce9}, ++ {0x0000a5e0, 0x70849f56, 0x70849f56, 0x54801ceb, 0x54801ceb}, ++ {0x0000a5e4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5e8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5ec, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f0, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5fc, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x00016044, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, ++ {0x00016048, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, ++ {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016444, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, ++ {0x00016448, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, ++ {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016844, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, ++ {0x00016848, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, ++ {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++}; ++ ++static const u32 ar9300Common_rx_gain_table_2p2[][2] = { ++ /* Addr allmodes */ ++ {0x0000a000, 0x00010000}, ++ {0x0000a004, 0x00030002}, ++ {0x0000a008, 0x00050004}, ++ {0x0000a00c, 0x00810080}, ++ {0x0000a010, 0x00830082}, ++ {0x0000a014, 0x01810180}, ++ {0x0000a018, 0x01830182}, ++ {0x0000a01c, 0x01850184}, ++ {0x0000a020, 0x01890188}, ++ {0x0000a024, 0x018b018a}, ++ {0x0000a028, 0x018d018c}, ++ {0x0000a02c, 0x01910190}, ++ {0x0000a030, 0x01930192}, ++ {0x0000a034, 0x01950194}, ++ {0x0000a038, 0x038a0196}, ++ {0x0000a03c, 0x038c038b}, ++ {0x0000a040, 0x0390038d}, ++ {0x0000a044, 0x03920391}, ++ {0x0000a048, 0x03940393}, ++ {0x0000a04c, 0x03960395}, ++ {0x0000a050, 0x00000000}, ++ {0x0000a054, 0x00000000}, ++ {0x0000a058, 0x00000000}, ++ {0x0000a05c, 0x00000000}, ++ {0x0000a060, 0x00000000}, ++ {0x0000a064, 0x00000000}, ++ {0x0000a068, 0x00000000}, ++ {0x0000a06c, 0x00000000}, ++ {0x0000a070, 0x00000000}, ++ {0x0000a074, 0x00000000}, ++ {0x0000a078, 0x00000000}, ++ {0x0000a07c, 0x00000000}, ++ {0x0000a080, 0x22222229}, ++ {0x0000a084, 0x1d1d1d1d}, ++ {0x0000a088, 0x1d1d1d1d}, ++ {0x0000a08c, 0x1d1d1d1d}, ++ {0x0000a090, 0x171d1d1d}, ++ {0x0000a094, 0x11111717}, ++ {0x0000a098, 0x00030311}, ++ {0x0000a09c, 0x00000000}, ++ {0x0000a0a0, 0x00000000}, ++ {0x0000a0a4, 0x00000000}, ++ {0x0000a0a8, 0x00000000}, ++ {0x0000a0ac, 0x00000000}, ++ {0x0000a0b0, 0x00000000}, ++ {0x0000a0b4, 0x00000000}, ++ {0x0000a0b8, 0x00000000}, ++ {0x0000a0bc, 0x00000000}, ++ {0x0000a0c0, 0x001f0000}, ++ {0x0000a0c4, 0x01000101}, ++ {0x0000a0c8, 0x011e011f}, ++ {0x0000a0cc, 0x011c011d}, ++ {0x0000a0d0, 0x02030204}, ++ {0x0000a0d4, 0x02010202}, ++ {0x0000a0d8, 0x021f0200}, ++ {0x0000a0dc, 0x0302021e}, ++ {0x0000a0e0, 0x03000301}, ++ {0x0000a0e4, 0x031e031f}, ++ {0x0000a0e8, 0x0402031d}, ++ {0x0000a0ec, 0x04000401}, ++ {0x0000a0f0, 0x041e041f}, ++ {0x0000a0f4, 0x0502041d}, ++ {0x0000a0f8, 0x05000501}, ++ {0x0000a0fc, 0x051e051f}, ++ {0x0000a100, 0x06010602}, ++ {0x0000a104, 0x061f0600}, ++ {0x0000a108, 0x061d061e}, ++ {0x0000a10c, 0x07020703}, ++ {0x0000a110, 0x07000701}, ++ {0x0000a114, 0x00000000}, ++ {0x0000a118, 0x00000000}, ++ {0x0000a11c, 0x00000000}, ++ {0x0000a120, 0x00000000}, ++ {0x0000a124, 0x00000000}, ++ {0x0000a128, 0x00000000}, ++ {0x0000a12c, 0x00000000}, ++ {0x0000a130, 0x00000000}, ++ {0x0000a134, 0x00000000}, ++ {0x0000a138, 0x00000000}, ++ {0x0000a13c, 0x00000000}, ++ {0x0000a140, 0x001f0000}, ++ {0x0000a144, 0x01000101}, ++ {0x0000a148, 0x011e011f}, ++ {0x0000a14c, 0x011c011d}, ++ {0x0000a150, 0x02030204}, ++ {0x0000a154, 0x02010202}, ++ {0x0000a158, 0x021f0200}, ++ {0x0000a15c, 0x0302021e}, ++ {0x0000a160, 0x03000301}, ++ {0x0000a164, 0x031e031f}, ++ {0x0000a168, 0x0402031d}, ++ {0x0000a16c, 0x04000401}, ++ {0x0000a170, 0x041e041f}, ++ {0x0000a174, 0x0502041d}, ++ {0x0000a178, 0x05000501}, ++ {0x0000a17c, 0x051e051f}, ++ {0x0000a180, 0x06010602}, ++ {0x0000a184, 0x061f0600}, ++ {0x0000a188, 0x061d061e}, ++ {0x0000a18c, 0x07020703}, ++ {0x0000a190, 0x07000701}, ++ {0x0000a194, 0x00000000}, ++ {0x0000a198, 0x00000000}, ++ {0x0000a19c, 0x00000000}, ++ {0x0000a1a0, 0x00000000}, ++ {0x0000a1a4, 0x00000000}, ++ {0x0000a1a8, 0x00000000}, ++ {0x0000a1ac, 0x00000000}, ++ {0x0000a1b0, 0x00000000}, ++ {0x0000a1b4, 0x00000000}, ++ {0x0000a1b8, 0x00000000}, ++ {0x0000a1bc, 0x00000000}, ++ {0x0000a1c0, 0x00000000}, ++ {0x0000a1c4, 0x00000000}, ++ {0x0000a1c8, 0x00000000}, ++ {0x0000a1cc, 0x00000000}, ++ {0x0000a1d0, 0x00000000}, ++ {0x0000a1d4, 0x00000000}, ++ {0x0000a1d8, 0x00000000}, ++ {0x0000a1dc, 0x00000000}, ++ {0x0000a1e0, 0x00000000}, ++ {0x0000a1e4, 0x00000000}, ++ {0x0000a1e8, 0x00000000}, ++ {0x0000a1ec, 0x00000000}, ++ {0x0000a1f0, 0x00000396}, ++ {0x0000a1f4, 0x00000396}, ++ {0x0000a1f8, 0x00000396}, ++ {0x0000a1fc, 0x00000196}, ++ {0x0000b000, 0x00010000}, ++ {0x0000b004, 0x00030002}, ++ {0x0000b008, 0x00050004}, ++ {0x0000b00c, 0x00810080}, ++ {0x0000b010, 0x00830082}, ++ {0x0000b014, 0x01810180}, ++ {0x0000b018, 0x01830182}, ++ {0x0000b01c, 0x01850184}, ++ {0x0000b020, 0x02810280}, ++ {0x0000b024, 0x02830282}, ++ {0x0000b028, 0x02850284}, ++ {0x0000b02c, 0x02890288}, ++ {0x0000b030, 0x028b028a}, ++ {0x0000b034, 0x0388028c}, ++ {0x0000b038, 0x038a0389}, ++ {0x0000b03c, 0x038c038b}, ++ {0x0000b040, 0x0390038d}, ++ {0x0000b044, 0x03920391}, ++ {0x0000b048, 0x03940393}, ++ {0x0000b04c, 0x03960395}, ++ {0x0000b050, 0x00000000}, ++ {0x0000b054, 0x00000000}, ++ {0x0000b058, 0x00000000}, ++ {0x0000b05c, 0x00000000}, ++ {0x0000b060, 0x00000000}, ++ {0x0000b064, 0x00000000}, ++ {0x0000b068, 0x00000000}, ++ {0x0000b06c, 0x00000000}, ++ {0x0000b070, 0x00000000}, ++ {0x0000b074, 0x00000000}, ++ {0x0000b078, 0x00000000}, ++ {0x0000b07c, 0x00000000}, ++ {0x0000b080, 0x32323232}, ++ {0x0000b084, 0x2f2f3232}, ++ {0x0000b088, 0x23282a2d}, ++ {0x0000b08c, 0x1c1e2123}, ++ {0x0000b090, 0x14171919}, ++ {0x0000b094, 0x0e0e1214}, ++ {0x0000b098, 0x03050707}, ++ {0x0000b09c, 0x00030303}, ++ {0x0000b0a0, 0x00000000}, ++ {0x0000b0a4, 0x00000000}, ++ {0x0000b0a8, 0x00000000}, ++ {0x0000b0ac, 0x00000000}, ++ {0x0000b0b0, 0x00000000}, ++ {0x0000b0b4, 0x00000000}, ++ {0x0000b0b8, 0x00000000}, ++ {0x0000b0bc, 0x00000000}, ++ {0x0000b0c0, 0x003f0020}, ++ {0x0000b0c4, 0x00400041}, ++ {0x0000b0c8, 0x0140005f}, ++ {0x0000b0cc, 0x0160015f}, ++ {0x0000b0d0, 0x017e017f}, ++ {0x0000b0d4, 0x02410242}, ++ {0x0000b0d8, 0x025f0240}, ++ {0x0000b0dc, 0x027f0260}, ++ {0x0000b0e0, 0x0341027e}, ++ {0x0000b0e4, 0x035f0340}, ++ {0x0000b0e8, 0x037f0360}, ++ {0x0000b0ec, 0x04400441}, ++ {0x0000b0f0, 0x0460045f}, ++ {0x0000b0f4, 0x0541047f}, ++ {0x0000b0f8, 0x055f0540}, ++ {0x0000b0fc, 0x057f0560}, ++ {0x0000b100, 0x06400641}, ++ {0x0000b104, 0x0660065f}, ++ {0x0000b108, 0x067e067f}, ++ {0x0000b10c, 0x07410742}, ++ {0x0000b110, 0x075f0740}, ++ {0x0000b114, 0x077f0760}, ++ {0x0000b118, 0x07800781}, ++ {0x0000b11c, 0x07a0079f}, ++ {0x0000b120, 0x07c107bf}, ++ {0x0000b124, 0x000007c0}, ++ {0x0000b128, 0x00000000}, ++ {0x0000b12c, 0x00000000}, ++ {0x0000b130, 0x00000000}, ++ {0x0000b134, 0x00000000}, ++ {0x0000b138, 0x00000000}, ++ {0x0000b13c, 0x00000000}, ++ {0x0000b140, 0x003f0020}, ++ {0x0000b144, 0x00400041}, ++ {0x0000b148, 0x0140005f}, ++ {0x0000b14c, 0x0160015f}, ++ {0x0000b150, 0x017e017f}, ++ {0x0000b154, 0x02410242}, ++ {0x0000b158, 0x025f0240}, ++ {0x0000b15c, 0x027f0260}, ++ {0x0000b160, 0x0341027e}, ++ {0x0000b164, 0x035f0340}, ++ {0x0000b168, 0x037f0360}, ++ {0x0000b16c, 0x04400441}, ++ {0x0000b170, 0x0460045f}, ++ {0x0000b174, 0x0541047f}, ++ {0x0000b178, 0x055f0540}, ++ {0x0000b17c, 0x057f0560}, ++ {0x0000b180, 0x06400641}, ++ {0x0000b184, 0x0660065f}, ++ {0x0000b188, 0x067e067f}, ++ {0x0000b18c, 0x07410742}, ++ {0x0000b190, 0x075f0740}, ++ {0x0000b194, 0x077f0760}, ++ {0x0000b198, 0x07800781}, ++ {0x0000b19c, 0x07a0079f}, ++ {0x0000b1a0, 0x07c107bf}, ++ {0x0000b1a4, 0x000007c0}, ++ {0x0000b1a8, 0x00000000}, ++ {0x0000b1ac, 0x00000000}, ++ {0x0000b1b0, 0x00000000}, ++ {0x0000b1b4, 0x00000000}, ++ {0x0000b1b8, 0x00000000}, ++ {0x0000b1bc, 0x00000000}, ++ {0x0000b1c0, 0x00000000}, ++ {0x0000b1c4, 0x00000000}, ++ {0x0000b1c8, 0x00000000}, ++ {0x0000b1cc, 0x00000000}, ++ {0x0000b1d0, 0x00000000}, ++ {0x0000b1d4, 0x00000000}, ++ {0x0000b1d8, 0x00000000}, ++ {0x0000b1dc, 0x00000000}, ++ {0x0000b1e0, 0x00000000}, ++ {0x0000b1e4, 0x00000000}, ++ {0x0000b1e8, 0x00000000}, ++ {0x0000b1ec, 0x00000000}, ++ {0x0000b1f0, 0x00000396}, ++ {0x0000b1f4, 0x00000396}, ++ {0x0000b1f8, 0x00000396}, ++ {0x0000b1fc, 0x00000196}, ++}; ++ ++static const u32 ar9300Modes_low_ob_db_tx_gain_table_2p2[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, ++ {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, ++ {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, ++ {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, ++ {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, ++ {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, ++ {0x0000a518, 0x21002220, 0x21002220, 0x16000402, 0x16000402}, ++ {0x0000a51c, 0x27002223, 0x27002223, 0x19000404, 0x19000404}, ++ {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, ++ {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, ++ {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, ++ {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, ++ {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, ++ {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, ++ {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, ++ {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, ++ {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, ++ {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861}, ++ {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81}, ++ {0x0000a54c, 0x5c02486b, 0x5c02486b, 0x47001a83, 0x47001a83}, ++ {0x0000a550, 0x61024a6c, 0x61024a6c, 0x4a001c84, 0x4a001c84}, ++ {0x0000a554, 0x66026a6c, 0x66026a6c, 0x4e001ce3, 0x4e001ce3}, ++ {0x0000a558, 0x6b026e6c, 0x6b026e6c, 0x52001ce5, 0x52001ce5}, ++ {0x0000a55c, 0x7002708c, 0x7002708c, 0x56001ce9, 0x56001ce9}, ++ {0x0000a560, 0x7302b08a, 0x7302b08a, 0x5a001ceb, 0x5a001ceb}, ++ {0x0000a564, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a568, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a56c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a570, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a574, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a578, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a57c, 0x7702b08c, 0x7702b08c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, ++ {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, ++ {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, ++ {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, ++ {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, ++ {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, ++ {0x0000a598, 0x21802220, 0x21802220, 0x16800402, 0x16800402}, ++ {0x0000a59c, 0x27802223, 0x27802223, 0x19800404, 0x19800404}, ++ {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, ++ {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, ++ {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, ++ {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, ++ {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, ++ {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, ++ {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, ++ {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, ++ {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, ++ {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861}, ++ {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81}, ++ {0x0000a5cc, 0x5c82486b, 0x5c82486b, 0x47801a83, 0x47801a83}, ++ {0x0000a5d0, 0x61824a6c, 0x61824a6c, 0x4a801c84, 0x4a801c84}, ++ {0x0000a5d4, 0x66826a6c, 0x66826a6c, 0x4e801ce3, 0x4e801ce3}, ++ {0x0000a5d8, 0x6b826e6c, 0x6b826e6c, 0x52801ce5, 0x52801ce5}, ++ {0x0000a5dc, 0x7082708c, 0x7082708c, 0x56801ce9, 0x56801ce9}, ++ {0x0000a5e0, 0x7382b08a, 0x7382b08a, 0x5a801ceb, 0x5a801ceb}, ++ {0x0000a5e4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5e8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5ec, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f0, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f4, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f8, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5fc, 0x7782b08c, 0x7782b08c, 0x5d801eec, 0x5d801eec}, ++ {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016048, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, ++ {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016448, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, ++ {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016848, 0x66480001, 0x66480001, 0x66480001, 0x66480001}, ++ {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++}; ++ ++static const u32 ar9300_2p2_mac_core[][2] = { ++ /* Addr allmodes */ ++ {0x00000008, 0x00000000}, ++ {0x00000030, 0x00020085}, ++ {0x00000034, 0x00000005}, ++ {0x00000040, 0x00000000}, ++ {0x00000044, 0x00000000}, ++ {0x00000048, 0x00000008}, ++ {0x0000004c, 0x00000010}, ++ {0x00000050, 0x00000000}, ++ {0x00001040, 0x002ffc0f}, ++ {0x00001044, 0x002ffc0f}, ++ {0x00001048, 0x002ffc0f}, ++ {0x0000104c, 0x002ffc0f}, ++ {0x00001050, 0x002ffc0f}, ++ {0x00001054, 0x002ffc0f}, ++ {0x00001058, 0x002ffc0f}, ++ {0x0000105c, 0x002ffc0f}, ++ {0x00001060, 0x002ffc0f}, ++ {0x00001064, 0x002ffc0f}, ++ {0x000010f0, 0x00000100}, ++ {0x00001270, 0x00000000}, ++ {0x000012b0, 0x00000000}, ++ {0x000012f0, 0x00000000}, ++ {0x0000143c, 0x00000000}, ++ {0x0000147c, 0x00000000}, ++ {0x00008000, 0x00000000}, ++ {0x00008004, 0x00000000}, ++ {0x00008008, 0x00000000}, ++ {0x0000800c, 0x00000000}, ++ {0x00008018, 0x00000000}, ++ {0x00008020, 0x00000000}, ++ {0x00008038, 0x00000000}, ++ {0x0000803c, 0x00000000}, ++ {0x00008040, 0x00000000}, ++ {0x00008044, 0x00000000}, ++ {0x00008048, 0x00000000}, ++ {0x0000804c, 0xffffffff}, ++ {0x00008054, 0x00000000}, ++ {0x00008058, 0x00000000}, ++ {0x0000805c, 0x000fc78f}, ++ {0x00008060, 0x0000000f}, ++ {0x00008064, 0x00000000}, ++ {0x00008070, 0x00000310}, ++ {0x00008074, 0x00000020}, ++ {0x00008078, 0x00000000}, ++ {0x0000809c, 0x0000000f}, ++ {0x000080a0, 0x00000000}, ++ {0x000080a4, 0x02ff0000}, ++ {0x000080a8, 0x0e070605}, ++ {0x000080ac, 0x0000000d}, ++ {0x000080b0, 0x00000000}, ++ {0x000080b4, 0x00000000}, ++ {0x000080b8, 0x00000000}, ++ {0x000080bc, 0x00000000}, ++ {0x000080c0, 0x2a800000}, ++ {0x000080c4, 0x06900168}, ++ {0x000080c8, 0x13881c20}, ++ {0x000080cc, 0x01f40000}, ++ {0x000080d0, 0x00252500}, ++ {0x000080d4, 0x00a00000}, ++ {0x000080d8, 0x00400000}, ++ {0x000080dc, 0x00000000}, ++ {0x000080e0, 0xffffffff}, ++ {0x000080e4, 0x0000ffff}, ++ {0x000080e8, 0x3f3f3f3f}, ++ {0x000080ec, 0x00000000}, ++ {0x000080f0, 0x00000000}, ++ {0x000080f4, 0x00000000}, ++ {0x000080fc, 0x00020000}, ++ {0x00008100, 0x00000000}, ++ {0x00008108, 0x00000052}, ++ {0x0000810c, 0x00000000}, ++ {0x00008110, 0x00000000}, ++ {0x00008114, 0x000007ff}, ++ {0x00008118, 0x000000aa}, ++ {0x0000811c, 0x00003210}, ++ {0x00008124, 0x00000000}, ++ {0x00008128, 0x00000000}, ++ {0x0000812c, 0x00000000}, ++ {0x00008130, 0x00000000}, ++ {0x00008134, 0x00000000}, ++ {0x00008138, 0x00000000}, ++ {0x0000813c, 0x0000ffff}, ++ {0x00008144, 0xffffffff}, ++ {0x00008168, 0x00000000}, ++ {0x0000816c, 0x00000000}, ++ {0x00008170, 0x18486200}, ++ {0x00008174, 0x33332210}, ++ {0x00008178, 0x00000000}, ++ {0x0000817c, 0x00020000}, ++ {0x000081c0, 0x00000000}, ++ {0x000081c4, 0x33332210}, ++ {0x000081c8, 0x00000000}, ++ {0x000081cc, 0x00000000}, ++ {0x000081d4, 0x00000000}, ++ {0x000081ec, 0x00000000}, ++ {0x000081f0, 0x00000000}, ++ {0x000081f4, 0x00000000}, ++ {0x000081f8, 0x00000000}, ++ {0x000081fc, 0x00000000}, ++ {0x00008240, 0x00100000}, ++ {0x00008244, 0x0010f424}, ++ {0x00008248, 0x00000800}, ++ {0x0000824c, 0x0001e848}, ++ {0x00008250, 0x00000000}, ++ {0x00008254, 0x00000000}, ++ {0x00008258, 0x00000000}, ++ {0x0000825c, 0x40000000}, ++ {0x00008260, 0x00080922}, ++ {0x00008264, 0x9bc00010}, ++ {0x00008268, 0xffffffff}, ++ {0x0000826c, 0x0000ffff}, ++ {0x00008270, 0x00000000}, ++ {0x00008274, 0x40000000}, ++ {0x00008278, 0x003e4180}, ++ {0x0000827c, 0x00000004}, ++ {0x00008284, 0x0000002c}, ++ {0x00008288, 0x0000002c}, ++ {0x0000828c, 0x000000ff}, ++ {0x00008294, 0x00000000}, ++ {0x00008298, 0x00000000}, ++ {0x0000829c, 0x00000000}, ++ {0x00008300, 0x00000140}, ++ {0x00008314, 0x00000000}, ++ {0x0000831c, 0x0000010d}, ++ {0x00008328, 0x00000000}, ++ {0x0000832c, 0x00000007}, ++ {0x00008330, 0x00000302}, ++ {0x00008334, 0x00000700}, ++ {0x00008338, 0x00ff0000}, ++ {0x0000833c, 0x02400000}, ++ {0x00008340, 0x000107ff}, ++ {0x00008344, 0xaa48105b}, ++ {0x00008348, 0x008f0000}, ++ {0x0000835c, 0x00000000}, ++ {0x00008360, 0xffffffff}, ++ {0x00008364, 0xffffffff}, ++ {0x00008368, 0x00000000}, ++ {0x00008370, 0x00000000}, ++ {0x00008374, 0x000000ff}, ++ {0x00008378, 0x00000000}, ++ {0x0000837c, 0x00000000}, ++ {0x00008380, 0xffffffff}, ++ {0x00008384, 0xffffffff}, ++ {0x00008390, 0xffffffff}, ++ {0x00008394, 0xffffffff}, ++ {0x00008398, 0x00000000}, ++ {0x0000839c, 0x00000000}, ++ {0x000083a0, 0x00000000}, ++ {0x000083a4, 0x0000fa14}, ++ {0x000083a8, 0x000f0c00}, ++ {0x000083ac, 0x33332210}, ++ {0x000083b0, 0x33332210}, ++ {0x000083b4, 0x33332210}, ++ {0x000083b8, 0x33332210}, ++ {0x000083bc, 0x00000000}, ++ {0x000083c0, 0x00000000}, ++ {0x000083c4, 0x00000000}, ++ {0x000083c8, 0x00000000}, ++ {0x000083cc, 0x00000200}, ++ {0x000083d0, 0x000301ff}, ++}; ++ ++static const u32 ar9300Common_wo_xlna_rx_gain_table_2p2[][2] = { ++ /* Addr allmodes */ ++ {0x0000a000, 0x00010000}, ++ {0x0000a004, 0x00030002}, ++ {0x0000a008, 0x00050004}, ++ {0x0000a00c, 0x00810080}, ++ {0x0000a010, 0x00830082}, ++ {0x0000a014, 0x01810180}, ++ {0x0000a018, 0x01830182}, ++ {0x0000a01c, 0x01850184}, ++ {0x0000a020, 0x01890188}, ++ {0x0000a024, 0x018b018a}, ++ {0x0000a028, 0x018d018c}, ++ {0x0000a02c, 0x03820190}, ++ {0x0000a030, 0x03840383}, ++ {0x0000a034, 0x03880385}, ++ {0x0000a038, 0x038a0389}, ++ {0x0000a03c, 0x038c038b}, ++ {0x0000a040, 0x0390038d}, ++ {0x0000a044, 0x03920391}, ++ {0x0000a048, 0x03940393}, ++ {0x0000a04c, 0x03960395}, ++ {0x0000a050, 0x00000000}, ++ {0x0000a054, 0x00000000}, ++ {0x0000a058, 0x00000000}, ++ {0x0000a05c, 0x00000000}, ++ {0x0000a060, 0x00000000}, ++ {0x0000a064, 0x00000000}, ++ {0x0000a068, 0x00000000}, ++ {0x0000a06c, 0x00000000}, ++ {0x0000a070, 0x00000000}, ++ {0x0000a074, 0x00000000}, ++ {0x0000a078, 0x00000000}, ++ {0x0000a07c, 0x00000000}, ++ {0x0000a080, 0x29292929}, ++ {0x0000a084, 0x29292929}, ++ {0x0000a088, 0x29292929}, ++ {0x0000a08c, 0x29292929}, ++ {0x0000a090, 0x22292929}, ++ {0x0000a094, 0x1d1d2222}, ++ {0x0000a098, 0x0c111117}, ++ {0x0000a09c, 0x00030303}, ++ {0x0000a0a0, 0x00000000}, ++ {0x0000a0a4, 0x00000000}, ++ {0x0000a0a8, 0x00000000}, ++ {0x0000a0ac, 0x00000000}, ++ {0x0000a0b0, 0x00000000}, ++ {0x0000a0b4, 0x00000000}, ++ {0x0000a0b8, 0x00000000}, ++ {0x0000a0bc, 0x00000000}, ++ {0x0000a0c0, 0x001f0000}, ++ {0x0000a0c4, 0x01000101}, ++ {0x0000a0c8, 0x011e011f}, ++ {0x0000a0cc, 0x011c011d}, ++ {0x0000a0d0, 0x02030204}, ++ {0x0000a0d4, 0x02010202}, ++ {0x0000a0d8, 0x021f0200}, ++ {0x0000a0dc, 0x0302021e}, ++ {0x0000a0e0, 0x03000301}, ++ {0x0000a0e4, 0x031e031f}, ++ {0x0000a0e8, 0x0402031d}, ++ {0x0000a0ec, 0x04000401}, ++ {0x0000a0f0, 0x041e041f}, ++ {0x0000a0f4, 0x0502041d}, ++ {0x0000a0f8, 0x05000501}, ++ {0x0000a0fc, 0x051e051f}, ++ {0x0000a100, 0x06010602}, ++ {0x0000a104, 0x061f0600}, ++ {0x0000a108, 0x061d061e}, ++ {0x0000a10c, 0x07020703}, ++ {0x0000a110, 0x07000701}, ++ {0x0000a114, 0x00000000}, ++ {0x0000a118, 0x00000000}, ++ {0x0000a11c, 0x00000000}, ++ {0x0000a120, 0x00000000}, ++ {0x0000a124, 0x00000000}, ++ {0x0000a128, 0x00000000}, ++ {0x0000a12c, 0x00000000}, ++ {0x0000a130, 0x00000000}, ++ {0x0000a134, 0x00000000}, ++ {0x0000a138, 0x00000000}, ++ {0x0000a13c, 0x00000000}, ++ {0x0000a140, 0x001f0000}, ++ {0x0000a144, 0x01000101}, ++ {0x0000a148, 0x011e011f}, ++ {0x0000a14c, 0x011c011d}, ++ {0x0000a150, 0x02030204}, ++ {0x0000a154, 0x02010202}, ++ {0x0000a158, 0x021f0200}, ++ {0x0000a15c, 0x0302021e}, ++ {0x0000a160, 0x03000301}, ++ {0x0000a164, 0x031e031f}, ++ {0x0000a168, 0x0402031d}, ++ {0x0000a16c, 0x04000401}, ++ {0x0000a170, 0x041e041f}, ++ {0x0000a174, 0x0502041d}, ++ {0x0000a178, 0x05000501}, ++ {0x0000a17c, 0x051e051f}, ++ {0x0000a180, 0x06010602}, ++ {0x0000a184, 0x061f0600}, ++ {0x0000a188, 0x061d061e}, ++ {0x0000a18c, 0x07020703}, ++ {0x0000a190, 0x07000701}, ++ {0x0000a194, 0x00000000}, ++ {0x0000a198, 0x00000000}, ++ {0x0000a19c, 0x00000000}, ++ {0x0000a1a0, 0x00000000}, ++ {0x0000a1a4, 0x00000000}, ++ {0x0000a1a8, 0x00000000}, ++ {0x0000a1ac, 0x00000000}, ++ {0x0000a1b0, 0x00000000}, ++ {0x0000a1b4, 0x00000000}, ++ {0x0000a1b8, 0x00000000}, ++ {0x0000a1bc, 0x00000000}, ++ {0x0000a1c0, 0x00000000}, ++ {0x0000a1c4, 0x00000000}, ++ {0x0000a1c8, 0x00000000}, ++ {0x0000a1cc, 0x00000000}, ++ {0x0000a1d0, 0x00000000}, ++ {0x0000a1d4, 0x00000000}, ++ {0x0000a1d8, 0x00000000}, ++ {0x0000a1dc, 0x00000000}, ++ {0x0000a1e0, 0x00000000}, ++ {0x0000a1e4, 0x00000000}, ++ {0x0000a1e8, 0x00000000}, ++ {0x0000a1ec, 0x00000000}, ++ {0x0000a1f0, 0x00000396}, ++ {0x0000a1f4, 0x00000396}, ++ {0x0000a1f8, 0x00000396}, ++ {0x0000a1fc, 0x00000196}, ++ {0x0000b000, 0x00010000}, ++ {0x0000b004, 0x00030002}, ++ {0x0000b008, 0x00050004}, ++ {0x0000b00c, 0x00810080}, ++ {0x0000b010, 0x00830082}, ++ {0x0000b014, 0x01810180}, ++ {0x0000b018, 0x01830182}, ++ {0x0000b01c, 0x01850184}, ++ {0x0000b020, 0x02810280}, ++ {0x0000b024, 0x02830282}, ++ {0x0000b028, 0x02850284}, ++ {0x0000b02c, 0x02890288}, ++ {0x0000b030, 0x028b028a}, ++ {0x0000b034, 0x0388028c}, ++ {0x0000b038, 0x038a0389}, ++ {0x0000b03c, 0x038c038b}, ++ {0x0000b040, 0x0390038d}, ++ {0x0000b044, 0x03920391}, ++ {0x0000b048, 0x03940393}, ++ {0x0000b04c, 0x03960395}, ++ {0x0000b050, 0x00000000}, ++ {0x0000b054, 0x00000000}, ++ {0x0000b058, 0x00000000}, ++ {0x0000b05c, 0x00000000}, ++ {0x0000b060, 0x00000000}, ++ {0x0000b064, 0x00000000}, ++ {0x0000b068, 0x00000000}, ++ {0x0000b06c, 0x00000000}, ++ {0x0000b070, 0x00000000}, ++ {0x0000b074, 0x00000000}, ++ {0x0000b078, 0x00000000}, ++ {0x0000b07c, 0x00000000}, ++ {0x0000b080, 0x32323232}, ++ {0x0000b084, 0x2f2f3232}, ++ {0x0000b088, 0x23282a2d}, ++ {0x0000b08c, 0x1c1e2123}, ++ {0x0000b090, 0x14171919}, ++ {0x0000b094, 0x0e0e1214}, ++ {0x0000b098, 0x03050707}, ++ {0x0000b09c, 0x00030303}, ++ {0x0000b0a0, 0x00000000}, ++ {0x0000b0a4, 0x00000000}, ++ {0x0000b0a8, 0x00000000}, ++ {0x0000b0ac, 0x00000000}, ++ {0x0000b0b0, 0x00000000}, ++ {0x0000b0b4, 0x00000000}, ++ {0x0000b0b8, 0x00000000}, ++ {0x0000b0bc, 0x00000000}, ++ {0x0000b0c0, 0x003f0020}, ++ {0x0000b0c4, 0x00400041}, ++ {0x0000b0c8, 0x0140005f}, ++ {0x0000b0cc, 0x0160015f}, ++ {0x0000b0d0, 0x017e017f}, ++ {0x0000b0d4, 0x02410242}, ++ {0x0000b0d8, 0x025f0240}, ++ {0x0000b0dc, 0x027f0260}, ++ {0x0000b0e0, 0x0341027e}, ++ {0x0000b0e4, 0x035f0340}, ++ {0x0000b0e8, 0x037f0360}, ++ {0x0000b0ec, 0x04400441}, ++ {0x0000b0f0, 0x0460045f}, ++ {0x0000b0f4, 0x0541047f}, ++ {0x0000b0f8, 0x055f0540}, ++ {0x0000b0fc, 0x057f0560}, ++ {0x0000b100, 0x06400641}, ++ {0x0000b104, 0x0660065f}, ++ {0x0000b108, 0x067e067f}, ++ {0x0000b10c, 0x07410742}, ++ {0x0000b110, 0x075f0740}, ++ {0x0000b114, 0x077f0760}, ++ {0x0000b118, 0x07800781}, ++ {0x0000b11c, 0x07a0079f}, ++ {0x0000b120, 0x07c107bf}, ++ {0x0000b124, 0x000007c0}, ++ {0x0000b128, 0x00000000}, ++ {0x0000b12c, 0x00000000}, ++ {0x0000b130, 0x00000000}, ++ {0x0000b134, 0x00000000}, ++ {0x0000b138, 0x00000000}, ++ {0x0000b13c, 0x00000000}, ++ {0x0000b140, 0x003f0020}, ++ {0x0000b144, 0x00400041}, ++ {0x0000b148, 0x0140005f}, ++ {0x0000b14c, 0x0160015f}, ++ {0x0000b150, 0x017e017f}, ++ {0x0000b154, 0x02410242}, ++ {0x0000b158, 0x025f0240}, ++ {0x0000b15c, 0x027f0260}, ++ {0x0000b160, 0x0341027e}, ++ {0x0000b164, 0x035f0340}, ++ {0x0000b168, 0x037f0360}, ++ {0x0000b16c, 0x04400441}, ++ {0x0000b170, 0x0460045f}, ++ {0x0000b174, 0x0541047f}, ++ {0x0000b178, 0x055f0540}, ++ {0x0000b17c, 0x057f0560}, ++ {0x0000b180, 0x06400641}, ++ {0x0000b184, 0x0660065f}, ++ {0x0000b188, 0x067e067f}, ++ {0x0000b18c, 0x07410742}, ++ {0x0000b190, 0x075f0740}, ++ {0x0000b194, 0x077f0760}, ++ {0x0000b198, 0x07800781}, ++ {0x0000b19c, 0x07a0079f}, ++ {0x0000b1a0, 0x07c107bf}, ++ {0x0000b1a4, 0x000007c0}, ++ {0x0000b1a8, 0x00000000}, ++ {0x0000b1ac, 0x00000000}, ++ {0x0000b1b0, 0x00000000}, ++ {0x0000b1b4, 0x00000000}, ++ {0x0000b1b8, 0x00000000}, ++ {0x0000b1bc, 0x00000000}, ++ {0x0000b1c0, 0x00000000}, ++ {0x0000b1c4, 0x00000000}, ++ {0x0000b1c8, 0x00000000}, ++ {0x0000b1cc, 0x00000000}, ++ {0x0000b1d0, 0x00000000}, ++ {0x0000b1d4, 0x00000000}, ++ {0x0000b1d8, 0x00000000}, ++ {0x0000b1dc, 0x00000000}, ++ {0x0000b1e0, 0x00000000}, ++ {0x0000b1e4, 0x00000000}, ++ {0x0000b1e8, 0x00000000}, ++ {0x0000b1ec, 0x00000000}, ++ {0x0000b1f0, 0x00000396}, ++ {0x0000b1f4, 0x00000396}, ++ {0x0000b1f8, 0x00000396}, ++ {0x0000b1fc, 0x00000196}, ++}; ++ ++static const u32 ar9300_2p2_soc_preamble[][2] = { ++ /* Addr allmodes */ ++ {0x000040a4, 0x00a0c1c9}, ++ {0x00007008, 0x00000000}, ++ {0x00007020, 0x00000000}, ++ {0x00007034, 0x00000002}, ++ {0x00007038, 0x000004c2}, ++ {0x00007048, 0x00000008}, ++}; ++ ++static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p2[][2] = { ++ /* Addr allmodes */ ++ {0x00004040, 0x08212e5e}, ++ {0x00004040, 0x0008003b}, ++ {0x00004044, 0x00000000}, ++}; ++ ++static const u32 ar9300PciePhy_clkreq_enable_L1_2p2[][2] = { ++ /* Addr allmodes */ ++ {0x00004040, 0x08253e5e}, ++ {0x00004040, 0x0008003b}, ++ {0x00004044, 0x00000000}, ++}; ++ ++static const u32 ar9300PciePhy_clkreq_disable_L1_2p2[][2] = { ++ /* Addr allmodes */ ++ {0x00004040, 0x08213e5e}, ++ {0x00004040, 0x0008003b}, ++ {0x00004044, 0x00000000}, ++}; ++ ++#endif /* INITVALS_9003_2P2_H */ +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c +index b15309c..3c4a446 100644 +--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c +@@ -17,6 +17,7 @@ + #include "hw.h" + #include "ar9003_mac.h" + #include "ar9003_initvals.h" ++#include "ar9003_2p2_initvals.h" + + /* General hardware code for the AR9003 hadware family */ + +@@ -31,12 +32,8 @@ static bool ar9003_hw_macversion_supported(u32 macversion) + return false; + } + +-/* AR9003 2.0 - new INI format (pre, core, post arrays per subsystem) */ +-/* +- * XXX: move TX/RX gain INI to its own init_mode_gain_regs after +- * ensuring it does not affect hardware bring up +- */ +-static void ar9003_hw_init_mode_regs(struct ath_hw *ah) ++/* AR9003 2.0 */ ++static void ar9003_2p0_hw_init_mode_regs(struct ath_hw *ah) + { + /* mac */ + INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); +@@ -106,27 +103,128 @@ static void ar9003_hw_init_mode_regs(struct ath_hw *ah) + 3); + } + ++/* AR9003 2.2 */ ++static void ar9003_2p2_hw_init_mode_regs(struct ath_hw *ah) ++{ ++ /* mac */ ++ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_PRE], NULL, 0, 0); ++ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_CORE], ++ ar9300_2p2_mac_core, ++ ARRAY_SIZE(ar9300_2p2_mac_core), 2); ++ INIT_INI_ARRAY(&ah->iniMac[ATH_INI_POST], ++ ar9300_2p2_mac_postamble, ++ ARRAY_SIZE(ar9300_2p2_mac_postamble), 5); ++ ++ /* bb */ ++ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_PRE], NULL, 0, 0); ++ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_CORE], ++ ar9300_2p2_baseband_core, ++ ARRAY_SIZE(ar9300_2p2_baseband_core), 2); ++ INIT_INI_ARRAY(&ah->iniBB[ATH_INI_POST], ++ ar9300_2p2_baseband_postamble, ++ ARRAY_SIZE(ar9300_2p2_baseband_postamble), 5); ++ ++ /* radio */ ++ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_PRE], NULL, 0, 0); ++ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_CORE], ++ ar9300_2p2_radio_core, ++ ARRAY_SIZE(ar9300_2p2_radio_core), 2); ++ INIT_INI_ARRAY(&ah->iniRadio[ATH_INI_POST], ++ ar9300_2p2_radio_postamble, ++ ARRAY_SIZE(ar9300_2p2_radio_postamble), 5); ++ ++ /* soc */ ++ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_PRE], ++ ar9300_2p2_soc_preamble, ++ ARRAY_SIZE(ar9300_2p2_soc_preamble), 2); ++ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_CORE], NULL, 0, 0); ++ INIT_INI_ARRAY(&ah->iniSOC[ATH_INI_POST], ++ ar9300_2p2_soc_postamble, ++ ARRAY_SIZE(ar9300_2p2_soc_postamble), 5); ++ ++ /* rx/tx gain */ ++ INIT_INI_ARRAY(&ah->iniModesRxGain, ++ ar9300Common_rx_gain_table_2p2, ++ ARRAY_SIZE(ar9300Common_rx_gain_table_2p2), 2); ++ INIT_INI_ARRAY(&ah->iniModesTxGain, ++ ar9300Modes_lowest_ob_db_tx_gain_table_2p2, ++ ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p2), ++ 5); ++ ++ /* Load PCIE SERDES settings from INI */ ++ ++ /* Awake Setting */ ++ ++ INIT_INI_ARRAY(&ah->iniPcieSerdes, ++ ar9300PciePhy_pll_on_clkreq_disable_L1_2p2, ++ ARRAY_SIZE(ar9300PciePhy_pll_on_clkreq_disable_L1_2p2), ++ 2); ++ ++ /* Sleep Setting */ ++ ++ INIT_INI_ARRAY(&ah->iniPcieSerdesLowPower, ++ ar9300PciePhy_clkreq_enable_L1_2p2, ++ ARRAY_SIZE(ar9300PciePhy_clkreq_enable_L1_2p2), ++ 2); ++ ++ /* Fast clock modal settings */ ++ INIT_INI_ARRAY(&ah->iniModesAdditional, ++ ar9300Modes_fast_clock_2p2, ++ ARRAY_SIZE(ar9300Modes_fast_clock_2p2), ++ 3); ++} ++ ++/* ++ * The AR9003 family uses a new INI format (pre, core, post ++ * arrays per subsystem). ++ */ ++static void ar9003_hw_init_mode_regs(struct ath_hw *ah) ++{ ++ if (AR_SREV_9300_20(ah)) ++ ar9003_2p0_hw_init_mode_regs(ah); ++ else ++ ar9003_2p2_hw_init_mode_regs(ah); ++} ++ + static void ar9003_tx_gain_table_apply(struct ath_hw *ah) + { + switch (ar9003_hw_get_tx_gain_idx(ah)) { + case 0: + default: +- INIT_INI_ARRAY(&ah->iniModesTxGain, +- ar9300Modes_lowest_ob_db_tx_gain_table_2p0, +- ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p0), +- 5); ++ if (AR_SREV_9300_20(ah)) ++ INIT_INI_ARRAY(&ah->iniModesTxGain, ++ ar9300Modes_lowest_ob_db_tx_gain_table_2p0, ++ ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p0), ++ 5); ++ else ++ INIT_INI_ARRAY(&ah->iniModesTxGain, ++ ar9300Modes_lowest_ob_db_tx_gain_table_2p2, ++ ARRAY_SIZE(ar9300Modes_lowest_ob_db_tx_gain_table_2p2), ++ 5); + break; + case 1: +- INIT_INI_ARRAY(&ah->iniModesTxGain, +- ar9300Modes_high_ob_db_tx_gain_table_2p0, +- ARRAY_SIZE(ar9300Modes_high_ob_db_tx_gain_table_2p0), +- 5); ++ if (AR_SREV_9300_20(ah)) ++ INIT_INI_ARRAY(&ah->iniModesTxGain, ++ ar9300Modes_high_ob_db_tx_gain_table_2p0, ++ ARRAY_SIZE(ar9300Modes_high_ob_db_tx_gain_table_2p0), ++ 5); ++ else ++ INIT_INI_ARRAY(&ah->iniModesTxGain, ++ ar9300Modes_high_ob_db_tx_gain_table_2p2, ++ ARRAY_SIZE(ar9300Modes_high_ob_db_tx_gain_table_2p2), ++ 5); + break; + case 2: +- INIT_INI_ARRAY(&ah->iniModesTxGain, +- ar9300Modes_low_ob_db_tx_gain_table_2p0, +- ARRAY_SIZE(ar9300Modes_low_ob_db_tx_gain_table_2p0), +- 5); ++ if (AR_SREV_9300_20(ah)) ++ INIT_INI_ARRAY(&ah->iniModesTxGain, ++ ar9300Modes_low_ob_db_tx_gain_table_2p0, ++ ARRAY_SIZE(ar9300Modes_low_ob_db_tx_gain_table_2p0), ++ 5); ++ else ++ INIT_INI_ARRAY(&ah->iniModesTxGain, ++ ar9300Modes_low_ob_db_tx_gain_table_2p2, ++ ARRAY_SIZE(ar9300Modes_low_ob_db_tx_gain_table_2p2), ++ 5); + break; + } + } +@@ -136,15 +234,28 @@ static void ar9003_rx_gain_table_apply(struct ath_hw *ah) + switch (ar9003_hw_get_rx_gain_idx(ah)) { + case 0: + default: +- INIT_INI_ARRAY(&ah->iniModesRxGain, ar9300Common_rx_gain_table_2p0, +- ARRAY_SIZE(ar9300Common_rx_gain_table_2p0), +- 2); ++ if (AR_SREV_9300_20(ah)) ++ INIT_INI_ARRAY(&ah->iniModesRxGain, ++ ar9300Common_rx_gain_table_2p0, ++ ARRAY_SIZE(ar9300Common_rx_gain_table_2p0), ++ 2); ++ else ++ INIT_INI_ARRAY(&ah->iniModesRxGain, ++ ar9300Common_rx_gain_table_2p2, ++ ARRAY_SIZE(ar9300Common_rx_gain_table_2p2), ++ 2); + break; + case 1: +- INIT_INI_ARRAY(&ah->iniModesRxGain, +- ar9300Common_wo_xlna_rx_gain_table_2p0, +- ARRAY_SIZE(ar9300Common_wo_xlna_rx_gain_table_2p0), +- 2); ++ if (AR_SREV_9300_20(ah)) ++ INIT_INI_ARRAY(&ah->iniModesRxGain, ++ ar9300Common_wo_xlna_rx_gain_table_2p0, ++ ARRAY_SIZE(ar9300Common_wo_xlna_rx_gain_table_2p0), ++ 2); ++ else ++ INIT_INI_ARRAY(&ah->iniModesRxGain, ++ ar9300Common_wo_xlna_rx_gain_table_2p2, ++ ARRAY_SIZE(ar9300Common_wo_xlna_rx_gain_table_2p2), ++ 2); + break; + } + } +-- +1.6.3.3 + diff --git a/linux-next-pending/0002-ath9k_hw-rename-the-ar9003_initvals.h-to-ar9003_2p0_.patch b/linux-next-pending/0002-ath9k_hw-rename-the-ar9003_initvals.h-to-ar9003_2p0_.patch new file mode 100644 index 000000000000..c9de2a70a000 --- /dev/null +++ b/linux-next-pending/0002-ath9k_hw-rename-the-ar9003_initvals.h-to-ar9003_2p0_.patch @@ -0,0 +1,3610 @@ +From b5676c6a148172d4e5c83791885a8881b0efa23a Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez +Date: Wed, 12 May 2010 17:00:36 -0700 +Subject: [PATCH 02/19] ath9k_hw: rename the ar9003_initvals.h to ar9003_2p0_initvals.h + +Signed-off-by: Luis R. Rodriguez +--- + .../net/wireless/ath/ath9k/ar9003_2p0_initvals.h | 1784 ++++++++++++++++++++ + drivers/net/wireless/ath/ath9k/ar9003_hw.c | 2 +- + drivers/net/wireless/ath/ath9k/ar9003_initvals.h | 1784 -------------------- + 3 files changed, 1785 insertions(+), 1785 deletions(-) + create mode 100644 drivers/net/wireless/ath/ath9k/ar9003_2p0_initvals.h + delete mode 100644 drivers/net/wireless/ath/ath9k/ar9003_initvals.h + +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_2p0_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_2p0_initvals.h +new file mode 100644 +index 0000000..f82a00d +--- /dev/null ++++ b/drivers/net/wireless/ath/ath9k/ar9003_2p0_initvals.h +@@ -0,0 +1,1784 @@ ++/* ++ * Copyright (c) 2010 Atheros Communications Inc. ++ * ++ * Permission to use, copy, modify, and/or distribute this software for any ++ * purpose with or without fee is hereby granted, provided that the above ++ * copyright notice and this permission notice appear in all copies. ++ * ++ * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES ++ * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF ++ * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ++ * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES ++ * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ++ * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF ++ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. ++ */ ++ ++#ifndef INITVALS_9003_2P0_H ++#define INITVALS_9003_2P0_H ++ ++/* AR9003 2.0 */ ++ ++static const u32 ar9300_2p0_radio_postamble[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0001609c, 0x0dd08f29, 0x0dd08f29, 0x0b283f31, 0x0b283f31}, ++ {0x000160ac, 0xa4653c00, 0xa4653c00, 0x24652800, 0x24652800}, ++ {0x000160b0, 0x03284f3e, 0x03284f3e, 0x05d08f20, 0x05d08f20}, ++ {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x00016140, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, ++ {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x00016540, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, ++ {0x0001690c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x00016940, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, ++}; ++ ++static const u32 ar9300Modes_lowest_ob_db_tx_gain_table_2p0[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, ++ {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, ++ {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, ++ {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, ++ {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, ++ {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, ++ {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402}, ++ {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404}, ++ {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, ++ {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, ++ {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, ++ {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, ++ {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, ++ {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, ++ {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, ++ {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, ++ {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, ++ {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861}, ++ {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81}, ++ {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83}, ++ {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84}, ++ {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3}, ++ {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5}, ++ {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9}, ++ {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb}, ++ {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, ++ {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, ++ {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, ++ {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, ++ {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, ++ {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, ++ {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402}, ++ {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404}, ++ {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, ++ {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, ++ {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, ++ {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, ++ {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, ++ {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, ++ {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, ++ {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, ++ {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, ++ {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861}, ++ {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81}, ++ {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83}, ++ {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84}, ++ {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3}, ++ {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5}, ++ {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9}, ++ {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb}, ++ {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016048, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, ++ {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016448, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, ++ {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016848, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, ++ {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++}; ++ ++static const u32 ar9300Modes_fast_clock_2p0[][3] = { ++ /* Addr 5G_HT20 5G_HT40 */ ++ {0x00001030, 0x00000268, 0x000004d0}, ++ {0x00001070, 0x0000018c, 0x00000318}, ++ {0x000010b0, 0x00000fd0, 0x00001fa0}, ++ {0x00008014, 0x044c044c, 0x08980898}, ++ {0x0000801c, 0x148ec02b, 0x148ec057}, ++ {0x00008318, 0x000044c0, 0x00008980}, ++ {0x00009e00, 0x03721821, 0x03721821}, ++ {0x0000a230, 0x0000000b, 0x00000016}, ++ {0x0000a254, 0x00000898, 0x00001130}, ++}; ++ ++static const u32 ar9300_2p0_radio_core[][2] = { ++ /* Addr allmodes */ ++ {0x00016000, 0x36db6db6}, ++ {0x00016004, 0x6db6db40}, ++ {0x00016008, 0x73f00000}, ++ {0x0001600c, 0x00000000}, ++ {0x00016040, 0x7f80fff8}, ++ {0x0001604c, 0x76d005b5}, ++ {0x00016050, 0x556cf031}, ++ {0x00016054, 0x13449440}, ++ {0x00016058, 0x0c51c92c}, ++ {0x0001605c, 0x3db7fffc}, ++ {0x00016060, 0xfffffffc}, ++ {0x00016064, 0x000f0278}, ++ {0x0001606c, 0x6db60000}, ++ {0x00016080, 0x00000000}, ++ {0x00016084, 0x0e48048c}, ++ {0x00016088, 0x54214514}, ++ {0x0001608c, 0x119f481e}, ++ {0x00016090, 0x24926490}, ++ {0x00016098, 0xd2888888}, ++ {0x000160a0, 0x0a108ffe}, ++ {0x000160a4, 0x812fc370}, ++ {0x000160a8, 0x423c8000}, ++ {0x000160b4, 0x92480080}, ++ {0x000160c0, 0x00adb6d0}, ++ {0x000160c4, 0x6db6db60}, ++ {0x000160c8, 0x6db6db6c}, ++ {0x000160cc, 0x01e6c000}, ++ {0x00016100, 0x3fffbe01}, ++ {0x00016104, 0xfff80000}, ++ {0x00016108, 0x00080010}, ++ {0x00016144, 0x02084080}, ++ {0x00016148, 0x00000000}, ++ {0x00016280, 0x058a0001}, ++ {0x00016284, 0x3d840208}, ++ {0x00016288, 0x05a20408}, ++ {0x0001628c, 0x00038c07}, ++ {0x00016290, 0x40000004}, ++ {0x00016294, 0x458aa14f}, ++ {0x00016380, 0x00000000}, ++ {0x00016384, 0x00000000}, ++ {0x00016388, 0x00800700}, ++ {0x0001638c, 0x00800700}, ++ {0x00016390, 0x00800700}, ++ {0x00016394, 0x00000000}, ++ {0x00016398, 0x00000000}, ++ {0x0001639c, 0x00000000}, ++ {0x000163a0, 0x00000001}, ++ {0x000163a4, 0x00000001}, ++ {0x000163a8, 0x00000000}, ++ {0x000163ac, 0x00000000}, ++ {0x000163b0, 0x00000000}, ++ {0x000163b4, 0x00000000}, ++ {0x000163b8, 0x00000000}, ++ {0x000163bc, 0x00000000}, ++ {0x000163c0, 0x000000a0}, ++ {0x000163c4, 0x000c0000}, ++ {0x000163c8, 0x14021402}, ++ {0x000163cc, 0x00001402}, ++ {0x000163d0, 0x00000000}, ++ {0x000163d4, 0x00000000}, ++ {0x00016400, 0x36db6db6}, ++ {0x00016404, 0x6db6db40}, ++ {0x00016408, 0x73f00000}, ++ {0x0001640c, 0x00000000}, ++ {0x00016440, 0x7f80fff8}, ++ {0x0001644c, 0x76d005b5}, ++ {0x00016450, 0x556cf031}, ++ {0x00016454, 0x13449440}, ++ {0x00016458, 0x0c51c92c}, ++ {0x0001645c, 0x3db7fffc}, ++ {0x00016460, 0xfffffffc}, ++ {0x00016464, 0x000f0278}, ++ {0x0001646c, 0x6db60000}, ++ {0x00016500, 0x3fffbe01}, ++ {0x00016504, 0xfff80000}, ++ {0x00016508, 0x00080010}, ++ {0x00016544, 0x02084080}, ++ {0x00016548, 0x00000000}, ++ {0x00016780, 0x00000000}, ++ {0x00016784, 0x00000000}, ++ {0x00016788, 0x00800700}, ++ {0x0001678c, 0x00800700}, ++ {0x00016790, 0x00800700}, ++ {0x00016794, 0x00000000}, ++ {0x00016798, 0x00000000}, ++ {0x0001679c, 0x00000000}, ++ {0x000167a0, 0x00000001}, ++ {0x000167a4, 0x00000001}, ++ {0x000167a8, 0x00000000}, ++ {0x000167ac, 0x00000000}, ++ {0x000167b0, 0x00000000}, ++ {0x000167b4, 0x00000000}, ++ {0x000167b8, 0x00000000}, ++ {0x000167bc, 0x00000000}, ++ {0x000167c0, 0x000000a0}, ++ {0x000167c4, 0x000c0000}, ++ {0x000167c8, 0x14021402}, ++ {0x000167cc, 0x00001402}, ++ {0x000167d0, 0x00000000}, ++ {0x000167d4, 0x00000000}, ++ {0x00016800, 0x36db6db6}, ++ {0x00016804, 0x6db6db40}, ++ {0x00016808, 0x73f00000}, ++ {0x0001680c, 0x00000000}, ++ {0x00016840, 0x7f80fff8}, ++ {0x0001684c, 0x76d005b5}, ++ {0x00016850, 0x556cf031}, ++ {0x00016854, 0x13449440}, ++ {0x00016858, 0x0c51c92c}, ++ {0x0001685c, 0x3db7fffc}, ++ {0x00016860, 0xfffffffc}, ++ {0x00016864, 0x000f0278}, ++ {0x0001686c, 0x6db60000}, ++ {0x00016900, 0x3fffbe01}, ++ {0x00016904, 0xfff80000}, ++ {0x00016908, 0x00080010}, ++ {0x00016944, 0x02084080}, ++ {0x00016948, 0x00000000}, ++ {0x00016b80, 0x00000000}, ++ {0x00016b84, 0x00000000}, ++ {0x00016b88, 0x00800700}, ++ {0x00016b8c, 0x00800700}, ++ {0x00016b90, 0x00800700}, ++ {0x00016b94, 0x00000000}, ++ {0x00016b98, 0x00000000}, ++ {0x00016b9c, 0x00000000}, ++ {0x00016ba0, 0x00000001}, ++ {0x00016ba4, 0x00000001}, ++ {0x00016ba8, 0x00000000}, ++ {0x00016bac, 0x00000000}, ++ {0x00016bb0, 0x00000000}, ++ {0x00016bb4, 0x00000000}, ++ {0x00016bb8, 0x00000000}, ++ {0x00016bbc, 0x00000000}, ++ {0x00016bc0, 0x000000a0}, ++ {0x00016bc4, 0x000c0000}, ++ {0x00016bc8, 0x14021402}, ++ {0x00016bcc, 0x00001402}, ++ {0x00016bd0, 0x00000000}, ++ {0x00016bd4, 0x00000000}, ++}; ++ ++static const u32 ar9300Common_rx_gain_table_merlin_2p0[][2] = { ++ /* Addr allmodes */ ++ {0x0000a000, 0x02000101}, ++ {0x0000a004, 0x02000102}, ++ {0x0000a008, 0x02000103}, ++ {0x0000a00c, 0x02000104}, ++ {0x0000a010, 0x02000200}, ++ {0x0000a014, 0x02000201}, ++ {0x0000a018, 0x02000202}, ++ {0x0000a01c, 0x02000203}, ++ {0x0000a020, 0x02000204}, ++ {0x0000a024, 0x02000205}, ++ {0x0000a028, 0x02000208}, ++ {0x0000a02c, 0x02000302}, ++ {0x0000a030, 0x02000303}, ++ {0x0000a034, 0x02000304}, ++ {0x0000a038, 0x02000400}, ++ {0x0000a03c, 0x02010300}, ++ {0x0000a040, 0x02010301}, ++ {0x0000a044, 0x02010302}, ++ {0x0000a048, 0x02000500}, ++ {0x0000a04c, 0x02010400}, ++ {0x0000a050, 0x02020300}, ++ {0x0000a054, 0x02020301}, ++ {0x0000a058, 0x02020302}, ++ {0x0000a05c, 0x02020303}, ++ {0x0000a060, 0x02020400}, ++ {0x0000a064, 0x02030300}, ++ {0x0000a068, 0x02030301}, ++ {0x0000a06c, 0x02030302}, ++ {0x0000a070, 0x02030303}, ++ {0x0000a074, 0x02030400}, ++ {0x0000a078, 0x02040300}, ++ {0x0000a07c, 0x02040301}, ++ {0x0000a080, 0x02040302}, ++ {0x0000a084, 0x02040303}, ++ {0x0000a088, 0x02030500}, ++ {0x0000a08c, 0x02040400}, ++ {0x0000a090, 0x02050203}, ++ {0x0000a094, 0x02050204}, ++ {0x0000a098, 0x02050205}, ++ {0x0000a09c, 0x02040500}, ++ {0x0000a0a0, 0x02050301}, ++ {0x0000a0a4, 0x02050302}, ++ {0x0000a0a8, 0x02050303}, ++ {0x0000a0ac, 0x02050400}, ++ {0x0000a0b0, 0x02050401}, ++ {0x0000a0b4, 0x02050402}, ++ {0x0000a0b8, 0x02050403}, ++ {0x0000a0bc, 0x02050500}, ++ {0x0000a0c0, 0x02050501}, ++ {0x0000a0c4, 0x02050502}, ++ {0x0000a0c8, 0x02050503}, ++ {0x0000a0cc, 0x02050504}, ++ {0x0000a0d0, 0x02050600}, ++ {0x0000a0d4, 0x02050601}, ++ {0x0000a0d8, 0x02050602}, ++ {0x0000a0dc, 0x02050603}, ++ {0x0000a0e0, 0x02050604}, ++ {0x0000a0e4, 0x02050700}, ++ {0x0000a0e8, 0x02050701}, ++ {0x0000a0ec, 0x02050702}, ++ {0x0000a0f0, 0x02050703}, ++ {0x0000a0f4, 0x02050704}, ++ {0x0000a0f8, 0x02050705}, ++ {0x0000a0fc, 0x02050708}, ++ {0x0000a100, 0x02050709}, ++ {0x0000a104, 0x0205070a}, ++ {0x0000a108, 0x0205070b}, ++ {0x0000a10c, 0x0205070c}, ++ {0x0000a110, 0x0205070d}, ++ {0x0000a114, 0x02050710}, ++ {0x0000a118, 0x02050711}, ++ {0x0000a11c, 0x02050712}, ++ {0x0000a120, 0x02050713}, ++ {0x0000a124, 0x02050714}, ++ {0x0000a128, 0x02050715}, ++ {0x0000a12c, 0x02050730}, ++ {0x0000a130, 0x02050731}, ++ {0x0000a134, 0x02050732}, ++ {0x0000a138, 0x02050733}, ++ {0x0000a13c, 0x02050734}, ++ {0x0000a140, 0x02050735}, ++ {0x0000a144, 0x02050750}, ++ {0x0000a148, 0x02050751}, ++ {0x0000a14c, 0x02050752}, ++ {0x0000a150, 0x02050753}, ++ {0x0000a154, 0x02050754}, ++ {0x0000a158, 0x02050755}, ++ {0x0000a15c, 0x02050770}, ++ {0x0000a160, 0x02050771}, ++ {0x0000a164, 0x02050772}, ++ {0x0000a168, 0x02050773}, ++ {0x0000a16c, 0x02050774}, ++ {0x0000a170, 0x02050775}, ++ {0x0000a174, 0x00000776}, ++ {0x0000a178, 0x00000776}, ++ {0x0000a17c, 0x00000776}, ++ {0x0000a180, 0x00000776}, ++ {0x0000a184, 0x00000776}, ++ {0x0000a188, 0x00000776}, ++ {0x0000a18c, 0x00000776}, ++ {0x0000a190, 0x00000776}, ++ {0x0000a194, 0x00000776}, ++ {0x0000a198, 0x00000776}, ++ {0x0000a19c, 0x00000776}, ++ {0x0000a1a0, 0x00000776}, ++ {0x0000a1a4, 0x00000776}, ++ {0x0000a1a8, 0x00000776}, ++ {0x0000a1ac, 0x00000776}, ++ {0x0000a1b0, 0x00000776}, ++ {0x0000a1b4, 0x00000776}, ++ {0x0000a1b8, 0x00000776}, ++ {0x0000a1bc, 0x00000776}, ++ {0x0000a1c0, 0x00000776}, ++ {0x0000a1c4, 0x00000776}, ++ {0x0000a1c8, 0x00000776}, ++ {0x0000a1cc, 0x00000776}, ++ {0x0000a1d0, 0x00000776}, ++ {0x0000a1d4, 0x00000776}, ++ {0x0000a1d8, 0x00000776}, ++ {0x0000a1dc, 0x00000776}, ++ {0x0000a1e0, 0x00000776}, ++ {0x0000a1e4, 0x00000776}, ++ {0x0000a1e8, 0x00000776}, ++ {0x0000a1ec, 0x00000776}, ++ {0x0000a1f0, 0x00000776}, ++ {0x0000a1f4, 0x00000776}, ++ {0x0000a1f8, 0x00000776}, ++ {0x0000a1fc, 0x00000776}, ++ {0x0000b000, 0x02000101}, ++ {0x0000b004, 0x02000102}, ++ {0x0000b008, 0x02000103}, ++ {0x0000b00c, 0x02000104}, ++ {0x0000b010, 0x02000200}, ++ {0x0000b014, 0x02000201}, ++ {0x0000b018, 0x02000202}, ++ {0x0000b01c, 0x02000203}, ++ {0x0000b020, 0x02000204}, ++ {0x0000b024, 0x02000205}, ++ {0x0000b028, 0x02000208}, ++ {0x0000b02c, 0x02000302}, ++ {0x0000b030, 0x02000303}, ++ {0x0000b034, 0x02000304}, ++ {0x0000b038, 0x02000400}, ++ {0x0000b03c, 0x02010300}, ++ {0x0000b040, 0x02010301}, ++ {0x0000b044, 0x02010302}, ++ {0x0000b048, 0x02000500}, ++ {0x0000b04c, 0x02010400}, ++ {0x0000b050, 0x02020300}, ++ {0x0000b054, 0x02020301}, ++ {0x0000b058, 0x02020302}, ++ {0x0000b05c, 0x02020303}, ++ {0x0000b060, 0x02020400}, ++ {0x0000b064, 0x02030300}, ++ {0x0000b068, 0x02030301}, ++ {0x0000b06c, 0x02030302}, ++ {0x0000b070, 0x02030303}, ++ {0x0000b074, 0x02030400}, ++ {0x0000b078, 0x02040300}, ++ {0x0000b07c, 0x02040301}, ++ {0x0000b080, 0x02040302}, ++ {0x0000b084, 0x02040303}, ++ {0x0000b088, 0x02030500}, ++ {0x0000b08c, 0x02040400}, ++ {0x0000b090, 0x02050203}, ++ {0x0000b094, 0x02050204}, ++ {0x0000b098, 0x02050205}, ++ {0x0000b09c, 0x02040500}, ++ {0x0000b0a0, 0x02050301}, ++ {0x0000b0a4, 0x02050302}, ++ {0x0000b0a8, 0x02050303}, ++ {0x0000b0ac, 0x02050400}, ++ {0x0000b0b0, 0x02050401}, ++ {0x0000b0b4, 0x02050402}, ++ {0x0000b0b8, 0x02050403}, ++ {0x0000b0bc, 0x02050500}, ++ {0x0000b0c0, 0x02050501}, ++ {0x0000b0c4, 0x02050502}, ++ {0x0000b0c8, 0x02050503}, ++ {0x0000b0cc, 0x02050504}, ++ {0x0000b0d0, 0x02050600}, ++ {0x0000b0d4, 0x02050601}, ++ {0x0000b0d8, 0x02050602}, ++ {0x0000b0dc, 0x02050603}, ++ {0x0000b0e0, 0x02050604}, ++ {0x0000b0e4, 0x02050700}, ++ {0x0000b0e8, 0x02050701}, ++ {0x0000b0ec, 0x02050702}, ++ {0x0000b0f0, 0x02050703}, ++ {0x0000b0f4, 0x02050704}, ++ {0x0000b0f8, 0x02050705}, ++ {0x0000b0fc, 0x02050708}, ++ {0x0000b100, 0x02050709}, ++ {0x0000b104, 0x0205070a}, ++ {0x0000b108, 0x0205070b}, ++ {0x0000b10c, 0x0205070c}, ++ {0x0000b110, 0x0205070d}, ++ {0x0000b114, 0x02050710}, ++ {0x0000b118, 0x02050711}, ++ {0x0000b11c, 0x02050712}, ++ {0x0000b120, 0x02050713}, ++ {0x0000b124, 0x02050714}, ++ {0x0000b128, 0x02050715}, ++ {0x0000b12c, 0x02050730}, ++ {0x0000b130, 0x02050731}, ++ {0x0000b134, 0x02050732}, ++ {0x0000b138, 0x02050733}, ++ {0x0000b13c, 0x02050734}, ++ {0x0000b140, 0x02050735}, ++ {0x0000b144, 0x02050750}, ++ {0x0000b148, 0x02050751}, ++ {0x0000b14c, 0x02050752}, ++ {0x0000b150, 0x02050753}, ++ {0x0000b154, 0x02050754}, ++ {0x0000b158, 0x02050755}, ++ {0x0000b15c, 0x02050770}, ++ {0x0000b160, 0x02050771}, ++ {0x0000b164, 0x02050772}, ++ {0x0000b168, 0x02050773}, ++ {0x0000b16c, 0x02050774}, ++ {0x0000b170, 0x02050775}, ++ {0x0000b174, 0x00000776}, ++ {0x0000b178, 0x00000776}, ++ {0x0000b17c, 0x00000776}, ++ {0x0000b180, 0x00000776}, ++ {0x0000b184, 0x00000776}, ++ {0x0000b188, 0x00000776}, ++ {0x0000b18c, 0x00000776}, ++ {0x0000b190, 0x00000776}, ++ {0x0000b194, 0x00000776}, ++ {0x0000b198, 0x00000776}, ++ {0x0000b19c, 0x00000776}, ++ {0x0000b1a0, 0x00000776}, ++ {0x0000b1a4, 0x00000776}, ++ {0x0000b1a8, 0x00000776}, ++ {0x0000b1ac, 0x00000776}, ++ {0x0000b1b0, 0x00000776}, ++ {0x0000b1b4, 0x00000776}, ++ {0x0000b1b8, 0x00000776}, ++ {0x0000b1bc, 0x00000776}, ++ {0x0000b1c0, 0x00000776}, ++ {0x0000b1c4, 0x00000776}, ++ {0x0000b1c8, 0x00000776}, ++ {0x0000b1cc, 0x00000776}, ++ {0x0000b1d0, 0x00000776}, ++ {0x0000b1d4, 0x00000776}, ++ {0x0000b1d8, 0x00000776}, ++ {0x0000b1dc, 0x00000776}, ++ {0x0000b1e0, 0x00000776}, ++ {0x0000b1e4, 0x00000776}, ++ {0x0000b1e8, 0x00000776}, ++ {0x0000b1ec, 0x00000776}, ++ {0x0000b1f0, 0x00000776}, ++ {0x0000b1f4, 0x00000776}, ++ {0x0000b1f8, 0x00000776}, ++ {0x0000b1fc, 0x00000776}, ++}; ++ ++static const u32 ar9300_2p0_mac_postamble[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160}, ++ {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c}, ++ {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38}, ++ {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00}, ++ {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b}, ++ {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810}, ++ {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a}, ++ {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440}, ++}; ++ ++static const u32 ar9300_2p0_soc_postamble[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023}, ++}; ++ ++static const u32 ar9200_merlin_2p0_radio_core[][2] = { ++ /* Addr allmodes */ ++ {0x00007800, 0x00040000}, ++ {0x00007804, 0xdb005012}, ++ {0x00007808, 0x04924914}, ++ {0x0000780c, 0x21084210}, ++ {0x00007810, 0x6d801300}, ++ {0x00007814, 0x0019beff}, ++ {0x00007818, 0x07e41000}, ++ {0x0000781c, 0x00392000}, ++ {0x00007820, 0x92592480}, ++ {0x00007824, 0x00040000}, ++ {0x00007828, 0xdb005012}, ++ {0x0000782c, 0x04924914}, ++ {0x00007830, 0x21084210}, ++ {0x00007834, 0x6d801300}, ++ {0x00007838, 0x0019beff}, ++ {0x0000783c, 0x07e40000}, ++ {0x00007840, 0x00392000}, ++ {0x00007844, 0x92592480}, ++ {0x00007848, 0x00100000}, ++ {0x0000784c, 0x773f0567}, ++ {0x00007850, 0x54214514}, ++ {0x00007854, 0x12035828}, ++ {0x00007858, 0x92592692}, ++ {0x0000785c, 0x00000000}, ++ {0x00007860, 0x56400000}, ++ {0x00007864, 0x0a8e370e}, ++ {0x00007868, 0xc0102850}, ++ {0x0000786c, 0x812d4000}, ++ {0x00007870, 0x807ec400}, ++ {0x00007874, 0x001b6db0}, ++ {0x00007878, 0x00376b63}, ++ {0x0000787c, 0x06db6db6}, ++ {0x00007880, 0x006d8000}, ++ {0x00007884, 0xffeffffe}, ++ {0x00007888, 0xffeffffe}, ++ {0x0000788c, 0x00010000}, ++ {0x00007890, 0x02060aeb}, ++ {0x00007894, 0x5a108000}, ++}; ++ ++static const u32 ar9300_2p0_baseband_postamble[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8011, 0xd00a8011}, ++ {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e}, ++ {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0}, ++ {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881}, ++ {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4}, ++ {0x00009830, 0x0000059c, 0x0000059c, 0x0000119c, 0x0000119c}, ++ {0x00009c00, 0x00000044, 0x000000c4, 0x000000c4, 0x00000044}, ++ {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0}, ++ {0x00009e04, 0x00802020, 0x00802020, 0x00802020, 0x00802020}, ++ {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2}, ++ {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e}, ++ {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e}, ++ {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c}, ++ {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce}, ++ {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021}, ++ {0x00009e44, 0x02321e27, 0x02321e27, 0x02291e27, 0x02291e27}, ++ {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012}, ++ {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000}, ++ {0x0000a204, 0x000037c0, 0x000037c4, 0x000037c4, 0x000037c0}, ++ {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004}, ++ {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b}, ++ {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018}, ++ {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108}, ++ {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898}, ++ {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002}, ++ {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e}, ++ {0x0000a260, 0x0a021501, 0x0a021501, 0x3a021501, 0x3a021501}, ++ {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e}, ++ {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b}, ++ {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, ++ {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110}, ++ {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222}, ++ {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18}, ++ {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982}, ++ {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a}, ++ {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, ++ {0x0000ae04, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, ++ {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, ++ {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce}, ++ {0x0000b284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, ++ {0x0000b830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, ++ {0x0000be04, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, ++ {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000be1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, ++ {0x0000be20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce}, ++ {0x0000c284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, ++}; ++ ++static const u32 ar9300_2p0_baseband_core[][2] = { ++ /* Addr allmodes */ ++ {0x00009800, 0xafe68e30}, ++ {0x00009804, 0xfd14e000}, ++ {0x00009808, 0x9c0a9f6b}, ++ {0x0000980c, 0x04900000}, ++ {0x00009814, 0x9280c00a}, ++ {0x00009818, 0x00000000}, ++ {0x0000981c, 0x00020028}, ++ {0x00009834, 0x5f3ca3de}, ++ {0x00009838, 0x0108ecff}, ++ {0x0000983c, 0x14750600}, ++ {0x00009880, 0x201fff00}, ++ {0x00009884, 0x00001042}, ++ {0x000098a4, 0x00200400}, ++ {0x000098b0, 0x52440bbe}, ++ {0x000098d0, 0x004b6a8e}, ++ {0x000098d4, 0x00000820}, ++ {0x000098dc, 0x00000000}, ++ {0x000098f0, 0x00000000}, ++ {0x000098f4, 0x00000000}, ++ {0x00009c04, 0xff55ff55}, ++ {0x00009c08, 0x0320ff55}, ++ {0x00009c0c, 0x00000000}, ++ {0x00009c10, 0x00000000}, ++ {0x00009c14, 0x00046384}, ++ {0x00009c18, 0x05b6b440}, ++ {0x00009c1c, 0x00b6b440}, ++ {0x00009d00, 0xc080a333}, ++ {0x00009d04, 0x40206c10}, ++ {0x00009d08, 0x009c4060}, ++ {0x00009d0c, 0x9883800a}, ++ {0x00009d10, 0x01834061}, ++ {0x00009d14, 0x00c0040b}, ++ {0x00009d18, 0x00000000}, ++ {0x00009e08, 0x0038230c}, ++ {0x00009e24, 0x990bb515}, ++ {0x00009e28, 0x0c6f0000}, ++ {0x00009e30, 0x06336f77}, ++ {0x00009e34, 0x6af6532f}, ++ {0x00009e38, 0x0cc80c00}, ++ {0x00009e3c, 0xcf946222}, ++ {0x00009e40, 0x0d261820}, ++ {0x00009e4c, 0x00001004}, ++ {0x00009e50, 0x00ff03f1}, ++ {0x00009e54, 0x00000000}, ++ {0x00009fc0, 0x803e4788}, ++ {0x00009fc4, 0x0001efb5}, ++ {0x00009fcc, 0x40000014}, ++ {0x00009fd0, 0x01193b93}, ++ {0x0000a20c, 0x00000000}, ++ {0x0000a220, 0x00000000}, ++ {0x0000a224, 0x00000000}, ++ {0x0000a228, 0x10002310}, ++ {0x0000a22c, 0x01036a1e}, ++ {0x0000a234, 0x10000fff}, ++ {0x0000a23c, 0x00000000}, ++ {0x0000a244, 0x0c000000}, ++ {0x0000a2a0, 0x00000001}, ++ {0x0000a2c0, 0x00000001}, ++ {0x0000a2c8, 0x00000000}, ++ {0x0000a2cc, 0x18c43433}, ++ {0x0000a2d4, 0x00000000}, ++ {0x0000a2dc, 0x00000000}, ++ {0x0000a2e0, 0x00000000}, ++ {0x0000a2e4, 0x00000000}, ++ {0x0000a2e8, 0x00000000}, ++ {0x0000a2ec, 0x00000000}, ++ {0x0000a2f0, 0x00000000}, ++ {0x0000a2f4, 0x00000000}, ++ {0x0000a2f8, 0x00000000}, ++ {0x0000a344, 0x00000000}, ++ {0x0000a34c, 0x00000000}, ++ {0x0000a350, 0x0000a000}, ++ {0x0000a364, 0x00000000}, ++ {0x0000a370, 0x00000000}, ++ {0x0000a390, 0x00000001}, ++ {0x0000a394, 0x00000444}, ++ {0x0000a398, 0x001f0e0f}, ++ {0x0000a39c, 0x0075393f}, ++ {0x0000a3a0, 0xb79f6427}, ++ {0x0000a3a4, 0x00000000}, ++ {0x0000a3a8, 0xaaaaaaaa}, ++ {0x0000a3ac, 0x3c466478}, ++ {0x0000a3c0, 0x20202020}, ++ {0x0000a3c4, 0x22222220}, ++ {0x0000a3c8, 0x20200020}, ++ {0x0000a3cc, 0x20202020}, ++ {0x0000a3d0, 0x20202020}, ++ {0x0000a3d4, 0x20202020}, ++ {0x0000a3d8, 0x20202020}, ++ {0x0000a3dc, 0x20202020}, ++ {0x0000a3e0, 0x20202020}, ++ {0x0000a3e4, 0x20202020}, ++ {0x0000a3e8, 0x20202020}, ++ {0x0000a3ec, 0x20202020}, ++ {0x0000a3f0, 0x00000000}, ++ {0x0000a3f4, 0x00000246}, ++ {0x0000a3f8, 0x0cdbd380}, ++ {0x0000a3fc, 0x000f0f01}, ++ {0x0000a400, 0x8fa91f01}, ++ {0x0000a404, 0x00000000}, ++ {0x0000a408, 0x0e79e5c6}, ++ {0x0000a40c, 0x00820820}, ++ {0x0000a414, 0x1ce739ce}, ++ {0x0000a418, 0x2d001dce}, ++ {0x0000a41c, 0x1ce739ce}, ++ {0x0000a420, 0x000001ce}, ++ {0x0000a424, 0x1ce739ce}, ++ {0x0000a428, 0x000001ce}, ++ {0x0000a42c, 0x1ce739ce}, ++ {0x0000a430, 0x1ce739ce}, ++ {0x0000a434, 0x00000000}, ++ {0x0000a438, 0x00001801}, ++ {0x0000a43c, 0x00000000}, ++ {0x0000a440, 0x00000000}, ++ {0x0000a444, 0x00000000}, ++ {0x0000a448, 0x04000080}, ++ {0x0000a44c, 0x00000001}, ++ {0x0000a450, 0x00010000}, ++ {0x0000a458, 0x00000000}, ++ {0x0000a600, 0x00000000}, ++ {0x0000a604, 0x00000000}, ++ {0x0000a608, 0x00000000}, ++ {0x0000a60c, 0x00000000}, ++ {0x0000a610, 0x00000000}, ++ {0x0000a614, 0x00000000}, ++ {0x0000a618, 0x00000000}, ++ {0x0000a61c, 0x00000000}, ++ {0x0000a620, 0x00000000}, ++ {0x0000a624, 0x00000000}, ++ {0x0000a628, 0x00000000}, ++ {0x0000a62c, 0x00000000}, ++ {0x0000a630, 0x00000000}, ++ {0x0000a634, 0x00000000}, ++ {0x0000a638, 0x00000000}, ++ {0x0000a63c, 0x00000000}, ++ {0x0000a640, 0x00000000}, ++ {0x0000a644, 0x3fad9d74}, ++ {0x0000a648, 0x0048060a}, ++ {0x0000a64c, 0x00000637}, ++ {0x0000a670, 0x03020100}, ++ {0x0000a674, 0x09080504}, ++ {0x0000a678, 0x0d0c0b0a}, ++ {0x0000a67c, 0x13121110}, ++ {0x0000a680, 0x31301514}, ++ {0x0000a684, 0x35343332}, ++ {0x0000a688, 0x00000036}, ++ {0x0000a690, 0x00000838}, ++ {0x0000a7c0, 0x00000000}, ++ {0x0000a7c4, 0xfffffffc}, ++ {0x0000a7c8, 0x00000000}, ++ {0x0000a7cc, 0x00000000}, ++ {0x0000a7d0, 0x00000000}, ++ {0x0000a7d4, 0x00000004}, ++ {0x0000a7dc, 0x00000001}, ++ {0x0000a8d0, 0x004b6a8e}, ++ {0x0000a8d4, 0x00000820}, ++ {0x0000a8dc, 0x00000000}, ++ {0x0000a8f0, 0x00000000}, ++ {0x0000a8f4, 0x00000000}, ++ {0x0000b2d0, 0x00000080}, ++ {0x0000b2d4, 0x00000000}, ++ {0x0000b2dc, 0x00000000}, ++ {0x0000b2e0, 0x00000000}, ++ {0x0000b2e4, 0x00000000}, ++ {0x0000b2e8, 0x00000000}, ++ {0x0000b2ec, 0x00000000}, ++ {0x0000b2f0, 0x00000000}, ++ {0x0000b2f4, 0x00000000}, ++ {0x0000b2f8, 0x00000000}, ++ {0x0000b408, 0x0e79e5c0}, ++ {0x0000b40c, 0x00820820}, ++ {0x0000b420, 0x00000000}, ++ {0x0000b8d0, 0x004b6a8e}, ++ {0x0000b8d4, 0x00000820}, ++ {0x0000b8dc, 0x00000000}, ++ {0x0000b8f0, 0x00000000}, ++ {0x0000b8f4, 0x00000000}, ++ {0x0000c2d0, 0x00000080}, ++ {0x0000c2d4, 0x00000000}, ++ {0x0000c2dc, 0x00000000}, ++ {0x0000c2e0, 0x00000000}, ++ {0x0000c2e4, 0x00000000}, ++ {0x0000c2e8, 0x00000000}, ++ {0x0000c2ec, 0x00000000}, ++ {0x0000c2f0, 0x00000000}, ++ {0x0000c2f4, 0x00000000}, ++ {0x0000c2f8, 0x00000000}, ++ {0x0000c408, 0x0e79e5c0}, ++ {0x0000c40c, 0x00820820}, ++ {0x0000c420, 0x00000000}, ++}; ++ ++static const u32 ar9300Modes_high_power_tx_gain_table_2p0[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, ++ {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000}, ++ {0x0000a504, 0x06002223, 0x06002223, 0x04000002, 0x04000002}, ++ {0x0000a508, 0x0a022220, 0x0a022220, 0x08000004, 0x08000004}, ++ {0x0000a50c, 0x0f022223, 0x0f022223, 0x0b000200, 0x0b000200}, ++ {0x0000a510, 0x14022620, 0x14022620, 0x0f000202, 0x0f000202}, ++ {0x0000a514, 0x18022622, 0x18022622, 0x11000400, 0x11000400}, ++ {0x0000a518, 0x1b022822, 0x1b022822, 0x15000402, 0x15000402}, ++ {0x0000a51c, 0x20022842, 0x20022842, 0x19000404, 0x19000404}, ++ {0x0000a520, 0x22022c41, 0x22022c41, 0x1b000603, 0x1b000603}, ++ {0x0000a524, 0x28023042, 0x28023042, 0x1f000a02, 0x1f000a02}, ++ {0x0000a528, 0x2c023044, 0x2c023044, 0x23000a04, 0x23000a04}, ++ {0x0000a52c, 0x2f023644, 0x2f023644, 0x26000a20, 0x26000a20}, ++ {0x0000a530, 0x34025643, 0x34025643, 0x2a000e20, 0x2a000e20}, ++ {0x0000a534, 0x38025a44, 0x38025a44, 0x2e000e22, 0x2e000e22}, ++ {0x0000a538, 0x3b025e45, 0x3b025e45, 0x31000e24, 0x31000e24}, ++ {0x0000a53c, 0x41025e4a, 0x41025e4a, 0x34001640, 0x34001640}, ++ {0x0000a540, 0x48025e6c, 0x48025e6c, 0x38001660, 0x38001660}, ++ {0x0000a544, 0x4e025e8e, 0x4e025e8e, 0x3b001861, 0x3b001861}, ++ {0x0000a548, 0x53025eb2, 0x53025eb2, 0x3e001a81, 0x3e001a81}, ++ {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83}, ++ {0x0000a550, 0x5f025ef6, 0x5f025ef6, 0x44001c84, 0x44001c84}, ++ {0x0000a554, 0x62025f56, 0x62025f56, 0x48001ce3, 0x48001ce3}, ++ {0x0000a558, 0x66027f56, 0x66027f56, 0x4c001ce5, 0x4c001ce5}, ++ {0x0000a55c, 0x6a029f56, 0x6a029f56, 0x50001ce9, 0x50001ce9}, ++ {0x0000a560, 0x70049f56, 0x70049f56, 0x54001ceb, 0x54001ceb}, ++ {0x0000a564, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a568, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a56c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a570, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a574, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a578, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a57c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000}, ++ {0x0000a584, 0x06802223, 0x06802223, 0x04800002, 0x04800002}, ++ {0x0000a588, 0x0a822220, 0x0a822220, 0x08800004, 0x08800004}, ++ {0x0000a58c, 0x0f822223, 0x0f822223, 0x0b800200, 0x0b800200}, ++ {0x0000a590, 0x14822620, 0x14822620, 0x0f800202, 0x0f800202}, ++ {0x0000a594, 0x18822622, 0x18822622, 0x11800400, 0x11800400}, ++ {0x0000a598, 0x1b822822, 0x1b822822, 0x15800402, 0x15800402}, ++ {0x0000a59c, 0x20822842, 0x20822842, 0x19800404, 0x19800404}, ++ {0x0000a5a0, 0x22822c41, 0x22822c41, 0x1b800603, 0x1b800603}, ++ {0x0000a5a4, 0x28823042, 0x28823042, 0x1f800a02, 0x1f800a02}, ++ {0x0000a5a8, 0x2c823044, 0x2c823044, 0x23800a04, 0x23800a04}, ++ {0x0000a5ac, 0x2f823644, 0x2f823644, 0x26800a20, 0x26800a20}, ++ {0x0000a5b0, 0x34825643, 0x34825643, 0x2a800e20, 0x2a800e20}, ++ {0x0000a5b4, 0x38825a44, 0x38825a44, 0x2e800e22, 0x2e800e22}, ++ {0x0000a5b8, 0x3b825e45, 0x3b825e45, 0x31800e24, 0x31800e24}, ++ {0x0000a5bc, 0x41825e4a, 0x41825e4a, 0x34801640, 0x34801640}, ++ {0x0000a5c0, 0x48825e6c, 0x48825e6c, 0x38801660, 0x38801660}, ++ {0x0000a5c4, 0x4e825e8e, 0x4e825e8e, 0x3b801861, 0x3b801861}, ++ {0x0000a5c8, 0x53825eb2, 0x53825eb2, 0x3e801a81, 0x3e801a81}, ++ {0x0000a5cc, 0x59825eb5, 0x59825eb5, 0x42801a83, 0x42801a83}, ++ {0x0000a5d0, 0x5f825ef6, 0x5f825ef6, 0x44801c84, 0x44801c84}, ++ {0x0000a5d4, 0x62825f56, 0x62825f56, 0x48801ce3, 0x48801ce3}, ++ {0x0000a5d8, 0x66827f56, 0x66827f56, 0x4c801ce5, 0x4c801ce5}, ++ {0x0000a5dc, 0x6a829f56, 0x6a829f56, 0x50801ce9, 0x50801ce9}, ++ {0x0000a5e0, 0x70849f56, 0x70849f56, 0x54801ceb, 0x54801ceb}, ++ {0x0000a5e4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5e8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5ec, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f0, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5fc, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, ++ {0x00016048, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, ++ {0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, ++ {0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, ++ {0x00016448, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, ++ {0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, ++ {0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, ++ {0x00016848, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, ++ {0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, ++}; ++ ++static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p0[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, ++ {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000}, ++ {0x0000a504, 0x06002223, 0x06002223, 0x04000002, 0x04000002}, ++ {0x0000a508, 0x0a022220, 0x0a022220, 0x08000004, 0x08000004}, ++ {0x0000a50c, 0x0f022223, 0x0f022223, 0x0b000200, 0x0b000200}, ++ {0x0000a510, 0x14022620, 0x14022620, 0x0f000202, 0x0f000202}, ++ {0x0000a514, 0x18022622, 0x18022622, 0x11000400, 0x11000400}, ++ {0x0000a518, 0x1b022822, 0x1b022822, 0x15000402, 0x15000402}, ++ {0x0000a51c, 0x20022842, 0x20022842, 0x19000404, 0x19000404}, ++ {0x0000a520, 0x22022c41, 0x22022c41, 0x1b000603, 0x1b000603}, ++ {0x0000a524, 0x28023042, 0x28023042, 0x1f000a02, 0x1f000a02}, ++ {0x0000a528, 0x2c023044, 0x2c023044, 0x23000a04, 0x23000a04}, ++ {0x0000a52c, 0x2f023644, 0x2f023644, 0x26000a20, 0x26000a20}, ++ {0x0000a530, 0x34025643, 0x34025643, 0x2a000e20, 0x2a000e20}, ++ {0x0000a534, 0x38025a44, 0x38025a44, 0x2e000e22, 0x2e000e22}, ++ {0x0000a538, 0x3b025e45, 0x3b025e45, 0x31000e24, 0x31000e24}, ++ {0x0000a53c, 0x41025e4a, 0x41025e4a, 0x34001640, 0x34001640}, ++ {0x0000a540, 0x48025e6c, 0x48025e6c, 0x38001660, 0x38001660}, ++ {0x0000a544, 0x4e025e8e, 0x4e025e8e, 0x3b001861, 0x3b001861}, ++ {0x0000a548, 0x53025eb2, 0x53025eb2, 0x3e001a81, 0x3e001a81}, ++ {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83}, ++ {0x0000a550, 0x5f025ef6, 0x5f025ef6, 0x44001c84, 0x44001c84}, ++ {0x0000a554, 0x62025f56, 0x62025f56, 0x48001ce3, 0x48001ce3}, ++ {0x0000a558, 0x66027f56, 0x66027f56, 0x4c001ce5, 0x4c001ce5}, ++ {0x0000a55c, 0x6a029f56, 0x6a029f56, 0x50001ce9, 0x50001ce9}, ++ {0x0000a560, 0x70049f56, 0x70049f56, 0x54001ceb, 0x54001ceb}, ++ {0x0000a564, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a568, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a56c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a570, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a574, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a578, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a57c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, ++ {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000}, ++ {0x0000a584, 0x06802223, 0x06802223, 0x04800002, 0x04800002}, ++ {0x0000a588, 0x0a822220, 0x0a822220, 0x08800004, 0x08800004}, ++ {0x0000a58c, 0x0f822223, 0x0f822223, 0x0b800200, 0x0b800200}, ++ {0x0000a590, 0x14822620, 0x14822620, 0x0f800202, 0x0f800202}, ++ {0x0000a594, 0x18822622, 0x18822622, 0x11800400, 0x11800400}, ++ {0x0000a598, 0x1b822822, 0x1b822822, 0x15800402, 0x15800402}, ++ {0x0000a59c, 0x20822842, 0x20822842, 0x19800404, 0x19800404}, ++ {0x0000a5a0, 0x22822c41, 0x22822c41, 0x1b800603, 0x1b800603}, ++ {0x0000a5a4, 0x28823042, 0x28823042, 0x1f800a02, 0x1f800a02}, ++ {0x0000a5a8, 0x2c823044, 0x2c823044, 0x23800a04, 0x23800a04}, ++ {0x0000a5ac, 0x2f823644, 0x2f823644, 0x26800a20, 0x26800a20}, ++ {0x0000a5b0, 0x34825643, 0x34825643, 0x2a800e20, 0x2a800e20}, ++ {0x0000a5b4, 0x38825a44, 0x38825a44, 0x2e800e22, 0x2e800e22}, ++ {0x0000a5b8, 0x3b825e45, 0x3b825e45, 0x31800e24, 0x31800e24}, ++ {0x0000a5bc, 0x41825e4a, 0x41825e4a, 0x34801640, 0x34801640}, ++ {0x0000a5c0, 0x48825e6c, 0x48825e6c, 0x38801660, 0x38801660}, ++ {0x0000a5c4, 0x4e825e8e, 0x4e825e8e, 0x3b801861, 0x3b801861}, ++ {0x0000a5c8, 0x53825eb2, 0x53825eb2, 0x3e801a81, 0x3e801a81}, ++ {0x0000a5cc, 0x59825eb5, 0x59825eb5, 0x42801a83, 0x42801a83}, ++ {0x0000a5d0, 0x5f825ef6, 0x5f825ef6, 0x44801c84, 0x44801c84}, ++ {0x0000a5d4, 0x62825f56, 0x62825f56, 0x48801ce3, 0x48801ce3}, ++ {0x0000a5d8, 0x66827f56, 0x66827f56, 0x4c801ce5, 0x4c801ce5}, ++ {0x0000a5dc, 0x6a829f56, 0x6a829f56, 0x50801ce9, 0x50801ce9}, ++ {0x0000a5e0, 0x70849f56, 0x70849f56, 0x54801ceb, 0x54801ceb}, ++ {0x0000a5e4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5e8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5ec, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f0, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5f8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x0000a5fc, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, ++ {0x00016044, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, ++ {0x00016048, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, ++ {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016444, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, ++ {0x00016448, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, ++ {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016844, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, ++ {0x00016848, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, ++ {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++}; ++ ++static const u32 ar9300Common_rx_gain_table_2p0[][2] = { ++ /* Addr allmodes */ ++ {0x0000a000, 0x00010000}, ++ {0x0000a004, 0x00030002}, ++ {0x0000a008, 0x00050004}, ++ {0x0000a00c, 0x00810080}, ++ {0x0000a010, 0x00830082}, ++ {0x0000a014, 0x01810180}, ++ {0x0000a018, 0x01830182}, ++ {0x0000a01c, 0x01850184}, ++ {0x0000a020, 0x01890188}, ++ {0x0000a024, 0x018b018a}, ++ {0x0000a028, 0x018d018c}, ++ {0x0000a02c, 0x01910190}, ++ {0x0000a030, 0x01930192}, ++ {0x0000a034, 0x01950194}, ++ {0x0000a038, 0x038a0196}, ++ {0x0000a03c, 0x038c038b}, ++ {0x0000a040, 0x0390038d}, ++ {0x0000a044, 0x03920391}, ++ {0x0000a048, 0x03940393}, ++ {0x0000a04c, 0x03960395}, ++ {0x0000a050, 0x00000000}, ++ {0x0000a054, 0x00000000}, ++ {0x0000a058, 0x00000000}, ++ {0x0000a05c, 0x00000000}, ++ {0x0000a060, 0x00000000}, ++ {0x0000a064, 0x00000000}, ++ {0x0000a068, 0x00000000}, ++ {0x0000a06c, 0x00000000}, ++ {0x0000a070, 0x00000000}, ++ {0x0000a074, 0x00000000}, ++ {0x0000a078, 0x00000000}, ++ {0x0000a07c, 0x00000000}, ++ {0x0000a080, 0x22222229}, ++ {0x0000a084, 0x1d1d1d1d}, ++ {0x0000a088, 0x1d1d1d1d}, ++ {0x0000a08c, 0x1d1d1d1d}, ++ {0x0000a090, 0x171d1d1d}, ++ {0x0000a094, 0x11111717}, ++ {0x0000a098, 0x00030311}, ++ {0x0000a09c, 0x00000000}, ++ {0x0000a0a0, 0x00000000}, ++ {0x0000a0a4, 0x00000000}, ++ {0x0000a0a8, 0x00000000}, ++ {0x0000a0ac, 0x00000000}, ++ {0x0000a0b0, 0x00000000}, ++ {0x0000a0b4, 0x00000000}, ++ {0x0000a0b8, 0x00000000}, ++ {0x0000a0bc, 0x00000000}, ++ {0x0000a0c0, 0x001f0000}, ++ {0x0000a0c4, 0x01000101}, ++ {0x0000a0c8, 0x011e011f}, ++ {0x0000a0cc, 0x011c011d}, ++ {0x0000a0d0, 0x02030204}, ++ {0x0000a0d4, 0x02010202}, ++ {0x0000a0d8, 0x021f0200}, ++ {0x0000a0dc, 0x0302021e}, ++ {0x0000a0e0, 0x03000301}, ++ {0x0000a0e4, 0x031e031f}, ++ {0x0000a0e8, 0x0402031d}, ++ {0x0000a0ec, 0x04000401}, ++ {0x0000a0f0, 0x041e041f}, ++ {0x0000a0f4, 0x0502041d}, ++ {0x0000a0f8, 0x05000501}, ++ {0x0000a0fc, 0x051e051f}, ++ {0x0000a100, 0x06010602}, ++ {0x0000a104, 0x061f0600}, ++ {0x0000a108, 0x061d061e}, ++ {0x0000a10c, 0x07020703}, ++ {0x0000a110, 0x07000701}, ++ {0x0000a114, 0x00000000}, ++ {0x0000a118, 0x00000000}, ++ {0x0000a11c, 0x00000000}, ++ {0x0000a120, 0x00000000}, ++ {0x0000a124, 0x00000000}, ++ {0x0000a128, 0x00000000}, ++ {0x0000a12c, 0x00000000}, ++ {0x0000a130, 0x00000000}, ++ {0x0000a134, 0x00000000}, ++ {0x0000a138, 0x00000000}, ++ {0x0000a13c, 0x00000000}, ++ {0x0000a140, 0x001f0000}, ++ {0x0000a144, 0x01000101}, ++ {0x0000a148, 0x011e011f}, ++ {0x0000a14c, 0x011c011d}, ++ {0x0000a150, 0x02030204}, ++ {0x0000a154, 0x02010202}, ++ {0x0000a158, 0x021f0200}, ++ {0x0000a15c, 0x0302021e}, ++ {0x0000a160, 0x03000301}, ++ {0x0000a164, 0x031e031f}, ++ {0x0000a168, 0x0402031d}, ++ {0x0000a16c, 0x04000401}, ++ {0x0000a170, 0x041e041f}, ++ {0x0000a174, 0x0502041d}, ++ {0x0000a178, 0x05000501}, ++ {0x0000a17c, 0x051e051f}, ++ {0x0000a180, 0x06010602}, ++ {0x0000a184, 0x061f0600}, ++ {0x0000a188, 0x061d061e}, ++ {0x0000a18c, 0x07020703}, ++ {0x0000a190, 0x07000701}, ++ {0x0000a194, 0x00000000}, ++ {0x0000a198, 0x00000000}, ++ {0x0000a19c, 0x00000000}, ++ {0x0000a1a0, 0x00000000}, ++ {0x0000a1a4, 0x00000000}, ++ {0x0000a1a8, 0x00000000}, ++ {0x0000a1ac, 0x00000000}, ++ {0x0000a1b0, 0x00000000}, ++ {0x0000a1b4, 0x00000000}, ++ {0x0000a1b8, 0x00000000}, ++ {0x0000a1bc, 0x00000000}, ++ {0x0000a1c0, 0x00000000}, ++ {0x0000a1c4, 0x00000000}, ++ {0x0000a1c8, 0x00000000}, ++ {0x0000a1cc, 0x00000000}, ++ {0x0000a1d0, 0x00000000}, ++ {0x0000a1d4, 0x00000000}, ++ {0x0000a1d8, 0x00000000}, ++ {0x0000a1dc, 0x00000000}, ++ {0x0000a1e0, 0x00000000}, ++ {0x0000a1e4, 0x00000000}, ++ {0x0000a1e8, 0x00000000}, ++ {0x0000a1ec, 0x00000000}, ++ {0x0000a1f0, 0x00000396}, ++ {0x0000a1f4, 0x00000396}, ++ {0x0000a1f8, 0x00000396}, ++ {0x0000a1fc, 0x00000196}, ++ {0x0000b000, 0x00010000}, ++ {0x0000b004, 0x00030002}, ++ {0x0000b008, 0x00050004}, ++ {0x0000b00c, 0x00810080}, ++ {0x0000b010, 0x00830082}, ++ {0x0000b014, 0x01810180}, ++ {0x0000b018, 0x01830182}, ++ {0x0000b01c, 0x01850184}, ++ {0x0000b020, 0x02810280}, ++ {0x0000b024, 0x02830282}, ++ {0x0000b028, 0x02850284}, ++ {0x0000b02c, 0x02890288}, ++ {0x0000b030, 0x028b028a}, ++ {0x0000b034, 0x0388028c}, ++ {0x0000b038, 0x038a0389}, ++ {0x0000b03c, 0x038c038b}, ++ {0x0000b040, 0x0390038d}, ++ {0x0000b044, 0x03920391}, ++ {0x0000b048, 0x03940393}, ++ {0x0000b04c, 0x03960395}, ++ {0x0000b050, 0x00000000}, ++ {0x0000b054, 0x00000000}, ++ {0x0000b058, 0x00000000}, ++ {0x0000b05c, 0x00000000}, ++ {0x0000b060, 0x00000000}, ++ {0x0000b064, 0x00000000}, ++ {0x0000b068, 0x00000000}, ++ {0x0000b06c, 0x00000000}, ++ {0x0000b070, 0x00000000}, ++ {0x0000b074, 0x00000000}, ++ {0x0000b078, 0x00000000}, ++ {0x0000b07c, 0x00000000}, ++ {0x0000b080, 0x32323232}, ++ {0x0000b084, 0x2f2f3232}, ++ {0x0000b088, 0x23282a2d}, ++ {0x0000b08c, 0x1c1e2123}, ++ {0x0000b090, 0x14171919}, ++ {0x0000b094, 0x0e0e1214}, ++ {0x0000b098, 0x03050707}, ++ {0x0000b09c, 0x00030303}, ++ {0x0000b0a0, 0x00000000}, ++ {0x0000b0a4, 0x00000000}, ++ {0x0000b0a8, 0x00000000}, ++ {0x0000b0ac, 0x00000000}, ++ {0x0000b0b0, 0x00000000}, ++ {0x0000b0b4, 0x00000000}, ++ {0x0000b0b8, 0x00000000}, ++ {0x0000b0bc, 0x00000000}, ++ {0x0000b0c0, 0x003f0020}, ++ {0x0000b0c4, 0x00400041}, ++ {0x0000b0c8, 0x0140005f}, ++ {0x0000b0cc, 0x0160015f}, ++ {0x0000b0d0, 0x017e017f}, ++ {0x0000b0d4, 0x02410242}, ++ {0x0000b0d8, 0x025f0240}, ++ {0x0000b0dc, 0x027f0260}, ++ {0x0000b0e0, 0x0341027e}, ++ {0x0000b0e4, 0x035f0340}, ++ {0x0000b0e8, 0x037f0360}, ++ {0x0000b0ec, 0x04400441}, ++ {0x0000b0f0, 0x0460045f}, ++ {0x0000b0f4, 0x0541047f}, ++ {0x0000b0f8, 0x055f0540}, ++ {0x0000b0fc, 0x057f0560}, ++ {0x0000b100, 0x06400641}, ++ {0x0000b104, 0x0660065f}, ++ {0x0000b108, 0x067e067f}, ++ {0x0000b10c, 0x07410742}, ++ {0x0000b110, 0x075f0740}, ++ {0x0000b114, 0x077f0760}, ++ {0x0000b118, 0x07800781}, ++ {0x0000b11c, 0x07a0079f}, ++ {0x0000b120, 0x07c107bf}, ++ {0x0000b124, 0x000007c0}, ++ {0x0000b128, 0x00000000}, ++ {0x0000b12c, 0x00000000}, ++ {0x0000b130, 0x00000000}, ++ {0x0000b134, 0x00000000}, ++ {0x0000b138, 0x00000000}, ++ {0x0000b13c, 0x00000000}, ++ {0x0000b140, 0x003f0020}, ++ {0x0000b144, 0x00400041}, ++ {0x0000b148, 0x0140005f}, ++ {0x0000b14c, 0x0160015f}, ++ {0x0000b150, 0x017e017f}, ++ {0x0000b154, 0x02410242}, ++ {0x0000b158, 0x025f0240}, ++ {0x0000b15c, 0x027f0260}, ++ {0x0000b160, 0x0341027e}, ++ {0x0000b164, 0x035f0340}, ++ {0x0000b168, 0x037f0360}, ++ {0x0000b16c, 0x04400441}, ++ {0x0000b170, 0x0460045f}, ++ {0x0000b174, 0x0541047f}, ++ {0x0000b178, 0x055f0540}, ++ {0x0000b17c, 0x057f0560}, ++ {0x0000b180, 0x06400641}, ++ {0x0000b184, 0x0660065f}, ++ {0x0000b188, 0x067e067f}, ++ {0x0000b18c, 0x07410742}, ++ {0x0000b190, 0x075f0740}, ++ {0x0000b194, 0x077f0760}, ++ {0x0000b198, 0x07800781}, ++ {0x0000b19c, 0x07a0079f}, ++ {0x0000b1a0, 0x07c107bf}, ++ {0x0000b1a4, 0x000007c0}, ++ {0x0000b1a8, 0x00000000}, ++ {0x0000b1ac, 0x00000000}, ++ {0x0000b1b0, 0x00000000}, ++ {0x0000b1b4, 0x00000000}, ++ {0x0000b1b8, 0x00000000}, ++ {0x0000b1bc, 0x00000000}, ++ {0x0000b1c0, 0x00000000}, ++ {0x0000b1c4, 0x00000000}, ++ {0x0000b1c8, 0x00000000}, ++ {0x0000b1cc, 0x00000000}, ++ {0x0000b1d0, 0x00000000}, ++ {0x0000b1d4, 0x00000000}, ++ {0x0000b1d8, 0x00000000}, ++ {0x0000b1dc, 0x00000000}, ++ {0x0000b1e0, 0x00000000}, ++ {0x0000b1e4, 0x00000000}, ++ {0x0000b1e8, 0x00000000}, ++ {0x0000b1ec, 0x00000000}, ++ {0x0000b1f0, 0x00000396}, ++ {0x0000b1f4, 0x00000396}, ++ {0x0000b1f8, 0x00000396}, ++ {0x0000b1fc, 0x00000196}, ++}; ++ ++static const u32 ar9300Modes_low_ob_db_tx_gain_table_2p0[][5] = { ++ /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ ++ {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, ++ {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, ++ {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, ++ {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, ++ {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, ++ {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, ++ {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, ++ {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402}, ++ {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404}, ++ {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, ++ {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, ++ {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, ++ {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, ++ {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, ++ {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, ++ {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, ++ {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, ++ {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, ++ {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861}, ++ {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81}, ++ {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83}, ++ {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84}, ++ {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3}, ++ {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5}, ++ {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9}, ++ {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb}, ++ {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, ++ {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, ++ {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, ++ {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, ++ {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, ++ {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, ++ {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, ++ {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402}, ++ {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404}, ++ {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, ++ {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, ++ {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, ++ {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, ++ {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, ++ {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, ++ {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, ++ {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, ++ {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, ++ {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861}, ++ {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81}, ++ {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83}, ++ {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84}, ++ {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3}, ++ {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5}, ++ {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9}, ++ {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb}, ++ {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, ++ {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016048, 0x64000001, 0x64000001, 0x64000001, 0x64000001}, ++ {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016448, 0x64000001, 0x64000001, 0x64000001, 0x64000001}, ++ {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++ {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, ++ {0x00016848, 0x64000001, 0x64000001, 0x64000001, 0x64000001}, ++ {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, ++}; ++ ++static const u32 ar9300_2p0_mac_core[][2] = { ++ /* Addr allmodes */ ++ {0x00000008, 0x00000000}, ++ {0x00000030, 0x00020085}, ++ {0x00000034, 0x00000005}, ++ {0x00000040, 0x00000000}, ++ {0x00000044, 0x00000000}, ++ {0x00000048, 0x00000008}, ++ {0x0000004c, 0x00000010}, ++ {0x00000050, 0x00000000}, ++ {0x00001040, 0x002ffc0f}, ++ {0x00001044, 0x002ffc0f}, ++ {0x00001048, 0x002ffc0f}, ++ {0x0000104c, 0x002ffc0f}, ++ {0x00001050, 0x002ffc0f}, ++ {0x00001054, 0x002ffc0f}, ++ {0x00001058, 0x002ffc0f}, ++ {0x0000105c, 0x002ffc0f}, ++ {0x00001060, 0x002ffc0f}, ++ {0x00001064, 0x002ffc0f}, ++ {0x000010f0, 0x00000100}, ++ {0x00001270, 0x00000000}, ++ {0x000012b0, 0x00000000}, ++ {0x000012f0, 0x00000000}, ++ {0x0000143c, 0x00000000}, ++ {0x0000147c, 0x00000000}, ++ {0x00008000, 0x00000000}, ++ {0x00008004, 0x00000000}, ++ {0x00008008, 0x00000000}, ++ {0x0000800c, 0x00000000}, ++ {0x00008018, 0x00000000}, ++ {0x00008020, 0x00000000}, ++ {0x00008038, 0x00000000}, ++ {0x0000803c, 0x00000000}, ++ {0x00008040, 0x00000000}, ++ {0x00008044, 0x00000000}, ++ {0x00008048, 0x00000000}, ++ {0x0000804c, 0xffffffff}, ++ {0x00008054, 0x00000000}, ++ {0x00008058, 0x00000000}, ++ {0x0000805c, 0x000fc78f}, ++ {0x00008060, 0x0000000f}, ++ {0x00008064, 0x00000000}, ++ {0x00008070, 0x00000310}, ++ {0x00008074, 0x00000020}, ++ {0x00008078, 0x00000000}, ++ {0x0000809c, 0x0000000f}, ++ {0x000080a0, 0x00000000}, ++ {0x000080a4, 0x02ff0000}, ++ {0x000080a8, 0x0e070605}, ++ {0x000080ac, 0x0000000d}, ++ {0x000080b0, 0x00000000}, ++ {0x000080b4, 0x00000000}, ++ {0x000080b8, 0x00000000}, ++ {0x000080bc, 0x00000000}, ++ {0x000080c0, 0x2a800000}, ++ {0x000080c4, 0x06900168}, ++ {0x000080c8, 0x13881c20}, ++ {0x000080cc, 0x01f40000}, ++ {0x000080d0, 0x00252500}, ++ {0x000080d4, 0x00a00000}, ++ {0x000080d8, 0x00400000}, ++ {0x000080dc, 0x00000000}, ++ {0x000080e0, 0xffffffff}, ++ {0x000080e4, 0x0000ffff}, ++ {0x000080e8, 0x3f3f3f3f}, ++ {0x000080ec, 0x00000000}, ++ {0x000080f0, 0x00000000}, ++ {0x000080f4, 0x00000000}, ++ {0x000080fc, 0x00020000}, ++ {0x00008100, 0x00000000}, ++ {0x00008108, 0x00000052}, ++ {0x0000810c, 0x00000000}, ++ {0x00008110, 0x00000000}, ++ {0x00008114, 0x000007ff}, ++ {0x00008118, 0x000000aa}, ++ {0x0000811c, 0x00003210}, ++ {0x00008124, 0x00000000}, ++ {0x00008128, 0x00000000}, ++ {0x0000812c, 0x00000000}, ++ {0x00008130, 0x00000000}, ++ {0x00008134, 0x00000000}, ++ {0x00008138, 0x00000000}, ++ {0x0000813c, 0x0000ffff}, ++ {0x00008144, 0xffffffff}, ++ {0x00008168, 0x00000000}, ++ {0x0000816c, 0x00000000}, ++ {0x00008170, 0x18486200}, ++ {0x00008174, 0x33332210}, ++ {0x00008178, 0x00000000}, ++ {0x0000817c, 0x00020000}, ++ {0x000081c0, 0x00000000}, ++ {0x000081c4, 0x33332210}, ++ {0x000081c8, 0x00000000}, ++ {0x000081cc, 0x00000000}, ++ {0x000081d4, 0x00000000}, ++ {0x000081ec, 0x00000000}, ++ {0x000081f0, 0x00000000}, ++ {0x000081f4, 0x00000000}, ++ {0x000081f8, 0x00000000}, ++ {0x000081fc, 0x00000000}, ++ {0x00008240, 0x00100000}, ++ {0x00008244, 0x0010f424}, ++ {0x00008248, 0x00000800}, ++ {0x0000824c, 0x0001e848}, ++ {0x00008250, 0x00000000}, ++ {0x00008254, 0x00000000}, ++ {0x00008258, 0x00000000}, ++ {0x0000825c, 0x40000000}, ++ {0x00008260, 0x00080922}, ++ {0x00008264, 0x98a00010}, ++ {0x00008268, 0xffffffff}, ++ {0x0000826c, 0x0000ffff}, ++ {0x00008270, 0x00000000}, ++ {0x00008274, 0x40000000}, ++ {0x00008278, 0x003e4180}, ++ {0x0000827c, 0x00000004}, ++ {0x00008284, 0x0000002c}, ++ {0x00008288, 0x0000002c}, ++ {0x0000828c, 0x000000ff}, ++ {0x00008294, 0x00000000}, ++ {0x00008298, 0x00000000}, ++ {0x0000829c, 0x00000000}, ++ {0x00008300, 0x00000140}, ++ {0x00008314, 0x00000000}, ++ {0x0000831c, 0x0000010d}, ++ {0x00008328, 0x00000000}, ++ {0x0000832c, 0x00000007}, ++ {0x00008330, 0x00000302}, ++ {0x00008334, 0x00000700}, ++ {0x00008338, 0x00ff0000}, ++ {0x0000833c, 0x02400000}, ++ {0x00008340, 0x000107ff}, ++ {0x00008344, 0xaa48105b}, ++ {0x00008348, 0x008f0000}, ++ {0x0000835c, 0x00000000}, ++ {0x00008360, 0xffffffff}, ++ {0x00008364, 0xffffffff}, ++ {0x00008368, 0x00000000}, ++ {0x00008370, 0x00000000}, ++ {0x00008374, 0x000000ff}, ++ {0x00008378, 0x00000000}, ++ {0x0000837c, 0x00000000}, ++ {0x00008380, 0xffffffff}, ++ {0x00008384, 0xffffffff}, ++ {0x00008390, 0xffffffff}, ++ {0x00008394, 0xffffffff}, ++ {0x00008398, 0x00000000}, ++ {0x0000839c, 0x00000000}, ++ {0x000083a0, 0x00000000}, ++ {0x000083a4, 0x0000fa14}, ++ {0x000083a8, 0x000f0c00}, ++ {0x000083ac, 0x33332210}, ++ {0x000083b0, 0x33332210}, ++ {0x000083b4, 0x33332210}, ++ {0x000083b8, 0x33332210}, ++ {0x000083bc, 0x00000000}, ++ {0x000083c0, 0x00000000}, ++ {0x000083c4, 0x00000000}, ++ {0x000083c8, 0x00000000}, ++ {0x000083cc, 0x00000200}, ++ {0x000083d0, 0x000301ff}, ++}; ++ ++static const u32 ar9300Common_wo_xlna_rx_gain_table_2p0[][2] = { ++ /* Addr allmodes */ ++ {0x0000a000, 0x00010000}, ++ {0x0000a004, 0x00030002}, ++ {0x0000a008, 0x00050004}, ++ {0x0000a00c, 0x00810080}, ++ {0x0000a010, 0x00830082}, ++ {0x0000a014, 0x01810180}, ++ {0x0000a018, 0x01830182}, ++ {0x0000a01c, 0x01850184}, ++ {0x0000a020, 0x01890188}, ++ {0x0000a024, 0x018b018a}, ++ {0x0000a028, 0x018d018c}, ++ {0x0000a02c, 0x03820190}, ++ {0x0000a030, 0x03840383}, ++ {0x0000a034, 0x03880385}, ++ {0x0000a038, 0x038a0389}, ++ {0x0000a03c, 0x038c038b}, ++ {0x0000a040, 0x0390038d}, ++ {0x0000a044, 0x03920391}, ++ {0x0000a048, 0x03940393}, ++ {0x0000a04c, 0x03960395}, ++ {0x0000a050, 0x00000000}, ++ {0x0000a054, 0x00000000}, ++ {0x0000a058, 0x00000000}, ++ {0x0000a05c, 0x00000000}, ++ {0x0000a060, 0x00000000}, ++ {0x0000a064, 0x00000000}, ++ {0x0000a068, 0x00000000}, ++ {0x0000a06c, 0x00000000}, ++ {0x0000a070, 0x00000000}, ++ {0x0000a074, 0x00000000}, ++ {0x0000a078, 0x00000000}, ++ {0x0000a07c, 0x00000000}, ++ {0x0000a080, 0x29292929}, ++ {0x0000a084, 0x29292929}, ++ {0x0000a088, 0x29292929}, ++ {0x0000a08c, 0x29292929}, ++ {0x0000a090, 0x22292929}, ++ {0x0000a094, 0x1d1d2222}, ++ {0x0000a098, 0x0c111117}, ++ {0x0000a09c, 0x00030303}, ++ {0x0000a0a0, 0x00000000}, ++ {0x0000a0a4, 0x00000000}, ++ {0x0000a0a8, 0x00000000}, ++ {0x0000a0ac, 0x00000000}, ++ {0x0000a0b0, 0x00000000}, ++ {0x0000a0b4, 0x00000000}, ++ {0x0000a0b8, 0x00000000}, ++ {0x0000a0bc, 0x00000000}, ++ {0x0000a0c0, 0x001f0000}, ++ {0x0000a0c4, 0x01000101}, ++ {0x0000a0c8, 0x011e011f}, ++ {0x0000a0cc, 0x011c011d}, ++ {0x0000a0d0, 0x02030204}, ++ {0x0000a0d4, 0x02010202}, ++ {0x0000a0d8, 0x021f0200}, ++ {0x0000a0dc, 0x0302021e}, ++ {0x0000a0e0, 0x03000301}, ++ {0x0000a0e4, 0x031e031f}, ++ {0x0000a0e8, 0x0402031d}, ++ {0x0000a0ec, 0x04000401}, ++ {0x0000a0f0, 0x041e041f}, ++ {0x0000a0f4, 0x0502041d}, ++ {0x0000a0f8, 0x05000501}, ++ {0x0000a0fc, 0x051e051f}, ++ {0x0000a100, 0x06010602}, ++ {0x0000a104, 0x061f0600}, ++ {0x0000a108, 0x061d061e}, ++ {0x0000a10c, 0x07020703}, ++ {0x0000a110, 0x07000701}, ++ {0x0000a114, 0x00000000}, ++ {0x0000a118, 0x00000000}, ++ {0x0000a11c, 0x00000000}, ++ {0x0000a120, 0x00000000}, ++ {0x0000a124, 0x00000000}, ++ {0x0000a128, 0x00000000}, ++ {0x0000a12c, 0x00000000}, ++ {0x0000a130, 0x00000000}, ++ {0x0000a134, 0x00000000}, ++ {0x0000a138, 0x00000000}, ++ {0x0000a13c, 0x00000000}, ++ {0x0000a140, 0x001f0000}, ++ {0x0000a144, 0x01000101}, ++ {0x0000a148, 0x011e011f}, ++ {0x0000a14c, 0x011c011d}, ++ {0x0000a150, 0x02030204}, ++ {0x0000a154, 0x02010202}, ++ {0x0000a158, 0x021f0200}, ++ {0x0000a15c, 0x0302021e}, ++ {0x0000a160, 0x03000301}, ++ {0x0000a164, 0x031e031f}, ++ {0x0000a168, 0x0402031d}, ++ {0x0000a16c, 0x04000401}, ++ {0x0000a170, 0x041e041f}, ++ {0x0000a174, 0x0502041d}, ++ {0x0000a178, 0x05000501}, ++ {0x0000a17c, 0x051e051f}, ++ {0x0000a180, 0x06010602}, ++ {0x0000a184, 0x061f0600}, ++ {0x0000a188, 0x061d061e}, ++ {0x0000a18c, 0x07020703}, ++ {0x0000a190, 0x07000701}, ++ {0x0000a194, 0x00000000}, ++ {0x0000a198, 0x00000000}, ++ {0x0000a19c, 0x00000000}, ++ {0x0000a1a0, 0x00000000}, ++ {0x0000a1a4, 0x00000000}, ++ {0x0000a1a8, 0x00000000}, ++ {0x0000a1ac, 0x00000000}, ++ {0x0000a1b0, 0x00000000}, ++ {0x0000a1b4, 0x00000000}, ++ {0x0000a1b8, 0x00000000}, ++ {0x0000a1bc, 0x00000000}, ++ {0x0000a1c0, 0x00000000}, ++ {0x0000a1c4, 0x00000000}, ++ {0x0000a1c8, 0x00000000}, ++ {0x0000a1cc, 0x00000000}, ++ {0x0000a1d0, 0x00000000}, ++ {0x0000a1d4, 0x00000000}, ++ {0x0000a1d8, 0x00000000}, ++ {0x0000a1dc, 0x00000000}, ++ {0x0000a1e0, 0x00000000}, ++ {0x0000a1e4, 0x00000000}, ++ {0x0000a1e8, 0x00000000}, ++ {0x0000a1ec, 0x00000000}, ++ {0x0000a1f0, 0x00000396}, ++ {0x0000a1f4, 0x00000396}, ++ {0x0000a1f8, 0x00000396}, ++ {0x0000a1fc, 0x00000196}, ++ {0x0000b000, 0x00010000}, ++ {0x0000b004, 0x00030002}, ++ {0x0000b008, 0x00050004}, ++ {0x0000b00c, 0x00810080}, ++ {0x0000b010, 0x00830082}, ++ {0x0000b014, 0x01810180}, ++ {0x0000b018, 0x01830182}, ++ {0x0000b01c, 0x01850184}, ++ {0x0000b020, 0x02810280}, ++ {0x0000b024, 0x02830282}, ++ {0x0000b028, 0x02850284}, ++ {0x0000b02c, 0x02890288}, ++ {0x0000b030, 0x028b028a}, ++ {0x0000b034, 0x0388028c}, ++ {0x0000b038, 0x038a0389}, ++ {0x0000b03c, 0x038c038b}, ++ {0x0000b040, 0x0390038d}, ++ {0x0000b044, 0x03920391}, ++ {0x0000b048, 0x03940393}, ++ {0x0000b04c, 0x03960395}, ++ {0x0000b050, 0x00000000}, ++ {0x0000b054, 0x00000000}, ++ {0x0000b058, 0x00000000}, ++ {0x0000b05c, 0x00000000}, ++ {0x0000b060, 0x00000000}, ++ {0x0000b064, 0x00000000}, ++ {0x0000b068, 0x00000000}, ++ {0x0000b06c, 0x00000000}, ++ {0x0000b070, 0x00000000}, ++ {0x0000b074, 0x00000000}, ++ {0x0000b078, 0x00000000}, ++ {0x0000b07c, 0x00000000}, ++ {0x0000b080, 0x32323232}, ++ {0x0000b084, 0x2f2f3232}, ++ {0x0000b088, 0x23282a2d}, ++ {0x0000b08c, 0x1c1e2123}, ++ {0x0000b090, 0x14171919}, ++ {0x0000b094, 0x0e0e1214}, ++ {0x0000b098, 0x03050707}, ++ {0x0000b09c, 0x00030303}, ++ {0x0000b0a0, 0x00000000}, ++ {0x0000b0a4, 0x00000000}, ++ {0x0000b0a8, 0x00000000}, ++ {0x0000b0ac, 0x00000000}, ++ {0x0000b0b0, 0x00000000}, ++ {0x0000b0b4, 0x00000000}, ++ {0x0000b0b8, 0x00000000}, ++ {0x0000b0bc, 0x00000000}, ++ {0x0000b0c0, 0x003f0020}, ++ {0x0000b0c4, 0x00400041}, ++ {0x0000b0c8, 0x0140005f}, ++ {0x0000b0cc, 0x0160015f}, ++ {0x0000b0d0, 0x017e017f}, ++ {0x0000b0d4, 0x02410242}, ++ {0x0000b0d8, 0x025f0240}, ++ {0x0000b0dc, 0x027f0260}, ++ {0x0000b0e0, 0x0341027e}, ++ {0x0000b0e4, 0x035f0340}, ++ {0x0000b0e8, 0x037f0360}, ++ {0x0000b0ec, 0x04400441}, ++ {0x0000b0f0, 0x0460045f}, ++ {0x0000b0f4, 0x0541047f}, ++ {0x0000b0f8, 0x055f0540}, ++ {0x0000b0fc, 0x057f0560}, ++ {0x0000b100, 0x06400641}, ++ {0x0000b104, 0x0660065f}, ++ {0x0000b108, 0x067e067f}, ++ {0x0000b10c, 0x07410742}, ++ {0x0000b110, 0x075f0740}, ++ {0x0000b114, 0x077f0760}, ++ {0x0000b118, 0x07800781}, ++ {0x0000b11c, 0x07a0079f}, ++ {0x0000b120, 0x07c107bf}, ++ {0x0000b124, 0x000007c0}, ++ {0x0000b128, 0x00000000}, ++ {0x0000b12c, 0x00000000}, ++ {0x0000b130, 0x00000000}, ++ {0x0000b134, 0x00000000}, ++ {0x0000b138, 0x00000000}, ++ {0x0000b13c, 0x00000000}, ++ {0x0000b140, 0x003f0020}, ++ {0x0000b144, 0x00400041}, ++ {0x0000b148, 0x0140005f}, ++ {0x0000b14c, 0x0160015f}, ++ {0x0000b150, 0x017e017f}, ++ {0x0000b154, 0x02410242}, ++ {0x0000b158, 0x025f0240}, ++ {0x0000b15c, 0x027f0260}, ++ {0x0000b160, 0x0341027e}, ++ {0x0000b164, 0x035f0340}, ++ {0x0000b168, 0x037f0360}, ++ {0x0000b16c, 0x04400441}, ++ {0x0000b170, 0x0460045f}, ++ {0x0000b174, 0x0541047f}, ++ {0x0000b178, 0x055f0540}, ++ {0x0000b17c, 0x057f0560}, ++ {0x0000b180, 0x06400641}, ++ {0x0000b184, 0x0660065f}, ++ {0x0000b188, 0x067e067f}, ++ {0x0000b18c, 0x07410742}, ++ {0x0000b190, 0x075f0740}, ++ {0x0000b194, 0x077f0760}, ++ {0x0000b198, 0x07800781}, ++ {0x0000b19c, 0x07a0079f}, ++ {0x0000b1a0, 0x07c107bf}, ++ {0x0000b1a4, 0x000007c0}, ++ {0x0000b1a8, 0x00000000}, ++ {0x0000b1ac, 0x00000000}, ++ {0x0000b1b0, 0x00000000}, ++ {0x0000b1b4, 0x00000000}, ++ {0x0000b1b8, 0x00000000}, ++ {0x0000b1bc, 0x00000000}, ++ {0x0000b1c0, 0x00000000}, ++ {0x0000b1c4, 0x00000000}, ++ {0x0000b1c8, 0x00000000}, ++ {0x0000b1cc, 0x00000000}, ++ {0x0000b1d0, 0x00000000}, ++ {0x0000b1d4, 0x00000000}, ++ {0x0000b1d8, 0x00000000}, ++ {0x0000b1dc, 0x00000000}, ++ {0x0000b1e0, 0x00000000}, ++ {0x0000b1e4, 0x00000000}, ++ {0x0000b1e8, 0x00000000}, ++ {0x0000b1ec, 0x00000000}, ++ {0x0000b1f0, 0x00000396}, ++ {0x0000b1f4, 0x00000396}, ++ {0x0000b1f8, 0x00000396}, ++ {0x0000b1fc, 0x00000196}, ++}; ++ ++static const u32 ar9300_2p0_soc_preamble[][2] = { ++ /* Addr allmodes */ ++ {0x000040a4, 0x00a0c1c9}, ++ {0x00007008, 0x00000000}, ++ {0x00007020, 0x00000000}, ++ {0x00007034, 0x00000002}, ++ {0x00007038, 0x000004c2}, ++}; ++ ++static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p0[][2] = { ++ /* Addr allmodes */ ++ {0x00004040, 0x08212e5e}, ++ {0x00004040, 0x0008003b}, ++ {0x00004044, 0x00000000}, ++}; ++ ++static const u32 ar9300PciePhy_clkreq_enable_L1_2p0[][2] = { ++ /* Addr allmodes */ ++ {0x00004040, 0x08253e5e}, ++ {0x00004040, 0x0008003b}, ++ {0x00004044, 0x00000000}, ++}; ++ ++static const u32 ar9300PciePhy_clkreq_disable_L1_2p0[][2] = { ++ /* Addr allmodes */ ++ {0x00004040, 0x08213e5e}, ++ {0x00004040, 0x0008003b}, ++ {0x00004044, 0x00000000}, ++}; ++ ++#endif /* INITVALS_9003_2P0_H */ +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_hw.c b/drivers/net/wireless/ath/ath9k/ar9003_hw.c +index 3c4a446..863f61e 100644 +--- a/drivers/net/wireless/ath/ath9k/ar9003_hw.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_hw.c +@@ -16,7 +16,7 @@ + + #include "hw.h" + #include "ar9003_mac.h" +-#include "ar9003_initvals.h" ++#include "ar9003_2p0_initvals.h" + #include "ar9003_2p2_initvals.h" + + /* General hardware code for the AR9003 hadware family */ +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_initvals.h b/drivers/net/wireless/ath/ath9k/ar9003_initvals.h +deleted file mode 100644 +index db019dd..0000000 +--- a/drivers/net/wireless/ath/ath9k/ar9003_initvals.h ++++ /dev/null +@@ -1,1784 +0,0 @@ +-/* +- * Copyright (c) 2010 Atheros Communications Inc. +- * +- * Permission to use, copy, modify, and/or distribute this software for any +- * purpose with or without fee is hereby granted, provided that the above +- * copyright notice and this permission notice appear in all copies. +- * +- * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +- * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +- * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +- * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +- * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +- * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +- * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +- */ +- +-#ifndef INITVALS_9003_H +-#define INITVALS_9003_H +- +-/* AR9003 2.0 */ +- +-static const u32 ar9300_2p0_radio_postamble[][5] = { +- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ +- {0x0001609c, 0x0dd08f29, 0x0dd08f29, 0x0b283f31, 0x0b283f31}, +- {0x000160ac, 0xa4653c00, 0xa4653c00, 0x24652800, 0x24652800}, +- {0x000160b0, 0x03284f3e, 0x03284f3e, 0x05d08f20, 0x05d08f20}, +- {0x0001610c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x00016140, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, +- {0x0001650c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x00016540, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, +- {0x0001690c, 0x08000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x00016940, 0x10804008, 0x10804008, 0x50804008, 0x50804008}, +-}; +- +-static const u32 ar9300Modes_lowest_ob_db_tx_gain_table_2p0[][5] = { +- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ +- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, +- {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, +- {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, +- {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, +- {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, +- {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, +- {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402}, +- {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404}, +- {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, +- {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, +- {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, +- {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, +- {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, +- {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, +- {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, +- {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, +- {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, +- {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861}, +- {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81}, +- {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83}, +- {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84}, +- {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3}, +- {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5}, +- {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9}, +- {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb}, +- {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, +- {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, +- {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, +- {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, +- {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, +- {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, +- {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402}, +- {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404}, +- {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, +- {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, +- {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, +- {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, +- {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, +- {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, +- {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, +- {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, +- {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, +- {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861}, +- {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81}, +- {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83}, +- {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84}, +- {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3}, +- {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5}, +- {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9}, +- {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb}, +- {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, +- {0x00016048, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, +- {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +- {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, +- {0x00016448, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, +- {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +- {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, +- {0x00016848, 0x62480001, 0x62480001, 0x62480001, 0x62480001}, +- {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +-}; +- +-static const u32 ar9300Modes_fast_clock_2p0[][3] = { +- /* Addr 5G_HT20 5G_HT40 */ +- {0x00001030, 0x00000268, 0x000004d0}, +- {0x00001070, 0x0000018c, 0x00000318}, +- {0x000010b0, 0x00000fd0, 0x00001fa0}, +- {0x00008014, 0x044c044c, 0x08980898}, +- {0x0000801c, 0x148ec02b, 0x148ec057}, +- {0x00008318, 0x000044c0, 0x00008980}, +- {0x00009e00, 0x03721821, 0x03721821}, +- {0x0000a230, 0x0000000b, 0x00000016}, +- {0x0000a254, 0x00000898, 0x00001130}, +-}; +- +-static const u32 ar9300_2p0_radio_core[][2] = { +- /* Addr allmodes */ +- {0x00016000, 0x36db6db6}, +- {0x00016004, 0x6db6db40}, +- {0x00016008, 0x73f00000}, +- {0x0001600c, 0x00000000}, +- {0x00016040, 0x7f80fff8}, +- {0x0001604c, 0x76d005b5}, +- {0x00016050, 0x556cf031}, +- {0x00016054, 0x13449440}, +- {0x00016058, 0x0c51c92c}, +- {0x0001605c, 0x3db7fffc}, +- {0x00016060, 0xfffffffc}, +- {0x00016064, 0x000f0278}, +- {0x0001606c, 0x6db60000}, +- {0x00016080, 0x00000000}, +- {0x00016084, 0x0e48048c}, +- {0x00016088, 0x54214514}, +- {0x0001608c, 0x119f481e}, +- {0x00016090, 0x24926490}, +- {0x00016098, 0xd2888888}, +- {0x000160a0, 0x0a108ffe}, +- {0x000160a4, 0x812fc370}, +- {0x000160a8, 0x423c8000}, +- {0x000160b4, 0x92480080}, +- {0x000160c0, 0x00adb6d0}, +- {0x000160c4, 0x6db6db60}, +- {0x000160c8, 0x6db6db6c}, +- {0x000160cc, 0x01e6c000}, +- {0x00016100, 0x3fffbe01}, +- {0x00016104, 0xfff80000}, +- {0x00016108, 0x00080010}, +- {0x00016144, 0x02084080}, +- {0x00016148, 0x00000000}, +- {0x00016280, 0x058a0001}, +- {0x00016284, 0x3d840208}, +- {0x00016288, 0x05a20408}, +- {0x0001628c, 0x00038c07}, +- {0x00016290, 0x40000004}, +- {0x00016294, 0x458aa14f}, +- {0x00016380, 0x00000000}, +- {0x00016384, 0x00000000}, +- {0x00016388, 0x00800700}, +- {0x0001638c, 0x00800700}, +- {0x00016390, 0x00800700}, +- {0x00016394, 0x00000000}, +- {0x00016398, 0x00000000}, +- {0x0001639c, 0x00000000}, +- {0x000163a0, 0x00000001}, +- {0x000163a4, 0x00000001}, +- {0x000163a8, 0x00000000}, +- {0x000163ac, 0x00000000}, +- {0x000163b0, 0x00000000}, +- {0x000163b4, 0x00000000}, +- {0x000163b8, 0x00000000}, +- {0x000163bc, 0x00000000}, +- {0x000163c0, 0x000000a0}, +- {0x000163c4, 0x000c0000}, +- {0x000163c8, 0x14021402}, +- {0x000163cc, 0x00001402}, +- {0x000163d0, 0x00000000}, +- {0x000163d4, 0x00000000}, +- {0x00016400, 0x36db6db6}, +- {0x00016404, 0x6db6db40}, +- {0x00016408, 0x73f00000}, +- {0x0001640c, 0x00000000}, +- {0x00016440, 0x7f80fff8}, +- {0x0001644c, 0x76d005b5}, +- {0x00016450, 0x556cf031}, +- {0x00016454, 0x13449440}, +- {0x00016458, 0x0c51c92c}, +- {0x0001645c, 0x3db7fffc}, +- {0x00016460, 0xfffffffc}, +- {0x00016464, 0x000f0278}, +- {0x0001646c, 0x6db60000}, +- {0x00016500, 0x3fffbe01}, +- {0x00016504, 0xfff80000}, +- {0x00016508, 0x00080010}, +- {0x00016544, 0x02084080}, +- {0x00016548, 0x00000000}, +- {0x00016780, 0x00000000}, +- {0x00016784, 0x00000000}, +- {0x00016788, 0x00800700}, +- {0x0001678c, 0x00800700}, +- {0x00016790, 0x00800700}, +- {0x00016794, 0x00000000}, +- {0x00016798, 0x00000000}, +- {0x0001679c, 0x00000000}, +- {0x000167a0, 0x00000001}, +- {0x000167a4, 0x00000001}, +- {0x000167a8, 0x00000000}, +- {0x000167ac, 0x00000000}, +- {0x000167b0, 0x00000000}, +- {0x000167b4, 0x00000000}, +- {0x000167b8, 0x00000000}, +- {0x000167bc, 0x00000000}, +- {0x000167c0, 0x000000a0}, +- {0x000167c4, 0x000c0000}, +- {0x000167c8, 0x14021402}, +- {0x000167cc, 0x00001402}, +- {0x000167d0, 0x00000000}, +- {0x000167d4, 0x00000000}, +- {0x00016800, 0x36db6db6}, +- {0x00016804, 0x6db6db40}, +- {0x00016808, 0x73f00000}, +- {0x0001680c, 0x00000000}, +- {0x00016840, 0x7f80fff8}, +- {0x0001684c, 0x76d005b5}, +- {0x00016850, 0x556cf031}, +- {0x00016854, 0x13449440}, +- {0x00016858, 0x0c51c92c}, +- {0x0001685c, 0x3db7fffc}, +- {0x00016860, 0xfffffffc}, +- {0x00016864, 0x000f0278}, +- {0x0001686c, 0x6db60000}, +- {0x00016900, 0x3fffbe01}, +- {0x00016904, 0xfff80000}, +- {0x00016908, 0x00080010}, +- {0x00016944, 0x02084080}, +- {0x00016948, 0x00000000}, +- {0x00016b80, 0x00000000}, +- {0x00016b84, 0x00000000}, +- {0x00016b88, 0x00800700}, +- {0x00016b8c, 0x00800700}, +- {0x00016b90, 0x00800700}, +- {0x00016b94, 0x00000000}, +- {0x00016b98, 0x00000000}, +- {0x00016b9c, 0x00000000}, +- {0x00016ba0, 0x00000001}, +- {0x00016ba4, 0x00000001}, +- {0x00016ba8, 0x00000000}, +- {0x00016bac, 0x00000000}, +- {0x00016bb0, 0x00000000}, +- {0x00016bb4, 0x00000000}, +- {0x00016bb8, 0x00000000}, +- {0x00016bbc, 0x00000000}, +- {0x00016bc0, 0x000000a0}, +- {0x00016bc4, 0x000c0000}, +- {0x00016bc8, 0x14021402}, +- {0x00016bcc, 0x00001402}, +- {0x00016bd0, 0x00000000}, +- {0x00016bd4, 0x00000000}, +-}; +- +-static const u32 ar9300Common_rx_gain_table_merlin_2p0[][2] = { +- /* Addr allmodes */ +- {0x0000a000, 0x02000101}, +- {0x0000a004, 0x02000102}, +- {0x0000a008, 0x02000103}, +- {0x0000a00c, 0x02000104}, +- {0x0000a010, 0x02000200}, +- {0x0000a014, 0x02000201}, +- {0x0000a018, 0x02000202}, +- {0x0000a01c, 0x02000203}, +- {0x0000a020, 0x02000204}, +- {0x0000a024, 0x02000205}, +- {0x0000a028, 0x02000208}, +- {0x0000a02c, 0x02000302}, +- {0x0000a030, 0x02000303}, +- {0x0000a034, 0x02000304}, +- {0x0000a038, 0x02000400}, +- {0x0000a03c, 0x02010300}, +- {0x0000a040, 0x02010301}, +- {0x0000a044, 0x02010302}, +- {0x0000a048, 0x02000500}, +- {0x0000a04c, 0x02010400}, +- {0x0000a050, 0x02020300}, +- {0x0000a054, 0x02020301}, +- {0x0000a058, 0x02020302}, +- {0x0000a05c, 0x02020303}, +- {0x0000a060, 0x02020400}, +- {0x0000a064, 0x02030300}, +- {0x0000a068, 0x02030301}, +- {0x0000a06c, 0x02030302}, +- {0x0000a070, 0x02030303}, +- {0x0000a074, 0x02030400}, +- {0x0000a078, 0x02040300}, +- {0x0000a07c, 0x02040301}, +- {0x0000a080, 0x02040302}, +- {0x0000a084, 0x02040303}, +- {0x0000a088, 0x02030500}, +- {0x0000a08c, 0x02040400}, +- {0x0000a090, 0x02050203}, +- {0x0000a094, 0x02050204}, +- {0x0000a098, 0x02050205}, +- {0x0000a09c, 0x02040500}, +- {0x0000a0a0, 0x02050301}, +- {0x0000a0a4, 0x02050302}, +- {0x0000a0a8, 0x02050303}, +- {0x0000a0ac, 0x02050400}, +- {0x0000a0b0, 0x02050401}, +- {0x0000a0b4, 0x02050402}, +- {0x0000a0b8, 0x02050403}, +- {0x0000a0bc, 0x02050500}, +- {0x0000a0c0, 0x02050501}, +- {0x0000a0c4, 0x02050502}, +- {0x0000a0c8, 0x02050503}, +- {0x0000a0cc, 0x02050504}, +- {0x0000a0d0, 0x02050600}, +- {0x0000a0d4, 0x02050601}, +- {0x0000a0d8, 0x02050602}, +- {0x0000a0dc, 0x02050603}, +- {0x0000a0e0, 0x02050604}, +- {0x0000a0e4, 0x02050700}, +- {0x0000a0e8, 0x02050701}, +- {0x0000a0ec, 0x02050702}, +- {0x0000a0f0, 0x02050703}, +- {0x0000a0f4, 0x02050704}, +- {0x0000a0f8, 0x02050705}, +- {0x0000a0fc, 0x02050708}, +- {0x0000a100, 0x02050709}, +- {0x0000a104, 0x0205070a}, +- {0x0000a108, 0x0205070b}, +- {0x0000a10c, 0x0205070c}, +- {0x0000a110, 0x0205070d}, +- {0x0000a114, 0x02050710}, +- {0x0000a118, 0x02050711}, +- {0x0000a11c, 0x02050712}, +- {0x0000a120, 0x02050713}, +- {0x0000a124, 0x02050714}, +- {0x0000a128, 0x02050715}, +- {0x0000a12c, 0x02050730}, +- {0x0000a130, 0x02050731}, +- {0x0000a134, 0x02050732}, +- {0x0000a138, 0x02050733}, +- {0x0000a13c, 0x02050734}, +- {0x0000a140, 0x02050735}, +- {0x0000a144, 0x02050750}, +- {0x0000a148, 0x02050751}, +- {0x0000a14c, 0x02050752}, +- {0x0000a150, 0x02050753}, +- {0x0000a154, 0x02050754}, +- {0x0000a158, 0x02050755}, +- {0x0000a15c, 0x02050770}, +- {0x0000a160, 0x02050771}, +- {0x0000a164, 0x02050772}, +- {0x0000a168, 0x02050773}, +- {0x0000a16c, 0x02050774}, +- {0x0000a170, 0x02050775}, +- {0x0000a174, 0x00000776}, +- {0x0000a178, 0x00000776}, +- {0x0000a17c, 0x00000776}, +- {0x0000a180, 0x00000776}, +- {0x0000a184, 0x00000776}, +- {0x0000a188, 0x00000776}, +- {0x0000a18c, 0x00000776}, +- {0x0000a190, 0x00000776}, +- {0x0000a194, 0x00000776}, +- {0x0000a198, 0x00000776}, +- {0x0000a19c, 0x00000776}, +- {0x0000a1a0, 0x00000776}, +- {0x0000a1a4, 0x00000776}, +- {0x0000a1a8, 0x00000776}, +- {0x0000a1ac, 0x00000776}, +- {0x0000a1b0, 0x00000776}, +- {0x0000a1b4, 0x00000776}, +- {0x0000a1b8, 0x00000776}, +- {0x0000a1bc, 0x00000776}, +- {0x0000a1c0, 0x00000776}, +- {0x0000a1c4, 0x00000776}, +- {0x0000a1c8, 0x00000776}, +- {0x0000a1cc, 0x00000776}, +- {0x0000a1d0, 0x00000776}, +- {0x0000a1d4, 0x00000776}, +- {0x0000a1d8, 0x00000776}, +- {0x0000a1dc, 0x00000776}, +- {0x0000a1e0, 0x00000776}, +- {0x0000a1e4, 0x00000776}, +- {0x0000a1e8, 0x00000776}, +- {0x0000a1ec, 0x00000776}, +- {0x0000a1f0, 0x00000776}, +- {0x0000a1f4, 0x00000776}, +- {0x0000a1f8, 0x00000776}, +- {0x0000a1fc, 0x00000776}, +- {0x0000b000, 0x02000101}, +- {0x0000b004, 0x02000102}, +- {0x0000b008, 0x02000103}, +- {0x0000b00c, 0x02000104}, +- {0x0000b010, 0x02000200}, +- {0x0000b014, 0x02000201}, +- {0x0000b018, 0x02000202}, +- {0x0000b01c, 0x02000203}, +- {0x0000b020, 0x02000204}, +- {0x0000b024, 0x02000205}, +- {0x0000b028, 0x02000208}, +- {0x0000b02c, 0x02000302}, +- {0x0000b030, 0x02000303}, +- {0x0000b034, 0x02000304}, +- {0x0000b038, 0x02000400}, +- {0x0000b03c, 0x02010300}, +- {0x0000b040, 0x02010301}, +- {0x0000b044, 0x02010302}, +- {0x0000b048, 0x02000500}, +- {0x0000b04c, 0x02010400}, +- {0x0000b050, 0x02020300}, +- {0x0000b054, 0x02020301}, +- {0x0000b058, 0x02020302}, +- {0x0000b05c, 0x02020303}, +- {0x0000b060, 0x02020400}, +- {0x0000b064, 0x02030300}, +- {0x0000b068, 0x02030301}, +- {0x0000b06c, 0x02030302}, +- {0x0000b070, 0x02030303}, +- {0x0000b074, 0x02030400}, +- {0x0000b078, 0x02040300}, +- {0x0000b07c, 0x02040301}, +- {0x0000b080, 0x02040302}, +- {0x0000b084, 0x02040303}, +- {0x0000b088, 0x02030500}, +- {0x0000b08c, 0x02040400}, +- {0x0000b090, 0x02050203}, +- {0x0000b094, 0x02050204}, +- {0x0000b098, 0x02050205}, +- {0x0000b09c, 0x02040500}, +- {0x0000b0a0, 0x02050301}, +- {0x0000b0a4, 0x02050302}, +- {0x0000b0a8, 0x02050303}, +- {0x0000b0ac, 0x02050400}, +- {0x0000b0b0, 0x02050401}, +- {0x0000b0b4, 0x02050402}, +- {0x0000b0b8, 0x02050403}, +- {0x0000b0bc, 0x02050500}, +- {0x0000b0c0, 0x02050501}, +- {0x0000b0c4, 0x02050502}, +- {0x0000b0c8, 0x02050503}, +- {0x0000b0cc, 0x02050504}, +- {0x0000b0d0, 0x02050600}, +- {0x0000b0d4, 0x02050601}, +- {0x0000b0d8, 0x02050602}, +- {0x0000b0dc, 0x02050603}, +- {0x0000b0e0, 0x02050604}, +- {0x0000b0e4, 0x02050700}, +- {0x0000b0e8, 0x02050701}, +- {0x0000b0ec, 0x02050702}, +- {0x0000b0f0, 0x02050703}, +- {0x0000b0f4, 0x02050704}, +- {0x0000b0f8, 0x02050705}, +- {0x0000b0fc, 0x02050708}, +- {0x0000b100, 0x02050709}, +- {0x0000b104, 0x0205070a}, +- {0x0000b108, 0x0205070b}, +- {0x0000b10c, 0x0205070c}, +- {0x0000b110, 0x0205070d}, +- {0x0000b114, 0x02050710}, +- {0x0000b118, 0x02050711}, +- {0x0000b11c, 0x02050712}, +- {0x0000b120, 0x02050713}, +- {0x0000b124, 0x02050714}, +- {0x0000b128, 0x02050715}, +- {0x0000b12c, 0x02050730}, +- {0x0000b130, 0x02050731}, +- {0x0000b134, 0x02050732}, +- {0x0000b138, 0x02050733}, +- {0x0000b13c, 0x02050734}, +- {0x0000b140, 0x02050735}, +- {0x0000b144, 0x02050750}, +- {0x0000b148, 0x02050751}, +- {0x0000b14c, 0x02050752}, +- {0x0000b150, 0x02050753}, +- {0x0000b154, 0x02050754}, +- {0x0000b158, 0x02050755}, +- {0x0000b15c, 0x02050770}, +- {0x0000b160, 0x02050771}, +- {0x0000b164, 0x02050772}, +- {0x0000b168, 0x02050773}, +- {0x0000b16c, 0x02050774}, +- {0x0000b170, 0x02050775}, +- {0x0000b174, 0x00000776}, +- {0x0000b178, 0x00000776}, +- {0x0000b17c, 0x00000776}, +- {0x0000b180, 0x00000776}, +- {0x0000b184, 0x00000776}, +- {0x0000b188, 0x00000776}, +- {0x0000b18c, 0x00000776}, +- {0x0000b190, 0x00000776}, +- {0x0000b194, 0x00000776}, +- {0x0000b198, 0x00000776}, +- {0x0000b19c, 0x00000776}, +- {0x0000b1a0, 0x00000776}, +- {0x0000b1a4, 0x00000776}, +- {0x0000b1a8, 0x00000776}, +- {0x0000b1ac, 0x00000776}, +- {0x0000b1b0, 0x00000776}, +- {0x0000b1b4, 0x00000776}, +- {0x0000b1b8, 0x00000776}, +- {0x0000b1bc, 0x00000776}, +- {0x0000b1c0, 0x00000776}, +- {0x0000b1c4, 0x00000776}, +- {0x0000b1c8, 0x00000776}, +- {0x0000b1cc, 0x00000776}, +- {0x0000b1d0, 0x00000776}, +- {0x0000b1d4, 0x00000776}, +- {0x0000b1d8, 0x00000776}, +- {0x0000b1dc, 0x00000776}, +- {0x0000b1e0, 0x00000776}, +- {0x0000b1e4, 0x00000776}, +- {0x0000b1e8, 0x00000776}, +- {0x0000b1ec, 0x00000776}, +- {0x0000b1f0, 0x00000776}, +- {0x0000b1f4, 0x00000776}, +- {0x0000b1f8, 0x00000776}, +- {0x0000b1fc, 0x00000776}, +-}; +- +-static const u32 ar9300_2p0_mac_postamble[][5] = { +- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ +- {0x00001030, 0x00000230, 0x00000460, 0x000002c0, 0x00000160}, +- {0x00001070, 0x00000168, 0x000002d0, 0x00000318, 0x0000018c}, +- {0x000010b0, 0x00000e60, 0x00001cc0, 0x00007c70, 0x00003e38}, +- {0x00008014, 0x03e803e8, 0x07d007d0, 0x10801600, 0x08400b00}, +- {0x0000801c, 0x128d8027, 0x128d804f, 0x12e00057, 0x12e0002b}, +- {0x00008120, 0x08f04800, 0x08f04800, 0x08f04810, 0x08f04810}, +- {0x000081d0, 0x00003210, 0x00003210, 0x0000320a, 0x0000320a}, +- {0x00008318, 0x00003e80, 0x00007d00, 0x00006880, 0x00003440}, +-}; +- +-static const u32 ar9300_2p0_soc_postamble[][5] = { +- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ +- {0x00007010, 0x00000023, 0x00000023, 0x00000023, 0x00000023}, +-}; +- +-static const u32 ar9200_merlin_2p0_radio_core[][2] = { +- /* Addr allmodes */ +- {0x00007800, 0x00040000}, +- {0x00007804, 0xdb005012}, +- {0x00007808, 0x04924914}, +- {0x0000780c, 0x21084210}, +- {0x00007810, 0x6d801300}, +- {0x00007814, 0x0019beff}, +- {0x00007818, 0x07e41000}, +- {0x0000781c, 0x00392000}, +- {0x00007820, 0x92592480}, +- {0x00007824, 0x00040000}, +- {0x00007828, 0xdb005012}, +- {0x0000782c, 0x04924914}, +- {0x00007830, 0x21084210}, +- {0x00007834, 0x6d801300}, +- {0x00007838, 0x0019beff}, +- {0x0000783c, 0x07e40000}, +- {0x00007840, 0x00392000}, +- {0x00007844, 0x92592480}, +- {0x00007848, 0x00100000}, +- {0x0000784c, 0x773f0567}, +- {0x00007850, 0x54214514}, +- {0x00007854, 0x12035828}, +- {0x00007858, 0x92592692}, +- {0x0000785c, 0x00000000}, +- {0x00007860, 0x56400000}, +- {0x00007864, 0x0a8e370e}, +- {0x00007868, 0xc0102850}, +- {0x0000786c, 0x812d4000}, +- {0x00007870, 0x807ec400}, +- {0x00007874, 0x001b6db0}, +- {0x00007878, 0x00376b63}, +- {0x0000787c, 0x06db6db6}, +- {0x00007880, 0x006d8000}, +- {0x00007884, 0xffeffffe}, +- {0x00007888, 0xffeffffe}, +- {0x0000788c, 0x00010000}, +- {0x00007890, 0x02060aeb}, +- {0x00007894, 0x5a108000}, +-}; +- +-static const u32 ar9300_2p0_baseband_postamble[][5] = { +- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ +- {0x00009810, 0xd00a8005, 0xd00a8005, 0xd00a8011, 0xd00a8011}, +- {0x00009820, 0x206a022e, 0x206a022e, 0x206a012e, 0x206a012e}, +- {0x00009824, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0, 0x5ac640d0}, +- {0x00009828, 0x06903081, 0x06903081, 0x06903881, 0x06903881}, +- {0x0000982c, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4, 0x05eea6d4}, +- {0x00009830, 0x0000059c, 0x0000059c, 0x0000119c, 0x0000119c}, +- {0x00009c00, 0x00000044, 0x000000c4, 0x000000c4, 0x00000044}, +- {0x00009e00, 0x0372161e, 0x0372161e, 0x037216a0, 0x037216a0}, +- {0x00009e04, 0x00802020, 0x00802020, 0x00802020, 0x00802020}, +- {0x00009e0c, 0x6c4000e2, 0x6d4000e2, 0x6d4000e2, 0x6c4000e2}, +- {0x00009e10, 0x7ec88d2e, 0x7ec88d2e, 0x7ec84d2e, 0x7ec84d2e}, +- {0x00009e14, 0x31395d5e, 0x3139605e, 0x3139605e, 0x31395d5e}, +- {0x00009e18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x00009e1c, 0x0001cf9c, 0x0001cf9c, 0x00021f9c, 0x00021f9c}, +- {0x00009e20, 0x000003b5, 0x000003b5, 0x000003ce, 0x000003ce}, +- {0x00009e2c, 0x0000001c, 0x0000001c, 0x00000021, 0x00000021}, +- {0x00009e44, 0x02321e27, 0x02321e27, 0x02291e27, 0x02291e27}, +- {0x00009e48, 0x5030201a, 0x5030201a, 0x50302012, 0x50302012}, +- {0x00009fc8, 0x0003f000, 0x0003f000, 0x0001a000, 0x0001a000}, +- {0x0000a204, 0x000037c0, 0x000037c4, 0x000037c4, 0x000037c0}, +- {0x0000a208, 0x00000104, 0x00000104, 0x00000004, 0x00000004}, +- {0x0000a230, 0x0000000a, 0x00000014, 0x00000016, 0x0000000b}, +- {0x0000a238, 0xffb81018, 0xffb81018, 0xffb81018, 0xffb81018}, +- {0x0000a250, 0x00000000, 0x00000000, 0x00000210, 0x00000108}, +- {0x0000a254, 0x000007d0, 0x00000fa0, 0x00001130, 0x00000898}, +- {0x0000a258, 0x02020002, 0x02020002, 0x02020002, 0x02020002}, +- {0x0000a25c, 0x01000e0e, 0x01000e0e, 0x01000e0e, 0x01000e0e}, +- {0x0000a260, 0x0a021501, 0x0a021501, 0x3a021501, 0x3a021501}, +- {0x0000a264, 0x00000e0e, 0x00000e0e, 0x00000e0e, 0x00000e0e}, +- {0x0000a280, 0x00000007, 0x00000007, 0x0000000b, 0x0000000b}, +- {0x0000a284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, +- {0x0000a288, 0x00000110, 0x00000110, 0x00000110, 0x00000110}, +- {0x0000a28c, 0x00022222, 0x00022222, 0x00022222, 0x00022222}, +- {0x0000a2c4, 0x00158d18, 0x00158d18, 0x00158d18, 0x00158d18}, +- {0x0000a2d0, 0x00071981, 0x00071981, 0x00071981, 0x00071982}, +- {0x0000a2d8, 0xf999a83a, 0xf999a83a, 0xf999a83a, 0xf999a83a}, +- {0x0000a358, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x0000a830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, +- {0x0000ae04, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, +- {0x0000ae18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x0000ae1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, +- {0x0000ae20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce}, +- {0x0000b284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, +- {0x0000b830, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, +- {0x0000be04, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, +- {0x0000be18, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x0000be1c, 0x0000019c, 0x0000019c, 0x0000019c, 0x0000019c}, +- {0x0000be20, 0x000001b5, 0x000001b5, 0x000001ce, 0x000001ce}, +- {0x0000c284, 0x00000000, 0x00000000, 0x00000150, 0x00000150}, +-}; +- +-static const u32 ar9300_2p0_baseband_core[][2] = { +- /* Addr allmodes */ +- {0x00009800, 0xafe68e30}, +- {0x00009804, 0xfd14e000}, +- {0x00009808, 0x9c0a9f6b}, +- {0x0000980c, 0x04900000}, +- {0x00009814, 0x9280c00a}, +- {0x00009818, 0x00000000}, +- {0x0000981c, 0x00020028}, +- {0x00009834, 0x5f3ca3de}, +- {0x00009838, 0x0108ecff}, +- {0x0000983c, 0x14750600}, +- {0x00009880, 0x201fff00}, +- {0x00009884, 0x00001042}, +- {0x000098a4, 0x00200400}, +- {0x000098b0, 0x52440bbe}, +- {0x000098d0, 0x004b6a8e}, +- {0x000098d4, 0x00000820}, +- {0x000098dc, 0x00000000}, +- {0x000098f0, 0x00000000}, +- {0x000098f4, 0x00000000}, +- {0x00009c04, 0xff55ff55}, +- {0x00009c08, 0x0320ff55}, +- {0x00009c0c, 0x00000000}, +- {0x00009c10, 0x00000000}, +- {0x00009c14, 0x00046384}, +- {0x00009c18, 0x05b6b440}, +- {0x00009c1c, 0x00b6b440}, +- {0x00009d00, 0xc080a333}, +- {0x00009d04, 0x40206c10}, +- {0x00009d08, 0x009c4060}, +- {0x00009d0c, 0x9883800a}, +- {0x00009d10, 0x01834061}, +- {0x00009d14, 0x00c0040b}, +- {0x00009d18, 0x00000000}, +- {0x00009e08, 0x0038230c}, +- {0x00009e24, 0x990bb515}, +- {0x00009e28, 0x0c6f0000}, +- {0x00009e30, 0x06336f77}, +- {0x00009e34, 0x6af6532f}, +- {0x00009e38, 0x0cc80c00}, +- {0x00009e3c, 0xcf946222}, +- {0x00009e40, 0x0d261820}, +- {0x00009e4c, 0x00001004}, +- {0x00009e50, 0x00ff03f1}, +- {0x00009e54, 0x00000000}, +- {0x00009fc0, 0x803e4788}, +- {0x00009fc4, 0x0001efb5}, +- {0x00009fcc, 0x40000014}, +- {0x00009fd0, 0x01193b93}, +- {0x0000a20c, 0x00000000}, +- {0x0000a220, 0x00000000}, +- {0x0000a224, 0x00000000}, +- {0x0000a228, 0x10002310}, +- {0x0000a22c, 0x01036a1e}, +- {0x0000a234, 0x10000fff}, +- {0x0000a23c, 0x00000000}, +- {0x0000a244, 0x0c000000}, +- {0x0000a2a0, 0x00000001}, +- {0x0000a2c0, 0x00000001}, +- {0x0000a2c8, 0x00000000}, +- {0x0000a2cc, 0x18c43433}, +- {0x0000a2d4, 0x00000000}, +- {0x0000a2dc, 0x00000000}, +- {0x0000a2e0, 0x00000000}, +- {0x0000a2e4, 0x00000000}, +- {0x0000a2e8, 0x00000000}, +- {0x0000a2ec, 0x00000000}, +- {0x0000a2f0, 0x00000000}, +- {0x0000a2f4, 0x00000000}, +- {0x0000a2f8, 0x00000000}, +- {0x0000a344, 0x00000000}, +- {0x0000a34c, 0x00000000}, +- {0x0000a350, 0x0000a000}, +- {0x0000a364, 0x00000000}, +- {0x0000a370, 0x00000000}, +- {0x0000a390, 0x00000001}, +- {0x0000a394, 0x00000444}, +- {0x0000a398, 0x001f0e0f}, +- {0x0000a39c, 0x0075393f}, +- {0x0000a3a0, 0xb79f6427}, +- {0x0000a3a4, 0x00000000}, +- {0x0000a3a8, 0xaaaaaaaa}, +- {0x0000a3ac, 0x3c466478}, +- {0x0000a3c0, 0x20202020}, +- {0x0000a3c4, 0x22222220}, +- {0x0000a3c8, 0x20200020}, +- {0x0000a3cc, 0x20202020}, +- {0x0000a3d0, 0x20202020}, +- {0x0000a3d4, 0x20202020}, +- {0x0000a3d8, 0x20202020}, +- {0x0000a3dc, 0x20202020}, +- {0x0000a3e0, 0x20202020}, +- {0x0000a3e4, 0x20202020}, +- {0x0000a3e8, 0x20202020}, +- {0x0000a3ec, 0x20202020}, +- {0x0000a3f0, 0x00000000}, +- {0x0000a3f4, 0x00000246}, +- {0x0000a3f8, 0x0cdbd380}, +- {0x0000a3fc, 0x000f0f01}, +- {0x0000a400, 0x8fa91f01}, +- {0x0000a404, 0x00000000}, +- {0x0000a408, 0x0e79e5c6}, +- {0x0000a40c, 0x00820820}, +- {0x0000a414, 0x1ce739ce}, +- {0x0000a418, 0x2d001dce}, +- {0x0000a41c, 0x1ce739ce}, +- {0x0000a420, 0x000001ce}, +- {0x0000a424, 0x1ce739ce}, +- {0x0000a428, 0x000001ce}, +- {0x0000a42c, 0x1ce739ce}, +- {0x0000a430, 0x1ce739ce}, +- {0x0000a434, 0x00000000}, +- {0x0000a438, 0x00001801}, +- {0x0000a43c, 0x00000000}, +- {0x0000a440, 0x00000000}, +- {0x0000a444, 0x00000000}, +- {0x0000a448, 0x04000080}, +- {0x0000a44c, 0x00000001}, +- {0x0000a450, 0x00010000}, +- {0x0000a458, 0x00000000}, +- {0x0000a600, 0x00000000}, +- {0x0000a604, 0x00000000}, +- {0x0000a608, 0x00000000}, +- {0x0000a60c, 0x00000000}, +- {0x0000a610, 0x00000000}, +- {0x0000a614, 0x00000000}, +- {0x0000a618, 0x00000000}, +- {0x0000a61c, 0x00000000}, +- {0x0000a620, 0x00000000}, +- {0x0000a624, 0x00000000}, +- {0x0000a628, 0x00000000}, +- {0x0000a62c, 0x00000000}, +- {0x0000a630, 0x00000000}, +- {0x0000a634, 0x00000000}, +- {0x0000a638, 0x00000000}, +- {0x0000a63c, 0x00000000}, +- {0x0000a640, 0x00000000}, +- {0x0000a644, 0x3fad9d74}, +- {0x0000a648, 0x0048060a}, +- {0x0000a64c, 0x00000637}, +- {0x0000a670, 0x03020100}, +- {0x0000a674, 0x09080504}, +- {0x0000a678, 0x0d0c0b0a}, +- {0x0000a67c, 0x13121110}, +- {0x0000a680, 0x31301514}, +- {0x0000a684, 0x35343332}, +- {0x0000a688, 0x00000036}, +- {0x0000a690, 0x00000838}, +- {0x0000a7c0, 0x00000000}, +- {0x0000a7c4, 0xfffffffc}, +- {0x0000a7c8, 0x00000000}, +- {0x0000a7cc, 0x00000000}, +- {0x0000a7d0, 0x00000000}, +- {0x0000a7d4, 0x00000004}, +- {0x0000a7dc, 0x00000001}, +- {0x0000a8d0, 0x004b6a8e}, +- {0x0000a8d4, 0x00000820}, +- {0x0000a8dc, 0x00000000}, +- {0x0000a8f0, 0x00000000}, +- {0x0000a8f4, 0x00000000}, +- {0x0000b2d0, 0x00000080}, +- {0x0000b2d4, 0x00000000}, +- {0x0000b2dc, 0x00000000}, +- {0x0000b2e0, 0x00000000}, +- {0x0000b2e4, 0x00000000}, +- {0x0000b2e8, 0x00000000}, +- {0x0000b2ec, 0x00000000}, +- {0x0000b2f0, 0x00000000}, +- {0x0000b2f4, 0x00000000}, +- {0x0000b2f8, 0x00000000}, +- {0x0000b408, 0x0e79e5c0}, +- {0x0000b40c, 0x00820820}, +- {0x0000b420, 0x00000000}, +- {0x0000b8d0, 0x004b6a8e}, +- {0x0000b8d4, 0x00000820}, +- {0x0000b8dc, 0x00000000}, +- {0x0000b8f0, 0x00000000}, +- {0x0000b8f4, 0x00000000}, +- {0x0000c2d0, 0x00000080}, +- {0x0000c2d4, 0x00000000}, +- {0x0000c2dc, 0x00000000}, +- {0x0000c2e0, 0x00000000}, +- {0x0000c2e4, 0x00000000}, +- {0x0000c2e8, 0x00000000}, +- {0x0000c2ec, 0x00000000}, +- {0x0000c2f0, 0x00000000}, +- {0x0000c2f4, 0x00000000}, +- {0x0000c2f8, 0x00000000}, +- {0x0000c408, 0x0e79e5c0}, +- {0x0000c40c, 0x00820820}, +- {0x0000c420, 0x00000000}, +-}; +- +-static const u32 ar9300Modes_high_power_tx_gain_table_2p0[][5] = { +- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ +- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, +- {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000}, +- {0x0000a504, 0x06002223, 0x06002223, 0x04000002, 0x04000002}, +- {0x0000a508, 0x0a022220, 0x0a022220, 0x08000004, 0x08000004}, +- {0x0000a50c, 0x0f022223, 0x0f022223, 0x0b000200, 0x0b000200}, +- {0x0000a510, 0x14022620, 0x14022620, 0x0f000202, 0x0f000202}, +- {0x0000a514, 0x18022622, 0x18022622, 0x11000400, 0x11000400}, +- {0x0000a518, 0x1b022822, 0x1b022822, 0x15000402, 0x15000402}, +- {0x0000a51c, 0x20022842, 0x20022842, 0x19000404, 0x19000404}, +- {0x0000a520, 0x22022c41, 0x22022c41, 0x1b000603, 0x1b000603}, +- {0x0000a524, 0x28023042, 0x28023042, 0x1f000a02, 0x1f000a02}, +- {0x0000a528, 0x2c023044, 0x2c023044, 0x23000a04, 0x23000a04}, +- {0x0000a52c, 0x2f023644, 0x2f023644, 0x26000a20, 0x26000a20}, +- {0x0000a530, 0x34025643, 0x34025643, 0x2a000e20, 0x2a000e20}, +- {0x0000a534, 0x38025a44, 0x38025a44, 0x2e000e22, 0x2e000e22}, +- {0x0000a538, 0x3b025e45, 0x3b025e45, 0x31000e24, 0x31000e24}, +- {0x0000a53c, 0x41025e4a, 0x41025e4a, 0x34001640, 0x34001640}, +- {0x0000a540, 0x48025e6c, 0x48025e6c, 0x38001660, 0x38001660}, +- {0x0000a544, 0x4e025e8e, 0x4e025e8e, 0x3b001861, 0x3b001861}, +- {0x0000a548, 0x53025eb2, 0x53025eb2, 0x3e001a81, 0x3e001a81}, +- {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83}, +- {0x0000a550, 0x5f025ef6, 0x5f025ef6, 0x44001c84, 0x44001c84}, +- {0x0000a554, 0x62025f56, 0x62025f56, 0x48001ce3, 0x48001ce3}, +- {0x0000a558, 0x66027f56, 0x66027f56, 0x4c001ce5, 0x4c001ce5}, +- {0x0000a55c, 0x6a029f56, 0x6a029f56, 0x50001ce9, 0x50001ce9}, +- {0x0000a560, 0x70049f56, 0x70049f56, 0x54001ceb, 0x54001ceb}, +- {0x0000a564, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a568, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a56c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a570, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a574, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a578, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a57c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000}, +- {0x0000a584, 0x06802223, 0x06802223, 0x04800002, 0x04800002}, +- {0x0000a588, 0x0a822220, 0x0a822220, 0x08800004, 0x08800004}, +- {0x0000a58c, 0x0f822223, 0x0f822223, 0x0b800200, 0x0b800200}, +- {0x0000a590, 0x14822620, 0x14822620, 0x0f800202, 0x0f800202}, +- {0x0000a594, 0x18822622, 0x18822622, 0x11800400, 0x11800400}, +- {0x0000a598, 0x1b822822, 0x1b822822, 0x15800402, 0x15800402}, +- {0x0000a59c, 0x20822842, 0x20822842, 0x19800404, 0x19800404}, +- {0x0000a5a0, 0x22822c41, 0x22822c41, 0x1b800603, 0x1b800603}, +- {0x0000a5a4, 0x28823042, 0x28823042, 0x1f800a02, 0x1f800a02}, +- {0x0000a5a8, 0x2c823044, 0x2c823044, 0x23800a04, 0x23800a04}, +- {0x0000a5ac, 0x2f823644, 0x2f823644, 0x26800a20, 0x26800a20}, +- {0x0000a5b0, 0x34825643, 0x34825643, 0x2a800e20, 0x2a800e20}, +- {0x0000a5b4, 0x38825a44, 0x38825a44, 0x2e800e22, 0x2e800e22}, +- {0x0000a5b8, 0x3b825e45, 0x3b825e45, 0x31800e24, 0x31800e24}, +- {0x0000a5bc, 0x41825e4a, 0x41825e4a, 0x34801640, 0x34801640}, +- {0x0000a5c0, 0x48825e6c, 0x48825e6c, 0x38801660, 0x38801660}, +- {0x0000a5c4, 0x4e825e8e, 0x4e825e8e, 0x3b801861, 0x3b801861}, +- {0x0000a5c8, 0x53825eb2, 0x53825eb2, 0x3e801a81, 0x3e801a81}, +- {0x0000a5cc, 0x59825eb5, 0x59825eb5, 0x42801a83, 0x42801a83}, +- {0x0000a5d0, 0x5f825ef6, 0x5f825ef6, 0x44801c84, 0x44801c84}, +- {0x0000a5d4, 0x62825f56, 0x62825f56, 0x48801ce3, 0x48801ce3}, +- {0x0000a5d8, 0x66827f56, 0x66827f56, 0x4c801ce5, 0x4c801ce5}, +- {0x0000a5dc, 0x6a829f56, 0x6a829f56, 0x50801ce9, 0x50801ce9}, +- {0x0000a5e0, 0x70849f56, 0x70849f56, 0x54801ceb, 0x54801ceb}, +- {0x0000a5e4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5e8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5ec, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5f0, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5f4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5f8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5fc, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x00016044, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, +- {0x00016048, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, +- {0x00016068, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, +- {0x00016444, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, +- {0x00016448, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, +- {0x00016468, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, +- {0x00016844, 0x056db2e6, 0x056db2e6, 0x056db2e6, 0x056db2e6}, +- {0x00016848, 0xae480001, 0xae480001, 0xae480001, 0xae480001}, +- {0x00016868, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c, 0x6eb6db6c}, +-}; +- +-static const u32 ar9300Modes_high_ob_db_tx_gain_table_2p0[][5] = { +- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ +- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, +- {0x0000a500, 0x00002220, 0x00002220, 0x00000000, 0x00000000}, +- {0x0000a504, 0x06002223, 0x06002223, 0x04000002, 0x04000002}, +- {0x0000a508, 0x0a022220, 0x0a022220, 0x08000004, 0x08000004}, +- {0x0000a50c, 0x0f022223, 0x0f022223, 0x0b000200, 0x0b000200}, +- {0x0000a510, 0x14022620, 0x14022620, 0x0f000202, 0x0f000202}, +- {0x0000a514, 0x18022622, 0x18022622, 0x11000400, 0x11000400}, +- {0x0000a518, 0x1b022822, 0x1b022822, 0x15000402, 0x15000402}, +- {0x0000a51c, 0x20022842, 0x20022842, 0x19000404, 0x19000404}, +- {0x0000a520, 0x22022c41, 0x22022c41, 0x1b000603, 0x1b000603}, +- {0x0000a524, 0x28023042, 0x28023042, 0x1f000a02, 0x1f000a02}, +- {0x0000a528, 0x2c023044, 0x2c023044, 0x23000a04, 0x23000a04}, +- {0x0000a52c, 0x2f023644, 0x2f023644, 0x26000a20, 0x26000a20}, +- {0x0000a530, 0x34025643, 0x34025643, 0x2a000e20, 0x2a000e20}, +- {0x0000a534, 0x38025a44, 0x38025a44, 0x2e000e22, 0x2e000e22}, +- {0x0000a538, 0x3b025e45, 0x3b025e45, 0x31000e24, 0x31000e24}, +- {0x0000a53c, 0x41025e4a, 0x41025e4a, 0x34001640, 0x34001640}, +- {0x0000a540, 0x48025e6c, 0x48025e6c, 0x38001660, 0x38001660}, +- {0x0000a544, 0x4e025e8e, 0x4e025e8e, 0x3b001861, 0x3b001861}, +- {0x0000a548, 0x53025eb2, 0x53025eb2, 0x3e001a81, 0x3e001a81}, +- {0x0000a54c, 0x59025eb5, 0x59025eb5, 0x42001a83, 0x42001a83}, +- {0x0000a550, 0x5f025ef6, 0x5f025ef6, 0x44001c84, 0x44001c84}, +- {0x0000a554, 0x62025f56, 0x62025f56, 0x48001ce3, 0x48001ce3}, +- {0x0000a558, 0x66027f56, 0x66027f56, 0x4c001ce5, 0x4c001ce5}, +- {0x0000a55c, 0x6a029f56, 0x6a029f56, 0x50001ce9, 0x50001ce9}, +- {0x0000a560, 0x70049f56, 0x70049f56, 0x54001ceb, 0x54001ceb}, +- {0x0000a564, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a568, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a56c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a570, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a574, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a578, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a57c, 0x7504ff56, 0x7504ff56, 0x56001eec, 0x56001eec}, +- {0x0000a580, 0x00802220, 0x00802220, 0x00800000, 0x00800000}, +- {0x0000a584, 0x06802223, 0x06802223, 0x04800002, 0x04800002}, +- {0x0000a588, 0x0a822220, 0x0a822220, 0x08800004, 0x08800004}, +- {0x0000a58c, 0x0f822223, 0x0f822223, 0x0b800200, 0x0b800200}, +- {0x0000a590, 0x14822620, 0x14822620, 0x0f800202, 0x0f800202}, +- {0x0000a594, 0x18822622, 0x18822622, 0x11800400, 0x11800400}, +- {0x0000a598, 0x1b822822, 0x1b822822, 0x15800402, 0x15800402}, +- {0x0000a59c, 0x20822842, 0x20822842, 0x19800404, 0x19800404}, +- {0x0000a5a0, 0x22822c41, 0x22822c41, 0x1b800603, 0x1b800603}, +- {0x0000a5a4, 0x28823042, 0x28823042, 0x1f800a02, 0x1f800a02}, +- {0x0000a5a8, 0x2c823044, 0x2c823044, 0x23800a04, 0x23800a04}, +- {0x0000a5ac, 0x2f823644, 0x2f823644, 0x26800a20, 0x26800a20}, +- {0x0000a5b0, 0x34825643, 0x34825643, 0x2a800e20, 0x2a800e20}, +- {0x0000a5b4, 0x38825a44, 0x38825a44, 0x2e800e22, 0x2e800e22}, +- {0x0000a5b8, 0x3b825e45, 0x3b825e45, 0x31800e24, 0x31800e24}, +- {0x0000a5bc, 0x41825e4a, 0x41825e4a, 0x34801640, 0x34801640}, +- {0x0000a5c0, 0x48825e6c, 0x48825e6c, 0x38801660, 0x38801660}, +- {0x0000a5c4, 0x4e825e8e, 0x4e825e8e, 0x3b801861, 0x3b801861}, +- {0x0000a5c8, 0x53825eb2, 0x53825eb2, 0x3e801a81, 0x3e801a81}, +- {0x0000a5cc, 0x59825eb5, 0x59825eb5, 0x42801a83, 0x42801a83}, +- {0x0000a5d0, 0x5f825ef6, 0x5f825ef6, 0x44801c84, 0x44801c84}, +- {0x0000a5d4, 0x62825f56, 0x62825f56, 0x48801ce3, 0x48801ce3}, +- {0x0000a5d8, 0x66827f56, 0x66827f56, 0x4c801ce5, 0x4c801ce5}, +- {0x0000a5dc, 0x6a829f56, 0x6a829f56, 0x50801ce9, 0x50801ce9}, +- {0x0000a5e0, 0x70849f56, 0x70849f56, 0x54801ceb, 0x54801ceb}, +- {0x0000a5e4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5e8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5ec, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5f0, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5f4, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5f8, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x0000a5fc, 0x7584ff56, 0x7584ff56, 0x56801eec, 0x56801eec}, +- {0x00016044, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, +- {0x00016048, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, +- {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +- {0x00016444, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, +- {0x00016448, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, +- {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +- {0x00016844, 0x056db2e4, 0x056db2e4, 0x056db2e4, 0x056db2e4}, +- {0x00016848, 0x8e480001, 0x8e480001, 0x8e480001, 0x8e480001}, +- {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +-}; +- +-static const u32 ar9300Common_rx_gain_table_2p0[][2] = { +- /* Addr allmodes */ +- {0x0000a000, 0x00010000}, +- {0x0000a004, 0x00030002}, +- {0x0000a008, 0x00050004}, +- {0x0000a00c, 0x00810080}, +- {0x0000a010, 0x00830082}, +- {0x0000a014, 0x01810180}, +- {0x0000a018, 0x01830182}, +- {0x0000a01c, 0x01850184}, +- {0x0000a020, 0x01890188}, +- {0x0000a024, 0x018b018a}, +- {0x0000a028, 0x018d018c}, +- {0x0000a02c, 0x01910190}, +- {0x0000a030, 0x01930192}, +- {0x0000a034, 0x01950194}, +- {0x0000a038, 0x038a0196}, +- {0x0000a03c, 0x038c038b}, +- {0x0000a040, 0x0390038d}, +- {0x0000a044, 0x03920391}, +- {0x0000a048, 0x03940393}, +- {0x0000a04c, 0x03960395}, +- {0x0000a050, 0x00000000}, +- {0x0000a054, 0x00000000}, +- {0x0000a058, 0x00000000}, +- {0x0000a05c, 0x00000000}, +- {0x0000a060, 0x00000000}, +- {0x0000a064, 0x00000000}, +- {0x0000a068, 0x00000000}, +- {0x0000a06c, 0x00000000}, +- {0x0000a070, 0x00000000}, +- {0x0000a074, 0x00000000}, +- {0x0000a078, 0x00000000}, +- {0x0000a07c, 0x00000000}, +- {0x0000a080, 0x22222229}, +- {0x0000a084, 0x1d1d1d1d}, +- {0x0000a088, 0x1d1d1d1d}, +- {0x0000a08c, 0x1d1d1d1d}, +- {0x0000a090, 0x171d1d1d}, +- {0x0000a094, 0x11111717}, +- {0x0000a098, 0x00030311}, +- {0x0000a09c, 0x00000000}, +- {0x0000a0a0, 0x00000000}, +- {0x0000a0a4, 0x00000000}, +- {0x0000a0a8, 0x00000000}, +- {0x0000a0ac, 0x00000000}, +- {0x0000a0b0, 0x00000000}, +- {0x0000a0b4, 0x00000000}, +- {0x0000a0b8, 0x00000000}, +- {0x0000a0bc, 0x00000000}, +- {0x0000a0c0, 0x001f0000}, +- {0x0000a0c4, 0x01000101}, +- {0x0000a0c8, 0x011e011f}, +- {0x0000a0cc, 0x011c011d}, +- {0x0000a0d0, 0x02030204}, +- {0x0000a0d4, 0x02010202}, +- {0x0000a0d8, 0x021f0200}, +- {0x0000a0dc, 0x0302021e}, +- {0x0000a0e0, 0x03000301}, +- {0x0000a0e4, 0x031e031f}, +- {0x0000a0e8, 0x0402031d}, +- {0x0000a0ec, 0x04000401}, +- {0x0000a0f0, 0x041e041f}, +- {0x0000a0f4, 0x0502041d}, +- {0x0000a0f8, 0x05000501}, +- {0x0000a0fc, 0x051e051f}, +- {0x0000a100, 0x06010602}, +- {0x0000a104, 0x061f0600}, +- {0x0000a108, 0x061d061e}, +- {0x0000a10c, 0x07020703}, +- {0x0000a110, 0x07000701}, +- {0x0000a114, 0x00000000}, +- {0x0000a118, 0x00000000}, +- {0x0000a11c, 0x00000000}, +- {0x0000a120, 0x00000000}, +- {0x0000a124, 0x00000000}, +- {0x0000a128, 0x00000000}, +- {0x0000a12c, 0x00000000}, +- {0x0000a130, 0x00000000}, +- {0x0000a134, 0x00000000}, +- {0x0000a138, 0x00000000}, +- {0x0000a13c, 0x00000000}, +- {0x0000a140, 0x001f0000}, +- {0x0000a144, 0x01000101}, +- {0x0000a148, 0x011e011f}, +- {0x0000a14c, 0x011c011d}, +- {0x0000a150, 0x02030204}, +- {0x0000a154, 0x02010202}, +- {0x0000a158, 0x021f0200}, +- {0x0000a15c, 0x0302021e}, +- {0x0000a160, 0x03000301}, +- {0x0000a164, 0x031e031f}, +- {0x0000a168, 0x0402031d}, +- {0x0000a16c, 0x04000401}, +- {0x0000a170, 0x041e041f}, +- {0x0000a174, 0x0502041d}, +- {0x0000a178, 0x05000501}, +- {0x0000a17c, 0x051e051f}, +- {0x0000a180, 0x06010602}, +- {0x0000a184, 0x061f0600}, +- {0x0000a188, 0x061d061e}, +- {0x0000a18c, 0x07020703}, +- {0x0000a190, 0x07000701}, +- {0x0000a194, 0x00000000}, +- {0x0000a198, 0x00000000}, +- {0x0000a19c, 0x00000000}, +- {0x0000a1a0, 0x00000000}, +- {0x0000a1a4, 0x00000000}, +- {0x0000a1a8, 0x00000000}, +- {0x0000a1ac, 0x00000000}, +- {0x0000a1b0, 0x00000000}, +- {0x0000a1b4, 0x00000000}, +- {0x0000a1b8, 0x00000000}, +- {0x0000a1bc, 0x00000000}, +- {0x0000a1c0, 0x00000000}, +- {0x0000a1c4, 0x00000000}, +- {0x0000a1c8, 0x00000000}, +- {0x0000a1cc, 0x00000000}, +- {0x0000a1d0, 0x00000000}, +- {0x0000a1d4, 0x00000000}, +- {0x0000a1d8, 0x00000000}, +- {0x0000a1dc, 0x00000000}, +- {0x0000a1e0, 0x00000000}, +- {0x0000a1e4, 0x00000000}, +- {0x0000a1e8, 0x00000000}, +- {0x0000a1ec, 0x00000000}, +- {0x0000a1f0, 0x00000396}, +- {0x0000a1f4, 0x00000396}, +- {0x0000a1f8, 0x00000396}, +- {0x0000a1fc, 0x00000196}, +- {0x0000b000, 0x00010000}, +- {0x0000b004, 0x00030002}, +- {0x0000b008, 0x00050004}, +- {0x0000b00c, 0x00810080}, +- {0x0000b010, 0x00830082}, +- {0x0000b014, 0x01810180}, +- {0x0000b018, 0x01830182}, +- {0x0000b01c, 0x01850184}, +- {0x0000b020, 0x02810280}, +- {0x0000b024, 0x02830282}, +- {0x0000b028, 0x02850284}, +- {0x0000b02c, 0x02890288}, +- {0x0000b030, 0x028b028a}, +- {0x0000b034, 0x0388028c}, +- {0x0000b038, 0x038a0389}, +- {0x0000b03c, 0x038c038b}, +- {0x0000b040, 0x0390038d}, +- {0x0000b044, 0x03920391}, +- {0x0000b048, 0x03940393}, +- {0x0000b04c, 0x03960395}, +- {0x0000b050, 0x00000000}, +- {0x0000b054, 0x00000000}, +- {0x0000b058, 0x00000000}, +- {0x0000b05c, 0x00000000}, +- {0x0000b060, 0x00000000}, +- {0x0000b064, 0x00000000}, +- {0x0000b068, 0x00000000}, +- {0x0000b06c, 0x00000000}, +- {0x0000b070, 0x00000000}, +- {0x0000b074, 0x00000000}, +- {0x0000b078, 0x00000000}, +- {0x0000b07c, 0x00000000}, +- {0x0000b080, 0x32323232}, +- {0x0000b084, 0x2f2f3232}, +- {0x0000b088, 0x23282a2d}, +- {0x0000b08c, 0x1c1e2123}, +- {0x0000b090, 0x14171919}, +- {0x0000b094, 0x0e0e1214}, +- {0x0000b098, 0x03050707}, +- {0x0000b09c, 0x00030303}, +- {0x0000b0a0, 0x00000000}, +- {0x0000b0a4, 0x00000000}, +- {0x0000b0a8, 0x00000000}, +- {0x0000b0ac, 0x00000000}, +- {0x0000b0b0, 0x00000000}, +- {0x0000b0b4, 0x00000000}, +- {0x0000b0b8, 0x00000000}, +- {0x0000b0bc, 0x00000000}, +- {0x0000b0c0, 0x003f0020}, +- {0x0000b0c4, 0x00400041}, +- {0x0000b0c8, 0x0140005f}, +- {0x0000b0cc, 0x0160015f}, +- {0x0000b0d0, 0x017e017f}, +- {0x0000b0d4, 0x02410242}, +- {0x0000b0d8, 0x025f0240}, +- {0x0000b0dc, 0x027f0260}, +- {0x0000b0e0, 0x0341027e}, +- {0x0000b0e4, 0x035f0340}, +- {0x0000b0e8, 0x037f0360}, +- {0x0000b0ec, 0x04400441}, +- {0x0000b0f0, 0x0460045f}, +- {0x0000b0f4, 0x0541047f}, +- {0x0000b0f8, 0x055f0540}, +- {0x0000b0fc, 0x057f0560}, +- {0x0000b100, 0x06400641}, +- {0x0000b104, 0x0660065f}, +- {0x0000b108, 0x067e067f}, +- {0x0000b10c, 0x07410742}, +- {0x0000b110, 0x075f0740}, +- {0x0000b114, 0x077f0760}, +- {0x0000b118, 0x07800781}, +- {0x0000b11c, 0x07a0079f}, +- {0x0000b120, 0x07c107bf}, +- {0x0000b124, 0x000007c0}, +- {0x0000b128, 0x00000000}, +- {0x0000b12c, 0x00000000}, +- {0x0000b130, 0x00000000}, +- {0x0000b134, 0x00000000}, +- {0x0000b138, 0x00000000}, +- {0x0000b13c, 0x00000000}, +- {0x0000b140, 0x003f0020}, +- {0x0000b144, 0x00400041}, +- {0x0000b148, 0x0140005f}, +- {0x0000b14c, 0x0160015f}, +- {0x0000b150, 0x017e017f}, +- {0x0000b154, 0x02410242}, +- {0x0000b158, 0x025f0240}, +- {0x0000b15c, 0x027f0260}, +- {0x0000b160, 0x0341027e}, +- {0x0000b164, 0x035f0340}, +- {0x0000b168, 0x037f0360}, +- {0x0000b16c, 0x04400441}, +- {0x0000b170, 0x0460045f}, +- {0x0000b174, 0x0541047f}, +- {0x0000b178, 0x055f0540}, +- {0x0000b17c, 0x057f0560}, +- {0x0000b180, 0x06400641}, +- {0x0000b184, 0x0660065f}, +- {0x0000b188, 0x067e067f}, +- {0x0000b18c, 0x07410742}, +- {0x0000b190, 0x075f0740}, +- {0x0000b194, 0x077f0760}, +- {0x0000b198, 0x07800781}, +- {0x0000b19c, 0x07a0079f}, +- {0x0000b1a0, 0x07c107bf}, +- {0x0000b1a4, 0x000007c0}, +- {0x0000b1a8, 0x00000000}, +- {0x0000b1ac, 0x00000000}, +- {0x0000b1b0, 0x00000000}, +- {0x0000b1b4, 0x00000000}, +- {0x0000b1b8, 0x00000000}, +- {0x0000b1bc, 0x00000000}, +- {0x0000b1c0, 0x00000000}, +- {0x0000b1c4, 0x00000000}, +- {0x0000b1c8, 0x00000000}, +- {0x0000b1cc, 0x00000000}, +- {0x0000b1d0, 0x00000000}, +- {0x0000b1d4, 0x00000000}, +- {0x0000b1d8, 0x00000000}, +- {0x0000b1dc, 0x00000000}, +- {0x0000b1e0, 0x00000000}, +- {0x0000b1e4, 0x00000000}, +- {0x0000b1e8, 0x00000000}, +- {0x0000b1ec, 0x00000000}, +- {0x0000b1f0, 0x00000396}, +- {0x0000b1f4, 0x00000396}, +- {0x0000b1f8, 0x00000396}, +- {0x0000b1fc, 0x00000196}, +-}; +- +-static const u32 ar9300Modes_low_ob_db_tx_gain_table_2p0[][5] = { +- /* Addr 5G_HT20 5G_HT40 2G_HT40 2G_HT20 */ +- {0x0000a410, 0x000050d9, 0x000050d9, 0x000050d9, 0x000050d9}, +- {0x0000a500, 0x00000000, 0x00000000, 0x00000000, 0x00000000}, +- {0x0000a504, 0x06000003, 0x06000003, 0x04000002, 0x04000002}, +- {0x0000a508, 0x0a000020, 0x0a000020, 0x08000004, 0x08000004}, +- {0x0000a50c, 0x10000023, 0x10000023, 0x0b000200, 0x0b000200}, +- {0x0000a510, 0x16000220, 0x16000220, 0x0f000202, 0x0f000202}, +- {0x0000a514, 0x1c000223, 0x1c000223, 0x12000400, 0x12000400}, +- {0x0000a518, 0x21020220, 0x21020220, 0x16000402, 0x16000402}, +- {0x0000a51c, 0x27020223, 0x27020223, 0x19000404, 0x19000404}, +- {0x0000a520, 0x2b022220, 0x2b022220, 0x1c000603, 0x1c000603}, +- {0x0000a524, 0x2f022222, 0x2f022222, 0x21000a02, 0x21000a02}, +- {0x0000a528, 0x34022225, 0x34022225, 0x25000a04, 0x25000a04}, +- {0x0000a52c, 0x3a02222a, 0x3a02222a, 0x28000a20, 0x28000a20}, +- {0x0000a530, 0x3e02222c, 0x3e02222c, 0x2c000e20, 0x2c000e20}, +- {0x0000a534, 0x4202242a, 0x4202242a, 0x30000e22, 0x30000e22}, +- {0x0000a538, 0x4702244a, 0x4702244a, 0x34000e24, 0x34000e24}, +- {0x0000a53c, 0x4b02244c, 0x4b02244c, 0x38001640, 0x38001640}, +- {0x0000a540, 0x4e02246c, 0x4e02246c, 0x3c001660, 0x3c001660}, +- {0x0000a544, 0x5302266c, 0x5302266c, 0x3f001861, 0x3f001861}, +- {0x0000a548, 0x5702286c, 0x5702286c, 0x43001a81, 0x43001a81}, +- {0x0000a54c, 0x5c04286b, 0x5c04286b, 0x47001a83, 0x47001a83}, +- {0x0000a550, 0x61042a6c, 0x61042a6c, 0x4a001c84, 0x4a001c84}, +- {0x0000a554, 0x66062a6c, 0x66062a6c, 0x4e001ce3, 0x4e001ce3}, +- {0x0000a558, 0x6b062e6c, 0x6b062e6c, 0x52001ce5, 0x52001ce5}, +- {0x0000a55c, 0x7006308c, 0x7006308c, 0x56001ce9, 0x56001ce9}, +- {0x0000a560, 0x730a308a, 0x730a308a, 0x5a001ceb, 0x5a001ceb}, +- {0x0000a564, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a568, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a56c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a570, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a574, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a578, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a57c, 0x770a308c, 0x770a308c, 0x5d001eec, 0x5d001eec}, +- {0x0000a580, 0x00800000, 0x00800000, 0x00800000, 0x00800000}, +- {0x0000a584, 0x06800003, 0x06800003, 0x04800002, 0x04800002}, +- {0x0000a588, 0x0a800020, 0x0a800020, 0x08800004, 0x08800004}, +- {0x0000a58c, 0x10800023, 0x10800023, 0x0b800200, 0x0b800200}, +- {0x0000a590, 0x16800220, 0x16800220, 0x0f800202, 0x0f800202}, +- {0x0000a594, 0x1c800223, 0x1c800223, 0x12800400, 0x12800400}, +- {0x0000a598, 0x21820220, 0x21820220, 0x16800402, 0x16800402}, +- {0x0000a59c, 0x27820223, 0x27820223, 0x19800404, 0x19800404}, +- {0x0000a5a0, 0x2b822220, 0x2b822220, 0x1c800603, 0x1c800603}, +- {0x0000a5a4, 0x2f822222, 0x2f822222, 0x21800a02, 0x21800a02}, +- {0x0000a5a8, 0x34822225, 0x34822225, 0x25800a04, 0x25800a04}, +- {0x0000a5ac, 0x3a82222a, 0x3a82222a, 0x28800a20, 0x28800a20}, +- {0x0000a5b0, 0x3e82222c, 0x3e82222c, 0x2c800e20, 0x2c800e20}, +- {0x0000a5b4, 0x4282242a, 0x4282242a, 0x30800e22, 0x30800e22}, +- {0x0000a5b8, 0x4782244a, 0x4782244a, 0x34800e24, 0x34800e24}, +- {0x0000a5bc, 0x4b82244c, 0x4b82244c, 0x38801640, 0x38801640}, +- {0x0000a5c0, 0x4e82246c, 0x4e82246c, 0x3c801660, 0x3c801660}, +- {0x0000a5c4, 0x5382266c, 0x5382266c, 0x3f801861, 0x3f801861}, +- {0x0000a5c8, 0x5782286c, 0x5782286c, 0x43801a81, 0x43801a81}, +- {0x0000a5cc, 0x5c84286b, 0x5c84286b, 0x47801a83, 0x47801a83}, +- {0x0000a5d0, 0x61842a6c, 0x61842a6c, 0x4a801c84, 0x4a801c84}, +- {0x0000a5d4, 0x66862a6c, 0x66862a6c, 0x4e801ce3, 0x4e801ce3}, +- {0x0000a5d8, 0x6b862e6c, 0x6b862e6c, 0x52801ce5, 0x52801ce5}, +- {0x0000a5dc, 0x7086308c, 0x7086308c, 0x56801ce9, 0x56801ce9}, +- {0x0000a5e0, 0x738a308a, 0x738a308a, 0x5a801ceb, 0x5a801ceb}, +- {0x0000a5e4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5e8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5ec, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5f0, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5f4, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5f8, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x0000a5fc, 0x778a308c, 0x778a308c, 0x5d801eec, 0x5d801eec}, +- {0x00016044, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, +- {0x00016048, 0x64000001, 0x64000001, 0x64000001, 0x64000001}, +- {0x00016068, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +- {0x00016444, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, +- {0x00016448, 0x64000001, 0x64000001, 0x64000001, 0x64000001}, +- {0x00016468, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +- {0x00016844, 0x012492d4, 0x012492d4, 0x012492d4, 0x012492d4}, +- {0x00016848, 0x64000001, 0x64000001, 0x64000001, 0x64000001}, +- {0x00016868, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c, 0x6db6db6c}, +-}; +- +-static const u32 ar9300_2p0_mac_core[][2] = { +- /* Addr allmodes */ +- {0x00000008, 0x00000000}, +- {0x00000030, 0x00020085}, +- {0x00000034, 0x00000005}, +- {0x00000040, 0x00000000}, +- {0x00000044, 0x00000000}, +- {0x00000048, 0x00000008}, +- {0x0000004c, 0x00000010}, +- {0x00000050, 0x00000000}, +- {0x00001040, 0x002ffc0f}, +- {0x00001044, 0x002ffc0f}, +- {0x00001048, 0x002ffc0f}, +- {0x0000104c, 0x002ffc0f}, +- {0x00001050, 0x002ffc0f}, +- {0x00001054, 0x002ffc0f}, +- {0x00001058, 0x002ffc0f}, +- {0x0000105c, 0x002ffc0f}, +- {0x00001060, 0x002ffc0f}, +- {0x00001064, 0x002ffc0f}, +- {0x000010f0, 0x00000100}, +- {0x00001270, 0x00000000}, +- {0x000012b0, 0x00000000}, +- {0x000012f0, 0x00000000}, +- {0x0000143c, 0x00000000}, +- {0x0000147c, 0x00000000}, +- {0x00008000, 0x00000000}, +- {0x00008004, 0x00000000}, +- {0x00008008, 0x00000000}, +- {0x0000800c, 0x00000000}, +- {0x00008018, 0x00000000}, +- {0x00008020, 0x00000000}, +- {0x00008038, 0x00000000}, +- {0x0000803c, 0x00000000}, +- {0x00008040, 0x00000000}, +- {0x00008044, 0x00000000}, +- {0x00008048, 0x00000000}, +- {0x0000804c, 0xffffffff}, +- {0x00008054, 0x00000000}, +- {0x00008058, 0x00000000}, +- {0x0000805c, 0x000fc78f}, +- {0x00008060, 0x0000000f}, +- {0x00008064, 0x00000000}, +- {0x00008070, 0x00000310}, +- {0x00008074, 0x00000020}, +- {0x00008078, 0x00000000}, +- {0x0000809c, 0x0000000f}, +- {0x000080a0, 0x00000000}, +- {0x000080a4, 0x02ff0000}, +- {0x000080a8, 0x0e070605}, +- {0x000080ac, 0x0000000d}, +- {0x000080b0, 0x00000000}, +- {0x000080b4, 0x00000000}, +- {0x000080b8, 0x00000000}, +- {0x000080bc, 0x00000000}, +- {0x000080c0, 0x2a800000}, +- {0x000080c4, 0x06900168}, +- {0x000080c8, 0x13881c20}, +- {0x000080cc, 0x01f40000}, +- {0x000080d0, 0x00252500}, +- {0x000080d4, 0x00a00000}, +- {0x000080d8, 0x00400000}, +- {0x000080dc, 0x00000000}, +- {0x000080e0, 0xffffffff}, +- {0x000080e4, 0x0000ffff}, +- {0x000080e8, 0x3f3f3f3f}, +- {0x000080ec, 0x00000000}, +- {0x000080f0, 0x00000000}, +- {0x000080f4, 0x00000000}, +- {0x000080fc, 0x00020000}, +- {0x00008100, 0x00000000}, +- {0x00008108, 0x00000052}, +- {0x0000810c, 0x00000000}, +- {0x00008110, 0x00000000}, +- {0x00008114, 0x000007ff}, +- {0x00008118, 0x000000aa}, +- {0x0000811c, 0x00003210}, +- {0x00008124, 0x00000000}, +- {0x00008128, 0x00000000}, +- {0x0000812c, 0x00000000}, +- {0x00008130, 0x00000000}, +- {0x00008134, 0x00000000}, +- {0x00008138, 0x00000000}, +- {0x0000813c, 0x0000ffff}, +- {0x00008144, 0xffffffff}, +- {0x00008168, 0x00000000}, +- {0x0000816c, 0x00000000}, +- {0x00008170, 0x18486200}, +- {0x00008174, 0x33332210}, +- {0x00008178, 0x00000000}, +- {0x0000817c, 0x00020000}, +- {0x000081c0, 0x00000000}, +- {0x000081c4, 0x33332210}, +- {0x000081c8, 0x00000000}, +- {0x000081cc, 0x00000000}, +- {0x000081d4, 0x00000000}, +- {0x000081ec, 0x00000000}, +- {0x000081f0, 0x00000000}, +- {0x000081f4, 0x00000000}, +- {0x000081f8, 0x00000000}, +- {0x000081fc, 0x00000000}, +- {0x00008240, 0x00100000}, +- {0x00008244, 0x0010f424}, +- {0x00008248, 0x00000800}, +- {0x0000824c, 0x0001e848}, +- {0x00008250, 0x00000000}, +- {0x00008254, 0x00000000}, +- {0x00008258, 0x00000000}, +- {0x0000825c, 0x40000000}, +- {0x00008260, 0x00080922}, +- {0x00008264, 0x98a00010}, +- {0x00008268, 0xffffffff}, +- {0x0000826c, 0x0000ffff}, +- {0x00008270, 0x00000000}, +- {0x00008274, 0x40000000}, +- {0x00008278, 0x003e4180}, +- {0x0000827c, 0x00000004}, +- {0x00008284, 0x0000002c}, +- {0x00008288, 0x0000002c}, +- {0x0000828c, 0x000000ff}, +- {0x00008294, 0x00000000}, +- {0x00008298, 0x00000000}, +- {0x0000829c, 0x00000000}, +- {0x00008300, 0x00000140}, +- {0x00008314, 0x00000000}, +- {0x0000831c, 0x0000010d}, +- {0x00008328, 0x00000000}, +- {0x0000832c, 0x00000007}, +- {0x00008330, 0x00000302}, +- {0x00008334, 0x00000700}, +- {0x00008338, 0x00ff0000}, +- {0x0000833c, 0x02400000}, +- {0x00008340, 0x000107ff}, +- {0x00008344, 0xaa48105b}, +- {0x00008348, 0x008f0000}, +- {0x0000835c, 0x00000000}, +- {0x00008360, 0xffffffff}, +- {0x00008364, 0xffffffff}, +- {0x00008368, 0x00000000}, +- {0x00008370, 0x00000000}, +- {0x00008374, 0x000000ff}, +- {0x00008378, 0x00000000}, +- {0x0000837c, 0x00000000}, +- {0x00008380, 0xffffffff}, +- {0x00008384, 0xffffffff}, +- {0x00008390, 0xffffffff}, +- {0x00008394, 0xffffffff}, +- {0x00008398, 0x00000000}, +- {0x0000839c, 0x00000000}, +- {0x000083a0, 0x00000000}, +- {0x000083a4, 0x0000fa14}, +- {0x000083a8, 0x000f0c00}, +- {0x000083ac, 0x33332210}, +- {0x000083b0, 0x33332210}, +- {0x000083b4, 0x33332210}, +- {0x000083b8, 0x33332210}, +- {0x000083bc, 0x00000000}, +- {0x000083c0, 0x00000000}, +- {0x000083c4, 0x00000000}, +- {0x000083c8, 0x00000000}, +- {0x000083cc, 0x00000200}, +- {0x000083d0, 0x000301ff}, +-}; +- +-static const u32 ar9300Common_wo_xlna_rx_gain_table_2p0[][2] = { +- /* Addr allmodes */ +- {0x0000a000, 0x00010000}, +- {0x0000a004, 0x00030002}, +- {0x0000a008, 0x00050004}, +- {0x0000a00c, 0x00810080}, +- {0x0000a010, 0x00830082}, +- {0x0000a014, 0x01810180}, +- {0x0000a018, 0x01830182}, +- {0x0000a01c, 0x01850184}, +- {0x0000a020, 0x01890188}, +- {0x0000a024, 0x018b018a}, +- {0x0000a028, 0x018d018c}, +- {0x0000a02c, 0x03820190}, +- {0x0000a030, 0x03840383}, +- {0x0000a034, 0x03880385}, +- {0x0000a038, 0x038a0389}, +- {0x0000a03c, 0x038c038b}, +- {0x0000a040, 0x0390038d}, +- {0x0000a044, 0x03920391}, +- {0x0000a048, 0x03940393}, +- {0x0000a04c, 0x03960395}, +- {0x0000a050, 0x00000000}, +- {0x0000a054, 0x00000000}, +- {0x0000a058, 0x00000000}, +- {0x0000a05c, 0x00000000}, +- {0x0000a060, 0x00000000}, +- {0x0000a064, 0x00000000}, +- {0x0000a068, 0x00000000}, +- {0x0000a06c, 0x00000000}, +- {0x0000a070, 0x00000000}, +- {0x0000a074, 0x00000000}, +- {0x0000a078, 0x00000000}, +- {0x0000a07c, 0x00000000}, +- {0x0000a080, 0x29292929}, +- {0x0000a084, 0x29292929}, +- {0x0000a088, 0x29292929}, +- {0x0000a08c, 0x29292929}, +- {0x0000a090, 0x22292929}, +- {0x0000a094, 0x1d1d2222}, +- {0x0000a098, 0x0c111117}, +- {0x0000a09c, 0x00030303}, +- {0x0000a0a0, 0x00000000}, +- {0x0000a0a4, 0x00000000}, +- {0x0000a0a8, 0x00000000}, +- {0x0000a0ac, 0x00000000}, +- {0x0000a0b0, 0x00000000}, +- {0x0000a0b4, 0x00000000}, +- {0x0000a0b8, 0x00000000}, +- {0x0000a0bc, 0x00000000}, +- {0x0000a0c0, 0x001f0000}, +- {0x0000a0c4, 0x01000101}, +- {0x0000a0c8, 0x011e011f}, +- {0x0000a0cc, 0x011c011d}, +- {0x0000a0d0, 0x02030204}, +- {0x0000a0d4, 0x02010202}, +- {0x0000a0d8, 0x021f0200}, +- {0x0000a0dc, 0x0302021e}, +- {0x0000a0e0, 0x03000301}, +- {0x0000a0e4, 0x031e031f}, +- {0x0000a0e8, 0x0402031d}, +- {0x0000a0ec, 0x04000401}, +- {0x0000a0f0, 0x041e041f}, +- {0x0000a0f4, 0x0502041d}, +- {0x0000a0f8, 0x05000501}, +- {0x0000a0fc, 0x051e051f}, +- {0x0000a100, 0x06010602}, +- {0x0000a104, 0x061f0600}, +- {0x0000a108, 0x061d061e}, +- {0x0000a10c, 0x07020703}, +- {0x0000a110, 0x07000701}, +- {0x0000a114, 0x00000000}, +- {0x0000a118, 0x00000000}, +- {0x0000a11c, 0x00000000}, +- {0x0000a120, 0x00000000}, +- {0x0000a124, 0x00000000}, +- {0x0000a128, 0x00000000}, +- {0x0000a12c, 0x00000000}, +- {0x0000a130, 0x00000000}, +- {0x0000a134, 0x00000000}, +- {0x0000a138, 0x00000000}, +- {0x0000a13c, 0x00000000}, +- {0x0000a140, 0x001f0000}, +- {0x0000a144, 0x01000101}, +- {0x0000a148, 0x011e011f}, +- {0x0000a14c, 0x011c011d}, +- {0x0000a150, 0x02030204}, +- {0x0000a154, 0x02010202}, +- {0x0000a158, 0x021f0200}, +- {0x0000a15c, 0x0302021e}, +- {0x0000a160, 0x03000301}, +- {0x0000a164, 0x031e031f}, +- {0x0000a168, 0x0402031d}, +- {0x0000a16c, 0x04000401}, +- {0x0000a170, 0x041e041f}, +- {0x0000a174, 0x0502041d}, +- {0x0000a178, 0x05000501}, +- {0x0000a17c, 0x051e051f}, +- {0x0000a180, 0x06010602}, +- {0x0000a184, 0x061f0600}, +- {0x0000a188, 0x061d061e}, +- {0x0000a18c, 0x07020703}, +- {0x0000a190, 0x07000701}, +- {0x0000a194, 0x00000000}, +- {0x0000a198, 0x00000000}, +- {0x0000a19c, 0x00000000}, +- {0x0000a1a0, 0x00000000}, +- {0x0000a1a4, 0x00000000}, +- {0x0000a1a8, 0x00000000}, +- {0x0000a1ac, 0x00000000}, +- {0x0000a1b0, 0x00000000}, +- {0x0000a1b4, 0x00000000}, +- {0x0000a1b8, 0x00000000}, +- {0x0000a1bc, 0x00000000}, +- {0x0000a1c0, 0x00000000}, +- {0x0000a1c4, 0x00000000}, +- {0x0000a1c8, 0x00000000}, +- {0x0000a1cc, 0x00000000}, +- {0x0000a1d0, 0x00000000}, +- {0x0000a1d4, 0x00000000}, +- {0x0000a1d8, 0x00000000}, +- {0x0000a1dc, 0x00000000}, +- {0x0000a1e0, 0x00000000}, +- {0x0000a1e4, 0x00000000}, +- {0x0000a1e8, 0x00000000}, +- {0x0000a1ec, 0x00000000}, +- {0x0000a1f0, 0x00000396}, +- {0x0000a1f4, 0x00000396}, +- {0x0000a1f8, 0x00000396}, +- {0x0000a1fc, 0x00000196}, +- {0x0000b000, 0x00010000}, +- {0x0000b004, 0x00030002}, +- {0x0000b008, 0x00050004}, +- {0x0000b00c, 0x00810080}, +- {0x0000b010, 0x00830082}, +- {0x0000b014, 0x01810180}, +- {0x0000b018, 0x01830182}, +- {0x0000b01c, 0x01850184}, +- {0x0000b020, 0x02810280}, +- {0x0000b024, 0x02830282}, +- {0x0000b028, 0x02850284}, +- {0x0000b02c, 0x02890288}, +- {0x0000b030, 0x028b028a}, +- {0x0000b034, 0x0388028c}, +- {0x0000b038, 0x038a0389}, +- {0x0000b03c, 0x038c038b}, +- {0x0000b040, 0x0390038d}, +- {0x0000b044, 0x03920391}, +- {0x0000b048, 0x03940393}, +- {0x0000b04c, 0x03960395}, +- {0x0000b050, 0x00000000}, +- {0x0000b054, 0x00000000}, +- {0x0000b058, 0x00000000}, +- {0x0000b05c, 0x00000000}, +- {0x0000b060, 0x00000000}, +- {0x0000b064, 0x00000000}, +- {0x0000b068, 0x00000000}, +- {0x0000b06c, 0x00000000}, +- {0x0000b070, 0x00000000}, +- {0x0000b074, 0x00000000}, +- {0x0000b078, 0x00000000}, +- {0x0000b07c, 0x00000000}, +- {0x0000b080, 0x32323232}, +- {0x0000b084, 0x2f2f3232}, +- {0x0000b088, 0x23282a2d}, +- {0x0000b08c, 0x1c1e2123}, +- {0x0000b090, 0x14171919}, +- {0x0000b094, 0x0e0e1214}, +- {0x0000b098, 0x03050707}, +- {0x0000b09c, 0x00030303}, +- {0x0000b0a0, 0x00000000}, +- {0x0000b0a4, 0x00000000}, +- {0x0000b0a8, 0x00000000}, +- {0x0000b0ac, 0x00000000}, +- {0x0000b0b0, 0x00000000}, +- {0x0000b0b4, 0x00000000}, +- {0x0000b0b8, 0x00000000}, +- {0x0000b0bc, 0x00000000}, +- {0x0000b0c0, 0x003f0020}, +- {0x0000b0c4, 0x00400041}, +- {0x0000b0c8, 0x0140005f}, +- {0x0000b0cc, 0x0160015f}, +- {0x0000b0d0, 0x017e017f}, +- {0x0000b0d4, 0x02410242}, +- {0x0000b0d8, 0x025f0240}, +- {0x0000b0dc, 0x027f0260}, +- {0x0000b0e0, 0x0341027e}, +- {0x0000b0e4, 0x035f0340}, +- {0x0000b0e8, 0x037f0360}, +- {0x0000b0ec, 0x04400441}, +- {0x0000b0f0, 0x0460045f}, +- {0x0000b0f4, 0x0541047f}, +- {0x0000b0f8, 0x055f0540}, +- {0x0000b0fc, 0x057f0560}, +- {0x0000b100, 0x06400641}, +- {0x0000b104, 0x0660065f}, +- {0x0000b108, 0x067e067f}, +- {0x0000b10c, 0x07410742}, +- {0x0000b110, 0x075f0740}, +- {0x0000b114, 0x077f0760}, +- {0x0000b118, 0x07800781}, +- {0x0000b11c, 0x07a0079f}, +- {0x0000b120, 0x07c107bf}, +- {0x0000b124, 0x000007c0}, +- {0x0000b128, 0x00000000}, +- {0x0000b12c, 0x00000000}, +- {0x0000b130, 0x00000000}, +- {0x0000b134, 0x00000000}, +- {0x0000b138, 0x00000000}, +- {0x0000b13c, 0x00000000}, +- {0x0000b140, 0x003f0020}, +- {0x0000b144, 0x00400041}, +- {0x0000b148, 0x0140005f}, +- {0x0000b14c, 0x0160015f}, +- {0x0000b150, 0x017e017f}, +- {0x0000b154, 0x02410242}, +- {0x0000b158, 0x025f0240}, +- {0x0000b15c, 0x027f0260}, +- {0x0000b160, 0x0341027e}, +- {0x0000b164, 0x035f0340}, +- {0x0000b168, 0x037f0360}, +- {0x0000b16c, 0x04400441}, +- {0x0000b170, 0x0460045f}, +- {0x0000b174, 0x0541047f}, +- {0x0000b178, 0x055f0540}, +- {0x0000b17c, 0x057f0560}, +- {0x0000b180, 0x06400641}, +- {0x0000b184, 0x0660065f}, +- {0x0000b188, 0x067e067f}, +- {0x0000b18c, 0x07410742}, +- {0x0000b190, 0x075f0740}, +- {0x0000b194, 0x077f0760}, +- {0x0000b198, 0x07800781}, +- {0x0000b19c, 0x07a0079f}, +- {0x0000b1a0, 0x07c107bf}, +- {0x0000b1a4, 0x000007c0}, +- {0x0000b1a8, 0x00000000}, +- {0x0000b1ac, 0x00000000}, +- {0x0000b1b0, 0x00000000}, +- {0x0000b1b4, 0x00000000}, +- {0x0000b1b8, 0x00000000}, +- {0x0000b1bc, 0x00000000}, +- {0x0000b1c0, 0x00000000}, +- {0x0000b1c4, 0x00000000}, +- {0x0000b1c8, 0x00000000}, +- {0x0000b1cc, 0x00000000}, +- {0x0000b1d0, 0x00000000}, +- {0x0000b1d4, 0x00000000}, +- {0x0000b1d8, 0x00000000}, +- {0x0000b1dc, 0x00000000}, +- {0x0000b1e0, 0x00000000}, +- {0x0000b1e4, 0x00000000}, +- {0x0000b1e8, 0x00000000}, +- {0x0000b1ec, 0x00000000}, +- {0x0000b1f0, 0x00000396}, +- {0x0000b1f4, 0x00000396}, +- {0x0000b1f8, 0x00000396}, +- {0x0000b1fc, 0x00000196}, +-}; +- +-static const u32 ar9300_2p0_soc_preamble[][2] = { +- /* Addr allmodes */ +- {0x000040a4, 0x00a0c1c9}, +- {0x00007008, 0x00000000}, +- {0x00007020, 0x00000000}, +- {0x00007034, 0x00000002}, +- {0x00007038, 0x000004c2}, +-}; +- +-static const u32 ar9300PciePhy_pll_on_clkreq_disable_L1_2p0[][2] = { +- /* Addr allmodes */ +- {0x00004040, 0x08212e5e}, +- {0x00004040, 0x0008003b}, +- {0x00004044, 0x00000000}, +-}; +- +-static const u32 ar9300PciePhy_clkreq_enable_L1_2p0[][2] = { +- /* Addr allmodes */ +- {0x00004040, 0x08253e5e}, +- {0x00004040, 0x0008003b}, +- {0x00004044, 0x00000000}, +-}; +- +-static const u32 ar9300PciePhy_clkreq_disable_L1_2p0[][2] = { +- /* Addr allmodes */ +- {0x00004040, 0x08213e5e}, +- {0x00004040, 0x0008003b}, +- {0x00004044, 0x00000000}, +-}; +- +-#endif /* INITVALS_9003_H */ +-- +1.6.3.3 + diff --git a/linux-next-pending/0003-ath9k_hw-add-support-for-the-AR9003-baseband-watchdo.patch b/linux-next-pending/0003-ath9k_hw-add-support-for-the-AR9003-baseband-watchdo.patch new file mode 100644 index 000000000000..92648ec04baa --- /dev/null +++ b/linux-next-pending/0003-ath9k_hw-add-support-for-the-AR9003-baseband-watchdo.patch @@ -0,0 +1,343 @@ +From 21a7073ca9a5360e05445853e4ff4994a5bdb2e5 Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez +Date: Wed, 12 May 2010 11:07:20 -0700 +Subject: [PATCH 03/19] ath9k_hw: add support for the AR9003 baseband watchdog + +The baseband watchdog will monitor blocks of the baseband +through timers and will issue an interrupt when things are +detected to be stalled. It is only available on the AR9003 +family. + +Cc: Sam Ng +Cc: Paul Shaw +Cc: Don Breslin +Cc: Cliff Holden +--- + drivers/net/wireless/ath/ath9k/ar9003_mac.c | 5 + + drivers/net/wireless/ath/ath9k/ar9003_mac.h | 1 + + drivers/net/wireless/ath/ath9k/ar9003_phy.c | 119 +++++++++++++++++++++++++++ + drivers/net/wireless/ath/ath9k/ar9003_phy.h | 66 ++++++++-------- + drivers/net/wireless/ath/ath9k/hw.c | 2 + + drivers/net/wireless/ath/ath9k/hw.h | 9 ++- + drivers/net/wireless/ath/ath9k/reg.h | 1 + + 7 files changed, 169 insertions(+), 34 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.c b/drivers/net/wireless/ath/ath9k/ar9003_mac.c +index 37ba374..4073107 100644 +--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.c +@@ -90,6 +90,8 @@ static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked) + MAP_ISR_S2_CST); + mask2 |= ((isr2 & AR_ISR_S2_TSFOOR) >> + MAP_ISR_S2_TSFOOR); ++ mask2 |= ((isr2 & AR_ISR_S2_BB_WATCHDOG) >> ++ MAP_ISR_S2_BB_WATCHDOG); + + if (!(pCap->hw_caps & ATH9K_HW_CAP_RAC_SUPPORTED)) { + REG_WRITE(ah, AR_ISR_S2, isr2); +@@ -167,6 +169,9 @@ static bool ar9003_hw_get_isr(struct ath_hw *ah, enum ath9k_int *masked) + + (void) REG_READ(ah, AR_ISR); + } ++ ++ if (*masked & ATH9K_INT_BB_WATCHDOG) ++ ar9003_hw_bb_watchdog_read(ah); + } + + if (sync_cause) { +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_mac.h b/drivers/net/wireless/ath/ath9k/ar9003_mac.h +index f17558b..5a7a286 100644 +--- a/drivers/net/wireless/ath/ath9k/ar9003_mac.h ++++ b/drivers/net/wireless/ath/ath9k/ar9003_mac.h +@@ -47,6 +47,7 @@ + #define MAP_ISR_S2_DTIMSYNC 7 + #define MAP_ISR_S2_DTIM 7 + #define MAP_ISR_S2_TSFOOR 4 ++#define MAP_ISR_S2_BB_WATCHDOG 6 + + #define AR9003TXC_CONST(_ds) ((const struct ar9003_txc *) _ds) + +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.c b/drivers/net/wireless/ath/ath9k/ar9003_phy.c +index 80431a2..c714579 100644 +--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.c +@@ -1132,3 +1132,122 @@ void ar9003_hw_attach_phy_ops(struct ath_hw *ah) + priv_ops->do_getnf = ar9003_hw_do_getnf; + priv_ops->loadnf = ar9003_hw_loadnf; + } ++ ++void ar9003_hw_bb_watchdog_config(struct ath_hw *ah) ++{ ++ struct ath_common *common = ath9k_hw_common(ah); ++ u32 idle_tmo_ms = ah->bb_watchdog_timeout_ms; ++ u32 val, idle_count; ++ ++ if (!idle_tmo_ms) { ++ /* disable IRQ, disable chip-reset for BB panic */ ++ REG_WRITE(ah, AR_PHY_WATCHDOG_CTL_2, ++ REG_READ(ah, AR_PHY_WATCHDOG_CTL_2) & ++ ~(AR_PHY_WATCHDOG_RST_ENABLE | ++ AR_PHY_WATCHDOG_IRQ_ENABLE)); ++ ++ /* disable watchdog in non-IDLE mode, disable in IDLE mode */ ++ REG_WRITE(ah, AR_PHY_WATCHDOG_CTL_1, ++ REG_READ(ah, AR_PHY_WATCHDOG_CTL_1) & ++ ~(AR_PHY_WATCHDOG_NON_IDLE_ENABLE | ++ AR_PHY_WATCHDOG_IDLE_ENABLE)); ++ ++ ath_print(common, ATH_DBG_RESET, "Disabled BB Watchdog\n"); ++ return; ++ } ++ ++ /* enable IRQ, disable chip-reset for BB watchdog */ ++ val = REG_READ(ah, AR_PHY_WATCHDOG_CTL_2) & AR_PHY_WATCHDOG_CNTL2_MASK; ++ REG_WRITE(ah, AR_PHY_WATCHDOG_CTL_2, ++ (val | AR_PHY_WATCHDOG_IRQ_ENABLE) & ++ ~AR_PHY_WATCHDOG_RST_ENABLE); ++ ++ /* bound limit to 10 secs */ ++ if (idle_tmo_ms > 10000) ++ idle_tmo_ms = 10000; ++ ++ /* ++ * The time unit for watchdog event is 2^15 44/88MHz cycles. ++ * ++ * For HT20 we have a time unit of 2^15/44 MHz = .74 ms per tick ++ * For HT40 we have a time unit of 2^15/88 MHz = .37 ms per tick ++ * ++ * Given we use fast clock now in 5 GHz, these time units should ++ * be common for both 2 GHz and 5 GHz. ++ */ ++ idle_count = (100 * idle_tmo_ms) / 74; ++ if (ah->curchan && IS_CHAN_HT40(ah->curchan)) ++ idle_count = (100 * idle_tmo_ms) / 37; ++ ++ /* ++ * enable watchdog in non-IDLE mode, disable in IDLE mode, ++ * set idle time-out. ++ */ ++ REG_WRITE(ah, AR_PHY_WATCHDOG_CTL_1, ++ AR_PHY_WATCHDOG_NON_IDLE_ENABLE | ++ AR_PHY_WATCHDOG_IDLE_MASK | ++ (AR_PHY_WATCHDOG_NON_IDLE_MASK & (idle_count << 2))); ++ ++ ath_print(common, ATH_DBG_RESET, ++ "Enabled BB Watchdog timeout (%u ms)\n", ++ idle_tmo_ms); ++} ++ ++void ar9003_hw_bb_watchdog_read(struct ath_hw *ah) ++{ ++ /* ++ * we want to avoid printing in ISR context so we save the ++ * watchdog status to be printed later in bottom half context. ++ */ ++ ah->bb_watchdog_last_status = REG_READ(ah, AR_PHY_WATCHDOG_STATUS); ++ ++ /* ++ * the watchdog timer should reset on status read but to be sure ++ * sure we write 0 to the watchdog status bit. ++ */ ++ REG_WRITE(ah, AR_PHY_WATCHDOG_STATUS, ++ ah->bb_watchdog_last_status & ~AR_PHY_WATCHDOG_STATUS_CLR); ++} ++ ++void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah) ++{ ++ struct ath_common *common = ath9k_hw_common(ah); ++ u32 rxc_pcnt = 0, rxf_pcnt = 0, txf_pcnt = 0, status; ++ ++ if (likely(!(common->debug_mask & ATH_DBG_RESET))) ++ return; ++ ++ status = ah->bb_watchdog_last_status; ++ ath_print(common, ATH_DBG_RESET, ++ "\n==== BB update: BB status=0x%08x ====\n", status); ++ ath_print(common, ATH_DBG_RESET, ++ "** BB state: wd=%u det=%u rdar=%u rOFDM=%d " ++ "rCCK=%u tOFDM=%u tCCK=%u agc=%u src=%u **\n", ++ MS(status, AR_PHY_WATCHDOG_INFO), ++ MS(status, AR_PHY_WATCHDOG_DET_HANG), ++ MS(status, AR_PHY_WATCHDOG_RADAR_SM), ++ MS(status, AR_PHY_WATCHDOG_RX_OFDM_SM), ++ MS(status, AR_PHY_WATCHDOG_RX_CCK_SM), ++ MS(status, AR_PHY_WATCHDOG_TX_OFDM_SM), ++ MS(status, AR_PHY_WATCHDOG_TX_CCK_SM), ++ MS(status, AR_PHY_WATCHDOG_AGC_SM), ++ MS(status,AR_PHY_WATCHDOG_SRCH_SM)); ++ ++ ath_print(common, ATH_DBG_RESET, ++ "** BB WD cntl: cntl1=0x%08x cntl2=0x%08x **\n", ++ REG_READ(ah, AR_PHY_WATCHDOG_CTL_1), ++ REG_READ(ah, AR_PHY_WATCHDOG_CTL_2)); ++ ath_print(common, ATH_DBG_RESET, ++ "** BB mode: BB_gen_controls=0x%08x **\n", ++ REG_READ(ah, AR_PHY_GEN_CTRL)); ++ ++ if (ath9k_hw_GetMibCycleCountsPct(ah, &rxc_pcnt, &rxf_pcnt, &txf_pcnt)) ++ ath_print(common, ATH_DBG_RESET, ++ "** BB busy times: rx_clear=%d%%, " ++ "rx_frame=%d%%, tx_frame=%d%% **\n", ++ rxc_pcnt, rxf_pcnt, txf_pcnt); ++ ++ ath_print(common, ATH_DBG_RESET, ++ "==== BB update: done ====\n\n"); ++} ++EXPORT_SYMBOL(ar9003_hw_bb_watchdog_dbg_info); +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_phy.h b/drivers/net/wireless/ath/ath9k/ar9003_phy.h +index f08cc8b..676d3f1 100644 +--- a/drivers/net/wireless/ath/ath9k/ar9003_phy.h ++++ b/drivers/net/wireless/ath/ath9k/ar9003_phy.h +@@ -483,10 +483,10 @@ + #define AR_PHY_TX_IQCAL_STATUS_B0 (AR_SM_BASE + 0x48c) + #define AR_PHY_TX_IQCAL_CORR_COEFF_01_B0 (AR_SM_BASE + 0x450) + +-#define AR_PHY_PANIC_WD_STATUS (AR_SM_BASE + 0x5c0) +-#define AR_PHY_PANIC_WD_CTL_1 (AR_SM_BASE + 0x5c4) +-#define AR_PHY_PANIC_WD_CTL_2 (AR_SM_BASE + 0x5c8) +-#define AR_PHY_BT_CTL (AR_SM_BASE + 0x5cc) ++#define AR_PHY_WATCHDOG_STATUS (AR_SM_BASE + 0x5c0) ++#define AR_PHY_WATCHDOG_CTL_1 (AR_SM_BASE + 0x5c4) ++#define AR_PHY_WATCHDOG_CTL_2 (AR_SM_BASE + 0x5c8) ++#define AR_PHY_WATCHDOG_CTL (AR_SM_BASE + 0x5cc) + #define AR_PHY_ONLY_WARMRESET (AR_SM_BASE + 0x5d0) + #define AR_PHY_ONLY_CTL (AR_SM_BASE + 0x5d4) + #define AR_PHY_ECO_CTRL (AR_SM_BASE + 0x5dc) +@@ -812,35 +812,35 @@ + #define AR_PHY_CAL_MEAS_2_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_2_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i))) + #define AR_PHY_CAL_MEAS_3_9300_10(_i) (AR_PHY_IQ_ADC_MEAS_3_B0_9300_10 + (AR_PHY_CHAIN_OFFSET * (_i))) + +-#define AR_PHY_BB_PANIC_NON_IDLE_ENABLE 0x00000001 +-#define AR_PHY_BB_PANIC_IDLE_ENABLE 0x00000002 +-#define AR_PHY_BB_PANIC_IDLE_MASK 0xFFFF0000 +-#define AR_PHY_BB_PANIC_NON_IDLE_MASK 0x0000FFFC +- +-#define AR_PHY_BB_PANIC_RST_ENABLE 0x00000002 +-#define AR_PHY_BB_PANIC_IRQ_ENABLE 0x00000004 +-#define AR_PHY_BB_PANIC_CNTL2_MASK 0xFFFFFFF9 +- +-#define AR_PHY_BB_WD_STATUS 0x00000007 +-#define AR_PHY_BB_WD_STATUS_S 0 +-#define AR_PHY_BB_WD_DET_HANG 0x00000008 +-#define AR_PHY_BB_WD_DET_HANG_S 3 +-#define AR_PHY_BB_WD_RADAR_SM 0x000000F0 +-#define AR_PHY_BB_WD_RADAR_SM_S 4 +-#define AR_PHY_BB_WD_RX_OFDM_SM 0x00000F00 +-#define AR_PHY_BB_WD_RX_OFDM_SM_S 8 +-#define AR_PHY_BB_WD_RX_CCK_SM 0x0000F000 +-#define AR_PHY_BB_WD_RX_CCK_SM_S 12 +-#define AR_PHY_BB_WD_TX_OFDM_SM 0x000F0000 +-#define AR_PHY_BB_WD_TX_OFDM_SM_S 16 +-#define AR_PHY_BB_WD_TX_CCK_SM 0x00F00000 +-#define AR_PHY_BB_WD_TX_CCK_SM_S 20 +-#define AR_PHY_BB_WD_AGC_SM 0x0F000000 +-#define AR_PHY_BB_WD_AGC_SM_S 24 +-#define AR_PHY_BB_WD_SRCH_SM 0xF0000000 +-#define AR_PHY_BB_WD_SRCH_SM_S 28 +- +-#define AR_PHY_BB_WD_STATUS_CLR 0x00000008 ++#define AR_PHY_WATCHDOG_NON_IDLE_ENABLE 0x00000001 ++#define AR_PHY_WATCHDOG_IDLE_ENABLE 0x00000002 ++#define AR_PHY_WATCHDOG_IDLE_MASK 0xFFFF0000 ++#define AR_PHY_WATCHDOG_NON_IDLE_MASK 0x0000FFFC ++ ++#define AR_PHY_WATCHDOG_RST_ENABLE 0x00000002 ++#define AR_PHY_WATCHDOG_IRQ_ENABLE 0x00000004 ++#define AR_PHY_WATCHDOG_CNTL2_MASK 0xFFFFFFF9 ++ ++#define AR_PHY_WATCHDOG_INFO 0x00000007 ++#define AR_PHY_WATCHDOG_INFO_S 0 ++#define AR_PHY_WATCHDOG_DET_HANG 0x00000008 ++#define AR_PHY_WATCHDOG_DET_HANG_S 3 ++#define AR_PHY_WATCHDOG_RADAR_SM 0x000000F0 ++#define AR_PHY_WATCHDOG_RADAR_SM_S 4 ++#define AR_PHY_WATCHDOG_RX_OFDM_SM 0x00000F00 ++#define AR_PHY_WATCHDOG_RX_OFDM_SM_S 8 ++#define AR_PHY_WATCHDOG_RX_CCK_SM 0x0000F000 ++#define AR_PHY_WATCHDOG_RX_CCK_SM_S 12 ++#define AR_PHY_WATCHDOG_TX_OFDM_SM 0x000F0000 ++#define AR_PHY_WATCHDOG_TX_OFDM_SM_S 16 ++#define AR_PHY_WATCHDOG_TX_CCK_SM 0x00F00000 ++#define AR_PHY_WATCHDOG_TX_CCK_SM_S 20 ++#define AR_PHY_WATCHDOG_AGC_SM 0x0F000000 ++#define AR_PHY_WATCHDOG_AGC_SM_S 24 ++#define AR_PHY_WATCHDOG_SRCH_SM 0xF0000000 ++#define AR_PHY_WATCHDOG_SRCH_SM_S 28 ++ ++#define AR_PHY_WATCHDOG_STATUS_CLR 0x00000008 + + void ar9003_hw_set_chain_masks(struct ath_hw *ah, u8 rx, u8 tx); + +diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c +index c33f17d..6bfac1c 100644 +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -627,6 +627,7 @@ static int __ath9k_hw_init(struct ath_hw *ah) + ar9003_hw_set_nf_limits(ah); + + ath9k_init_nfcal_hist_buffer(ah); ++ ah->bb_watchdog_timeout_ms = 25; + + common->state = ATH_HW_INITIALIZED; + +@@ -1441,6 +1442,7 @@ int ath9k_hw_reset(struct ath_hw *ah, struct ath9k_channel *chan, + if (AR_SREV_9300_20_OR_LATER(ah)) { + ath9k_hw_loadnf(ah, curchan); + ath9k_hw_start_nfcal(ah); ++ ar9003_hw_bb_watchdog_config(ah); + } + + return 0; +diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h +index 77245df..bfecde0 100644 +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -279,6 +279,7 @@ enum ath9k_int { + ATH9K_INT_TX = 0x00000040, + ATH9K_INT_TXDESC = 0x00000080, + ATH9K_INT_TIM_TIMER = 0x00000100, ++ ATH9K_INT_BB_WATCHDOG = 0x00000400, + ATH9K_INT_TXURN = 0x00000800, + ATH9K_INT_MIB = 0x00001000, + ATH9K_INT_RXPHY = 0x00004000, +@@ -789,6 +790,9 @@ struct ath_hw { + u32 ts_paddr_end; + u16 ts_tail; + u8 ts_size; ++ ++ u32 bb_watchdog_last_status; ++ u32 bb_watchdog_timeout_ms; /* in ms, 0 to disable */ + }; + + static inline struct ath_common *ath9k_hw_common(struct ath_hw *ah) +@@ -910,10 +914,13 @@ void ar9002_hw_enable_async_fifo(struct ath_hw *ah); + void ar9002_hw_enable_wep_aggregation(struct ath_hw *ah); + + /* +- * Code specifric to AR9003, we stuff these here to avoid callbacks ++ * Code specific to AR9003, we stuff these here to avoid callbacks + * for older families + */ + void ar9003_hw_set_nf_limits(struct ath_hw *ah); ++void ar9003_hw_bb_watchdog_config(struct ath_hw *ah); ++void ar9003_hw_bb_watchdog_read(struct ath_hw *ah); ++void ar9003_hw_bb_watchdog_dbg_info(struct ath_hw *ah); + + /* Hardware family op attach helpers */ + void ar5008_hw_attach_phy_ops(struct ath_hw *ah); +diff --git a/drivers/net/wireless/ath/ath9k/reg.h b/drivers/net/wireless/ath/ath9k/reg.h +index d4371a4..c9a009f 100644 +--- a/drivers/net/wireless/ath/ath9k/reg.h ++++ b/drivers/net/wireless/ath/ath9k/reg.h +@@ -222,6 +222,7 @@ + + #define AR_ISR_S2 0x008c + #define AR_ISR_S2_QCU_TXURN 0x000003FF ++#define AR_ISR_S2_BB_WATCHDOG 0x00010000 + #define AR_ISR_S2_CST 0x00400000 + #define AR_ISR_S2_GTT 0x00800000 + #define AR_ISR_S2_TIM 0x01000000 +-- +1.6.3.3 + diff --git a/linux-next-pending/0004-ath9k-enable-the-baseband-watchdog-events-for-AR9003.patch b/linux-next-pending/0004-ath9k-enable-the-baseband-watchdog-events-for-AR9003.patch new file mode 100644 index 000000000000..b710521abe1c --- /dev/null +++ b/linux-next-pending/0004-ath9k-enable-the-baseband-watchdog-events-for-AR9003.patch @@ -0,0 +1,98 @@ +From cdfd0964c1c769a3de7e0c24c2469c7865e423f3 Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez +Date: Wed, 12 May 2010 11:12:02 -0700 +Subject: [PATCH 04/19] ath9k: enable the baseband watchdog events for AR9003 + +This enables the baseband watchdog events for the AR9003 +family on ath9k. Upon an a baseband watchdog interrupt we reset +the hardware, this should address corner case conditions where +normal operation can stall. Enable ATH_DBG_RESET to be able +to review details of the bb watchdog interrupt once it happens. +If you're curious how often this happens just grep the debugfs +interrupt file. + +Cc: Sam Ng +Cc: Paul Shaw +Cc: Don Breslin +Cc: Cliff Holden +Signed-off-by: Luis R. Rodriguez +--- + drivers/net/wireless/ath/ath9k/debug.c | 5 +++++ + drivers/net/wireless/ath/ath9k/debug.h | 2 ++ + drivers/net/wireless/ath/ath9k/main.c | 10 +++++++++- + 3 files changed, 16 insertions(+), 1 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/debug.c b/drivers/net/wireless/ath/ath9k/debug.c +index 29898f8..ee83877 100644 +--- a/drivers/net/wireless/ath/ath9k/debug.c ++++ b/drivers/net/wireless/ath/ath9k/debug.c +@@ -269,6 +269,8 @@ void ath_debug_stat_interrupt(struct ath_softc *sc, enum ath9k_int status) + sc->debug.stats.istats.rxlp++; + if (status & ATH9K_INT_RXHP) + sc->debug.stats.istats.rxhp++; ++ if (status & ATH9K_INT_BB_WATCHDOG) ++ sc->debug.stats.istats.bb_watchdog++; + } else { + if (status & ATH9K_INT_RX) + sc->debug.stats.istats.rxok++; +@@ -319,6 +321,9 @@ static ssize_t read_file_interrupt(struct file *file, char __user *user_buf, + "%8s: %10u\n", "RXLP", sc->debug.stats.istats.rxlp); + len += snprintf(buf + len, sizeof(buf) - len, + "%8s: %10u\n", "RXHP", sc->debug.stats.istats.rxhp); ++ len += snprintf(buf + len, sizeof(buf) - len, ++ "%8s: %10u\n", "WATCHDOG", ++ sc->debug.stats.istats.bb_watchdog); + } else { + len += snprintf(buf + len, sizeof(buf) - len, + "%8s: %10u\n", "RX", sc->debug.stats.istats.rxok); +diff --git a/drivers/net/wireless/ath/ath9k/debug.h b/drivers/net/wireless/ath/ath9k/debug.h +index 5147b87..5d21704 100644 +--- a/drivers/net/wireless/ath/ath9k/debug.h ++++ b/drivers/net/wireless/ath/ath9k/debug.h +@@ -53,6 +53,7 @@ struct ath_buf; + * @cabend: RX End of CAB traffic + * @dtimsync: DTIM sync lossage + * @dtim: RX Beacon with DTIM ++ * @bb_watchdog: Baseband watchdog + */ + struct ath_interrupt_stats { + u32 total; +@@ -76,6 +77,7 @@ struct ath_interrupt_stats { + u32 cabend; + u32 dtimsync; + u32 dtim; ++ u32 bb_watchdog; + }; + + struct ath_rc_stats { +diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c +index 893b552..2b0120b 100644 +--- a/drivers/net/wireless/ath/ath9k/main.c ++++ b/drivers/net/wireless/ath/ath9k/main.c +@@ -520,6 +520,12 @@ irqreturn_t ath_isr(int irq, void *dev) + !(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA))) + goto chip_reset; + ++ if ((ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) && ++ (status & ATH9K_INT_BB_WATCHDOG)) { ++ ar9003_hw_bb_watchdog_dbg_info(ah); ++ goto chip_reset; ++ } ++ + if (status & ATH9K_INT_SWBA) + tasklet_schedule(&sc->bcon_tasklet); + +@@ -1217,7 +1223,9 @@ static int ath9k_start(struct ieee80211_hw *hw) + ATH9K_INT_GLOBAL; + + if (ah->caps.hw_caps & ATH9K_HW_CAP_EDMA) +- ah->imask |= ATH9K_INT_RXHP | ATH9K_INT_RXLP; ++ ah->imask |= ATH9K_INT_RXHP | ++ ATH9K_INT_RXLP | ++ ATH9K_INT_BB_WATCHDOG; + else + ah->imask |= ATH9K_INT_RX; + +-- +1.6.3.3 + diff --git a/linux-next-pending/0005-ath9k-remove-AR9003-from-PCI-IDs-for-now.patch b/linux-next-pending/0005-ath9k-remove-AR9003-from-PCI-IDs-for-now.patch new file mode 100644 index 000000000000..ab2293abf149 --- /dev/null +++ b/linux-next-pending/0005-ath9k-remove-AR9003-from-PCI-IDs-for-now.patch @@ -0,0 +1,33 @@ +From 7400385ea36226c5e27b00112206ebb48803c9e0 Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez +Date: Thu, 13 May 2010 14:55:24 -0700 +Subject: [PATCH 05/19] ath9k: remove AR9003 from PCI IDs for now + +We tried to squeeze as much AR9003 support into this kernel +release cycle but there are a few features which are still +being tested and developed. Some of these features are critical +to the stable operation of AR9003 so for now disable AR9003 support +all together. This will get re-enabled once all necessary features +are in place but very likely will not happen for 2.6.35. + +Reviewed-by: Don Breslin +Signed-off-by: Luis R. Rodriguez +--- + drivers/net/wireless/ath/ath9k/pci.c | 1 - + 1 files changed, 0 insertions(+), 1 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/pci.c b/drivers/net/wireless/ath/ath9k/pci.c +index 257b10b..1ec836c 100644 +--- a/drivers/net/wireless/ath/ath9k/pci.c ++++ b/drivers/net/wireless/ath/ath9k/pci.c +@@ -28,7 +28,6 @@ static DEFINE_PCI_DEVICE_TABLE(ath_pci_id_table) = { + { PCI_VDEVICE(ATHEROS, 0x002C) }, /* PCI-E 802.11n bonded out */ + { PCI_VDEVICE(ATHEROS, 0x002D) }, /* PCI */ + { PCI_VDEVICE(ATHEROS, 0x002E) }, /* PCI-E */ +- { PCI_VDEVICE(ATHEROS, 0x0030) }, /* PCI-E AR9300 */ + { 0 } + }; + +-- +1.6.3.3 + diff --git a/linux-next-pending/0006-ath9k-Enable-Short-GI-in-20-Mhz-for-ar9287-and-later.patch b/linux-next-pending/0006-ath9k-Enable-Short-GI-in-20-Mhz-for-ar9287-and-later.patch new file mode 100644 index 000000000000..be25ea28eb3e --- /dev/null +++ b/linux-next-pending/0006-ath9k-Enable-Short-GI-in-20-Mhz-for-ar9287-and-later.patch @@ -0,0 +1,373 @@ +From 2449106deb1699a46ca4ed8f0b7f03ebca0a3cdb Mon Sep 17 00:00:00 2001 +From: Vasanthakumar Thiagarajan +Date: Thu, 13 May 2010 17:57:51 -0700 +Subject: [PATCH 06/19] ath9k: Enable Short GI in 20 Mhz for ar9287 and later chips + +This patch enables short GI rx at all rates and tx at mcs15 +for 20 Mhz channel width also. + +Signed-off-by: Vasanthakumar Thiagarajan +--- + drivers/net/wireless/ath/ath9k/hw.c | 3 + + drivers/net/wireless/ath/ath9k/hw.h | 1 + + drivers/net/wireless/ath/ath9k/init.c | 3 + + drivers/net/wireless/ath/ath9k/rc.c | 173 ++++++++++++++++++--------------- + 4 files changed, 101 insertions(+), 79 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c +index 6bfac1c..2fd6254 100644 +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -2234,6 +2234,9 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah) + if (AR_SREV_9300_20_OR_LATER(ah)) + pCap->hw_caps |= ATH9K_HW_CAP_RAC_SUPPORTED; + ++ if (AR_SREV_9287_10_OR_LATER(ah)) ++ pCap->hw_caps |= ATH9K_HW_CAP_SGI_20; ++ + return 0; + } + +diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h +index bfecde0..5cf0714 100644 +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -199,6 +199,7 @@ enum ath9k_hw_caps { + ATH9K_HW_CAP_RAC_SUPPORTED = BIT(18), + ATH9K_HW_CAP_LDPC = BIT(19), + ATH9K_HW_CAP_FASTCLOCK = BIT(20), ++ ATH9K_HW_CAP_SGI_20 = BIT(21), + }; + + enum ath9k_capability_type { +diff --git a/drivers/net/wireless/ath/ath9k/init.c b/drivers/net/wireless/ath/ath9k/init.c +index 8c79548..90b5c90 100644 +--- a/drivers/net/wireless/ath/ath9k/init.c ++++ b/drivers/net/wireless/ath/ath9k/init.c +@@ -208,6 +208,9 @@ static void setup_ht_cap(struct ath_softc *sc, + if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_LDPC) + ht_info->cap |= IEEE80211_HT_CAP_LDPC_CODING; + ++ if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20) ++ ht_info->cap |= IEEE80211_HT_CAP_SGI_20; ++ + ht_info->ampdu_factor = IEEE80211_HT_MAX_AMPDU_64K; + ht_info->ampdu_density = IEEE80211_HT_MPDU_DENSITY_8; + +diff --git a/drivers/net/wireless/ath/ath9k/rc.c b/drivers/net/wireless/ath/ath9k/rc.c +index 8519452..f5180d3 100644 +--- a/drivers/net/wireless/ath/ath9k/rc.c ++++ b/drivers/net/wireless/ath/ath9k/rc.c +@@ -40,73 +40,75 @@ static const struct ath_rate_table ar5416_11na_ratetable = { + { VALID, VALID, WLAN_RC_PHY_OFDM, 54000, /* 54 Mb */ + 29300, 7, 108, 4, 7, 7, 7, 7 }, + { VALID_2040, VALID_2040, WLAN_RC_PHY_HT_20_SS, 6500, /* 6.5 Mb */ +- 6400, 0, 0, 0, 8, 24, 8, 24 }, ++ 6400, 0, 0, 0, 8, 25, 8, 25 }, + { VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 13000, /* 13 Mb */ +- 12700, 1, 1, 2, 9, 25, 9, 25 }, ++ 12700, 1, 1, 2, 9, 26, 9, 26 }, + { VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 19500, /* 19.5 Mb */ +- 18800, 2, 2, 2, 10, 26, 10, 26 }, ++ 18800, 2, 2, 2, 10, 27, 10, 27 }, + { VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 26000, /* 26 Mb */ +- 25000, 3, 3, 4, 11, 27, 11, 27 }, ++ 25000, 3, 3, 4, 11, 28, 11, 28 }, + { VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 39000, /* 39 Mb */ +- 36700, 4, 4, 4, 12, 28, 12, 28 }, ++ 36700, 4, 4, 4, 12, 29, 12, 29 }, + { INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 52000, /* 52 Mb */ +- 48100, 5, 5, 4, 13, 29, 13, 29 }, ++ 48100, 5, 5, 4, 13, 30, 13, 30 }, + { INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 58500, /* 58.5 Mb */ +- 53500, 6, 6, 4, 14, 30, 14, 30 }, ++ 53500, 6, 6, 4, 14, 31, 14, 31 }, + { INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 65000, /* 65 Mb */ +- 59000, 7, 7, 4, 15, 31, 15, 32 }, ++ 59000, 7, 7, 4, 15, 32, 15, 33 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 13000, /* 13 Mb */ +- 12700, 8, 8, 3, 16, 33, 16, 33 }, ++ 12700, 8, 8, 3, 16, 34, 16, 34 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 26000, /* 26 Mb */ +- 24800, 9, 9, 2, 17, 34, 17, 34 }, ++ 24800, 9, 9, 2, 17, 35, 17, 35 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 39000, /* 39 Mb */ +- 36600, 10, 10, 2, 18, 35, 18, 35 }, ++ 36600, 10, 10, 2, 18, 36, 18, 36 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 52000, /* 52 Mb */ +- 48100, 11, 11, 4, 19, 36, 19, 36 }, ++ 48100, 11, 11, 4, 19, 37, 19, 37 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 78000, /* 78 Mb */ +- 69500, 12, 12, 4, 20, 37, 20, 37 }, ++ 69500, 12, 12, 4, 20, 38, 20, 38 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 104000, /* 104 Mb */ +- 89500, 13, 13, 4, 21, 38, 21, 38 }, ++ 89500, 13, 13, 4, 21, 39, 21, 39 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 117000, /* 117 Mb */ +- 98900, 14, 14, 4, 22, 39, 22, 39 }, ++ 98900, 14, 14, 4, 22, 40, 22, 40 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 130000, /* 130 Mb */ +- 108300, 15, 15, 4, 23, 40, 23, 41 }, ++ 108300, 15, 15, 4, 23, 41, 24, 42 }, ++ { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS_HGI, 144400, /* 144.4 Mb */ ++ 12000, 15, 15, 4, 23, 41, 24, 42 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 13500, /* 13.5 Mb */ +- 13200, 0, 0, 0, 8, 24, 24, 24 }, ++ 13200, 0, 0, 0, 8, 25, 25, 25 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 27500, /* 27.0 Mb */ +- 25900, 1, 1, 2, 9, 25, 25, 25 }, ++ 25900, 1, 1, 2, 9, 26, 26, 26 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 40500, /* 40.5 Mb */ +- 38600, 2, 2, 2, 10, 26, 26, 26 }, ++ 38600, 2, 2, 2, 10, 27, 27, 27 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 54000, /* 54 Mb */ +- 49800, 3, 3, 4, 11, 27, 27, 27 }, ++ 49800, 3, 3, 4, 11, 28, 28, 28 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 81500, /* 81 Mb */ +- 72200, 4, 4, 4, 12, 28, 28, 28 }, ++ 72200, 4, 4, 4, 12, 29, 29, 29 }, + { INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 108000, /* 108 Mb */ +- 92900, 5, 5, 4, 13, 29, 29, 29 }, ++ 92900, 5, 5, 4, 13, 30, 30, 30 }, + { INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 121500, /* 121.5 Mb */ +- 102700, 6, 6, 4, 14, 30, 30, 30 }, ++ 102700, 6, 6, 4, 14, 31, 31, 31 }, + { INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 135000, /* 135 Mb */ +- 112000, 7, 7, 4, 15, 31, 32, 32 }, ++ 112000, 7, 7, 4, 15, 32, 33, 33 }, + { INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS_HGI, 150000, /* 150 Mb */ +- 122000, 7, 7, 4, 15, 31, 32, 32 }, ++ 122000, 7, 7, 4, 15, 32, 33, 33 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 27000, /* 27 Mb */ +- 25800, 8, 8, 0, 16, 33, 33, 33 }, ++ 25800, 8, 8, 0, 16, 34, 34, 34 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 54000, /* 54 Mb */ +- 49800, 9, 9, 2, 17, 34, 34, 34 }, ++ 49800, 9, 9, 2, 17, 35, 35, 35 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 81000, /* 81 Mb */ +- 71900, 10, 10, 2, 18, 35, 35, 35 }, ++ 71900, 10, 10, 2, 18, 36, 36, 36 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 108000, /* 108 Mb */ +- 92500, 11, 11, 4, 19, 36, 36, 36 }, ++ 92500, 11, 11, 4, 19, 37, 37, 37 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 162000, /* 162 Mb */ +- 130300, 12, 12, 4, 20, 37, 37, 37 }, ++ 130300, 12, 12, 4, 20, 38, 38, 38 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 216000, /* 216 Mb */ +- 162800, 13, 13, 4, 21, 38, 38, 38 }, ++ 162800, 13, 13, 4, 21, 39, 39, 39 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 243000, /* 243 Mb */ +- 178200, 14, 14, 4, 22, 39, 39, 39 }, ++ 178200, 14, 14, 4, 22, 40, 40, 40 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 270000, /* 270 Mb */ +- 192100, 15, 15, 4, 23, 40, 41, 41 }, ++ 192100, 15, 15, 4, 23, 41, 42, 42 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS_HGI, 300000, /* 300 Mb */ +- 207000, 15, 15, 4, 23, 40, 41, 41 }, ++ 207000, 15, 15, 4, 23, 41, 42, 42 }, + }, + 50, /* probe interval */ + WLAN_RC_HT_FLAG, /* Phy rates allowed initially */ +@@ -144,73 +146,75 @@ static const struct ath_rate_table ar5416_11ng_ratetable = { + { VALID, VALID, WLAN_RC_PHY_OFDM, 54000, /* 54 Mb */ + 30900, 11, 108, 8, 11, 11, 11, 11 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_20_SS, 6500, /* 6.5 Mb */ +- 6400, 0, 0, 4, 12, 28, 12, 28 }, ++ 6400, 0, 0, 4, 12, 29, 12, 29 }, + { VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 13000, /* 13 Mb */ +- 12700, 1, 1, 6, 13, 29, 13, 29 }, ++ 12700, 1, 1, 6, 13, 30, 13, 30 }, + { VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 19500, /* 19.5 Mb */ +- 18800, 2, 2, 6, 14, 30, 14, 30 }, ++ 18800, 2, 2, 6, 14, 31, 14, 31 }, + { VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 26000, /* 26 Mb */ +- 25000, 3, 3, 8, 15, 31, 15, 31 }, ++ 25000, 3, 3, 8, 15, 32, 15, 32 }, + { VALID_20, VALID_20, WLAN_RC_PHY_HT_20_SS, 39000, /* 39 Mb */ +- 36700, 4, 4, 8, 16, 32, 16, 32 }, ++ 36700, 4, 4, 8, 16, 33, 16, 33 }, + { INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 52000, /* 52 Mb */ +- 48100, 5, 5, 8, 17, 33, 17, 33 }, ++ 48100, 5, 5, 8, 17, 34, 17, 34 }, + { INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 58500, /* 58.5 Mb */ +- 53500, 6, 6, 8, 18, 34, 18, 34 }, ++ 53500, 6, 6, 8, 18, 35, 18, 35 }, + { INVALID, VALID_20, WLAN_RC_PHY_HT_20_SS, 65000, /* 65 Mb */ +- 59000, 7, 7, 8, 19, 35, 19, 36 }, ++ 59000, 7, 7, 8, 19, 36, 19, 37 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 13000, /* 13 Mb */ +- 12700, 8, 8, 4, 20, 37, 20, 37 }, ++ 12700, 8, 8, 4, 20, 38, 20, 38 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 26000, /* 26 Mb */ +- 24800, 9, 9, 6, 21, 38, 21, 38 }, ++ 24800, 9, 9, 6, 21, 39, 21, 39 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_20_DS, 39000, /* 39 Mb */ +- 36600, 10, 10, 6, 22, 39, 22, 39 }, ++ 36600, 10, 10, 6, 22, 40, 22, 40 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 52000, /* 52 Mb */ +- 48100, 11, 11, 8, 23, 40, 23, 40 }, ++ 48100, 11, 11, 8, 23, 41, 23, 41 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 78000, /* 78 Mb */ +- 69500, 12, 12, 8, 24, 41, 24, 41 }, ++ 69500, 12, 12, 8, 24, 42, 24, 42 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 104000, /* 104 Mb */ +- 89500, 13, 13, 8, 25, 42, 25, 42 }, ++ 89500, 13, 13, 8, 25, 43, 25, 43 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 117000, /* 117 Mb */ +- 98900, 14, 14, 8, 26, 43, 26, 44 }, ++ 98900, 14, 14, 8, 26, 44, 26, 44 }, + { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS, 130000, /* 130 Mb */ +- 108300, 15, 15, 8, 27, 44, 27, 45 }, ++ 108300, 15, 15, 8, 27, 45, 28, 46 }, ++ { VALID_20, INVALID, WLAN_RC_PHY_HT_20_DS_HGI, 144400, /* 130 Mb */ ++ 120000, 15, 15, 8, 27, 45, 28, 46 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 13500, /* 13.5 Mb */ +- 13200, 0, 0, 8, 12, 28, 28, 28 }, ++ 13200, 0, 0, 8, 12, 29, 29, 29 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 27500, /* 27.0 Mb */ +- 25900, 1, 1, 8, 13, 29, 29, 29 }, ++ 25900, 1, 1, 8, 13, 30, 30, 30 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 40500, /* 40.5 Mb */ +- 38600, 2, 2, 8, 14, 30, 30, 30 }, ++ 38600, 2, 2, 8, 14, 31, 31, 31 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 54000, /* 54 Mb */ +- 49800, 3, 3, 8, 15, 31, 31, 31 }, ++ 49800, 3, 3, 8, 15, 32, 32, 32 }, + { VALID_40, VALID_40, WLAN_RC_PHY_HT_40_SS, 81500, /* 81 Mb */ +- 72200, 4, 4, 8, 16, 32, 32, 32 }, ++ 72200, 4, 4, 8, 16, 33, 33, 33 }, + { INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 108000, /* 108 Mb */ +- 92900, 5, 5, 8, 17, 33, 33, 33 }, ++ 92900, 5, 5, 8, 17, 34, 34, 34 }, + { INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 121500, /* 121.5 Mb */ +- 102700, 6, 6, 8, 18, 34, 34, 34 }, ++ 102700, 6, 6, 8, 18, 35, 35, 35 }, + { INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS, 135000, /* 135 Mb */ +- 112000, 7, 7, 8, 19, 35, 36, 36 }, ++ 112000, 7, 7, 8, 19, 36, 37, 37 }, + { INVALID, VALID_40, WLAN_RC_PHY_HT_40_SS_HGI, 150000, /* 150 Mb */ +- 122000, 7, 7, 8, 19, 35, 36, 36 }, ++ 122000, 7, 7, 8, 19, 36, 37, 37 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 27000, /* 27 Mb */ +- 25800, 8, 8, 8, 20, 37, 37, 37 }, ++ 25800, 8, 8, 8, 20, 38, 38, 38 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 54000, /* 54 Mb */ +- 49800, 9, 9, 8, 21, 38, 38, 38 }, ++ 49800, 9, 9, 8, 21, 39, 39, 39 }, + { INVALID, INVALID, WLAN_RC_PHY_HT_40_DS, 81000, /* 81 Mb */ +- 71900, 10, 10, 8, 22, 39, 39, 39 }, ++ 71900, 10, 10, 8, 22, 40, 40, 40 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 108000, /* 108 Mb */ +- 92500, 11, 11, 8, 23, 40, 40, 40 }, ++ 92500, 11, 11, 8, 23, 41, 41, 41 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 162000, /* 162 Mb */ +- 130300, 12, 12, 8, 24, 41, 41, 41 }, ++ 130300, 12, 12, 8, 24, 42, 42, 42 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 216000, /* 216 Mb */ +- 162800, 13, 13, 8, 25, 42, 42, 42 }, ++ 162800, 13, 13, 8, 25, 43, 43, 43 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 243000, /* 243 Mb */ +- 178200, 14, 14, 8, 26, 43, 43, 43 }, ++ 178200, 14, 14, 8, 26, 44, 44, 44 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS, 270000, /* 270 Mb */ +- 192100, 15, 15, 8, 27, 44, 45, 45 }, ++ 192100, 15, 15, 8, 27, 45, 46, 46 }, + { VALID_40, INVALID, WLAN_RC_PHY_HT_40_DS_HGI, 300000, /* 300 Mb */ +- 207000, 15, 15, 8, 27, 44, 45, 45 }, ++ 207000, 15, 15, 8, 27, 45, 46, 46 }, + }, + 50, /* probe interval */ + WLAN_RC_HT_FLAG, /* Phy rates allowed initially */ +@@ -1193,7 +1197,7 @@ static void ath_rc_init(struct ath_softc *sc, + } + + static u8 ath_rc_build_ht_caps(struct ath_softc *sc, struct ieee80211_sta *sta, +- bool is_cw40, bool is_sgi40) ++ bool is_cw40, bool is_sgi) + { + u8 caps = 0; + +@@ -1206,8 +1210,9 @@ static u8 ath_rc_build_ht_caps(struct ath_softc *sc, struct ieee80211_sta *sta, + } + if (is_cw40) + caps |= WLAN_RC_40_FLAG; +- if (is_sgi40) ++ if (is_sgi) + caps |= WLAN_RC_SGI_FLAG; ++ + } + + return caps; +@@ -1300,7 +1305,7 @@ static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband, + struct ath_softc *sc = priv; + struct ath_rate_priv *ath_rc_priv = priv_sta; + const struct ath_rate_table *rate_table; +- bool is_cw40, is_sgi40; ++ bool is_cw40, is_sgi = false; + int i, j = 0; + + for (i = 0; i < sband->n_bitrates; i++) { +@@ -1323,7 +1328,11 @@ static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband, + } + + is_cw40 = sta->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40; +- is_sgi40 = sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40; ++ ++ if (is_cw40) ++ is_sgi = sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40; ++ else if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20) ++ is_sgi = sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20; + + /* Choose rate table first */ + +@@ -1336,7 +1345,7 @@ static void ath_rate_init(void *priv, struct ieee80211_supported_band *sband, + rate_table = hw_rate_table[sc->cur_rate_mode]; + } + +- ath_rc_priv->ht_cap = ath_rc_build_ht_caps(sc, sta, is_cw40, is_sgi40); ++ ath_rc_priv->ht_cap = ath_rc_build_ht_caps(sc, sta, is_cw40, is_sgi); + ath_rc_init(sc, priv_sta, sband, sta, rate_table); + } + +@@ -1347,10 +1356,10 @@ static void ath_rate_update(void *priv, struct ieee80211_supported_band *sband, + struct ath_softc *sc = priv; + struct ath_rate_priv *ath_rc_priv = priv_sta; + const struct ath_rate_table *rate_table = NULL; +- bool oper_cw40 = false, oper_sgi40; ++ bool oper_cw40 = false, oper_sgi; + bool local_cw40 = (ath_rc_priv->ht_cap & WLAN_RC_40_FLAG) ? + true : false; +- bool local_sgi40 = (ath_rc_priv->ht_cap & WLAN_RC_SGI_FLAG) ? ++ bool local_sgi = (ath_rc_priv->ht_cap & WLAN_RC_SGI_FLAG) ? + true : false; + + /* FIXME: Handle AP mode later when we support CWM */ +@@ -1363,15 +1372,21 @@ static void ath_rate_update(void *priv, struct ieee80211_supported_band *sband, + oper_chan_type == NL80211_CHAN_HT40PLUS) + oper_cw40 = true; + +- oper_sgi40 = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? +- true : false; ++ if (oper_cw40) ++ oper_sgi = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_40) ? ++ true : false; ++ else if (sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_SGI_20) ++ oper_sgi = (sta->ht_cap.cap & IEEE80211_HT_CAP_SGI_20) ? ++ true : false; ++ else ++ oper_sgi = false; + +- if ((local_cw40 != oper_cw40) || (local_sgi40 != oper_sgi40)) { ++ if ((local_cw40 != oper_cw40) || (local_sgi != oper_sgi)) { + rate_table = ath_choose_rate_table(sc, sband->band, + sta->ht_cap.ht_supported, + oper_cw40); + ath_rc_priv->ht_cap = ath_rc_build_ht_caps(sc, sta, +- oper_cw40, oper_sgi40); ++ oper_cw40, oper_sgi); + ath_rc_init(sc, priv_sta, sband, sta, rate_table); + + ath_print(ath9k_hw_common(sc->sc_ah), ATH_DBG_CONFIG, +-- +1.6.3.3 + diff --git a/linux-next-pending/0007-ath9k-Make-sure-null-func-frame-is-acked-before-goin.patch b/linux-next-pending/0007-ath9k-Make-sure-null-func-frame-is-acked-before-goin.patch new file mode 100644 index 000000000000..787dbb3d53f6 --- /dev/null +++ b/linux-next-pending/0007-ath9k-Make-sure-null-func-frame-is-acked-before-goin.patch @@ -0,0 +1,38 @@ +From b678026133c321be78cbebdfc7f791fa72525ac1 Mon Sep 17 00:00:00 2001 +From: Vasanthakumar Thiagarajan +Date: Mon, 17 May 2010 11:34:10 -0700 +Subject: [PATCH 07/19] ath9k: Make sure null func frame is acked before going into PS for ar9003 + +Add missing code to handle nullfunc frame completion in +ath_tx_edma_tasklet(). + +Signed-off-by: Vasanthakumar Thiagarajan +--- + drivers/net/wireless/ath/ath9k/xmit.c | 11 +++++++++++ + 1 files changed, 11 insertions(+), 0 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/xmit.c b/drivers/net/wireless/ath/ath9k/xmit.c +index 3db1917..debb62d 100644 +--- a/drivers/net/wireless/ath/ath9k/xmit.c ++++ b/drivers/net/wireless/ath/ath9k/xmit.c +@@ -2277,6 +2277,17 @@ void ath_tx_edma_tasklet(struct ath_softc *sc) + + txok = !(txs.ts_status & ATH9K_TXERR_MASK); + ++ /* ++ * Make sure null func frame is acked before configuring ++ * hw into ps mode. ++ */ ++ if (bf->bf_isnullfunc && txok) { ++ if ((sc->ps_flags & PS_ENABLED)) ++ ath9k_enable_ps(sc); ++ else ++ sc->ps_flags |= PS_NULLFUNC_COMPLETED; ++ } ++ + if (!bf_isampdu(bf)) { + bf->bf_retries = txs.ts_longretry; + if (txs.ts_status & ATH9K_TXERR_XRETRY) +-- +1.6.3.3 + diff --git a/linux-next-pending/0008-ath9k-Fix-power-save-with-auto-sleeping.patch b/linux-next-pending/0008-ath9k-Fix-power-save-with-auto-sleeping.patch new file mode 100644 index 000000000000..e783db6bbf39 --- /dev/null +++ b/linux-next-pending/0008-ath9k-Fix-power-save-with-auto-sleeping.patch @@ -0,0 +1,39 @@ +From f459f43e2490ec2644bc826c3ca3906b1985baa1 Mon Sep 17 00:00:00 2001 +From: Vasanthakumar Thiagarajan +Date: Mon, 17 May 2010 18:36:00 -0700 +Subject: [PATCH 08/19] ath9k: Fix power save with auto sleeping + +Rx should not be disabed/disabled when hw supports auto sleeping. + +Signed-off-by: Vasanthakumar Thiagarajan +--- + drivers/net/wireless/ath/ath9k/main.c | 5 +++-- + 1 files changed, 3 insertions(+), 2 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/main.c b/drivers/net/wireless/ath/ath9k/main.c +index 2b0120b..678809b 100644 +--- a/drivers/net/wireless/ath/ath9k/main.c ++++ b/drivers/net/wireless/ath/ath9k/main.c +@@ -1304,7 +1304,8 @@ static int ath9k_tx(struct ieee80211_hw *hw, + * completed and if needed, also for RX of buffered frames. + */ + ath9k_ps_wakeup(sc); +- ath9k_hw_setrxabort(sc->sc_ah, 0); ++ if (!(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) ++ ath9k_hw_setrxabort(sc->sc_ah, 0); + if (ieee80211_is_pspoll(hdr->frame_control)) { + ath_print(common, ATH_DBG_PS, + "Sending PS-Poll to pick a buffered frame\n"); +@@ -1568,8 +1569,8 @@ void ath9k_enable_ps(struct ath_softc *sc) + ah->imask |= ATH9K_INT_TIM_TIMER; + ath9k_hw_set_interrupts(ah, ah->imask); + } ++ ath9k_hw_setrxabort(ah, 1); + } +- ath9k_hw_setrxabort(ah, 1); + } + + static int ath9k_config(struct ieee80211_hw *hw, u32 changed) +-- +1.6.3.3 + diff --git a/linux-next-pending/0009-ath9k_hw-Enable-auto-sleep-for-ar9003.patch b/linux-next-pending/0009-ath9k_hw-Enable-auto-sleep-for-ar9003.patch new file mode 100644 index 000000000000..cb170bce79d7 --- /dev/null +++ b/linux-next-pending/0009-ath9k_hw-Enable-auto-sleep-for-ar9003.patch @@ -0,0 +1,26 @@ +From 79e8cb3f106fbb4f8aa1fb2ab442f6e34b992bbc Mon Sep 17 00:00:00 2001 +From: Vasanthakumar Thiagarajan +Date: Mon, 17 May 2010 18:38:58 -0700 +Subject: [PATCH 09/19] ath9k_hw: Enable auto sleep for ar9003 + +Signed-off-by: Vasanthakumar Thiagarajan +--- + drivers/net/wireless/ath/ath9k/hw.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c +index 2fd6254..b2301bd 100644 +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -2167,7 +2167,7 @@ int ath9k_hw_fill_cap_info(struct ath_hw *ah) + pCap->hw_caps |= ATH9K_HW_CAP_RFSILENT; + } + #endif +- if (AR_SREV_9271(ah)) ++ if (AR_SREV_9271(ah) || AR_SREV_9300_20_OR_LATER(ah)) + pCap->hw_caps |= ATH9K_HW_CAP_AUTOSLEEP; + else + pCap->hw_caps &= ~ATH9K_HW_CAP_AUTOSLEEP; +-- +1.6.3.3 + diff --git a/linux-next-pending/0010-ath9k-Fix-rx-of-mcast-bcast-frames-in-PS-mode-with-a.patch b/linux-next-pending/0010-ath9k-Fix-rx-of-mcast-bcast-frames-in-PS-mode-with-a.patch new file mode 100644 index 000000000000..f88451dfffbd --- /dev/null +++ b/linux-next-pending/0010-ath9k-Fix-rx-of-mcast-bcast-frames-in-PS-mode-with-a.patch @@ -0,0 +1,52 @@ +From 4239a69db30410f5c2d4b1b76c9a8a566526457f Mon Sep 17 00:00:00 2001 +From: Vasanthakumar Thiagarajan +Date: Tue, 18 May 2010 17:20:39 -0700 +Subject: [PATCH 10/19] ath9k: Fix rx of mcast/bcast frames in PS mode with auto sleep + +Signed-off-by: Vasanthakumar Thiagarajan +--- + drivers/net/wireless/ath/ath9k/recv.c | 14 +++++++++----- + 1 files changed, 9 insertions(+), 5 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c +index ba13913..dfb11a6 100644 +--- a/drivers/net/wireless/ath/ath9k/recv.c ++++ b/drivers/net/wireless/ath/ath9k/recv.c +@@ -18,6 +18,9 @@ + #include "ar9003_mac.h" + + #define SKB_CB_ATHBUF(__skb) (*((struct ath_buf **)__skb->cb)) ++#define ATH9K_CHECK_AUTO_SLEEP(__sc) \ ++ (__sc->ps_enabled && \ ++ (__sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_AUTOSLEEP)) + + static struct ieee80211_hw * ath_get_virt_hw(struct ath_softc *sc, + struct ieee80211_hdr *hdr) +@@ -616,8 +619,8 @@ static void ath_rx_ps(struct ath_softc *sc, struct sk_buff *skb) + hdr = (struct ieee80211_hdr *)skb->data; + + /* Process Beacon and CAB receive in PS state */ +- if ((sc->ps_flags & PS_WAIT_FOR_BEACON) && +- ieee80211_is_beacon(hdr->frame_control)) ++ if (((sc->ps_flags & PS_WAIT_FOR_BEACON) || ATH9K_CHECK_AUTO_SLEEP(sc)) ++ && ieee80211_is_beacon(hdr->frame_control)) + ath_rx_ps_beacon(sc, skb); + else if ((sc->ps_flags & PS_WAIT_FOR_CAB) && + (ieee80211_is_data(hdr->frame_control) || +@@ -932,9 +935,10 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) + sc->rx.rxotherant = 0; + } + +- if (unlikely(sc->ps_flags & (PS_WAIT_FOR_BEACON | +- PS_WAIT_FOR_CAB | +- PS_WAIT_FOR_PSPOLL_DATA))) ++ if (unlikely(ATH9K_CHECK_AUTO_SLEEP(sc) || ++ (sc->ps_flags & (PS_WAIT_FOR_BEACON | ++ PS_WAIT_FOR_CAB | ++ PS_WAIT_FOR_PSPOLL_DATA)))) + ath_rx_ps(sc, skb); + + ath_rx_send_to_mac80211(hw, sc, skb, rxs); +-- +1.6.3.3 + diff --git a/linux-next-pending/0011-ath9k-change-beacon-allocation-to-prefer-the-first-b.patch b/linux-next-pending/0011-ath9k-change-beacon-allocation-to-prefer-the-first-b.patch new file mode 100644 index 000000000000..81cee533fd81 --- /dev/null +++ b/linux-next-pending/0011-ath9k-change-beacon-allocation-to-prefer-the-first-b.patch @@ -0,0 +1,40 @@ +From 4bd341bdf87c2e17d256526ffc75d9a2200f771b Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Thu, 13 May 2010 20:37:24 +0200 +Subject: [PATCH 11/19] ath9k: change beacon allocation to prefer the first beacon slot + +This fixes IBSS beacon transmissions without VEOL enabled + +Signed-off-by: Felix Fietkau +--- + drivers/net/wireless/ath/ath9k/beacon.c | 12 +++--------- + 1 files changed, 3 insertions(+), 9 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c +index c8a4558..77face7 100644 +--- a/drivers/net/wireless/ath/ath9k/beacon.c ++++ b/drivers/net/wireless/ath/ath9k/beacon.c +@@ -274,17 +274,11 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif) + avp->av_bslot = 0; + for (slot = 0; slot < ATH_BCBUF; slot++) + if (sc->beacon.bslot[slot] == NULL) { +- /* +- * XXX hack, space out slots to better +- * deal with misses +- */ +- if (slot+1 < ATH_BCBUF && +- sc->beacon.bslot[slot+1] == NULL) { +- avp->av_bslot = slot+1; +- break; +- } + avp->av_bslot = slot; ++ + /* NB: keep looking for a double slot */ ++ if (slot == 0 || !sc->beacon.bslot[slot-1]) ++ break; + } + BUG_ON(sc->beacon.bslot[avp->av_bslot] != NULL); + sc->beacon.bslot[avp->av_bslot] = vif; +-- +1.6.3.3 + diff --git a/linux-next-pending/0012-ath9k-remove-VEOL-support-for-ad-hoc.patch b/linux-next-pending/0012-ath9k-remove-VEOL-support-for-ad-hoc.patch new file mode 100644 index 000000000000..e55b49024692 --- /dev/null +++ b/linux-next-pending/0012-ath9k-remove-VEOL-support-for-ad-hoc.patch @@ -0,0 +1,120 @@ +From 6e0f085930fb2df6d2c5701741fcf88b0381a144 Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Thu, 13 May 2010 20:37:25 +0200 +Subject: [PATCH 12/19] ath9k: remove VEOL support for ad-hoc + +With VEOL, Beacon transmission in ad-hoc does not currently work. +I believe for larger ad-hoc networks, VEOL is too unreliable, as +it can get beacon transmissions stuck during synchronization. +Use SWBA based beacon trasmission similar to AP mode instead. + +Signed-off-by: Felix Fietkau +--- + drivers/net/wireless/ath/ath9k/beacon.c | 63 +++++-------------------------- + 1 files changed, 10 insertions(+), 53 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/beacon.c b/drivers/net/wireless/ath/ath9k/beacon.c +index 77face7..f43d85a 100644 +--- a/drivers/net/wireless/ath/ath9k/beacon.c ++++ b/drivers/net/wireless/ath/ath9k/beacon.c +@@ -76,22 +76,13 @@ static void ath_beacon_setup(struct ath_softc *sc, struct ath_vif *avp, + ds = bf->bf_desc; + flags = ATH9K_TXDESC_NOACK; + +- if (((sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC) || +- (sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT)) && +- (ah->caps.hw_caps & ATH9K_HW_CAP_VEOL)) { +- ds->ds_link = bf->bf_daddr; /* self-linked */ +- flags |= ATH9K_TXDESC_VEOL; +- /* Let hardware handle antenna switching. */ +- antenna = 0; +- } else { +- ds->ds_link = 0; +- /* +- * Switch antenna every beacon. +- * Should only switch every beacon period, not for every SWBA +- * XXX assumes two antennae +- */ +- antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs) & 1 ? 2 : 1); +- } ++ ds->ds_link = 0; ++ /* ++ * Switch antenna every beacon. ++ * Should only switch every beacon period, not for every SWBA ++ * XXX assumes two antennae ++ */ ++ antenna = ((sc->beacon.ast_be_xmit / sc->nbcnvifs) & 1 ? 2 : 1); + + sband = &sc->sbands[common->hw->conf.channel->band]; + rate = sband->bitrates[rateidx].hw_value; +@@ -215,36 +206,6 @@ static struct ath_buf *ath_beacon_generate(struct ieee80211_hw *hw, + return bf; + } + +-/* +- * Startup beacon transmission for adhoc mode when they are sent entirely +- * by the hardware using the self-linked descriptor + veol trick. +-*/ +-static void ath_beacon_start_adhoc(struct ath_softc *sc, +- struct ieee80211_vif *vif) +-{ +- struct ath_hw *ah = sc->sc_ah; +- struct ath_common *common = ath9k_hw_common(ah); +- struct ath_buf *bf; +- struct ath_vif *avp; +- struct sk_buff *skb; +- +- avp = (void *)vif->drv_priv; +- +- if (avp->av_bcbuf == NULL) +- return; +- +- bf = avp->av_bcbuf; +- skb = bf->bf_mpdu; +- +- ath_beacon_setup(sc, avp, bf, 0); +- +- /* NB: caller is known to have already stopped tx dma */ +- ath9k_hw_puttxbuf(ah, sc->beacon.beaconq, bf->bf_daddr); +- ath9k_hw_txstart(ah, sc->beacon.beaconq); +- ath_print(common, ATH_DBG_BEACON, "TXDP%u = %llx (%p)\n", +- sc->beacon.beaconq, ito64(bf->bf_daddr), bf->bf_desc); +-} +- + int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif) + { + struct ath_softc *sc = aphy->sc; +@@ -265,7 +226,8 @@ int ath_beacon_alloc(struct ath_wiphy *aphy, struct ieee80211_vif *vif) + list_del(&avp->av_bcbuf->list); + + if (sc->sc_ah->opmode == NL80211_IFTYPE_AP || +- !(sc->sc_ah->caps.hw_caps & ATH9K_HW_CAP_VEOL)) { ++ sc->sc_ah->opmode == NL80211_IFTYPE_ADHOC || ++ sc->sc_ah->opmode == NL80211_IFTYPE_MESH_POINT) { + int slot; + /* + * Assign the vif to a beacon xmit slot. As +@@ -715,8 +677,7 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc, + * self-linked tx descriptor and let the hardware deal with things. + */ + intval |= ATH9K_BEACON_ENA; +- if (!(ah->caps.hw_caps & ATH9K_HW_CAP_VEOL)) +- ah->imask |= ATH9K_INT_SWBA; ++ ah->imask |= ATH9K_INT_SWBA; + + ath_beaconq_config(sc); + +@@ -726,10 +687,6 @@ static void ath_beacon_config_adhoc(struct ath_softc *sc, + ath9k_beacon_init(sc, nexttbtt, intval); + sc->beacon.bmisscnt = 0; + ath9k_hw_set_interrupts(ah, ah->imask); +- +- /* FIXME: Handle properly when vif is NULL */ +- if (vif && ah->caps.hw_caps & ATH9K_HW_CAP_VEOL) +- ath_beacon_start_adhoc(sc, vif); + } + + void ath_beacon_config(struct ath_softc *sc, struct ieee80211_vif *vif) +-- +1.6.3.3 + diff --git a/linux-next-pending/0013-cfg80211-fix-crash-in-cfg80211_set_freq.patch b/linux-next-pending/0013-cfg80211-fix-crash-in-cfg80211_set_freq.patch new file mode 100644 index 000000000000..de5895e25df1 --- /dev/null +++ b/linux-next-pending/0013-cfg80211-fix-crash-in-cfg80211_set_freq.patch @@ -0,0 +1,28 @@ +From 2bf5640c63731982171c9e451f0688994f242678 Mon Sep 17 00:00:00 2001 +From: Felix Fietkau +Date: Sat, 15 May 2010 15:46:17 +0200 +Subject: [PATCH 13/19] cfg80211: fix crash in cfg80211_set_freq() + +Since wdev can be NULL, check it before dereferencing it + +Signed-off-by: Felix Fietkau +--- + net/wireless/chan.c | 2 +- + 1 files changed, 1 insertions(+), 1 deletions(-) + +diff --git a/net/wireless/chan.c b/net/wireless/chan.c +index d92d088..b01a6f6 100644 +--- a/net/wireless/chan.c ++++ b/net/wireless/chan.c +@@ -50,7 +50,7 @@ int cfg80211_set_freq(struct cfg80211_registered_device *rdev, + struct ieee80211_channel *chan; + int result; + +- if (wdev->iftype == NL80211_IFTYPE_MONITOR) ++ if (wdev && wdev->iftype == NL80211_IFTYPE_MONITOR) + wdev = NULL; + + if (wdev) { +-- +1.6.3.3 + diff --git a/linux-next-pending/0014-ath9k_hw-Enable-TX-IQ-calibration-on-AR9003.patch b/linux-next-pending/0014-ath9k_hw-Enable-TX-IQ-calibration-on-AR9003.patch new file mode 100644 index 000000000000..1eacd815ff2f --- /dev/null +++ b/linux-next-pending/0014-ath9k_hw-Enable-TX-IQ-calibration-on-AR9003.patch @@ -0,0 +1,75 @@ +From 5d182a53ed8099361d98f88fbed64726b3ad3dc4 Mon Sep 17 00:00:00 2001 +From: Luis R. Rodriguez +Date: Wed, 19 May 2010 13:42:44 -0700 +Subject: [PATCH 14/19] ath9k_hw: Enable TX IQ calibration on AR9003 + +To enable it we now disable and re-enable the PHY chips +after TX IQ calibration. + +Signed-off-by: Luis R. Rodriguez +--- + drivers/net/wireless/ath/ath9k/ar9003_calib.c | 10 ++++++---- + drivers/net/wireless/ath/ath9k/hw.c | 6 ------ + drivers/net/wireless/ath/ath9k/hw.h | 1 - + 3 files changed, 6 insertions(+), 11 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/ar9003_calib.c b/drivers/net/wireless/ath/ath9k/ar9003_calib.c +index 5fcafb4..15bf4e2 100644 +--- a/drivers/net/wireless/ath/ath9k/ar9003_calib.c ++++ b/drivers/net/wireless/ath/ath9k/ar9003_calib.c +@@ -740,6 +740,12 @@ static bool ar9003_hw_init_cal(struct ath_hw *ah, + */ + ar9003_hw_set_chain_masks(ah, 0x7, 0x7); + ++ /* Do Tx IQ Calibration */ ++ ar9003_hw_tx_iq_cal(ah); ++ REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_DIS); ++ udelay(5); ++ REG_WRITE(ah, AR_PHY_ACTIVE, AR_PHY_ACTIVE_EN); ++ + /* Calibrate the AGC */ + REG_WRITE(ah, AR_PHY_AGC_CONTROL, + REG_READ(ah, AR_PHY_AGC_CONTROL) | +@@ -754,10 +760,6 @@ static bool ar9003_hw_init_cal(struct ath_hw *ah, + return false; + } + +- /* Do Tx IQ Calibration */ +- if (ah->config.tx_iq_calibration) +- ar9003_hw_tx_iq_cal(ah); +- + /* Revert chainmasks to their original values before NF cal */ + ar9003_hw_set_chain_masks(ah, ah->rxchainmask, ah->txchainmask); + +diff --git a/drivers/net/wireless/ath/ath9k/hw.c b/drivers/net/wireless/ath/ath9k/hw.c +index b2301bd..1ded0b7 100644 +--- a/drivers/net/wireless/ath/ath9k/hw.c ++++ b/drivers/net/wireless/ath/ath9k/hw.c +@@ -392,12 +392,6 @@ static void ath9k_hw_init_config(struct ath_hw *ah) + ah->config.rx_intr_mitigation = true; + + /* +- * Tx IQ Calibration (ah->config.tx_iq_calibration) is only +- * used by AR9003, but it is showing reliability issues. +- * It will take a while to fix so this is currently disabled. +- */ +- +- /* + * We need this for PCI devices only (Cardbus, PCI, miniPCI) + * _and_ if on non-uniprocessor systems (Multiprocessor/HT). + * This means we use it for all AR5416 devices, and the few +diff --git a/drivers/net/wireless/ath/ath9k/hw.h b/drivers/net/wireless/ath/ath9k/hw.h +index 5cf0714..ba77506 100644 +--- a/drivers/net/wireless/ath/ath9k/hw.h ++++ b/drivers/net/wireless/ath/ath9k/hw.h +@@ -263,7 +263,6 @@ struct ath9k_ops_config { + #define AR_BASE_FREQ_5GHZ 4900 + #define AR_SPUR_FEEQ_BOUND_HT40 19 + #define AR_SPUR_FEEQ_BOUND_HT20 10 +- bool tx_iq_calibration; /* Only available for >= AR9003 */ + int spurmode; + u16 spurchans[AR_EEPROM_MODAL_SPURS][2]; + u8 max_txtrig_level; +-- +1.6.3.3 + diff --git a/linux-next-pending/0015-ath9k-Move-ath9k-specific-RX-code-to-driver.patch b/linux-next-pending/0015-ath9k-Move-ath9k-specific-RX-code-to-driver.patch new file mode 100644 index 000000000000..8b82911dc2d1 --- /dev/null +++ b/linux-next-pending/0015-ath9k-Move-ath9k-specific-RX-code-to-driver.patch @@ -0,0 +1,610 @@ +From fdeff77508aed952a3b3f42484db09d4e8728bbb Mon Sep 17 00:00:00 2001 +From: Sujith +Date: Thu, 20 May 2010 15:34:38 +0530 +Subject: [PATCH 15/19] ath9k: Move ath9k specific RX code to driver + +This patch relocates RX processing code from the +common module to ath9k. This reduces the size +of the common module which is also used by ath9k_htc. + +Signed-off-by: Sujith +--- + drivers/net/wireless/ath/ath9k/common.c | 264 ------------------------------ + drivers/net/wireless/ath/ath9k/common.h | 13 -- + drivers/net/wireless/ath/ath9k/recv.c | 267 ++++++++++++++++++++++++++++++- + 3 files changed, 263 insertions(+), 281 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/common.c b/drivers/net/wireless/ath/ath9k/common.c +index 7707341..27f9ae5 100644 +--- a/drivers/net/wireless/ath/ath9k/common.c ++++ b/drivers/net/wireless/ath/ath9k/common.c +@@ -27,270 +27,6 @@ MODULE_AUTHOR("Atheros Communications"); + MODULE_DESCRIPTION("Shared library for Atheros wireless 802.11n LAN cards."); + MODULE_LICENSE("Dual BSD/GPL"); + +-/* Common RX processing */ +- +-/* Assumes you've already done the endian to CPU conversion */ +-static bool ath9k_rx_accept(struct ath_common *common, +- struct sk_buff *skb, +- struct ieee80211_rx_status *rxs, +- struct ath_rx_status *rx_stats, +- bool *decrypt_error) +-{ +- struct ath_hw *ah = common->ah; +- struct ieee80211_hdr *hdr; +- __le16 fc; +- +- hdr = (struct ieee80211_hdr *) skb->data; +- fc = hdr->frame_control; +- +- if (!rx_stats->rs_datalen) +- return false; +- /* +- * rs_status follows rs_datalen so if rs_datalen is too large +- * we can take a hint that hardware corrupted it, so ignore +- * those frames. +- */ +- if (rx_stats->rs_datalen > common->rx_bufsize) +- return false; +- +- /* +- * rs_more indicates chained descriptors which can be used +- * to link buffers together for a sort of scatter-gather +- * operation. +- * reject the frame, we don't support scatter-gather yet and +- * the frame is probably corrupt anyway +- */ +- if (rx_stats->rs_more) +- return false; +- +- /* +- * The rx_stats->rs_status will not be set until the end of the +- * chained descriptors so it can be ignored if rs_more is set. The +- * rs_more will be false at the last element of the chained +- * descriptors. +- */ +- if (rx_stats->rs_status != 0) { +- if (rx_stats->rs_status & ATH9K_RXERR_CRC) +- rxs->flag |= RX_FLAG_FAILED_FCS_CRC; +- if (rx_stats->rs_status & ATH9K_RXERR_PHY) +- return false; +- +- if (rx_stats->rs_status & ATH9K_RXERR_DECRYPT) { +- *decrypt_error = true; +- } else if (rx_stats->rs_status & ATH9K_RXERR_MIC) { +- if (ieee80211_is_ctl(fc)) +- /* +- * Sometimes, we get invalid +- * MIC failures on valid control frames. +- * Remove these mic errors. +- */ +- rx_stats->rs_status &= ~ATH9K_RXERR_MIC; +- else +- rxs->flag |= RX_FLAG_MMIC_ERROR; +- } +- /* +- * Reject error frames with the exception of +- * decryption and MIC failures. For monitor mode, +- * we also ignore the CRC error. +- */ +- if (ah->opmode == NL80211_IFTYPE_MONITOR) { +- if (rx_stats->rs_status & +- ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC | +- ATH9K_RXERR_CRC)) +- return false; +- } else { +- if (rx_stats->rs_status & +- ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC)) { +- return false; +- } +- } +- } +- return true; +-} +- +-static int ath9k_process_rate(struct ath_common *common, +- struct ieee80211_hw *hw, +- struct ath_rx_status *rx_stats, +- struct ieee80211_rx_status *rxs, +- struct sk_buff *skb) +-{ +- struct ieee80211_supported_band *sband; +- enum ieee80211_band band; +- unsigned int i = 0; +- +- band = hw->conf.channel->band; +- sband = hw->wiphy->bands[band]; +- +- if (rx_stats->rs_rate & 0x80) { +- /* HT rate */ +- rxs->flag |= RX_FLAG_HT; +- if (rx_stats->rs_flags & ATH9K_RX_2040) +- rxs->flag |= RX_FLAG_40MHZ; +- if (rx_stats->rs_flags & ATH9K_RX_GI) +- rxs->flag |= RX_FLAG_SHORT_GI; +- rxs->rate_idx = rx_stats->rs_rate & 0x7f; +- return 0; +- } +- +- for (i = 0; i < sband->n_bitrates; i++) { +- if (sband->bitrates[i].hw_value == rx_stats->rs_rate) { +- rxs->rate_idx = i; +- return 0; +- } +- if (sband->bitrates[i].hw_value_short == rx_stats->rs_rate) { +- rxs->flag |= RX_FLAG_SHORTPRE; +- rxs->rate_idx = i; +- return 0; +- } +- } +- +- /* +- * No valid hardware bitrate found -- we should not get here +- * because hardware has already validated this frame as OK. +- */ +- ath_print(common, ATH_DBG_XMIT, "unsupported hw bitrate detected " +- "0x%02x using 1 Mbit\n", rx_stats->rs_rate); +- if ((common->debug_mask & ATH_DBG_XMIT)) +- print_hex_dump_bytes("", DUMP_PREFIX_NONE, skb->data, skb->len); +- +- return -EINVAL; +-} +- +-static void ath9k_process_rssi(struct ath_common *common, +- struct ieee80211_hw *hw, +- struct sk_buff *skb, +- struct ath_rx_status *rx_stats) +-{ +- struct ath_hw *ah = common->ah; +- struct ieee80211_sta *sta; +- struct ieee80211_hdr *hdr; +- struct ath_node *an; +- int last_rssi = ATH_RSSI_DUMMY_MARKER; +- __le16 fc; +- +- hdr = (struct ieee80211_hdr *)skb->data; +- fc = hdr->frame_control; +- +- rcu_read_lock(); +- /* +- * XXX: use ieee80211_find_sta! This requires quite a bit of work +- * under the current ath9k virtual wiphy implementation as we have +- * no way of tying a vif to wiphy. Typically vifs are attached to +- * at least one sdata of a wiphy on mac80211 but with ath9k virtual +- * wiphy you'd have to iterate over every wiphy and each sdata. +- */ +- sta = ieee80211_find_sta_by_hw(hw, hdr->addr2); +- if (sta) { +- an = (struct ath_node *) sta->drv_priv; +- if (rx_stats->rs_rssi != ATH9K_RSSI_BAD && +- !rx_stats->rs_moreaggr) +- ATH_RSSI_LPF(an->last_rssi, rx_stats->rs_rssi); +- last_rssi = an->last_rssi; +- } +- rcu_read_unlock(); +- +- if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER)) +- rx_stats->rs_rssi = ATH_EP_RND(last_rssi, +- ATH_RSSI_EP_MULTIPLIER); +- if (rx_stats->rs_rssi < 0) +- rx_stats->rs_rssi = 0; +- +- /* Update Beacon RSSI, this is used by ANI. */ +- if (ieee80211_is_beacon(fc)) +- ah->stats.avgbrssi = rx_stats->rs_rssi; +-} +- +-/* +- * For Decrypt or Demic errors, we only mark packet status here and always push +- * up the frame up to let mac80211 handle the actual error case, be it no +- * decryption key or real decryption error. This let us keep statistics there. +- */ +-int ath9k_cmn_rx_skb_preprocess(struct ath_common *common, +- struct ieee80211_hw *hw, +- struct sk_buff *skb, +- struct ath_rx_status *rx_stats, +- struct ieee80211_rx_status *rx_status, +- bool *decrypt_error) +-{ +- struct ath_hw *ah = common->ah; +- +- memset(rx_status, 0, sizeof(struct ieee80211_rx_status)); +- +- /* +- * everything but the rate is checked here, the rate check is done +- * separately to avoid doing two lookups for a rate for each frame. +- */ +- if (!ath9k_rx_accept(common, skb, rx_status, rx_stats, decrypt_error)) +- return -EINVAL; +- +- ath9k_process_rssi(common, hw, skb, rx_stats); +- +- if (ath9k_process_rate(common, hw, rx_stats, rx_status, skb)) +- return -EINVAL; +- +- rx_status->mactime = ath9k_hw_extend_tsf(ah, rx_stats->rs_tstamp); +- rx_status->band = hw->conf.channel->band; +- rx_status->freq = hw->conf.channel->center_freq; +- rx_status->signal = ATH_DEFAULT_NOISE_FLOOR + rx_stats->rs_rssi; +- rx_status->antenna = rx_stats->rs_antenna; +- rx_status->flag |= RX_FLAG_TSFT; +- +- return 0; +-} +-EXPORT_SYMBOL(ath9k_cmn_rx_skb_preprocess); +- +-void ath9k_cmn_rx_skb_postprocess(struct ath_common *common, +- struct sk_buff *skb, +- struct ath_rx_status *rx_stats, +- struct ieee80211_rx_status *rxs, +- bool decrypt_error) +-{ +- struct ath_hw *ah = common->ah; +- struct ieee80211_hdr *hdr; +- int hdrlen, padpos, padsize; +- u8 keyix; +- __le16 fc; +- +- /* see if any padding is done by the hw and remove it */ +- hdr = (struct ieee80211_hdr *) skb->data; +- hdrlen = ieee80211_get_hdrlen_from_skb(skb); +- fc = hdr->frame_control; +- padpos = ath9k_cmn_padpos(hdr->frame_control); +- +- /* The MAC header is padded to have 32-bit boundary if the +- * packet payload is non-zero. The general calculation for +- * padsize would take into account odd header lengths: +- * padsize = (4 - padpos % 4) % 4; However, since only +- * even-length headers are used, padding can only be 0 or 2 +- * bytes and we can optimize this a bit. In addition, we must +- * not try to remove padding from short control frames that do +- * not have payload. */ +- padsize = padpos & 3; +- if (padsize && skb->len>=padpos+padsize+FCS_LEN) { +- memmove(skb->data + padsize, skb->data, padpos); +- skb_pull(skb, padsize); +- } +- +- keyix = rx_stats->rs_keyix; +- +- if (!(keyix == ATH9K_RXKEYIX_INVALID) && !decrypt_error && +- ieee80211_has_protected(fc)) { +- rxs->flag |= RX_FLAG_DECRYPTED; +- } else if (ieee80211_has_protected(fc) +- && !decrypt_error && skb->len >= hdrlen + 4) { +- keyix = skb->data[hdrlen + 3] >> 6; +- +- if (test_bit(keyix, common->keymap)) +- rxs->flag |= RX_FLAG_DECRYPTED; +- } +- if (ah->sw_mgmt_crypto && +- (rxs->flag & RX_FLAG_DECRYPTED) && +- ieee80211_is_mgmt(fc)) +- /* Use software decrypt for management frames. */ +- rxs->flag &= ~RX_FLAG_DECRYPTED; +-} +-EXPORT_SYMBOL(ath9k_cmn_rx_skb_postprocess); +- + int ath9k_cmn_padpos(__le16 frame_control) + { + int padpos = 24; +diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h +index e08f7e5..1e6f360 100644 +--- a/drivers/net/wireless/ath/ath9k/common.h ++++ b/drivers/net/wireless/ath/ath9k/common.h +@@ -115,19 +115,6 @@ struct ath_node { + int last_rssi; + }; + +-int ath9k_cmn_rx_skb_preprocess(struct ath_common *common, +- struct ieee80211_hw *hw, +- struct sk_buff *skb, +- struct ath_rx_status *rx_stats, +- struct ieee80211_rx_status *rx_status, +- bool *decrypt_error); +- +-void ath9k_cmn_rx_skb_postprocess(struct ath_common *common, +- struct sk_buff *skb, +- struct ath_rx_status *rx_stats, +- struct ieee80211_rx_status *rxs, +- bool decrypt_error); +- + int ath9k_cmn_padpos(__le16 frame_control); + int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb); + void ath9k_cmn_update_ichannel(struct ieee80211_hw *hw, +diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c +index dfb11a6..d855155 100644 +--- a/drivers/net/wireless/ath/ath9k/recv.c ++++ b/drivers/net/wireless/ath/ath9k/recv.c +@@ -818,6 +818,265 @@ static struct ath_buf *ath_get_next_rx_buf(struct ath_softc *sc, + return bf; + } + ++/* Assumes you've already done the endian to CPU conversion */ ++static bool ath9k_rx_accept(struct ath_common *common, ++ struct sk_buff *skb, ++ struct ieee80211_rx_status *rxs, ++ struct ath_rx_status *rx_stats, ++ bool *decrypt_error) ++{ ++ struct ath_hw *ah = common->ah; ++ struct ieee80211_hdr *hdr; ++ __le16 fc; ++ ++ hdr = (struct ieee80211_hdr *) skb->data; ++ fc = hdr->frame_control; ++ ++ if (!rx_stats->rs_datalen) ++ return false; ++ /* ++ * rs_status follows rs_datalen so if rs_datalen is too large ++ * we can take a hint that hardware corrupted it, so ignore ++ * those frames. ++ */ ++ if (rx_stats->rs_datalen > common->rx_bufsize) ++ return false; ++ ++ /* ++ * rs_more indicates chained descriptors which can be used ++ * to link buffers together for a sort of scatter-gather ++ * operation. ++ * reject the frame, we don't support scatter-gather yet and ++ * the frame is probably corrupt anyway ++ */ ++ if (rx_stats->rs_more) ++ return false; ++ ++ /* ++ * The rx_stats->rs_status will not be set until the end of the ++ * chained descriptors so it can be ignored if rs_more is set. The ++ * rs_more will be false at the last element of the chained ++ * descriptors. ++ */ ++ if (rx_stats->rs_status != 0) { ++ if (rx_stats->rs_status & ATH9K_RXERR_CRC) ++ rxs->flag |= RX_FLAG_FAILED_FCS_CRC; ++ if (rx_stats->rs_status & ATH9K_RXERR_PHY) ++ return false; ++ ++ if (rx_stats->rs_status & ATH9K_RXERR_DECRYPT) { ++ *decrypt_error = true; ++ } else if (rx_stats->rs_status & ATH9K_RXERR_MIC) { ++ if (ieee80211_is_ctl(fc)) ++ /* ++ * Sometimes, we get invalid ++ * MIC failures on valid control frames. ++ * Remove these mic errors. ++ */ ++ rx_stats->rs_status &= ~ATH9K_RXERR_MIC; ++ else ++ rxs->flag |= RX_FLAG_MMIC_ERROR; ++ } ++ /* ++ * Reject error frames with the exception of ++ * decryption and MIC failures. For monitor mode, ++ * we also ignore the CRC error. ++ */ ++ if (ah->opmode == NL80211_IFTYPE_MONITOR) { ++ if (rx_stats->rs_status & ++ ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC | ++ ATH9K_RXERR_CRC)) ++ return false; ++ } else { ++ if (rx_stats->rs_status & ++ ~(ATH9K_RXERR_DECRYPT | ATH9K_RXERR_MIC)) { ++ return false; ++ } ++ } ++ } ++ return true; ++} ++ ++static int ath9k_process_rate(struct ath_common *common, ++ struct ieee80211_hw *hw, ++ struct ath_rx_status *rx_stats, ++ struct ieee80211_rx_status *rxs, ++ struct sk_buff *skb) ++{ ++ struct ieee80211_supported_band *sband; ++ enum ieee80211_band band; ++ unsigned int i = 0; ++ ++ band = hw->conf.channel->band; ++ sband = hw->wiphy->bands[band]; ++ ++ if (rx_stats->rs_rate & 0x80) { ++ /* HT rate */ ++ rxs->flag |= RX_FLAG_HT; ++ if (rx_stats->rs_flags & ATH9K_RX_2040) ++ rxs->flag |= RX_FLAG_40MHZ; ++ if (rx_stats->rs_flags & ATH9K_RX_GI) ++ rxs->flag |= RX_FLAG_SHORT_GI; ++ rxs->rate_idx = rx_stats->rs_rate & 0x7f; ++ return 0; ++ } ++ ++ for (i = 0; i < sband->n_bitrates; i++) { ++ if (sband->bitrates[i].hw_value == rx_stats->rs_rate) { ++ rxs->rate_idx = i; ++ return 0; ++ } ++ if (sband->bitrates[i].hw_value_short == rx_stats->rs_rate) { ++ rxs->flag |= RX_FLAG_SHORTPRE; ++ rxs->rate_idx = i; ++ return 0; ++ } ++ } ++ ++ /* ++ * No valid hardware bitrate found -- we should not get here ++ * because hardware has already validated this frame as OK. ++ */ ++ ath_print(common, ATH_DBG_XMIT, "unsupported hw bitrate detected " ++ "0x%02x using 1 Mbit\n", rx_stats->rs_rate); ++ if ((common->debug_mask & ATH_DBG_XMIT)) ++ print_hex_dump_bytes("", DUMP_PREFIX_NONE, skb->data, skb->len); ++ ++ return -EINVAL; ++} ++ ++static void ath9k_process_rssi(struct ath_common *common, ++ struct ieee80211_hw *hw, ++ struct sk_buff *skb, ++ struct ath_rx_status *rx_stats) ++{ ++ struct ath_hw *ah = common->ah; ++ struct ieee80211_sta *sta; ++ struct ieee80211_hdr *hdr; ++ struct ath_node *an; ++ int last_rssi = ATH_RSSI_DUMMY_MARKER; ++ __le16 fc; ++ ++ hdr = (struct ieee80211_hdr *)skb->data; ++ fc = hdr->frame_control; ++ ++ rcu_read_lock(); ++ /* ++ * XXX: use ieee80211_find_sta! This requires quite a bit of work ++ * under the current ath9k virtual wiphy implementation as we have ++ * no way of tying a vif to wiphy. Typically vifs are attached to ++ * at least one sdata of a wiphy on mac80211 but with ath9k virtual ++ * wiphy you'd have to iterate over every wiphy and each sdata. ++ */ ++ sta = ieee80211_find_sta_by_hw(hw, hdr->addr2); ++ if (sta) { ++ an = (struct ath_node *) sta->drv_priv; ++ if (rx_stats->rs_rssi != ATH9K_RSSI_BAD && ++ !rx_stats->rs_moreaggr) ++ ATH_RSSI_LPF(an->last_rssi, rx_stats->rs_rssi); ++ last_rssi = an->last_rssi; ++ } ++ rcu_read_unlock(); ++ ++ if (likely(last_rssi != ATH_RSSI_DUMMY_MARKER)) ++ rx_stats->rs_rssi = ATH_EP_RND(last_rssi, ++ ATH_RSSI_EP_MULTIPLIER); ++ if (rx_stats->rs_rssi < 0) ++ rx_stats->rs_rssi = 0; ++ ++ /* Update Beacon RSSI, this is used by ANI. */ ++ if (ieee80211_is_beacon(fc)) ++ ah->stats.avgbrssi = rx_stats->rs_rssi; ++} ++ ++/* ++ * For Decrypt or Demic errors, we only mark packet status here and always push ++ * up the frame up to let mac80211 handle the actual error case, be it no ++ * decryption key or real decryption error. This let us keep statistics there. ++ */ ++static int ath9k_rx_skb_preprocess(struct ath_common *common, ++ struct ieee80211_hw *hw, ++ struct sk_buff *skb, ++ struct ath_rx_status *rx_stats, ++ struct ieee80211_rx_status *rx_status, ++ bool *decrypt_error) ++{ ++ struct ath_hw *ah = common->ah; ++ ++ memset(rx_status, 0, sizeof(struct ieee80211_rx_status)); ++ ++ /* ++ * everything but the rate is checked here, the rate check is done ++ * separately to avoid doing two lookups for a rate for each frame. ++ */ ++ if (!ath9k_rx_accept(common, skb, rx_status, rx_stats, decrypt_error)) ++ return -EINVAL; ++ ++ ath9k_process_rssi(common, hw, skb, rx_stats); ++ ++ if (ath9k_process_rate(common, hw, rx_stats, rx_status, skb)) ++ return -EINVAL; ++ ++ rx_status->mactime = ath9k_hw_extend_tsf(ah, rx_stats->rs_tstamp); ++ rx_status->band = hw->conf.channel->band; ++ rx_status->freq = hw->conf.channel->center_freq; ++ rx_status->signal = ATH_DEFAULT_NOISE_FLOOR + rx_stats->rs_rssi; ++ rx_status->antenna = rx_stats->rs_antenna; ++ rx_status->flag |= RX_FLAG_TSFT; ++ ++ return 0; ++} ++ ++static void ath9k_rx_skb_postprocess(struct ath_common *common, ++ struct sk_buff *skb, ++ struct ath_rx_status *rx_stats, ++ struct ieee80211_rx_status *rxs, ++ bool decrypt_error) ++{ ++ struct ath_hw *ah = common->ah; ++ struct ieee80211_hdr *hdr; ++ int hdrlen, padpos, padsize; ++ u8 keyix; ++ __le16 fc; ++ ++ /* see if any padding is done by the hw and remove it */ ++ hdr = (struct ieee80211_hdr *) skb->data; ++ hdrlen = ieee80211_get_hdrlen_from_skb(skb); ++ fc = hdr->frame_control; ++ padpos = ath9k_cmn_padpos(hdr->frame_control); ++ ++ /* The MAC header is padded to have 32-bit boundary if the ++ * packet payload is non-zero. The general calculation for ++ * padsize would take into account odd header lengths: ++ * padsize = (4 - padpos % 4) % 4; However, since only ++ * even-length headers are used, padding can only be 0 or 2 ++ * bytes and we can optimize this a bit. In addition, we must ++ * not try to remove padding from short control frames that do ++ * not have payload. */ ++ padsize = padpos & 3; ++ if (padsize && skb->len>=padpos+padsize+FCS_LEN) { ++ memmove(skb->data + padsize, skb->data, padpos); ++ skb_pull(skb, padsize); ++ } ++ ++ keyix = rx_stats->rs_keyix; ++ ++ if (!(keyix == ATH9K_RXKEYIX_INVALID) && !decrypt_error && ++ ieee80211_has_protected(fc)) { ++ rxs->flag |= RX_FLAG_DECRYPTED; ++ } else if (ieee80211_has_protected(fc) ++ && !decrypt_error && skb->len >= hdrlen + 4) { ++ keyix = skb->data[hdrlen + 3] >> 6; ++ ++ if (test_bit(keyix, common->keymap)) ++ rxs->flag |= RX_FLAG_DECRYPTED; ++ } ++ if (ah->sw_mgmt_crypto && ++ (rxs->flag & RX_FLAG_DECRYPTED) && ++ ieee80211_is_mgmt(fc)) ++ /* Use software decrypt for management frames. */ ++ rxs->flag &= ~RX_FLAG_DECRYPTED; ++} + + int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) + { +@@ -880,8 +1139,8 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) + if (flush) + goto requeue; + +- retval = ath9k_cmn_rx_skb_preprocess(common, hw, skb, &rs, +- rxs, &decrypt_error); ++ retval = ath9k_rx_skb_preprocess(common, hw, skb, &rs, ++ rxs, &decrypt_error); + if (retval) + goto requeue; + +@@ -905,8 +1164,8 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) + if (ah->caps.rx_status_len) + skb_pull(skb, ah->caps.rx_status_len); + +- ath9k_cmn_rx_skb_postprocess(common, skb, &rs, +- rxs, decrypt_error); ++ ath9k_rx_skb_postprocess(common, skb, &rs, ++ rxs, decrypt_error); + + /* We will now give hardware our shiny new allocated skb */ + bf->bf_mpdu = requeue_skb; +-- +1.6.3.3 + diff --git a/linux-next-pending/0016-ath9k-Move-driver-specific-structures.patch b/linux-next-pending/0016-ath9k-Move-driver-specific-structures.patch new file mode 100644 index 000000000000..3ad3b369164e --- /dev/null +++ b/linux-next-pending/0016-ath9k-Move-driver-specific-structures.patch @@ -0,0 +1,166 @@ +From af9b87568dbd2c07ac41e0c6ae9037526b15712d Mon Sep 17 00:00:00 2001 +From: Sujith +Date: Thu, 20 May 2010 17:23:19 +0530 +Subject: [PATCH 16/19] ath9k: Move driver specific structures + +A bunch of data structures are present in the +common module, which are internal to ath9k. +Move them to ath9k.h + +Signed-off-by: Sujith +--- + drivers/net/wireless/ath/ath9k/ath9k.h | 63 +++++++++++++++++++++++++++++++ + drivers/net/wireless/ath/ath9k/common.h | 63 ------------------------------- + 2 files changed, 63 insertions(+), 63 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/ath9k.h b/drivers/net/wireless/ath/ath9k/ath9k.h +index fbb7dec..cc6ea42 100644 +--- a/drivers/net/wireless/ath/ath9k/ath9k.h ++++ b/drivers/net/wireless/ath/ath9k/ath9k.h +@@ -206,6 +206,69 @@ struct ath_txq { + u8 txq_tailidx; + }; + ++struct ath_atx_ac { ++ int sched; ++ int qnum; ++ struct list_head list; ++ struct list_head tid_q; ++}; ++ ++struct ath_buf_state { ++ int bfs_nframes; ++ u16 bfs_al; ++ u16 bfs_frmlen; ++ int bfs_seqno; ++ int bfs_tidno; ++ int bfs_retries; ++ u8 bf_type; ++ u32 bfs_keyix; ++ enum ath9k_key_type bfs_keytype; ++}; ++ ++struct ath_buf { ++ struct list_head list; ++ struct ath_buf *bf_lastbf; /* last buf of this unit (a frame or ++ an aggregate) */ ++ struct ath_buf *bf_next; /* next subframe in the aggregate */ ++ struct sk_buff *bf_mpdu; /* enclosing frame structure */ ++ void *bf_desc; /* virtual addr of desc */ ++ dma_addr_t bf_daddr; /* physical addr of desc */ ++ dma_addr_t bf_buf_addr; /* physical addr of data buffer */ ++ bool bf_stale; ++ bool bf_isnullfunc; ++ bool bf_tx_aborted; ++ u16 bf_flags; ++ struct ath_buf_state bf_state; ++ dma_addr_t bf_dmacontext; ++ struct ath_wiphy *aphy; ++}; ++ ++struct ath_atx_tid { ++ struct list_head list; ++ struct list_head buf_q; ++ struct ath_node *an; ++ struct ath_atx_ac *ac; ++ struct ath_buf *tx_buf[ATH_TID_MAX_BUFS]; ++ u16 seq_start; ++ u16 seq_next; ++ u16 baw_size; ++ int tidno; ++ int baw_head; /* first un-acked tx buffer */ ++ int baw_tail; /* next unused tx buffer slot */ ++ int sched; ++ int paused; ++ u8 state; ++}; ++ ++struct ath_node { ++ struct ath_common *common; ++ struct ath_atx_tid tid[WME_NUM_TID]; ++ struct ath_atx_ac ac[WME_NUM_AC]; ++ u16 maxampdu; ++ u8 mpdudensity; ++ int last_rssi; ++}; ++ + #define AGGR_CLEANUP BIT(1) + #define AGGR_ADDBA_COMPLETE BIT(2) + #define AGGR_ADDBA_PROGRESS BIT(3) +diff --git a/drivers/net/wireless/ath/ath9k/common.h b/drivers/net/wireless/ath/ath9k/common.h +index 1e6f360..283cca8 100644 +--- a/drivers/net/wireless/ath/ath9k/common.h ++++ b/drivers/net/wireless/ath/ath9k/common.h +@@ -52,69 +52,6 @@ + #define ATH_EP_RND(x, mul) \ + ((((x)%(mul)) >= ((mul)/2)) ? ((x) + ((mul) - 1)) / (mul) : (x)/(mul)) + +-struct ath_atx_ac { +- int sched; +- int qnum; +- struct list_head list; +- struct list_head tid_q; +-}; +- +-struct ath_buf_state { +- int bfs_nframes; +- u16 bfs_al; +- u16 bfs_frmlen; +- int bfs_seqno; +- int bfs_tidno; +- int bfs_retries; +- u8 bf_type; +- u32 bfs_keyix; +- enum ath9k_key_type bfs_keytype; +-}; +- +-struct ath_buf { +- struct list_head list; +- struct ath_buf *bf_lastbf; /* last buf of this unit (a frame or +- an aggregate) */ +- struct ath_buf *bf_next; /* next subframe in the aggregate */ +- struct sk_buff *bf_mpdu; /* enclosing frame structure */ +- void *bf_desc; /* virtual addr of desc */ +- dma_addr_t bf_daddr; /* physical addr of desc */ +- dma_addr_t bf_buf_addr; /* physical addr of data buffer */ +- bool bf_stale; +- bool bf_isnullfunc; +- bool bf_tx_aborted; +- u16 bf_flags; +- struct ath_buf_state bf_state; +- dma_addr_t bf_dmacontext; +- struct ath_wiphy *aphy; +-}; +- +-struct ath_atx_tid { +- struct list_head list; +- struct list_head buf_q; +- struct ath_node *an; +- struct ath_atx_ac *ac; +- struct ath_buf *tx_buf[ATH_TID_MAX_BUFS]; +- u16 seq_start; +- u16 seq_next; +- u16 baw_size; +- int tidno; +- int baw_head; /* first un-acked tx buffer */ +- int baw_tail; /* next unused tx buffer slot */ +- int sched; +- int paused; +- u8 state; +-}; +- +-struct ath_node { +- struct ath_common *common; +- struct ath_atx_tid tid[WME_NUM_TID]; +- struct ath_atx_ac ac[WME_NUM_AC]; +- u16 maxampdu; +- u8 mpdudensity; +- int last_rssi; +-}; +- + int ath9k_cmn_padpos(__le16 frame_control); + int ath9k_cmn_get_hw_crypto_keytype(struct sk_buff *skb); + void ath9k_cmn_update_ichannel(struct ieee80211_hw *hw, +-- +1.6.3.3 + diff --git a/linux-next-pending/0017-ath9k-Clean-up-few-function-parameters-in-recv.c.patch b/linux-next-pending/0017-ath9k-Clean-up-few-function-parameters-in-recv.c.patch new file mode 100644 index 000000000000..cde25abeef7c --- /dev/null +++ b/linux-next-pending/0017-ath9k-Clean-up-few-function-parameters-in-recv.c.patch @@ -0,0 +1,110 @@ +From fead6bb5090ec7db68831d6bd9503dec2f10057f Mon Sep 17 00:00:00 2001 +From: Vasanthakumar Thiagarajan +Date: Thu, 20 May 2010 14:34:46 -0700 +Subject: [PATCH 17/19] ath9k: Clean up few function parameters in recv.c + +ath9k_rx_skb_preprocess() needs only ieee80211 frame header, +pass only frame headers instead of skb to that function. Also +remove ineffective frame dump in ath9k_process_rate(). + +Signed-off-by: Vasanthakumar Thiagarajan +--- + drivers/net/wireless/ath/ath9k/recv.c | 23 ++++++++--------------- + 1 files changed, 8 insertions(+), 15 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c +index d855155..512b3f0 100644 +--- a/drivers/net/wireless/ath/ath9k/recv.c ++++ b/drivers/net/wireless/ath/ath9k/recv.c +@@ -820,16 +820,14 @@ static struct ath_buf *ath_get_next_rx_buf(struct ath_softc *sc, + + /* Assumes you've already done the endian to CPU conversion */ + static bool ath9k_rx_accept(struct ath_common *common, +- struct sk_buff *skb, ++ struct ieee80211_hdr *hdr, + struct ieee80211_rx_status *rxs, + struct ath_rx_status *rx_stats, + bool *decrypt_error) + { + struct ath_hw *ah = common->ah; +- struct ieee80211_hdr *hdr; + __le16 fc; + +- hdr = (struct ieee80211_hdr *) skb->data; + fc = hdr->frame_control; + + if (!rx_stats->rs_datalen) +@@ -900,8 +898,7 @@ static bool ath9k_rx_accept(struct ath_common *common, + static int ath9k_process_rate(struct ath_common *common, + struct ieee80211_hw *hw, + struct ath_rx_status *rx_stats, +- struct ieee80211_rx_status *rxs, +- struct sk_buff *skb) ++ struct ieee80211_rx_status *rxs) + { + struct ieee80211_supported_band *sband; + enum ieee80211_band band; +@@ -939,25 +936,21 @@ static int ath9k_process_rate(struct ath_common *common, + */ + ath_print(common, ATH_DBG_XMIT, "unsupported hw bitrate detected " + "0x%02x using 1 Mbit\n", rx_stats->rs_rate); +- if ((common->debug_mask & ATH_DBG_XMIT)) +- print_hex_dump_bytes("", DUMP_PREFIX_NONE, skb->data, skb->len); + + return -EINVAL; + } + + static void ath9k_process_rssi(struct ath_common *common, + struct ieee80211_hw *hw, +- struct sk_buff *skb, ++ struct ieee80211_hdr *hdr, + struct ath_rx_status *rx_stats) + { + struct ath_hw *ah = common->ah; + struct ieee80211_sta *sta; +- struct ieee80211_hdr *hdr; + struct ath_node *an; + int last_rssi = ATH_RSSI_DUMMY_MARKER; + __le16 fc; + +- hdr = (struct ieee80211_hdr *)skb->data; + fc = hdr->frame_control; + + rcu_read_lock(); +@@ -996,7 +989,7 @@ static void ath9k_process_rssi(struct ath_common *common, + */ + static int ath9k_rx_skb_preprocess(struct ath_common *common, + struct ieee80211_hw *hw, +- struct sk_buff *skb, ++ struct ieee80211_hdr *hdr, + struct ath_rx_status *rx_stats, + struct ieee80211_rx_status *rx_status, + bool *decrypt_error) +@@ -1009,12 +1002,12 @@ static int ath9k_rx_skb_preprocess(struct ath_common *common, + * everything but the rate is checked here, the rate check is done + * separately to avoid doing two lookups for a rate for each frame. + */ +- if (!ath9k_rx_accept(common, skb, rx_status, rx_stats, decrypt_error)) ++ if (!ath9k_rx_accept(common, hdr, rx_status, rx_stats, decrypt_error)) + return -EINVAL; + +- ath9k_process_rssi(common, hw, skb, rx_stats); ++ ath9k_process_rssi(common, hw, hdr, rx_stats); + +- if (ath9k_process_rate(common, hw, rx_stats, rx_status, skb)) ++ if (ath9k_process_rate(common, hw, rx_stats, rx_status)) + return -EINVAL; + + rx_status->mactime = ath9k_hw_extend_tsf(ah, rx_stats->rs_tstamp); +@@ -1139,7 +1132,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) + if (flush) + goto requeue; + +- retval = ath9k_rx_skb_preprocess(common, hw, skb, &rs, ++ retval = ath9k_rx_skb_preprocess(common, hw, hdr, &rs, + rxs, &decrypt_error); + if (retval) + goto requeue; +-- +1.6.3.3 + diff --git a/linux-next-pending/0018-ath9k-Fix-bug-in-accessing-skb-data-of-rx-frame-for-.patch b/linux-next-pending/0018-ath9k-Fix-bug-in-accessing-skb-data-of-rx-frame-for-.patch new file mode 100644 index 000000000000..857ed35e775b --- /dev/null +++ b/linux-next-pending/0018-ath9k-Fix-bug-in-accessing-skb-data-of-rx-frame-for-.patch @@ -0,0 +1,37 @@ +From b5a8d95359c518498d91d0c28673060d58d62d44 Mon Sep 17 00:00:00 2001 +From: Vasanthakumar Thiagarajan +Date: Thu, 20 May 2010 14:47:28 -0700 +Subject: [PATCH 18/19] ath9k: Fix bug in accessing skb->data of rx frame for edma + +Skip the rx status portion in skb->data before accessing ieee80211 +frame header. + +Signed-off-by: Vasanthakumar Thiagarajan +--- + drivers/net/wireless/ath/ath9k/recv.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c +index 512b3f0..95f1622 100644 +--- a/drivers/net/wireless/ath/ath9k/recv.c ++++ b/drivers/net/wireless/ath/ath9k/recv.c +@@ -1091,6 +1091,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) + enum ath9k_rx_qtype qtype; + bool edma = !!(ah->caps.hw_caps & ATH9K_HW_CAP_EDMA); + int dma_type; ++ u8 rx_status_len = ah->caps.rx_status_len; + + if (edma) + dma_type = DMA_FROM_DEVICE; +@@ -1118,7 +1119,7 @@ int ath_rx_tasklet(struct ath_softc *sc, int flush, bool hp) + if (!skb) + continue; + +- hdr = (struct ieee80211_hdr *) skb->data; ++ hdr = (struct ieee80211_hdr *) (skb->data + rx_status_len); + rxs = IEEE80211_SKB_RXCB(skb); + + hw = ath_get_virt_hw(sc, hdr); +-- +1.6.3.3 + diff --git a/linux-next-pending/0019-ath9k-Fix-bug-in-validating-received-data-length-for.patch b/linux-next-pending/0019-ath9k-Fix-bug-in-validating-received-data-length-for.patch new file mode 100644 index 000000000000..39be4035a333 --- /dev/null +++ b/linux-next-pending/0019-ath9k-Fix-bug-in-validating-received-data-length-for.patch @@ -0,0 +1,37 @@ +From 4532fc82246270aba6d72ed89c76304652c8ddfe Mon Sep 17 00:00:00 2001 +From: Vasanthakumar Thiagarajan +Date: Thu, 20 May 2010 14:47:38 -0700 +Subject: [PATCH 19/19] ath9k: Fix bug in validating received data length for edma + +The rx status length should also be taken into account while +validating the length of a received frame. + +Signed-off-by: Vasanthakumar Thiagarajan +--- + drivers/net/wireless/ath/ath9k/recv.c | 3 ++- + 1 files changed, 2 insertions(+), 1 deletions(-) + +diff --git a/drivers/net/wireless/ath/ath9k/recv.c b/drivers/net/wireless/ath/ath9k/recv.c +index 95f1622..fc15b4b 100644 +--- a/drivers/net/wireless/ath/ath9k/recv.c ++++ b/drivers/net/wireless/ath/ath9k/recv.c +@@ -827,6 +827,7 @@ static bool ath9k_rx_accept(struct ath_common *common, + { + struct ath_hw *ah = common->ah; + __le16 fc; ++ u8 rx_status_len = ah->caps.rx_status_len; + + fc = hdr->frame_control; + +@@ -837,7 +838,7 @@ static bool ath9k_rx_accept(struct ath_common *common, + * we can take a hint that hardware corrupted it, so ignore + * those frames. + */ +- if (rx_stats->rs_datalen > common->rx_bufsize) ++ if (rx_stats->rs_datalen > (common->rx_bufsize - rx_status_len)) + return false; + + /* +-- +1.6.3.3 + diff --git a/linux-next-pending/README b/linux-next-pending/README index cc531b22a96f..c80d86870998 100644 --- a/linux-next-pending/README +++ b/linux-next-pending/README @@ -7,7 +7,8 @@ in this directory. The requirement is your patches must have been posted to a public mailing list for the subsystem you are working on. Each patch you add here must have a really good explanation on the top of the file which clarifies why the -patch has not yet been merged. +patch has not yet been merged OR specify it on the commit log +when you add it on compat-wireless. We try to avoid having patch files because but we understand if you might because you need to test code posted but not yet