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 * Baseband initialization values. 66 */ 67 static const uint16_t rtl8192eu_bb_regs[] = { 68 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x81c, 0x820, 69 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 0x840, 0x844, 70 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 0x864, 0x868, 71 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884, 0x888, 0x88c, 72 0x890, 0x894, 0x898, 0x900, 0x904, 0x908, 0x90c, 0x910, 0x914, 73 0x918, 0x91c, 0x924, 0x928, 0x92c, 0x930, 0x934, 0x938, 0x93c, 74 0x940, 0x944, 0x94c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 75 0xa18, 0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xa78, 76 0xa7c, 0xa80, 0xb38, 0xc00, 0xc04, 0xc08, 0xc0c, 0xc10, 0xc14, 77 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34, 0xc38, 78 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58, 0xc5c, 79 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c, 0xc80, 80 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 0xc9c, 0xca0, 0xca4, 81 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc, 0xcc0, 0xcc4, 0xcc8, 82 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 0xce0, 0xce4, 0xce8, 0xcec, 83 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 0xd14, 0xd18, 0xd1c, 0xd2c, 84 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48, 0xd4c, 0xd50, 85 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c, 0xd70, 0xd74, 86 0xd78, 0xd80, 0xd84, 0xd88, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 87 0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 88 0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 89 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 90 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee4, 0xee8, 0xf14, 0xf4c, 91 0xf00 92 }; 93 94 static const uint32_t rtl8192eu_bb_vals[] = { 95 0x80040000, 0x00000003, 0x0000fc00, 0x0000000a, 0x10001331, 96 0x020c3d10, 0x02220385, 0x00000000, 0x01000100, 0x00390204, 97 0x01000100, 0x00390204, 0x32323232, 0x30303030, 0x30303030, 98 0x30303030, 0x00010000, 0x00010000, 0x28282828, 0x28282828, 99 0x00000000, 0x00000000, 0x009a009a, 0x01000014, 0x66f60000, 100 0x061f0000, 0x30303030, 0x30303030, 0x00000000, 0x55004200, 101 0x08080808, 0x00000000, 0xb0000c1c, 0x00000001, 0x00000000, 102 0xcc0000c0, 0x00000800, 0xfffffffe, 0x40302010, 0x00000000, 103 0x00000023, 0x00000000, 0x81121313, 0x806c0001, 0x00000001, 104 0x00000000, 0x00010000, 0x00000001, 0x00000000, 0x00000000, 105 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 106 0x00000000, 0x00000008, 0x00d0c7c8, 0x81ff000c, 0x8c838300, 107 0x2e68120f, 0x95009b78, 0x1114d028, 0x00881117, 0x89140f00, 108 0x1a1b0000, 0x090e1317, 0x00000204, 0x00d30000, 0x101fff00, 109 0x00000007, 0x00000900, 0x225b0606, 0x218075b1, 0x00000000, 110 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 111 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 112 0x00000000, 0x00000000, 0x69e9ac47, 0x469652af, 0x49795994, 113 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 114 0x00340020, 0x0080801f, 0x00000020, 0x00248492, 0x00000000, 115 0x7112848b, 0x47c00bff, 0x00000036, 0x00000600, 0x02013169, 116 0x0000001f, 0x00b91612, 0x40000100, 0x21f60000, 0x40000100, 117 0xa0e40000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 118 0x00000000, 0x000300a0, 0x00000000, 0x00000000, 0x00000000, 119 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 120 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 121 0x00766932, 0x00222222, 0x00040000, 0x77644302, 0x2f97d40c, 122 0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333, 123 0x3333bc43, 0x7a8f5b6b, 0x0000007f, 0xcc979975, 0x00000000, 124 0x80608000, 0x00000000, 0x00127353, 0x00000000, 0x00000000, 125 0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000282, 126 0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 127 0x1812362e, 0x322c2220, 0x000e3c24, 0x01081008, 0x00000800, 128 0xf0b50000, 0x30303030, 0x30303030, 0x03903030, 0x30303030, 129 0x30303030, 0x30303030, 0x30303030, 0x00000000, 0x1000dc1f, 130 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 0x01004800, 131 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102, 132 0x28160d05, 0x00000008, 0x0fc05656, 0x03c09696, 0x03c09696, 133 0x0c005656, 0x0c005656, 0x0c005656, 0x0c005656, 0x03c09696, 134 0x0c005656, 0x03c09696, 0x03c09696, 0x03c09696, 0x03c09696, 135 0x0000d6d6, 0x0000d6d6, 0x0fc01616, 0xb0000c1c, 0x00000001, 136 0x00000003, 0x00000000, 0x00000300 137 }; 138 139 static const struct rtwn_bb_prog rtl8192eu_bb[] = { 140 { 141 nitems(rtl8192eu_bb_regs), 142 rtl8192eu_bb_regs, 143 rtl8192eu_bb_vals, 144 { 0 }, 145 NULL 146 } 147 }; 148 149 static const uint32_t rtl8192eu_agc_vals[] = { 150 0xfb000001, 0xfb010001, 0xfb020001, 0xfb030001, 0xfb040001, 151 0xfb050001, 0xfa060001, 0xf9070001, 0xf8080001, 0xf7090001, 152 0xf60a0001, 0xf50b0001, 0xf40c0001, 0xf30d0001, 0xf20e0001, 153 0xf10f0001, 0xf0100001, 0xef110001, 0xee120001, 0xed130001, 154 0xec140001, 0xeb150001, 0xea160001, 0xe9170001, 0xe8180001, 155 0xe7190001, 0xc81a0001, 0xc71b0001, 0xc61c0001, 0x071d0001, 156 0x061e0001, 0x051f0001, 0x04200001, 0x03210001, 0xaa220001, 157 0xa9230001, 0xa8240001, 0xa7250001, 0xa6260001, 0x85270001, 158 0x84280001, 0x83290001, 0x252a0001, 0x242b0001, 0x232c0001, 159 0x222d0001, 0x672e0001, 0x662f0001, 0x65300001, 0x64310001, 160 0x63320001, 0x62330001, 0x61340001, 0x45350001, 0x44360001, 161 0x43370001, 0x42380001, 0x41390001, 0x403a0001, 0x403b0001, 162 0x403c0001, 0x403d0001, 0x403e0001, 0x403f0001, 0xfb400001, 163 0xfb410001, 0xfb420001, 0xfb430001, 0xfb440001, 0xfb450001, 164 0xfa460001, 0xf9470001, 0xf8480001, 0xf7490001, 0xf64a0001, 165 0xf54b0001, 0xf44c0001, 0xf34d0001, 0xf24e0001, 0xf14f0001, 166 0xf0500001, 0xef510001, 0xee520001, 0xed530001, 0xec540001, 167 0xeb550001, 0xea560001, 0xe9570001, 0xe8580001, 0xe7590001, 168 0xe65a0001, 0xe55b0001, 0xe45c0001, 0xe35d0001, 0xe25e0001, 169 0xe15f0001, 0x8a600001, 0x89610001, 0x88620001, 0x87630001, 170 0x86640001, 0x85650001, 0x84660001, 0x83670001, 0x82680001, 171 0x6b690001, 0x6a6a0001, 0x696b0001, 0x686c0001, 0x676d0001, 172 0x666e0001, 0x656f0001, 0x64700001, 0x63710001, 0x62720001, 173 0x61730001, 0x49740001, 0x48750001, 0x47760001, 0x46770001, 174 0x45780001, 0x44790001, 0x437a0001, 0x427b0001, 0x417c0001, 175 0x407d0001, 0x407e0001, 0x407f0001 176 }; 177 178 static const struct rtwn_agc_prog rtl8192eu_agc[] = { 179 { 180 nitems(rtl8192eu_agc_vals), 181 rtl8192eu_agc_vals, 182 { 0 }, 183 NULL 184 } 185 }; 186 187 /* 188 * RF initialization values. 189 */ 190 static const uint8_t rtl8192eu_rf0_regs[] = { 191 0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f, 0x3f, 192 0x42, 0x57, 0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4, 0xb5, 0xb6, 193 0xb7, 0xb8, 0xb9, 0xba, 0xbb, 0xbf, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 194 0xc7, 0xc8, 0xc9, 0xca, 0xdf, 0xef, 0x51, 0x52, 0x53, 0x56, 0x35, 195 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x18, 0x5a, 0x19, 0x34, 0x34, 196 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x00, 0x84, 197 0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 198 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xef, 199 0x18, 0x1e, 0x1f, 0x00 200 }, rtl8192eu_rf1_regs[] = { 201 0x7f, 0x81, 0x00, 0x08, 0x18, 0x19, 0x1b, 0x1e, 0x1f, 0x2f, 0x3f, 202 0x42, 0x57, 0x58, 0x67, 0x7f, 0x81, 0x83, 0xdf, 0xef, 0x51, 0x52, 203 0x53, 0x56, 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0x18, 0x5a, 204 0x19, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 205 0x34, 0x00, 0x84, 0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b, 0x3b, 0x3b, 206 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 207 0x3b, 0x3b, 0xef, 0x00, 0x1e, 0x1f, 0x00 208 }; 209 210 static const uint32_t rtl8192eu_rf0_vals[] = { 211 0x00082, 0x3fc00, 0x30000, 0x08400, 0x00407, 0x00012, 0x00064, 212 0x80009, 0x00880, 0x1a060, 0x00000, 0x060c0, 0xd0000, 0xbe180, 213 0x01552, 0x00000, 0xff9f1, 0x55418, 0x8cc00, 0x43083, 0x08166, 214 0x0803e, 0x1c69f, 0x0407f, 0x80001, 0x40001, 0x00400, 0xc0000, 215 0x02400, 0x00009, 0x40c91, 0x99999, 0x000a3, 0x88820, 0x76c06, 216 0x00000, 0x80000, 0x00180, 0x001a0, 0x69545, 0x7e45e, 0x00071, 217 0x51ff3, 0x000a8, 0x001e2, 0x002a8, 0x01c24, 0x09c24, 0x11c24, 218 0x19c24, 0x00c07, 0x48000, 0x739d0, 0x0add7, 0x09dd4, 0x08dd1, 219 0x07dce, 0x06dcb, 0x05dc8, 0x04dc5, 0x034cc, 0x0244f, 0x0144c, 220 0x00014, 0x30159, 0x68180, 0x0014e, 0x48e00, 0x65540, 0x88000, 221 0x020a0, 0xf02b0, 0xef7b0, 0xd4fb0, 0xcf060, 0xb0090, 0xa0080, 222 0x90080, 0x8f780, 0x78730, 0x60fb0, 0x5ffa0, 0x40620, 0x37090, 223 0x20080, 0x1f060, 0x0ffb0, 0x000a0, 0x0fc07, 0x00001, 0x80000, 224 0x33e70 225 }, rtl8192eu_rf1_vals[] = { 226 0x00082, 0x3fc00, 0x30000, 0x08400, 0x00407, 0x00012, 0x00064, 227 0x80009, 0x00880, 0x1a060, 0x00000, 0x060c0, 0xd0000, 0xbe180, 228 0x01552, 0x00082, 0x3f000, 0x00000, 0x00180, 0x001a0, 0x69545, 229 0x7e42e, 0x00071, 0x51ff3, 0x000a8, 0x001e0, 0x002a8, 0x01ca8, 230 0x09c24, 0x11c24, 0x19c24, 0x00c07, 0x48000, 0x739d0, 0x0add7, 231 0x09dd4, 0x08dd1, 0x07dce, 0x06dcb, 0x05dc8, 0x04dc5, 0x034cc, 232 0x0244f, 0x0144c, 0x00014, 0x30159, 0x68180, 0x000ce, 0x48a00, 233 0x65540, 0x88000, 0x020a0, 0xf02b0, 0xef7b0, 0xd4fb0, 0xcf060, 234 0xb0090, 0xa0080, 0x90080, 0x8f780, 0x78730, 0x60fb0, 0x5ffa0, 235 0x40620, 0x37090, 0x20080, 0x1f060, 0x0ffb0, 0x000a0, 0x10159, 236 0x00001, 0x80000, 0x33e70 237 }; 238 239 static const struct rtwn_rf_prog rtl8192eu_rf[] = { 240 /* RF chain 0. */ 241 { 242 nitems(rtl8192eu_rf0_regs), 243 rtl8192eu_rf0_regs, 244 rtl8192eu_rf0_vals, 245 { 0 }, 246 NULL 247 }, 248 { 0, NULL, NULL, { 0 }, NULL }, 249 /* RF chain 1. */ 250 { 251 nitems(rtl8192eu_rf1_regs), 252 rtl8192eu_rf1_regs, 253 rtl8192eu_rf1_vals, 254 { 0 }, 255 NULL 256 }, 257 { 0, NULL, NULL, { 0 }, NULL } 258 }; 259 260 #endif /* R92E_PRIV_H */ 261