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 R88E_PRIV_H 22 #define R88E_PRIV_H 23 24 #include <dev/rtwn/rtl8188e/r88e_rom_defs.h> 25 26 /* 27 * Parsed Tx power (diff) values. 28 */ 29 struct rtwn_r88e_txpwr { 30 uint8_t cck_tx_pwr[R88E_GROUP_2G]; 31 uint8_t ht40_tx_pwr[R88E_GROUP_2G - 1]; 32 int8_t ofdm_tx_pwr_diff; 33 int8_t bw20_tx_pwr_diff; 34 }; 35 36 /* 37 * MAC initialization values. 38 */ 39 static const struct rtwn_mac_prog rtl8188e_mac[] = { 40 { 0x026, 0x41 }, { 0x027, 0x35 }, { 0x040, 0x00 }, { 0x428, 0x0a }, 41 { 0x429, 0x10 }, { 0x430, 0x00 }, { 0x431, 0x01 }, { 0x432, 0x02 }, 42 { 0x433, 0x04 }, { 0x434, 0x05 }, { 0x435, 0x06 }, { 0x436, 0x07 }, 43 { 0x437, 0x08 }, { 0x438, 0x00 }, { 0x439, 0x00 }, { 0x43a, 0x01 }, 44 { 0x43b, 0x02 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, { 0x43e, 0x06 }, 45 { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 }, { 0x442, 0x00 }, 46 { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f }, { 0x447, 0x00 }, 47 { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 }, { 0x45b, 0xb9 }, 48 { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x480, 0x08 }, { 0x4c8, 0xff }, 49 { 0x4c9, 0x08 }, { 0x4cc, 0xff }, { 0x4cd, 0xff }, { 0x4ce, 0x01 }, 50 { 0x4d3, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, { 0x502, 0x2f }, 51 { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, { 0x506, 0x5e }, 52 { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, { 0x50a, 0x5e }, 53 { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, { 0x50e, 0x00 }, 54 { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, { 0x516, 0x0a }, 55 { 0x525, 0x4f }, { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, 56 { 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, 57 { 0x620, 0xff }, { 0x621, 0xff }, { 0x622, 0xff }, { 0x623, 0xff }, 58 { 0x624, 0xff }, { 0x625, 0xff }, { 0x626, 0xff }, { 0x627, 0xff }, 59 { 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0a }, { 0x63e, 0x0e }, 60 { 0x63f, 0x0e }, { 0x640, 0x40 }, { 0x66e, 0x05 }, { 0x700, 0x21 }, 61 { 0x701, 0x43 }, { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, 62 { 0x709, 0x43 }, { 0x70a, 0x65 }, { 0x70b, 0x87 } 63 }; 64 65 /* 66 * Baseband initialization values. 67 */ 68 static const uint16_t rtl8188e_bb_regs[] = { 69 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 0x81c, 70 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 71 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 72 0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 73 0x880, 0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 74 0x900, 0x904, 0x908, 0x90c, 0x910, 0x914, 0xa00, 0xa04, 75 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 0xa20, 0xa24, 76 0xa28, 0xa2c, 0xa70, 0xa74, 0xa78, 0xa7c, 0xa80, 0xb2c, 77 0xc00, 0xc04, 0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 78 0xc20, 0xc24, 0xc28, 0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 79 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 0xc54, 0xc58, 0xc5c, 80 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 0xc78, 0xc7c, 81 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 0xc9c, 82 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc, 83 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 84 0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 85 0xd10, 0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 86 0xd40, 0xd44, 0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 87 0xd60, 0xd64, 0xd68, 0xd6c, 0xd70, 0xd74, 0xd78, 0xe00, 88 0xe04, 0xe08, 0xe10, 0xe14, 0xe18, 0xe1c, 0xe28, 0xe30, 89 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 0xe4c, 0xe50, 90 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70, 0xe74, 91 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4, 92 0xed8, 0xedc, 0xee0, 0xee8, 0xeec, 0xf14, 0xf4c, 0xf00 93 }; 94 95 static const uint32_t rtl8188e_bb_vals[] = { 96 0x80040000, 0x00000003, 0x0000fc00, 0x0000000a, 0x10001331, 97 0x020c3d10, 0x02200385, 0x00000000, 0x01000100, 0x00390204, 98 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 99 0x00000000, 0x00010000, 0x00000000, 0x00000000, 0x00000000, 100 0x00000000, 0x00000000, 0x569a11a9, 0x01000014, 0x66f60110, 101 0x061f0649, 0x00000000, 0x27272700, 0x07000760, 0x25004000, 102 0x00000808, 0x00000000, 0xb0000c1c, 0x00000001, 0x00000000, 103 0xccc000c0, 0x00000800, 0xfffffffe, 0x40302010, 0x00706050, 104 0x00000000, 0x00000023, 0x00000000, 0x81121111, 0x00000002, 105 0x00000201, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e7f120f, 106 0x9500bb78, 0x1114d028, 0x00881117, 0x89140f00, 0x1a1b0000, 107 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 108 0x00000900, 0x225b0606, 0x218075b1, 0x80000000, 0x48071d40, 109 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 0x40000100, 110 0x08800000, 0x40000100, 0x00000000, 0x00000000, 0x00000000, 111 0x00000000, 0x69e9ac47, 0x469652af, 0x49795994, 0x0a97971c, 112 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 0x69553420, 113 0x43bc0094, 0x00013169, 0x00250492, 0x00000000, 0x7112848b, 114 0x47c00bff, 0x00000036, 0x2c7f000d, 0x020610db, 0x0000001f, 115 0x00b91612, 0x390000e4, 0x20f60000, 0x40000100, 0x20200000, 116 0x00091521, 0x00000000, 0x00121820, 0x00007f7f, 0x00000000, 117 0x000300a0, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 118 0x00000000, 0x28000000, 0x00000000, 0x00000000, 0x00000000, 119 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 0x00766932, 120 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 0x00000740, 121 0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 0x3333bc43, 122 0x7a8f5b6f, 0xcc979975, 0x00000000, 0x80608000, 0x00000000, 123 0x00127353, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 124 0x6437140a, 0x00000000, 0x00000282, 0x30032064, 0x4653de68, 125 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 0x322c2220, 126 0x000e3c24, 0x2d2d2d2d, 0x2d2d2d2d, 0x0390272d, 0x2d2d2d2d, 127 0x2d2d2d2d, 0x2d2d2d2d, 0x2d2d2d2d, 0x00000000, 0x1000dc1f, 128 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 0x01004800, 129 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 0x02140102, 130 0x28160d05, 0x00000008, 0x001b25a4, 0x00c00014, 0x00c00014, 131 0x01000014, 0x01000014, 0x01000014, 0x01000014, 0x00c00014, 132 0x01000014, 0x00c00014, 0x00c00014, 0x00c00014, 0x00c00014, 133 0x00000014, 0x00000014, 0x21555448, 0x01c00014, 0x00000003, 134 0x00000000, 0x00000300 135 }; 136 137 static const struct rtwn_bb_prog rtl8188e_bb[] = { 138 { 139 nitems(rtl8188e_bb_regs), 140 rtl8188e_bb_regs, 141 rtl8188e_bb_vals, 142 { 0 }, 143 NULL 144 } 145 }; 146 147 static const uint32_t rtl8188e_agc_vals[] = { 148 0xfb000001, 0xfb010001, 0xfb020001, 0xfb030001, 0xfb040001, 149 0xfb050001, 0xfa060001, 0xf9070001, 0xf8080001, 0xf7090001, 150 0xf60a0001, 0xf50b0001, 0xf40c0001, 0xf30d0001, 0xf20e0001, 151 0xf10f0001, 0xf0100001, 0xef110001, 0xee120001, 0xed130001, 152 0xec140001, 0xeb150001, 0xea160001, 0xe9170001, 0xe8180001, 153 0xe7190001, 0xe61a0001, 0xe51b0001, 0xe41c0001, 0xe31d0001, 154 0xe21e0001, 0xe11f0001, 0x8a200001, 0x89210001, 0x88220001, 155 0x87230001, 0x86240001, 0x85250001, 0x84260001, 0x83270001, 156 0x82280001, 0x6b290001, 0x6a2a0001, 0x692b0001, 0x682c0001, 157 0x672d0001, 0x662e0001, 0x652f0001, 0x64300001, 0x63310001, 158 0x62320001, 0x61330001, 0x46340001, 0x45350001, 0x44360001, 159 0x43370001, 0x42380001, 0x41390001, 0x403a0001, 0x403b0001, 160 0x403c0001, 0x403d0001, 0x403e0001, 0x403f0001, 0xfb400001, 161 0xfb410001, 0xfb420001, 0xfb430001, 0xfb440001, 0xfb450001, 162 0xfb460001, 0xfb470001, 0xfb480001, 0xfa490001, 0xf94a0001, 163 0xf84B0001, 0xf74c0001, 0xf64d0001, 0xf54e0001, 0xf44f0001, 164 0xf3500001, 0xf2510001, 0xf1520001, 0xf0530001, 0xef540001, 165 0xee550001, 0xed560001, 0xec570001, 0xeb580001, 0xea590001, 166 0xe95a0001, 0xe85b0001, 0xe75c0001, 0xe65d0001, 0xe55e0001, 167 0xe45f0001, 0xe3600001, 0xe2610001, 0xc3620001, 0xc2630001, 168 0xc1640001, 0x8b650001, 0x8a660001, 0x89670001, 0x88680001, 169 0x87690001, 0x866a0001, 0x856b0001, 0x846c0001, 0x676d0001, 170 0x666e0001, 0x656f0001, 0x64700001, 0x63710001, 0x62720001, 171 0x61730001, 0x60740001, 0x46750001, 0x45760001, 0x44770001, 172 0x43780001, 0x42790001, 0x417a0001, 0x407b0001, 0x407c0001, 173 0x407d0001, 0x407e0001, 0x407f0001 174 }; 175 176 static const struct rtwn_agc_prog rtl8188e_agc[] = { 177 { 178 nitems(rtl8188e_agc_vals), 179 rtl8188e_agc_vals, 180 { 0 }, 181 NULL 182 } 183 }; 184 185 /* 186 * RF initialization values. 187 */ 188 static const uint8_t rtl8188e_rf_regs[] = { 189 0x00, 0x08, 0x18, 0x19, 0x1e, 0x1f, 0x2f, 0x3f, 0x42, 0x57, 190 0x58, 0x67, 0x83, 0xb0, 0xb1, 0xb2, 0xb4, 0xb6, 0xb7, 0xb8, 191 0xb9, 0xba, 0xbb, 0xbf, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7, 192 0xc8, 0xc9, 0xca, 0xdf, 0xef, 0x51, 0x52, 0x53, 0x56, 193 0x35, 0x35, 0x35, 0x36, 0x36, 0x36, 0x36, 0xb6, 0x18, 0x5a, 194 0x19, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 0x34, 195 0x34, 0x34, 0x00, 0x84, 0x86, 0x87, 0x8e, 0x8f, 0xef, 0x3b, 196 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 197 0x3b, 0x3b, 0x3b, 0x3b, 0x3b, 0xef, 0x00, 0x18, 0xfe, 0xfe, 198 0x1f, 0xfe, 0xfe, 0x1e, 0x1f, 0x00 199 }; 200 201 static const uint32_t rtl8188e_rf_vals[] = { 202 0x30000, 0x84000, 0x00407, 0x00012, 0x80009, 0x00880, 0x1a060, 203 0x00000, 0x060c0, 0xd0000, 0xbe180, 0x01552, 0x00000, 0xff8fc, 204 0x54400, 0xccc19, 0x43003, 0x4953e, 0x1c718, 0x060ff, 0x80001, 205 0x40000, 0x00400, 0xc0000, 0x02400, 0x00009, 0x40c91, 0x99999, 206 0x000a3, 0x88820, 0x76c06, 0x00000, 0x80000, 0x00180, 0x001a0, 207 0x6b27d, 0x7e49d, 0x00073, 0x51ff3, 0x00086, 0x00186, 208 0x00286, 0x01c25, 0x09c25, 0x11c25, 0x19c25, 0x48538, 0x00c07, 209 0x4bd00, 0x739d0, 0x0adf3, 0x09df0, 0x08ded, 0x07dea, 0x06de7, 210 0x054ee, 0x044eb, 0x034e8, 0x0246b, 0x01468, 0x0006d, 0x30159, 211 0x68200, 0x000ce, 0x48a00, 0x65540, 0x88000, 0x020a0, 0xf02b0, 212 0xef7b0, 0xd4fb0, 0xcf060, 0xb0090, 0xa0080, 0x90080, 0x8f780, 213 0x722b0, 0x6f7b0, 0x54fb0, 0x4f060, 0x30090, 0x20080, 0x10080, 214 0x0f780, 0x000a0, 0x10159, 0x0f407, 0x0c350, 0x0c350, 0x80003, 215 0x0c350, 0x0c350, 0x00001, 0x80000, 0x33e60 216 }; 217 218 static const struct rtwn_rf_prog rtl8188e_rf[] = { 219 { 220 nitems(rtl8188e_rf_regs), 221 rtl8188e_rf_regs, 222 rtl8188e_rf_vals, 223 { 0 }, 224 NULL 225 }, 226 { 0, NULL, NULL, { 0 }, NULL } 227 }; 228 229 #endif /* R88E_PRIV_H */ 230