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