aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/b43
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/b43')
-rw-r--r--drivers/net/wireless/b43/Kconfig2
-rw-r--r--drivers/net/wireless/b43/main.c6
-rw-r--r--drivers/net/wireless/b43/phy_n.c207
-rw-r--r--drivers/net/wireless/b43/tables_nphy.c1209
-rw-r--r--drivers/net/wireless/b43/tables_nphy.h52
-rw-r--r--drivers/net/wireless/b43/xmit.c75
-rw-r--r--drivers/net/wireless/b43/xmit.h6
7 files changed, 1524 insertions, 33 deletions
diff --git a/drivers/net/wireless/b43/Kconfig b/drivers/net/wireless/b43/Kconfig
index 47033f6a1c2b..480595f04411 100644
--- a/drivers/net/wireless/b43/Kconfig
+++ b/drivers/net/wireless/b43/Kconfig
@@ -92,7 +92,7 @@ config B43_PHY_N
92 ---help--- 92 ---help---
93 Support for the N-PHY. 93 Support for the N-PHY.
94 94
95 This enables support for devices with N-PHY revision up to 2. 95 This enables support for devices with N-PHY.
96 96
97 Say N if you expect high stability and performance. Saying Y will not 97 Say N if you expect high stability and performance. Saying Y will not
98 affect other devices support and may provide support for basic needs. 98 affect other devices support and may provide support for basic needs.
diff --git a/drivers/net/wireless/b43/main.c b/drivers/net/wireless/b43/main.c
index 22bc9f17f634..57eb5b649730 100644
--- a/drivers/net/wireless/b43/main.c
+++ b/drivers/net/wireless/b43/main.c
@@ -3203,7 +3203,7 @@ static void b43_tx_work(struct work_struct *work)
3203 mutex_unlock(&wl->mutex); 3203 mutex_unlock(&wl->mutex);
3204} 3204}
3205 3205
3206static int b43_op_tx(struct ieee80211_hw *hw, 3206static void b43_op_tx(struct ieee80211_hw *hw,
3207 struct sk_buff *skb) 3207 struct sk_buff *skb)
3208{ 3208{
3209 struct b43_wl *wl = hw_to_b43_wl(hw); 3209 struct b43_wl *wl = hw_to_b43_wl(hw);
@@ -3211,14 +3211,12 @@ static int b43_op_tx(struct ieee80211_hw *hw,
3211 if (unlikely(skb->len < 2 + 2 + 6)) { 3211 if (unlikely(skb->len < 2 + 2 + 6)) {
3212 /* Too short, this can't be a valid frame. */ 3212 /* Too short, this can't be a valid frame. */
3213 dev_kfree_skb_any(skb); 3213 dev_kfree_skb_any(skb);
3214 return NETDEV_TX_OK; 3214 return;
3215 } 3215 }
3216 B43_WARN_ON(skb_shinfo(skb)->nr_frags); 3216 B43_WARN_ON(skb_shinfo(skb)->nr_frags);
3217 3217
3218 skb_queue_tail(&wl->tx_queue, skb); 3218 skb_queue_tail(&wl->tx_queue, skb);
3219 ieee80211_queue_work(wl->hw, &wl->tx_work); 3219 ieee80211_queue_work(wl->hw, &wl->tx_work);
3220
3221 return NETDEV_TX_OK;
3222} 3220}
3223 3221
3224static void b43_qos_params_upload(struct b43_wldev *dev, 3222static void b43_qos_params_upload(struct b43_wldev *dev,
diff --git a/drivers/net/wireless/b43/phy_n.c b/drivers/net/wireless/b43/phy_n.c
index ab81ed8b19d7..8a00f9a95dbb 100644
--- a/drivers/net/wireless/b43/phy_n.c
+++ b/drivers/net/wireless/b43/phy_n.c
@@ -430,9 +430,9 @@ static void b43_radio_init2055_post(struct b43_wldev *dev)
430 bool workaround = false; 430 bool workaround = false;
431 431
432 if (sprom->revision < 4) 432 if (sprom->revision < 4)
433 workaround = (binfo->vendor != PCI_VENDOR_ID_BROADCOM || 433 workaround = (binfo->vendor != PCI_VENDOR_ID_BROADCOM &&
434 binfo->type != 0x46D || 434 binfo->type == 0x46D &&
435 binfo->rev < 0x41); 435 binfo->rev >= 0x41);
436 else 436 else
437 workaround = 437 workaround =
438 !(sprom->boardflags2_lo & B43_BFL2_RXBB_INT_REG_DIS); 438 !(sprom->boardflags2_lo & B43_BFL2_RXBB_INT_REG_DIS);
@@ -1168,23 +1168,98 @@ static void b43_nphy_adjust_lna_gain_table(struct b43_wldev *dev)
1168static void b43_nphy_gain_ctrl_workarounds(struct b43_wldev *dev) 1168static void b43_nphy_gain_ctrl_workarounds(struct b43_wldev *dev)
1169{ 1169{
1170 struct b43_phy_n *nphy = dev->phy.n; 1170 struct b43_phy_n *nphy = dev->phy.n;
1171 struct ssb_sprom *sprom = &(dev->dev->bus->sprom);
1172
1173 /* PHY rev 0, 1, 2 */
1171 u8 i, j; 1174 u8 i, j;
1172 u8 code; 1175 u8 code;
1173 u16 tmp; 1176 u16 tmp;
1177 u8 rfseq_events[3] = { 6, 8, 7 };
1178 u8 rfseq_delays[3] = { 10, 30, 1 };
1174 1179
1175 /* TODO: for PHY >= 3 1180 /* PHY rev >= 3 */
1176 s8 *lna1_gain, *lna2_gain; 1181 bool ghz5;
1177 u8 *gain_db, *gain_bits; 1182 bool ext_lna;
1178 u16 *rfseq_init; 1183 u16 rssi_gain;
1184 struct nphy_gain_ctl_workaround_entry *e;
1179 u8 lpf_gain[6] = { 0x00, 0x06, 0x0C, 0x12, 0x12, 0x12 }; 1185 u8 lpf_gain[6] = { 0x00, 0x06, 0x0C, 0x12, 0x12, 0x12 };
1180 u8 lpf_bits[6] = { 0, 1, 2, 3, 3, 3 }; 1186 u8 lpf_bits[6] = { 0, 1, 2, 3, 3, 3 };
1181 */
1182
1183 u8 rfseq_events[3] = { 6, 8, 7 };
1184 u8 rfseq_delays[3] = { 10, 30, 1 };
1185 1187
1186 if (dev->phy.rev >= 3) { 1188 if (dev->phy.rev >= 3) {
1187 /* TODO */ 1189 /* Prepare values */
1190 ghz5 = b43_phy_read(dev, B43_NPHY_BANDCTL)
1191 & B43_NPHY_BANDCTL_5GHZ;
1192 ext_lna = sprom->boardflags_lo & B43_BFL_EXTLNA;
1193 e = b43_nphy_get_gain_ctl_workaround_ent(dev, ghz5, ext_lna);
1194 if (ghz5 && dev->phy.rev >= 5)
1195 rssi_gain = 0x90;
1196 else
1197 rssi_gain = 0x50;
1198
1199 b43_phy_set(dev, B43_NPHY_RXCTL, 0x0040);
1200
1201 /* Set Clip 2 detect */
1202 b43_phy_set(dev, B43_NPHY_C1_CGAINI,
1203 B43_NPHY_C1_CGAINI_CL2DETECT);
1204 b43_phy_set(dev, B43_NPHY_C2_CGAINI,
1205 B43_NPHY_C2_CGAINI_CL2DETECT);
1206
1207 b43_radio_write(dev, B2056_RX0 | B2056_RX_BIASPOLE_LNAG1_IDAC,
1208 0x17);
1209 b43_radio_write(dev, B2056_RX1 | B2056_RX_BIASPOLE_LNAG1_IDAC,
1210 0x17);
1211 b43_radio_write(dev, B2056_RX0 | B2056_RX_LNAG2_IDAC, 0xF0);
1212 b43_radio_write(dev, B2056_RX1 | B2056_RX_LNAG2_IDAC, 0xF0);
1213 b43_radio_write(dev, B2056_RX0 | B2056_RX_RSSI_POLE, 0x00);
1214 b43_radio_write(dev, B2056_RX1 | B2056_RX_RSSI_POLE, 0x00);
1215 b43_radio_write(dev, B2056_RX0 | B2056_RX_RSSI_GAIN,
1216 rssi_gain);
1217 b43_radio_write(dev, B2056_RX1 | B2056_RX_RSSI_GAIN,
1218 rssi_gain);
1219 b43_radio_write(dev, B2056_RX0 | B2056_RX_BIASPOLE_LNAA1_IDAC,
1220 0x17);
1221 b43_radio_write(dev, B2056_RX1 | B2056_RX_BIASPOLE_LNAA1_IDAC,
1222 0x17);
1223 b43_radio_write(dev, B2056_RX0 | B2056_RX_LNAA2_IDAC, 0xFF);
1224 b43_radio_write(dev, B2056_RX1 | B2056_RX_LNAA2_IDAC, 0xFF);
1225
1226 b43_ntab_write_bulk(dev, B43_NTAB8(0, 8), 4, e->lna1_gain);
1227 b43_ntab_write_bulk(dev, B43_NTAB8(1, 8), 4, e->lna1_gain);
1228 b43_ntab_write_bulk(dev, B43_NTAB8(0, 16), 4, e->lna2_gain);
1229 b43_ntab_write_bulk(dev, B43_NTAB8(1, 16), 4, e->lna2_gain);
1230 b43_ntab_write_bulk(dev, B43_NTAB8(0, 32), 10, e->gain_db);
1231 b43_ntab_write_bulk(dev, B43_NTAB8(1, 32), 10, e->gain_db);
1232 b43_ntab_write_bulk(dev, B43_NTAB8(2, 32), 10, e->gain_bits);
1233 b43_ntab_write_bulk(dev, B43_NTAB8(3, 32), 10, e->gain_bits);
1234 b43_ntab_write_bulk(dev, B43_NTAB8(0, 0x40), 6, lpf_gain);
1235 b43_ntab_write_bulk(dev, B43_NTAB8(1, 0x40), 6, lpf_gain);
1236 b43_ntab_write_bulk(dev, B43_NTAB8(2, 0x40), 6, lpf_bits);
1237 b43_ntab_write_bulk(dev, B43_NTAB8(3, 0x40), 6, lpf_bits);
1238
1239 b43_phy_write(dev, B43_NPHY_C1_INITGAIN, e->init_gain);
1240 b43_phy_write(dev, 0x2A7, e->init_gain);
1241 b43_ntab_write_bulk(dev, B43_NTAB16(7, 0x106), 2,
1242 e->rfseq_init);
1243 b43_phy_write(dev, B43_NPHY_C1_INITGAIN, e->init_gain);
1244
1245 /* TODO: check defines. Do not match variables names */
1246 b43_phy_write(dev, B43_NPHY_C1_CLIP1_MEDGAIN, e->cliphi_gain);
1247 b43_phy_write(dev, 0x2A9, e->cliphi_gain);
1248 b43_phy_write(dev, B43_NPHY_C1_CLIP2_GAIN, e->clipmd_gain);
1249 b43_phy_write(dev, 0x2AB, e->clipmd_gain);
1250 b43_phy_write(dev, B43_NPHY_C2_CLIP1_HIGAIN, e->cliplo_gain);
1251 b43_phy_write(dev, 0x2AD, e->cliplo_gain);
1252
1253 b43_phy_maskset(dev, 0x27D, 0xFF00, e->crsmin);
1254 b43_phy_maskset(dev, 0x280, 0xFF00, e->crsminl);
1255 b43_phy_maskset(dev, 0x283, 0xFF00, e->crsminu);
1256 b43_phy_write(dev, B43_NPHY_C1_NBCLIPTHRES, e->nbclip);
1257 b43_phy_write(dev, B43_NPHY_C2_NBCLIPTHRES, e->nbclip);
1258 b43_phy_maskset(dev, B43_NPHY_C1_CLIPWBTHRES,
1259 ~B43_NPHY_C1_CLIPWBTHRES_CLIP2, e->wlclip);
1260 b43_phy_maskset(dev, B43_NPHY_C2_CLIPWBTHRES,
1261 ~B43_NPHY_C2_CLIPWBTHRES_CLIP2, e->wlclip);
1262 b43_phy_write(dev, B43_NPHY_CCK_SHIFTB_REF, 0x809C);
1188 } else { 1263 } else {
1189 /* Set Clip 2 detect */ 1264 /* Set Clip 2 detect */
1190 b43_phy_set(dev, B43_NPHY_C1_CGAINI, 1265 b43_phy_set(dev, B43_NPHY_C1_CGAINI,
@@ -1281,17 +1356,17 @@ static void b43_nphy_gain_ctrl_workarounds(struct b43_wldev *dev)
1281 B43_NPHY_TABLE_DATALO, tmp); 1356 B43_NPHY_TABLE_DATALO, tmp);
1282 } 1357 }
1283 } 1358 }
1359 }
1284 1360
1285 b43_nphy_set_rf_sequence(dev, 5, 1361 b43_nphy_set_rf_sequence(dev, 5,
1286 rfseq_events, rfseq_delays, 3); 1362 rfseq_events, rfseq_delays, 3);
1287 b43_phy_maskset(dev, B43_NPHY_OVER_DGAIN1, 1363 b43_phy_maskset(dev, B43_NPHY_OVER_DGAIN1,
1288 ~B43_NPHY_OVER_DGAIN_CCKDGECV & 0xFFFF, 1364 ~B43_NPHY_OVER_DGAIN_CCKDGECV & 0xFFFF,
1289 0x5A << B43_NPHY_OVER_DGAIN_CCKDGECV_SHIFT); 1365 0x5A << B43_NPHY_OVER_DGAIN_CCKDGECV_SHIFT);
1290 1366
1291 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) 1367 if (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ)
1292 b43_phy_maskset(dev, B43_PHY_N(0xC5D), 1368 b43_phy_maskset(dev, B43_PHY_N(0xC5D),
1293 0xFF80, 4); 1369 0xFF80, 4);
1294 }
1295 } 1370 }
1296} 1371}
1297 1372
@@ -1308,6 +1383,9 @@ static void b43_nphy_workarounds(struct b43_wldev *dev)
1308 u8 events2[7] = { 0x0, 0x3, 0x5, 0x4, 0x2, 0x1, 0x8 }; 1383 u8 events2[7] = { 0x0, 0x3, 0x5, 0x4, 0x2, 0x1, 0x8 };
1309 u8 delays2[7] = { 0x8, 0x6, 0x2, 0x4, 0x4, 0x6, 0x1 }; 1384 u8 delays2[7] = { 0x8, 0x6, 0x2, 0x4, 0x4, 0x6, 0x1 };
1310 1385
1386 u16 tmp16;
1387 u32 tmp32;
1388
1311 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) 1389 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ)
1312 b43_nphy_classifier(dev, 1, 0); 1390 b43_nphy_classifier(dev, 1, 0);
1313 else 1391 else
@@ -1320,7 +1398,82 @@ static void b43_nphy_workarounds(struct b43_wldev *dev)
1320 B43_NPHY_IQFLIP_ADC1 | B43_NPHY_IQFLIP_ADC2); 1398 B43_NPHY_IQFLIP_ADC1 | B43_NPHY_IQFLIP_ADC2);
1321 1399
1322 if (dev->phy.rev >= 3) { 1400 if (dev->phy.rev >= 3) {
1401 tmp32 = b43_ntab_read(dev, B43_NTAB32(30, 0));
1402 tmp32 &= 0xffffff;
1403 b43_ntab_write(dev, B43_NTAB32(30, 0), tmp32);
1404
1405 b43_phy_write(dev, B43_NPHY_PHASETR_A0, 0x0125);
1406 b43_phy_write(dev, B43_NPHY_PHASETR_A1, 0x01B3);
1407 b43_phy_write(dev, B43_NPHY_PHASETR_A2, 0x0105);
1408 b43_phy_write(dev, B43_NPHY_PHASETR_B0, 0x016E);
1409 b43_phy_write(dev, B43_NPHY_PHASETR_B1, 0x00CD);
1410 b43_phy_write(dev, B43_NPHY_PHASETR_B2, 0x0020);
1411
1412 b43_phy_write(dev, B43_NPHY_C2_CLIP1_MEDGAIN, 0x000C);
1413 b43_phy_write(dev, 0x2AE, 0x000C);
1414
1323 /* TODO */ 1415 /* TODO */
1416
1417 tmp16 = (b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ) ?
1418 0x2 : 0x9C40;
1419 b43_phy_write(dev, B43_NPHY_ENDROP_TLEN, tmp16);
1420
1421 b43_phy_maskset(dev, 0x294, 0xF0FF, 0x0700);
1422
1423 b43_ntab_write(dev, B43_NTAB32(16, 3), 0x18D);
1424 b43_ntab_write(dev, B43_NTAB32(16, 127), 0x18D);
1425
1426 b43_nphy_gain_ctrl_workarounds(dev);
1427
1428 b43_ntab_write(dev, B43_NTAB32(8, 0), 2);
1429 b43_ntab_write(dev, B43_NTAB32(8, 16), 2);
1430
1431 /* TODO */
1432
1433 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_MAST_BIAS, 0x00);
1434 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_MAST_BIAS, 0x00);
1435 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_BIAS_MAIN, 0x06);
1436 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_BIAS_MAIN, 0x06);
1437 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_BIAS_AUX, 0x07);
1438 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_BIAS_AUX, 0x07);
1439 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXA_LOB_BIAS, 0x88);
1440 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXA_LOB_BIAS, 0x88);
1441 b43_radio_write(dev, B2056_RX0 | B2056_RX_MIXG_CMFB_IDAC, 0x00);
1442 b43_radio_write(dev, B2056_RX1 | B2056_RX_MIXG_CMFB_IDAC, 0x00);
1443
1444 /* N PHY WAR TX Chain Update with hw_phytxchain as argument */
1445
1446 if ((bus->sprom.boardflags2_lo & B43_BFL2_APLL_WAR &&
1447 b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) ||
1448 (bus->sprom.boardflags2_lo & B43_BFL2_GPLL_WAR &&
1449 b43_current_band(dev->wl) == IEEE80211_BAND_2GHZ))
1450 tmp32 = 0x00088888;
1451 else
1452 tmp32 = 0x88888888;
1453 b43_ntab_write(dev, B43_NTAB32(30, 1), tmp32);
1454 b43_ntab_write(dev, B43_NTAB32(30, 2), tmp32);
1455 b43_ntab_write(dev, B43_NTAB32(30, 3), tmp32);
1456
1457 if (dev->phy.rev == 4 &&
1458 b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ) {
1459 b43_radio_write(dev, B2056_TX0 | B2056_TX_GMBB_IDAC,
1460 0x70);
1461 b43_radio_write(dev, B2056_TX1 | B2056_TX_GMBB_IDAC,
1462 0x70);
1463 }
1464
1465 b43_phy_write(dev, 0x224, 0x039C);
1466 b43_phy_write(dev, 0x225, 0x0357);
1467 b43_phy_write(dev, 0x226, 0x0317);
1468 b43_phy_write(dev, 0x227, 0x02D7);
1469 b43_phy_write(dev, 0x228, 0x039C);
1470 b43_phy_write(dev, 0x229, 0x0357);
1471 b43_phy_write(dev, 0x22A, 0x0317);
1472 b43_phy_write(dev, 0x22B, 0x02D7);
1473 b43_phy_write(dev, 0x22C, 0x039C);
1474 b43_phy_write(dev, 0x22D, 0x0357);
1475 b43_phy_write(dev, 0x22E, 0x0317);
1476 b43_phy_write(dev, 0x22F, 0x02D7);
1324 } else { 1477 } else {
1325 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ && 1478 if (b43_current_band(dev->wl) == IEEE80211_BAND_5GHZ &&
1326 nphy->band5g_pwrgain) { 1479 nphy->band5g_pwrgain) {
@@ -2128,7 +2281,7 @@ static int b43_nphy_poll_rssi(struct b43_wldev *dev, u8 type, s32 *buf,
2128 save_regs_phy[5] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER); 2281 save_regs_phy[5] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER);
2129 save_regs_phy[6] = b43_phy_read(dev, B43_NPHY_TXF_40CO_B1S0); 2282 save_regs_phy[6] = b43_phy_read(dev, B43_NPHY_TXF_40CO_B1S0);
2130 save_regs_phy[7] = b43_phy_read(dev, B43_NPHY_TXF_40CO_B32S1); 2283 save_regs_phy[7] = b43_phy_read(dev, B43_NPHY_TXF_40CO_B32S1);
2131 } else if (dev->phy.rev == 2) { 2284 } else {
2132 save_regs_phy[0] = b43_phy_read(dev, B43_NPHY_AFECTL_C1); 2285 save_regs_phy[0] = b43_phy_read(dev, B43_NPHY_AFECTL_C1);
2133 save_regs_phy[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2); 2286 save_regs_phy[1] = b43_phy_read(dev, B43_NPHY_AFECTL_C2);
2134 save_regs_phy[2] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER); 2287 save_regs_phy[2] = b43_phy_read(dev, B43_NPHY_AFECTL_OVER);
@@ -2179,7 +2332,7 @@ static int b43_nphy_poll_rssi(struct b43_wldev *dev, u8 type, s32 *buf,
2179 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, save_regs_phy[5]); 2332 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, save_regs_phy[5]);
2180 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S0, save_regs_phy[6]); 2333 b43_phy_write(dev, B43_NPHY_TXF_40CO_B1S0, save_regs_phy[6]);
2181 b43_phy_write(dev, B43_NPHY_TXF_40CO_B32S1, save_regs_phy[7]); 2334 b43_phy_write(dev, B43_NPHY_TXF_40CO_B32S1, save_regs_phy[7]);
2182 } else if (dev->phy.rev == 2) { 2335 } else {
2183 b43_phy_write(dev, B43_NPHY_AFECTL_C1, save_regs_phy[0]); 2336 b43_phy_write(dev, B43_NPHY_AFECTL_C1, save_regs_phy[0]);
2184 b43_phy_write(dev, B43_NPHY_AFECTL_C2, save_regs_phy[1]); 2337 b43_phy_write(dev, B43_NPHY_AFECTL_C2, save_regs_phy[1]);
2185 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, save_regs_phy[2]); 2338 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, save_regs_phy[2]);
@@ -3878,10 +4031,14 @@ static void b43_nphy_op_software_rfkill(struct b43_wldev *dev,
3878 } 4031 }
3879} 4032}
3880 4033
4034/* http://bcm-v4.sipsolutions.net/802.11/PHY/Anacore */
3881static void b43_nphy_op_switch_analog(struct b43_wldev *dev, bool on) 4035static void b43_nphy_op_switch_analog(struct b43_wldev *dev, bool on)
3882{ 4036{
3883 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, 4037 u16 val = on ? 0 : 0x7FFF;
3884 on ? 0 : 0x7FFF); 4038
4039 if (dev->phy.rev >= 3)
4040 b43_phy_write(dev, B43_NPHY_AFECTL_OVER1, val);
4041 b43_phy_write(dev, B43_NPHY_AFECTL_OVER, val);
3885} 4042}
3886 4043
3887static int b43_nphy_op_switch_channel(struct b43_wldev *dev, 4044static int b43_nphy_op_switch_channel(struct b43_wldev *dev,
diff --git a/drivers/net/wireless/b43/tables_nphy.c b/drivers/net/wireless/b43/tables_nphy.c
index dc8ef09a8552..2de483b3d3ba 100644
--- a/drivers/net/wireless/b43/tables_nphy.c
+++ b/drivers/net/wireless/b43/tables_nphy.c
@@ -1097,6 +1097,1080 @@ static const u32 b43_ntab_tmap[] = {
1097 0x00000000, 0x00000000, 0x00000000, 0x00000000, 1097 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1098}; 1098};
1099 1099
1100/* static tables, PHY revision >= 3 */
1101static const u32 b43_ntab_framestruct_r3[] = {
1102 0x08004a04, 0x00100000, 0x01000a05, 0x00100020,
1103 0x09804506, 0x00100030, 0x09804507, 0x00100030,
1104 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1105 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1106 0x08004a0c, 0x00100004, 0x01000a0d, 0x00100024,
1107 0x0980450e, 0x00100034, 0x0980450f, 0x00100034,
1108 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1109 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1110 0x00000a04, 0x00100000, 0x11008a05, 0x00100020,
1111 0x1980c506, 0x00100030, 0x21810506, 0x00100030,
1112 0x21810506, 0x00100030, 0x01800504, 0x00100030,
1113 0x11808505, 0x00100030, 0x29814507, 0x01100030,
1114 0x00000a04, 0x00100000, 0x11008a05, 0x00100020,
1115 0x21810506, 0x00100030, 0x21810506, 0x00100030,
1116 0x29814507, 0x01100030, 0x00000000, 0x00000000,
1117 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1118 0x00000a0c, 0x00100008, 0x11008a0d, 0x00100028,
1119 0x1980c50e, 0x00100038, 0x2181050e, 0x00100038,
1120 0x2181050e, 0x00100038, 0x0180050c, 0x00100038,
1121 0x1180850d, 0x00100038, 0x2981450f, 0x01100038,
1122 0x00000a0c, 0x00100008, 0x11008a0d, 0x00100028,
1123 0x2181050e, 0x00100038, 0x2181050e, 0x00100038,
1124 0x2981450f, 0x01100038, 0x00000000, 0x00000000,
1125 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1126 0x08004a04, 0x00100000, 0x01000a05, 0x00100020,
1127 0x1980c506, 0x00100030, 0x1980c506, 0x00100030,
1128 0x11808504, 0x00100030, 0x3981ca05, 0x00100030,
1129 0x29814507, 0x01100030, 0x00000000, 0x00000000,
1130 0x10008a04, 0x00100000, 0x3981ca05, 0x00100030,
1131 0x1980c506, 0x00100030, 0x29814507, 0x01100030,
1132 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1133 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1134 0x08004a0c, 0x00100008, 0x01000a0d, 0x00100028,
1135 0x1980c50e, 0x00100038, 0x1980c50e, 0x00100038,
1136 0x1180850c, 0x00100038, 0x3981ca0d, 0x00100038,
1137 0x2981450f, 0x01100038, 0x00000000, 0x00000000,
1138 0x10008a0c, 0x00100008, 0x3981ca0d, 0x00100038,
1139 0x1980c50e, 0x00100038, 0x2981450f, 0x01100038,
1140 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1141 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1142 0x40021404, 0x00100000, 0x02001405, 0x00100040,
1143 0x0b004a06, 0x01900060, 0x13008a06, 0x01900060,
1144 0x13008a06, 0x01900060, 0x43020a04, 0x00100060,
1145 0x1b00ca05, 0x00100060, 0x23010a07, 0x01500060,
1146 0x40021404, 0x00100000, 0x1a00d405, 0x00100040,
1147 0x13008a06, 0x01900060, 0x13008a06, 0x01900060,
1148 0x23010a07, 0x01500060, 0x00000000, 0x00000000,
1149 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1150 0x4002140c, 0x00100010, 0x0200140d, 0x00100050,
1151 0x0b004a0e, 0x01900070, 0x13008a0e, 0x01900070,
1152 0x13008a0e, 0x01900070, 0x43020a0c, 0x00100070,
1153 0x1b00ca0d, 0x00100070, 0x23010a0f, 0x01500070,
1154 0x4002140c, 0x00100010, 0x1a00d40d, 0x00100050,
1155 0x13008a0e, 0x01900070, 0x13008a0e, 0x01900070,
1156 0x23010a0f, 0x01500070, 0x00000000, 0x00000000,
1157 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1158 0x50029404, 0x00100000, 0x32019405, 0x00100040,
1159 0x0b004a06, 0x01900060, 0x0b004a06, 0x01900060,
1160 0x5b02ca04, 0x00100060, 0x3b01d405, 0x00100060,
1161 0x23010a07, 0x01500060, 0x00000000, 0x00000000,
1162 0x5802d404, 0x00100000, 0x3b01d405, 0x00100060,
1163 0x0b004a06, 0x01900060, 0x23010a07, 0x01500060,
1164 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1165 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1166 0x5002940c, 0x00100010, 0x3201940d, 0x00100050,
1167 0x0b004a0e, 0x01900070, 0x0b004a0e, 0x01900070,
1168 0x5b02ca0c, 0x00100070, 0x3b01d40d, 0x00100070,
1169 0x23010a0f, 0x01500070, 0x00000000, 0x00000000,
1170 0x5802d40c, 0x00100010, 0x3b01d40d, 0x00100070,
1171 0x0b004a0e, 0x01900070, 0x23010a0f, 0x01500070,
1172 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1173 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1174 0x40021404, 0x000f4800, 0x62031405, 0x00100040,
1175 0x53028a06, 0x01900060, 0x53028a07, 0x01900060,
1176 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1177 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1178 0x4002140c, 0x000f4808, 0x6203140d, 0x00100048,
1179 0x53028a0e, 0x01900068, 0x53028a0f, 0x01900068,
1180 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1181 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1182 0x00000a0c, 0x00100004, 0x11008a0d, 0x00100024,
1183 0x1980c50e, 0x00100034, 0x2181050e, 0x00100034,
1184 0x2181050e, 0x00100034, 0x0180050c, 0x00100038,
1185 0x1180850d, 0x00100038, 0x1181850d, 0x00100038,
1186 0x2981450f, 0x01100038, 0x00000000, 0x00000000,
1187 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1188 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1189 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1190 0x00000a0c, 0x00100008, 0x11008a0d, 0x00100028,
1191 0x2181050e, 0x00100038, 0x2181050e, 0x00100038,
1192 0x1181850d, 0x00100038, 0x2981450f, 0x01100038,
1193 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1194 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1195 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1196 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1197 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1198 0x08004a04, 0x00100000, 0x01000a05, 0x00100020,
1199 0x0180c506, 0x00100030, 0x0180c506, 0x00100030,
1200 0x2180c50c, 0x00100030, 0x49820a0d, 0x0016a130,
1201 0x41824a0d, 0x0016a130, 0x2981450f, 0x01100030,
1202 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1203 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1204 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1205 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1206 0x2000ca0c, 0x00100000, 0x49820a0d, 0x0016a130,
1207 0x1980c50e, 0x00100030, 0x41824a0d, 0x0016a130,
1208 0x2981450f, 0x01100030, 0x00000000, 0x00000000,
1209 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1210 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1211 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1212 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1213 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1214 0x4002140c, 0x00100008, 0x0200140d, 0x00100048,
1215 0x0b004a0e, 0x01900068, 0x13008a0e, 0x01900068,
1216 0x13008a0e, 0x01900068, 0x43020a0c, 0x00100070,
1217 0x1b00ca0d, 0x00100070, 0x1b014a0d, 0x00100070,
1218 0x23010a0f, 0x01500070, 0x00000000, 0x00000000,
1219 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1220 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1221 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1222 0x4002140c, 0x00100010, 0x1a00d40d, 0x00100050,
1223 0x13008a0e, 0x01900070, 0x13008a0e, 0x01900070,
1224 0x1b014a0d, 0x00100070, 0x23010a0f, 0x01500070,
1225 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1226 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1227 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1228 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1229 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1230 0x50029404, 0x00100000, 0x32019405, 0x00100040,
1231 0x03004a06, 0x01900060, 0x03004a06, 0x01900060,
1232 0x6b030a0c, 0x00100060, 0x4b02140d, 0x0016a160,
1233 0x4302540d, 0x0016a160, 0x23010a0f, 0x01500060,
1234 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1235 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1236 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1237 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1238 0x6b03140c, 0x00100060, 0x4b02140d, 0x0016a160,
1239 0x0b004a0e, 0x01900060, 0x4302540d, 0x0016a160,
1240 0x23010a0f, 0x01500060, 0x00000000, 0x00000000,
1241 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1242 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1243 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1244 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1245 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1246 0x40021404, 0x00100000, 0x1a00d405, 0x00100040,
1247 0x53028a06, 0x01900060, 0x5b02ca06, 0x01900060,
1248 0x5b02ca06, 0x01900060, 0x43020a04, 0x00100060,
1249 0x1b00ca05, 0x00100060, 0x53028a07, 0x0190c060,
1250 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1251 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1252 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1253 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1254 0x4002140c, 0x00100010, 0x1a00d40d, 0x00100050,
1255 0x53028a0e, 0x01900070, 0x5b02ca0e, 0x01900070,
1256 0x5b02ca0e, 0x01900070, 0x43020a0c, 0x00100070,
1257 0x1b00ca0d, 0x00100070, 0x53028a0f, 0x0190c070,
1258 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1259 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1260 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1261 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1262 0x40021404, 0x00100000, 0x1a00d405, 0x00100040,
1263 0x5b02ca06, 0x01900060, 0x5b02ca06, 0x01900060,
1264 0x53028a07, 0x0190c060, 0x00000000, 0x00000000,
1265 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1266 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1267 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1268 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1269 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1270 0x4002140c, 0x00100010, 0x1a00d40d, 0x00100050,
1271 0x5b02ca0e, 0x01900070, 0x5b02ca0e, 0x01900070,
1272 0x53028a0f, 0x0190c070, 0x00000000, 0x00000000,
1273 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1274 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1275 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1276 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1277 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1278 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1279 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1280 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1281 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1282 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1283 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1284 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1285 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1286 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1287 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1288 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1289 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1290 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1291 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1292 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1293 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1294 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1295 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1296 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1297 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1298 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1299 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1300 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1301 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1302 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1303 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1304 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1305 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1306 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1307 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1308 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1309 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1310};
1311
1312static const u16 b43_ntab_pilot_r3[] = {
1313 0xff08, 0xff08, 0xff08, 0xff08, 0xff08, 0xff08,
1314 0xff08, 0xff08, 0x80d5, 0x80d5, 0x80d5, 0x80d5,
1315 0x80d5, 0x80d5, 0x80d5, 0x80d5, 0xff0a, 0xff82,
1316 0xffa0, 0xff28, 0xffff, 0xffff, 0xffff, 0xffff,
1317 0xff82, 0xffa0, 0xff28, 0xff0a, 0xffff, 0xffff,
1318 0xffff, 0xffff, 0xf83f, 0xfa1f, 0xfa97, 0xfab5,
1319 0xf2bd, 0xf0bf, 0xffff, 0xffff, 0xf017, 0xf815,
1320 0xf215, 0xf095, 0xf035, 0xf01d, 0xffff, 0xffff,
1321 0xff08, 0xff02, 0xff80, 0xff20, 0xff08, 0xff02,
1322 0xff80, 0xff20, 0xf01f, 0xf817, 0xfa15, 0xf295,
1323 0xf0b5, 0xf03d, 0xffff, 0xffff, 0xf82a, 0xfa0a,
1324 0xfa82, 0xfaa0, 0xf2a8, 0xf0aa, 0xffff, 0xffff,
1325 0xf002, 0xf800, 0xf200, 0xf080, 0xf020, 0xf008,
1326 0xffff, 0xffff, 0xf00a, 0xf802, 0xfa00, 0xf280,
1327 0xf0a0, 0xf028, 0xffff, 0xffff,
1328};
1329
1330static const u32 b43_ntab_tmap_r3[] = {
1331 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x00000888,
1332 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1333 0xf1111110, 0x11111111, 0x11f11111, 0x00000111,
1334 0x11000000, 0x1111f111, 0x11111111, 0x111111f1,
1335 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x000aa888,
1336 0x88880000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1337 0xa1111110, 0x11111111, 0x11c11111, 0x00000111,
1338 0x11000000, 0x1111a111, 0x11111111, 0x111111a1,
1339 0xa2222220, 0x22222222, 0x22c22222, 0x00000222,
1340 0x22000000, 0x2222a222, 0x22222222, 0x222222a2,
1341 0xf1111110, 0x11111111, 0x11f11111, 0x00011111,
1342 0x11110000, 0x1111f111, 0x11111111, 0x111111f1,
1343 0xa8aa88a0, 0xa88888a8, 0xa8a8a88a, 0x00088aaa,
1344 0xaaaa0000, 0xa8a8aa88, 0xa88aaaaa, 0xaaaa8a8a,
1345 0xaaa8aaa0, 0x8aaa8aaa, 0xaa8a8a8a, 0x000aaa88,
1346 0x8aaa0000, 0xaaa8a888, 0x8aa88a8a, 0x8a88a888,
1347 0x08080a00, 0x0a08080a, 0x080a0a08, 0x00080808,
1348 0x080a0000, 0x080a0808, 0x080a0808, 0x0a0a0a08,
1349 0xa0a0a0a0, 0x80a0a080, 0x8080a0a0, 0x00008080,
1350 0x80a00000, 0x80a080a0, 0xa080a0a0, 0x8080a0a0,
1351 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1352 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1353 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1354 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1355 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1356 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1357 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1358 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1359 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1360 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1361 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1362 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1363 0x99999000, 0x9b9b99bb, 0x9bb99999, 0x9999b9b9,
1364 0x9b99bb90, 0x9bbbbb9b, 0x9b9b9bb9, 0x00000999,
1365 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1366 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x00aaa888,
1367 0x22000000, 0x2222b222, 0x22222222, 0x222222b2,
1368 0xb2222220, 0x22222222, 0x22d22222, 0x00000222,
1369 0x11000000, 0x1111a111, 0x11111111, 0x111111a1,
1370 0xa1111110, 0x11111111, 0x11c11111, 0x00000111,
1371 0x33000000, 0x3333b333, 0x33333333, 0x333333b3,
1372 0xb3333330, 0x33333333, 0x33d33333, 0x00000333,
1373 0x22000000, 0x2222a222, 0x22222222, 0x222222a2,
1374 0xa2222220, 0x22222222, 0x22c22222, 0x00000222,
1375 0x99b99b00, 0x9b9b99bb, 0x9bb99999, 0x9999b9b9,
1376 0x9b99bb99, 0x9bbbbb9b, 0x9b9b9bb9, 0x00000999,
1377 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1378 0x8a88aa88, 0x8aaaaa8a, 0x8a8a8aa8, 0x08aaa888,
1379 0x22222200, 0x2222f222, 0x22222222, 0x222222f2,
1380 0x22222222, 0x22222222, 0x22f22222, 0x00000222,
1381 0x11000000, 0x1111f111, 0x11111111, 0x11111111,
1382 0xf1111111, 0x11111111, 0x11f11111, 0x01111111,
1383 0xbb9bb900, 0xb9b9bb99, 0xb99bbbbb, 0xbbbb9b9b,
1384 0xb9bb99bb, 0xb99999b9, 0xb9b9b99b, 0x00000bbb,
1385 0xaa000000, 0xa8a8aa88, 0xa88aaaaa, 0xaaaa8a8a,
1386 0xa8aa88aa, 0xa88888a8, 0xa8a8a88a, 0x0a888aaa,
1387 0xaa000000, 0xa8a8aa88, 0xa88aaaaa, 0xaaaa8a8a,
1388 0xa8aa88a0, 0xa88888a8, 0xa8a8a88a, 0x00000aaa,
1389 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1390 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x00000888,
1391 0xbbbbbb00, 0x999bbbbb, 0x9bb99b9b, 0xb9b9b9bb,
1392 0xb9b99bbb, 0xb9b9b9bb, 0xb9bb9b99, 0x00000999,
1393 0x8a000000, 0xaa88a888, 0xa88888aa, 0xa88a8a88,
1394 0xa88aa88a, 0x88a8aaaa, 0xa8aa8aaa, 0x0888a88a,
1395 0x0b0b0b00, 0x090b0b0b, 0x0b090b0b, 0x0909090b,
1396 0x09090b0b, 0x09090b0b, 0x09090b09, 0x00000909,
1397 0x0a000000, 0x0a080808, 0x080a080a, 0x080a0a08,
1398 0x080a080a, 0x0808080a, 0x0a0a0a08, 0x0808080a,
1399 0xb0b0b000, 0x9090b0b0, 0x90b09090, 0xb0b0b090,
1400 0xb0b090b0, 0x90b0b0b0, 0xb0b09090, 0x00000090,
1401 0x80000000, 0xa080a080, 0xa08080a0, 0xa0808080,
1402 0xa080a080, 0x80a0a0a0, 0xa0a080a0, 0x00a0a0a0,
1403 0x22000000, 0x2222f222, 0x22222222, 0x222222f2,
1404 0xf2222220, 0x22222222, 0x22f22222, 0x00000222,
1405 0x11000000, 0x1111f111, 0x11111111, 0x111111f1,
1406 0xf1111110, 0x11111111, 0x11f11111, 0x00000111,
1407 0x33000000, 0x3333f333, 0x33333333, 0x333333f3,
1408 0xf3333330, 0x33333333, 0x33f33333, 0x00000333,
1409 0x22000000, 0x2222f222, 0x22222222, 0x222222f2,
1410 0xf2222220, 0x22222222, 0x22f22222, 0x00000222,
1411 0x99000000, 0x9b9b99bb, 0x9bb99999, 0x9999b9b9,
1412 0x9b99bb90, 0x9bbbbb9b, 0x9b9b9bb9, 0x00000999,
1413 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1414 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x00000888,
1415 0x88888000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1416 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x00000888,
1417 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1418 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x00aaa888,
1419 0x88a88a00, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1420 0x8a88aa88, 0x8aaaaa8a, 0x8a8a8aa8, 0x00000888,
1421 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1422 0x8a88aa88, 0x8aaaaa8a, 0x8a8a8aa8, 0x08aaa888,
1423 0x11000000, 0x1111a111, 0x11111111, 0x111111a1,
1424 0xa1111110, 0x11111111, 0x11c11111, 0x00000111,
1425 0x11000000, 0x1111a111, 0x11111111, 0x111111a1,
1426 0xa1111110, 0x11111111, 0x11c11111, 0x00000111,
1427 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1428 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x00000888,
1429 0x88000000, 0x8a8a88aa, 0x8aa88888, 0x8888a8a8,
1430 0x8a88aa80, 0x8aaaaa8a, 0x8a8a8aa8, 0x00000888,
1431 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1432 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1433 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1434 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1435 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1436 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1437 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1438 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1439 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1440 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1441 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1442 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1443};
1444
1445static const u32 b43_ntab_intlevel_r3[] = {
1446 0x00802070, 0x0671188d, 0x0a60192c, 0x0a300e46,
1447 0x00c1188d, 0x080024d2, 0x00000070,
1448};
1449
1450static const u32 b43_ntab_tdtrn_r3[] = {
1451 0x061c061c, 0x0050ee68, 0xf592fe36, 0xfe5212f6,
1452 0x00000c38, 0xfe5212f6, 0xf592fe36, 0x0050ee68,
1453 0x061c061c, 0xee680050, 0xfe36f592, 0x12f6fe52,
1454 0x0c380000, 0x12f6fe52, 0xfe36f592, 0xee680050,
1455 0x061c061c, 0x0050ee68, 0xf592fe36, 0xfe5212f6,
1456 0x00000c38, 0xfe5212f6, 0xf592fe36, 0x0050ee68,
1457 0x061c061c, 0xee680050, 0xfe36f592, 0x12f6fe52,
1458 0x0c380000, 0x12f6fe52, 0xfe36f592, 0xee680050,
1459 0x05e305e3, 0x004def0c, 0xf5f3fe47, 0xfe611246,
1460 0x00000bc7, 0xfe611246, 0xf5f3fe47, 0x004def0c,
1461 0x05e305e3, 0xef0c004d, 0xfe47f5f3, 0x1246fe61,
1462 0x0bc70000, 0x1246fe61, 0xfe47f5f3, 0xef0c004d,
1463 0x05e305e3, 0x004def0c, 0xf5f3fe47, 0xfe611246,
1464 0x00000bc7, 0xfe611246, 0xf5f3fe47, 0x004def0c,
1465 0x05e305e3, 0xef0c004d, 0xfe47f5f3, 0x1246fe61,
1466 0x0bc70000, 0x1246fe61, 0xfe47f5f3, 0xef0c004d,
1467 0xfa58fa58, 0xf895043b, 0xff4c09c0, 0xfbc6ffa8,
1468 0xfb84f384, 0x0798f6f9, 0x05760122, 0x058409f6,
1469 0x0b500000, 0x05b7f542, 0x08860432, 0x06ddfee7,
1470 0xfb84f384, 0xf9d90664, 0xf7e8025c, 0x00fff7bd,
1471 0x05a805a8, 0xf7bd00ff, 0x025cf7e8, 0x0664f9d9,
1472 0xf384fb84, 0xfee706dd, 0x04320886, 0xf54205b7,
1473 0x00000b50, 0x09f60584, 0x01220576, 0xf6f90798,
1474 0xf384fb84, 0xffa8fbc6, 0x09c0ff4c, 0x043bf895,
1475 0x02d402d4, 0x07de0270, 0xfc96079c, 0xf90afe94,
1476 0xfe00ff2c, 0x02d4065d, 0x092a0096, 0x0014fbb8,
1477 0xfd2cfd2c, 0x076afb3c, 0x0096f752, 0xf991fd87,
1478 0xfb2c0200, 0xfeb8f960, 0x08e0fc96, 0x049802a8,
1479 0xfd2cfd2c, 0x02a80498, 0xfc9608e0, 0xf960feb8,
1480 0x0200fb2c, 0xfd87f991, 0xf7520096, 0xfb3c076a,
1481 0xfd2cfd2c, 0xfbb80014, 0x0096092a, 0x065d02d4,
1482 0xff2cfe00, 0xfe94f90a, 0x079cfc96, 0x027007de,
1483 0x02d402d4, 0x027007de, 0x079cfc96, 0xfe94f90a,
1484 0xff2cfe00, 0x065d02d4, 0x0096092a, 0xfbb80014,
1485 0xfd2cfd2c, 0xfb3c076a, 0xf7520096, 0xfd87f991,
1486 0x0200fb2c, 0xf960feb8, 0xfc9608e0, 0x02a80498,
1487 0xfd2cfd2c, 0x049802a8, 0x08e0fc96, 0xfeb8f960,
1488 0xfb2c0200, 0xf991fd87, 0x0096f752, 0x076afb3c,
1489 0xfd2cfd2c, 0x0014fbb8, 0x092a0096, 0x02d4065d,
1490 0xfe00ff2c, 0xf90afe94, 0xfc96079c, 0x07de0270,
1491 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1492 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1493 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1494 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1495 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1496 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1497 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1498 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1499 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1500 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1501 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1502 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1503 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1504 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1505 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1506 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1507 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1508 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1509 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1510 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1511 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1512 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1513 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1514 0x00000000, 0x00000000, 0x00000000, 0x00000000,
1515 0x062a0000, 0xfefa0759, 0x08b80908, 0xf396fc2d,
1516 0xf9d6045c, 0xfc4ef608, 0xf748f596, 0x07b207bf,
1517 0x062a062a, 0xf84ef841, 0xf748f596, 0x03b209f8,
1518 0xf9d6045c, 0x0c6a03d3, 0x08b80908, 0x0106f8a7,
1519 0x062a0000, 0xfefaf8a7, 0x08b8f6f8, 0xf39603d3,
1520 0xf9d6fba4, 0xfc4e09f8, 0xf7480a6a, 0x07b2f841,
1521 0x062af9d6, 0xf84e07bf, 0xf7480a6a, 0x03b2f608,
1522 0xf9d6fba4, 0x0c6afc2d, 0x08b8f6f8, 0x01060759,
1523 0x062a0000, 0xfefa0759, 0x08b80908, 0xf396fc2d,
1524 0xf9d6045c, 0xfc4ef608, 0xf748f596, 0x07b207bf,
1525 0x062a062a, 0xf84ef841, 0xf748f596, 0x03b209f8,
1526 0xf9d6045c, 0x0c6a03d3, 0x08b80908, 0x0106f8a7,
1527 0x062a0000, 0xfefaf8a7, 0x08b8f6f8, 0xf39603d3,
1528 0xf9d6fba4, 0xfc4e09f8, 0xf7480a6a, 0x07b2f841,
1529 0x062af9d6, 0xf84e07bf, 0xf7480a6a, 0x03b2f608,
1530 0xf9d6fba4, 0x0c6afc2d, 0x08b8f6f8, 0x01060759,
1531 0x061c061c, 0xff30009d, 0xffb21141, 0xfd87fb54,
1532 0xf65dfe59, 0x02eef99e, 0x0166f03c, 0xfff809b6,
1533 0x000008a4, 0x000af42b, 0x00eff577, 0xfa840bf2,
1534 0xfc02ff51, 0x08260f67, 0xfff0036f, 0x0842f9c3,
1535 0x00000000, 0x063df7be, 0xfc910010, 0xf099f7da,
1536 0x00af03fe, 0xf40e057c, 0x0a89ff11, 0x0bd5fff6,
1537 0xf75c0000, 0xf64a0008, 0x0fc4fe9a, 0x0662fd12,
1538 0x01a709a3, 0x04ac0279, 0xeebf004e, 0xff6300d0,
1539 0xf9e4f9e4, 0x00d0ff63, 0x004eeebf, 0x027904ac,
1540 0x09a301a7, 0xfd120662, 0xfe9a0fc4, 0x0008f64a,
1541 0x0000f75c, 0xfff60bd5, 0xff110a89, 0x057cf40e,
1542 0x03fe00af, 0xf7daf099, 0x0010fc91, 0xf7be063d,
1543 0x00000000, 0xf9c30842, 0x036ffff0, 0x0f670826,
1544 0xff51fc02, 0x0bf2fa84, 0xf57700ef, 0xf42b000a,
1545 0x08a40000, 0x09b6fff8, 0xf03c0166, 0xf99e02ee,
1546 0xfe59f65d, 0xfb54fd87, 0x1141ffb2, 0x009dff30,
1547 0x05e30000, 0xff060705, 0x085408a0, 0xf425fc59,
1548 0xfa1d042a, 0xfc78f67a, 0xf7acf60e, 0x075a0766,
1549 0x05e305e3, 0xf8a6f89a, 0xf7acf60e, 0x03880986,
1550 0xfa1d042a, 0x0bdb03a7, 0x085408a0, 0x00faf8fb,
1551 0x05e30000, 0xff06f8fb, 0x0854f760, 0xf42503a7,
1552 0xfa1dfbd6, 0xfc780986, 0xf7ac09f2, 0x075af89a,
1553 0x05e3fa1d, 0xf8a60766, 0xf7ac09f2, 0x0388f67a,
1554 0xfa1dfbd6, 0x0bdbfc59, 0x0854f760, 0x00fa0705,
1555 0x05e30000, 0xff060705, 0x085408a0, 0xf425fc59,
1556 0xfa1d042a, 0xfc78f67a, 0xf7acf60e, 0x075a0766,
1557 0x05e305e3, 0xf8a6f89a, 0xf7acf60e, 0x03880986,
1558 0xfa1d042a, 0x0bdb03a7, 0x085408a0, 0x00faf8fb,
1559 0x05e30000, 0xff06f8fb, 0x0854f760, 0xf42503a7,
1560 0xfa1dfbd6, 0xfc780986, 0xf7ac09f2, 0x075af89a,
1561 0x05e3fa1d, 0xf8a60766, 0xf7ac09f2, 0x0388f67a,
1562 0xfa1dfbd6, 0x0bdbfc59, 0x0854f760, 0x00fa0705,
1563 0xfa58fa58, 0xf8f0fe00, 0x0448073d, 0xfdc9fe46,
1564 0xf9910258, 0x089d0407, 0xfd5cf71a, 0x02affde0,
1565 0x083e0496, 0xff5a0740, 0xff7afd97, 0x00fe01f1,
1566 0x0009082e, 0xfa94ff75, 0xfecdf8ea, 0xffb0f693,
1567 0xfd2cfa58, 0x0433ff16, 0xfba405dd, 0xfa610341,
1568 0x06a606cb, 0x0039fd2d, 0x0677fa97, 0x01fa05e0,
1569 0xf896003e, 0x075a068b, 0x012cfc3e, 0xfa23f98d,
1570 0xfc7cfd43, 0xff90fc0d, 0x01c10982, 0x00c601d6,
1571 0xfd2cfd2c, 0x01d600c6, 0x098201c1, 0xfc0dff90,
1572 0xfd43fc7c, 0xf98dfa23, 0xfc3e012c, 0x068b075a,
1573 0x003ef896, 0x05e001fa, 0xfa970677, 0xfd2d0039,
1574 0x06cb06a6, 0x0341fa61, 0x05ddfba4, 0xff160433,
1575 0xfa58fd2c, 0xf693ffb0, 0xf8eafecd, 0xff75fa94,
1576 0x082e0009, 0x01f100fe, 0xfd97ff7a, 0x0740ff5a,
1577 0x0496083e, 0xfde002af, 0xf71afd5c, 0x0407089d,
1578 0x0258f991, 0xfe46fdc9, 0x073d0448, 0xfe00f8f0,
1579 0xfd2cfd2c, 0xfce00500, 0xfc09fddc, 0xfe680157,
1580 0x04c70571, 0xfc3aff21, 0xfcd70228, 0x056d0277,
1581 0x0200fe00, 0x0022f927, 0xfe3c032b, 0xfc44ff3c,
1582 0x03e9fbdb, 0x04570313, 0x04c9ff5c, 0x000d03b8,
1583 0xfa580000, 0xfbe900d2, 0xf9d0fe0b, 0x0125fdf9,
1584 0x042501bf, 0x0328fa2b, 0xffa902f0, 0xfa250157,
1585 0x0200fe00, 0x03740438, 0xff0405fd, 0x030cfe52,
1586 0x0037fb39, 0xff6904c5, 0x04f8fd23, 0xfd31fc1b,
1587 0xfd2cfd2c, 0xfc1bfd31, 0xfd2304f8, 0x04c5ff69,
1588 0xfb390037, 0xfe52030c, 0x05fdff04, 0x04380374,
1589 0xfe000200, 0x0157fa25, 0x02f0ffa9, 0xfa2b0328,
1590 0x01bf0425, 0xfdf90125, 0xfe0bf9d0, 0x00d2fbe9,
1591 0x0000fa58, 0x03b8000d, 0xff5c04c9, 0x03130457,
1592 0xfbdb03e9, 0xff3cfc44, 0x032bfe3c, 0xf9270022,
1593 0xfe000200, 0x0277056d, 0x0228fcd7, 0xff21fc3a,
1594 0x057104c7, 0x0157fe68, 0xfddcfc09, 0x0500fce0,
1595 0xfd2cfd2c, 0x0500fce0, 0xfddcfc09, 0x0157fe68,
1596 0x057104c7, 0xff21fc3a, 0x0228fcd7, 0x0277056d,
1597 0xfe000200, 0xf9270022, 0x032bfe3c, 0xff3cfc44,
1598 0xfbdb03e9, 0x03130457, 0xff5c04c9, 0x03b8000d,
1599 0x0000fa58, 0x00d2fbe9, 0xfe0bf9d0, 0xfdf90125,
1600 0x01bf0425, 0xfa2b0328, 0x02f0ffa9, 0x0157fa25,
1601 0xfe000200, 0x04380374, 0x05fdff04, 0xfe52030c,
1602 0xfb390037, 0x04c5ff69, 0xfd2304f8, 0xfc1bfd31,
1603 0xfd2cfd2c, 0xfd31fc1b, 0x04f8fd23, 0xff6904c5,
1604 0x0037fb39, 0x030cfe52, 0xff0405fd, 0x03740438,
1605 0x0200fe00, 0xfa250157, 0xffa902f0, 0x0328fa2b,
1606 0x042501bf, 0x0125fdf9, 0xf9d0fe0b, 0xfbe900d2,
1607 0xfa580000, 0x000d03b8, 0x04c9ff5c, 0x04570313,
1608 0x03e9fbdb, 0xfc44ff3c, 0xfe3c032b, 0x0022f927,
1609 0x0200fe00, 0x056d0277, 0xfcd70228, 0xfc3aff21,
1610 0x04c70571, 0xfe680157, 0xfc09fddc, 0xfce00500,
1611 0x05a80000, 0xff1006be, 0x0800084a, 0xf49cfc7e,
1612 0xfa580400, 0xfc9cf6da, 0xf800f672, 0x0710071c,
1613 0x05a805a8, 0xf8f0f8e4, 0xf800f672, 0x03640926,
1614 0xfa580400, 0x0b640382, 0x0800084a, 0x00f0f942,
1615 0x05a80000, 0xff10f942, 0x0800f7b6, 0xf49c0382,
1616 0xfa58fc00, 0xfc9c0926, 0xf800098e, 0x0710f8e4,
1617 0x05a8fa58, 0xf8f0071c, 0xf800098e, 0x0364f6da,
1618 0xfa58fc00, 0x0b64fc7e, 0x0800f7b6, 0x00f006be,
1619 0x05a80000, 0xff1006be, 0x0800084a, 0xf49cfc7e,
1620 0xfa580400, 0xfc9cf6da, 0xf800f672, 0x0710071c,
1621 0x05a805a8, 0xf8f0f8e4, 0xf800f672, 0x03640926,
1622 0xfa580400, 0x0b640382, 0x0800084a, 0x00f0f942,
1623 0x05a80000, 0xff10f942, 0x0800f7b6, 0xf49c0382,
1624 0xfa58fc00, 0xfc9c0926, 0xf800098e, 0x0710f8e4,
1625 0x05a8fa58, 0xf8f0071c, 0xf800098e, 0x0364f6da,
1626 0xfa58fc00, 0x0b64fc7e, 0x0800f7b6, 0x00f006be,
1627};
1628
1629static const u32 b43_ntab_noisevar0_r3[] = {
1630 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1631 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1632 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1633 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1634 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1635 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1636 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1637 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1638 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1639 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1640 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1641 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1642 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1643 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1644 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1645 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1646 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1647 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1648 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1649 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1650 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1651 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1652 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1653 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1654 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1655 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1656 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1657 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1658 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1659 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1660 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1661 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1662 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1663 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1664 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1665 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1666 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1667 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1668 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1669 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1670 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1671 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1672 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1673 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1674 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1675 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1676 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1677 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1678 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1679 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1680 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1681 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1682 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1683 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1684 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1685 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1686 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1687 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1688 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1689 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1690 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1691 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1692 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1693 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1694};
1695
1696static const u32 b43_ntab_noisevar1_r3[] = {
1697 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1698 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1699 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1700 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1701 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1702 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1703 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1704 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1705 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1706 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1707 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1708 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1709 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1710 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1711 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1712 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1713 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1714 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1715 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1716 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1717 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1718 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1719 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1720 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1721 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1722 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1723 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1724 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1725 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1726 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1727 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1728 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1729 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1730 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1731 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1732 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1733 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1734 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1735 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1736 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1737 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1738 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1739 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1740 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1741 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1742 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1743 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1744 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1745 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1746 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1747 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1748 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1749 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1750 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1751 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1752 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1753 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1754 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1755 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1756 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1757 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1758 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1759 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1760 0x02110211, 0x0000014d, 0x02110211, 0x0000014d,
1761};
1762
1763static const u16 b43_ntab_mcs_r3[] = {
1764 0x0000, 0x0008, 0x000a, 0x0010, 0x0012, 0x0019,
1765 0x001a, 0x001c, 0x0080, 0x0088, 0x008a, 0x0090,
1766 0x0092, 0x0099, 0x009a, 0x009c, 0x0100, 0x0108,
1767 0x010a, 0x0110, 0x0112, 0x0119, 0x011a, 0x011c,
1768 0x0180, 0x0188, 0x018a, 0x0190, 0x0192, 0x0199,
1769 0x019a, 0x019c, 0x0000, 0x0098, 0x00a0, 0x00a8,
1770 0x009a, 0x00a2, 0x00aa, 0x0120, 0x0128, 0x0128,
1771 0x0130, 0x0138, 0x0138, 0x0140, 0x0122, 0x012a,
1772 0x012a, 0x0132, 0x013a, 0x013a, 0x0142, 0x01a8,
1773 0x01b0, 0x01b8, 0x01b0, 0x01b8, 0x01c0, 0x01c8,
1774 0x01c0, 0x01c8, 0x01d0, 0x01d0, 0x01d8, 0x01aa,
1775 0x01b2, 0x01ba, 0x01b2, 0x01ba, 0x01c2, 0x01ca,
1776 0x01c2, 0x01ca, 0x01d2, 0x01d2, 0x01da, 0x0001,
1777 0x0002, 0x0004, 0x0009, 0x000c, 0x0011, 0x0014,
1778 0x0018, 0x0020, 0x0021, 0x0022, 0x0024, 0x0081,
1779 0x0082, 0x0084, 0x0089, 0x008c, 0x0091, 0x0094,
1780 0x0098, 0x00a0, 0x00a1, 0x00a2, 0x00a4, 0x0007,
1781 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
1782 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
1783 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
1784 0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
1785 0x0007, 0x0007,
1786};
1787
1788static const u32 b43_ntab_tdi20a0_r3[] = {
1789 0x00091226, 0x000a1429, 0x000b56ad, 0x000c58b0,
1790 0x000d5ab3, 0x000e9cb6, 0x000f9eba, 0x0000c13d,
1791 0x00020301, 0x00030504, 0x00040708, 0x0005090b,
1792 0x00064b8e, 0x00095291, 0x000a5494, 0x000b9718,
1793 0x000c9927, 0x000d9b2a, 0x000edd2e, 0x000fdf31,
1794 0x000101b4, 0x000243b7, 0x000345bb, 0x000447be,
1795 0x00058982, 0x00068c05, 0x00099309, 0x000a950c,
1796 0x000bd78f, 0x000cd992, 0x000ddb96, 0x000f1d99,
1797 0x00005fa8, 0x0001422c, 0x0002842f, 0x00038632,
1798 0x00048835, 0x0005ca38, 0x0006ccbc, 0x0009d3bf,
1799 0x000b1603, 0x000c1806, 0x000d1a0a, 0x000e1c0d,
1800 0x000f5e10, 0x00008093, 0x00018297, 0x0002c49a,
1801 0x0003c680, 0x0004c880, 0x00060b00, 0x00070d00,
1802 0x00000000, 0x00000000, 0x00000000,
1803};
1804
1805static const u32 b43_ntab_tdi20a1_r3[] = {
1806 0x00014b26, 0x00028d29, 0x000393ad, 0x00049630,
1807 0x0005d833, 0x0006da36, 0x00099c3a, 0x000a9e3d,
1808 0x000bc081, 0x000cc284, 0x000dc488, 0x000f068b,
1809 0x0000488e, 0x00018b91, 0x0002d214, 0x0003d418,
1810 0x0004d6a7, 0x000618aa, 0x00071aae, 0x0009dcb1,
1811 0x000b1eb4, 0x000c0137, 0x000d033b, 0x000e053e,
1812 0x000f4702, 0x00008905, 0x00020c09, 0x0003128c,
1813 0x0004148f, 0x00051712, 0x00065916, 0x00091b19,
1814 0x000a1d28, 0x000b5f2c, 0x000c41af, 0x000d43b2,
1815 0x000e85b5, 0x000f87b8, 0x0000c9bc, 0x00024cbf,
1816 0x00035303, 0x00045506, 0x0005978a, 0x0006998d,
1817 0x00095b90, 0x000a5d93, 0x000b9f97, 0x000c821a,
1818 0x000d8400, 0x000ec600, 0x000fc800, 0x00010a00,
1819 0x00000000, 0x00000000, 0x00000000,
1820};
1821
1822static const u32 b43_ntab_tdi40a0_r3[] = {
1823 0x0011a346, 0x00136ccf, 0x0014f5d9, 0x001641e2,
1824 0x0017cb6b, 0x00195475, 0x001b2383, 0x001cad0c,
1825 0x001e7616, 0x0000821f, 0x00020ba8, 0x0003d4b2,
1826 0x00056447, 0x00072dd0, 0x0008b6da, 0x000a02e3,
1827 0x000b8c6c, 0x000d15f6, 0x0011e484, 0x0013ae0d,
1828 0x00153717, 0x00168320, 0x00180ca9, 0x00199633,
1829 0x001b6548, 0x001ceed1, 0x001eb7db, 0x0000c3e4,
1830 0x00024d6d, 0x000416f7, 0x0005a585, 0x00076f0f,
1831 0x0008f818, 0x000a4421, 0x000bcdab, 0x000d9734,
1832 0x00122649, 0x0013efd2, 0x001578dc, 0x0016c4e5,
1833 0x00184e6e, 0x001a17f8, 0x001ba686, 0x001d3010,
1834 0x001ef999, 0x00010522, 0x00028eac, 0x00045835,
1835 0x0005e74a, 0x0007b0d3, 0x00093a5d, 0x000a85e6,
1836 0x000c0f6f, 0x000dd8f9, 0x00126787, 0x00143111,
1837 0x0015ba9a, 0x00170623, 0x00188fad, 0x001a5936,
1838 0x001be84b, 0x001db1d4, 0x001f3b5e, 0x000146e7,
1839 0x00031070, 0x000499fa, 0x00062888, 0x0007f212,
1840 0x00097b9b, 0x000ac7a4, 0x000c50ae, 0x000e1a37,
1841 0x0012a94c, 0x001472d5, 0x0015fc5f, 0x00174868,
1842 0x0018d171, 0x001a9afb, 0x001c2989, 0x001df313,
1843 0x001f7c9c, 0x000188a5, 0x000351af, 0x0004db38,
1844 0x0006aa4d, 0x000833d7, 0x0009bd60, 0x000b0969,
1845 0x000c9273, 0x000e5bfc, 0x00132a8a, 0x0014b414,
1846 0x00163d9d, 0x001789a6, 0x001912b0, 0x001adc39,
1847 0x001c6bce, 0x001e34d8, 0x001fbe61, 0x0001ca6a,
1848 0x00039374, 0x00051cfd, 0x0006ec0b, 0x00087515,
1849 0x0009fe9e, 0x000b4aa7, 0x000cd3b1, 0x000e9d3a,
1850 0x00000000, 0x00000000,
1851};
1852
1853static const u32 b43_ntab_tdi40a1_r3[] = {
1854 0x001edb36, 0x000129ca, 0x0002b353, 0x00047cdd,
1855 0x0005c8e6, 0x000791ef, 0x00091bf9, 0x000aaa07,
1856 0x000c3391, 0x000dfd1a, 0x00120923, 0x0013d22d,
1857 0x00155c37, 0x0016eacb, 0x00187454, 0x001a3dde,
1858 0x001b89e7, 0x001d12f0, 0x001f1cfa, 0x00016b88,
1859 0x00033492, 0x0004be1b, 0x00060a24, 0x0007d32e,
1860 0x00095d38, 0x000aec4c, 0x000c7555, 0x000e3edf,
1861 0x00124ae8, 0x001413f1, 0x0015a37b, 0x00172c89,
1862 0x0018b593, 0x001a419c, 0x001bcb25, 0x001d942f,
1863 0x001f63b9, 0x0001ad4d, 0x00037657, 0x0004c260,
1864 0x00068be9, 0x000814f3, 0x0009a47c, 0x000b2d8a,
1865 0x000cb694, 0x000e429d, 0x00128c26, 0x001455b0,
1866 0x0015e4ba, 0x00176e4e, 0x0018f758, 0x001a8361,
1867 0x001c0cea, 0x001dd674, 0x001fa57d, 0x0001ee8b,
1868 0x0003b795, 0x0005039e, 0x0006cd27, 0x000856b1,
1869 0x0009e5c6, 0x000b6f4f, 0x000cf859, 0x000e8462,
1870 0x00130deb, 0x00149775, 0x00162603, 0x0017af8c,
1871 0x00193896, 0x001ac49f, 0x001c4e28, 0x001e17b2,
1872 0x0000a6c7, 0x00023050, 0x0003f9da, 0x00054563,
1873 0x00070eec, 0x00089876, 0x000a2704, 0x000bb08d,
1874 0x000d3a17, 0x001185a0, 0x00134f29, 0x0014d8b3,
1875 0x001667c8, 0x0017f151, 0x00197adb, 0x001b0664,
1876 0x001c8fed, 0x001e5977, 0x0000e805, 0x0002718f,
1877 0x00043b18, 0x000586a1, 0x0007502b, 0x0008d9b4,
1878 0x000a68c9, 0x000bf252, 0x000dbbdc, 0x0011c7e5,
1879 0x001390ee, 0x00151a78, 0x0016a906, 0x00183290,
1880 0x0019bc19, 0x001b4822, 0x001cd12c, 0x001e9ab5,
1881 0x00000000, 0x00000000,
1882};
1883
1884static const u32 b43_ntab_pilotlt_r3[] = {
1885 0x76540213, 0x62407351, 0x76543210, 0x76540213,
1886 0x76540213, 0x76430521,
1887};
1888
1889static const u32 b43_ntab_channelest_r3[] = {
1890 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1891 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1892 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1893 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1894 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1895 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1896 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1897 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1898 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1899 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1900 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1901 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1902 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1903 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1904 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1905 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1906 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1907 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1908 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1909 0x44444444, 0x44444444, 0x44444444, 0x44444444,
1910 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1911 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1912 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1913 0x10101010, 0x10101010, 0x10101010, 0x10101010,
1914};
1915
1916static const u8 b43_ntab_framelookup_r3[] = {
1917 0x02, 0x04, 0x14, 0x14, 0x03, 0x05, 0x16, 0x16,
1918 0x0a, 0x0c, 0x1c, 0x1c, 0x0b, 0x0d, 0x1e, 0x1e,
1919 0x06, 0x08, 0x18, 0x18, 0x07, 0x09, 0x1a, 0x1a,
1920 0x0e, 0x10, 0x20, 0x28, 0x0f, 0x11, 0x22, 0x2a,
1921};
1922
1923static const u8 b43_ntab_estimatepowerlt0_r3[] = {
1924 0x55, 0x54, 0x54, 0x53, 0x52, 0x52, 0x51, 0x51,
1925 0x50, 0x4f, 0x4f, 0x4e, 0x4e, 0x4d, 0x4c, 0x4c,
1926 0x4b, 0x4a, 0x49, 0x49, 0x48, 0x47, 0x46, 0x46,
1927 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, 0x40, 0x3f,
1928 0x3e, 0x3d, 0x3c, 0x3a, 0x39, 0x38, 0x37, 0x36,
1929 0x35, 0x33, 0x32, 0x31, 0x2f, 0x2e, 0x2c, 0x2b,
1930 0x29, 0x27, 0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1a,
1931 0x18, 0x15, 0x12, 0x0e, 0x0b, 0x07, 0x02, 0xfd,
1932};
1933
1934static const u8 b43_ntab_estimatepowerlt1_r3[] = {
1935 0x55, 0x54, 0x54, 0x53, 0x52, 0x52, 0x51, 0x51,
1936 0x50, 0x4f, 0x4f, 0x4e, 0x4e, 0x4d, 0x4c, 0x4c,
1937 0x4b, 0x4a, 0x49, 0x49, 0x48, 0x47, 0x46, 0x46,
1938 0x45, 0x44, 0x43, 0x42, 0x41, 0x40, 0x40, 0x3f,
1939 0x3e, 0x3d, 0x3c, 0x3a, 0x39, 0x38, 0x37, 0x36,
1940 0x35, 0x33, 0x32, 0x31, 0x2f, 0x2e, 0x2c, 0x2b,
1941 0x29, 0x27, 0x25, 0x23, 0x21, 0x1f, 0x1d, 0x1a,
1942 0x18, 0x15, 0x12, 0x0e, 0x0b, 0x07, 0x02, 0xfd,
1943};
1944
1945static const u8 b43_ntab_adjustpower0_r3[] = {
1946 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1947 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1948 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1949 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1950 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1951 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1952 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1953 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1954 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1955 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1956 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1957 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1958 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1959 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1960 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1961 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1962};
1963
1964static const u8 b43_ntab_adjustpower1_r3[] = {
1965 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1966 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1967 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1968 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1969 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1970 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1971 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1972 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1973 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1974 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1975 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1976 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1977 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1978 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1979 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1980 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
1981};
1982
1983static const u32 b43_ntab_gainctl0_r3[] = {
1984 0x5bf70044, 0x5bf70042, 0x5bf70040, 0x5bf7003e,
1985 0x5bf7003c, 0x5bf7003b, 0x5bf70039, 0x5bf70037,
1986 0x5bf70036, 0x5bf70034, 0x5bf70033, 0x5bf70031,
1987 0x5bf70030, 0x5ba70044, 0x5ba70042, 0x5ba70040,
1988 0x5ba7003e, 0x5ba7003c, 0x5ba7003b, 0x5ba70039,
1989 0x5ba70037, 0x5ba70036, 0x5ba70034, 0x5ba70033,
1990 0x5b770044, 0x5b770042, 0x5b770040, 0x5b77003e,
1991 0x5b77003c, 0x5b77003b, 0x5b770039, 0x5b770037,
1992 0x5b770036, 0x5b770034, 0x5b770033, 0x5b770031,
1993 0x5b770030, 0x5b77002f, 0x5b77002d, 0x5b77002c,
1994 0x5b470044, 0x5b470042, 0x5b470040, 0x5b47003e,
1995 0x5b47003c, 0x5b47003b, 0x5b470039, 0x5b470037,
1996 0x5b470036, 0x5b470034, 0x5b470033, 0x5b470031,
1997 0x5b470030, 0x5b47002f, 0x5b47002d, 0x5b47002c,
1998 0x5b47002b, 0x5b47002a, 0x5b270044, 0x5b270042,
1999 0x5b270040, 0x5b27003e, 0x5b27003c, 0x5b27003b,
2000 0x5b270039, 0x5b270037, 0x5b270036, 0x5b270034,
2001 0x5b270033, 0x5b270031, 0x5b270030, 0x5b27002f,
2002 0x5b170044, 0x5b170042, 0x5b170040, 0x5b17003e,
2003 0x5b17003c, 0x5b17003b, 0x5b170039, 0x5b170037,
2004 0x5b170036, 0x5b170034, 0x5b170033, 0x5b170031,
2005 0x5b170030, 0x5b17002f, 0x5b17002d, 0x5b17002c,
2006 0x5b17002b, 0x5b17002a, 0x5b170028, 0x5b170027,
2007 0x5b170026, 0x5b170025, 0x5b170024, 0x5b170023,
2008 0x5b070044, 0x5b070042, 0x5b070040, 0x5b07003e,
2009 0x5b07003c, 0x5b07003b, 0x5b070039, 0x5b070037,
2010 0x5b070036, 0x5b070034, 0x5b070033, 0x5b070031,
2011 0x5b070030, 0x5b07002f, 0x5b07002d, 0x5b07002c,
2012 0x5b07002b, 0x5b07002a, 0x5b070028, 0x5b070027,
2013 0x5b070026, 0x5b070025, 0x5b070024, 0x5b070023,
2014 0x5b070022, 0x5b070021, 0x5b070020, 0x5b07001f,
2015 0x5b07001e, 0x5b07001d, 0x5b07001d, 0x5b07001c,
2016};
2017
2018static const u32 b43_ntab_gainctl1_r3[] = {
2019 0x5bf70044, 0x5bf70042, 0x5bf70040, 0x5bf7003e,
2020 0x5bf7003c, 0x5bf7003b, 0x5bf70039, 0x5bf70037,
2021 0x5bf70036, 0x5bf70034, 0x5bf70033, 0x5bf70031,
2022 0x5bf70030, 0x5ba70044, 0x5ba70042, 0x5ba70040,
2023 0x5ba7003e, 0x5ba7003c, 0x5ba7003b, 0x5ba70039,
2024 0x5ba70037, 0x5ba70036, 0x5ba70034, 0x5ba70033,
2025 0x5b770044, 0x5b770042, 0x5b770040, 0x5b77003e,
2026 0x5b77003c, 0x5b77003b, 0x5b770039, 0x5b770037,
2027 0x5b770036, 0x5b770034, 0x5b770033, 0x5b770031,
2028 0x5b770030, 0x5b77002f, 0x5b77002d, 0x5b77002c,
2029 0x5b470044, 0x5b470042, 0x5b470040, 0x5b47003e,
2030 0x5b47003c, 0x5b47003b, 0x5b470039, 0x5b470037,
2031 0x5b470036, 0x5b470034, 0x5b470033, 0x5b470031,
2032 0x5b470030, 0x5b47002f, 0x5b47002d, 0x5b47002c,
2033 0x5b47002b, 0x5b47002a, 0x5b270044, 0x5b270042,
2034 0x5b270040, 0x5b27003e, 0x5b27003c, 0x5b27003b,
2035 0x5b270039, 0x5b270037, 0x5b270036, 0x5b270034,
2036 0x5b270033, 0x5b270031, 0x5b270030, 0x5b27002f,
2037 0x5b170044, 0x5b170042, 0x5b170040, 0x5b17003e,
2038 0x5b17003c, 0x5b17003b, 0x5b170039, 0x5b170037,
2039 0x5b170036, 0x5b170034, 0x5b170033, 0x5b170031,
2040 0x5b170030, 0x5b17002f, 0x5b17002d, 0x5b17002c,
2041 0x5b17002b, 0x5b17002a, 0x5b170028, 0x5b170027,
2042 0x5b170026, 0x5b170025, 0x5b170024, 0x5b170023,
2043 0x5b070044, 0x5b070042, 0x5b070040, 0x5b07003e,
2044 0x5b07003c, 0x5b07003b, 0x5b070039, 0x5b070037,
2045 0x5b070036, 0x5b070034, 0x5b070033, 0x5b070031,
2046 0x5b070030, 0x5b07002f, 0x5b07002d, 0x5b07002c,
2047 0x5b07002b, 0x5b07002a, 0x5b070028, 0x5b070027,
2048 0x5b070026, 0x5b070025, 0x5b070024, 0x5b070023,
2049 0x5b070022, 0x5b070021, 0x5b070020, 0x5b07001f,
2050 0x5b07001e, 0x5b07001d, 0x5b07001d, 0x5b07001c,
2051};
2052
2053static const u32 b43_ntab_iqlt0_r3[] = {
2054 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2055 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2056 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2057 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2058 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2059 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2060 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2061 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2062 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2063 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2064 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2065 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2066 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2067 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2068 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2069 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2070 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2071 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2072 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2073 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2074 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2075 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2076 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2077 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2078 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2079 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2080 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2081 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2082 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2083 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2084 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2085 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2086};
2087
2088static const u32 b43_ntab_iqlt1_r3[] = {
2089 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2090 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2091 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2092 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2093 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2094 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2095 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2096 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2097 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2098 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2099 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2100 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2101 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2102 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2103 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2104 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2105 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2106 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2107 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2108 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2109 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2110 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2111 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2112 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2113 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2114 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2115 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2116 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2117 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2118 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2119 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2120 0x00000000, 0x00000000, 0x00000000, 0x00000000,
2121};
2122
2123static const u16 b43_ntab_loftlt0_r3[] = {
2124 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2125 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2126 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2127 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2128 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2129 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2130 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2131 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2132 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2133 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2134 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2135 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2136 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2137 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2138 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2139 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2140 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2141 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2142 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2143 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2144 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2145 0x0000, 0x0000,
2146};
2147
2148static const u16 b43_ntab_loftlt1_r3[] = {
2149 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2150 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2151 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2152 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2153 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2154 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2155 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2156 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2157 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2158 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2159 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2160 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2161 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2162 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2163 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2164 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2165 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2166 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2167 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2168 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2169 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
2170 0x0000, 0x0000,
2171};
2172
2173/* TX gain tables */
1100const u32 b43_ntab_tx_gain_rev0_1_2[] = { 2174const u32 b43_ntab_tx_gain_rev0_1_2[] = {
1101 0x03cc2b44, 0x03cc2b42, 0x03cc2a44, 0x03cc2a42, 2175 0x03cc2b44, 0x03cc2b42, 0x03cc2a44, 0x03cc2a42,
1102 0x03cc2944, 0x03c82b44, 0x03c82b42, 0x03c82a44, 2176 0x03cc2944, 0x03c82b44, 0x03c82b42, 0x03c82a44,
@@ -1635,6 +2709,79 @@ const struct nphy_rf_control_override_rev3 tbl_rf_control_override_rev3[] = {
1635 { 0x00C0, 6, 0xE7, 0xF9, 0xEC, 0xFB } /* field == 0x4000 (fls 15) */ 2709 { 0x00C0, 6, 0xE7, 0xF9, 0xEC, 0xFB } /* field == 0x4000 (fls 15) */
1636}; 2710};
1637 2711
2712struct nphy_gain_ctl_workaround_entry nphy_gain_ctl_workaround[2][3] = {
2713 { /* 2GHz */
2714 { /* PHY rev 3 */
2715 { 7, 11, 16, 23 },
2716 { -5, 6, 10, 14 },
2717 { 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA },
2718 { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
2719 0x627E,
2720 { 0x613F, 0x613F, 0x613F, 0x613F },
2721 0x107E, 0x0066, 0x0074,
2722 0x18, 0x18, 0x18,
2723 0x020D, 0x5,
2724 },
2725 { /* PHY rev 4 */
2726 { 8, 12, 17, 25 },
2727 { -5, 6, 10, 14 },
2728 { 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA },
2729 { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
2730 0x527E,
2731 { 0x513F, 0x513F, 0x513F, 0x513F },
2732 0x007E, 0x0066, 0x0074,
2733 0x18, 0x18, 0x18,
2734 0x01A1, 0x5,
2735 },
2736 { /* PHY rev 5+ */
2737 { 9, 13, 18, 26 },
2738 { -3, 7, 11, 16 },
2739 { 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA, 0xA },
2740 { 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 },
2741 0x427E, /* invalid for external LNA! */
2742 { 0x413F, 0x413F, 0x413F, 0x413F }, /* invalid for external LNA! */
2743 0x1076, 0x0066, 0x106A,
2744 0xC, 0xC, 0xC,
2745 0x01D0, 0x5,
2746 },
2747 },
2748 { /* 5GHz */
2749 { /* PHY rev 3 */
2750 { 7, 11, 17, 23 },
2751 { -6, 2, 6, 10 },
2752 { 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13, 0x13 },
2753 { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 },
2754 0x52DE,
2755 { 0x516F, 0x516F, 0x516F, 0x516F },
2756 0x00DE, 0x00CA, 0x00CC,
2757 0x1E, 0x1E, 0x1E,
2758 0x01A1, 25,
2759 },
2760 { /* PHY rev 4 */
2761 { 8, 12, 18, 23 },
2762 { -5, 2, 6, 10 },
2763 { 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD },
2764 { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 },
2765 0x629E,
2766 { 0x614F, 0x614F, 0x614F, 0x614F },
2767 0x029E, 0x1084, 0x0086,
2768 0x24, 0x24, 0x24,
2769 0x0107, 25,
2770 },
2771 { /* PHY rev 5+ */
2772 { 6, 10, 16, 21 },
2773 { -7, 0, 4, 8 },
2774 { 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD, 0xD },
2775 { 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 },
2776 0x729E,
2777 { 0x714F, 0x714F, 0x714F, 0x714F },
2778 0x029E, 0x2084, 0x2086,
2779 0x24, 0x24, 0x24,
2780 0x00A9, 25,
2781 },
2782 },
2783};
2784
1638static inline void assert_ntab_array_sizes(void) 2785static inline void assert_ntab_array_sizes(void)
1639{ 2786{
1640#undef check 2787#undef check
@@ -1813,7 +2960,6 @@ void b43_ntab_write_bulk(struct b43_wldev *dev, u32 offset,
1813#define ntab_upload(dev, offset, data) do { \ 2960#define ntab_upload(dev, offset, data) do { \
1814 b43_ntab_write_bulk(dev, offset, offset##_SIZE, data); \ 2961 b43_ntab_write_bulk(dev, offset, offset##_SIZE, data); \
1815 } while (0) 2962 } while (0)
1816
1817void b43_nphy_rev0_1_2_tables_init(struct b43_wldev *dev) 2963void b43_nphy_rev0_1_2_tables_init(struct b43_wldev *dev)
1818{ 2964{
1819 /* Static tables */ 2965 /* Static tables */
@@ -1847,11 +2993,70 @@ void b43_nphy_rev0_1_2_tables_init(struct b43_wldev *dev)
1847 ntab_upload(dev, B43_NTAB_C1_LOFEEDTH, b43_ntab_loftlt1); 2993 ntab_upload(dev, B43_NTAB_C1_LOFEEDTH, b43_ntab_loftlt1);
1848} 2994}
1849 2995
2996#define ntab_upload_r3(dev, offset, data) do { \
2997 b43_ntab_write_bulk(dev, offset, ARRAY_SIZE(data), data); \
2998 } while (0)
1850void b43_nphy_rev3plus_tables_init(struct b43_wldev *dev) 2999void b43_nphy_rev3plus_tables_init(struct b43_wldev *dev)
1851{ 3000{
1852 /* Static tables */ 3001 /* Static tables */
1853 /* TODO */ 3002 ntab_upload_r3(dev, B43_NTAB_FRAMESTRUCT_R3, b43_ntab_framestruct_r3);
3003 ntab_upload_r3(dev, B43_NTAB_PILOT_R3, b43_ntab_pilot_r3);
3004 ntab_upload_r3(dev, B43_NTAB_TMAP_R3, b43_ntab_tmap_r3);
3005 ntab_upload_r3(dev, B43_NTAB_INTLEVEL_R3, b43_ntab_intlevel_r3);
3006 ntab_upload_r3(dev, B43_NTAB_TDTRN_R3, b43_ntab_tdtrn_r3);
3007 ntab_upload_r3(dev, B43_NTAB_NOISEVAR0_R3, b43_ntab_noisevar0_r3);
3008 ntab_upload_r3(dev, B43_NTAB_NOISEVAR1_R3, b43_ntab_noisevar1_r3);
3009 ntab_upload_r3(dev, B43_NTAB_MCS_R3, b43_ntab_mcs_r3);
3010 ntab_upload_r3(dev, B43_NTAB_TDI20A0_R3, b43_ntab_tdi20a0_r3);
3011 ntab_upload_r3(dev, B43_NTAB_TDI20A1_R3, b43_ntab_tdi20a1_r3);
3012 ntab_upload_r3(dev, B43_NTAB_TDI40A0_R3, b43_ntab_tdi40a0_r3);
3013 ntab_upload_r3(dev, B43_NTAB_TDI40A1_R3, b43_ntab_tdi40a1_r3);
3014 ntab_upload_r3(dev, B43_NTAB_PILOTLT_R3, b43_ntab_pilotlt_r3);
3015 ntab_upload_r3(dev, B43_NTAB_CHANEST_R3, b43_ntab_channelest_r3);
3016 ntab_upload_r3(dev, B43_NTAB_FRAMELT_R3, b43_ntab_framelookup_r3);
3017 ntab_upload_r3(dev, B43_NTAB_C0_ESTPLT_R3,
3018 b43_ntab_estimatepowerlt0_r3);
3019 ntab_upload_r3(dev, B43_NTAB_C1_ESTPLT_R3,
3020 b43_ntab_estimatepowerlt1_r3);
3021 ntab_upload_r3(dev, B43_NTAB_C0_ADJPLT_R3, b43_ntab_adjustpower0_r3);
3022 ntab_upload_r3(dev, B43_NTAB_C1_ADJPLT_R3, b43_ntab_adjustpower1_r3);
3023 ntab_upload_r3(dev, B43_NTAB_C0_GAINCTL_R3, b43_ntab_gainctl0_r3);
3024 ntab_upload_r3(dev, B43_NTAB_C1_GAINCTL_R3, b43_ntab_gainctl1_r3);
3025 ntab_upload_r3(dev, B43_NTAB_C0_IQLT_R3, b43_ntab_iqlt0_r3);
3026 ntab_upload_r3(dev, B43_NTAB_C1_IQLT_R3, b43_ntab_iqlt1_r3);
3027 ntab_upload_r3(dev, B43_NTAB_C0_LOFEEDTH_R3, b43_ntab_loftlt0_r3);
3028 ntab_upload_r3(dev, B43_NTAB_C1_LOFEEDTH_R3, b43_ntab_loftlt1_r3);
1854 3029
1855 /* Volatile tables */ 3030 /* Volatile tables */
1856 /* TODO */ 3031 /* TODO */
1857} 3032}
3033
3034struct nphy_gain_ctl_workaround_entry *b43_nphy_get_gain_ctl_workaround_ent(
3035 struct b43_wldev *dev, bool ghz5, bool ext_lna)
3036{
3037 struct nphy_gain_ctl_workaround_entry *e;
3038 u8 phy_idx;
3039
3040 B43_WARN_ON(dev->phy.rev < 3);
3041 if (dev->phy.rev >= 5)
3042 phy_idx = 2;
3043 else if (dev->phy.rev == 4)
3044 phy_idx = 1;
3045 else
3046 phy_idx = 0;
3047
3048 e = &nphy_gain_ctl_workaround[ghz5][phy_idx];
3049
3050 /* Only one entry differs for external LNA, so instead making whole
3051 * table 2 times bigger, hack is here
3052 */
3053 if (!ghz5 && dev->phy.rev >= 5 && ext_lna) {
3054 e->rfseq_init[0] &= 0x0FFF;
3055 e->rfseq_init[1] &= 0x0FFF;
3056 e->rfseq_init[2] &= 0x0FFF;
3057 e->rfseq_init[3] &= 0x0FFF;
3058 e->init_gain &= 0x0FFF;
3059 }
3060
3061 return e;
3062}
diff --git a/drivers/net/wireless/b43/tables_nphy.h b/drivers/net/wireless/b43/tables_nphy.h
index 4ec593ba3eef..18569367ce43 100644
--- a/drivers/net/wireless/b43/tables_nphy.h
+++ b/drivers/net/wireless/b43/tables_nphy.h
@@ -35,6 +35,31 @@ struct nphy_rf_control_override_rev3 {
35 u8 val_addr1; 35 u8 val_addr1;
36}; 36};
37 37
38struct nphy_gain_ctl_workaround_entry {
39 s8 lna1_gain[4];
40 s8 lna2_gain[4];
41 u8 gain_db[10];
42 u8 gain_bits[10];
43
44 u16 init_gain;
45 u16 rfseq_init[4];
46
47 u16 cliphi_gain;
48 u16 clipmd_gain;
49 u16 cliplo_gain;
50
51 u16 crsmin;
52 u16 crsminl;
53 u16 crsminu;
54
55 u16 nbclip;
56 u16 wlclip;
57};
58
59/* Get entry with workaround values for gain ctl. Does not return NULL. */
60struct nphy_gain_ctl_workaround_entry *b43_nphy_get_gain_ctl_workaround_ent(
61 struct b43_wldev *dev, bool ghz5, bool ext_lna);
62
38/* Get the NPHY Channel Switch Table entry for a channel. 63/* Get the NPHY Channel Switch Table entry for a channel.
39 * Returns NULL on failure to find an entry. */ 64 * Returns NULL on failure to find an entry. */
40const struct b43_nphy_channeltab_entry_rev2 * 65const struct b43_nphy_channeltab_entry_rev2 *
@@ -109,6 +134,33 @@ b43_nphy_get_chantabent_rev3(struct b43_wldev *dev, u16 freq);
109#define B43_NTAB_C1_LOFEEDTH B43_NTAB16(0x1B, 0x1C0) /* Local Oscillator Feed Through Lookup Table Core 1 */ 134#define B43_NTAB_C1_LOFEEDTH B43_NTAB16(0x1B, 0x1C0) /* Local Oscillator Feed Through Lookup Table Core 1 */
110#define B43_NTAB_C1_LOFEEDTH_SIZE 128 135#define B43_NTAB_C1_LOFEEDTH_SIZE 128
111 136
137/* Static N-PHY tables, PHY revision >= 3 */
138#define B43_NTAB_FRAMESTRUCT_R3 B43_NTAB32(10, 000) /* frame struct */
139#define B43_NTAB_PILOT_R3 B43_NTAB16(11, 000) /* pilot */
140#define B43_NTAB_TMAP_R3 B43_NTAB32(12, 000) /* TM AP */
141#define B43_NTAB_INTLEVEL_R3 B43_NTAB32(13, 000) /* INT LV */
142#define B43_NTAB_TDTRN_R3 B43_NTAB32(14, 000) /* TD TRN */
143#define B43_NTAB_NOISEVAR0_R3 B43_NTAB32(16, 000) /* noise variance 0 */
144#define B43_NTAB_NOISEVAR1_R3 B43_NTAB32(16, 128) /* noise variance 1 */
145#define B43_NTAB_MCS_R3 B43_NTAB16(18, 000) /* MCS */
146#define B43_NTAB_TDI20A0_R3 B43_NTAB32(19, 128) /* TDI 20/0 */
147#define B43_NTAB_TDI20A1_R3 B43_NTAB32(19, 256) /* TDI 20/1 */
148#define B43_NTAB_TDI40A0_R3 B43_NTAB32(19, 640) /* TDI 40/0 */
149#define B43_NTAB_TDI40A1_R3 B43_NTAB32(19, 768) /* TDI 40/1 */
150#define B43_NTAB_PILOTLT_R3 B43_NTAB32(20, 000) /* PLT lookup */
151#define B43_NTAB_CHANEST_R3 B43_NTAB32(22, 000) /* channel estimate */
152#define B43_NTAB_FRAMELT_R3 B43_NTAB8 (24, 000) /* frame lookup */
153#define B43_NTAB_C0_ESTPLT_R3 B43_NTAB8 (26, 000) /* estimated power lookup 0 */
154#define B43_NTAB_C1_ESTPLT_R3 B43_NTAB8 (27, 000) /* estimated power lookup 1 */
155#define B43_NTAB_C0_ADJPLT_R3 B43_NTAB8 (26, 064) /* adjusted power lookup 0 */
156#define B43_NTAB_C1_ADJPLT_R3 B43_NTAB8 (27, 064) /* adjusted power lookup 1 */
157#define B43_NTAB_C0_GAINCTL_R3 B43_NTAB32(26, 192) /* gain control lookup 0 */
158#define B43_NTAB_C1_GAINCTL_R3 B43_NTAB32(27, 192) /* gain control lookup 1 */
159#define B43_NTAB_C0_IQLT_R3 B43_NTAB32(26, 320) /* I/Q lookup 0 */
160#define B43_NTAB_C1_IQLT_R3 B43_NTAB32(27, 320) /* I/Q lookup 1 */
161#define B43_NTAB_C0_LOFEEDTH_R3 B43_NTAB16(26, 448) /* Local Oscillator Feed Through lookup 0 */
162#define B43_NTAB_C1_LOFEEDTH_R3 B43_NTAB16(27, 448) /* Local Oscillator Feed Through lookup 1 */
163
112#define B43_NTAB_TX_IQLO_CAL_LOFT_LADDER_40_SIZE 18 164#define B43_NTAB_TX_IQLO_CAL_LOFT_LADDER_40_SIZE 18
113#define B43_NTAB_TX_IQLO_CAL_LOFT_LADDER_20_SIZE 18 165#define B43_NTAB_TX_IQLO_CAL_LOFT_LADDER_20_SIZE 18
114#define B43_NTAB_TX_IQLO_CAL_IQIMB_LADDER_40_SIZE 18 166#define B43_NTAB_TX_IQLO_CAL_IQIMB_LADDER_40_SIZE 18
diff --git a/drivers/net/wireless/b43/xmit.c b/drivers/net/wireless/b43/xmit.c
index e6b0528f3b52..e5be381c17bc 100644
--- a/drivers/net/wireless/b43/xmit.c
+++ b/drivers/net/wireless/b43/xmit.c
@@ -32,6 +32,36 @@
32#include "dma.h" 32#include "dma.h"
33#include "pio.h" 33#include "pio.h"
34 34
35static const struct b43_tx_legacy_rate_phy_ctl_entry b43_tx_legacy_rate_phy_ctl[] = {
36 { B43_CCK_RATE_1MB, 0x0, 0x0 },
37 { B43_CCK_RATE_2MB, 0x0, 0x1 },
38 { B43_CCK_RATE_5MB, 0x0, 0x2 },
39 { B43_CCK_RATE_11MB, 0x0, 0x3 },
40 { B43_OFDM_RATE_6MB, B43_TXH_PHY1_CRATE_1_2, B43_TXH_PHY1_MODUL_BPSK },
41 { B43_OFDM_RATE_9MB, B43_TXH_PHY1_CRATE_3_4, B43_TXH_PHY1_MODUL_BPSK },
42 { B43_OFDM_RATE_12MB, B43_TXH_PHY1_CRATE_1_2, B43_TXH_PHY1_MODUL_QPSK },
43 { B43_OFDM_RATE_18MB, B43_TXH_PHY1_CRATE_3_4, B43_TXH_PHY1_MODUL_QPSK },
44 { B43_OFDM_RATE_24MB, B43_TXH_PHY1_CRATE_1_2, B43_TXH_PHY1_MODUL_QAM16 },
45 { B43_OFDM_RATE_36MB, B43_TXH_PHY1_CRATE_3_4, B43_TXH_PHY1_MODUL_QAM16 },
46 { B43_OFDM_RATE_48MB, B43_TXH_PHY1_CRATE_2_3, B43_TXH_PHY1_MODUL_QAM64 },
47 { B43_OFDM_RATE_54MB, B43_TXH_PHY1_CRATE_3_4, B43_TXH_PHY1_MODUL_QAM64 },
48};
49
50static const struct b43_tx_legacy_rate_phy_ctl_entry *
51b43_tx_legacy_rate_phy_ctl_ent(u8 bitrate)
52{
53 const struct b43_tx_legacy_rate_phy_ctl_entry *e;
54 unsigned int i;
55
56 for (i = 0; i < ARRAY_SIZE(b43_tx_legacy_rate_phy_ctl); i++) {
57 e = &(b43_tx_legacy_rate_phy_ctl[i]);
58 if (e->bitrate == bitrate)
59 return e;
60 }
61
62 B43_WARN_ON(1);
63 return NULL;
64}
35 65
36/* Extract the bitrate index out of a CCK PLCP header. */ 66/* Extract the bitrate index out of a CCK PLCP header. */
37static int b43_plcp_get_bitrate_idx_cck(struct b43_plcp_hdr6 *plcp) 67static int b43_plcp_get_bitrate_idx_cck(struct b43_plcp_hdr6 *plcp)
@@ -145,6 +175,34 @@ void b43_generate_plcp_hdr(struct b43_plcp_hdr4 *plcp,
145 } 175 }
146} 176}
147 177
178static u16 b43_generate_tx_phy_ctl1(struct b43_wldev *dev, u8 bitrate)
179{
180 const struct b43_phy *phy = &dev->phy;
181 const struct b43_tx_legacy_rate_phy_ctl_entry *e;
182 u16 control = 0;
183 u16 bw;
184
185 if (phy->type == B43_PHYTYPE_LP)
186 bw = B43_TXH_PHY1_BW_20;
187 else /* FIXME */
188 bw = B43_TXH_PHY1_BW_20;
189
190 if (0) { /* FIXME: MIMO */
191 } else if (b43_is_cck_rate(bitrate) && phy->type != B43_PHYTYPE_LP) {
192 control = bw;
193 } else {
194 control = bw;
195 e = b43_tx_legacy_rate_phy_ctl_ent(bitrate);
196 if (e) {
197 control |= e->coding_rate;
198 control |= e->modulation;
199 }
200 control |= B43_TXH_PHY1_MODE_SISO;
201 }
202
203 return control;
204}
205
148static u8 b43_calc_fallback_rate(u8 bitrate) 206static u8 b43_calc_fallback_rate(u8 bitrate)
149{ 207{
150 switch (bitrate) { 208 switch (bitrate) {
@@ -437,6 +495,14 @@ int b43_generate_txhdr(struct b43_wldev *dev,
437 extra_ft |= B43_TXH_EFT_RTSFB_OFDM; 495 extra_ft |= B43_TXH_EFT_RTSFB_OFDM;
438 else 496 else
439 extra_ft |= B43_TXH_EFT_RTSFB_CCK; 497 extra_ft |= B43_TXH_EFT_RTSFB_CCK;
498
499 if (rates[0].flags & IEEE80211_TX_RC_USE_RTS_CTS &&
500 phy->type == B43_PHYTYPE_N) {
501 txhdr->phy_ctl1_rts = cpu_to_le16(
502 b43_generate_tx_phy_ctl1(dev, rts_rate));
503 txhdr->phy_ctl1_rts_fb = cpu_to_le16(
504 b43_generate_tx_phy_ctl1(dev, rts_rate_fb));
505 }
440 } 506 }
441 507
442 /* Magic cookie */ 508 /* Magic cookie */
@@ -445,6 +511,13 @@ int b43_generate_txhdr(struct b43_wldev *dev,
445 else 511 else
446 txhdr->new_format.cookie = cpu_to_le16(cookie); 512 txhdr->new_format.cookie = cpu_to_le16(cookie);
447 513
514 if (phy->type == B43_PHYTYPE_N) {
515 txhdr->phy_ctl1 =
516 cpu_to_le16(b43_generate_tx_phy_ctl1(dev, rate));
517 txhdr->phy_ctl1_fb =
518 cpu_to_le16(b43_generate_tx_phy_ctl1(dev, rate_fb));
519 }
520
448 /* Apply the bitfields */ 521 /* Apply the bitfields */
449 txhdr->mac_ctl = cpu_to_le32(mac_ctl); 522 txhdr->mac_ctl = cpu_to_le32(mac_ctl);
450 txhdr->phy_ctl = cpu_to_le16(phy_ctl); 523 txhdr->phy_ctl = cpu_to_le16(phy_ctl);
@@ -652,7 +725,7 @@ void b43_rx(struct b43_wldev *dev, struct sk_buff *skb, const void *_rxhdr)
652 status.mactime += mactime; 725 status.mactime += mactime;
653 if (low_mactime_now <= mactime) 726 if (low_mactime_now <= mactime)
654 status.mactime -= 0x10000; 727 status.mactime -= 0x10000;
655 status.flag |= RX_FLAG_TSFT; 728 status.flag |= RX_FLAG_MACTIME_MPDU;
656 } 729 }
657 730
658 chanid = (chanstat & B43_RX_CHAN_ID) >> B43_RX_CHAN_ID_SHIFT; 731 chanid = (chanstat & B43_RX_CHAN_ID) >> B43_RX_CHAN_ID_SHIFT;
diff --git a/drivers/net/wireless/b43/xmit.h b/drivers/net/wireless/b43/xmit.h
index d4cf9b390af3..42debb5cd6fa 100644
--- a/drivers/net/wireless/b43/xmit.h
+++ b/drivers/net/wireless/b43/xmit.h
@@ -73,6 +73,12 @@ struct b43_txhdr {
73 } __packed; 73 } __packed;
74} __packed; 74} __packed;
75 75
76struct b43_tx_legacy_rate_phy_ctl_entry {
77 u8 bitrate;
78 u16 coding_rate;
79 u16 modulation;
80};
81
76/* MAC TX control */ 82/* MAC TX control */
77#define B43_TXH_MAC_USEFBR 0x10000000 /* Use fallback rate for this AMPDU */ 83#define B43_TXH_MAC_USEFBR 0x10000000 /* Use fallback rate for this AMPDU */
78#define B43_TXH_MAC_KEYIDX 0x0FF00000 /* Security key index */ 84#define B43_TXH_MAC_KEYIDX 0x0FF00000 /* Security key index */