Lines Matching refs:rtwdev
181 struct rtw_dev *rtwdev;
185 static void rtw_dynamic_csi_rate(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif)
187 struct rtw_bf_info *bf_info = &rtwdev->bf_info;
195 rtw_chip_cfg_csi_rate(rtwdev, rtwdev->dm_info.min_rssi,
212 rtw_dynamic_csi_rate(iter_data->rtwdev, rtwvif);
220 static void rtw_sw_beacon_loss_check(struct rtw_dev *rtwdev,
226 if (rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_BCN_FILTER) || !rtwvif)
232 rtwdev->beacon_loss = received_beacons < expected_beacons / 2;
240 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev,
242 struct rtw_traffic_stats *stats = &rtwdev->stats;
244 bool busy_traffic = test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
245 int received_beacons = rtwdev->dm_info.cur_pkt_count.num_bcn_pkt;
249 mutex_lock(&rtwdev->mutex);
251 if (!test_bit(RTW_FLAG_RUNNING, rtwdev->flags))
254 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work,
257 if (rtwdev->stats.tx_cnt > 100 || rtwdev->stats.rx_cnt > 100)
258 set_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
260 clear_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags);
262 if (busy_traffic != test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags))
263 rtw_coex_wl_status_change_notify(rtwdev, 0);
285 if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
289 rtw_leave_lps(rtwdev);
290 rtw_coex_wl_status_check(rtwdev);
291 rtw_coex_query_bt_hid_list(rtwdev);
292 rtw_coex_active_query_bt_info(rtwdev);
294 rtw_phy_dynamic_mechanism(rtwdev);
296 rtw_hci_dynamic_rx_agg(rtwdev,
299 data.rtwdev = rtwdev;
303 rtw_iterate_vifs(rtwdev, rtw_vif_watch_dog_iter, &data);
305 rtw_sw_beacon_loss_check(rtwdev, data.rtwvif, received_beacons);
316 if (rtwdev->ps_enabled && data.rtwvif && !ps_active &&
317 !rtwdev->beacon_loss && !rtwdev->ap_active)
318 rtw_enter_lps(rtwdev, data.rtwvif->port);
320 rtwdev->watch_dog_cnt++;
323 mutex_unlock(&rtwdev->mutex);
328 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, c2h_work);
331 skb_queue_walk_safe(&rtwdev->c2h_queue, skb, tmp) {
332 skb_unlink(skb, &rtwdev->c2h_queue);
333 rtw_fw_c2h_cmd_handle(rtwdev, skb);
340 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, ips_work);
342 mutex_lock(&rtwdev->mutex);
343 if (rtwdev->hw->conf.flags & IEEE80211_CONF_IDLE)
344 rtw_enter_ips(rtwdev);
345 mutex_unlock(&rtwdev->mutex);
352 struct rtw_dev *rtwdev = si->rtwdev;
354 mutex_lock(&rtwdev->mutex);
355 rtw_update_sta_info(rtwdev, si, true);
356 mutex_unlock(&rtwdev->mutex);
359 int rtw_sta_add(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
369 si->mac_id = rtw_acquire_macid(rtwdev);
374 si->rtwdev = rtwdev;
380 rtw_txq_init(rtwdev, sta->txq[i]);
383 rtw_update_sta_info(rtwdev, si, true);
384 rtw_fw_media_status_report(rtwdev, si->mac_id, true);
386 rtwdev->sta_cnt++;
387 rtwdev->beacon_loss = false;
389 rtw_dbg(rtwdev, RTW_DBG_STATE, "sta %pM joined with macid %d\n",
392 rtw_dbg(rtwdev, RTW_DBG_STATE, "sta %6D joined with macid %d\n",
399 void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta,
409 rtw_release_macid(rtwdev, si->mac_id);
411 rtw_fw_media_status_report(rtwdev, si->mac_id, false);
414 rtw_txq_cleanup(rtwdev, sta->txq[i]);
418 rtwdev->sta_cnt--;
420 rtw_dbg(rtwdev, RTW_DBG_STATE, "sta %pM with macid %d left\n",
423 rtw_dbg(rtwdev, RTW_DBG_STATE, "sta %6D with macid %d left\n",
435 static int rtw_fwcd_prep(struct rtw_dev *rtwdev)
437 const struct rtw_chip_info *chip = rtwdev->chip;
438 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc;
460 static u8 *rtw_fwcd_next(struct rtw_dev *rtwdev, u32 item, u32 size)
462 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc;
467 rtw_dbg(rtwdev, RTW_DBG_FW, "fwcd isn't prepared successfully\n");
473 rtw_dbg(rtwdev, RTW_DBG_FW, "fwcd isn't prepared enough\n");
487 static void rtw_fwcd_dump(struct rtw_dev *rtwdev)
489 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc;
491 rtw_dbg(rtwdev, RTW_DBG_FW, "dump fwcd\n");
498 dev_coredumpv(rtwdev->dev, desc->data, desc->size, GFP_KERNEL);
501 static void rtw_fwcd_free(struct rtw_dev *rtwdev, bool free_self)
503 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc;
506 rtw_dbg(rtwdev, RTW_DBG_FW, "free fwcd by self\n");
514 static int rtw_fw_dump_crash_log(struct rtw_dev *rtwdev)
516 u32 size = rtwdev->chip->fw_rxff_size;
520 buf = (u32 *)rtw_fwcd_next(rtwdev, RTW_FWCD_TLV, size);
524 if (rtw_fw_dump_fifo(rtwdev, RTW_FW_FIFO_SEL_RXBUF_FW, 0, size, buf)) {
525 rtw_dbg(rtwdev, RTW_DBG_FW, "dump fw fifo fail\n");
530 rtw_dbg(rtwdev, RTW_DBG_FW, "fw crash dump's length is 0\n");
536 rtw_dbg(rtwdev, RTW_DBG_FW,
544 int rtw_dump_fw(struct rtw_dev *rtwdev, const u32 ocp_src, u32 size,
547 u32 rxff = rtwdev->chip->fw_rxff_size;
552 buf = rtw_fwcd_next(rtwdev, fwcd_item, size);
559 ret = rtw_ddma_to_fw_fifo(rtwdev, ocp_src + done_size,
562 rtw_err(rtwdev,
568 ret = rtw_fw_dump_fifo(rtwdev, RTW_FW_FIFO_SEL_RXBUF_FW, 0,
571 rtw_err(rtwdev,
585 int rtw_dump_reg(struct rtw_dev *rtwdev, const u32 addr, const u32 size)
595 buf = rtw_fwcd_next(rtwdev, RTW_FWCD_REG, size);
600 *(u32 *)(buf + i) = rtw_read32(rtwdev, addr + i);
629 struct rtw_dev *rtwdev = (struct rtw_dev *)data;
630 struct rtw_sec_desc *sec = &rtwdev->sec;
632 rtw_sec_clear_cam(rtwdev, sec, key->hw_key_idx);
637 struct rtw_dev *rtwdev = (struct rtw_dev *)data;
639 if (rtwdev->sta_cnt == 0) {
640 rtw_warn(rtwdev, "sta count before reset should not be 0\n");
643 rtw_sta_remove(rtwdev, sta, false);
648 struct rtw_dev *rtwdev = (struct rtw_dev *)data;
651 rtw_bf_disassoc(rtwdev, vif, NULL);
653 rtw_txq_cleanup(rtwdev, vif->txq);
655 rtw_release_macid(rtwdev, rtwvif->mac_id);
658 void rtw_fw_recovery(struct rtw_dev *rtwdev)
660 if (!test_bit(RTW_FLAG_RESTARTING, rtwdev->flags))
661 ieee80211_queue_work(rtwdev->hw, &rtwdev->fw_recovery_work);
664 static void __fw_recovery_work(struct rtw_dev *rtwdev)
668 set_bit(RTW_FLAG_RESTARTING, rtwdev->flags);
669 clear_bit(RTW_FLAG_RESTART_TRIGGERING, rtwdev->flags);
671 ret = rtw_fwcd_prep(rtwdev);
674 ret = rtw_fw_dump_crash_log(rtwdev);
677 ret = rtw_chip_dump_fw_crash(rtwdev);
681 rtw_fwcd_dump(rtwdev);
683 rtw_fwcd_free(rtwdev, !!ret);
684 rtw_write8(rtwdev, REG_MCU_TST_CFG, 0);
689 rtw_iterate_keys_rcu(rtwdev, NULL, rtw_reset_key_iter, rtwdev);
691 rtw_iterate_stas_atomic(rtwdev, rtw_reset_sta_iter, rtwdev);
692 rtw_iterate_vifs_atomic(rtwdev, rtw_reset_vif_iter, rtwdev);
693 bitmap_zero(rtwdev->hw_port, RTW_PORT_NUM);
694 rtw_enter_ips(rtwdev);
699 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev,
702 mutex_lock(&rtwdev->mutex);
703 __fw_recovery_work(rtwdev);
704 mutex_unlock(&rtwdev->mutex);
706 ieee80211_restart_hw(rtwdev->hw);
737 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, ba_work);
740 rtw_iterate_stas_atomic(rtwdev, rtw_txq_ba_iter, &data);
756 void rtw_set_dtim_period(struct rtw_dev *rtwdev, int dtim_period)
758 rtw_write32_set(rtwdev, REG_TCR, BIT_TCR_UPDATE_TIMIE);
759 rtw_write8(rtwdev, REG_DTIM_COUNTER_ROOT, dtim_period - 1);
762 void rtw_update_channel(struct rtw_dev *rtwdev, u8 center_channel,
767 struct rtw_hal *hal = &rtwdev->hal;
894 void rtw_set_channel(struct rtw_dev *rtwdev)
896 const struct rtw_chip_info *chip = rtwdev->chip;
897 struct ieee80211_hw *hw = rtwdev->hw;
898 struct rtw_hal *hal = &rtwdev->hal;
911 rtw_update_channel(rtwdev, center_chan, primary_chan, band, bandwidth);
913 if (rtwdev->scan_info.op_chan)
914 rtw_store_op_chan(rtwdev, true);
916 chip->ops->set_channel(rtwdev, center_chan, bandwidth,
920 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_5G);
922 if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
923 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_24G);
925 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_24G_NOFORSCAN);
928 rtw_phy_set_tx_power_level(rtwdev, center_chan);
934 if (!test_bit(RTW_FLAG_SCANNING, rtwdev->flags))
935 rtwdev->need_rfk = true;
938 void rtw_chip_prepare_tx(struct rtw_dev *rtwdev)
940 const struct rtw_chip_info *chip = rtwdev->chip;
942 if (rtwdev->need_rfk) {
943 rtwdev->need_rfk = false;
944 chip->ops->phy_calibration(rtwdev);
948 static void rtw_vif_write_addr(struct rtw_dev *rtwdev, u32 start, u8 *addr)
953 rtw_write8(rtwdev, start + i, addr[i]);
956 void rtw_vif_port_config(struct rtw_dev *rtwdev,
964 rtw_vif_write_addr(rtwdev, addr, rtwvif->mac_addr);
968 rtw_vif_write_addr(rtwdev, addr, rtwvif->bssid);
973 rtw_write32_mask(rtwdev, addr, mask, rtwvif->net_type);
978 rtw_write32_mask(rtwdev, addr, mask, rtwvif->aid);
983 rtw_write8_mask(rtwdev, addr, mask, rtwvif->bcn_ctrl);
1007 static void rtw_hw_config_rf_ant_num(struct rtw_dev *rtwdev, u8 hw_ant_num)
1009 const struct rtw_chip_info *chip = rtwdev->chip;
1010 struct rtw_hal *hal = &rtwdev->hal;
1193 static u64 rtw_rate_mask_cfg(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
1196 struct rtw_hal *hal = &rtwdev->hal;
1235 void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si,
1238 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
1240 struct rtw_efuse *efuse = &rtwdev->efuse;
1241 struct rtw_hal *hal = &rtwdev->hal;
1269 if (efuse->hw_cap.nss == 1 || rtwdev->hal.txrx_1ss)
1310 rtw_err(rtwdev, "Unknown band type\n");
1342 ra_mask = rtw_rate_mask_cfg(rtwdev, si, ra_mask, is_vht_enable);
1352 rtw_fw_send_ra_info(rtwdev, si, reset_ra_mask);
1355 int rtw_wait_firmware_completion(struct rtw_dev *rtwdev)
1357 const struct rtw_chip_info *chip = rtwdev->chip;
1361 fw = &rtwdev->fw;
1367 fw = &rtwdev->wow_fw;
1377 static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev,
1380 const struct rtw_chip_info *chip = rtwdev->chip;
1397 int rtw_power_on(struct rtw_dev *rtwdev)
1399 const struct rtw_chip_info *chip = rtwdev->chip;
1400 struct rtw_fw_state *fw = &rtwdev->fw;
1404 ret = rtw_hci_setup(rtwdev);
1406 rtw_err(rtwdev, "failed to setup hci\n");
1411 ret = rtw_mac_power_on(rtwdev);
1413 rtw_err(rtwdev, "failed to power on mac\n");
1417 ret = rtw_wait_firmware_completion(rtwdev);
1419 rtw_err(rtwdev, "failed to wait firmware completion\n");
1423 ret = rtw_download_firmware(rtwdev, fw);
1425 rtw_err(rtwdev, "failed to download firmware\n");
1430 ret = rtw_mac_init(rtwdev);
1432 rtw_err(rtwdev, "failed to configure mac\n");
1436 chip->ops->phy_set_param(rtwdev);
1438 ret = rtw_hci_start(rtwdev);
1440 rtw_err(rtwdev, "failed to start hci\n");
1445 rtw_fw_send_general_info(rtwdev);
1446 rtw_fw_send_phydm_info(rtwdev);
1448 wifi_only = !rtwdev->efuse.btcoex;
1449 rtw_coex_power_on_setting(rtwdev);
1450 rtw_coex_init_hw_config(rtwdev, wifi_only);
1455 rtw_mac_power_off(rtwdev);
1462 void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start)
1464 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_NOTIFY_SCAN))
1468 rtw_fw_scan_notify(rtwdev, true);
1470 reinit_completion(&rtwdev->fw_scan_density);
1471 rtw_fw_scan_notify(rtwdev, false);
1472 if (!wait_for_completion_timeout(&rtwdev->fw_scan_density,
1474 rtw_warn(rtwdev, "firmware failed to report density after scan\n");
1478 void rtw_core_scan_start(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif,
1484 rtw_leave_lps(rtwdev);
1486 if (hw_scan && (rtwdev->hw->conf.flags & IEEE80211_CONF_IDLE)) {
1487 ret = rtw_leave_ips(rtwdev);
1489 rtw_err(rtwdev, "failed to leave idle state\n");
1496 rtw_vif_port_config(rtwdev, rtwvif, config);
1498 rtw_coex_scan_notify(rtwdev, COEX_SCAN_START);
1499 rtw_core_fw_scan_notify(rtwdev, true);
1501 set_bit(RTW_FLAG_DIG_DISABLE, rtwdev->flags);
1502 set_bit(RTW_FLAG_SCANNING, rtwdev->flags);
1505 void rtw_core_scan_complete(struct rtw_dev *rtwdev, struct ieee80211_vif *vif,
1514 clear_bit(RTW_FLAG_SCANNING, rtwdev->flags);
1515 clear_bit(RTW_FLAG_DIG_DISABLE, rtwdev->flags);
1517 rtw_core_fw_scan_notify(rtwdev, false);
1521 rtw_vif_port_config(rtwdev, rtwvif, config);
1523 rtw_coex_scan_notify(rtwdev, COEX_SCAN_FINISH);
1525 if (hw_scan && (rtwdev->hw->conf.flags & IEEE80211_CONF_IDLE))
1526 ieee80211_queue_work(rtwdev->hw, &rtwdev->ips_work);
1529 int rtw_core_start(struct rtw_dev *rtwdev)
1533 ret = rtwdev->chip->ops->power_on(rtwdev);
1537 rtw_sec_enable_sec_engine(rtwdev);
1539 rtwdev->lps_conf.deep_mode = rtw_update_lps_deep_mode(rtwdev, &rtwdev->fw);
1540 rtwdev->lps_conf.wow_deep_mode = rtw_update_lps_deep_mode(rtwdev, &rtwdev->wow_fw);
1543 rtw_write32(rtwdev, REG_RCR, rtwdev->hal.rcr);
1545 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work,
1548 set_bit(RTW_FLAG_RUNNING, rtwdev->flags);
1553 void rtw_power_off(struct rtw_dev *rtwdev)
1555 rtw_hci_stop(rtwdev);
1556 rtw_coex_power_off_setting(rtwdev);
1557 rtw_mac_power_off(rtwdev);
1561 void rtw_core_stop(struct rtw_dev *rtwdev)
1563 struct rtw_coex *coex = &rtwdev->coex;
1565 clear_bit(RTW_FLAG_RUNNING, rtwdev->flags);
1566 clear_bit(RTW_FLAG_FW_RUNNING, rtwdev->flags);
1568 mutex_unlock(&rtwdev->mutex);
1570 cancel_work_sync(&rtwdev->c2h_work);
1571 cancel_work_sync(&rtwdev->update_beacon_work);
1572 cancel_delayed_work_sync(&rtwdev->watch_dog_work);
1582 mutex_lock(&rtwdev->mutex);
1584 rtwdev->chip->ops->power_off(rtwdev);
1587 static void rtw_init_ht_cap(struct rtw_dev *rtwdev,
1590 const struct rtw_chip_info *chip = rtwdev->chip;
1591 struct rtw_efuse *efuse = &rtwdev->efuse;
1599 if (rtw_chip_has_rx_ldpc(rtwdev))
1601 if (rtw_chip_has_tx_stbc(rtwdev))
1624 static void rtw_init_vht_cap(struct rtw_dev *rtwdev,
1627 struct rtw_efuse *efuse = &rtwdev->efuse;
1642 if (rtwdev->hal.rf_path_num > 1)
1646 vht_cap->cap |= (rtwdev->hal.bfee_sts_cap <<
1649 if (rtw_chip_has_rx_ldpc(rtwdev))
1673 static u16 rtw_get_max_scan_ie_len(struct rtw_dev *rtwdev)
1677 len = rtwdev->chip->max_scan_ie_len;
1679 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_SCAN_OFFLOAD) &&
1680 rtwdev->chip->id == RTW_CHIP_TYPE_8822C)
1682 else if (rtw_fw_feature_ext_check(&rtwdev->fw, FW_FEATURE_EXT_OLD_PAGE_NUM))
1691 struct rtw_dev *rtwdev = hw->priv;
1703 rtw_init_ht_cap(rtwdev, &sband->ht_cap);
1716 rtw_init_ht_cap(rtwdev, &sband->ht_cap);
1722 rtw_init_vht_cap(rtwdev, &sband->vht_cap);
1729 rtw_err(rtwdev, "failed to set supported band\n");
1742 struct rtw_dev *rtwdev = (struct rtw_dev *)data;
1747 if (rtwdev->hal.txrx_1ss)
1753 void rtw_set_txrx_1ss(struct rtw_dev *rtwdev, bool txrx_1ss)
1755 const struct rtw_chip_info *chip = rtwdev->chip;
1756 struct rtw_hal *hal = &rtwdev->hal;
1758 if (!chip->ops->config_txrx_mode || rtwdev->hal.txrx_1ss == txrx_1ss)
1761 rtwdev->hal.txrx_1ss = txrx_1ss;
1763 chip->ops->config_txrx_mode(rtwdev, BB_PATH_A, BB_PATH_A, false);
1765 chip->ops->config_txrx_mode(rtwdev, hal->antenna_tx,
1767 rtw_iterate_vifs_atomic(rtwdev, rtw_vif_smps_iter, rtwdev);
1770 static void __update_firmware_feature(struct rtw_dev *rtwdev,
1780 if (rtwdev->chip->id == RTW_CHIP_TYPE_8822C &&
1781 RTW_FW_SUIT_VER_CODE(rtwdev->fw) < RTW_FW_VER_CODE(9, 9, 13))
1785 static void __update_firmware_info(struct rtw_dev *rtwdev,
1796 __update_firmware_feature(rtwdev, fw);
1799 static void __update_firmware_info_legacy(struct rtw_dev *rtwdev,
1815 static void update_firmware_info(struct rtw_dev *rtwdev,
1818 if (rtw_chip_wcpu_11n(rtwdev))
1819 __update_firmware_info_legacy(rtwdev, fw);
1821 __update_firmware_info(rtwdev, fw);
1827 struct rtw_dev *rtwdev = fw->rtwdev;
1830 rtw_err(rtwdev, "failed to request firmware\n");
1836 update_firmware_info(rtwdev, fw);
1839 rtw_info(rtwdev, "%sFirmware version %u.%u.%u, H2C version %u\n",
1844 static int rtw_load_firmware(struct rtw_dev *rtwdev, enum rtw_fw_type type)
1852 fw = &rtwdev->wow_fw;
1853 fw_name = rtwdev->chip->wow_fw_name;
1857 fw = &rtwdev->fw;
1858 fw_name = rtwdev->chip->fw_name;
1862 rtw_warn(rtwdev, "unsupported firmware type\n");
1867 fw->rtwdev = rtwdev;
1870 ret = request_firmware_nowait(THIS_MODULE, true, fw_name, rtwdev->dev,
1873 rtw_err(rtwdev, "failed to async firmware request\n");
1880 static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev)
1882 const struct rtw_chip_info *chip = rtwdev->chip;
1883 struct rtw_hal *hal = &rtwdev->hal;
1884 struct rtw_efuse *efuse = &rtwdev->efuse;
1886 switch (rtw_hci_type(rtwdev)) {
1888 rtwdev->hci.rpwm_addr = 0x03d9;
1889 rtwdev->hci.cpwm_addr = 0x03da;
1892 rtwdev->hci.rpwm_addr = REG_SDIO_HRPWM1;
1893 rtwdev->hci.cpwm_addr = REG_SDIO_HCPWM1_V2;
1896 rtwdev->hci.rpwm_addr = 0xfe58;
1897 rtwdev->hci.cpwm_addr = 0xfe57;
1900 rtw_err(rtwdev, "unsupported hci type\n");
1904 hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1);
1926 rtwdev->hal.rcr |= BIT_VHT_DACK;
1933 static int rtw_chip_efuse_enable(struct rtw_dev *rtwdev)
1935 struct rtw_fw_state *fw = &rtwdev->fw;
1938 ret = rtw_hci_setup(rtwdev);
1940 rtw_err(rtwdev, "failed to setup hci\n");
1944 ret = rtw_mac_power_on(rtwdev);
1946 rtw_err(rtwdev, "failed to power on mac\n");
1950 rtw_write8(rtwdev, REG_C2HEVT, C2H_HW_FEATURE_DUMP);
1955 rtw_err(rtwdev, "failed to load firmware\n");
1959 ret = rtw_download_firmware(rtwdev, fw);
1961 rtw_err(rtwdev, "failed to download firmware\n");
1968 rtw_mac_power_off(rtwdev);
1974 static int rtw_dump_hw_feature(struct rtw_dev *rtwdev)
1976 struct rtw_efuse *efuse = &rtwdev->efuse;
1982 if (!rtwdev->chip->hw_feature_report)
1985 id = rtw_read8(rtwdev, REG_C2HEVT);
1987 rtw_err(rtwdev, "failed to read hw feature report\n");
1992 hw_feature[i] = rtw_read8(rtwdev, REG_C2HEVT + 2 + i);
1994 rtw_write8(rtwdev, REG_C2HEVT, 0);
2003 rtw_hw_config_rf_ant_num(rtwdev, efuse->hw_cap.ant_num);
2006 efuse->hw_cap.nss > rtwdev->hal.rf_path_num)
2007 efuse->hw_cap.nss = rtwdev->hal.rf_path_num;
2009 rtw_dbg(rtwdev, RTW_DBG_EFUSE,
2017 static void rtw_chip_efuse_disable(struct rtw_dev *rtwdev)
2019 rtw_hci_stop(rtwdev);
2020 rtw_mac_power_off(rtwdev);
2023 static int rtw_chip_efuse_info_setup(struct rtw_dev *rtwdev)
2025 struct rtw_efuse *efuse = &rtwdev->efuse;
2028 mutex_lock(&rtwdev->mutex);
2031 ret = rtw_chip_efuse_enable(rtwdev);
2035 ret = rtw_parse_efuse_map(rtwdev);
2039 ret = rtw_dump_hw_feature(rtwdev);
2043 ret = rtw_check_supported_rfe(rtwdev);
2078 dev_warn(rtwdev->dev, "efuse MAC invalid, using random\n");
2082 rtw_chip_efuse_disable(rtwdev);
2085 mutex_unlock(&rtwdev->mutex);
2089 static int rtw_chip_board_info_setup(struct rtw_dev *rtwdev)
2091 struct rtw_hal *hal = &rtwdev->hal;
2092 const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev);
2097 rtw_phy_setup_phy_cond(rtwdev, hal->pkg_type);
2099 rtw_phy_init_tx_power(rtwdev);
2100 rtw_load_table(rtwdev, rfe_def->phy_pg_tbl);
2101 rtw_load_table(rtwdev, rfe_def->txpwr_lmt_tbl);
2108 int rtw_chip_info_setup(struct rtw_dev *rtwdev)
2112 ret = rtw_chip_parameter_setup(rtwdev);
2114 rtw_err(rtwdev, "failed to setup chip parameters\n");
2118 ret = rtw_chip_efuse_info_setup(rtwdev);
2120 rtw_err(rtwdev, "failed to setup chip efuse info\n");
2124 ret = rtw_chip_board_info_setup(rtwdev);
2126 rtw_err(rtwdev, "failed to setup chip board info\n");
2137 static void rtw_stats_init(struct rtw_dev *rtwdev)
2139 struct rtw_traffic_stats *stats = &rtwdev->stats;
2140 struct rtw_dm_info *dm_info = &rtwdev->dm_info;
2152 int rtw_core_init(struct rtw_dev *rtwdev)
2154 const struct rtw_chip_info *chip = rtwdev->chip;
2155 struct rtw_coex *coex = &rtwdev->coex;
2158 INIT_LIST_HEAD(&rtwdev->rsvd_page_list);
2159 INIT_LIST_HEAD(&rtwdev->txqs);
2161 timer_setup(&rtwdev->tx_report.purge_timer,
2163 rtwdev->tx_wq = alloc_workqueue("rtw_tx_wq", WQ_UNBOUND | WQ_HIGHPRI, 0);
2164 if (!rtwdev->tx_wq) {
2165 rtw_warn(rtwdev, "alloc_workqueue rtw_tx_wq failed\n");
2169 INIT_DELAYED_WORK(&rtwdev->watch_dog_work, rtw_watch_dog_work);
2179 INIT_WORK(&rtwdev->tx_work, rtw_tx_work);
2180 INIT_WORK(&rtwdev->c2h_work, rtw_c2h_work);
2181 INIT_WORK(&rtwdev->ips_work, rtw_ips_work);
2182 INIT_WORK(&rtwdev->fw_recovery_work, rtw_fw_recovery_work);
2183 INIT_WORK(&rtwdev->update_beacon_work, rtw_fw_update_beacon_work);
2184 INIT_WORK(&rtwdev->ba_work, rtw_txq_ba_work);
2185 skb_queue_head_init(&rtwdev->c2h_queue);
2186 skb_queue_head_init(&rtwdev->coex.queue);
2187 skb_queue_head_init(&rtwdev->tx_report.queue);
2189 spin_lock_init(&rtwdev->txq_lock);
2190 spin_lock_init(&rtwdev->tx_report.q_lock);
2192 mutex_init(&rtwdev->mutex);
2193 mutex_init(&rtwdev->hal.tx_power_mutex);
2195 init_waitqueue_head(&rtwdev->coex.wait);
2196 init_completion(&rtwdev->lps_leave_check);
2197 init_completion(&rtwdev->fw_scan_density);
2199 rtwdev->sec.total_cam_num = 32;
2200 rtwdev->hal.current_channel = 1;
2201 rtwdev->dm_info.fix_rate = U8_MAX;
2203 rtw_stats_init(rtwdev);
2206 rtwdev->hal.rcr = BIT_APP_FCS | BIT_APP_MIC | BIT_APP_ICV |
2210 ret = rtw_load_firmware(rtwdev, RTW_NORMAL_FW);
2212 rtw_warn(rtwdev, "no firmware loaded\n");
2217 ret = rtw_load_firmware(rtwdev, RTW_WOWLAN_FW);
2219 rtw_warn(rtwdev, "no wow firmware loaded\n");
2220 wait_for_completion(&rtwdev->fw.completion);
2221 if (rtwdev->fw.firmware)
2222 release_firmware(rtwdev->fw.firmware);
2228 rtw_wait_firmware_completion(rtwdev);
2234 destroy_workqueue(rtwdev->tx_wq);
2239 void rtw_core_deinit(struct rtw_dev *rtwdev)
2241 struct rtw_fw_state *fw = &rtwdev->fw;
2242 struct rtw_fw_state *wow_fw = &rtwdev->wow_fw;
2246 rtw_wait_firmware_completion(rtwdev);
2254 destroy_workqueue(rtwdev->tx_wq);
2255 timer_delete_sync(&rtwdev->tx_report.purge_timer);
2256 spin_lock_irqsave(&rtwdev->tx_report.q_lock, flags);
2257 skb_queue_purge(&rtwdev->tx_report.queue);
2258 spin_unlock_irqrestore(&rtwdev->tx_report.q_lock, flags);
2259 skb_queue_purge(&rtwdev->coex.queue);
2260 skb_queue_purge(&rtwdev->c2h_queue);
2262 list_for_each_entry_safe(rsvd_pkt, tmp, &rtwdev->rsvd_page_list,
2268 mutex_destroy(&rtwdev->mutex);
2269 mutex_destroy(&rtwdev->hal.tx_power_mutex);
2273 int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)
2275 bool sta_mode_only = rtwdev->hci.type == RTW_HCI_TYPE_SDIO;
2276 struct rtw_hal *hal = &rtwdev->hal;
2280 max_tx_headroom = rtwdev->chip->tx_pkt_desc_sz;
2282 if (rtw_hci_type(rtwdev) == RTW_HCI_TYPE_SDIO)
2318 hw->wiphy->max_scan_ie_len = rtw_get_max_scan_ie_len(rtwdev);
2320 if (!sta_mode_only && rtwdev->chip->id == RTW_CHIP_TYPE_8822C) {
2330 hw->wiphy->wowlan = rtwdev->chip->wowlan_stub;
2331 hw->wiphy->max_sched_scan_ssids = rtwdev->chip->max_sched_scan_ssids;
2333 rtw_set_supported_band(hw, rtwdev->chip);
2334 SET_IEEE80211_PERM_ADDR(hw, rtwdev->efuse.addr);
2338 ret = rtw_regd_init(rtwdev);
2340 rtw_err(rtwdev, "failed to init regd\n");
2344 rtw_led_init(rtwdev);
2348 rtw_err(rtwdev, "failed to register hw\n");
2352 ret = rtw_regd_hint(rtwdev);
2354 rtw_err(rtwdev, "failed to hint regd\n");
2358 rtw_debugfs_init(rtwdev);
2360 rtwdev->bf_info.bfer_mu_cnt = 0;
2361 rtwdev->bf_info.bfer_su_cnt = 0;
2366 rtw_led_deinit(rtwdev);
2371 void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw)
2373 const struct rtw_chip_info *chip = rtwdev->chip;
2377 rtw_debugfs_deinit(rtwdev);
2378 rtw_led_deinit(rtwdev);
2383 void rtw_swap_reg_nbytes(struct rtw_dev *rtwdev, const struct rtw_hw_reg *reg1,
2389 u8 v1 = rtw_read8(rtwdev, reg1->addr + i);
2390 u8 v2 = rtw_read8(rtwdev, reg2->addr + i);
2392 rtw_write8(rtwdev, reg1->addr + i, v2);
2393 rtw_write8(rtwdev, reg2->addr + i, v1);
2398 void rtw_swap_reg_mask(struct rtw_dev *rtwdev, const struct rtw_hw_reg *reg1,
2403 v1 = rtw_read32_mask(rtwdev, reg1->addr, reg1->mask);
2404 v2 = rtw_read32_mask(rtwdev, reg2->addr, reg2->mask);
2405 rtw_write32_mask(rtwdev, reg2->addr, reg2->mask, v1);
2406 rtw_write32_mask(rtwdev, reg1->addr, reg1->mask, v2);
2410 struct rtw_dev *rtwdev;
2417 struct rtw_dev *rtwdev = iter_data->rtwdev;
2425 rtw_dbg(rtwdev, RTW_DBG_STATE, "AP port switch from %d -> %d\n",
2429 rtw_leave_lps(rtwdev);
2433 rtw_swap_reg_mask(rtwdev, reg1, reg2);
2437 rtw_swap_reg_nbytes(rtwdev, reg1, reg2, ETH_ALEN);
2441 rtw_swap_reg_nbytes(rtwdev, reg1, reg2, ETH_ALEN);
2445 rtw_swap_reg_nbytes(rtwdev, reg1, reg2, 1);
2450 rtw_fw_default_port(rtwdev, rtwvif_target);
2453 void rtw_core_port_switch(struct rtw_dev *rtwdev, struct ieee80211_vif *vif)
2461 iter_data.rtwdev = rtwdev;
2463 rtw_iterate_vifs(rtwdev, rtw_port_switch_iter, &iter_data);
2481 bool rtw_core_check_sta_active(struct rtw_dev *rtwdev)
2485 rtw_iterate_vifs(rtwdev, rtw_check_sta_active_iter, &sta_active);
2487 return rtwdev->ap_active || sta_active;
2490 void rtw_core_enable_beacon(struct rtw_dev *rtwdev, bool enable)
2492 if (!rtwdev->ap_active)
2496 rtw_write32_set(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION);
2497 rtw_write32_clr(rtwdev, REG_TXPAUSE, BIT_HIGH_QUEUE);
2499 rtw_write32_clr(rtwdev, REG_BCN_CTRL, BIT_EN_BCN_FUNCTION);
2500 rtw_write32_set(rtwdev, REG_TXPAUSE, BIT_HIGH_QUEUE);