1122 1123 u_int chip; 1124#define URTWN_CHIP_92C 0x01 1125#define URTWN_CHIP_92C_1T2R 0x02 1126#define URTWN_CHIP_UMC 0x04 1127#define URTWN_CHIP_UMC_A_CUT 0x08 1128 1129 uint8_t board_type; 1130 uint8_t regulatory; 1131 uint8_t pa_setting; 1132 int avg_pwdb; 1133 int thcal_state; 1134 int thcal_lctemp; 1135 int ntxchains; 1136 int nrxchains; 1137 int ledlink; 1138 int sc_txtimer; 1139 1140 int fwcur; 1141 struct urtwn_data sc_rx[URTWN_RX_LIST_COUNT]; 1142 urtwn_datahead sc_rx_active; 1143 urtwn_datahead sc_rx_inactive; 1144 struct urtwn_data sc_tx[URTWN_TX_LIST_COUNT]; 1145 urtwn_datahead sc_tx_active; 1146 urtwn_datahead sc_tx_inactive; 1147 urtwn_datahead sc_tx_pending; 1148 1149 const char *fwname; 1150 const struct firmware *fw_fp; 1151 struct urtwn_fw_info fw; 1152 void *fw_virtaddr; 1153 1154 struct r92c_rom rom; 1155 uint8_t sc_bssid[IEEE80211_ADDR_LEN]; 1156 1157 struct callout sc_watchdog_ch; 1158 struct mtx sc_mtx; 1159 1160/* need to be power of 2, otherwise URTWN_CMDQ_GET fails */ 1161#define URTWN_CMDQ_MAX 16 1162#define URTWN_CMDQ_MASQ (URTWN_CMDQ_MAX - 1) 1163 struct urtwn_cmdq cmdq[URTWN_CMDQ_MAX]; 1164 struct task cmdq_task; 1165 uint32_t cmdq_store; 1166 uint8_t cmdq_exec; 1167 uint8_t cmdq_run; 1168 uint8_t cmdq_key_set; 1169#define URTWN_CMDQ_ABORT 0 1170#define URTWN_CMDQ_GO 1 1171 1172 uint32_t rf_chnlbw[R92C_MAX_CHAINS]; 1173 struct usb_xfer *sc_xfer[URTWN_N_TRANSFER]; 1174 1175 struct urtwn_rx_radiotap_header sc_rxtap; 1176 int sc_rxtap_len; 1177 1178 struct urtwn_tx_radiotap_header sc_txtap; 1179 int sc_txtap_len; 1180}; 1181 1182#define URTWN_LOCK(sc) mtx_lock(&(sc)->sc_mtx) 1183#define URTWN_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx) 1184#define URTWN_ASSERT_LOCKED(sc) mtx_assert(&(sc)->sc_mtx, MA_OWNED) 1185 1186/* 1187 * MAC initialization values. 1188 */ 1189static const struct { 1190 uint16_t reg; 1191 uint8_t val; 1192} rtl8192cu_mac[] = { 1193 { 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 }, 1194 { 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 }, 1195 { 0x436, 0x06 }, { 0x437, 0x07 }, { 0x438, 0x00 }, { 0x439, 0x00 }, 1196 { 0x43a, 0x00 }, { 0x43b, 0x01 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, 1197 { 0x43e, 0x06 }, { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 }, 1198 { 0x442, 0x00 }, { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f }, 1199 { 0x447, 0x00 }, { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 }, 1200 { 0x45b, 0xb9 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x462, 0x08 }, 1201 { 0x463, 0x03 }, { 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff }, 1202 { 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, 1203 { 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, 1204 { 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, 1205 { 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, 1206 { 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, 1207 { 0x515, 0x10 }, { 0x516, 0x0a }, { 0x517, 0x10 }, { 0x51a, 0x16 }, 1208 { 0x524, 0x0f }, { 0x525, 0x4f }, { 0x546, 0x40 }, { 0x547, 0x00 }, 1209 { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55a, 0x02 }, 1210 { 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, 1211 { 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0e }, { 0x63e, 0x0a }, 1212 { 0x63f, 0x0e }, { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, 1213 { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, 1214 { 0x70a, 0x65 }, { 0x70b, 0x87 } 1215}; 1216 1217/* 1218 * Baseband initialization values. 1219 */ 1220struct urtwn_bb_prog { 1221 int count; 1222 const uint16_t *regs; 1223 const uint32_t *vals; 1224 int agccount; 1225 const uint32_t *agcvals; 1226}; 1227 1228/* 1229 * RTL8192CU and RTL8192CE-VAU. 1230 */ 1231static const uint16_t rtl8192ce_bb_regs[] = { 1232 0x024, 0x028, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 1233 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 1234 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 1235 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884, 1236 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 0x908, 1237 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 1238 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 0xc08, 1239 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 1240 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 1241 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 1242 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 1243 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc, 1244 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 0xce0, 1245 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 0xd14, 1246 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48, 1247 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c, 1248 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 0xe18, 1249 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 1250 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70, 1251 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4, 1252 0xed8, 0xedc, 0xee0, 0xeec, 0xf14, 0xf4c, 0xf00 1253}; 1254 1255static const uint32_t rtl8192ce_bb_vals[] = { 1256 0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00, 1257 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 1258 0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727, 1259 0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000, 1260 0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a, 1261 0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27, 1262 0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070, 1263 0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe, 1264 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 1265 0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 1266 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 1267 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 1268 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 1269 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 1270 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 1271 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 1272 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 1273 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 1274 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 1275 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 1276 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 1277 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 1278 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 1279 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 1280 0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333, 1281 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 1282 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 1283 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 1284 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 1285 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 1286 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 1287 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 1288 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 1289 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4, 1290 0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 1291 0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4, 1292 0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003, 1293 0x00000000, 0x00000300 1294}; 1295 1296static const uint32_t rtl8192ce_agc_vals[] = { 1297 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 1298 0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001, 1299 0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001, 1300 0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001, 1301 0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001, 1302 0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001, 1303 0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001, 1304 0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 1305 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 1306 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 1307 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 1308 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 1309 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 1310 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 1311 0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001, 1312 0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001, 1313 0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001, 1314 0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001, 1315 0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001, 1316 0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001, 1317 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 1318 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 1319 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 1320 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 1321 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 1322 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 1323 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 1324 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 1325 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 1326 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 1327 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 1328 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 1329}; 1330 1331static const struct urtwn_bb_prog rtl8192ce_bb_prog = { 1332 nitems(rtl8192ce_bb_regs), 1333 rtl8192ce_bb_regs, 1334 rtl8192ce_bb_vals, 1335 nitems(rtl8192ce_agc_vals), 1336 rtl8192ce_agc_vals 1337}; 1338 1339/* 1340 * RTL8188CU. 1341 */ 1342static const uint32_t rtl8192cu_bb_vals[] = { 1343 0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00, 1344 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 1345 0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727, 1346 0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000, 1347 0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a, 1348 0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27, 1349 0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070, 1350 0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe, 1351 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 1352 0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 1353 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 1354 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 1355 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 1356 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 1357 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 1358 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 1359 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 1360 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x0186115b, 1361 0x0000001f, 0x00b99612, 0x40000100, 0x20f60000, 0x40000100, 1362 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 1363 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 1364 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 1365 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 1366 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 1367 0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333, 1368 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 1369 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 1370 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 1371 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 1372 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 1373 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 1374 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 1375 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 1376 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4, 1377 0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 1378 0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4, 1379 0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003, 1380 0x00000000, 0x00000300 1381}; 1382 1383static const struct urtwn_bb_prog rtl8192cu_bb_prog = { 1384 nitems(rtl8192ce_bb_regs), 1385 rtl8192ce_bb_regs, 1386 rtl8192cu_bb_vals, 1387 nitems(rtl8192ce_agc_vals), 1388 rtl8192ce_agc_vals 1389}; 1390 1391/* 1392 * RTL8188CE-VAU. 1393 */ 1394static const uint32_t rtl8188ce_bb_vals[] = { 1395 0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00, 1396 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 1397 0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000, 1398 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 1399 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a, 1400 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200, 1401 0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070, 1402 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe, 1403 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 1404 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 1405 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 1406 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 1407 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 1408 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 1409 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 1410 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 1411 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 1412 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 1413 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 1414 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 1415 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 1416 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 1417 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 1418 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 1419 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 1420 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 1421 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 1422 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 1423 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 1424 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 1425 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 1426 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 1427 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 1428 0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0, 1429 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 1430 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 1431 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003, 1432 0x00000000, 0x00000300 1433}; 1434 1435static const uint32_t rtl8188ce_agc_vals[] = { 1436 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 1437 0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001, 1438 0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001, 1439 0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001, 1440 0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001, 1441 0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001, 1442 0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001, 1443 0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 1444 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 1445 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 1446 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 1447 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 1448 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 1449 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 1450 0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001, 1451 0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001, 1452 0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001, 1453 0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001, 1454 0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001, 1455 0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001, 1456 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 1457 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 1458 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 1459 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 1460 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 1461 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 1462 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 1463 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 1464 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 1465 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 1466 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 1467 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 1468}; 1469 1470static const struct urtwn_bb_prog rtl8188ce_bb_prog = { 1471 nitems(rtl8192ce_bb_regs), 1472 rtl8192ce_bb_regs, 1473 rtl8188ce_bb_vals, 1474 nitems(rtl8188ce_agc_vals), 1475 rtl8188ce_agc_vals 1476}; 1477 1478static const uint32_t rtl8188cu_bb_vals[] = { 1479 0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00, 1480 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 1481 0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000, 1482 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 1483 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a, 1484 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200, 1485 0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070, 1486 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe, 1487 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 1488 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 1489 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 1490 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 1491 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 1492 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 1493 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 1494 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 1495 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 1496 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 1497 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 1498 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 1499 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 1500 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 1501 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 1502 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 1503 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 1504 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 1505 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 1506 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 1507 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 1508 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 1509 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 1510 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 1511 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 1512 0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0, 1513 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 1514 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 1515 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003, 1516 0x00000000, 0x00000300 1517}; 1518 1519static const struct urtwn_bb_prog rtl8188cu_bb_prog = { 1520 nitems(rtl8192ce_bb_regs), 1521 rtl8192ce_bb_regs, 1522 rtl8188cu_bb_vals, 1523 nitems(rtl8188ce_agc_vals), 1524 rtl8188ce_agc_vals 1525}; 1526 1527/* 1528 * RTL8188RU. 1529 */ 1530static const uint16_t rtl8188ru_bb_regs[] = { 1531 0x024, 0x028, 0x040, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 1532 0x818, 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 1533 0x83c, 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 1534 0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 1535 0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 1536 0x908, 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 1537 0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 1538 0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 1539 0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 1540 0xc50, 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 1541 0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 1542 0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 1543 0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 1544 0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 1545 0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 1546 0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 1547 0xd6c, 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 1548 0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 1549 0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 1550 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 1551 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee8, 0xf14, 0xf4c, 0xf00 1552}; 1553 1554static const uint32_t rtl8188ru_bb_vals[] = { 1555 0x0011800d, 0x00ffdb83, 0x000c0004, 0x80040000, 0x00000001, 1556 0x0000fc00, 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 1557 0x00000000, 0x01000100, 0x00390204, 0x00000000, 0x00000000, 1558 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 1559 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1560 0x569a569a, 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 1561 0x32323200, 0x03000300, 0x22004000, 0x00000808, 0x00ffc3f1, 1562 0xc0083070, 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 1563 0xfffffffe, 0x40302010, 0x00706050, 0x00000000, 0x00000023, 1564 0x00000000, 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 1565 0x2e68120f, 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 1566 0x15160000, 0x070b0f12, 0x00000104, 0x00d30000, 0x101fbf00, 1567 0x00000007, 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 1568 0x08800000, 0x40000100, 0x08800000, 0x40000100, 0x00000000, 1569 0x00000000, 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 1570 0x49795994, 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 1571 0x007f037f, 0x6954342e, 0x43bc0094, 0x6954342f, 0x433c0094, 1572 0x00000000, 0x5116848b, 0x47c00bff, 0x00000036, 0x2c56000d, 1573 0x018610db, 0x0000001f, 0x00b91612, 0x24000090, 0x20f60000, 1574 0x24000090, 0x20200000, 0x00121820, 0x00000000, 0x00121820, 1575 0x00007f7f, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 1576 0x00000000, 0x00000000, 0x00000000, 0x28000000, 0x00000000, 1577 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1578 0x64b22427, 0x00766932, 0x00222222, 0x00000000, 0x37644302, 1579 0x2f97d40c, 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 1580 0xa0633333, 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 1581 0x80608000, 0x00000000, 0x00027293, 0x00000000, 0x00000000, 1582 0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 1583 0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 1584 0x1812362e, 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 1585 0x03902a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 1586 0x00000000, 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 1587 0x01007c00, 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 1588 0x10008c1f, 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 1589 0x631b25a0, 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 1590 0x081b25a0, 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 1591 0x631b25a0, 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 1592 0x31555448, 0x00000003, 0x00000000, 0x00000300 1593}; 1594 1595static const uint32_t rtl8188ru_agc_vals[] = { 1596 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 1597 0x7b050001, 0x7b060001, 0x7b070001, 0x7b080001, 0x7a090001, 1598 0x790a0001, 0x780b0001, 0x770c0001, 0x760d0001, 0x750e0001, 1599 0x740f0001, 0x73100001, 0x72110001, 0x71120001, 0x70130001, 1600 0x6f140001, 0x6e150001, 0x6d160001, 0x6c170001, 0x6b180001, 1601 0x6a190001, 0x691a0001, 0x681b0001, 0x671c0001, 0x661d0001, 1602 0x651e0001, 0x641f0001, 0x63200001, 0x62210001, 0x61220001, 1603 0x60230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 1604 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 1605 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 1606 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 1607 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 1608 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 1609 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 1610 0x7b460001, 0x7b470001, 0x7b480001, 0x7a490001, 0x794a0001, 1611 0x784b0001, 0x774c0001, 0x764d0001, 0x754e0001, 0x744f0001, 1612 0x73500001, 0x72510001, 0x71520001, 0x70530001, 0x6f540001, 1613 0x6e550001, 0x6d560001, 0x6c570001, 0x6b580001, 0x6a590001, 1614 0x695a0001, 0x685b0001, 0x675c0001, 0x665d0001, 0x655e0001, 1615 0x645f0001, 0x63600001, 0x62610001, 0x61620001, 0x60630001, 1616 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 1617 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 1618 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 1619 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 1620 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 1621 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 1622 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 1623 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 1624 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 1625 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 1626 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 1627 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 1628}; 1629 1630static const struct urtwn_bb_prog rtl8188ru_bb_prog = { 1631 nitems(rtl8188ru_bb_regs), 1632 rtl8188ru_bb_regs, 1633 rtl8188ru_bb_vals, 1634 nitems(rtl8188ru_agc_vals), 1635 rtl8188ru_agc_vals 1636}; 1637 1638/* 1639 * RF initialization values. 1640 */ 1641struct urtwn_rf_prog { 1642 int count; 1643 const uint8_t *regs; 1644 const uint32_t *vals; 1645}; 1646 1647/* 1648 * RTL8192CU and RTL8192CE-VAU. 1649 */ 1650static const uint8_t rtl8192ce_rf1_regs[] = { 1651 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 1652 0x0f, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 1653 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2a, 0x2b, 1654 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 1655 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 1656 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 1657 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 1658 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 1659 0x2c, 0x2a, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 1660 0x11, 0x10, 0x11, 0x10, 0x11, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 1661 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 1662 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x00, 1663 0x18, 0xfe, 0xfe, 0x1f, 0xfe, 0xfe, 0x1e, 0x1f, 0x00 1664}; 1665 1666static const uint32_t rtl8192ce_rf1_vals[] = { 1667 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 1668 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 1669 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 1670 0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0, 1671 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 1672 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 1673 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 1674 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 1675 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 1676 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 1677 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 1678 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 1679 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 1680 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 1681 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 1682 0x71000, 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f, 1683 0x18493, 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c, 1684 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 1685 0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 1686 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 1687 0x30159 1688}; 1689 1690static const uint8_t rtl8192ce_rf2_regs[] = { 1691 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 1692 0x0f, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 1693 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 1694 0x15, 0x15, 0x16, 0x16, 0x16, 0x16 1695}; 1696 1697static const uint32_t rtl8192ce_rf2_vals[] = { 1698 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 1699 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x32000, 0x71000, 1700 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f, 0x18493, 1701 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c, 0x1944c, 1702 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 0xcf424, 1703 0xe0330, 0xa0330, 0x60330, 0x20330 1704}; 1705 1706static const struct urtwn_rf_prog rtl8192ce_rf_prog[] = { 1707 { 1708 nitems(rtl8192ce_rf1_regs), 1709 rtl8192ce_rf1_regs, 1710 rtl8192ce_rf1_vals 1711 }, 1712 { 1713 nitems(rtl8192ce_rf2_regs), 1714 rtl8192ce_rf2_regs, 1715 rtl8192ce_rf2_vals 1716 } 1717}; 1718 1719/* 1720 * RTL8188CE-VAU. 1721 */ 1722static const uint32_t rtl8188ce_rf_vals[] = { 1723 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 1724 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 1725 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 1726 0x00000, 0x01558, 0x00060, 0x00483, 0x4f200, 0xec7d9, 0x577c0, 1727 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 1728 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 1729 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 1730 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 1731 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 1732 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 1733 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 1734 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 1735 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 1736 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 1737 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 1738 0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f, 1739 0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020, 1740 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 1741 0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 1742 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 1743 0x30159 1744}; 1745 1746static const struct urtwn_rf_prog rtl8188ce_rf_prog[] = { 1747 { 1748 nitems(rtl8192ce_rf1_regs), 1749 rtl8192ce_rf1_regs, 1750 rtl8188ce_rf_vals 1751 } 1752}; 1753 1754 1755/* 1756 * RTL8188CU. 1757 */ 1758static const uint32_t rtl8188cu_rf_vals[] = { 1759 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 1760 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 1761 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 1762 0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0, 1763 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 1764 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 1765 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 1766 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 1767 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 1768 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 1769 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 1770 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 1771 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 1772 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 1773 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 1774 0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f, 1775 0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020, 1776 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405, 1777 0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 1778 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 1779 0x30159 1780}; 1781 1782static const struct urtwn_rf_prog rtl8188cu_rf_prog[] = { 1783 { 1784 nitems(rtl8192ce_rf1_regs), 1785 rtl8192ce_rf1_regs, 1786 rtl8188cu_rf_vals 1787 } 1788}; 1789 1790/* 1791 * RTL8188RU. 1792 */ 1793static const uint32_t rtl8188ru_rf_vals[] = { 1794 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb0, 1795 0x54867, 0x8992e, 0x0e529, 0x39ce7, 0x00451, 0x00000, 0x00255, 1796 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 1797 0x0083c, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x977c0, 1798 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 1799 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 1800 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 1801 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 1802 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 1803 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 1804 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 1805 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 1806 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 1807 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 1808 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0xd8000, 1809 0x90000, 0x51000, 0x12000, 0x28fb4, 0x24fa8, 0x207a4, 0x1c798, 1810 0x183a4, 0x14398, 0x101a4, 0x0c198, 0x080a4, 0x04098, 0x00014, 1811 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405, 1812 0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 1813 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 1814 0x30159 1815}; 1816 1817static const struct urtwn_rf_prog rtl8188ru_rf_prog[] = { 1818 { 1819 nitems(rtl8192ce_rf1_regs), 1820 rtl8192ce_rf1_regs, 1821 rtl8188ru_rf_vals 1822 } 1823}; 1824 1825struct urtwn_txpwr { 1826 uint8_t pwr[3][28]; 1827}; 1828 1829/* 1830 * Per RF chain/group/rate Tx gain values. 1831 */ 1832static const struct urtwn_txpwr rtl8192cu_txagc[] = { 1833 { { /* Chain 0. */ 1834 { /* Group 0. */ 1835 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1836 0x0c, 0x0c, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, /* OFDM6~54. */ 1837 0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, /* MCS0~7. */ 1838 0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02 /* MCS8~15. */ 1839 }, 1840 { /* Group 1. */ 1841 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1842 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1843 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1844 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1845 }, 1846 { /* Group 2. */ 1847 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1848 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, /* OFDM6~54. */ 1849 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1850 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1851 } 1852 } }, 1853 { { /* Chain 1. */ 1854 { /* Group 0. */ 1855 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1856 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1857 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1858 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1859 }, 1860 { /* Group 1. */ 1861 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1862 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1863 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1864 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1865 }, 1866 { /* Group 2. */ 1867 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1868 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, /* OFDM6~54. */ 1869 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1871 } 1872 } } 1873}; 1874 1875static const struct urtwn_txpwr rtl8188ru_txagc[] = { 1876 { { /* Chain 0. */ 1877 { /* Group 0. */ 1878 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1879 0x08, 0x08, 0x08, 0x06, 0x06, 0x04, 0x04, 0x00, /* OFDM6~54. */ 1880 0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00, /* MCS0~7. */ 1881 0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00 /* MCS8~15. */ 1882 }, 1883 { /* Group 1. */ 1884 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1885 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1886 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1887 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1888 }, 1889 { /* Group 2. */ 1890 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1891 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1892 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1893 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1894 } 1895 } } 1896};
| 1123 1124 u_int chip; 1125#define URTWN_CHIP_92C 0x01 1126#define URTWN_CHIP_92C_1T2R 0x02 1127#define URTWN_CHIP_UMC 0x04 1128#define URTWN_CHIP_UMC_A_CUT 0x08 1129 1130 uint8_t board_type; 1131 uint8_t regulatory; 1132 uint8_t pa_setting; 1133 int avg_pwdb; 1134 int thcal_state; 1135 int thcal_lctemp; 1136 int ntxchains; 1137 int nrxchains; 1138 int ledlink; 1139 int sc_txtimer; 1140 1141 int fwcur; 1142 struct urtwn_data sc_rx[URTWN_RX_LIST_COUNT]; 1143 urtwn_datahead sc_rx_active; 1144 urtwn_datahead sc_rx_inactive; 1145 struct urtwn_data sc_tx[URTWN_TX_LIST_COUNT]; 1146 urtwn_datahead sc_tx_active; 1147 urtwn_datahead sc_tx_inactive; 1148 urtwn_datahead sc_tx_pending; 1149 1150 const char *fwname; 1151 const struct firmware *fw_fp; 1152 struct urtwn_fw_info fw; 1153 void *fw_virtaddr; 1154 1155 struct r92c_rom rom; 1156 uint8_t sc_bssid[IEEE80211_ADDR_LEN]; 1157 1158 struct callout sc_watchdog_ch; 1159 struct mtx sc_mtx; 1160 1161/* need to be power of 2, otherwise URTWN_CMDQ_GET fails */ 1162#define URTWN_CMDQ_MAX 16 1163#define URTWN_CMDQ_MASQ (URTWN_CMDQ_MAX - 1) 1164 struct urtwn_cmdq cmdq[URTWN_CMDQ_MAX]; 1165 struct task cmdq_task; 1166 uint32_t cmdq_store; 1167 uint8_t cmdq_exec; 1168 uint8_t cmdq_run; 1169 uint8_t cmdq_key_set; 1170#define URTWN_CMDQ_ABORT 0 1171#define URTWN_CMDQ_GO 1 1172 1173 uint32_t rf_chnlbw[R92C_MAX_CHAINS]; 1174 struct usb_xfer *sc_xfer[URTWN_N_TRANSFER]; 1175 1176 struct urtwn_rx_radiotap_header sc_rxtap; 1177 int sc_rxtap_len; 1178 1179 struct urtwn_tx_radiotap_header sc_txtap; 1180 int sc_txtap_len; 1181}; 1182 1183#define URTWN_LOCK(sc) mtx_lock(&(sc)->sc_mtx) 1184#define URTWN_UNLOCK(sc) mtx_unlock(&(sc)->sc_mtx) 1185#define URTWN_ASSERT_LOCKED(sc) mtx_assert(&(sc)->sc_mtx, MA_OWNED) 1186 1187/* 1188 * MAC initialization values. 1189 */ 1190static const struct { 1191 uint16_t reg; 1192 uint8_t val; 1193} rtl8192cu_mac[] = { 1194 { 0x420, 0x80 }, { 0x423, 0x00 }, { 0x430, 0x00 }, { 0x431, 0x00 }, 1195 { 0x432, 0x00 }, { 0x433, 0x01 }, { 0x434, 0x04 }, { 0x435, 0x05 }, 1196 { 0x436, 0x06 }, { 0x437, 0x07 }, { 0x438, 0x00 }, { 0x439, 0x00 }, 1197 { 0x43a, 0x00 }, { 0x43b, 0x01 }, { 0x43c, 0x04 }, { 0x43d, 0x05 }, 1198 { 0x43e, 0x06 }, { 0x43f, 0x07 }, { 0x440, 0x5d }, { 0x441, 0x01 }, 1199 { 0x442, 0x00 }, { 0x444, 0x15 }, { 0x445, 0xf0 }, { 0x446, 0x0f }, 1200 { 0x447, 0x00 }, { 0x458, 0x41 }, { 0x459, 0xa8 }, { 0x45a, 0x72 }, 1201 { 0x45b, 0xb9 }, { 0x460, 0x66 }, { 0x461, 0x66 }, { 0x462, 0x08 }, 1202 { 0x463, 0x03 }, { 0x4c8, 0xff }, { 0x4c9, 0x08 }, { 0x4cc, 0xff }, 1203 { 0x4cd, 0xff }, { 0x4ce, 0x01 }, { 0x500, 0x26 }, { 0x501, 0xa2 }, 1204 { 0x502, 0x2f }, { 0x503, 0x00 }, { 0x504, 0x28 }, { 0x505, 0xa3 }, 1205 { 0x506, 0x5e }, { 0x507, 0x00 }, { 0x508, 0x2b }, { 0x509, 0xa4 }, 1206 { 0x50a, 0x5e }, { 0x50b, 0x00 }, { 0x50c, 0x4f }, { 0x50d, 0xa4 }, 1207 { 0x50e, 0x00 }, { 0x50f, 0x00 }, { 0x512, 0x1c }, { 0x514, 0x0a }, 1208 { 0x515, 0x10 }, { 0x516, 0x0a }, { 0x517, 0x10 }, { 0x51a, 0x16 }, 1209 { 0x524, 0x0f }, { 0x525, 0x4f }, { 0x546, 0x40 }, { 0x547, 0x00 }, 1210 { 0x550, 0x10 }, { 0x551, 0x10 }, { 0x559, 0x02 }, { 0x55a, 0x02 }, 1211 { 0x55d, 0xff }, { 0x605, 0x30 }, { 0x608, 0x0e }, { 0x609, 0x2a }, 1212 { 0x652, 0x20 }, { 0x63c, 0x0a }, { 0x63d, 0x0e }, { 0x63e, 0x0a }, 1213 { 0x63f, 0x0e }, { 0x66e, 0x05 }, { 0x700, 0x21 }, { 0x701, 0x43 }, 1214 { 0x702, 0x65 }, { 0x703, 0x87 }, { 0x708, 0x21 }, { 0x709, 0x43 }, 1215 { 0x70a, 0x65 }, { 0x70b, 0x87 } 1216}; 1217 1218/* 1219 * Baseband initialization values. 1220 */ 1221struct urtwn_bb_prog { 1222 int count; 1223 const uint16_t *regs; 1224 const uint32_t *vals; 1225 int agccount; 1226 const uint32_t *agcvals; 1227}; 1228 1229/* 1230 * RTL8192CU and RTL8192CE-VAU. 1231 */ 1232static const uint16_t rtl8192ce_bb_regs[] = { 1233 0x024, 0x028, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 0x818, 1234 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 0x83c, 1235 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 0x860, 1236 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 0x884, 1237 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 0x908, 1238 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 0xa1c, 1239 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 0xc08, 1240 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 0xc2c, 1241 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 0xc50, 1242 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 0xc74, 1243 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 0xc98, 1244 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 0xcbc, 1245 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 0xce0, 1246 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 0xd14, 1247 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 0xd48, 1248 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 0xd6c, 1249 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 0xe18, 1250 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 0xe48, 1251 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 0xe70, 1252 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 0xed4, 1253 0xed8, 0xedc, 0xee0, 0xeec, 0xf14, 0xf4c, 0xf00 1254}; 1255 1256static const uint32_t rtl8192ce_bb_vals[] = { 1257 0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00, 1258 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 1259 0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727, 1260 0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000, 1261 0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a, 1262 0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27, 1263 0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070, 1264 0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe, 1265 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 1266 0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 1267 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 1268 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 1269 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 1270 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 1271 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 1272 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 1273 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 1274 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 1275 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 1276 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 1277 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 1278 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 1279 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 1280 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 1281 0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333, 1282 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 1283 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 1284 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 1285 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 1286 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 1287 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 1288 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 1289 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 1290 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4, 1291 0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 1292 0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4, 1293 0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003, 1294 0x00000000, 0x00000300 1295}; 1296 1297static const uint32_t rtl8192ce_agc_vals[] = { 1298 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 1299 0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001, 1300 0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001, 1301 0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001, 1302 0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001, 1303 0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001, 1304 0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001, 1305 0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 1306 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 1307 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 1308 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 1309 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 1310 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 1311 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 1312 0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001, 1313 0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001, 1314 0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001, 1315 0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001, 1316 0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001, 1317 0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001, 1318 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 1319 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 1320 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 1321 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 1322 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 1323 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 1324 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 1325 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 1326 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 1327 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 1328 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 1329 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 1330}; 1331 1332static const struct urtwn_bb_prog rtl8192ce_bb_prog = { 1333 nitems(rtl8192ce_bb_regs), 1334 rtl8192ce_bb_regs, 1335 rtl8192ce_bb_vals, 1336 nitems(rtl8192ce_agc_vals), 1337 rtl8192ce_agc_vals 1338}; 1339 1340/* 1341 * RTL8188CU. 1342 */ 1343static const uint32_t rtl8192cu_bb_vals[] = { 1344 0x0011800d, 0x00ffdb83, 0x80040002, 0x00000003, 0x0000fc00, 1345 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 1346 0x01000100, 0x00390004, 0x01000100, 0x00390004, 0x27272727, 1347 0x27272727, 0x27272727, 0x27272727, 0x00010000, 0x00010000, 1348 0x27272727, 0x27272727, 0x00000000, 0x00000000, 0x569a569a, 1349 0x0c1b25a4, 0x66e60230, 0x061f0130, 0x27272727, 0x2b2b2b27, 1350 0x07000700, 0x22184000, 0x08080808, 0x00000000, 0xc0083070, 1351 0x000004d5, 0x00000000, 0xcc0000c0, 0x00000800, 0xfffffffe, 1352 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 1353 0x81121313, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 1354 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 1355 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 1356 0x48071d40, 0x03a05633, 0x000000e4, 0x6c6c6c6c, 0x08800000, 1357 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 1358 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 1359 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 1360 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 1361 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x0186115b, 1362 0x0000001f, 0x00b99612, 0x40000100, 0x20f60000, 0x40000100, 1363 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 1364 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 1365 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 1366 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 1367 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 1368 0x00080740, 0x00020403, 0x0000907f, 0x20010201, 0xa0633333, 1369 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 1370 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 1371 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 1372 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 1373 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 1374 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 1375 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 1376 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 1377 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 0x63db25a4, 1378 0x63db25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 0x0c1b25a4, 1379 0x63db25a4, 0x0c1b25a4, 0x63db25a4, 0x63db25a4, 0x63db25a4, 1380 0x63db25a4, 0x001b25a4, 0x001b25a4, 0x6fdb25a4, 0x00000003, 1381 0x00000000, 0x00000300 1382}; 1383 1384static const struct urtwn_bb_prog rtl8192cu_bb_prog = { 1385 nitems(rtl8192ce_bb_regs), 1386 rtl8192ce_bb_regs, 1387 rtl8192cu_bb_vals, 1388 nitems(rtl8192ce_agc_vals), 1389 rtl8192ce_agc_vals 1390}; 1391 1392/* 1393 * RTL8188CE-VAU. 1394 */ 1395static const uint32_t rtl8188ce_bb_vals[] = { 1396 0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00, 1397 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 1398 0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000, 1399 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 1400 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a, 1401 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200, 1402 0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070, 1403 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe, 1404 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 1405 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 1406 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 1407 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 1408 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 1409 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 1410 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 1411 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 1412 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 1413 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 1414 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 1415 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 1416 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 1417 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 1418 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 1419 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 1420 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 1421 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 1422 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 1423 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 1424 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 1425 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 1426 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 1427 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 1428 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 1429 0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0, 1430 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 1431 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 1432 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003, 1433 0x00000000, 0x00000300 1434}; 1435 1436static const uint32_t rtl8188ce_agc_vals[] = { 1437 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 1438 0x7b050001, 0x7a060001, 0x79070001, 0x78080001, 0x77090001, 1439 0x760a0001, 0x750b0001, 0x740c0001, 0x730d0001, 0x720e0001, 1440 0x710f0001, 0x70100001, 0x6f110001, 0x6e120001, 0x6d130001, 1441 0x6c140001, 0x6b150001, 0x6a160001, 0x69170001, 0x68180001, 1442 0x67190001, 0x661a0001, 0x651b0001, 0x641c0001, 0x631d0001, 1443 0x621e0001, 0x611f0001, 0x60200001, 0x49210001, 0x48220001, 1444 0x47230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 1445 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 1446 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 1447 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 1448 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 1449 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 1450 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 1451 0x7a460001, 0x79470001, 0x78480001, 0x77490001, 0x764a0001, 1452 0x754b0001, 0x744c0001, 0x734d0001, 0x724e0001, 0x714f0001, 1453 0x70500001, 0x6f510001, 0x6e520001, 0x6d530001, 0x6c540001, 1454 0x6b550001, 0x6a560001, 0x69570001, 0x68580001, 0x67590001, 1455 0x665a0001, 0x655b0001, 0x645c0001, 0x635d0001, 0x625e0001, 1456 0x615f0001, 0x60600001, 0x49610001, 0x48620001, 0x47630001, 1457 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 1458 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 1459 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 1460 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 1461 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 1462 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 1463 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 1464 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 1465 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 1466 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 1467 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 1468 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 1469}; 1470 1471static const struct urtwn_bb_prog rtl8188ce_bb_prog = { 1472 nitems(rtl8192ce_bb_regs), 1473 rtl8192ce_bb_regs, 1474 rtl8188ce_bb_vals, 1475 nitems(rtl8188ce_agc_vals), 1476 rtl8188ce_agc_vals 1477}; 1478 1479static const uint32_t rtl8188cu_bb_vals[] = { 1480 0x0011800d, 0x00ffdb83, 0x80040000, 0x00000001, 0x0000fc00, 1481 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 0x00000000, 1482 0x01000100, 0x00390004, 0x00000000, 0x00000000, 0x00000000, 1483 0x00000000, 0x00000000, 0x00000000, 0x00010000, 0x00000000, 1484 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x569a569a, 1485 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 0x32323200, 1486 0x07000700, 0x22004000, 0x00000808, 0x00000000, 0xc0083070, 1487 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 0xfffffffe, 1488 0x40302010, 0x00706050, 0x00000000, 0x00000023, 0x00000000, 1489 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 0x2e68120f, 1490 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 0x1a1b0000, 1491 0x090e1317, 0x00000204, 0x00d30000, 0x101fbf00, 0x00000007, 1492 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 0x08800000, 1493 0x40000100, 0x08800000, 0x40000100, 0x00000000, 0x00000000, 1494 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 0x49795994, 1495 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 0x007f037f, 1496 0x6954341e, 0x43bc0094, 0x6954341e, 0x433c0094, 0x00000000, 1497 0x5116848b, 0x47c00bff, 0x00000036, 0x2c7f000d, 0x018610db, 1498 0x0000001f, 0x00b91612, 0x40000100, 0x20f60000, 0x40000100, 1499 0x20200000, 0x00121820, 0x00000000, 0x00121820, 0x00007f7f, 1500 0x00000000, 0x00000080, 0x00000000, 0x00000000, 0x00000000, 1501 0x00000000, 0x00000000, 0x28000000, 0x00000000, 0x00000000, 1502 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x64b22427, 1503 0x00766932, 0x00222222, 0x00000000, 0x37644302, 0x2f97d40c, 1504 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 0xa0633333, 1505 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 0x80608000, 1506 0x00000000, 0x00027293, 0x00000000, 0x00000000, 0x00000000, 1507 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 0x30032064, 1508 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 0x1812362e, 1509 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 0x03902a2a, 1510 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x00000000, 1511 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 0x01007c00, 1512 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 0x10008c1f, 1513 0x02140102, 0x28160d05, 0x00000008, 0x001b25a4, 0x631b25a0, 1514 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 1515 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 0x631b25a0, 1516 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 0x00000003, 1517 0x00000000, 0x00000300 1518}; 1519 1520static const struct urtwn_bb_prog rtl8188cu_bb_prog = { 1521 nitems(rtl8192ce_bb_regs), 1522 rtl8192ce_bb_regs, 1523 rtl8188cu_bb_vals, 1524 nitems(rtl8188ce_agc_vals), 1525 rtl8188ce_agc_vals 1526}; 1527 1528/* 1529 * RTL8188RU. 1530 */ 1531static const uint16_t rtl8188ru_bb_regs[] = { 1532 0x024, 0x028, 0x040, 0x800, 0x804, 0x808, 0x80c, 0x810, 0x814, 1533 0x818, 0x81c, 0x820, 0x824, 0x828, 0x82c, 0x830, 0x834, 0x838, 1534 0x83c, 0x840, 0x844, 0x848, 0x84c, 0x850, 0x854, 0x858, 0x85c, 1535 0x860, 0x864, 0x868, 0x86c, 0x870, 0x874, 0x878, 0x87c, 0x880, 1536 0x884, 0x888, 0x88c, 0x890, 0x894, 0x898, 0x89c, 0x900, 0x904, 1537 0x908, 0x90c, 0xa00, 0xa04, 0xa08, 0xa0c, 0xa10, 0xa14, 0xa18, 1538 0xa1c, 0xa20, 0xa24, 0xa28, 0xa2c, 0xa70, 0xa74, 0xc00, 0xc04, 1539 0xc08, 0xc0c, 0xc10, 0xc14, 0xc18, 0xc1c, 0xc20, 0xc24, 0xc28, 1540 0xc2c, 0xc30, 0xc34, 0xc38, 0xc3c, 0xc40, 0xc44, 0xc48, 0xc4c, 1541 0xc50, 0xc54, 0xc58, 0xc5c, 0xc60, 0xc64, 0xc68, 0xc6c, 0xc70, 1542 0xc74, 0xc78, 0xc7c, 0xc80, 0xc84, 0xc88, 0xc8c, 0xc90, 0xc94, 1543 0xc98, 0xc9c, 0xca0, 0xca4, 0xca8, 0xcac, 0xcb0, 0xcb4, 0xcb8, 1544 0xcbc, 0xcc0, 0xcc4, 0xcc8, 0xccc, 0xcd0, 0xcd4, 0xcd8, 0xcdc, 1545 0xce0, 0xce4, 0xce8, 0xcec, 0xd00, 0xd04, 0xd08, 0xd0c, 0xd10, 1546 0xd14, 0xd18, 0xd2c, 0xd30, 0xd34, 0xd38, 0xd3c, 0xd40, 0xd44, 1547 0xd48, 0xd4c, 0xd50, 0xd54, 0xd58, 0xd5c, 0xd60, 0xd64, 0xd68, 1548 0xd6c, 0xd70, 0xd74, 0xd78, 0xe00, 0xe04, 0xe08, 0xe10, 0xe14, 1549 0xe18, 0xe1c, 0xe28, 0xe30, 0xe34, 0xe38, 0xe3c, 0xe40, 0xe44, 1550 0xe48, 0xe4c, 0xe50, 0xe54, 0xe58, 0xe5c, 0xe60, 0xe68, 0xe6c, 1551 0xe70, 0xe74, 0xe78, 0xe7c, 0xe80, 0xe84, 0xe88, 0xe8c, 0xed0, 1552 0xed4, 0xed8, 0xedc, 0xee0, 0xeec, 0xee8, 0xf14, 0xf4c, 0xf00 1553}; 1554 1555static const uint32_t rtl8188ru_bb_vals[] = { 1556 0x0011800d, 0x00ffdb83, 0x000c0004, 0x80040000, 0x00000001, 1557 0x0000fc00, 0x0000000a, 0x10005388, 0x020c3d10, 0x02200385, 1558 0x00000000, 0x01000100, 0x00390204, 0x00000000, 0x00000000, 1559 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00010000, 1560 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1561 0x569a569a, 0x001b25a4, 0x66e60230, 0x061f0130, 0x00000000, 1562 0x32323200, 0x03000300, 0x22004000, 0x00000808, 0x00ffc3f1, 1563 0xc0083070, 0x000004d5, 0x00000000, 0xccc000c0, 0x00000800, 1564 0xfffffffe, 0x40302010, 0x00706050, 0x00000000, 0x00000023, 1565 0x00000000, 0x81121111, 0x00d047c8, 0x80ff000c, 0x8c838300, 1566 0x2e68120f, 0x9500bb78, 0x11144028, 0x00881117, 0x89140f00, 1567 0x15160000, 0x070b0f12, 0x00000104, 0x00d30000, 0x101fbf00, 1568 0x00000007, 0x48071d40, 0x03a05611, 0x000000e4, 0x6c6c6c6c, 1569 0x08800000, 0x40000100, 0x08800000, 0x40000100, 0x00000000, 1570 0x00000000, 0x00000000, 0x00000000, 0x69e9ac44, 0x469652cf, 1571 0x49795994, 0x0a97971c, 0x1f7c403f, 0x000100b7, 0xec020107, 1572 0x007f037f, 0x6954342e, 0x43bc0094, 0x6954342f, 0x433c0094, 1573 0x00000000, 0x5116848b, 0x47c00bff, 0x00000036, 0x2c56000d, 1574 0x018610db, 0x0000001f, 0x00b91612, 0x24000090, 0x20f60000, 1575 0x24000090, 0x20200000, 0x00121820, 0x00000000, 0x00121820, 1576 0x00007f7f, 0x00000000, 0x00000080, 0x00000000, 0x00000000, 1577 0x00000000, 0x00000000, 0x00000000, 0x28000000, 0x00000000, 1578 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1579 0x64b22427, 0x00766932, 0x00222222, 0x00000000, 0x37644302, 1580 0x2f97d40c, 0x00080740, 0x00020401, 0x0000907f, 0x20010201, 1581 0xa0633333, 0x3333bc43, 0x7a8f5b6b, 0xcc979975, 0x00000000, 1582 0x80608000, 0x00000000, 0x00027293, 0x00000000, 0x00000000, 1583 0x00000000, 0x00000000, 0x6437140a, 0x00000000, 0x00000000, 1584 0x30032064, 0x4653de68, 0x04518a3c, 0x00002101, 0x2a201c16, 1585 0x1812362e, 0x322c2220, 0x000e3c24, 0x2a2a2a2a, 0x2a2a2a2a, 1586 0x03902a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 0x2a2a2a2a, 1587 0x00000000, 0x1000dc1f, 0x10008c1f, 0x02140102, 0x681604c2, 1588 0x01007c00, 0x01004800, 0xfb000000, 0x000028d1, 0x1000dc1f, 1589 0x10008c1f, 0x02140102, 0x28160d05, 0x00000010, 0x001b25a4, 1590 0x631b25a0, 0x631b25a0, 0x081b25a0, 0x081b25a0, 0x081b25a0, 1591 0x081b25a0, 0x631b25a0, 0x081b25a0, 0x631b25a0, 0x631b25a0, 1592 0x631b25a0, 0x631b25a0, 0x001b25a0, 0x001b25a0, 0x6b1b25a0, 1593 0x31555448, 0x00000003, 0x00000000, 0x00000300 1594}; 1595 1596static const uint32_t rtl8188ru_agc_vals[] = { 1597 0x7b000001, 0x7b010001, 0x7b020001, 0x7b030001, 0x7b040001, 1598 0x7b050001, 0x7b060001, 0x7b070001, 0x7b080001, 0x7a090001, 1599 0x790a0001, 0x780b0001, 0x770c0001, 0x760d0001, 0x750e0001, 1600 0x740f0001, 0x73100001, 0x72110001, 0x71120001, 0x70130001, 1601 0x6f140001, 0x6e150001, 0x6d160001, 0x6c170001, 0x6b180001, 1602 0x6a190001, 0x691a0001, 0x681b0001, 0x671c0001, 0x661d0001, 1603 0x651e0001, 0x641f0001, 0x63200001, 0x62210001, 0x61220001, 1604 0x60230001, 0x46240001, 0x45250001, 0x44260001, 0x43270001, 1605 0x42280001, 0x41290001, 0x402a0001, 0x262b0001, 0x252c0001, 1606 0x242d0001, 0x232e0001, 0x222f0001, 0x21300001, 0x20310001, 1607 0x06320001, 0x05330001, 0x04340001, 0x03350001, 0x02360001, 1608 0x01370001, 0x00380001, 0x00390001, 0x003a0001, 0x003b0001, 1609 0x003c0001, 0x003d0001, 0x003e0001, 0x003f0001, 0x7b400001, 1610 0x7b410001, 0x7b420001, 0x7b430001, 0x7b440001, 0x7b450001, 1611 0x7b460001, 0x7b470001, 0x7b480001, 0x7a490001, 0x794a0001, 1612 0x784b0001, 0x774c0001, 0x764d0001, 0x754e0001, 0x744f0001, 1613 0x73500001, 0x72510001, 0x71520001, 0x70530001, 0x6f540001, 1614 0x6e550001, 0x6d560001, 0x6c570001, 0x6b580001, 0x6a590001, 1615 0x695a0001, 0x685b0001, 0x675c0001, 0x665d0001, 0x655e0001, 1616 0x645f0001, 0x63600001, 0x62610001, 0x61620001, 0x60630001, 1617 0x46640001, 0x45650001, 0x44660001, 0x43670001, 0x42680001, 1618 0x41690001, 0x406a0001, 0x266b0001, 0x256c0001, 0x246d0001, 1619 0x236e0001, 0x226f0001, 0x21700001, 0x20710001, 0x06720001, 1620 0x05730001, 0x04740001, 0x03750001, 0x02760001, 0x01770001, 1621 0x00780001, 0x00790001, 0x007a0001, 0x007b0001, 0x007c0001, 1622 0x007d0001, 0x007e0001, 0x007f0001, 0x3800001e, 0x3801001e, 1623 0x3802001e, 0x3803001e, 0x3804001e, 0x3805001e, 0x3806001e, 1624 0x3807001e, 0x3808001e, 0x3c09001e, 0x3e0a001e, 0x400b001e, 1625 0x440c001e, 0x480d001e, 0x4c0e001e, 0x500f001e, 0x5210001e, 1626 0x5611001e, 0x5a12001e, 0x5e13001e, 0x6014001e, 0x6015001e, 1627 0x6016001e, 0x6217001e, 0x6218001e, 0x6219001e, 0x621a001e, 1628 0x621b001e, 0x621c001e, 0x621d001e, 0x621e001e, 0x621f001e 1629}; 1630 1631static const struct urtwn_bb_prog rtl8188ru_bb_prog = { 1632 nitems(rtl8188ru_bb_regs), 1633 rtl8188ru_bb_regs, 1634 rtl8188ru_bb_vals, 1635 nitems(rtl8188ru_agc_vals), 1636 rtl8188ru_agc_vals 1637}; 1638 1639/* 1640 * RF initialization values. 1641 */ 1642struct urtwn_rf_prog { 1643 int count; 1644 const uint8_t *regs; 1645 const uint32_t *vals; 1646}; 1647 1648/* 1649 * RTL8192CU and RTL8192CE-VAU. 1650 */ 1651static const uint8_t rtl8192ce_rf1_regs[] = { 1652 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 1653 0x0f, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f, 0x20, 0x21, 0x22, 1654 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29, 0x2a, 0x2b, 0x2a, 0x2b, 1655 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 1656 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 1657 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 1658 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 1659 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 0x2c, 0x2a, 0x2b, 0x2b, 1660 0x2c, 0x2a, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 0x11, 0x10, 1661 0x11, 0x10, 0x11, 0x10, 0x11, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 1662 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 1663 0x14, 0x14, 0x15, 0x15, 0x15, 0x15, 0x16, 0x16, 0x16, 0x16, 0x00, 1664 0x18, 0xfe, 0xfe, 0x1f, 0xfe, 0xfe, 0x1e, 0x1f, 0x00 1665}; 1666 1667static const uint32_t rtl8192ce_rf1_vals[] = { 1668 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 1669 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 1670 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 1671 0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0, 1672 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 1673 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 1674 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 1675 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 1676 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 1677 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 1678 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 1679 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 1680 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 1681 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 1682 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 1683 0x71000, 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f, 1684 0x18493, 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c, 1685 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 1686 0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 1687 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 1688 0x30159 1689}; 1690 1691static const uint8_t rtl8192ce_rf2_regs[] = { 1692 0x00, 0x01, 0x02, 0x03, 0x04, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 1693 0x0f, 0x12, 0x12, 0x12, 0x12, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 1694 0x13, 0x13, 0x13, 0x13, 0x13, 0x14, 0x14, 0x14, 0x14, 0x15, 0x15, 1695 0x15, 0x15, 0x16, 0x16, 0x16, 0x16 1696}; 1697 1698static const uint32_t rtl8192ce_rf2_vals[] = { 1699 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 1700 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x32000, 0x71000, 1701 0xb0000, 0xfc000, 0x287af, 0x244b7, 0x204ab, 0x1c49f, 0x18493, 1702 0x14297, 0x10295, 0x0c298, 0x0819c, 0x040a8, 0x0001c, 0x1944c, 1703 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 0xcf424, 1704 0xe0330, 0xa0330, 0x60330, 0x20330 1705}; 1706 1707static const struct urtwn_rf_prog rtl8192ce_rf_prog[] = { 1708 { 1709 nitems(rtl8192ce_rf1_regs), 1710 rtl8192ce_rf1_regs, 1711 rtl8192ce_rf1_vals 1712 }, 1713 { 1714 nitems(rtl8192ce_rf2_regs), 1715 rtl8192ce_rf2_regs, 1716 rtl8192ce_rf2_vals 1717 } 1718}; 1719 1720/* 1721 * RTL8188CE-VAU. 1722 */ 1723static const uint32_t rtl8188ce_rf_vals[] = { 1724 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 1725 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 1726 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 1727 0x00000, 0x01558, 0x00060, 0x00483, 0x4f200, 0xec7d9, 0x577c0, 1728 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 1729 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 1730 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 1731 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 1732 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 1733 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 1734 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 1735 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 1736 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 1737 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 1738 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 1739 0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f, 1740 0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020, 1741 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f424, 0x4f424, 0x8f424, 1742 0xcf424, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 1743 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 1744 0x30159 1745}; 1746 1747static const struct urtwn_rf_prog rtl8188ce_rf_prog[] = { 1748 { 1749 nitems(rtl8192ce_rf1_regs), 1750 rtl8192ce_rf1_regs, 1751 rtl8188ce_rf_vals 1752 } 1753}; 1754 1755 1756/* 1757 * RTL8188CU. 1758 */ 1759static const uint32_t rtl8188cu_rf_vals[] = { 1760 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb1, 1761 0x54867, 0x8992e, 0x0e52c, 0x39ce7, 0x00451, 0x00000, 0x10255, 1762 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 1763 0x00000, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x577c0, 1764 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 1765 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 1766 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 1767 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 1768 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 1769 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 1770 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 1771 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 1772 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 1773 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 1774 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0x32000, 1775 0x71000, 0xb0000, 0xfc000, 0x287b3, 0x244b7, 0x204ab, 0x1c49f, 1776 0x18493, 0x1429b, 0x10299, 0x0c29c, 0x081a0, 0x040ac, 0x00020, 1777 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405, 1778 0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 1779 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 1780 0x30159 1781}; 1782 1783static const struct urtwn_rf_prog rtl8188cu_rf_prog[] = { 1784 { 1785 nitems(rtl8192ce_rf1_regs), 1786 rtl8192ce_rf1_regs, 1787 rtl8188cu_rf_vals 1788 } 1789}; 1790 1791/* 1792 * RTL8188RU. 1793 */ 1794static const uint32_t rtl8188ru_rf_vals[] = { 1795 0x30159, 0x31284, 0x98000, 0x18c63, 0x210e7, 0x2044f, 0x1adb0, 1796 0x54867, 0x8992e, 0x0e529, 0x39ce7, 0x00451, 0x00000, 0x00255, 1797 0x60a00, 0xfc378, 0xa1250, 0x4445f, 0x80001, 0x0b614, 0x6c000, 1798 0x0083c, 0x01558, 0x00060, 0x00483, 0x4f000, 0xec7d9, 0x977c0, 1799 0x04783, 0x00001, 0x21334, 0x00000, 0x00054, 0x00001, 0x00808, 1800 0x53333, 0x0000c, 0x00002, 0x00808, 0x5b333, 0x0000d, 0x00003, 1801 0x00808, 0x63333, 0x0000d, 0x00004, 0x00808, 0x6b333, 0x0000d, 1802 0x00005, 0x00808, 0x73333, 0x0000d, 0x00006, 0x00709, 0x5b333, 1803 0x0000d, 0x00007, 0x00709, 0x63333, 0x0000d, 0x00008, 0x0060a, 1804 0x4b333, 0x0000d, 0x00009, 0x0060a, 0x53333, 0x0000d, 0x0000a, 1805 0x0060a, 0x5b333, 0x0000d, 0x0000b, 0x0060a, 0x63333, 0x0000d, 1806 0x0000c, 0x0060a, 0x6b333, 0x0000d, 0x0000d, 0x0060a, 0x73333, 1807 0x0000d, 0x0000e, 0x0050b, 0x66666, 0x0001a, 0xe0000, 0x4000f, 1808 0xe31fc, 0x6000f, 0xff9f8, 0x2000f, 0x203f9, 0x3000f, 0xff500, 1809 0x00000, 0x00000, 0x8000f, 0x3f100, 0x9000f, 0x23100, 0xd8000, 1810 0x90000, 0x51000, 0x12000, 0x28fb4, 0x24fa8, 0x207a4, 0x1c798, 1811 0x183a4, 0x14398, 0x101a4, 0x0c198, 0x080a4, 0x04098, 0x00014, 1812 0x1944c, 0x59444, 0x9944c, 0xd9444, 0x0f405, 0x4f405, 0x8f405, 1813 0xcf405, 0xe0330, 0xa0330, 0x60330, 0x20330, 0x10159, 0x0f401, 1814 0x00000, 0x00000, 0x80003, 0x00000, 0x00000, 0x44457, 0x80000, 1815 0x30159 1816}; 1817 1818static const struct urtwn_rf_prog rtl8188ru_rf_prog[] = { 1819 { 1820 nitems(rtl8192ce_rf1_regs), 1821 rtl8192ce_rf1_regs, 1822 rtl8188ru_rf_vals 1823 } 1824}; 1825 1826struct urtwn_txpwr { 1827 uint8_t pwr[3][28]; 1828}; 1829 1830/* 1831 * Per RF chain/group/rate Tx gain values. 1832 */ 1833static const struct urtwn_txpwr rtl8192cu_txagc[] = { 1834 { { /* Chain 0. */ 1835 { /* Group 0. */ 1836 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1837 0x0c, 0x0c, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, /* OFDM6~54. */ 1838 0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02, /* MCS0~7. */ 1839 0x0e, 0x0d, 0x0c, 0x0a, 0x08, 0x06, 0x04, 0x02 /* MCS8~15. */ 1840 }, 1841 { /* Group 1. */ 1842 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1843 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1844 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1845 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1846 }, 1847 { /* Group 2. */ 1848 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1849 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, /* OFDM6~54. */ 1850 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1851 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1852 } 1853 } }, 1854 { { /* Chain 1. */ 1855 { /* Group 0. */ 1856 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1857 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1858 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1859 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1860 }, 1861 { /* Group 1. */ 1862 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1863 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1864 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1865 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1866 }, 1867 { /* Group 2. */ 1868 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1869 0x04, 0x04, 0x04, 0x04, 0x04, 0x02, 0x02, 0x00, /* OFDM6~54. */ 1870 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1871 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1872 } 1873 } } 1874}; 1875 1876static const struct urtwn_txpwr rtl8188ru_txagc[] = { 1877 { { /* Chain 0. */ 1878 { /* Group 0. */ 1879 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1880 0x08, 0x08, 0x08, 0x06, 0x06, 0x04, 0x04, 0x00, /* OFDM6~54. */ 1881 0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00, /* MCS0~7. */ 1882 0x08, 0x06, 0x06, 0x04, 0x04, 0x02, 0x02, 0x00 /* MCS8~15. */ 1883 }, 1884 { /* Group 1. */ 1885 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1886 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1887 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1888 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1889 }, 1890 { /* Group 2. */ 1891 0x00, 0x00, 0x00, 0x00, /* CCK1~11. */ 1892 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* OFDM6~54. */ 1893 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* MCS0~7. */ 1894 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 /* MCS8~15. */ 1895 } 1896 } } 1897};
|