Lines Matching refs:rtwdev
136 struct rtw_dev *rtwdev; member
140 static void rtw_dynamic_csi_rate(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif) in rtw_dynamic_csi_rate() argument
142 struct rtw_bf_info *bf_info = &rtwdev->bf_info; in rtw_dynamic_csi_rate()
150 rtw_chip_cfg_csi_rate(rtwdev, rtwdev->dm_info.min_rssi, in rtw_dynamic_csi_rate()
168 rtw_dynamic_csi_rate(iter_data->rtwdev, rtwvif); in rtw_vif_watch_dog_iter()
181 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, in rtw_watch_dog_work() local
183 struct rtw_traffic_stats *stats = &rtwdev->stats; in rtw_watch_dog_work()
185 bool busy_traffic = test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags); in rtw_watch_dog_work()
188 mutex_lock(&rtwdev->mutex); in rtw_watch_dog_work()
190 if (!test_bit(RTW_FLAG_RUNNING, rtwdev->flags)) in rtw_watch_dog_work()
193 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work, in rtw_watch_dog_work()
196 if (rtwdev->stats.tx_cnt > 100 || rtwdev->stats.rx_cnt > 100) in rtw_watch_dog_work()
197 set_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags); in rtw_watch_dog_work()
199 clear_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags); in rtw_watch_dog_work()
201 if (busy_traffic != test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags)) in rtw_watch_dog_work()
202 rtw_coex_wl_status_change_notify(rtwdev, 0); in rtw_watch_dog_work()
223 if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) in rtw_watch_dog_work()
227 rtw_leave_lps(rtwdev); in rtw_watch_dog_work()
229 rtw_phy_dynamic_mechanism(rtwdev); in rtw_watch_dog_work()
231 data.rtwdev = rtwdev; in rtw_watch_dog_work()
233 rtw_iterate_vifs_atomic(rtwdev, rtw_vif_watch_dog_iter, &data); in rtw_watch_dog_work()
244 if (rtwdev->ps_enabled && data.rtwvif && !ps_active && in rtw_watch_dog_work()
245 !rtwdev->beacon_loss) in rtw_watch_dog_work()
246 rtw_enter_lps(rtwdev, data.rtwvif->port); in rtw_watch_dog_work()
248 rtwdev->watch_dog_cnt++; in rtw_watch_dog_work()
251 mutex_unlock(&rtwdev->mutex); in rtw_watch_dog_work()
256 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, c2h_work); in rtw_c2h_work() local
259 skb_queue_walk_safe(&rtwdev->c2h_queue, skb, tmp) { in rtw_c2h_work()
260 skb_unlink(skb, &rtwdev->c2h_queue); in rtw_c2h_work()
261 rtw_fw_c2h_cmd_handle(rtwdev, skb); in rtw_c2h_work()
266 static u8 rtw_acquire_macid(struct rtw_dev *rtwdev) in rtw_acquire_macid() argument
270 mac_id = find_first_zero_bit(rtwdev->mac_id_map, RTW_MAX_MAC_ID_NUM); in rtw_acquire_macid()
272 set_bit(mac_id, rtwdev->mac_id_map); in rtw_acquire_macid()
277 int rtw_sta_add(struct rtw_dev *rtwdev, struct ieee80211_sta *sta, in rtw_sta_add() argument
283 si->mac_id = rtw_acquire_macid(rtwdev); in rtw_sta_add()
292 rtw_txq_init(rtwdev, sta->txq[i]); in rtw_sta_add()
294 rtw_update_sta_info(rtwdev, si); in rtw_sta_add()
295 rtw_fw_media_status_report(rtwdev, si->mac_id, true); in rtw_sta_add()
297 rtwdev->sta_cnt++; in rtw_sta_add()
298 rtwdev->beacon_loss = false; in rtw_sta_add()
299 rtw_info(rtwdev, "sta %pM joined with macid %d\n", in rtw_sta_add()
305 void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta, in rtw_sta_remove() argument
311 rtw_release_macid(rtwdev, si->mac_id); in rtw_sta_remove()
313 rtw_fw_media_status_report(rtwdev, si->mac_id, false); in rtw_sta_remove()
316 rtw_txq_cleanup(rtwdev, sta->txq[i]); in rtw_sta_remove()
320 rtwdev->sta_cnt--; in rtw_sta_remove()
321 rtw_info(rtwdev, "sta %pM with macid %d left\n", in rtw_sta_remove()
332 static int rtw_fwcd_prep(struct rtw_dev *rtwdev) in rtw_fwcd_prep() argument
334 struct rtw_chip_info *chip = rtwdev->chip; in rtw_fwcd_prep()
335 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc; in rtw_fwcd_prep()
357 static u8 *rtw_fwcd_next(struct rtw_dev *rtwdev, u32 item, u32 size) in rtw_fwcd_next() argument
359 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc; in rtw_fwcd_next()
364 rtw_dbg(rtwdev, RTW_DBG_FW, "fwcd isn't prepared successfully\n"); in rtw_fwcd_next()
370 rtw_dbg(rtwdev, RTW_DBG_FW, "fwcd isn't prepared enough\n"); in rtw_fwcd_next()
384 static void rtw_fwcd_dump(struct rtw_dev *rtwdev) in rtw_fwcd_dump() argument
386 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc; in rtw_fwcd_dump()
388 rtw_dbg(rtwdev, RTW_DBG_FW, "dump fwcd\n"); in rtw_fwcd_dump()
395 dev_coredumpv(rtwdev->dev, desc->data, desc->size, GFP_KERNEL); in rtw_fwcd_dump()
398 static void rtw_fwcd_free(struct rtw_dev *rtwdev, bool free_self) in rtw_fwcd_free() argument
400 struct rtw_fwcd_desc *desc = &rtwdev->fw.fwcd_desc; in rtw_fwcd_free()
403 rtw_dbg(rtwdev, RTW_DBG_FW, "free fwcd by self\n"); in rtw_fwcd_free()
411 static int rtw_fw_dump_crash_log(struct rtw_dev *rtwdev) in rtw_fw_dump_crash_log() argument
413 u32 size = rtwdev->chip->fw_rxff_size; in rtw_fw_dump_crash_log()
417 buf = (u32 *)rtw_fwcd_next(rtwdev, RTW_FWCD_TLV, size); in rtw_fw_dump_crash_log()
421 if (rtw_fw_dump_fifo(rtwdev, RTW_FW_FIFO_SEL_RXBUF_FW, 0, size, buf)) { in rtw_fw_dump_crash_log()
422 rtw_dbg(rtwdev, RTW_DBG_FW, "dump fw fifo fail\n"); in rtw_fw_dump_crash_log()
427 rtw_dbg(rtwdev, RTW_DBG_FW, "fw crash dump's length is 0\n"); in rtw_fw_dump_crash_log()
433 rtw_dbg(rtwdev, RTW_DBG_FW, in rtw_fw_dump_crash_log()
441 int rtw_dump_fw(struct rtw_dev *rtwdev, const u32 ocp_src, u32 size, in rtw_dump_fw() argument
444 u32 rxff = rtwdev->chip->fw_rxff_size; in rtw_dump_fw()
449 buf = rtw_fwcd_next(rtwdev, fwcd_item, size); in rtw_dump_fw()
456 ret = rtw_ddma_to_fw_fifo(rtwdev, ocp_src + done_size, in rtw_dump_fw()
459 rtw_err(rtwdev, in rtw_dump_fw()
465 ret = rtw_fw_dump_fifo(rtwdev, RTW_FW_FIFO_SEL_RXBUF_FW, 0, in rtw_dump_fw()
468 rtw_err(rtwdev, in rtw_dump_fw()
482 int rtw_dump_reg(struct rtw_dev *rtwdev, const u32 addr, const u32 size) in rtw_dump_reg() argument
492 buf = rtw_fwcd_next(rtwdev, RTW_FWCD_REG, size); in rtw_dump_reg()
497 *(u32 *)(buf + i) = rtw_read32(rtwdev, addr + i); in rtw_dump_reg()
521 struct rtw_dev *rtwdev = (struct rtw_dev *)data; in rtw_reset_key_iter() local
522 struct rtw_sec_desc *sec = &rtwdev->sec; in rtw_reset_key_iter()
524 rtw_sec_clear_cam(rtwdev, sec, key->hw_key_idx); in rtw_reset_key_iter()
529 struct rtw_dev *rtwdev = (struct rtw_dev *)data; in rtw_reset_sta_iter() local
531 if (rtwdev->sta_cnt == 0) { in rtw_reset_sta_iter()
532 rtw_warn(rtwdev, "sta count before reset should not be 0\n"); in rtw_reset_sta_iter()
535 rtw_sta_remove(rtwdev, sta, false); in rtw_reset_sta_iter()
540 struct rtw_dev *rtwdev = (struct rtw_dev *)data; in rtw_reset_vif_iter() local
543 rtw_bf_disassoc(rtwdev, vif, NULL); in rtw_reset_vif_iter()
545 rtw_txq_cleanup(rtwdev, vif->txq); in rtw_reset_vif_iter()
548 void rtw_fw_recovery(struct rtw_dev *rtwdev) in rtw_fw_recovery() argument
550 if (!test_bit(RTW_FLAG_RESTARTING, rtwdev->flags)) in rtw_fw_recovery()
551 ieee80211_queue_work(rtwdev->hw, &rtwdev->fw_recovery_work); in rtw_fw_recovery()
554 static void __fw_recovery_work(struct rtw_dev *rtwdev) in __fw_recovery_work() argument
558 set_bit(RTW_FLAG_RESTARTING, rtwdev->flags); in __fw_recovery_work()
560 ret = rtw_fwcd_prep(rtwdev); in __fw_recovery_work()
563 ret = rtw_fw_dump_crash_log(rtwdev); in __fw_recovery_work()
566 ret = rtw_chip_dump_fw_crash(rtwdev); in __fw_recovery_work()
570 rtw_fwcd_dump(rtwdev); in __fw_recovery_work()
572 rtw_fwcd_free(rtwdev, !!ret); in __fw_recovery_work()
573 rtw_write8(rtwdev, REG_MCU_TST_CFG, 0); in __fw_recovery_work()
578 rtw_iterate_keys_rcu(rtwdev, NULL, rtw_reset_key_iter, rtwdev); in __fw_recovery_work()
580 rtw_iterate_stas_atomic(rtwdev, rtw_reset_sta_iter, rtwdev); in __fw_recovery_work()
581 rtw_iterate_vifs_atomic(rtwdev, rtw_reset_vif_iter, rtwdev); in __fw_recovery_work()
582 rtw_enter_ips(rtwdev); in __fw_recovery_work()
587 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, in rtw_fw_recovery_work() local
590 mutex_lock(&rtwdev->mutex); in rtw_fw_recovery_work()
591 __fw_recovery_work(rtwdev); in rtw_fw_recovery_work()
592 mutex_unlock(&rtwdev->mutex); in rtw_fw_recovery_work()
594 ieee80211_restart_hw(rtwdev->hw); in rtw_fw_recovery_work()
625 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, ba_work); in rtw_txq_ba_work() local
628 rtw_iterate_stas_atomic(rtwdev, rtw_txq_ba_iter, &data); in rtw_txq_ba_work()
710 void rtw_set_channel(struct rtw_dev *rtwdev) in rtw_set_channel() argument
712 struct ieee80211_hw *hw = rtwdev->hw; in rtw_set_channel()
713 struct rtw_hal *hal = &rtwdev->hal; in rtw_set_channel()
714 struct rtw_chip_info *chip = rtwdev->chip; in rtw_set_channel()
734 chip->ops->set_channel(rtwdev, center_chan, bandwidth, primary_chan_idx); in rtw_set_channel()
737 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_5G); in rtw_set_channel()
739 if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) in rtw_set_channel()
740 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_24G); in rtw_set_channel()
742 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_24G_NOFORSCAN); in rtw_set_channel()
745 rtw_phy_set_tx_power_level(rtwdev, center_chan); in rtw_set_channel()
751 if (!test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) in rtw_set_channel()
752 rtwdev->need_rfk = true; in rtw_set_channel()
755 void rtw_chip_prepare_tx(struct rtw_dev *rtwdev) in rtw_chip_prepare_tx() argument
757 struct rtw_chip_info *chip = rtwdev->chip; in rtw_chip_prepare_tx()
759 if (rtwdev->need_rfk) { in rtw_chip_prepare_tx()
760 rtwdev->need_rfk = false; in rtw_chip_prepare_tx()
761 chip->ops->phy_calibration(rtwdev); in rtw_chip_prepare_tx()
765 static void rtw_vif_write_addr(struct rtw_dev *rtwdev, u32 start, u8 *addr) in rtw_vif_write_addr() argument
770 rtw_write8(rtwdev, start + i, addr[i]); in rtw_vif_write_addr()
773 void rtw_vif_port_config(struct rtw_dev *rtwdev, in rtw_vif_port_config() argument
781 rtw_vif_write_addr(rtwdev, addr, rtwvif->mac_addr); in rtw_vif_port_config()
785 rtw_vif_write_addr(rtwdev, addr, rtwvif->bssid); in rtw_vif_port_config()
790 rtw_write32_mask(rtwdev, addr, mask, rtwvif->net_type); in rtw_vif_port_config()
795 rtw_write32_mask(rtwdev, addr, mask, rtwvif->aid); in rtw_vif_port_config()
800 rtw_write8_mask(rtwdev, addr, mask, rtwvif->bcn_ctrl); in rtw_vif_port_config()
824 static void rtw_hw_config_rf_ant_num(struct rtw_dev *rtwdev, u8 hw_ant_num) in rtw_hw_config_rf_ant_num() argument
826 struct rtw_hal *hal = &rtwdev->hal; in rtw_hw_config_rf_ant_num()
827 struct rtw_chip_info *chip = rtwdev->chip; in rtw_hw_config_rf_ant_num()
977 static u64 rtw_update_rate_mask(struct rtw_dev *rtwdev, in rtw_update_rate_mask() argument
982 struct rtw_hal *hal = &rtwdev->hal; in rtw_update_rate_mask()
1037 void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) in rtw_update_sta_info() argument
1039 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_update_sta_info()
1041 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_update_sta_info()
1042 struct rtw_hal *hal = &rtwdev->hal; in rtw_update_sta_info()
1104 rtw_err(rtwdev, "Unknown band type\n"); in rtw_update_sta_info()
1136 ra_mask = rtw_update_rate_mask(rtwdev, si, ra_mask, is_vht_enable, in rtw_update_sta_info()
1149 rtw_fw_send_ra_info(rtwdev, si); in rtw_update_sta_info()
1152 static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev) in rtw_wait_firmware_completion() argument
1154 struct rtw_chip_info *chip = rtwdev->chip; in rtw_wait_firmware_completion()
1157 fw = &rtwdev->fw; in rtw_wait_firmware_completion()
1163 fw = &rtwdev->wow_fw; in rtw_wait_firmware_completion()
1172 static enum rtw_lps_deep_mode rtw_update_lps_deep_mode(struct rtw_dev *rtwdev, in rtw_update_lps_deep_mode() argument
1175 struct rtw_chip_info *chip = rtwdev->chip; in rtw_update_lps_deep_mode()
1192 static int rtw_power_on(struct rtw_dev *rtwdev) in rtw_power_on() argument
1194 struct rtw_chip_info *chip = rtwdev->chip; in rtw_power_on()
1195 struct rtw_fw_state *fw = &rtwdev->fw; in rtw_power_on()
1199 ret = rtw_hci_setup(rtwdev); in rtw_power_on()
1201 rtw_err(rtwdev, "failed to setup hci\n"); in rtw_power_on()
1206 ret = rtw_mac_power_on(rtwdev); in rtw_power_on()
1208 rtw_err(rtwdev, "failed to power on mac\n"); in rtw_power_on()
1212 ret = rtw_wait_firmware_completion(rtwdev); in rtw_power_on()
1214 rtw_err(rtwdev, "failed to wait firmware completion\n"); in rtw_power_on()
1218 ret = rtw_download_firmware(rtwdev, fw); in rtw_power_on()
1220 rtw_err(rtwdev, "failed to download firmware\n"); in rtw_power_on()
1225 ret = rtw_mac_init(rtwdev); in rtw_power_on()
1227 rtw_err(rtwdev, "failed to configure mac\n"); in rtw_power_on()
1231 chip->ops->phy_set_param(rtwdev); in rtw_power_on()
1233 ret = rtw_hci_start(rtwdev); in rtw_power_on()
1235 rtw_err(rtwdev, "failed to start hci\n"); in rtw_power_on()
1240 rtw_fw_send_general_info(rtwdev); in rtw_power_on()
1241 rtw_fw_send_phydm_info(rtwdev); in rtw_power_on()
1243 wifi_only = !rtwdev->efuse.btcoex; in rtw_power_on()
1244 rtw_coex_power_on_setting(rtwdev); in rtw_power_on()
1245 rtw_coex_init_hw_config(rtwdev, wifi_only); in rtw_power_on()
1250 rtw_mac_power_off(rtwdev); in rtw_power_on()
1256 void rtw_core_fw_scan_notify(struct rtw_dev *rtwdev, bool start) in rtw_core_fw_scan_notify() argument
1258 if (!rtw_fw_feature_check(&rtwdev->fw, FW_FEATURE_NOTIFY_SCAN)) in rtw_core_fw_scan_notify()
1262 rtw_fw_scan_notify(rtwdev, true); in rtw_core_fw_scan_notify()
1264 reinit_completion(&rtwdev->fw_scan_density); in rtw_core_fw_scan_notify()
1265 rtw_fw_scan_notify(rtwdev, false); in rtw_core_fw_scan_notify()
1266 if (!wait_for_completion_timeout(&rtwdev->fw_scan_density, in rtw_core_fw_scan_notify()
1268 rtw_warn(rtwdev, "firmware failed to report density after scan\n"); in rtw_core_fw_scan_notify()
1272 int rtw_core_start(struct rtw_dev *rtwdev) in rtw_core_start() argument
1276 ret = rtw_power_on(rtwdev); in rtw_core_start()
1280 rtw_sec_enable_sec_engine(rtwdev); in rtw_core_start()
1282 rtwdev->lps_conf.deep_mode = rtw_update_lps_deep_mode(rtwdev, &rtwdev->fw); in rtw_core_start()
1283 rtwdev->lps_conf.wow_deep_mode = rtw_update_lps_deep_mode(rtwdev, &rtwdev->wow_fw); in rtw_core_start()
1286 rtw_write32(rtwdev, REG_RCR, rtwdev->hal.rcr); in rtw_core_start()
1288 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work, in rtw_core_start()
1291 set_bit(RTW_FLAG_RUNNING, rtwdev->flags); in rtw_core_start()
1296 static void rtw_power_off(struct rtw_dev *rtwdev) in rtw_power_off() argument
1298 rtw_hci_stop(rtwdev); in rtw_power_off()
1299 rtw_coex_power_off_setting(rtwdev); in rtw_power_off()
1300 rtw_mac_power_off(rtwdev); in rtw_power_off()
1303 void rtw_core_stop(struct rtw_dev *rtwdev) in rtw_core_stop() argument
1305 struct rtw_coex *coex = &rtwdev->coex; in rtw_core_stop()
1307 clear_bit(RTW_FLAG_RUNNING, rtwdev->flags); in rtw_core_stop()
1308 clear_bit(RTW_FLAG_FW_RUNNING, rtwdev->flags); in rtw_core_stop()
1310 mutex_unlock(&rtwdev->mutex); in rtw_core_stop()
1312 cancel_work_sync(&rtwdev->c2h_work); in rtw_core_stop()
1313 cancel_delayed_work_sync(&rtwdev->watch_dog_work); in rtw_core_stop()
1323 mutex_lock(&rtwdev->mutex); in rtw_core_stop()
1325 rtw_power_off(rtwdev); in rtw_core_stop()
1328 static void rtw_init_ht_cap(struct rtw_dev *rtwdev, in rtw_init_ht_cap() argument
1331 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_init_ht_cap()
1339 if (rtw_chip_has_rx_ldpc(rtwdev)) in rtw_init_ht_cap()
1341 if (rtw_chip_has_tx_stbc(rtwdev)) in rtw_init_ht_cap()
1364 static void rtw_init_vht_cap(struct rtw_dev *rtwdev, in rtw_init_vht_cap() argument
1367 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_init_vht_cap()
1382 if (rtwdev->hal.rf_path_num > 1) in rtw_init_vht_cap()
1386 vht_cap->cap |= (rtwdev->hal.bfee_sts_cap << in rtw_init_vht_cap()
1389 if (rtw_chip_has_rx_ldpc(rtwdev)) in rtw_init_vht_cap()
1416 struct rtw_dev *rtwdev = hw->priv; in rtw_set_supported_band() local
1424 rtw_init_ht_cap(rtwdev, &sband->ht_cap); in rtw_set_supported_band()
1433 rtw_init_ht_cap(rtwdev, &sband->ht_cap); in rtw_set_supported_band()
1435 rtw_init_vht_cap(rtwdev, &sband->vht_cap); in rtw_set_supported_band()
1442 rtw_err(rtwdev, "failed to set supported band\n"); in rtw_set_supported_band()
1452 static void __update_firmware_feature(struct rtw_dev *rtwdev, in __update_firmware_feature() argument
1463 static void __update_firmware_info(struct rtw_dev *rtwdev, in __update_firmware_info() argument
1474 __update_firmware_feature(rtwdev, fw); in __update_firmware_info()
1477 static void __update_firmware_info_legacy(struct rtw_dev *rtwdev, in __update_firmware_info_legacy() argument
1489 static void update_firmware_info(struct rtw_dev *rtwdev, in update_firmware_info() argument
1492 if (rtw_chip_wcpu_11n(rtwdev)) in update_firmware_info()
1493 __update_firmware_info_legacy(rtwdev, fw); in update_firmware_info()
1495 __update_firmware_info(rtwdev, fw); in update_firmware_info()
1501 struct rtw_dev *rtwdev = fw->rtwdev; in rtw_load_firmware_cb() local
1504 rtw_err(rtwdev, "failed to request firmware\n"); in rtw_load_firmware_cb()
1510 update_firmware_info(rtwdev, fw); in rtw_load_firmware_cb()
1513 rtw_info(rtwdev, "Firmware version %u.%u.%u, H2C version %u\n", in rtw_load_firmware_cb()
1517 static int rtw_load_firmware(struct rtw_dev *rtwdev, enum rtw_fw_type type) in rtw_load_firmware() argument
1525 fw = &rtwdev->wow_fw; in rtw_load_firmware()
1526 fw_name = rtwdev->chip->wow_fw_name; in rtw_load_firmware()
1530 fw = &rtwdev->fw; in rtw_load_firmware()
1531 fw_name = rtwdev->chip->fw_name; in rtw_load_firmware()
1535 rtw_warn(rtwdev, "unsupported firmware type\n"); in rtw_load_firmware()
1539 fw->rtwdev = rtwdev; in rtw_load_firmware()
1542 ret = request_firmware_nowait(THIS_MODULE, true, fw_name, rtwdev->dev, in rtw_load_firmware()
1545 rtw_err(rtwdev, "failed to async firmware request\n"); in rtw_load_firmware()
1552 static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) in rtw_chip_parameter_setup() argument
1554 struct rtw_chip_info *chip = rtwdev->chip; in rtw_chip_parameter_setup()
1555 struct rtw_hal *hal = &rtwdev->hal; in rtw_chip_parameter_setup()
1556 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_chip_parameter_setup()
1558 switch (rtw_hci_type(rtwdev)) { in rtw_chip_parameter_setup()
1560 rtwdev->hci.rpwm_addr = 0x03d9; in rtw_chip_parameter_setup()
1561 rtwdev->hci.cpwm_addr = 0x03da; in rtw_chip_parameter_setup()
1564 rtw_err(rtwdev, "unsupported hci type\n"); in rtw_chip_parameter_setup()
1568 hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); in rtw_chip_parameter_setup()
1590 rtwdev->hal.rcr |= BIT_VHT_DACK; in rtw_chip_parameter_setup()
1597 static int rtw_chip_efuse_enable(struct rtw_dev *rtwdev) in rtw_chip_efuse_enable() argument
1599 struct rtw_fw_state *fw = &rtwdev->fw; in rtw_chip_efuse_enable()
1602 ret = rtw_hci_setup(rtwdev); in rtw_chip_efuse_enable()
1604 rtw_err(rtwdev, "failed to setup hci\n"); in rtw_chip_efuse_enable()
1608 ret = rtw_mac_power_on(rtwdev); in rtw_chip_efuse_enable()
1610 rtw_err(rtwdev, "failed to power on mac\n"); in rtw_chip_efuse_enable()
1614 rtw_write8(rtwdev, REG_C2HEVT, C2H_HW_FEATURE_DUMP); in rtw_chip_efuse_enable()
1619 rtw_err(rtwdev, "failed to load firmware\n"); in rtw_chip_efuse_enable()
1623 ret = rtw_download_firmware(rtwdev, fw); in rtw_chip_efuse_enable()
1625 rtw_err(rtwdev, "failed to download firmware\n"); in rtw_chip_efuse_enable()
1632 rtw_mac_power_off(rtwdev); in rtw_chip_efuse_enable()
1638 static int rtw_dump_hw_feature(struct rtw_dev *rtwdev) in rtw_dump_hw_feature() argument
1640 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_dump_hw_feature()
1646 id = rtw_read8(rtwdev, REG_C2HEVT); in rtw_dump_hw_feature()
1648 rtw_err(rtwdev, "failed to read hw feature report\n"); in rtw_dump_hw_feature()
1653 hw_feature[i] = rtw_read8(rtwdev, REG_C2HEVT + 2 + i); in rtw_dump_hw_feature()
1655 rtw_write8(rtwdev, REG_C2HEVT, 0); in rtw_dump_hw_feature()
1664 rtw_hw_config_rf_ant_num(rtwdev, efuse->hw_cap.ant_num); in rtw_dump_hw_feature()
1667 efuse->hw_cap.nss > rtwdev->hal.rf_path_num) in rtw_dump_hw_feature()
1668 efuse->hw_cap.nss = rtwdev->hal.rf_path_num; in rtw_dump_hw_feature()
1670 rtw_dbg(rtwdev, RTW_DBG_EFUSE, in rtw_dump_hw_feature()
1678 static void rtw_chip_efuse_disable(struct rtw_dev *rtwdev) in rtw_chip_efuse_disable() argument
1680 rtw_hci_stop(rtwdev); in rtw_chip_efuse_disable()
1681 rtw_mac_power_off(rtwdev); in rtw_chip_efuse_disable()
1684 static int rtw_chip_efuse_info_setup(struct rtw_dev *rtwdev) in rtw_chip_efuse_info_setup() argument
1686 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_chip_efuse_info_setup()
1689 mutex_lock(&rtwdev->mutex); in rtw_chip_efuse_info_setup()
1692 ret = rtw_chip_efuse_enable(rtwdev); in rtw_chip_efuse_info_setup()
1696 ret = rtw_parse_efuse_map(rtwdev); in rtw_chip_efuse_info_setup()
1700 ret = rtw_dump_hw_feature(rtwdev); in rtw_chip_efuse_info_setup()
1704 ret = rtw_check_supported_rfe(rtwdev); in rtw_chip_efuse_info_setup()
1738 rtw_chip_efuse_disable(rtwdev); in rtw_chip_efuse_info_setup()
1741 mutex_unlock(&rtwdev->mutex); in rtw_chip_efuse_info_setup()
1745 static int rtw_chip_board_info_setup(struct rtw_dev *rtwdev) in rtw_chip_board_info_setup() argument
1747 struct rtw_hal *hal = &rtwdev->hal; in rtw_chip_board_info_setup()
1748 const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev); in rtw_chip_board_info_setup()
1753 rtw_phy_setup_phy_cond(rtwdev, 0); in rtw_chip_board_info_setup()
1755 rtw_phy_init_tx_power(rtwdev); in rtw_chip_board_info_setup()
1757 rtw_load_table(rtwdev, rfe_def->agc_btg_tbl); in rtw_chip_board_info_setup()
1758 rtw_load_table(rtwdev, rfe_def->phy_pg_tbl); in rtw_chip_board_info_setup()
1759 rtw_load_table(rtwdev, rfe_def->txpwr_lmt_tbl); in rtw_chip_board_info_setup()
1766 int rtw_chip_info_setup(struct rtw_dev *rtwdev) in rtw_chip_info_setup() argument
1770 ret = rtw_chip_parameter_setup(rtwdev); in rtw_chip_info_setup()
1772 rtw_err(rtwdev, "failed to setup chip parameters\n"); in rtw_chip_info_setup()
1776 ret = rtw_chip_efuse_info_setup(rtwdev); in rtw_chip_info_setup()
1778 rtw_err(rtwdev, "failed to setup chip efuse info\n"); in rtw_chip_info_setup()
1782 ret = rtw_chip_board_info_setup(rtwdev); in rtw_chip_info_setup()
1784 rtw_err(rtwdev, "failed to setup chip board info\n"); in rtw_chip_info_setup()
1795 static void rtw_stats_init(struct rtw_dev *rtwdev) in rtw_stats_init() argument
1797 struct rtw_traffic_stats *stats = &rtwdev->stats; in rtw_stats_init()
1798 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_stats_init()
1810 int rtw_core_init(struct rtw_dev *rtwdev) in rtw_core_init() argument
1812 struct rtw_chip_info *chip = rtwdev->chip; in rtw_core_init()
1813 struct rtw_coex *coex = &rtwdev->coex; in rtw_core_init()
1816 INIT_LIST_HEAD(&rtwdev->rsvd_page_list); in rtw_core_init()
1817 INIT_LIST_HEAD(&rtwdev->txqs); in rtw_core_init()
1819 timer_setup(&rtwdev->tx_report.purge_timer, in rtw_core_init()
1821 rtwdev->tx_wq = alloc_workqueue("rtw_tx_wq", WQ_UNBOUND | WQ_HIGHPRI, 0); in rtw_core_init()
1823 INIT_DELAYED_WORK(&rtwdev->watch_dog_work, rtw_watch_dog_work); in rtw_core_init()
1833 INIT_WORK(&rtwdev->tx_work, rtw_tx_work); in rtw_core_init()
1834 INIT_WORK(&rtwdev->c2h_work, rtw_c2h_work); in rtw_core_init()
1835 INIT_WORK(&rtwdev->fw_recovery_work, rtw_fw_recovery_work); in rtw_core_init()
1836 INIT_WORK(&rtwdev->ba_work, rtw_txq_ba_work); in rtw_core_init()
1837 skb_queue_head_init(&rtwdev->c2h_queue); in rtw_core_init()
1838 skb_queue_head_init(&rtwdev->coex.queue); in rtw_core_init()
1839 skb_queue_head_init(&rtwdev->tx_report.queue); in rtw_core_init()
1841 spin_lock_init(&rtwdev->rf_lock); in rtw_core_init()
1842 spin_lock_init(&rtwdev->h2c.lock); in rtw_core_init()
1843 spin_lock_init(&rtwdev->txq_lock); in rtw_core_init()
1844 spin_lock_init(&rtwdev->tx_report.q_lock); in rtw_core_init()
1846 mutex_init(&rtwdev->mutex); in rtw_core_init()
1847 mutex_init(&rtwdev->coex.mutex); in rtw_core_init()
1848 mutex_init(&rtwdev->hal.tx_power_mutex); in rtw_core_init()
1850 init_waitqueue_head(&rtwdev->coex.wait); in rtw_core_init()
1851 init_completion(&rtwdev->lps_leave_check); in rtw_core_init()
1852 init_completion(&rtwdev->fw_scan_density); in rtw_core_init()
1854 rtwdev->sec.total_cam_num = 32; in rtw_core_init()
1855 rtwdev->hal.current_channel = 1; in rtw_core_init()
1856 set_bit(RTW_BC_MC_MACID, rtwdev->mac_id_map); in rtw_core_init()
1858 rtw_stats_init(rtwdev); in rtw_core_init()
1861 rtwdev->hal.rcr = BIT_APP_FCS | BIT_APP_MIC | BIT_APP_ICV | in rtw_core_init()
1865 ret = rtw_load_firmware(rtwdev, RTW_NORMAL_FW); in rtw_core_init()
1867 rtw_warn(rtwdev, "no firmware loaded\n"); in rtw_core_init()
1872 ret = rtw_load_firmware(rtwdev, RTW_WOWLAN_FW); in rtw_core_init()
1874 rtw_warn(rtwdev, "no wow firmware loaded\n"); in rtw_core_init()
1875 wait_for_completion(&rtwdev->fw.completion); in rtw_core_init()
1876 if (rtwdev->fw.firmware) in rtw_core_init()
1877 release_firmware(rtwdev->fw.firmware); in rtw_core_init()
1886 void rtw_core_deinit(struct rtw_dev *rtwdev) in rtw_core_deinit() argument
1888 struct rtw_fw_state *fw = &rtwdev->fw; in rtw_core_deinit()
1889 struct rtw_fw_state *wow_fw = &rtwdev->wow_fw; in rtw_core_deinit()
1893 rtw_wait_firmware_completion(rtwdev); in rtw_core_deinit()
1901 destroy_workqueue(rtwdev->tx_wq); in rtw_core_deinit()
1902 spin_lock_irqsave(&rtwdev->tx_report.q_lock, flags); in rtw_core_deinit()
1903 skb_queue_purge(&rtwdev->tx_report.queue); in rtw_core_deinit()
1904 skb_queue_purge(&rtwdev->coex.queue); in rtw_core_deinit()
1905 spin_unlock_irqrestore(&rtwdev->tx_report.q_lock, flags); in rtw_core_deinit()
1907 list_for_each_entry_safe(rsvd_pkt, tmp, &rtwdev->rsvd_page_list, in rtw_core_deinit()
1913 mutex_destroy(&rtwdev->mutex); in rtw_core_deinit()
1914 mutex_destroy(&rtwdev->coex.mutex); in rtw_core_deinit()
1915 mutex_destroy(&rtwdev->hal.tx_power_mutex); in rtw_core_deinit()
1919 int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw) in rtw_register_hw() argument
1921 struct rtw_hal *hal = &rtwdev->hal; in rtw_register_hw()
1926 max_tx_headroom = rtwdev->chip->tx_pkt_desc_sz; in rtw_register_hw()
1961 hw->wiphy->wowlan = rtwdev->chip->wowlan_stub; in rtw_register_hw()
1962 hw->wiphy->max_sched_scan_ssids = rtwdev->chip->max_sched_scan_ssids; in rtw_register_hw()
1964 rtw_set_supported_band(hw, rtwdev->chip); in rtw_register_hw()
1965 SET_IEEE80211_PERM_ADDR(hw, rtwdev->efuse.addr); in rtw_register_hw()
1967 rtw_regd_init(rtwdev, rtw_regd_notifier); in rtw_register_hw()
1971 rtw_err(rtwdev, "failed to register hw\n"); in rtw_register_hw()
1975 if (regulatory_hint(hw->wiphy, rtwdev->regd.alpha2)) in rtw_register_hw()
1976 rtw_err(rtwdev, "regulatory_hint fail\n"); in rtw_register_hw()
1978 rtw_debugfs_init(rtwdev); in rtw_register_hw()
1980 rtwdev->bf_info.bfer_mu_cnt = 0; in rtw_register_hw()
1981 rtwdev->bf_info.bfer_su_cnt = 0; in rtw_register_hw()
1987 void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw) in rtw_unregister_hw() argument
1989 struct rtw_chip_info *chip = rtwdev->chip; in rtw_unregister_hw()