1 /*- 2 * Copyright (c) 2010 Damien Bergamini <damien.bergamini@free.fr> 3 * Copyright (c) 2016 Andriy Voskoboinyk <avos@FreeBSD.org> 4 * 5 * Permission to use, copy, modify, and distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 * 17 * $OpenBSD: if_urtwnreg.h,v 1.3 2010/11/16 18:02:59 damien Exp $ 18 * $FreeBSD$ 19 */ 20 21 #ifndef R92CU_PRIV_H 22 #define R92CU_PRIV_H 23 24 #include <dev/rtwn/rtl8192c/r92c_priv.h> 25 26 /* 27 * MAC initialization values. 28 */ 29 static const struct rtwn_mac_prog rtl8192cu_mac[] = { 30 { 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 }, 31 { 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 }, 32 { 0x436, 0x06 }, { 0x437, 0x07 }, { 0x438, 0x00 }, { 0x439, 0x00 }, 33 { 0x43a, 0x00 }, { 0x43b, 0x01 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, 34 { 0x43e, 0x06 }, { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 }, 35 { 0x442, 0x00 }, { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f }, 36 { 0x447, 0x00 }, { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 }, 37 { 0x45b, 0xb9 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x462, 0x08 }, 38 { 0x463, 0x03 }, { 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff }, 39 { 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, 40 { 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, 41 { 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, 42 { 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, 43 { 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, 44 { 0x515, 0x10 }, { 0x516, 0x0a }, { 0x517, 0x10 }, { 0x51a, 0x16 }, 45 { 0x524, 0x0f }, { 0x525, 0x4f }, { 0x546, 0x40 }, { 0x547, 0x00 }, 46 { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55a, 0x02 }, 47 { 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, 48 { 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0e }, { 0x63e, 0x0a }, 49 { 0x63f, 0x0e }, { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, 50 { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, 51 { 0x70a, 0x65 }, { 0x70b, 0x87 } 52 }; 53 54 /* 55 * Baseband initialization values. 56 */ 57 static const uint16_t rtl8192cu_bb_regs0_88ru[] = { 58 0x024, 0x028, 0x040, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 59 0x818, 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 60 0x83c, 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 61 0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 62 0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 63 0x908, 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 64 0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 65 0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 66 0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 67 0xc50, 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70 68 }, rtl8192cu_bb_regs0[] = { 69 0x024, 0x028, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 70 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 71 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 72 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884, 73 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 0x908, 74 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 75 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 0xc08, 76 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 77 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 78 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70 79 }, rtl8192cu_bb_regs1[] = { 80 0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88 81 }, rtl8192cu_bb_regs2[] = { 82 0xc8c, 0xc90, 0xc94, 0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 83 0xcb0, 0xcb4, 0xcb8, 0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 84 0xcd4, 0xcd8, 0xcdc, 0xce0, 0xce4, 0xce8, 0xcec, 0xd00 85 }, rtl8192cu_bb_regs5_88ru[] = { 86 0xe60, 0xe68, 0xe6c, 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 87 0xe88, 0xe8c, 0xed0, 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee8, 88 0xf14, 0xf4c, 0xf00 89 }; 90 91 static const uint32_t rtl8192cu_bb_vals0_88cu[] = { 92 0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00, 93 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 94 0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000, 95 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 96 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a, 97 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200, 98 0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070, 99 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe, 100 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 101 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 102 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 103 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 104 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 105 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 106 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 107 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 108 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 109 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d 110 }, rtl8192cu_bb_vals0_88ru[] = { 111 0x0011800d, 0x00ffdb83, 0x000c0004, 0x80040000, 0x00000001, 112 0x0000fc00, 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 113 0x00000000, 0x01000100, 0x00390204, 0x00000000, 0x00000000, 114 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 115 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 116 0x569a569a, 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 117 0x32323200, 0x03000300, 0x22004000, 0x00000808, 0x00ffc3f1, 118 0xc0083070, 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 119 0xfffffffe, 0x40302010, 0x00706050, 0x00000000, 0x00000023, 120 0x00000000, 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 121 0x2e68120f, 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 122 0x15160000, 0x070b0f12, 0x00000104, 0x00d30000, 0x101fbf00, 123 0x00000007, 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 124 0x08800000, 0x40000100, 0x08800000, 0x40000100, 0x00000000, 125 0x00000000, 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 126 0x49795994, 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 127 0x007f037f, 0x6954342e, 0x43bc0094, 0x6954342f, 0x433c0094, 128 0x00000000, 0x5116848b, 0x47c00bff, 0x00000036, 0x2c56000d 129 }, rtl8192cu_bb_vals0_92ce_92cu[] = { 130 0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00, 131 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 132 0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727, 133 0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000, 134 0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a, 135 0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27, 136 0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070, 137 0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe, 138 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 139 0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 140 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 141 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 142 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 143 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 144 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 145 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 146 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 147 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d 148 }, rtl8192cu_bb_vals1_88ru[] = { 149 0x018610db, 0x0000001f, 0x00b91612, 0x24000090, 0x20f60000, 150 0x24000090 151 }, rtl8192cu_bb_vals1_92cu[] = { 152 0x0186115b, 0x0000001f, 0x00b99612, 0x40000100, 0x20f60000, 153 0x40000100 154 }, rtl8192cu_bb_vals1_88cu_92ce[] = { 155 0x018610db, 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 156 0x40000100 157 }, rtl8192cu_bb_vals2[] = { 158 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 159 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 160 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 161 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 162 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 163 0x00080740 164 }, rtl8192cu_bb_vals5_88cu[] = { 165 0x00000008, 0x001b25a4, 0x631b25a0, 0x631b25a0, 0x081b25a0, 166 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x631b25a0, 0x081b25a0, 167 0x631b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 0x001b25a0, 168 0x001b25a0, 0x6b1b25a0, 0x00000003, 0x00000000, 0x00000300 169 }, rtl8192cu_bb_vals5_88ru[] = { 170 0x00000010, 0x001b25a4, 0x631b25a0, 0x631b25a0, 0x081b25a0, 171 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x631b25a0, 0x081b25a0, 172 0x631b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 0x001b25a0, 173 0x001b25a0, 0x6b1b25a0, 0x31555448, 0x00000003, 0x00000000, 174 0x00000300 175 }; 176 177 static const struct rtwn_bb_prog rtl8192cu_bb[] = { 178 /* RTL8188CE / RTL8188CU. */ 179 { 180 nitems(rtl8192cu_bb_regs0), 181 rtl8192cu_bb_regs0, 182 rtl8192cu_bb_vals0_88cu, 183 { R92C_COND_RTL8188CU | R92C_COND_RTL8188CE }, 184 /* RTL8188RU. */ 185 &(const struct rtwn_bb_prog){ 186 nitems(rtl8192cu_bb_regs0_88ru), 187 rtl8192cu_bb_regs0_88ru, 188 rtl8192cu_bb_vals0_88ru, 189 { R92C_COND_RTL8188RU }, 190 /* Others. */ 191 &(const struct rtwn_bb_prog){ 192 nitems(rtl8192cu_bb_regs0), 193 rtl8192cu_bb_regs0, 194 rtl8192cu_bb_vals0_92ce_92cu, 195 { 0 }, 196 NULL 197 } 198 } 199 }, 200 /* RTL8188RU. */ 201 { 202 nitems(rtl8192cu_bb_regs1), 203 rtl8192cu_bb_regs1, 204 rtl8192cu_bb_vals1_88ru, 205 { R92C_COND_RTL8188RU }, 206 /* RTL8192CU. */ 207 &(const struct rtwn_bb_prog){ 208 nitems(rtl8192cu_bb_regs1), 209 rtl8192cu_bb_regs1, 210 rtl8192cu_bb_vals1_92cu, 211 { R92C_COND_RTL8192CU }, 212 /* Others. */ 213 &(const struct rtwn_bb_prog){ 214 nitems(rtl8192cu_bb_regs1), 215 rtl8192cu_bb_regs1, 216 rtl8192cu_bb_vals1_88cu_92ce, 217 { 0 }, 218 NULL 219 } 220 } 221 }, 222 { 223 nitems(rtl8192cu_bb_regs2), 224 rtl8192cu_bb_regs2, 225 rtl8192cu_bb_vals2, 226 { 0 }, 227 NULL 228 }, 229 /* RTL8192CE / RTL8192CU. */ 230 { 231 nitems(rtl8192c_bb_regs3), 232 rtl8192c_bb_regs3, 233 rtl8192c_bb_vals3_92ce_92cu, 234 { R92C_COND_RTL8192C }, 235 /* Others. */ 236 &(const struct rtwn_bb_prog){ 237 nitems(rtl8192c_bb_regs3), 238 rtl8192c_bb_regs3, 239 rtl8192c_bb_vals3_88cu_88ru, 240 { 0 }, 241 NULL 242 } 243 }, 244 { 245 nitems(rtl8192c_bb_regs4), 246 rtl8192c_bb_regs4, 247 rtl8192c_bb_vals4, 248 { 0 }, 249 NULL 250 }, 251 /* RTL8188CE / RTL8188CU. */ 252 { 253 nitems(rtl8192c_bb_regs5), 254 rtl8192c_bb_regs5, 255 rtl8192cu_bb_vals5_88cu, 256 { R92C_COND_RTL8188CU | R92C_COND_RTL8188CE }, 257 /* RTL8188RU. */ 258 &(const struct rtwn_bb_prog){ 259 nitems(rtl8192cu_bb_regs5_88ru), 260 rtl8192cu_bb_regs5_88ru, 261 rtl8192cu_bb_vals5_88ru, 262 { R92C_COND_RTL8188RU }, 263 /* Others. */ 264 &(const struct rtwn_bb_prog){ 265 nitems(rtl8192c_bb_regs5), 266 rtl8192c_bb_regs5, 267 rtl8192c_bb_vals5_92ce_92cu, 268 { 0 }, 269 NULL 270 } 271 } 272 } 273 }; 274 275 static const uint32_t rtl8188ru_agc_vals[] = { 276 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 277 0x7b050001, 0x7b060001, 0x7b070001, 0x7b080001, 0x7a090001, 278 0x790a0001, 0x780b0001, 0x770c0001, 0x760d0001, 0x750e0001, 279 0x740f0001, 0x73100001, 0x72110001, 0x71120001, 0x70130001, 280 0x6f140001, 0x6e150001, 0x6d160001, 0x6c170001, 0x6b180001, 281 0x6a190001, 0x691a0001, 0x681b0001, 0x671c0001, 0x661d0001, 282 0x651e0001, 0x641f0001, 0x63200001, 0x62210001, 0x61220001, 283 0x60230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 284 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 285 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 286 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 287 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 288 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 289 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 290 0x7b460001, 0x7b470001, 0x7b480001, 0x7a490001, 0x794a0001, 291 0x784b0001, 0x774c0001, 0x764d0001, 0x754e0001, 0x744f0001, 292 0x73500001, 0x72510001, 0x71520001, 0x70530001, 0x6f540001, 293 0x6e550001, 0x6d560001, 0x6c570001, 0x6b580001, 0x6a590001, 294 0x695a0001, 0x685b0001, 0x675c0001, 0x665d0001, 0x655e0001, 295 0x645f0001, 0x63600001, 0x62610001, 0x61620001, 0x60630001, 296 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 297 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 298 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 299 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 300 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 301 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 302 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 303 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 304 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 305 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 306 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 307 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 308 }; 309 310 static const struct rtwn_agc_prog rtl8188ru_agc[] = { 311 { 312 nitems(rtl8188ru_agc_vals), 313 rtl8188ru_agc_vals, 314 { 0 }, 315 NULL 316 } 317 }; 318 319 #endif /* R92CU_PRIV_H */ 320