Lines Matching +full:channel +full:- +full:11

1 // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause
2 /* Copyright(c) 2018-2019 Realtek Corporation
26 ether_addr_copy(efuse->addr, map->e.mac_addr);
32 ether_addr_copy(efuse->addr, map->u.mac_addr);
38 ether_addr_copy(efuse->addr, map->s.mac_addr);
43 struct rtw_efuse *efuse = &rtwdev->efuse;
49 efuse->rfe_option = map->rfe_option;
50 efuse->rf_board_option = map->rf_board_option;
51 efuse->crystal_cap = map->xtal_k;
52 efuse->pa_type_2g = map->pa_type;
53 efuse->pa_type_5g = map->pa_type;
54 efuse->lna_type_2g = map->lna_type_2g[0];
55 efuse->lna_type_5g = map->lna_type_5g[0];
56 efuse->channel_plan = map->channel_plan;
57 efuse->country_code[0] = map->country_code[0];
58 efuse->country_code[1] = map->country_code[1];
59 efuse->bt_setting = map->rf_bt_setting;
60 efuse->regd = map->rf_board_option & 0x7;
61 efuse->thermal_meter[RF_PATH_A] = map->thermal_meter;
62 efuse->thermal_meter_k = map->thermal_meter;
65 efuse->txpwr_idx_table[i] = map->txpwr_idx_table[i];
79 return -ENOTSUPP;
94 rtw_write32_mask(rtwdev, 0x1990, (BIT(11) | BIT(10)), 0x3);
98 rtw_write32_mask(rtwdev, 0x974, (BIT(11) | BIT(10)), 0x3);
126 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
131 dm_info->default_ofdm_index = 24;
133 dm_info->default_ofdm_index = swing_idx;
135 for (path = RF_PATH_A; path < rtwdev->hal.rf_path_num; path++) {
136 ewma_thermal_init(&dm_info->avg_thermal[path]);
137 dm_info->delta_power_index[path] = 0;
139 dm_info->pwr_trk_triggered = false;
140 dm_info->pwr_trk_init_trigger = true;
141 dm_info->thermal_meter_k = rtwdev->efuse.thermal_meter_k;
153 struct rtw_hal *hal = &rtwdev->hal;
169 crystal_cap = rtwdev->efuse.crystal_cap & 0x3F;
177 rtw8822b_config_trx_mode(rtwdev, hal->antenna_tx, hal->antenna_rx,
267 /* Set beacon cotnrol - enable TSF and other related functions */
289 static void rtw8822b_set_channel_rfe_efem(struct rtw_dev *rtwdev, u8 channel)
291 struct rtw_hal *hal = &rtwdev->hal;
293 if (IS_CH_2G_BAND(channel)) {
303 rtw_write32s_mask(rtwdev, REG_RFEINV, BIT(11) | BIT(10) | 0x3f, 0x0);
305 if (hal->antenna_rx == BB_PATH_AB ||
306 hal->antenna_tx == BB_PATH_AB) {
309 } else if (hal->antenna_rx == hal->antenna_tx) {
318 static void rtw8822b_set_channel_rfe_ifem(struct rtw_dev *rtwdev, u8 channel)
320 struct rtw_hal *hal = &rtwdev->hal;
322 if (IS_CH_2G_BAND(channel)) {
332 rtw_write32s_mask(rtwdev, REG_RFEINV, BIT(11) | BIT(10) | 0x3f, 0x0);
334 if (IS_CH_2G_BAND(channel)) {
335 if (hal->antenna_rx == BB_PATH_AB ||
336 hal->antenna_tx == BB_PATH_AB) {
339 } else if (hal->antenna_rx == hal->antenna_tx) {
386 *reg82c = cca_ccut->reg82c[col];
387 *reg830 = cca_ccut->reg830[col];
388 *reg838 = cca_ccut->reg838[col];
396 void (*rtw_set_channel_rfe)(struct rtw_dev *rtwdev, u8 channel);
420 static void rtw8822b_set_channel_cca(struct rtw_dev *rtwdev, u8 channel, u8 bw,
423 struct rtw_hal *hal = &rtwdev->hal;
424 struct rtw_efuse *efuse = &rtwdev->efuse;
430 if (IS_CH_2G_BAND(channel)) {
431 cca_ccut = rfe_info->cca_ccut_2g;
433 if (hal->antenna_rx == BB_PATH_A ||
434 hal->antenna_rx == BB_PATH_B)
439 cca_ccut = rfe_info->cca_ccut_5g;
441 if (hal->antenna_rx == BB_PATH_A ||
442 hal->antenna_rx == BB_PATH_B)
450 switch (rfe_info->fem) {
454 if (rfe_info->ifem_ext)
461 if (IS_CH_2G_BAND(channel))
469 if ((hal->cut_version == RTW_CHIP_VER_CUT_B &&
474 (efuse->rfe_option == 5 && col == CCUT_IDX_2R_5G))
482 if (is_efem_cca && !(hal->cut_version == RTW_CHIP_VER_CUT_B))
485 if (bw == RTW_CHANNEL_WIDTH_20 && IS_CH_5G_BAND_MID(channel))
497 static void rtw8822b_set_channel_rf(struct rtw_dev *rtwdev, u8 channel, u8 bw)
506 #define RF18_BW_MASK (BIT(11) | BIT(10))
507 #define RF18_BW_20M (BIT(11) | BIT(10))
508 #define RF18_BW_40M (BIT(11))
512 struct rtw_hal *hal = &rtwdev->hal;
520 rf_reg18 |= (IS_CH_2G_BAND(channel) ? RF18_BAND_2G : RF18_BAND_5G);
521 rf_reg18 |= (channel & RF18_CHANNEL_MASK);
522 if (channel > 144)
524 else if (channel >= 80)
542 if (IS_CH_2G_BAND(channel))
544 else if (IS_CH_5G_BAND_1(channel) || IS_CH_5G_BAND_2(channel))
545 rf_reg_be = low_band[(channel - 36) >> 1];
546 else if (IS_CH_5G_BAND_3(channel))
547 rf_reg_be = middle_band[(channel - 100) >> 1];
548 else if (IS_CH_5G_BAND_4(channel))
549 rf_reg_be = high_band[(channel - 149) >> 1];
555 /* need to set 0xdf[18]=1 before writing RF18 when channel 144 */
556 if (channel == 144)
562 if (hal->rf_type > RF_1T1R)
576 struct rtw_hal *hal = &rtwdev->hal;
580 rtw_write32_mask(rtwdev, REG_RXIGI_A, 0x7f, igi - 2);
582 rtw_write32_mask(rtwdev, REG_RXIGI_B, 0x7f, igi - 2);
587 hal->antenna_rx | (hal->antenna_rx << 4));
610 static void rtw8822b_set_channel_bb(struct rtw_dev *rtwdev, u8 channel, u8 bw,
613 struct rtw_efuse *efuse = &rtwdev->efuse;
614 u8 rfe_option = efuse->rfe_option;
617 if (IS_CH_2G_BAND(channel)) {
625 if (channel == 14) {
634 } else if (IS_CH_5G_BAND(channel)) {
640 if (IS_CH_5G_BAND_1(channel) || IS_CH_5G_BAND_2(channel))
642 else if (IS_CH_5G_BAND_3(channel))
644 else if (IS_CH_5G_BAND_4(channel))
647 if (IS_CH_5G_BAND_1(channel))
649 else if (IS_CH_5G_BAND_2(channel))
651 else if (channel >= 100 && channel <= 116)
653 else if (channel >= 118 && channel <= 177)
716 static void rtw8822b_set_channel(struct rtw_dev *rtwdev, u8 channel, u8 bw,
719 struct rtw_efuse *efuse = &rtwdev->efuse;
722 if (WARN(efuse->rfe_option >= ARRAY_SIZE(rtw8822b_rfe_info),
723 "rfe_option %d is out of boundary\n", efuse->rfe_option))
726 rfe_info = &rtw8822b_rfe_info[efuse->rfe_option];
728 rtw8822b_set_channel_bb(rtwdev, channel, bw, primary_chan_idx);
729 rtw_set_channel_mac(rtwdev, channel, bw, primary_chan_idx);
730 rtw8822b_set_channel_rf(rtwdev, channel, bw);
733 rtw8822b_set_channel_cca(rtwdev, channel, bw, rfe_info);
734 (*rfe_info->rtw_set_channel_rfe)(rtwdev, channel);
740 struct rtw_efuse *efuse = &rtwdev->efuse;
742 u8 ch = rtwdev->hal.current_channel;
746 if (WARN(efuse->rfe_option >= ARRAY_SIZE(rtw8822b_rfe_info),
747 "rfe_option %d is out of boundary\n", efuse->rfe_option))
750 rfe_info = &rtw8822b_rfe_info[efuse->rfe_option];
783 if (is_tx2_path || rtwdev->mp_mode) {
810 for (counter = 100; counter > 0; counter--) {
835 (*rfe_info->rtw_set_channel_rfe)(rtwdev, ch);
841 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
842 s8 min_rx_power = -120;
846 pkt_stat->rx_power[RF_PATH_A] = pwdb - 110;
847 pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 1);
848 pkt_stat->bw = RTW_CHANNEL_WIDTH_20;
849 pkt_stat->signal_power = max(pkt_stat->rx_power[RF_PATH_A],
851 dm_info->rssi[RF_PATH_A] = pkt_stat->rssi;
857 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
859 s8 min_rx_power = -120;
865 if (pkt_stat->rate > DESC_RATE11M && pkt_stat->rate < DESC_RATEMCS0)
879 pkt_stat->rx_power[RF_PATH_A] = GET_PHY_STAT_P1_PWDB_A(phy_status) - 110;
880 pkt_stat->rx_power[RF_PATH_B] = GET_PHY_STAT_P1_PWDB_B(phy_status) - 110;
881 pkt_stat->rssi = rtw_phy_rf_power_2_rssi(pkt_stat->rx_power, 2);
882 pkt_stat->bw = bw;
883 pkt_stat->signal_power = max3(pkt_stat->rx_power[RF_PATH_A],
884 pkt_stat->rx_power[RF_PATH_B],
887 dm_info->curr_rx_rate = pkt_stat->rate;
889 pkt_stat->rx_evm[RF_PATH_A] = GET_PHY_STAT_P1_RXEVM_A(phy_status);
890 pkt_stat->rx_evm[RF_PATH_B] = GET_PHY_STAT_P1_RXEVM_B(phy_status);
892 pkt_stat->rx_snr[RF_PATH_A] = GET_PHY_STAT_P1_RXSNR_A(phy_status);
893 pkt_stat->rx_snr[RF_PATH_B] = GET_PHY_STAT_P1_RXSNR_B(phy_status);
895 pkt_stat->cfo_tail[RF_PATH_A] = GET_PHY_STAT_P1_CFO_TAIL_A(phy_status);
896 pkt_stat->cfo_tail[RF_PATH_B] = GET_PHY_STAT_P1_CFO_TAIL_B(phy_status);
898 for (path = 0; path <= rtwdev->hal.rf_path_num; path++) {
899 rssi = rtw_phy_rf_power_2_rssi(&pkt_stat->rx_power[path], 1);
900 dm_info->rssi[path] = rssi;
901 dm_info->rx_snr[path] = pkt_stat->rx_snr[path] >> 1;
902 dm_info->cfo_tail[path] = (pkt_stat->cfo_tail[path] * 5) >> 1;
904 rx_evm = pkt_stat->rx_evm[path];
910 evm_dbm = ((u8)-rx_evm >> 1);
912 dm_info->rx_evm_dbm[path] = evm_dbm;
941 u32 desc_sz = rtwdev->chip->rx_pkt_desc_sz;
946 pkt_stat->phy_status = GET_RX_DESC_PHYST(rx_desc);
947 pkt_stat->icv_err = GET_RX_DESC_ICV_ERR(rx_desc);
948 pkt_stat->crc_err = GET_RX_DESC_CRC32(rx_desc);
949 pkt_stat->decrypted = !GET_RX_DESC_SWDEC(rx_desc) &&
951 pkt_stat->is_c2h = GET_RX_DESC_C2H(rx_desc);
952 pkt_stat->pkt_len = GET_RX_DESC_PKT_LEN(rx_desc);
953 pkt_stat->drv_info_sz = GET_RX_DESC_DRV_INFO_SIZE(rx_desc);
954 pkt_stat->shift = GET_RX_DESC_SHIFT(rx_desc);
955 pkt_stat->rate = GET_RX_DESC_RX_RATE(rx_desc);
956 pkt_stat->cam_id = GET_RX_DESC_MACID(rx_desc);
957 pkt_stat->ppdu_cnt = GET_RX_DESC_PPDU_CNT(rx_desc);
958 pkt_stat->tsf_low = GET_RX_DESC_TSFL(rx_desc);
960 /* drv_info_sz is in unit of 8-bytes */
961 pkt_stat->drv_info_sz *= 8;
964 if (pkt_stat->is_c2h)
967 hdr = (struct ieee80211_hdr *)(rx_desc + desc_sz + pkt_stat->shift +
968 pkt_stat->drv_info_sz);
969 if (pkt_stat->phy_status) {
970 phy_status = rx_desc + desc_sz + pkt_stat->shift;
980 struct rtw_hal *hal = &rtwdev->hal;
988 pwr_index = hal->tx_pwr_tbl[path][rate];
1002 struct rtw_hal *hal = &rtwdev->hal;
1005 for (path = 0; path < hal->rf_path_num; path++) {
1027 struct rtw_hal *hal = &rtwdev->hal;
1034 return -EINVAL;
1039 return -EINVAL;
1042 hal->antenna_tx = antenna_tx;
1043 hal->antenna_rx = antenna_rx;
1061 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1072 dm_info->cck_fa_cnt = cck_fa_cnt;
1073 dm_info->ofdm_fa_cnt = ofdm_fa_cnt;
1074 dm_info->total_fa_cnt = ofdm_fa_cnt;
1075 dm_info->total_fa_cnt += cck_enable ? cck_fa_cnt : 0;
1078 dm_info->cck_ok_cnt = crc32_cnt & 0xffff;
1079 dm_info->cck_err_cnt = (crc32_cnt & 0xffff0000) >> 16;
1081 dm_info->ofdm_ok_cnt = crc32_cnt & 0xffff;
1082 dm_info->ofdm_err_cnt = (crc32_cnt & 0xffff0000) >> 16;
1084 dm_info->ht_ok_cnt = crc32_cnt & 0xffff;
1085 dm_info->ht_err_cnt = (crc32_cnt & 0xffff0000) >> 16;
1087 dm_info->vht_ok_cnt = crc32_cnt & 0xffff;
1088 dm_info->vht_err_cnt = (crc32_cnt & 0xffff0000) >> 16;
1091 dm_info->ofdm_cca_cnt = ((cca32_cnt & 0xffff0000) >> 16);
1092 dm_info->total_cca_cnt = dm_info->ofdm_cca_cnt;
1095 dm_info->cck_cca_cnt = cca32_cnt & 0xffff;
1096 dm_info->total_cca_cnt += dm_info->cck_cca_cnt;
1149 /* enable PTA (3-wire function form BT side) */
1164 struct rtw_coex *coex = &rtwdev->coex;
1165 struct rtw_coex_dm *coex_dm = &coex->dm;
1166 struct rtw_coex_rfe *coex_rfe = &coex->rfe;
1170 if (((ctrl_type << 8) + pos_type) == coex_dm->cur_switch_status)
1173 coex_dm->cur_switch_status = (ctrl_type << 8) + pos_type;
1175 if (coex_rfe->ant_switch_diversity &&
1179 polarity_inverse = (coex_rfe->ant_switch_polarity == 1);
1192 if (coex_rfe->rfe_module_type != 0x4 &&
1193 coex_rfe->rfe_module_type != 0x2)
1260 struct rtw_coex *coex = &rtwdev->coex;
1261 struct rtw_coex_rfe *coex_rfe = &coex->rfe;
1262 struct rtw_efuse *efuse = &rtwdev->efuse;
1265 coex_rfe->rfe_module_type = rtwdev->efuse.rfe_option;
1266 coex_rfe->ant_switch_polarity = 0;
1267 coex_rfe->ant_switch_diversity = false;
1268 if (coex_rfe->rfe_module_type == 0x12 ||
1269 coex_rfe->rfe_module_type == 0x15 ||
1270 coex_rfe->rfe_module_type == 0x16)
1271 coex_rfe->ant_switch_exist = false;
1273 coex_rfe->ant_switch_exist = true;
1275 if (coex_rfe->rfe_module_type == 2 ||
1276 coex_rfe->rfe_module_type == 4) {
1283 coex_rfe->wlg_at_btg = false;
1285 if (efuse->share_ant &&
1286 coex_rfe->ant_switch_exist && !is_ext_fem)
1287 coex_rfe->ant_switch_with_bt = true;
1289 coex_rfe->ant_switch_with_bt = false;
1308 struct rtw_coex *coex = &rtwdev->coex;
1309 struct rtw_coex_dm *coex_dm = &coex->dm;
1314 if (wl_pwr == coex_dm->cur_wl_pwr_lvl)
1317 coex_dm->cur_wl_pwr_lvl = wl_pwr;
1319 if (coex_dm->cur_wl_pwr_lvl >= ARRAY_SIZE(wl_tx_power))
1320 coex_dm->cur_wl_pwr_lvl = ARRAY_SIZE(wl_tx_power) - 1;
1322 pwr = wl_tx_power[coex_dm->cur_wl_pwr_lvl];
1330 struct rtw_coex *coex = &rtwdev->coex;
1331 struct rtw_coex_dm *coex_dm = &coex->dm;
1359 if (low_gain == coex_dm->cur_wl_rx_low_gain_en)
1362 coex_dm->cur_wl_rx_low_gain_en = low_gain;
1364 if (coex_dm->cur_wl_rx_low_gain_en) {
1365 rtw_dbg(rtwdev, RTW_DBG_COEX, "[BTCoex], Hi-Li Table On!\n");
1375 rtw_dbg(rtwdev, RTW_DBG_COEX, "[BTCoex], Hi-Li Table Off!\n");
1391 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1392 s8 delta_pwr_idx = dm_info->delta_power_index[path];
1393 u8 swing_upper_bound = dm_info->default_ofdm_index + 10;
1397 u8 swing_index = dm_info->default_ofdm_index;
1404 swing_index = dm_info->default_ofdm_index;
1407 swing_index = dm_info->default_ofdm_index +
1408 delta_pwr_idx - tx_pwr_idx_offset;
1412 if (dm_info->default_ofdm_index > abs(delta_pwr_idx))
1414 dm_info->default_ofdm_index + delta_pwr_idx;
1424 swing_index = RTW_TXSCALE_SIZE - 1;
1456 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1458 u8 channel = rtwdev->hal.current_channel;
1459 u8 band_width = rtwdev->hal.current_band_width;
1461 u8 tx_rate = dm_info->tx_rate;
1462 u8 max_pwr_idx = rtwdev->chip->max_power_index;
1465 band_width, channel, regd);
1469 pwr_idx_offset = max_pwr_idx - tx_pwr_idx;
1478 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1485 power_idx_last = dm_info->delta_power_index[path];
1493 dm_info->delta_power_index[path] = power_idx_cur;
1499 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1505 if (rtwdev->efuse.thermal_meter[RF_PATH_A] == 0xff)
1512 if (dm_info->pwr_trk_init_trigger)
1513 dm_info->pwr_trk_init_trigger = false;
1518 for (path = 0; path < rtwdev->hal.rf_path_num; path++)
1528 struct rtw_efuse *efuse = &rtwdev->efuse;
1529 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1531 if (efuse->power_track_type != 0)
1534 if (!dm_info->pwr_trk_triggered) {
1537 dm_info->pwr_trk_triggered = true;
1542 dm_info->pwr_trk_triggered = false;
1568 if (bfee->role == RTW_BFEE_SU)
1570 else if (bfee->role == RTW_BFEE_MU)
1593 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1597 igi = dm_info->igi_history[0];
1598 if (dm_info->edcca_mode == RTW_EDCCA_NORMAL) {
1600 h2l = l2h - EDCCA_L2H_H2L_DIFF_NORMAL;
1602 l2h = min_t(s8, igi, dm_info->l2h_th_ini);
1603 h2l = l2h - EDCCA_L2H_H2L_DIFF;
2204 /* Shared-Antenna Coex Table */
2206 {0xffffffff, 0xffffffff}, /* case-0 */
2211 {0xfafafafa, 0xfafafafa}, /* case-5 */
2216 {0x66555555, 0x6a5a5a5a}, /* case-10 */
2221 {0x66555555, 0xaaaaaaaa}, /* case-15 */
2226 {0xaa5555aa, 0x6a5a5a5a}, /* case-20 */
2231 {0xffffffff, 0x6a5a5aaa}, /* case-25 */
2236 {0x66556aaa, 0x6a5a6aaa}, /* case-30 */
2241 /* Non-Shared-Antenna Coex Table */
2243 {0xffffffff, 0xffffffff}, /* case-100 */
2248 {0xfafafafa, 0xfafafafa}, /* case-105 */
2253 {0x66555555, 0x6a5a5a5a}, /* case-110 */
2258 {0xffff55ff, 0xffff55ff}, /* case-115 */
2263 {0xffffffff, 0xaaaaaaaa}, /* case-120 */
2269 /* Shared-Antenna TDMA */
2271 { {0x00, 0x00, 0x00, 0x00, 0x00} }, /* case-0 */
2276 { {0x61, 0x10, 0x03, 0x11, 0x11} }, /* case-5 */
2281 { {0x61, 0x10, 0x03, 0x11, 0x10} }, /* case-10 */
2286 { {0x51, 0x08, 0x07, 0x10, 0x54} }, /* case-15 */
2291 { {0x51, 0x10, 0x03, 0x10, 0x50} }, /* case-20 */
2296 { {0x51, 0x10, 0x03, 0x10, 0x51} }, /* case-25 */
2301 /* Non-Shared-Antenna TDMA */
2303 { {0x00, 0x00, 0x00, 0x00, 0x00} }, /* case-100 */
2304 { {0x61, 0x45, 0x03, 0x11, 0x11} }, /* case-101 */
2308 { {0x61, 0x10, 0x03, 0x11, 0x11} }, /* case-105 */
2313 { {0x61, 0x10, 0x03, 0x11, 0x10} }, /* case-110 */
2318 { {0x51, 0x08, 0x07, 0x10, 0x54} }, /* case-115 */
2323 { {0x51, 0x10, 0x03, 0x10, 0x50} }, /* case-120 */
2327 /* rssi in percentage % (dbm = % - 100) */
2334 {0, 16, false, 7}, /* for WL-CPT */
2343 {0, 16, false, 7}, /* for WL-CPT */
2380 8, 8, 9, 10, 11, 11, 12, 13, 14, 14,
2383 8, 8, 9, 10, 11, 11, 12, 13, 14, 14,
2386 8, 8, 9, 10, 11, 11, 12, 13, 14, 14,
2393 8, 9, 9, 10, 11, 12, 13, 14, 14, 15,
2396 8, 9, 9, 10, 11, 12, 13, 14, 14, 15,
2399 8, 9, 9, 10, 11, 12, 13, 14, 14, 15,
2406 8, 8, 9, 10, 11, 11, 12, 13, 14, 14,
2409 8, 8, 9, 10, 11, 11, 12, 13, 14, 14,
2412 8, 8, 9, 10, 11, 11, 12, 13, 14, 14,
2419 8, 9, 9, 10, 11, 12, 13, 14, 14, 15,
2422 8, 9, 9, 10, 11, 12, 13, 14, 14, 15,
2425 8, 9, 9, 10, 11, 12, 13, 14, 14, 15,
2432 8, 9, 9, 9, 10, 10, 11, 11, 11, 12
2438 9, 10, 10, 11, 11, 12, 12, 12, 13, 13
2444 8, 9, 9, 9, 10, 10, 11, 11, 11, 12
2450 10, 11, 11, 12, 12, 13, 13, 14, 14, 15
2456 8, 9, 9, 9, 10, 10, 11, 11, 11, 12
2462 9, 10, 10, 11, 11, 12, 12, 12, 13, 13
2468 8, 9, 9, 9, 10, 10, 11, 11, 11, 12
2474 10, 11, 11, 12, 12, 13, 13, 14, 14, 15
2584 .l2h_th_ini_ad = -14 + EDCCA_IGI_BASE,