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");