Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

rtw88: extract: export symbols used in chip functionalities

In the current design, various chip functions and tables
are built into rtw88 core. That causes kernel to load its
functionalities even if a chip isn't currently used. We
plan to make each chip's functionalities a separate
kernel module to reduce rtw88 core. And kernel will be
able to load the necessary.

Before extracting chip functionalities, we export symbols
inside rtw88 core which will be used in chip modules.

Signed-off-by: Zong-Zhe Yang <kevin_yang@realtek.com>
Signed-off-by: Yan-Hsuan Chuang <yhchuang@realtek.com>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
Link: https://lore.kernel.org/r/20200515052327.31874-2-yhchuang@realtek.com

authored by

Zong-Zhe Yang and committed by
Kalle Valo
449be866 beb12813

+42
+7
drivers/net/wireless/realtek/rtw88/bf.c
··· 220 220 /* ndp rx standby timer */ 221 221 rtw_write8(rtwdev, REG_SND_PTCL_CTRL + 3, RTW_NDP_RX_STANDBY_TIME); 222 222 } 223 + EXPORT_SYMBOL(rtw_bf_enable_bfee_su); 223 224 224 225 /* nc index: 1 2T2R 0 1T1R 225 226 * nr index: 1 use Nsts 0 use reg setting ··· 264 263 /* accept NDPA and BF report poll */ 265 264 rtw_write16_set(rtwdev, REG_RXFLTMAP1, BIT_RXFLTMAP1_BF); 266 265 } 266 + EXPORT_SYMBOL(rtw_bf_enable_bfee_mu); 267 267 268 268 void rtw_bf_remove_bfee_su(struct rtw_dev *rtwdev, 269 269 struct rtw_bfee *bfee) ··· 290 288 clear_bit(bfee->su_reg_index, bfinfo->bfer_su_reg_maping); 291 289 bfee->su_reg_index = 0xFF; 292 290 } 291 + EXPORT_SYMBOL(rtw_bf_remove_bfee_su); 293 292 294 293 void rtw_bf_remove_bfee_mu(struct rtw_dev *rtwdev, 295 294 struct rtw_bfee *bfee) ··· 304 301 if (bfinfo->bfer_su_cnt == 0 && bfinfo->bfer_mu_cnt == 0) 305 302 rtw_bf_del_sounding(rtwdev); 306 303 } 304 + EXPORT_SYMBOL(rtw_bf_remove_bfee_mu); 307 305 308 306 void rtw_bf_set_gid_table(struct rtw_dev *rtwdev, struct ieee80211_vif *vif, 309 307 struct ieee80211_bss_conf *conf) ··· 333 329 334 330 rtw_bf_cfg_mu_bfee(rtwdev, &param); 335 331 } 332 + EXPORT_SYMBOL(rtw_bf_set_gid_table); 336 333 337 334 void rtw_bf_phy_init(struct rtw_dev *rtwdev) 338 335 { ··· 370 365 rtw_write32_mask(rtwdev, REG_BBPSF_CTRL, BIT_MASK_CSI_RATE, 371 366 DESC_RATE6M); 372 367 } 368 + EXPORT_SYMBOL(rtw_bf_phy_init); 373 369 374 370 void rtw_bf_cfg_csi_rate(struct rtw_dev *rtwdev, u8 rssi, u8 cur_rate, 375 371 u8 fixrate_en, u8 *new_rate) ··· 401 395 *new_rate = DESC_RATE24M; 402 396 } 403 397 } 398 + EXPORT_SYMBOL(rtw_bf_cfg_csi_rate);
+3
drivers/net/wireless/realtek/rtw88/coex.c
··· 283 283 rtw_write16(rtwdev, REG_WIFI_BT_INFO, val); 284 284 } 285 285 } 286 + EXPORT_SYMBOL(rtw_coex_write_scbd); 286 287 287 288 static u16 rtw_coex_read_scbd(struct rtw_dev *rtwdev) 288 289 { ··· 733 732 734 733 return val; 735 734 } 735 + EXPORT_SYMBOL(rtw_coex_read_indirect_reg); 736 736 737 737 void rtw_coex_write_indirect_reg(struct rtw_dev *rtwdev, u16 addr, 738 738 u32 mask, u32 val) ··· 747 745 if (!ltecoex_reg_write(rtwdev, addr, tmp)) 748 746 rtw_err(rtwdev, "failed to write indirect register\n"); 749 747 } 748 + EXPORT_SYMBOL(rtw_coex_write_indirect_reg); 750 749 751 750 static void rtw_coex_coex_ctrl_owner(struct rtw_dev *rtwdev, bool wifi_control) 752 751 {
+1
drivers/net/wireless/realtek/rtw88/efuse.c
··· 141 141 142 142 return 0; 143 143 } 144 + EXPORT_SYMBOL(rtw_read8_physical_efuse); 144 145 145 146 int rtw_parse_efuse_map(struct rtw_dev *rtwdev) 146 147 {
+1
drivers/net/wireless/realtek/rtw88/fw.c
··· 330 330 331 331 rtw_fw_send_h2c_packet(rtwdev, h2c_pkt); 332 332 } 333 + EXPORT_SYMBOL(rtw_fw_do_iqk); 333 334 334 335 void rtw_fw_query_bt_info(struct rtw_dev *rtwdev) 335 336 {
+1
drivers/net/wireless/realtek/rtw88/mac.c
··· 56 56 value8 |= BIT_CHECK_CCK_EN; 57 57 rtw_write8(rtwdev, REG_CCK_CHECK, value8); 58 58 } 59 + EXPORT_SYMBOL(rtw_set_channel_mac); 59 60 60 61 static int rtw_mac_pre_system_cfg(struct rtw_dev *rtwdev) 61 62 {
+26
drivers/net/wireless/realtek/rtw88/phy.c
··· 82 82 rtw_ht_1s_rates, rtw_ht_2s_rates, 83 83 rtw_vht_1s_rates, rtw_vht_2s_rates 84 84 }; 85 + EXPORT_SYMBOL(rtw_rate_section); 86 + 85 87 u8 rtw_rate_size[RTW_RATE_SECTION_MAX] = { 86 88 ARRAY_SIZE(rtw_cck_rates), 87 89 ARRAY_SIZE(rtw_ofdm_rates), ··· 92 90 ARRAY_SIZE(rtw_vht_1s_rates), 93 91 ARRAY_SIZE(rtw_vht_2s_rates) 94 92 }; 93 + EXPORT_SYMBOL(rtw_rate_size); 94 + 95 95 static const u8 rtw_cck_size = ARRAY_SIZE(rtw_cck_rates); 96 96 static const u8 rtw_ofdm_size = ARRAY_SIZE(rtw_ofdm_rates); 97 97 static const u8 rtw_ht_1s_size = ARRAY_SIZE(rtw_ht_1s_rates); ··· 141 137 142 138 dm_info->iqk.done = false; 143 139 } 140 + EXPORT_SYMBOL(rtw_phy_init); 144 141 145 142 void rtw_phy_dig_write(struct rtw_dev *rtwdev, u8 igi) 146 143 { ··· 681 676 682 677 return rtw_phy_linear_2_db(sum); 683 678 } 679 + EXPORT_SYMBOL(rtw_phy_rf_power_2_rssi); 684 680 685 681 u32 rtw_phy_read_rf(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, 686 682 u32 addr, u32 mask) ··· 704 698 705 699 return val; 706 700 } 701 + EXPORT_SYMBOL(rtw_phy_read_rf); 707 702 708 703 u32 rtw_phy_read_rf_sipi(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, 709 704 u32 addr, u32 mask) ··· 753 746 754 747 return (val32 & mask) >> shift; 755 748 } 749 + EXPORT_SYMBOL(rtw_phy_read_rf_sipi); 756 750 757 751 bool rtw_phy_write_rf_reg_sipi(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, 758 752 u32 addr, u32 mask, u32 data) ··· 793 785 794 786 return true; 795 787 } 788 + EXPORT_SYMBOL(rtw_phy_write_rf_reg_sipi); 796 789 797 790 bool rtw_phy_write_rf_reg(struct rtw_dev *rtwdev, enum rtw_rf_path rf_path, 798 791 u32 addr, u32 mask, u32 data) ··· 827 818 828 819 return rtw_phy_write_rf_reg_sipi(rtwdev, rf_path, addr, mask, data); 829 820 } 821 + EXPORT_SYMBOL(rtw_phy_write_rf_reg_mix); 830 822 831 823 void rtw_phy_setup_phy_cond(struct rtw_dev *rtwdev, u32 pkg) 832 824 { ··· 920 910 } 921 911 } 922 912 } 913 + EXPORT_SYMBOL(rtw_parse_tbl_phy_cond); 923 914 924 915 #define bcd_to_dec_pwr_by_rate(val, i) bcd2bin(val >> (i * 8)) 925 916 ··· 1284 1273 p->data); 1285 1274 } 1286 1275 } 1276 + EXPORT_SYMBOL(rtw_parse_tbl_bb_pg); 1287 1277 1288 1278 static const u8 rtw_channel_idx_5g[RTW_MAX_CHANNEL_NUM_5G] = { 1289 1279 36, 38, 40, 42, 44, 46, 48, /* Band 1 */ ··· 1429 1417 1430 1418 rtw_xref_txpwr_lmt(rtwdev); 1431 1419 } 1420 + EXPORT_SYMBOL(rtw_parse_tbl_txpwr_lmt); 1432 1421 1433 1422 void rtw_phy_cfg_mac(struct rtw_dev *rtwdev, const struct rtw_table *tbl, 1434 1423 u32 addr, u32 data) 1435 1424 { 1436 1425 rtw_write8(rtwdev, addr, data); 1437 1426 } 1427 + EXPORT_SYMBOL(rtw_phy_cfg_mac); 1438 1428 1439 1429 void rtw_phy_cfg_agc(struct rtw_dev *rtwdev, const struct rtw_table *tbl, 1440 1430 u32 addr, u32 data) 1441 1431 { 1442 1432 rtw_write32(rtwdev, addr, data); 1443 1433 } 1434 + EXPORT_SYMBOL(rtw_phy_cfg_agc); 1444 1435 1445 1436 void rtw_phy_cfg_bb(struct rtw_dev *rtwdev, const struct rtw_table *tbl, 1446 1437 u32 addr, u32 data) ··· 1463 1448 else 1464 1449 rtw_write32(rtwdev, addr, data); 1465 1450 } 1451 + EXPORT_SYMBOL(rtw_phy_cfg_bb); 1466 1452 1467 1453 void rtw_phy_cfg_rf(struct rtw_dev *rtwdev, const struct rtw_table *tbl, 1468 1454 u32 addr, u32 data) ··· 1477 1461 udelay(1); 1478 1462 } 1479 1463 } 1464 + EXPORT_SYMBOL(rtw_phy_cfg_rf); 1480 1465 1481 1466 static void rtw_load_rfk_table(struct rtw_dev *rtwdev) 1482 1467 { ··· 1515 1498 rtw_load_table(rtwdev, tbl); 1516 1499 } 1517 1500 } 1501 + EXPORT_SYMBOL(rtw_phy_load_tables); 1518 1502 1519 1503 static u8 rtw_get_channel_group(u8 channel) 1520 1504 { ··· 1859 1841 1860 1842 return tx_power; 1861 1843 } 1844 + EXPORT_SYMBOL(rtw_phy_get_tx_power_index); 1862 1845 1863 1846 static void rtw_phy_set_tx_power_index_by_rs(struct rtw_dev *rtwdev, 1864 1847 u8 ch, u8 path, u8 rs) ··· 1922 1903 chip->ops->set_tx_power_index(rtwdev); 1923 1904 mutex_unlock(&hal->tx_power_mutex); 1924 1905 } 1906 + EXPORT_SYMBOL(rtw_phy_set_tx_power_level); 1925 1907 1926 1908 static void 1927 1909 rtw_phy_tx_power_by_rate_config_by_path(struct rtw_hal *hal, u8 path, ··· 2080 2060 swing_table->n[RF_PATH_B] = tbl->pwrtrk_2gb_n; 2081 2061 } 2082 2062 } 2063 + EXPORT_SYMBOL(rtw_phy_config_swing_table); 2083 2064 2084 2065 void rtw_phy_pwrtrack_avg(struct rtw_dev *rtwdev, u8 thermal, u8 path) 2085 2066 { ··· 2090 2069 dm_info->thermal_avg[path] = 2091 2070 ewma_thermal_read(&dm_info->avg_thermal[path]); 2092 2071 } 2072 + EXPORT_SYMBOL(rtw_phy_pwrtrack_avg); 2093 2073 2094 2074 bool rtw_phy_pwrtrack_thermal_changed(struct rtw_dev *rtwdev, u8 thermal, 2095 2075 u8 path) ··· 2103 2081 2104 2082 return true; 2105 2083 } 2084 + EXPORT_SYMBOL(rtw_phy_pwrtrack_thermal_changed); 2106 2085 2107 2086 u8 rtw_phy_pwrtrack_get_delta(struct rtw_dev *rtwdev, u8 path) 2108 2087 { ··· 2116 2093 2117 2094 return min_t(u8, therm_delta, RTW_PWR_TRK_TBL_SZ - 1); 2118 2095 } 2096 + EXPORT_SYMBOL(rtw_phy_pwrtrack_get_delta); 2119 2097 2120 2098 s8 rtw_phy_pwrtrack_get_pwridx(struct rtw_dev *rtwdev, 2121 2099 struct rtw_swing_table *swing_table, ··· 2150 2126 else 2151 2127 return -delta_swing_table_idx_neg[delta]; 2152 2128 } 2129 + EXPORT_SYMBOL(rtw_phy_pwrtrack_get_pwridx); 2153 2130 2154 2131 bool rtw_phy_pwrtrack_need_iqk(struct rtw_dev *rtwdev) 2155 2132 { ··· 2164 2139 } 2165 2140 return false; 2166 2141 } 2142 + EXPORT_SYMBOL(rtw_phy_pwrtrack_need_iqk);
+1
drivers/net/wireless/realtek/rtw88/rx.c
··· 191 191 192 192 rtw_rx_addr_match(rtwdev, pkt_stat, hdr); 193 193 } 194 + EXPORT_SYMBOL(rtw_rx_fill_rx_status);
+2
drivers/net/wireless/realtek/rtw88/util.c
··· 19 19 20 20 return false; 21 21 } 22 + EXPORT_SYMBOL(check_hw_ready); 22 23 23 24 bool ltecoex_read_reg(struct rtw_dev *rtwdev, u16 offset, u32 *val) 24 25 { ··· 77 76 } 78 77 } 79 78 } 79 + EXPORT_SYMBOL(rtw_restore_reg); 80 80 81 81 void rtw_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss) 82 82 {