Lines Matching refs:rtwdev
166 struct rtw_dev *rtwdev;
170 static void rtw_dynamic_csi_rate(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
172 struct rtw_bf_info *bf_info = &rtwdev->bf_info;
180 rtw_chip_cfg_csi_rate(rtwdev, rtwdev->dm_info.min_rssi,
197 rtw_dynamic_csi_rate(iter_data->rtwdev, rtwvif);
210 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev,
212 struct rtw_traffic_stats *stats = &rtwdev->stats;
214 bool busy_traffic = test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
217 mutex_lock(&rtwdev->mutex);
219 if (!test_bit(RTW_FLAG_RUNNING, rtwdev->flags))
222 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work,
225 if (rtwdev->stats.tx_cnt > 100 || rtwdev->stats.rx_cnt > 100)
226 set_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
228 clear_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
230 rtw_coex_wl_status_check(rtwdev);
231 rtw_coex_query_bt_hid_list(rtwdev);
233 if (busy_traffic != test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags))
234 rtw_coex_wl_status_change_notify(rtwdev, 0);
255 if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
259 rtw_leave_lps(rtwdev);
261 rtw_phy_dynamic_mechanism(rtwdev);
263 data.rtwdev = rtwdev;
267 rtw_iterate_vifs(rtwdev, rtw_vif_watch_dog_iter, &data);
278 if (rtwdev->ps_enabled && data.rtwvif && !ps_active &&
279 !rtwdev->beacon_loss && !rtwdev->ap_active)
280 rtw_enter_lps(rtwdev, data.rtwvif->port);
282 rtwdev->watch_dog_cnt++;
285 mutex_unlock(&rtwdev->mutex);
290 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, c2h_work);
293 skb_queue_walk_safe(&rtwdev->c2h_queue, skb, tmp) {
294 skb_unlink(skb, &rtwdev->c2h_queue);
295 rtw_fw_c2h_cmd_handle(rtwdev, skb);
302 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, ips_work);
304 mutex_lock(&rtwdev->mutex);
305 if (rtwdev->hw->conf.flags & IEEE80211_CONF_IDLE)
306 rtw_enter_ips(rtwdev);
307 mutex_unlock(&rtwdev->mutex);
310 static u8 rtw_acquire_macid(struct rtw_dev *rtwdev)
314 mac_id = find_first_zero_bit(rtwdev->mac_id_map, RTW_MAX_MAC_ID_NUM);
316 set_bit(mac_id, rtwdev->mac_id_map);
325 struct rtw_dev *rtwdev = si->rtwdev;
327 mutex_lock(&rtwdev->mutex);
328 rtw_update_sta_info(rtwdev, si, true);
329 mutex_unlock(&rtwdev->mutex);
332 int rtw_sta_add(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
339 si->mac_id = rtw_acquire_macid(rtwdev);
345 si->rtwdev = rtwdev;
351 rtw_txq_init(rtwdev, sta->txq[i]);
354 rtw_update_sta_info(rtwdev, si, true);
355 rtw_fw_media_status_report(rtwdev, si->mac_id, true);
357 rtwdev->sta_cnt++;
358 rtwdev->beacon_loss = false;
359 rtw_dbg(rtwdev, RTW_DBG_STATE, "sta %pM joined with macid %d\n",
365 void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
373 rtw_release_macid(rtwdev, si->mac_id);
375 rtw_fw_media_status_report(rtwdev, si->mac_id, false);
378 rtw_txq_cleanup(rtwdev, sta->txq[i]);
382 rtwdev->sta_cnt--;
383 rtw_dbg(rtwdev, RTW_DBG_STATE, "sta %pM with macid %d left\n",
394 static int rtw_fwcd_prep(struct rtw_dev *rtwdev)
396 const struct rtw_chip_info *chip = rtwdev->chip;
397 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc;
419 static u8 *rtw_fwcd_next(struct rtw_dev *rtwdev, u32 item, u32 size)
421 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc;
426 rtw_dbg(rtwdev, RTW_DBG_FW, "fwcd isn't prepared successfully\n");
432 rtw_dbg(rtwdev, RTW_DBG_FW, "fwcd isn't prepared enough\n");
446 static void rtw_fwcd_dump(struct rtw_dev *rtwdev)
448 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc;
450 rtw_dbg(rtwdev, RTW_DBG_FW, "dump fwcd\n");
457 dev_coredumpv(rtwdev->dev, desc->data, desc->size, GFP_KERNEL);
460 static void rtw_fwcd_free(struct rtw_dev *rtwdev, bool free_self)
462 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc;
465 rtw_dbg(rtwdev, RTW_DBG_FW, "free fwcd by self\n");
473 static int rtw_fw_dump_crash_log(struct rtw_dev *rtwdev)
475 u32 size = rtwdev->chip->fw_rxff_size;
479 buf = (u32 *)rtw_fwcd_next(rtwdev, RTW_FWCD_TLV, size);
483 if (rtw_fw_dump_fifo(rtwdev, RTW_FW_FIFO_SEL_RXBUF_FW, 0, size, buf)) {
484 rtw_dbg(rtwdev, RTW_DBG_FW, "dump fw fifo fail\n");
489 rtw_dbg(rtwdev, RTW_DBG_FW, "fw crash dump's length is 0\n");
495 rtw_dbg(rtwdev, RTW_DBG_FW,
503 int rtw_dump_fw(struct rtw_dev *rtwdev, const u32 ocp_src, u32 size,
506 u32 rxff = rtwdev->chip->fw_rxff_size;
511 buf = rtw_fwcd_next(rtwdev, fwcd_item, size);
518 ret = rtw_ddma_to_fw_fifo(rtwdev, ocp_src + done_size,
521 rtw_err(rtwdev,
527 ret = rtw_fw_dump_fifo(rtwdev, RTW_FW_FIFO_SEL_RXBUF_FW, 0,
530 rtw_err(rtwdev,
544 int rtw_dump_reg(struct rtw_dev *rtwdev, const u32 addr, const u32 size)
554 buf = rtw_fwcd_next(rtwdev, RTW_FWCD_REG, size);
559 *(u32 *)(buf + i) = rtw_read32(rtwdev, addr + i);
588 struct rtw_dev *rtwdev = (struct rtw_dev *)data;
589 struct rtw_sec_desc *sec = &rtwdev->sec;
591 rtw_sec_clear_cam(rtwdev, sec, key->hw_key_idx);
596 struct rtw_dev *rtwdev = (struct rtw_dev *)data;
598 if (rtwdev->sta_cnt == 0) {
599 rtw_warn(rtwdev, "sta count before reset should not be 0\n");
602 rtw_sta_remove(rtwdev, sta, false);
607 struct rtw_dev *rtwdev = (struct rtw_dev *)data;
610 rtw_bf_disassoc(rtwdev, vif, NULL);
612 rtw_txq_cleanup(rtwdev, vif->txq);
615 void rtw_fw_recovery(struct rtw_dev *rtwdev)
617 if (!test_bit(RTW_FLAG_RESTARTING, rtwdev->flags))
618 ieee80211_queue_work(rtwdev->hw, &rtwdev->fw_recovery_work);
621 static void __fw_recovery_work(struct rtw_dev *rtwdev)
625 set_bit(RTW_FLAG_RESTARTING, rtwdev->flags);
626 clear_bit(RTW_FLAG_RESTART_TRIGGERING, rtwdev->flags);
628 ret = rtw_fwcd_prep(rtwdev);
631 ret = rtw_fw_dump_crash_log(rtwdev);
634 ret = rtw_chip_dump_fw_crash(rtwdev);
638 rtw_fwcd_dump(rtwdev);
640 rtw_fwcd_free(rtwdev, !!ret);
641 rtw_write8(rtwdev, REG_MCU_TST_CFG, 0);
646 rtw_iterate_keys_rcu(rtwdev, NULL, rtw_reset_key_iter, rtwdev);
648 rtw_iterate_stas_atomic(rtwdev, rtw_reset_sta_iter, rtwdev);
649 rtw_iterate_vifs_atomic(rtwdev, rtw_reset_vif_iter, rtwdev);
650 bitmap_zero(rtwdev->hw_port, RTW_PORT_NUM);
651 rtw_enter_ips(rtwdev);
656 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev,
659 mutex_lock(&rtwdev->mutex);
660 __fw_recovery_work(rtwdev);
661 mutex_unlock(&rtwdev->mutex);
663 ieee80211_restart_hw(rtwdev->hw);
694 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, ba_work);
697 rtw_iterate_stas_atomic(rtwdev, rtw_txq_ba_iter, &data);
713 void rtw_set_dtim_period(struct rtw_dev *rtwdev, int dtim_period)
715 rtw_write32_set(rtwdev, REG_TCR, BIT_TCR_UPDATE_TIMIE);
716 rtw_write8(rtwdev, REG_DTIM_COUNTER_ROOT, dtim_period - 1);
719 void rtw_update_channel(struct rtw_dev *rtwdev, u8 center_channel,
724 struct rtw_hal *hal = &rtwdev->hal;
851 void rtw_set_channel(struct rtw_dev *rtwdev)
853 const struct rtw_chip_info *chip = rtwdev->chip;
854 struct ieee80211_hw *hw = rtwdev->hw;
855 struct rtw_hal *hal = &rtwdev->hal;
868 rtw_update_channel(rtwdev, center_chan, primary_chan, band, bandwidth);
870 if (rtwdev->scan_info.op_chan)
871 rtw_store_op_chan(rtwdev, true);
873 chip->ops->set_channel(rtwdev, center_chan, bandwidth,
877 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_5G);
879 if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
880 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_24G);
882 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_24G_NOFORSCAN);
885 rtw_phy_set_tx_power_level(rtwdev, center_chan);
891 if (!test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
892 rtwdev->need_rfk = true;
895 void rtw_chip_prepare_tx(struct rtw_dev *rtwdev)
897 const struct rtw_chip_info *chip = rtwdev->chip;
899 if (rtwdev->need_rfk) {
900 rtwdev->need_rfk = false;
901 chip->ops->phy_calibration(rtwdev);
905 static void rtw_vif_write_addr(struct rtw_dev *rtwdev, u32 start, u8 *addr)
910 rtw_write8(rtwdev, start + i, addr[i]);
913 void rtw_vif_port_config(struct rtw_dev *rtwdev,
921 rtw_vif_write_addr(rtwdev, addr, rtwvif->mac_addr);
925 rtw_vif_write_addr(rtwdev, addr, rtwvif->bssid);
930 rtw_write32_mask(rtwdev, addr, mask, rtwvif->net_type);
935 rtw_write32_mask(rtwdev, addr, mask, rtwvif->aid);
940 rtw_write8_mask(rtwdev, addr, mask, rtwvif->bcn_ctrl);
964 static void rtw_hw_config_rf_ant_num(struct rtw_dev *rtwdev, u8 hw_ant_num)
966 const struct rtw_chip_info *chip = rtwdev->chip;
967 struct rtw_hal *hal = &rtwdev->hal;
1150 static u64 rtw_rate_mask_cfg(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
1153 struct rtw_hal *hal = &rtwdev->hal;
1192 void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
1195 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1197 struct rtw_efuse *efuse = &rtwdev->efuse;
1198 struct rtw_hal *hal = &rtwdev->hal;
1227 if (efuse->hw_cap.nss == 1 || rtwdev->hal.txrx_1ss)
1264 rtw_err(rtwdev, "Unknown band type\n");
1299 ra_mask = rtw_rate_mask_cfg(rtwdev, si, ra_mask, is_vht_enable);
1310 rtw_fw_send_ra_info(rtwdev, si, reset_ra_mask);
1313 static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
1315 const struct rtw_chip_info *chip = rtwdev->chip;
1318 fw = &rtwdev->fw;
1324 fw = &rtwdev->wow_fw;
1333 static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev,
1336 const struct rtw_chip_info *chip = rtwdev->chip;
1353 static int rtw_power_on(struct rtw_dev *rtwdev)
1355 const struct rtw_chip_info *chip = rtwdev->chip;
1356 struct rtw_fw_state *fw = &rtwdev->fw;
1360 ret = rtw_hci_setup(rtwdev);
1362 rtw_err(rtwdev, "failed to setup hci\n");
1367 ret = rtw_mac_power_on(rtwdev);
1369 rtw_err(rtwdev, "failed to power on mac\n");
1373 ret = rtw_wait_firmware_completion(rtwdev);
1375 rtw_err(rtwdev, "failed to wait firmware completion\n");
1379 ret = rtw_download_firmware(rtwdev, fw);
1381 rtw_err(rtwdev, "failed to download firmware\n");
1386 ret = rtw_mac_init(rtwdev);
1388 rtw_err(rtwdev, "failed to configure mac\n");
1392 chip->ops->phy_set_param(rtwdev);
1394 ret = rtw_hci_start(rtwdev);
1396 rtw_err(rtwdev, "failed to start hci\n");
1401 rtw_fw_send_general_info(rtwdev);
1402 rtw_fw_send_phydm_info(rtwdev);
1404 wifi_only = !rtwdev->efuse.btcoex;
1405 rtw_coex_power_on_setting(rtwdev);
1406 rtw_coex_init_hw_config(rtwdev, wifi_only);
1411 rtw_mac_power_off(rtwdev);
1417 void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start)
1419 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_NOTIFY_SCAN))
1423 rtw_fw_scan_notify(rtwdev, true);
1425 reinit_completion(&rtwdev->fw_scan_density);
1426 rtw_fw_scan_notify(rtwdev, false);
1427 if (!wait_for_completion_timeout(&rtwdev->fw_scan_density,
1429 rtw_warn(rtwdev, "firmware failed to report density after scan\n");
1433 void rtw_core_scan_start(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,
1439 rtw_leave_lps(rtwdev);
1441 if (hw_scan && (rtwdev->hw->conf.flags & IEEE80211_CONF_IDLE)) {
1442 ret = rtw_leave_ips(rtwdev);
1444 rtw_err(rtwdev, "failed to leave idle state\n");
1451 rtw_vif_port_config(rtwdev, rtwvif, config);
1453 rtw_coex_scan_notify(rtwdev, COEX_SCAN_START);
1454 rtw_core_fw_scan_notify(rtwdev, true);
1456 set_bit(RTW_FLAG_DIG_DISABLE, rtwdev->flags);
1457 set_bit(RTW_FLAG_SCANNING, rtwdev->flags);
1460 void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
1469 clear_bit(RTW_FLAG_SCANNING, rtwdev->flags);
1470 clear_bit(RTW_FLAG_DIG_DISABLE, rtwdev->flags);
1472 rtw_core_fw_scan_notify(rtwdev, false);
1476 rtw_vif_port_config(rtwdev, rtwvif, config);
1478 rtw_coex_scan_notify(rtwdev, COEX_SCAN_FINISH);
1480 if (hw_scan && (rtwdev->hw->conf.flags & IEEE80211_CONF_IDLE))
1481 ieee80211_queue_work(rtwdev->hw, &rtwdev->ips_work);
1484 int rtw_core_start(struct rtw_dev *rtwdev)
1488 ret = rtw_power_on(rtwdev);
1492 rtw_sec_enable_sec_engine(rtwdev);
1494 rtwdev->lps_conf.deep_mode = rtw_update_lps_deep_mode(rtwdev, &rtwdev->fw);
1495 rtwdev->lps_conf.wow_deep_mode = rtw_update_lps_deep_mode(rtwdev, &rtwdev->wow_fw);
1498 rtw_write32(rtwdev, REG_RCR, rtwdev->hal.rcr);
1500 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work,
1503 set_bit(RTW_FLAG_RUNNING, rtwdev->flags);
1508 static void rtw_power_off(struct rtw_dev *rtwdev)
1510 rtw_hci_stop(rtwdev);
1511 rtw_coex_power_off_setting(rtwdev);
1512 rtw_mac_power_off(rtwdev);
1515 void rtw_core_stop(struct rtw_dev *rtwdev)
1517 struct rtw_coex *coex = &rtwdev->coex;
1519 clear_bit(RTW_FLAG_RUNNING, rtwdev->flags);
1520 clear_bit(RTW_FLAG_FW_RUNNING, rtwdev->flags);
1522 mutex_unlock(&rtwdev->mutex);
1524 cancel_work_sync(&rtwdev->c2h_work);
1525 cancel_work_sync(&rtwdev->update_beacon_work);
1526 cancel_delayed_work_sync(&rtwdev->watch_dog_work);
1536 mutex_lock(&rtwdev->mutex);
1538 rtw_power_off(rtwdev);
1541 static void rtw_init_ht_cap(struct rtw_dev *rtwdev,
1544 const struct rtw_chip_info *chip = rtwdev->chip;
1545 struct rtw_efuse *efuse = &rtwdev->efuse;
1553 if (rtw_chip_has_rx_ldpc(rtwdev))
1555 if (rtw_chip_has_tx_stbc(rtwdev))
1578 static void rtw_init_vht_cap(struct rtw_dev *rtwdev,
1581 struct rtw_efuse *efuse = &rtwdev->efuse;
1596 if (rtwdev->hal.rf_path_num > 1)
1600 vht_cap->cap |= (rtwdev->hal.bfee_sts_cap <<
1603 if (rtw_chip_has_rx_ldpc(rtwdev))
1627 static u16 rtw_get_max_scan_ie_len(struct rtw_dev *rtwdev)
1631 len = rtwdev->chip->max_scan_ie_len;
1633 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_SCAN_OFFLOAD) &&
1634 rtwdev->chip->id == RTW_CHIP_TYPE_8822C)
1636 else if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM))
1645 struct rtw_dev *rtwdev = hw->priv;
1653 rtw_init_ht_cap(rtwdev, &sband->ht_cap);
1662 rtw_init_ht_cap(rtwdev, &sband->ht_cap);
1664 rtw_init_vht_cap(rtwdev, &sband->vht_cap);
1671 rtw_err(rtwdev, "failed to set supported band\n");
1684 struct rtw_dev *rtwdev = (struct rtw_dev *)data;
1689 if (rtwdev->hal.txrx_1ss)
1695 void rtw_set_txrx_1ss(struct rtw_dev *rtwdev, bool txrx_1ss)
1697 const struct rtw_chip_info *chip = rtwdev->chip;
1698 struct rtw_hal *hal = &rtwdev->hal;
1700 if (!chip->ops->config_txrx_mode || rtwdev->hal.txrx_1ss == txrx_1ss)
1703 rtwdev->hal.txrx_1ss = txrx_1ss;
1705 chip->ops->config_txrx_mode(rtwdev, BB_PATH_A, BB_PATH_A, false);
1707 chip->ops->config_txrx_mode(rtwdev, hal->antenna_tx,
1709 rtw_iterate_vifs_atomic(rtwdev, rtw_vif_smps_iter, rtwdev);
1712 static void __update_firmware_feature(struct rtw_dev *rtwdev,
1722 if (rtwdev->chip->id == RTW_CHIP_TYPE_8822C &&
1723 RTW_FW_SUIT_VER_CODE(rtwdev->fw) < RTW_FW_VER_CODE(9, 9, 13))
1727 static void __update_firmware_info(struct rtw_dev *rtwdev,
1738 __update_firmware_feature(rtwdev, fw);
1741 static void __update_firmware_info_legacy(struct rtw_dev *rtwdev,
1753 static void update_firmware_info(struct rtw_dev *rtwdev,
1756 if (rtw_chip_wcpu_11n(rtwdev))
1757 __update_firmware_info_legacy(rtwdev, fw);
1759 __update_firmware_info(rtwdev, fw);
1765 struct rtw_dev *rtwdev = fw->rtwdev;
1768 rtw_err(rtwdev, "failed to request firmware\n");
1774 update_firmware_info(rtwdev, fw);
1777 rtw_info(rtwdev, "%sFirmware version %u.%u.%u, H2C version %u\n",
1782 static int rtw_load_firmware(struct rtw_dev *rtwdev, enum rtw_fw_type type)
1790 fw = &rtwdev->wow_fw;
1791 fw_name = rtwdev->chip->wow_fw_name;
1795 fw = &rtwdev->fw;
1796 fw_name = rtwdev->chip->fw_name;
1800 rtw_warn(rtwdev, "unsupported firmware type\n");
1805 fw->rtwdev = rtwdev;
1808 ret = request_firmware_nowait(THIS_MODULE, true, fw_name, rtwdev->dev,
1811 rtw_err(rtwdev, "failed to async firmware request\n");
1818 static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev)
1820 const struct rtw_chip_info *chip = rtwdev->chip;
1821 struct rtw_hal *hal = &rtwdev->hal;
1822 struct rtw_efuse *efuse = &rtwdev->efuse;
1824 switch (rtw_hci_type(rtwdev)) {
1826 rtwdev->hci.rpwm_addr = 0x03d9;
1827 rtwdev->hci.cpwm_addr = 0x03da;
1830 rtwdev->hci.rpwm_addr = REG_SDIO_HRPWM1;
1831 rtwdev->hci.cpwm_addr = REG_SDIO_HCPWM1_V2;
1834 rtwdev->hci.rpwm_addr = 0xfe58;
1835 rtwdev->hci.cpwm_addr = 0xfe57;
1838 rtw_err(rtwdev, "unsupported hci type\n");
1842 hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1);
1864 rtwdev->hal.rcr |= BIT_VHT_DACK;
1871 static int rtw_chip_efuse_enable(struct rtw_dev *rtwdev)
1873 struct rtw_fw_state *fw = &rtwdev->fw;
1876 ret = rtw_hci_setup(rtwdev);
1878 rtw_err(rtwdev, "failed to setup hci\n");
1882 ret = rtw_mac_power_on(rtwdev);
1884 rtw_err(rtwdev, "failed to power on mac\n");
1888 rtw_write8(rtwdev, REG_C2HEVT, C2H_HW_FEATURE_DUMP);
1893 rtw_err(rtwdev, "failed to load firmware\n");
1897 ret = rtw_download_firmware(rtwdev, fw);
1899 rtw_err(rtwdev, "failed to download firmware\n");
1906 rtw_mac_power_off(rtwdev);
1912 static int rtw_dump_hw_feature(struct rtw_dev *rtwdev)
1914 struct rtw_efuse *efuse = &rtwdev->efuse;
1920 id = rtw_read8(rtwdev, REG_C2HEVT);
1922 rtw_err(rtwdev, "failed to read hw feature report\n");
1927 hw_feature[i] = rtw_read8(rtwdev, REG_C2HEVT + 2 + i);
1929 rtw_write8(rtwdev, REG_C2HEVT, 0);
1938 rtw_hw_config_rf_ant_num(rtwdev, efuse->hw_cap.ant_num);
1941 efuse->hw_cap.nss > rtwdev->hal.rf_path_num)
1942 efuse->hw_cap.nss = rtwdev->hal.rf_path_num;
1944 rtw_dbg(rtwdev, RTW_DBG_EFUSE,
1952 static void rtw_chip_efuse_disable(struct rtw_dev *rtwdev)
1954 rtw_hci_stop(rtwdev);
1955 rtw_mac_power_off(rtwdev);
1958 static int rtw_chip_efuse_info_setup(struct rtw_dev *rtwdev)
1960 struct rtw_efuse *efuse = &rtwdev->efuse;
1963 mutex_lock(&rtwdev->mutex);
1966 ret = rtw_chip_efuse_enable(rtwdev);
1970 ret = rtw_parse_efuse_map(rtwdev);
1974 ret = rtw_dump_hw_feature(rtwdev);
1978 ret = rtw_check_supported_rfe(rtwdev);
2012 rtw_chip_efuse_disable(rtwdev);
2015 mutex_unlock(&rtwdev->mutex);
2019 static int rtw_chip_board_info_setup(struct rtw_dev *rtwdev)
2021 struct rtw_hal *hal = &rtwdev->hal;
2022 const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev);
2027 rtw_phy_setup_phy_cond(rtwdev, hal->pkg_type);
2029 rtw_phy_init_tx_power(rtwdev);
2030 rtw_load_table(rtwdev, rfe_def->phy_pg_tbl);
2031 rtw_load_table(rtwdev, rfe_def->txpwr_lmt_tbl);
2038 int rtw_chip_info_setup(struct rtw_dev *rtwdev)
2042 ret = rtw_chip_parameter_setup(rtwdev);
2044 rtw_err(rtwdev, "failed to setup chip parameters\n");
2048 ret = rtw_chip_efuse_info_setup(rtwdev);
2050 rtw_err(rtwdev, "failed to setup chip efuse info\n");
2054 ret = rtw_chip_board_info_setup(rtwdev);
2056 rtw_err(rtwdev, "failed to setup chip board info\n");
2067 static void rtw_stats_init(struct rtw_dev *rtwdev)
2069 struct rtw_traffic_stats *stats = &rtwdev->stats;
2070 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
2082 int rtw_core_init(struct rtw_dev *rtwdev)
2084 const struct rtw_chip_info *chip = rtwdev->chip;
2085 struct rtw_coex *coex = &rtwdev->coex;
2088 INIT_LIST_HEAD(&rtwdev->rsvd_page_list);
2089 INIT_LIST_HEAD(&rtwdev->txqs);
2091 timer_setup(&rtwdev->tx_report.purge_timer,
2093 rtwdev->tx_wq = alloc_workqueue("rtw_tx_wq", WQ_UNBOUND | WQ_HIGHPRI, 0);
2094 if (!rtwdev->tx_wq) {
2095 rtw_warn(rtwdev, "alloc_workqueue rtw_tx_wq failed\n");
2099 INIT_DELAYED_WORK(&rtwdev->watch_dog_work, rtw_watch_dog_work);
2109 INIT_WORK(&rtwdev->tx_work, rtw_tx_work);
2110 INIT_WORK(&rtwdev->c2h_work, rtw_c2h_work);
2111 INIT_WORK(&rtwdev->ips_work, rtw_ips_work);
2112 INIT_WORK(&rtwdev->fw_recovery_work, rtw_fw_recovery_work);
2113 INIT_WORK(&rtwdev->update_beacon_work, rtw_fw_update_beacon_work);
2114 INIT_WORK(&rtwdev->ba_work, rtw_txq_ba_work);
2115 skb_queue_head_init(&rtwdev->c2h_queue);
2116 skb_queue_head_init(&rtwdev->coex.queue);
2117 skb_queue_head_init(&rtwdev->tx_report.queue);
2119 spin_lock_init(&rtwdev->txq_lock);
2120 spin_lock_init(&rtwdev->tx_report.q_lock);
2122 mutex_init(&rtwdev->mutex);
2123 mutex_init(&rtwdev->hal.tx_power_mutex);
2125 init_waitqueue_head(&rtwdev->coex.wait);
2126 init_completion(&rtwdev->lps_leave_check);
2127 init_completion(&rtwdev->fw_scan_density);
2129 rtwdev->sec.total_cam_num = 32;
2130 rtwdev->hal.current_channel = 1;
2131 rtwdev->dm_info.fix_rate = U8_MAX;
2132 set_bit(RTW_BC_MC_MACID, rtwdev->mac_id_map);
2134 rtw_stats_init(rtwdev);
2137 rtwdev->hal.rcr = BIT_APP_FCS | BIT_APP_MIC | BIT_APP_ICV |
2141 ret = rtw_load_firmware(rtwdev, RTW_NORMAL_FW);
2143 rtw_warn(rtwdev, "no firmware loaded\n");
2148 ret = rtw_load_firmware(rtwdev, RTW_WOWLAN_FW);
2150 rtw_warn(rtwdev, "no wow firmware loaded\n");
2151 wait_for_completion(&rtwdev->fw.completion);
2152 if (rtwdev->fw.firmware)
2153 release_firmware(rtwdev->fw.firmware);
2161 destroy_workqueue(rtwdev->tx_wq);
2166 void rtw_core_deinit(struct rtw_dev *rtwdev)
2168 struct rtw_fw_state *fw = &rtwdev->fw;
2169 struct rtw_fw_state *wow_fw = &rtwdev->wow_fw;
2173 rtw_wait_firmware_completion(rtwdev);
2181 destroy_workqueue(rtwdev->tx_wq);
2182 timer_delete_sync(&rtwdev->tx_report.purge_timer);
2183 spin_lock_irqsave(&rtwdev->tx_report.q_lock, flags);
2184 skb_queue_purge(&rtwdev->tx_report.queue);
2185 spin_unlock_irqrestore(&rtwdev->tx_report.q_lock, flags);
2186 skb_queue_purge(&rtwdev->coex.queue);
2187 skb_queue_purge(&rtwdev->c2h_queue);
2189 list_for_each_entry_safe(rsvd_pkt, tmp, &rtwdev->rsvd_page_list,
2195 mutex_destroy(&rtwdev->mutex);
2196 mutex_destroy(&rtwdev->hal.tx_power_mutex);
2200 int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)
2202 struct rtw_hal *hal = &rtwdev->hal;
2206 max_tx_headroom = rtwdev->chip->tx_pkt_desc_sz;
2208 if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_SDIO)
2242 hw->wiphy->max_scan_ie_len = rtw_get_max_scan_ie_len(rtwdev);
2244 if (rtwdev->chip->id == RTW_CHIP_TYPE_8822C) {
2254 hw->wiphy->wowlan = rtwdev->chip->wowlan_stub;
2255 hw->wiphy->max_sched_scan_ssids = rtwdev->chip->max_sched_scan_ssids;
2257 rtw_set_supported_band(hw, rtwdev->chip);
2258 SET_IEEE80211_PERM_ADDR(hw, rtwdev->efuse.addr);
2262 ret = rtw_regd_init(rtwdev);
2264 rtw_err(rtwdev, "failed to init regd\n");
2270 rtw_err(rtwdev, "failed to register hw\n");
2274 ret = rtw_regd_hint(rtwdev);
2276 rtw_err(rtwdev, "failed to hint regd\n");
2280 rtw_debugfs_init(rtwdev);
2282 rtwdev->bf_info.bfer_mu_cnt = 0;
2283 rtwdev->bf_info.bfer_su_cnt = 0;
2289 void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)
2291 const struct rtw_chip_info *chip = rtwdev->chip;
2299 void rtw_swap_reg_nbytes(struct rtw_dev *rtwdev, const struct rtw_hw_reg *reg1,
2305 u8 v1 = rtw_read8(rtwdev, reg1->addr + i);
2306 u8 v2 = rtw_read8(rtwdev, reg2->addr + i);
2308 rtw_write8(rtwdev, reg1->addr + i, v2);
2309 rtw_write8(rtwdev, reg2->addr + i, v1);
2314 void rtw_swap_reg_mask(struct rtw_dev *rtwdev, const struct rtw_hw_reg *reg1,
2319 v1 = rtw_read32_mask(rtwdev, reg1->addr, reg1->mask);
2320 v2 = rtw_read32_mask(rtwdev, reg2->addr, reg2->mask);
2321 rtw_write32_mask(rtwdev, reg2->addr, reg2->mask, v1);
2322 rtw_write32_mask(rtwdev, reg1->addr, reg1->mask, v2);
2326 struct rtw_dev *rtwdev;
2333 struct rtw_dev *rtwdev = iter_data->rtwdev;
2341 rtw_dbg(rtwdev, RTW_DBG_STATE, "AP port switch from %d -> %d\n",
2345 rtw_leave_lps(rtwdev);
2349 rtw_swap_reg_mask(rtwdev, reg1, reg2);
2353 rtw_swap_reg_nbytes(rtwdev, reg1, reg2, ETH_ALEN);
2357 rtw_swap_reg_nbytes(rtwdev, reg1, reg2, ETH_ALEN);
2361 rtw_swap_reg_nbytes(rtwdev, reg1, reg2, 1);
2366 rtw_fw_default_port(rtwdev, rtwvif_target);
2369 void rtw_core_port_switch(struct rtw_dev *rtwdev, struct ieee80211_vif *vif)
2377 iter_data.rtwdev = rtwdev;
2379 rtw_iterate_vifs(rtwdev, rtw_port_switch_iter, &iter_data);
2397 bool rtw_core_check_sta_active(struct rtw_dev *rtwdev)
2401 rtw_iterate_vifs(rtwdev, rtw_check_sta_active_iter, &sta_active);
2403 return rtwdev->ap_active || sta_active;
2406 void rtw_core_enable_beacon(struct rtw_dev *rtwdev, bool enable)
2408 if (!rtwdev->ap_active)
2412 rtw_write32_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION);
2413 rtw_write32_clr(rtwdev, REG_TXPAUSE, BIT_HIGH_QUEUE);
2415 rtw_write32_clr(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION);
2416 rtw_write32_set(rtwdev, REG_TXPAUSE, BIT_HIGH_QUEUE);