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