Lines Matching refs:rtwdev

133 	struct rtw_dev *rtwdev;  member
137 static void rtw_dynamic_csi_rate(struct rtw_dev *rtwdev, struct rtw_vif *rtwvif) in rtw_dynamic_csi_rate() argument
139 struct rtw_bf_info *bf_info = &rtwdev->bf_info; in rtw_dynamic_csi_rate()
147 rtw_chip_cfg_csi_rate(rtwdev, rtwdev->dm_info.min_rssi, in rtw_dynamic_csi_rate()
165 rtw_dynamic_csi_rate(iter_data->rtwdev, rtwvif); in rtw_vif_watch_dog_iter()
178 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, in rtw_watch_dog_work() local
180 struct rtw_traffic_stats *stats = &rtwdev->stats; in rtw_watch_dog_work()
182 bool busy_traffic = test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags); in rtw_watch_dog_work()
185 mutex_lock(&rtwdev->mutex); in rtw_watch_dog_work()
187 if (!test_bit(RTW_FLAG_RUNNING, rtwdev->flags)) in rtw_watch_dog_work()
190 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work, in rtw_watch_dog_work()
193 if (rtwdev->stats.tx_cnt > 100 || rtwdev->stats.rx_cnt > 100) in rtw_watch_dog_work()
194 set_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags); in rtw_watch_dog_work()
196 clear_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags); in rtw_watch_dog_work()
198 if (busy_traffic != test_bit(RTW_FLAG_BUSY_TRAFFIC, rtwdev->flags)) in rtw_watch_dog_work()
199 rtw_coex_wl_status_change_notify(rtwdev); in rtw_watch_dog_work()
220 if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) in rtw_watch_dog_work()
224 rtw_leave_lps(rtwdev); in rtw_watch_dog_work()
226 rtw_phy_dynamic_mechanism(rtwdev); in rtw_watch_dog_work()
228 data.rtwdev = rtwdev; in rtw_watch_dog_work()
230 rtw_iterate_vifs_atomic(rtwdev, rtw_vif_watch_dog_iter, &data); in rtw_watch_dog_work()
241 if (rtwdev->ps_enabled && data.rtwvif && !ps_active) in rtw_watch_dog_work()
242 rtw_enter_lps(rtwdev, data.rtwvif->port); in rtw_watch_dog_work()
244 rtwdev->watch_dog_cnt++; in rtw_watch_dog_work()
247 mutex_unlock(&rtwdev->mutex); in rtw_watch_dog_work()
252 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, c2h_work); in rtw_c2h_work() local
255 skb_queue_walk_safe(&rtwdev->c2h_queue, skb, tmp) { in rtw_c2h_work()
256 skb_unlink(skb, &rtwdev->c2h_queue); in rtw_c2h_work()
257 rtw_fw_c2h_cmd_handle(rtwdev, skb); in rtw_c2h_work()
262 static u8 rtw_acquire_macid(struct rtw_dev *rtwdev) in rtw_acquire_macid() argument
266 mac_id = find_first_zero_bit(rtwdev->mac_id_map, RTW_MAX_MAC_ID_NUM); in rtw_acquire_macid()
268 set_bit(mac_id, rtwdev->mac_id_map); in rtw_acquire_macid()
273 int rtw_sta_add(struct rtw_dev *rtwdev, struct ieee80211_sta *sta, in rtw_sta_add() argument
279 si->mac_id = rtw_acquire_macid(rtwdev); in rtw_sta_add()
288 rtw_txq_init(rtwdev, sta->txq[i]); in rtw_sta_add()
290 rtw_update_sta_info(rtwdev, si); in rtw_sta_add()
291 rtw_fw_media_status_report(rtwdev, si->mac_id, true); in rtw_sta_add()
293 rtwdev->sta_cnt++; in rtw_sta_add()
294 rtw_info(rtwdev, "sta %pM joined with macid %d\n", in rtw_sta_add()
300 void rtw_sta_remove(struct rtw_dev *rtwdev, struct ieee80211_sta *sta, in rtw_sta_remove() argument
306 rtw_release_macid(rtwdev, si->mac_id); in rtw_sta_remove()
308 rtw_fw_media_status_report(rtwdev, si->mac_id, false); in rtw_sta_remove()
311 rtw_txq_cleanup(rtwdev, sta->txq[i]); in rtw_sta_remove()
315 rtwdev->sta_cnt--; in rtw_sta_remove()
316 rtw_info(rtwdev, "sta %pM with macid %d left\n", in rtw_sta_remove()
320 static bool rtw_fw_dump_crash_log(struct rtw_dev *rtwdev) in rtw_fw_dump_crash_log() argument
322 u32 size = rtwdev->chip->fw_rxff_size; in rtw_fw_dump_crash_log()
331 if (rtw_fw_dump_fifo(rtwdev, RTW_FW_FIFO_SEL_RXBUF_FW, 0, size, buf)) { in rtw_fw_dump_crash_log()
332 rtw_dbg(rtwdev, RTW_DBG_FW, "dump fw fifo fail\n"); in rtw_fw_dump_crash_log()
337 rtw_dbg(rtwdev, RTW_DBG_FW, "fw crash dump's length is 0\n"); in rtw_fw_dump_crash_log()
342 if (seq > 0 && seq != (rtwdev->fw.prev_dump_seq + 1)) { in rtw_fw_dump_crash_log()
343 rtw_dbg(rtwdev, RTW_DBG_FW, in rtw_fw_dump_crash_log()
351 rtw_dbg(rtwdev, RTW_DBG_FW, "fw crash dump's tlv is wrong\n"); in rtw_fw_dump_crash_log()
358 rtwdev->fw.prev_dump_seq = seq; in rtw_fw_dump_crash_log()
365 rtw_write8(rtwdev, REG_MCU_TST_CFG, 0); in rtw_fw_dump_crash_log()
388 struct rtw_dev *rtwdev = (struct rtw_dev *)data; in rtw_reset_key_iter() local
389 struct rtw_sec_desc *sec = &rtwdev->sec; in rtw_reset_key_iter()
391 rtw_sec_clear_cam(rtwdev, sec, key->hw_key_idx); in rtw_reset_key_iter()
396 struct rtw_dev *rtwdev = (struct rtw_dev *)data; in rtw_reset_sta_iter() local
398 if (rtwdev->sta_cnt == 0) { in rtw_reset_sta_iter()
399 rtw_warn(rtwdev, "sta count before reset should not be 0\n"); in rtw_reset_sta_iter()
402 rtw_sta_remove(rtwdev, sta, false); in rtw_reset_sta_iter()
407 struct rtw_dev *rtwdev = (struct rtw_dev *)data; in rtw_reset_vif_iter() local
410 rtw_bf_disassoc(rtwdev, vif, NULL); in rtw_reset_vif_iter()
412 rtw_txq_cleanup(rtwdev, vif->txq); in rtw_reset_vif_iter()
415 void rtw_fw_recovery(struct rtw_dev *rtwdev) in rtw_fw_recovery() argument
417 if (!test_bit(RTW_FLAG_RESTARTING, rtwdev->flags)) in rtw_fw_recovery()
418 ieee80211_queue_work(rtwdev->hw, &rtwdev->fw_recovery_work); in rtw_fw_recovery()
423 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, in rtw_fw_recovery_work() local
431 if (!rtw_fw_dump_crash_log(rtwdev)) { in rtw_fw_recovery_work()
432 rtw_write8(rtwdev, REG_HRCV_MSG, 1); in rtw_fw_recovery_work()
435 rtwdev->fw.prev_dump_seq = 0; in rtw_fw_recovery_work()
439 mutex_lock(&rtwdev->mutex); in rtw_fw_recovery_work()
441 set_bit(RTW_FLAG_RESTARTING, rtwdev->flags); in rtw_fw_recovery_work()
443 rtw_iterate_keys_rcu(rtwdev, NULL, rtw_reset_key_iter, rtwdev); in rtw_fw_recovery_work()
445 rtw_iterate_stas_atomic(rtwdev, rtw_reset_sta_iter, rtwdev); in rtw_fw_recovery_work()
446 rtw_iterate_vifs_atomic(rtwdev, rtw_reset_vif_iter, rtwdev); in rtw_fw_recovery_work()
447 rtw_enter_ips(rtwdev); in rtw_fw_recovery_work()
449 mutex_unlock(&rtwdev->mutex); in rtw_fw_recovery_work()
451 ieee80211_restart_hw(rtwdev->hw); in rtw_fw_recovery_work()
482 struct rtw_dev *rtwdev = container_of(work, struct rtw_dev, ba_work); in rtw_txq_ba_work() local
485 rtw_iterate_stas_atomic(rtwdev, rtw_txq_ba_iter, &data); in rtw_txq_ba_work()
567 void rtw_set_channel(struct rtw_dev *rtwdev) in rtw_set_channel() argument
569 struct ieee80211_hw *hw = rtwdev->hw; in rtw_set_channel()
570 struct rtw_hal *hal = &rtwdev->hal; in rtw_set_channel()
571 struct rtw_chip_info *chip = rtwdev->chip; in rtw_set_channel()
591 chip->ops->set_channel(rtwdev, center_chan, bandwidth, primary_chan_idx); in rtw_set_channel()
594 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_5G); in rtw_set_channel()
596 if (test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) in rtw_set_channel()
597 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_24G); in rtw_set_channel()
599 rtw_coex_switchband_notify(rtwdev, COEX_SWITCH_TO_24G_NOFORSCAN); in rtw_set_channel()
602 rtw_phy_set_tx_power_level(rtwdev, center_chan); in rtw_set_channel()
608 if (!test_bit(RTW_FLAG_SCANNING, rtwdev->flags)) in rtw_set_channel()
609 rtwdev->need_rfk = true; in rtw_set_channel()
612 void rtw_chip_prepare_tx(struct rtw_dev *rtwdev) in rtw_chip_prepare_tx() argument
614 struct rtw_chip_info *chip = rtwdev->chip; in rtw_chip_prepare_tx()
616 if (rtwdev->need_rfk) { in rtw_chip_prepare_tx()
617 rtwdev->need_rfk = false; in rtw_chip_prepare_tx()
618 chip->ops->phy_calibration(rtwdev); in rtw_chip_prepare_tx()
622 static void rtw_vif_write_addr(struct rtw_dev *rtwdev, u32 start, u8 *addr) in rtw_vif_write_addr() argument
627 rtw_write8(rtwdev, start + i, addr[i]); in rtw_vif_write_addr()
630 void rtw_vif_port_config(struct rtw_dev *rtwdev, in rtw_vif_port_config() argument
638 rtw_vif_write_addr(rtwdev, addr, rtwvif->mac_addr); in rtw_vif_port_config()
642 rtw_vif_write_addr(rtwdev, addr, rtwvif->bssid); in rtw_vif_port_config()
647 rtw_write32_mask(rtwdev, addr, mask, rtwvif->net_type); in rtw_vif_port_config()
652 rtw_write32_mask(rtwdev, addr, mask, rtwvif->aid); in rtw_vif_port_config()
657 rtw_write8_mask(rtwdev, addr, mask, rtwvif->bcn_ctrl); in rtw_vif_port_config()
681 static void rtw_hw_config_rf_ant_num(struct rtw_dev *rtwdev, u8 hw_ant_num) in rtw_hw_config_rf_ant_num() argument
683 struct rtw_hal *hal = &rtwdev->hal; in rtw_hw_config_rf_ant_num()
684 struct rtw_chip_info *chip = rtwdev->chip; in rtw_hw_config_rf_ant_num()
834 static u64 rtw_update_rate_mask(struct rtw_dev *rtwdev, in rtw_update_rate_mask() argument
839 struct rtw_hal *hal = &rtwdev->hal; in rtw_update_rate_mask()
894 void rtw_update_sta_info(struct rtw_dev *rtwdev, struct rtw_sta_info *si) in rtw_update_sta_info() argument
897 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_update_sta_info()
898 struct rtw_hal *hal = &rtwdev->hal; in rtw_update_sta_info()
958 rtw_err(rtwdev, "Unknown band type\n"); in rtw_update_sta_info()
990 ra_mask = rtw_update_rate_mask(rtwdev, si, ra_mask, is_vht_enable, in rtw_update_sta_info()
1003 rtw_fw_send_ra_info(rtwdev, si); in rtw_update_sta_info()
1006 static int rtw_wait_firmware_completion(struct rtw_dev *rtwdev) in rtw_wait_firmware_completion() argument
1008 struct rtw_chip_info *chip = rtwdev->chip; in rtw_wait_firmware_completion()
1011 fw = &rtwdev->fw; in rtw_wait_firmware_completion()
1017 fw = &rtwdev->wow_fw; in rtw_wait_firmware_completion()
1026 static int rtw_power_on(struct rtw_dev *rtwdev) in rtw_power_on() argument
1028 struct rtw_chip_info *chip = rtwdev->chip; in rtw_power_on()
1029 struct rtw_fw_state *fw = &rtwdev->fw; in rtw_power_on()
1033 ret = rtw_hci_setup(rtwdev); in rtw_power_on()
1035 rtw_err(rtwdev, "failed to setup hci\n"); in rtw_power_on()
1040 ret = rtw_mac_power_on(rtwdev); in rtw_power_on()
1042 rtw_err(rtwdev, "failed to power on mac\n"); in rtw_power_on()
1046 ret = rtw_wait_firmware_completion(rtwdev); in rtw_power_on()
1048 rtw_err(rtwdev, "failed to wait firmware completion\n"); in rtw_power_on()
1052 ret = rtw_download_firmware(rtwdev, fw); in rtw_power_on()
1054 rtw_err(rtwdev, "failed to download firmware\n"); in rtw_power_on()
1059 ret = rtw_mac_init(rtwdev); in rtw_power_on()
1061 rtw_err(rtwdev, "failed to configure mac\n"); in rtw_power_on()
1065 chip->ops->phy_set_param(rtwdev); in rtw_power_on()
1067 ret = rtw_hci_start(rtwdev); in rtw_power_on()
1069 rtw_err(rtwdev, "failed to start hci\n"); in rtw_power_on()
1074 rtw_fw_send_general_info(rtwdev); in rtw_power_on()
1075 rtw_fw_send_phydm_info(rtwdev); in rtw_power_on()
1077 wifi_only = !rtwdev->efuse.btcoex; in rtw_power_on()
1078 rtw_coex_power_on_setting(rtwdev); in rtw_power_on()
1079 rtw_coex_init_hw_config(rtwdev, wifi_only); in rtw_power_on()
1084 rtw_mac_power_off(rtwdev); in rtw_power_on()
1090 int rtw_core_start(struct rtw_dev *rtwdev) in rtw_core_start() argument
1094 ret = rtw_power_on(rtwdev); in rtw_core_start()
1098 rtw_sec_enable_sec_engine(rtwdev); in rtw_core_start()
1101 rtw_write32(rtwdev, REG_RCR, rtwdev->hal.rcr); in rtw_core_start()
1103 ieee80211_queue_delayed_work(rtwdev->hw, &rtwdev->watch_dog_work, in rtw_core_start()
1106 set_bit(RTW_FLAG_RUNNING, rtwdev->flags); in rtw_core_start()
1111 static void rtw_power_off(struct rtw_dev *rtwdev) in rtw_power_off() argument
1113 rtw_hci_stop(rtwdev); in rtw_power_off()
1114 rtw_mac_power_off(rtwdev); in rtw_power_off()
1117 void rtw_core_stop(struct rtw_dev *rtwdev) in rtw_core_stop() argument
1119 struct rtw_coex *coex = &rtwdev->coex; in rtw_core_stop()
1121 clear_bit(RTW_FLAG_RUNNING, rtwdev->flags); in rtw_core_stop()
1122 clear_bit(RTW_FLAG_FW_RUNNING, rtwdev->flags); in rtw_core_stop()
1124 mutex_unlock(&rtwdev->mutex); in rtw_core_stop()
1126 cancel_work_sync(&rtwdev->c2h_work); in rtw_core_stop()
1127 cancel_delayed_work_sync(&rtwdev->watch_dog_work); in rtw_core_stop()
1134 mutex_lock(&rtwdev->mutex); in rtw_core_stop()
1136 rtw_power_off(rtwdev); in rtw_core_stop()
1139 static void rtw_init_ht_cap(struct rtw_dev *rtwdev, in rtw_init_ht_cap() argument
1142 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_init_ht_cap()
1150 if (rtw_chip_has_rx_ldpc(rtwdev)) in rtw_init_ht_cap()
1173 static void rtw_init_vht_cap(struct rtw_dev *rtwdev, in rtw_init_vht_cap() argument
1176 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_init_vht_cap()
1191 if (rtwdev->hal.rf_path_num > 1) in rtw_init_vht_cap()
1195 vht_cap->cap |= (rtwdev->hal.bfee_sts_cap << in rtw_init_vht_cap()
1198 if (rtw_chip_has_rx_ldpc(rtwdev)) in rtw_init_vht_cap()
1225 struct rtw_dev *rtwdev = hw->priv; in rtw_set_supported_band() local
1233 rtw_init_ht_cap(rtwdev, &sband->ht_cap); in rtw_set_supported_band()
1242 rtw_init_ht_cap(rtwdev, &sband->ht_cap); in rtw_set_supported_band()
1244 rtw_init_vht_cap(rtwdev, &sband->vht_cap); in rtw_set_supported_band()
1251 rtw_err(rtwdev, "failed to set supported band\n"); in rtw_set_supported_band()
1262 static void __update_firmware_info(struct rtw_dev *rtwdev, in __update_firmware_info() argument
1274 static void __update_firmware_info_legacy(struct rtw_dev *rtwdev, in __update_firmware_info_legacy() argument
1286 static void update_firmware_info(struct rtw_dev *rtwdev, in update_firmware_info() argument
1289 if (rtw_chip_wcpu_11n(rtwdev)) in update_firmware_info()
1290 __update_firmware_info_legacy(rtwdev, fw); in update_firmware_info()
1292 __update_firmware_info(rtwdev, fw); in update_firmware_info()
1298 struct rtw_dev *rtwdev = fw->rtwdev; in rtw_load_firmware_cb() local
1301 rtw_err(rtwdev, "failed to request firmware\n"); in rtw_load_firmware_cb()
1307 update_firmware_info(rtwdev, fw); in rtw_load_firmware_cb()
1310 rtw_info(rtwdev, "Firmware version %u.%u.%u, H2C version %u\n", in rtw_load_firmware_cb()
1314 static int rtw_load_firmware(struct rtw_dev *rtwdev, enum rtw_fw_type type) in rtw_load_firmware() argument
1322 fw = &rtwdev->wow_fw; in rtw_load_firmware()
1323 fw_name = rtwdev->chip->wow_fw_name; in rtw_load_firmware()
1327 fw = &rtwdev->fw; in rtw_load_firmware()
1328 fw_name = rtwdev->chip->fw_name; in rtw_load_firmware()
1332 rtw_warn(rtwdev, "unsupported firmware type\n"); in rtw_load_firmware()
1336 fw->rtwdev = rtwdev; in rtw_load_firmware()
1339 ret = request_firmware_nowait(THIS_MODULE, true, fw_name, rtwdev->dev, in rtw_load_firmware()
1342 rtw_err(rtwdev, "failed to async firmware request\n"); in rtw_load_firmware()
1349 static int rtw_chip_parameter_setup(struct rtw_dev *rtwdev) in rtw_chip_parameter_setup() argument
1351 struct rtw_chip_info *chip = rtwdev->chip; in rtw_chip_parameter_setup()
1352 struct rtw_hal *hal = &rtwdev->hal; in rtw_chip_parameter_setup()
1353 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_chip_parameter_setup()
1356 switch (rtw_hci_type(rtwdev)) { in rtw_chip_parameter_setup()
1358 rtwdev->hci.rpwm_addr = 0x03d9; in rtw_chip_parameter_setup()
1359 rtwdev->hci.cpwm_addr = 0x03da; in rtw_chip_parameter_setup()
1362 rtw_err(rtwdev, "unsupported hci type\n"); in rtw_chip_parameter_setup()
1366 hal->chip_version = rtw_read32(rtwdev, REG_SYS_CFG1); in rtw_chip_parameter_setup()
1388 rtwdev->hal.rcr |= BIT_VHT_DACK; in rtw_chip_parameter_setup()
1395 static int rtw_chip_efuse_enable(struct rtw_dev *rtwdev) in rtw_chip_efuse_enable() argument
1397 struct rtw_fw_state *fw = &rtwdev->fw; in rtw_chip_efuse_enable()
1400 ret = rtw_hci_setup(rtwdev); in rtw_chip_efuse_enable()
1402 rtw_err(rtwdev, "failed to setup hci\n"); in rtw_chip_efuse_enable()
1406 ret = rtw_mac_power_on(rtwdev); in rtw_chip_efuse_enable()
1408 rtw_err(rtwdev, "failed to power on mac\n"); in rtw_chip_efuse_enable()
1412 rtw_write8(rtwdev, REG_C2HEVT, C2H_HW_FEATURE_DUMP); in rtw_chip_efuse_enable()
1417 rtw_err(rtwdev, "failed to load firmware\n"); in rtw_chip_efuse_enable()
1421 ret = rtw_download_firmware(rtwdev, fw); in rtw_chip_efuse_enable()
1423 rtw_err(rtwdev, "failed to download firmware\n"); in rtw_chip_efuse_enable()
1430 rtw_mac_power_off(rtwdev); in rtw_chip_efuse_enable()
1436 static int rtw_dump_hw_feature(struct rtw_dev *rtwdev) in rtw_dump_hw_feature() argument
1438 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_dump_hw_feature()
1444 id = rtw_read8(rtwdev, REG_C2HEVT); in rtw_dump_hw_feature()
1446 rtw_err(rtwdev, "failed to read hw feature report\n"); in rtw_dump_hw_feature()
1451 hw_feature[i] = rtw_read8(rtwdev, REG_C2HEVT + 2 + i); in rtw_dump_hw_feature()
1453 rtw_write8(rtwdev, REG_C2HEVT, 0); in rtw_dump_hw_feature()
1462 rtw_hw_config_rf_ant_num(rtwdev, efuse->hw_cap.ant_num); in rtw_dump_hw_feature()
1465 efuse->hw_cap.nss > rtwdev->hal.rf_path_num) in rtw_dump_hw_feature()
1466 efuse->hw_cap.nss = rtwdev->hal.rf_path_num; in rtw_dump_hw_feature()
1468 rtw_dbg(rtwdev, RTW_DBG_EFUSE, in rtw_dump_hw_feature()
1476 static void rtw_chip_efuse_disable(struct rtw_dev *rtwdev) in rtw_chip_efuse_disable() argument
1478 rtw_hci_stop(rtwdev); in rtw_chip_efuse_disable()
1479 rtw_mac_power_off(rtwdev); in rtw_chip_efuse_disable()
1482 static int rtw_chip_efuse_info_setup(struct rtw_dev *rtwdev) in rtw_chip_efuse_info_setup() argument
1484 struct rtw_efuse *efuse = &rtwdev->efuse; in rtw_chip_efuse_info_setup()
1487 mutex_lock(&rtwdev->mutex); in rtw_chip_efuse_info_setup()
1490 ret = rtw_chip_efuse_enable(rtwdev); in rtw_chip_efuse_info_setup()
1494 ret = rtw_parse_efuse_map(rtwdev); in rtw_chip_efuse_info_setup()
1498 ret = rtw_dump_hw_feature(rtwdev); in rtw_chip_efuse_info_setup()
1502 ret = rtw_check_supported_rfe(rtwdev); in rtw_chip_efuse_info_setup()
1536 rtw_chip_efuse_disable(rtwdev); in rtw_chip_efuse_info_setup()
1539 mutex_unlock(&rtwdev->mutex); in rtw_chip_efuse_info_setup()
1543 static int rtw_chip_board_info_setup(struct rtw_dev *rtwdev) in rtw_chip_board_info_setup() argument
1545 struct rtw_hal *hal = &rtwdev->hal; in rtw_chip_board_info_setup()
1546 const struct rtw_rfe_def *rfe_def = rtw_get_rfe_def(rtwdev); in rtw_chip_board_info_setup()
1551 rtw_phy_setup_phy_cond(rtwdev, 0); in rtw_chip_board_info_setup()
1553 rtw_phy_init_tx_power(rtwdev); in rtw_chip_board_info_setup()
1554 rtw_load_table(rtwdev, rfe_def->phy_pg_tbl); in rtw_chip_board_info_setup()
1555 rtw_load_table(rtwdev, rfe_def->txpwr_lmt_tbl); in rtw_chip_board_info_setup()
1562 int rtw_chip_info_setup(struct rtw_dev *rtwdev) in rtw_chip_info_setup() argument
1566 ret = rtw_chip_parameter_setup(rtwdev); in rtw_chip_info_setup()
1568 rtw_err(rtwdev, "failed to setup chip parameters\n"); in rtw_chip_info_setup()
1572 ret = rtw_chip_efuse_info_setup(rtwdev); in rtw_chip_info_setup()
1574 rtw_err(rtwdev, "failed to setup chip efuse info\n"); in rtw_chip_info_setup()
1578 ret = rtw_chip_board_info_setup(rtwdev); in rtw_chip_info_setup()
1580 rtw_err(rtwdev, "failed to setup chip board info\n"); in rtw_chip_info_setup()
1591 static void rtw_stats_init(struct rtw_dev *rtwdev) in rtw_stats_init() argument
1593 struct rtw_traffic_stats *stats = &rtwdev->stats; in rtw_stats_init()
1594 struct rtw_dm_info *dm_info = &rtwdev->dm_info; in rtw_stats_init()
1606 int rtw_core_init(struct rtw_dev *rtwdev) in rtw_core_init() argument
1608 struct rtw_chip_info *chip = rtwdev->chip; in rtw_core_init()
1609 struct rtw_coex *coex = &rtwdev->coex; in rtw_core_init()
1612 INIT_LIST_HEAD(&rtwdev->rsvd_page_list); in rtw_core_init()
1613 INIT_LIST_HEAD(&rtwdev->txqs); in rtw_core_init()
1615 timer_setup(&rtwdev->tx_report.purge_timer, in rtw_core_init()
1617 tasklet_setup(&rtwdev->tx_tasklet, rtw_tx_tasklet); in rtw_core_init()
1619 INIT_DELAYED_WORK(&rtwdev->watch_dog_work, rtw_watch_dog_work); in rtw_core_init()
1625 INIT_WORK(&rtwdev->c2h_work, rtw_c2h_work); in rtw_core_init()
1626 INIT_WORK(&rtwdev->fw_recovery_work, rtw_fw_recovery_work); in rtw_core_init()
1627 INIT_WORK(&rtwdev->ba_work, rtw_txq_ba_work); in rtw_core_init()
1628 skb_queue_head_init(&rtwdev->c2h_queue); in rtw_core_init()
1629 skb_queue_head_init(&rtwdev->coex.queue); in rtw_core_init()
1630 skb_queue_head_init(&rtwdev->tx_report.queue); in rtw_core_init()
1632 spin_lock_init(&rtwdev->rf_lock); in rtw_core_init()
1633 spin_lock_init(&rtwdev->h2c.lock); in rtw_core_init()
1634 spin_lock_init(&rtwdev->txq_lock); in rtw_core_init()
1635 spin_lock_init(&rtwdev->tx_report.q_lock); in rtw_core_init()
1637 mutex_init(&rtwdev->mutex); in rtw_core_init()
1638 mutex_init(&rtwdev->coex.mutex); in rtw_core_init()
1639 mutex_init(&rtwdev->hal.tx_power_mutex); in rtw_core_init()
1641 init_waitqueue_head(&rtwdev->coex.wait); in rtw_core_init()
1643 rtwdev->sec.total_cam_num = 32; in rtw_core_init()
1644 rtwdev->hal.current_channel = 1; in rtw_core_init()
1645 set_bit(RTW_BC_MC_MACID, rtwdev->mac_id_map); in rtw_core_init()
1647 rtwdev->lps_conf.deep_mode = LPS_DEEP_MODE_NONE; in rtw_core_init()
1649 rtwdev->lps_conf.deep_mode = rtw_fw_lps_deep_mode; in rtw_core_init()
1651 rtw_stats_init(rtwdev); in rtw_core_init()
1654 rtwdev->hal.rcr = BIT_APP_FCS | BIT_APP_MIC | BIT_APP_ICV | in rtw_core_init()
1658 ret = rtw_load_firmware(rtwdev, RTW_NORMAL_FW); in rtw_core_init()
1660 rtw_warn(rtwdev, "no firmware loaded\n"); in rtw_core_init()
1665 ret = rtw_load_firmware(rtwdev, RTW_WOWLAN_FW); in rtw_core_init()
1667 rtw_warn(rtwdev, "no wow firmware loaded\n"); in rtw_core_init()
1668 wait_for_completion(&rtwdev->fw.completion); in rtw_core_init()
1669 if (rtwdev->fw.firmware) in rtw_core_init()
1670 release_firmware(rtwdev->fw.firmware); in rtw_core_init()
1678 void rtw_core_deinit(struct rtw_dev *rtwdev) in rtw_core_deinit() argument
1680 struct rtw_fw_state *fw = &rtwdev->fw; in rtw_core_deinit()
1681 struct rtw_fw_state *wow_fw = &rtwdev->wow_fw; in rtw_core_deinit()
1685 rtw_wait_firmware_completion(rtwdev); in rtw_core_deinit()
1693 tasklet_kill(&rtwdev->tx_tasklet); in rtw_core_deinit()
1694 spin_lock_irqsave(&rtwdev->tx_report.q_lock, flags); in rtw_core_deinit()
1695 skb_queue_purge(&rtwdev->tx_report.queue); in rtw_core_deinit()
1696 spin_unlock_irqrestore(&rtwdev->tx_report.q_lock, flags); in rtw_core_deinit()
1698 list_for_each_entry_safe(rsvd_pkt, tmp, &rtwdev->rsvd_page_list, in rtw_core_deinit()
1704 mutex_destroy(&rtwdev->mutex); in rtw_core_deinit()
1705 mutex_destroy(&rtwdev->coex.mutex); in rtw_core_deinit()
1706 mutex_destroy(&rtwdev->hal.tx_power_mutex); in rtw_core_deinit()
1710 int rtw_register_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw) in rtw_register_hw() argument
1712 struct rtw_hal *hal = &rtwdev->hal; in rtw_register_hw()
1717 max_tx_headroom = rtwdev->chip->tx_pkt_desc_sz; in rtw_register_hw()
1752 hw->wiphy->wowlan = rtwdev->chip->wowlan_stub; in rtw_register_hw()
1753 hw->wiphy->max_sched_scan_ssids = rtwdev->chip->max_sched_scan_ssids; in rtw_register_hw()
1755 rtw_set_supported_band(hw, rtwdev->chip); in rtw_register_hw()
1756 SET_IEEE80211_PERM_ADDR(hw, rtwdev->efuse.addr); in rtw_register_hw()
1758 rtw_regd_init(rtwdev, rtw_regd_notifier); in rtw_register_hw()
1762 rtw_err(rtwdev, "failed to register hw\n"); in rtw_register_hw()
1766 if (regulatory_hint(hw->wiphy, rtwdev->regd.alpha2)) in rtw_register_hw()
1767 rtw_err(rtwdev, "regulatory_hint fail\n"); in rtw_register_hw()
1769 rtw_debugfs_init(rtwdev); in rtw_register_hw()
1771 rtwdev->bf_info.bfer_mu_cnt = 0; in rtw_register_hw()
1772 rtwdev->bf_info.bfer_su_cnt = 0; in rtw_register_hw()
1778 void rtw_unregister_hw(struct rtw_dev *rtwdev, struct ieee80211_hw *hw) in rtw_unregister_hw() argument
1780 struct rtw_chip_info *chip = rtwdev->chip; in rtw_unregister_hw()