1 /*- 2 * Copyright (c) 2017 Kevin Lo <kevlo@FreeBSD.org> 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions 7 * are met: 8 * 1. Redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer. 10 * 2. Redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the 12 * documentation and/or other materials provided with the distribution. 13 * 14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24 * SUCH DAMAGE. 25 * 26 * $FreeBSD$ 27 */ 28 29 #ifndef R92E_PRIV_H 30 #define R92E_PRIV_H 31 32 /* 33 * MAC initialization values. 34 */ 35 static const struct rtwn_mac_prog rtl8192eu_mac[] = { 36 { 0x011, 0xeb }, { 0x012, 0x07 }, { 0x014, 0x75 }, { 0x303, 0xa7 }, 37 { 0x428, 0x0a }, { 0x429, 0x10 }, { 0x430, 0x00 }, { 0x431, 0x00 }, 38 { 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 }, 39 { 0x436, 0x07 }, { 0x437, 0x08 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, 40 { 0x43e, 0x07 }, { 0x43f, 0x08 }, { 0x440, 0x5d }, { 0x441, 0x01 }, 41 { 0x442, 0x00 }, { 0x444, 0x10 }, { 0x445, 0x00 }, { 0x446, 0x00 }, 42 { 0x447, 0x00 }, { 0x448, 0x00 }, { 0x449, 0xf0 }, { 0x44a, 0x0f }, 43 { 0x44b, 0x3e }, { 0x44c, 0x10 }, { 0x44d, 0x00 }, { 0x44e, 0x00 }, 44 { 0x44f, 0x00 }, { 0x450, 0x00 }, { 0x451, 0xf0 }, { 0x452, 0x0f }, 45 { 0x453, 0x00 }, { 0x456, 0x5e }, { 0x460, 0x66 }, { 0x461, 0x66 }, 46 { 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff }, { 0x4cd, 0xff }, 47 { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, { 0x502, 0x2f }, 48 { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, { 0x506, 0x5e }, 49 { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, { 0x50a, 0x5e }, 50 { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, { 0x50e, 0x00 }, 51 { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, { 0x516, 0x0a }, 52 { 0x525, 0x4f }, { 0x540, 0x12 }, { 0x541, 0x64 }, { 0x550, 0x10 }, 53 { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55c, 0x50 }, { 0x55d, 0xff }, 54 { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, { 0x620, 0xff }, 55 { 0x621, 0xff }, { 0x622, 0xff }, { 0x623, 0xff }, { 0x624, 0xff }, 56 { 0x625, 0xff }, { 0x626, 0xff }, { 0x627, 0xff }, { 0x638, 0x50 }, 57 { 0x63c, 0x0a }, { 0x63d, 0x0a }, { 0x63e, 0x0e }, { 0x63f, 0x0e }, 58 { 0x640, 0x40 }, { 0x642, 0x40 }, { 0x643, 0x00 }, { 0x652, 0xc8 }, 59 { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, { 0x702, 0x65 }, 60 { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, { 0x70a, 0x65 }, 61 { 0x70b, 0x87 } 62 }; 63 64 65 /* 66 * Baseband initialization values. 67 */ 68 static const uint16_t rtl8192eu_bb_regs[] = { 69 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x81c, 0x820, 70 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 0x840, 0x844, 71 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 0x864, 0x868, 72 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884, 0x888, 0x88c, 73 0x890, 0x894, 0x898, 0x900, 0x904, 0x908, 0x90c, 0x910, 0x914, 74 0x918, 0x91c, 0x924, 0x928, 0x92c, 0x930, 0x934, 0x938, 0x93c, 75 0x940, 0x944, 0x94c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 76 0xa18, 0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xa78, 77 0xa7c, 0xa80, 0xb38, 0xc00, 0xc04, 0xc08, 0xc0c, 0xc10, 0xc14, 78 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34, 0xc38, 79 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58, 0xc5c, 80 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c, 0xc80, 81 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 0xc9c, 0xca0, 0xca4, 82 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc, 0xcc0, 0xcc4, 0xcc8, 83 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 0xce0, 0xce4, 0xce8, 0xcec, 84 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 0xd14, 0xd18, 0xd1c, 0xd2c, 85 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48, 0xd4c, 0xd50, 86 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c, 0xd70, 0xd74, 87 0xd78, 0xd80, 0xd84, 0xd88, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 88 0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 89 0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 90 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 91 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee4, 0xee8, 0xf14, 0xf4c, 92 0xf00 93 }; 94 95 static const uint32_t rtl8192eu_bb_vals[] = { 96 0x80040000, 0x00000003, 0x0000fc00, 0x0000000a, 0x10001331, 97 0x020c3d10, 0x02220385, 0x00000000, 0x01000100, 0x00390204, 98 0x01000100, 0x00390204, 0x32323232, 0x30303030, 0x30303030, 99 0x30303030, 0x00010000, 0x00010000, 0x28282828, 0x28282828, 100 0x00000000, 0x00000000, 0x009a009a, 0x01000014, 0x66f60000, 101 0x061f0000, 0x30303030, 0x30303030, 0x00000000, 0x55004200, 102 0x08080808, 0x00000000, 0xb0000c1c, 0x00000001, 0x00000000, 103 0xcc0000c0, 0x00000800, 0xfffffffe, 0x40302010, 0x00000000, 104 0x00000023, 0x00000000, 0x81121313, 0x806c0001, 0x00000001, 105 0x00000000, 0x00010000, 0x00000001, 0x00000000, 0x00000000, 106 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 107 0x00000000, 0x00000008, 0x00d0c7c8, 0x81ff000c, 0x8c838300, 108 0x2e68120f, 0x95009b78, 0x1114d028, 0x00881117, 0x89140f00, 109 0x1a1b0000, 0x090e1317, 0x00000204, 0x00d30000, 0x101fff00, 110 0x00000007, 0x00000900, 0x225b0606, 0x218075b1, 0x00000000, 111 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 112 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 113 0x00000000, 0x00000000, 0x69e9ac47, 0x469652af, 0x49795994, 114 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 115 0x00340020, 0x0080801f, 0x00000020, 0x00248492, 0x00000000, 116 0x7112848b, 0x47c00bff, 0x00000036, 0x00000600, 0x02013169, 117 0x0000001f, 0x00b91612, 0x40000100, 0x21f60000, 0x40000100, 118 0xa0e40000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 119 0x00000000, 0x000300a0, 0x00000000, 0x00000000, 0x00000000, 120 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 121 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 122 0x00766932, 0x00222222, 0x00040000, 0x77644302, 0x2f97d40c, 123 0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333, 124 0x3333bc43, 0x7a8f5b6b, 0x0000007f, 0xcc979975, 0x00000000, 125 0x80608000, 0x00000000, 0x00127353, 0x00000000, 0x00000000, 126 0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000282, 127 0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 128 0x1812362e, 0x322c2220, 0x000e3c24, 0x01081008, 0x00000800, 129 0xf0b50000, 0x30303030, 0x30303030, 0x03903030, 0x30303030, 130 0x30303030, 0x30303030, 0x30303030, 0x00000000, 0x1000dc1f, 131 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 0x01004800, 132 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102, 133 0x28160d05, 0x00000008, 0x0fc05656, 0x03c09696, 0x03c09696, 134 0x0c005656, 0x0c005656, 0x0c005656, 0x0c005656, 0x03c09696, 135 0x0c005656, 0x03c09696, 0x03c09696, 0x03c09696, 0x03c09696, 136 0x0000d6d6, 0x0000d6d6, 0x0fc01616, 0xb0000c1c, 0x00000001, 137 0x00000003, 0x00000000, 0x00000300 138 }; 139 140 static const struct rtwn_bb_prog rtl8192eu_bb[] = { 141 { 142 nitems(rtl8192eu_bb_regs), 143 rtl8192eu_bb_regs, 144 rtl8192eu_bb_vals, 145 { 0 }, 146 NULL 147 } 148 }; 149 150 151 static const uint32_t rtl8192eu_agc_vals[] = { 152 0xfb000001, 0xfb010001, 0xfb020001, 0xfb030001, 0xfb040001, 153 0xfb050001, 0xfa060001, 0xf9070001, 0xf8080001, 0xf7090001, 154 0xf60a0001, 0xf50b0001, 0xf40c0001, 0xf30d0001, 0xf20e0001, 155 0xf10f0001, 0xf0100001, 0xef110001, 0xee120001, 0xed130001, 156 0xec140001, 0xeb150001, 0xea160001, 0xe9170001, 0xe8180001, 157 0xe7190001, 0xc81a0001, 0xc71b0001, 0xc61c0001, 0x071d0001, 158 0x061e0001, 0x051f0001, 0x04200001, 0x03210001, 0xaa220001, 159 0xa9230001, 0xa8240001, 0xa7250001, 0xa6260001, 0x85270001, 160 0x84280001, 0x83290001, 0x252a0001, 0x242b0001, 0x232c0001, 161 0x222d0001, 0x672e0001, 0x662f0001, 0x65300001, 0x64310001, 162 0x63320001, 0x62330001, 0x61340001, 0x45350001, 0x44360001, 163 0x43370001, 0x42380001, 0x41390001, 0x403a0001, 0x403b0001, 164 0x403c0001, 0x403d0001, 0x403e0001, 0x403f0001, 0xfb400001, 165 0xfb410001, 0xfb420001, 0xfb430001, 0xfb440001, 0xfb450001, 166 0xfa460001, 0xf9470001, 0xf8480001, 0xf7490001, 0xf64a0001, 167 0xf54b0001, 0xf44c0001, 0xf34d0001, 0xf24e0001, 0xf14f0001, 168 0xf0500001, 0xef510001, 0xee520001, 0xed530001, 0xec540001, 169 0xeb550001, 0xea560001, 0xe9570001, 0xe8580001, 0xe7590001, 170 0xe65a0001, 0xe55b0001, 0xe45c0001, 0xe35d0001, 0xe25e0001, 171 0xe15f0001, 0x8a600001, 0x89610001, 0x88620001, 0x87630001, 172 0x86640001, 0x85650001, 0x84660001, 0x83670001, 0x82680001, 173 0x6b690001, 0x6a6a0001, 0x696b0001, 0x686c0001, 0x676d0001, 174 0x666e0001, 0x656f0001, 0x64700001, 0x63710001, 0x62720001, 175 0x61730001, 0x49740001, 0x48750001, 0x47760001, 0x46770001, 176 0x45780001, 0x44790001, 0x437a0001, 0x427b0001, 0x417c0001, 177 0x407d0001, 0x407e0001, 0x407f0001 178 }; 179 180 static const struct rtwn_agc_prog rtl8192eu_agc[] = { 181 { 182 nitems(rtl8192eu_agc_vals), 183 rtl8192eu_agc_vals, 184 { 0 }, 185 NULL 186 } 187 }; 188 189 /* 190 * RF initialization values. 191 */ 192 static const uint8_t rtl8192eu_rf0_regs[] = { 193 0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f, 0x3f, 194 0x42, 0x57, 0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 195 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbf, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 196 0xc7, 0xc8, 0xc9, 0xca, 0xdf, 0xef, 0x51, 0x52, 0x53, 0x56, 0x35, 197 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x18, 0x5a, 0x19, 0x34, 0x34, 198 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x00, 0x84, 199 0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 200 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xef, 201 0x18, 0x1e, 0x1f, 0x00 202 }, rtl8192eu_rf1_regs[] = { 203 0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f, 0x3f, 204 0x42, 0x57, 0x58, 0x67, 0x7f, 0x81, 0x83, 0xdf, 0xef, 0x51, 0x52, 205 0x53, 0x56, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x18, 0x5a, 206 0x19, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 207 0x34, 0x00, 0x84, 0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b, 0x3b, 0x3b, 208 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 209 0x3b, 0x3b, 0xef, 0x00, 0x1e, 0x1f, 0x00 210 }; 211 212 static const uint32_t rtl8192eu_rf0_vals[] = { 213 0x00082, 0x3fc00, 0x30000, 0x08400, 0x00407, 0x00012, 0x00064, 214 0x80009, 0x00880, 0x1a060, 0x00000, 0x060c0, 0xd0000, 0xbe180, 215 0x01552, 0x00000, 0xff9f1, 0x55418, 0x8cc00, 0x43083, 0x08166, 216 0x0803e, 0x1c69f, 0x0407f, 0x80001, 0x40001, 0x00400, 0xc0000, 217 0x02400, 0x00009, 0x40c91, 0x99999, 0x000a3, 0x88820, 0x76c06, 218 0x00000, 0x80000, 0x00180, 0x001a0, 0x69545, 0x7e45e, 0x00071, 219 0x51ff3, 0x000a8, 0x001e2, 0x002a8, 0x01c24, 0x09c24, 0x11c24, 220 0x19c24, 0x00c07, 0x48000, 0x739d0, 0x0add7, 0x09dd4, 0x08dd1, 221 0x07dce, 0x06dcb, 0x05dc8, 0x04dc5, 0x034cc, 0x0244f, 0x0144c, 222 0x00014, 0x30159, 0x68180, 0x0014e, 0x48e00, 0x65540, 0x88000, 223 0x020a0, 0xf02b0, 0xef7b0, 0xd4fb0, 0xcf060, 0xb0090, 0xa0080, 224 0x90080, 0x8f780, 0x78730, 0x60fb0, 0x5ffa0, 0x40620, 0x37090, 225 0x20080, 0x1f060, 0x0ffb0, 0x000a0, 0x0fc07, 0x00001, 0x80000, 226 0x33e70 227 }, rtl8192eu_rf1_vals[] = { 228 0x00082, 0x3fc00, 0x30000, 0x08400, 0x00407, 0x00012, 0x00064, 229 0x80009, 0x00880, 0x1a060, 0x00000, 0x060c0, 0xd0000, 0xbe180, 230 0x01552, 0x00082, 0x3f000, 0x00000, 0x00180, 0x001a0, 0x69545, 231 0x7e42e, 0x00071, 0x51ff3, 0x000a8, 0x001e0, 0x002a8, 0x01ca8, 232 0x09c24, 0x11c24, 0x19c24, 0x00c07, 0x48000, 0x739d0, 0x0add7, 233 0x09dd4, 0x08dd1, 0x07dce, 0x06dcb, 0x05dc8, 0x04dc5, 0x034cc, 234 0x0244f, 0x0144c, 0x00014, 0x30159, 0x68180, 0x000ce, 0x48a00, 235 0x65540, 0x88000, 0x020a0, 0xf02b0, 0xef7b0, 0xd4fb0, 0xcf060, 236 0xb0090, 0xa0080, 0x90080, 0x8f780, 0x78730, 0x60fb0, 0x5ffa0, 237 0x40620, 0x37090, 0x20080, 0x1f060, 0x0ffb0, 0x000a0, 0x10159, 238 0x00001, 0x80000, 0x33e70 239 }; 240 241 static const struct rtwn_rf_prog rtl8192eu_rf[] = { 242 /* RF chain 0. */ 243 { 244 nitems(rtl8192eu_rf0_regs), 245 rtl8192eu_rf0_regs, 246 rtl8192eu_rf0_vals, 247 { 0 }, 248 NULL 249 }, 250 { 0, NULL, NULL, { 0 }, NULL }, 251 /* RF chain 1. */ 252 { 253 nitems(rtl8192eu_rf1_regs), 254 rtl8192eu_rf1_regs, 255 rtl8192eu_rf1_vals, 256 { 0 }, 257 NULL 258 }, 259 { 0, NULL, NULL, { 0 }, NULL } 260 }; 261 262 #endif /* R92E_PRIV_H */ 263