main.c (d2eb7cb97c7df25df3e3e0f590b5bbf00c66d4c9) | main.c (dcbf179cbc18f66976740d28fbcfab75be514d16) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2/* Copyright(c) 2018-2019 Realtek Corporation 3 */ 4 5#include <linux/devcoredump.h> 6 7#include "main.h" 8#include "regd.h" --- 339 unchanged lines hidden (view full) --- 348 u32 item; 349 u32 size; 350 u32 padding1; 351 u32 padding2; 352} __packed; 353 354static int rtw_fwcd_prep(struct rtw_dev *rtwdev) 355{ | 1// SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2/* Copyright(c) 2018-2019 Realtek Corporation 3 */ 4 5#include <linux/devcoredump.h> 6 7#include "main.h" 8#include "regd.h" --- 339 unchanged lines hidden (view full) --- 348 u32 item; 349 u32 size; 350 u32 padding1; 351 u32 padding2; 352} __packed; 353 354static int rtw_fwcd_prep(struct rtw_dev *rtwdev) 355{ |
356 struct rtw_chip_info *chip = rtwdev->chip; | 356 const struct rtw_chip_info *chip = rtwdev->chip; |
357 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc; 358 const struct rtw_fwcd_segs *segs = chip->fwcd_segs; 359 u32 prep_size = chip->fw_rxff_size + sizeof(struct rtw_fwcd_hdr); 360 u8 i; 361 362 if (segs) { 363 prep_size += segs->num * sizeof(struct rtw_fwcd_hdr); 364 --- 386 unchanged lines hidden (view full) --- 751 cch_by_bw[bandwidth] = center_chan; 752 753 for (i = bandwidth + 1; i <= RTW_MAX_CHANNEL_WIDTH; i++) 754 cch_by_bw[i] = 0; 755} 756 757void rtw_set_channel(struct rtw_dev *rtwdev) 758{ | 357 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc; 358 const struct rtw_fwcd_segs *segs = chip->fwcd_segs; 359 u32 prep_size = chip->fw_rxff_size + sizeof(struct rtw_fwcd_hdr); 360 u8 i; 361 362 if (segs) { 363 prep_size += segs->num * sizeof(struct rtw_fwcd_hdr); 364 --- 386 unchanged lines hidden (view full) --- 751 cch_by_bw[bandwidth] = center_chan; 752 753 for (i = bandwidth + 1; i <= RTW_MAX_CHANNEL_WIDTH; i++) 754 cch_by_bw[i] = 0; 755} 756 757void rtw_set_channel(struct rtw_dev *rtwdev) 758{ |
759 const struct rtw_chip_info *chip = rtwdev->chip; |
|
759 struct ieee80211_hw *hw = rtwdev->hw; 760 struct rtw_hal *hal = &rtwdev->hal; | 760 struct ieee80211_hw *hw = rtwdev->hw; 761 struct rtw_hal *hal = &rtwdev->hal; |
761 struct rtw_chip_info *chip = rtwdev->chip; | |
762 struct rtw_channel_params ch_param; 763 u8 center_chan, bandwidth, primary_chan_idx; 764 u8 i; 765 766 rtw_get_channel_params(&hw->conf.chandef, &ch_param); 767 if (WARN(ch_param.center_chan == 0, "Invalid channel\n")) 768 return; 769 --- 46 unchanged lines hidden (view full) --- 816 * during scanning on each channel takes too long. 817 */ 818 if (!test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) 819 rtwdev->need_rfk = true; 820} 821 822void rtw_chip_prepare_tx(struct rtw_dev *rtwdev) 823{ | 762 struct rtw_channel_params ch_param; 763 u8 center_chan, bandwidth, primary_chan_idx; 764 u8 i; 765 766 rtw_get_channel_params(&hw->conf.chandef, &ch_param); 767 if (WARN(ch_param.center_chan == 0, "Invalid channel\n")) 768 return; 769 --- 46 unchanged lines hidden (view full) --- 816 * during scanning on each channel takes too long. 817 */ 818 if (!test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) 819 rtwdev->need_rfk = true; 820} 821 822void rtw_chip_prepare_tx(struct rtw_dev *rtwdev) 823{ |
824 struct rtw_chip_info *chip = rtwdev->chip; | 824 const struct rtw_chip_info *chip = rtwdev->chip; |
825 826 if (rtwdev->need_rfk) { 827 rtwdev->need_rfk = false; 828 chip->ops->phy_calibration(rtwdev); 829 } 830} 831 832static void rtw_vif_write_addr(struct rtw_dev *rtwdev, u32 start, u8 *addr) --- 52 unchanged lines hidden (view full) --- 885 break; 886 } 887 888 return bw; 889} 890 891static void rtw_hw_config_rf_ant_num(struct rtw_dev *rtwdev, u8 hw_ant_num) 892{ | 825 826 if (rtwdev->need_rfk) { 827 rtwdev->need_rfk = false; 828 chip->ops->phy_calibration(rtwdev); 829 } 830} 831 832static void rtw_vif_write_addr(struct rtw_dev *rtwdev, u32 start, u8 *addr) --- 52 unchanged lines hidden (view full) --- 885 break; 886 } 887 888 return bw; 889} 890 891static void rtw_hw_config_rf_ant_num(struct rtw_dev *rtwdev, u8 hw_ant_num) 892{ |
893 const struct rtw_chip_info *chip = rtwdev->chip; |
|
893 struct rtw_hal *hal = &rtwdev->hal; | 894 struct rtw_hal *hal = &rtwdev->hal; |
894 struct rtw_chip_info *chip = rtwdev->chip; | |
895 896 if (hw_ant_num == EFUSE_HW_CAP_IGNORE || 897 hw_ant_num >= hal->rf_path_num) 898 return; 899 900 switch (hw_ant_num) { 901 case 1: 902 hal->rf_type = RF_1T1R; --- 332 unchanged lines hidden (view full) --- 1235 si->ra_mask = ra_mask; 1236 si->rate_id = rate_id; 1237 1238 rtw_fw_send_ra_info(rtwdev, si, reset_ra_mask); 1239} 1240 1241static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev) 1242{ | 895 896 if (hw_ant_num == EFUSE_HW_CAP_IGNORE || 897 hw_ant_num >= hal->rf_path_num) 898 return; 899 900 switch (hw_ant_num) { 901 case 1: 902 hal->rf_type = RF_1T1R; --- 332 unchanged lines hidden (view full) --- 1235 si->ra_mask = ra_mask; 1236 si->rate_id = rate_id; 1237 1238 rtw_fw_send_ra_info(rtwdev, si, reset_ra_mask); 1239} 1240 1241static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev) 1242{ |
1243 struct rtw_chip_info *chip = rtwdev->chip; | 1243 const struct rtw_chip_info *chip = rtwdev->chip; |
1244 struct rtw_fw_state *fw; 1245 1246 fw = &rtwdev->fw; 1247 wait_for_completion(&fw->completion); 1248 if (!fw->firmware) 1249 return -EINVAL; 1250 1251 if (chip->wow_fw_name) { --- 4 unchanged lines hidden (view full) --- 1256 } 1257 1258 return 0; 1259} 1260 1261static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev, 1262 struct rtw_fw_state *fw) 1263{ | 1244 struct rtw_fw_state *fw; 1245 1246 fw = &rtwdev->fw; 1247 wait_for_completion(&fw->completion); 1248 if (!fw->firmware) 1249 return -EINVAL; 1250 1251 if (chip->wow_fw_name) { --- 4 unchanged lines hidden (view full) --- 1256 } 1257 1258 return 0; 1259} 1260 1261static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev, 1262 struct rtw_fw_state *fw) 1263{ |
1264 struct rtw_chip_info *chip = rtwdev->chip; | 1264 const struct rtw_chip_info *chip = rtwdev->chip; |
1265 1266 if (rtw_disable_lps_deep_mode || !chip->lps_deep_mode_supported || 1267 !fw->feature) 1268 return LPS_DEEP_MODE_NONE; 1269 1270 if ((chip->lps_deep_mode_supported & BIT(LPS_DEEP_MODE_PG)) && 1271 rtw_fw_feature_check(fw, FW_FEATURE_PG)) 1272 return LPS_DEEP_MODE_PG; 1273 1274 if ((chip->lps_deep_mode_supported & BIT(LPS_DEEP_MODE_LCLK)) && 1275 rtw_fw_feature_check(fw, FW_FEATURE_LCLK)) 1276 return LPS_DEEP_MODE_LCLK; 1277 1278 return LPS_DEEP_MODE_NONE; 1279} 1280 1281static int rtw_power_on(struct rtw_dev *rtwdev) 1282{ | 1265 1266 if (rtw_disable_lps_deep_mode || !chip->lps_deep_mode_supported || 1267 !fw->feature) 1268 return LPS_DEEP_MODE_NONE; 1269 1270 if ((chip->lps_deep_mode_supported & BIT(LPS_DEEP_MODE_PG)) && 1271 rtw_fw_feature_check(fw, FW_FEATURE_PG)) 1272 return LPS_DEEP_MODE_PG; 1273 1274 if ((chip->lps_deep_mode_supported & BIT(LPS_DEEP_MODE_LCLK)) && 1275 rtw_fw_feature_check(fw, FW_FEATURE_LCLK)) 1276 return LPS_DEEP_MODE_LCLK; 1277 1278 return LPS_DEEP_MODE_NONE; 1279} 1280 1281static int rtw_power_on(struct rtw_dev *rtwdev) 1282{ |
1283 struct rtw_chip_info *chip = rtwdev->chip; | 1283 const struct rtw_chip_info *chip = rtwdev->chip; |
1284 struct rtw_fw_state *fw = &rtwdev->fw; 1285 bool wifi_only; 1286 int ret; 1287 1288 ret = rtw_hci_setup(rtwdev); 1289 if (ret) { 1290 rtw_err(rtwdev, "failed to setup hci\n"); 1291 goto err; --- 172 unchanged lines hidden (view full) --- 1464 mutex_lock(&rtwdev->mutex); 1465 1466 rtw_power_off(rtwdev); 1467} 1468 1469static void rtw_init_ht_cap(struct rtw_dev *rtwdev, 1470 struct ieee80211_sta_ht_cap *ht_cap) 1471{ | 1284 struct rtw_fw_state *fw = &rtwdev->fw; 1285 bool wifi_only; 1286 int ret; 1287 1288 ret = rtw_hci_setup(rtwdev); 1289 if (ret) { 1290 rtw_err(rtwdev, "failed to setup hci\n"); 1291 goto err; --- 172 unchanged lines hidden (view full) --- 1464 mutex_lock(&rtwdev->mutex); 1465 1466 rtw_power_off(rtwdev); 1467} 1468 1469static void rtw_init_ht_cap(struct rtw_dev *rtwdev, 1470 struct ieee80211_sta_ht_cap *ht_cap) 1471{ |
1472 const struct rtw_chip_info *chip = rtwdev->chip; |
|
1472 struct rtw_efuse *efuse = &rtwdev->efuse; | 1473 struct rtw_efuse *efuse = &rtwdev->efuse; |
1473 struct rtw_chip_info *chip = rtwdev->chip; | |
1474 1475 ht_cap->ht_supported = true; 1476 ht_cap->cap = 0; 1477 ht_cap->cap |= IEEE80211_HT_CAP_SGI_20 | 1478 IEEE80211_HT_CAP_MAX_AMSDU | 1479 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT); 1480 1481 if (rtw_chip_has_rx_ldpc(rtwdev)) --- 81 unchanged lines hidden (view full) --- 1563 len = IEEE80211_MAX_DATA_LEN; 1564 else if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM)) 1565 len -= RTW_OLD_PROBE_PG_CNT * TX_PAGE_SIZE; 1566 1567 return len; 1568} 1569 1570static void rtw_set_supported_band(struct ieee80211_hw *hw, | 1474 1475 ht_cap->ht_supported = true; 1476 ht_cap->cap = 0; 1477 ht_cap->cap |= IEEE80211_HT_CAP_SGI_20 | 1478 IEEE80211_HT_CAP_MAX_AMSDU | 1479 (1 << IEEE80211_HT_CAP_RX_STBC_SHIFT); 1480 1481 if (rtw_chip_has_rx_ldpc(rtwdev)) --- 81 unchanged lines hidden (view full) --- 1563 len = IEEE80211_MAX_DATA_LEN; 1564 else if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM)) 1565 len -= RTW_OLD_PROBE_PG_CNT * TX_PAGE_SIZE; 1566 1567 return len; 1568} 1569 1570static void rtw_set_supported_band(struct ieee80211_hw *hw, |
1571 struct rtw_chip_info *chip) | 1571 const struct rtw_chip_info *chip) |
1572{ 1573 struct rtw_dev *rtwdev = hw->priv; 1574 struct ieee80211_supported_band *sband; 1575 1576 if (chip->band & RTW_BAND_2G) { 1577 sband = kmemdup(&rtw_band_2ghz, sizeof(*sband), GFP_KERNEL); 1578 if (!sband) 1579 goto err_out; --- 15 unchanged lines hidden (view full) --- 1595 1596 return; 1597 1598err_out: 1599 rtw_err(rtwdev, "failed to set supported band\n"); 1600} 1601 1602static void rtw_unset_supported_band(struct ieee80211_hw *hw, | 1572{ 1573 struct rtw_dev *rtwdev = hw->priv; 1574 struct ieee80211_supported_band *sband; 1575 1576 if (chip->band & RTW_BAND_2G) { 1577 sband = kmemdup(&rtw_band_2ghz, sizeof(*sband), GFP_KERNEL); 1578 if (!sband) 1579 goto err_out; --- 15 unchanged lines hidden (view full) --- 1595 1596 return; 1597 1598err_out: 1599 rtw_err(rtwdev, "failed to set supported band\n"); 1600} 1601 1602static void rtw_unset_supported_band(struct ieee80211_hw *hw, |
1603 struct rtw_chip_info *chip) | 1603 const struct rtw_chip_info *chip) |
1604{ 1605 kfree(hw->wiphy->bands[NL80211_BAND_2GHZ]); 1606 kfree(hw->wiphy->bands[NL80211_BAND_5GHZ]); 1607} 1608 1609static void rtw_vif_smps_iter(void *data, u8 *mac, 1610 struct ieee80211_vif *vif) 1611{ --- 5 unchanged lines hidden (view full) --- 1617 if (rtwdev->hal.txrx_1ss) 1618 ieee80211_request_smps(vif, 0, IEEE80211_SMPS_STATIC); 1619 else 1620 ieee80211_request_smps(vif, 0, IEEE80211_SMPS_OFF); 1621} 1622 1623void rtw_set_txrx_1ss(struct rtw_dev *rtwdev, bool txrx_1ss) 1624{ | 1604{ 1605 kfree(hw->wiphy->bands[NL80211_BAND_2GHZ]); 1606 kfree(hw->wiphy->bands[NL80211_BAND_5GHZ]); 1607} 1608 1609static void rtw_vif_smps_iter(void *data, u8 *mac, 1610 struct ieee80211_vif *vif) 1611{ --- 5 unchanged lines hidden (view full) --- 1617 if (rtwdev->hal.txrx_1ss) 1618 ieee80211_request_smps(vif, 0, IEEE80211_SMPS_STATIC); 1619 else 1620 ieee80211_request_smps(vif, 0, IEEE80211_SMPS_OFF); 1621} 1622 1623void rtw_set_txrx_1ss(struct rtw_dev *rtwdev, bool txrx_1ss) 1624{ |
1625 struct rtw_chip_info *chip = rtwdev->chip; | 1625 const struct rtw_chip_info *chip = rtwdev->chip; |
1626 struct rtw_hal *hal = &rtwdev->hal; 1627 1628 if (!chip->ops->config_txrx_mode || rtwdev->hal.txrx_1ss == txrx_1ss) 1629 return; 1630 1631 rtwdev->hal.txrx_1ss = txrx_1ss; 1632 if (txrx_1ss) 1633 chip->ops->config_txrx_mode(rtwdev, BB_PATH_A, BB_PATH_A, false); --- 104 unchanged lines hidden (view full) --- 1738 return ret; 1739 } 1740 1741 return 0; 1742} 1743 1744static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) 1745{ | 1626 struct rtw_hal *hal = &rtwdev->hal; 1627 1628 if (!chip->ops->config_txrx_mode || rtwdev->hal.txrx_1ss == txrx_1ss) 1629 return; 1630 1631 rtwdev->hal.txrx_1ss = txrx_1ss; 1632 if (txrx_1ss) 1633 chip->ops->config_txrx_mode(rtwdev, BB_PATH_A, BB_PATH_A, false); --- 104 unchanged lines hidden (view full) --- 1738 return ret; 1739 } 1740 1741 return 0; 1742} 1743 1744static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) 1745{ |
1746 struct rtw_chip_info *chip = rtwdev->chip; | 1746 const struct rtw_chip_info *chip = rtwdev->chip; |
1747 struct rtw_hal *hal = &rtwdev->hal; 1748 struct rtw_efuse *efuse = &rtwdev->efuse; 1749 1750 switch (rtw_hci_type(rtwdev)) { 1751 case RTW_HCI_TYPE_PCIE: 1752 rtwdev->hci.rpwm_addr = 0x03d9; 1753 rtwdev->hci.cpwm_addr = 0x03da; 1754 break; --- 241 unchanged lines hidden (view full) --- 1996 for (i = 0; i < RTW_EVM_NUM; i++) 1997 ewma_evm_init(&dm_info->ewma_evm[i]); 1998 for (i = 0; i < RTW_SNR_NUM; i++) 1999 ewma_snr_init(&dm_info->ewma_snr[i]); 2000} 2001 2002int rtw_core_init(struct rtw_dev *rtwdev) 2003{ | 1747 struct rtw_hal *hal = &rtwdev->hal; 1748 struct rtw_efuse *efuse = &rtwdev->efuse; 1749 1750 switch (rtw_hci_type(rtwdev)) { 1751 case RTW_HCI_TYPE_PCIE: 1752 rtwdev->hci.rpwm_addr = 0x03d9; 1753 rtwdev->hci.cpwm_addr = 0x03da; 1754 break; --- 241 unchanged lines hidden (view full) --- 1996 for (i = 0; i < RTW_EVM_NUM; i++) 1997 ewma_evm_init(&dm_info->ewma_evm[i]); 1998 for (i = 0; i < RTW_SNR_NUM; i++) 1999 ewma_snr_init(&dm_info->ewma_snr[i]); 2000} 2001 2002int rtw_core_init(struct rtw_dev *rtwdev) 2003{ |
2004 struct rtw_chip_info *chip = rtwdev->chip; | 2004 const struct rtw_chip_info *chip = rtwdev->chip; |
2005 struct rtw_coex *coex = &rtwdev->coex; 2006 int ret; 2007 2008 INIT_LIST_HEAD(&rtwdev->rsvd_page_list); 2009 INIT_LIST_HEAD(&rtwdev->txqs); 2010 2011 timer_setup(&rtwdev->tx_report.purge_timer, 2012 rtw_tx_report_purge_timer, 0); --- 181 unchanged lines hidden (view full) --- 2194 rtwdev->bf_info.bfer_su_cnt = 0; 2195 2196 return 0; 2197} 2198EXPORT_SYMBOL(rtw_register_hw); 2199 2200void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw) 2201{ | 2005 struct rtw_coex *coex = &rtwdev->coex; 2006 int ret; 2007 2008 INIT_LIST_HEAD(&rtwdev->rsvd_page_list); 2009 INIT_LIST_HEAD(&rtwdev->txqs); 2010 2011 timer_setup(&rtwdev->tx_report.purge_timer, 2012 rtw_tx_report_purge_timer, 0); --- 181 unchanged lines hidden (view full) --- 2194 rtwdev->bf_info.bfer_su_cnt = 0; 2195 2196 return 0; 2197} 2198EXPORT_SYMBOL(rtw_register_hw); 2199 2200void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw) 2201{ |
2202 struct rtw_chip_info *chip = rtwdev->chip; | 2202 const struct rtw_chip_info *chip = rtwdev->chip; |
2203 2204 ieee80211_unregister_hw(hw); 2205 rtw_unset_supported_band(hw, chip); 2206} 2207EXPORT_SYMBOL(rtw_unregister_hw); 2208 2209MODULE_AUTHOR("Realtek Corporation"); 2210MODULE_DESCRIPTION("Realtek 802.11ac wireless core module"); 2211MODULE_LICENSE("Dual BSD/GPL"); | 2203 2204 ieee80211_unregister_hw(hw); 2205 rtw_unset_supported_band(hw, chip); 2206} 2207EXPORT_SYMBOL(rtw_unregister_hw); 2208 2209MODULE_AUTHOR("Realtek Corporation"); 2210MODULE_DESCRIPTION("Realtek 802.11ac wireless core module"); 2211MODULE_LICENSE("Dual BSD/GPL"); |