1/* $NetBSD: if_urtwn_data.h,v 1.1 2012/03/25 00:11:16 nonaka Exp $ */ 2/* $OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $ */ 3 4/*- 5 * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> 6 * 7 * Permission to use, copy, modify, and distribute this software for any 8 * purpose with or without fee is hereby granted, provided that the above 9 * copyright notice and this permission notice appear in all copies. 10 * 11 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 12 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 13 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 14 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 15 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 16 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 17 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 18 */ 19 20/* 21 * MAC initialization values. 22 */ 23static const struct { 24 uint16_t reg; 25 uint8_t val; 26} rtl8192cu_mac[] = { 27 { 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 }, 28 { 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 }, 29 { 0x436, 0x06 }, { 0x437, 0x07 }, { 0x438, 0x00 }, { 0x439, 0x00 }, 30 { 0x43a, 0x00 }, { 0x43b, 0x01 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, 31 { 0x43e, 0x06 }, { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 }, 32 { 0x442, 0x00 }, { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f }, 33 { 0x447, 0x00 }, { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 }, 34 { 0x45b, 0xb9 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x462, 0x08 }, 35 { 0x463, 0x03 }, { 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff }, 36 { 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, 37 { 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, 38 { 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, 39 { 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, 40 { 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, 41 { 0x515, 0x10 }, { 0x516, 0x0a }, { 0x517, 0x10 }, { 0x51a, 0x16 }, 42 { 0x524, 0x0f }, { 0x525, 0x4f }, { 0x546, 0x40 }, { 0x547, 0x00 }, 43 { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55a, 0x02 }, 44 { 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, 45 { 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0e }, { 0x63e, 0x0a }, 46 { 0x63f, 0x0e }, { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, 47 { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, 48 { 0x70a, 0x65 }, { 0x70b, 0x87 } 49}; 50 51/* 52 * Baseband initialization values. 53 */ 54struct urtwn_bb_prog { 55 int count; 56 const uint16_t *regs; 57 const uint32_t *vals; 58 int agccount; 59 const uint32_t *agcvals; 60}; 61 62/* 63 * RTL8192CU and RTL8192CE-VAU. 64 */ 65static const uint16_t rtl8192ce_bb_regs[] = { 66 0x024, 0x028, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 67 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 68 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 69 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884, 70 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 0x908, 71 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 72 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 0xc08, 73 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 74 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 75 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 76 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 77 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc, 78 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 0xce0, 79 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 0xd14, 80 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48, 81 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c, 82 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 0xe18, 83 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 84 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70, 85 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4, 86 0xed8, 0xedc, 0xee0, 0xeec, 0xf14, 0xf4c, 0xf00 87}; 88 89static const uint32_t rtl8192ce_bb_vals[] = { 90 0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00, 91 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 92 0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727, 93 0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000, 94 0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a, 95 0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27, 96 0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070, 97 0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe, 98 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 99 0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 100 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 101 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 102 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 103 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 104 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 105 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 106 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 107 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 108 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 109 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 110 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 111 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 112 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 113 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 114 0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333, 115 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 116 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 117 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 118 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 119 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 120 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 121 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 122 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 123 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4, 124 0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 125 0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4, 126 0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003, 127 0x00000000, 0x00000300 128}; 129 130static const uint32_t rtl8192ce_agc_vals[] = { 131 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 132 0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001, 133 0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001, 134 0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001, 135 0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001, 136 0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001, 137 0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001, 138 0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 139 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 140 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 141 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 142 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 143 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 144 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 145 0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001, 146 0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001, 147 0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001, 148 0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001, 149 0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001, 150 0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001, 151 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 152 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 153 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 154 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 155 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 156 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 157 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 158 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 159 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 160 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 161 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 162 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 163}; 164 165static const struct urtwn_bb_prog rtl8192ce_bb_prog = { 166 __arraycount(rtl8192ce_bb_regs), 167 rtl8192ce_bb_regs, 168 rtl8192ce_bb_vals, 169 __arraycount(rtl8192ce_agc_vals), 170 rtl8192ce_agc_vals 171}; 172 173/* 174 * RTL8188CU. 175 */ 176static const uint32_t rtl8192cu_bb_vals[] = { 177 0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00, 178 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 179 0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727, 180 0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000, 181 0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a, 182 0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27, 183 0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070, 184 0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe, 185 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 186 0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 187 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 188 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 189 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 190 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 191 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 192 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 193 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 194 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x0186115b, 195 0x0000001f, 0x00b99612, 0x40000100, 0x20f60000, 0x40000100, 196 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 197 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 198 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 199 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 200 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 201 0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333, 202 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 203 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 204 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 205 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 206 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 207 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 208 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 209 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 210 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4, 211 0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 212 0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4, 213 0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003, 214 0x00000000, 0x00000300 215}; 216 217static const struct urtwn_bb_prog rtl8192cu_bb_prog = { 218 __arraycount(rtl8192ce_bb_regs), 219 rtl8192ce_bb_regs, 220 rtl8192cu_bb_vals, 221 __arraycount(rtl8192ce_agc_vals), 222 rtl8192ce_agc_vals 223}; 224 225/* 226 * RTL8188CE-VAU. 227 */ 228static const uint32_t rtl8188ce_bb_vals[] = { 229 0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00, 230 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 231 0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000, 232 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 233 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a, 234 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200, 235 0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070, 236 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe, 237 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 238 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 239 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 240 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 241 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 242 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 243 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 244 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 245 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 246 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 247 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 248 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 249 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 250 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 251 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 252 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 253 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 254 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 255 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 256 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 257 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 258 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 259 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 260 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 261 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 262 0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0, 263 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 264 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 265 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003, 266 0x00000000, 0x00000300 267}; 268 269static const uint32_t rtl8188ce_agc_vals[] = { 270 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 271 0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001, 272 0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001, 273 0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001, 274 0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001, 275 0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001, 276 0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001, 277 0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 278 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 279 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 280 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 281 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 282 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 283 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 284 0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001, 285 0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001, 286 0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001, 287 0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001, 288 0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001, 289 0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001, 290 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 291 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 292 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 293 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 294 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 295 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 296 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 297 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 298 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 299 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 300 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 301 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 302}; 303 304static const struct urtwn_bb_prog rtl8188ce_bb_prog = { 305 __arraycount(rtl8192ce_bb_regs), 306 rtl8192ce_bb_regs, 307 rtl8188ce_bb_vals, 308 __arraycount(rtl8188ce_agc_vals), 309 rtl8188ce_agc_vals 310}; 311 312static const uint32_t rtl8188cu_bb_vals[] = { 313 0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00, 314 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 315 0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000, 316 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 317 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a, 318 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200, 319 0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070, 320 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe, 321 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 322 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 323 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 324 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 325 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 326 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 327 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 328 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 329 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 330 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 331 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 332 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 333 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 334 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 335 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 336 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 337 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 338 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 339 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 340 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 341 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 342 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 343 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 344 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 345 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 346 0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0, 347 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 348 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 349 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003, 350 0x00000000, 0x00000300 351}; 352 353static const struct urtwn_bb_prog rtl8188cu_bb_prog = { 354 __arraycount(rtl8192ce_bb_regs), 355 rtl8192ce_bb_regs, 356 rtl8188cu_bb_vals, 357 __arraycount(rtl8188ce_agc_vals), 358 rtl8188ce_agc_vals 359}; 360 361/* 362 * RTL8188RU. 363 */ 364static const uint16_t rtl8188ru_bb_regs[] = { 365 0x024, 0x028, 0x040, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 366 0x818, 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 367 0x83c, 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 368 0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 369 0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 370 0x908, 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 371 0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 372 0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 373 0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 374 0xc50, 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 375 0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 376 0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 377 0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 378 0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 379 0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 380 0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 381 0xd6c, 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 382 0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 383 0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 384 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 385 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee8, 0xf14, 0xf4c, 0xf00 386}; 387 388static const uint32_t rtl8188ru_bb_vals[] = { 389 0x0011800d, 0x00ffdb83, 0x000c0004, 0x80040000, 0x00000001, 390 0x0000fc00, 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 391 0x00000000, 0x01000100, 0x00390204, 0x00000000, 0x00000000, 392 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 393 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 394 0x569a569a, 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 395 0x32323200, 0x03000300, 0x22004000, 0x00000808, 0x00ffc3f1, 396 0xc0083070, 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 397 0xfffffffe, 0x40302010, 0x00706050, 0x00000000, 0x00000023, 398 0x00000000, 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 399 0x2e68120f, 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 400 0x15160000, 0x070b0f12, 0x00000104, 0x00d30000, 0x101fbf00, 401 0x00000007, 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 402 0x08800000, 0x40000100, 0x08800000, 0x40000100, 0x00000000, 403 0x00000000, 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 404 0x49795994, 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 405 0x007f037f, 0x6954342e, 0x43bc0094, 0x6954342f, 0x433c0094, 406 0x00000000, 0x5116848b, 0x47c00bff, 0x00000036, 0x2c56000d, 407 0x018610db, 0x0000001f, 0x00b91612, 0x24000090, 0x20f60000, 408 0x24000090, 0x20200000, 0x00121820, 0x00000000, 0x00121820, 409 0x00007f7f, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 410 0x00000000, 0x00000000, 0x00000000, 0x28000000, 0x00000000, 411 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 412 0x64b22427, 0x00766932, 0x00222222, 0x00000000, 0x37644302, 413 0x2f97d40c, 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 414 0xa0633333, 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 415 0x80608000, 0x00000000, 0x00027293, 0x00000000, 0x00000000, 416 0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 417 0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 418 0x1812362e, 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 419 0x03902a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 420 0x00000000, 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 421 0x01007c00, 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 422 0x10008c1f, 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 423 0x631b25a0, 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 424 0x081b25a0, 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 425 0x631b25a0, 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 426 0x31555448, 0x00000003, 0x00000000, 0x00000300 427}; 428 429static const uint32_t rtl8188ru_agc_vals[] = { 430 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 431 0x7b050001, 0x7b060001, 0x7b070001, 0x7b080001, 0x7a090001, 432 0x790a0001, 0x780b0001, 0x770c0001, 0x760d0001, 0x750e0001, 433 0x740f0001, 0x73100001, 0x72110001, 0x71120001, 0x70130001, 434 0x6f140001, 0x6e150001, 0x6d160001, 0x6c170001, 0x6b180001, 435 0x6a190001, 0x691a0001, 0x681b0001, 0x671c0001, 0x661d0001, 436 0x651e0001, 0x641f0001, 0x63200001, 0x62210001, 0x61220001, 437 0x60230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 438 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 439 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 440 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 441 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 442 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 443 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 444 0x7b460001, 0x7b470001, 0x7b480001, 0x7a490001, 0x794a0001, 445 0x784b0001, 0x774c0001, 0x764d0001, 0x754e0001, 0x744f0001, 446 0x73500001, 0x72510001, 0x71520001, 0x70530001, 0x6f540001, 447 0x6e550001, 0x6d560001, 0x6c570001, 0x6b580001, 0x6a590001, 448 0x695a0001, 0x685b0001, 0x675c0001, 0x665d0001, 0x655e0001, 449 0x645f0001, 0x63600001, 0x62610001, 0x61620001, 0x60630001, 450 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 451 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 452 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 453 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 454 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 455 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 456 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 457 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 458 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 459 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 460 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 461 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 462}; 463 464static const struct urtwn_bb_prog rtl8188ru_bb_prog = { 465 __arraycount(rtl8188ru_bb_regs), 466 rtl8188ru_bb_regs, 467 rtl8188ru_bb_vals, 468 __arraycount(rtl8188ru_agc_vals), 469 rtl8188ru_agc_vals 470}; 471 472/* 473 * RF initialization values. 474 */ 475struct urtwn_rf_prog { 476 int count; 477 const uint8_t *regs; 478 const uint32_t *vals; 479}; 480 481/* 482 * RTL8192CU and RTL8192CE-VAU. 483 */ 484static const uint8_t rtl8192ce_rf1_regs[] = { 485 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 486 0x0f, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 487 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2a, 0x2b, 488 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 489 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 490 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 491 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 492 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 493 0x2c, 0x2a, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 494 0x11, 0x10, 0x11, 0x10, 0x11, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 495 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 496 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x00, 497 0x18, 0xfe, 0xfe, 0x1f, 0xfe, 0xfe, 0x1e, 0x1f, 0x00 498}; 499 500static const uint32_t rtl8192ce_rf1_vals[] = { 501 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 502 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 503 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 504 0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0, 505 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 506 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 507 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 508 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 509 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 510 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 511 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 512 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 513 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 514 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 515 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 516 0x71000, 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f, 517 0x18493, 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c, 518 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 519 0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 520 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 521 0x30159 522}; 523 524static const uint8_t rtl8192ce_rf2_regs[] = { 525 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 526 0x0f, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 527 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 528 0x15, 0x15, 0x16, 0x16, 0x16, 0x16 529}; 530 531static const uint32_t rtl8192ce_rf2_vals[] = { 532 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 533 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x32000, 0x71000, 534 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f, 0x18493, 535 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c, 0x1944c, 536 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 0xcf424, 537 0xe0330, 0xa0330, 0x60330, 0x20330 538}; 539 540static const struct urtwn_rf_prog rtl8192ce_rf_prog[] = { 541 { 542 __arraycount(rtl8192ce_rf1_regs), 543 rtl8192ce_rf1_regs, 544 rtl8192ce_rf1_vals 545 }, 546 { 547 __arraycount(rtl8192ce_rf2_regs), 548 rtl8192ce_rf2_regs, 549 rtl8192ce_rf2_vals 550 } 551}; 552 553/* 554 * RTL8188CE-VAU. 555 */ 556static const uint32_t rtl8188ce_rf_vals[] = { 557 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 558 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 559 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 560 0x00000, 0x01558, 0x00060, 0x00483, 0x4f200, 0xec7d9, 0x577c0, 561 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 562 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 563 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 564 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 565 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 566 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 567 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 568 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 569 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 570 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 571 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 572 0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f, 573 0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020, 574 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 575 0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 576 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 577 0x30159 578}; 579 580static const struct urtwn_rf_prog rtl8188ce_rf_prog[] = { 581 { 582 __arraycount(rtl8192ce_rf1_regs), 583 rtl8192ce_rf1_regs, 584 rtl8188ce_rf_vals 585 } 586}; 587 588 589/* 590 * RTL8188CU. 591 */ 592static const uint32_t rtl8188cu_rf_vals[] = { 593 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 594 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 595 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 596 0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0, 597 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 598 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 599 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 600 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 601 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 602 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 603 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 604 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 605 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 606 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 607 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 608 0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f, 609 0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020, 610 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405, 611 0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 612 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 613 0x30159 614}; 615 616static const struct urtwn_rf_prog rtl8188cu_rf_prog[] = { 617 { 618 __arraycount(rtl8192ce_rf1_regs), 619 rtl8192ce_rf1_regs, 620 rtl8188cu_rf_vals 621 } 622}; 623 624/* 625 * RTL8188RU. 626 */ 627static const uint32_t rtl8188ru_rf_vals[] = { 628 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb0, 629 0x54867, 0x8992e, 0x0e529, 0x39ce7, 0x00451, 0x00000, 0x00255, 630 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 631 0x0083c, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x977c0, 632 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 633 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 634 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 635 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 636 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 637 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 638 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 639 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 640 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 641 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 642 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0xd8000, 643 0x90000, 0x51000, 0x12000, 0x28fb4, 0x24fa8, 0x207a4, 0x1c798, 644 0x183a4, 0x14398, 0x101a4, 0x0c198, 0x080a4, 0x04098, 0x00014, 645 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405, 646 0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 647 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 648 0x30159 649}; 650 651static const struct urtwn_rf_prog rtl8188ru_rf_prog[] = { 652 { 653 __arraycount(rtl8192ce_rf1_regs), 654 rtl8192ce_rf1_regs, 655 rtl8188ru_rf_vals 656 } 657}; 658 659struct urtwn_txpwr { 660 uint8_t pwr[3][28]; 661}; 662 663/* 664 * Per RF chain/group/rate Tx gain values. 665 */ 666static const struct urtwn_txpwr rtl8192cu_txagc[] = { 667 { { /* Chain 0. */ 668 { /* Group 0. */ 669 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 670 0x0c, 0x0c, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, /* OFDM6~54. */ 671 0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, /* MCS0~7. */ 672 0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02 /* MCS8~15. */ 673 }, 674 { /* Group 1. */ 675 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 676 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 677 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 678 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 679 }, 680 { /* Group 2. */ 681 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 682 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, /* OFDM6~54. */ 683 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 684 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 685 } 686 } }, 687 { { /* Chain 1. */ 688 { /* Group 0. */ 689 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 690 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 691 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 692 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 693 }, 694 { /* Group 1. */ 695 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 696 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 697 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 698 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 699 }, 700 { /* Group 2. */ 701 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 702 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, /* OFDM6~54. */ 703 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 704 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 705 } 706 } } 707}; 708 709static const struct urtwn_txpwr rtl8188ru_txagc[] = { 710 { { /* Chain 0. */ 711 { /* Group 0. */ 712 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 713 0x08, 0x08, 0x08, 0x06, 0x06, 0x04, 0x04, 0x00, /* OFDM6~54. */ 714 0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00, /* MCS0~7. */ 715 0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00 /* MCS8~15. */ 716 }, 717 { /* Group 1. */ 718 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 719 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 720 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 721 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 722 }, 723 { /* Group 2. */ 724 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 725 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 726 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 727 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 728 } 729 } } 730}; 731