Lines Matching full:trans

12 #include "iwl-trans.h"
103 iwl_trans_determine_restart_mode(struct iwl_trans *trans) in iwl_trans_determine_restart_mode() argument
121 if (trans->restart.during_reset) in iwl_trans_determine_restart_mode()
124 data = iwl_trans_get_restart_data(trans->dev); in iwl_trans_determine_restart_mode()
143 struct iwl_trans *trans = container_of(wk, typeof(*trans), restart.wk); in iwl_trans_restart_wk() local
147 if (!trans->op_mode) in iwl_trans_restart_wk()
151 if (test_bit(STATUS_TRANS_DEAD, &trans->status)) in iwl_trans_restart_wk()
154 iwl_op_mode_dump_error(trans->op_mode, &trans->restart.mode); in iwl_trans_restart_wk()
160 * managed that via trans->restart.mode. in iwl_trans_restart_wk()
164 if (!test_and_clear_bit(STATUS_RESET_PENDING, &trans->status)) in iwl_trans_restart_wk()
170 mode = iwl_trans_determine_restart_mode(trans); in iwl_trans_restart_wk()
172 iwl_trans_inc_restart_count(trans->dev); in iwl_trans_restart_wk()
176 IWL_ERR(trans, "Device error - SW reset\n"); in iwl_trans_restart_wk()
177 iwl_trans_opmode_sw_reset(trans, trans->restart.mode.type); in iwl_trans_restart_wk()
180 IWL_ERR(trans, "Device error - reprobe!\n"); in iwl_trans_restart_wk()
188 IWL_ERR(trans, "Module is being unloaded - abort\n"); in iwl_trans_restart_wk()
197 reprobe->dev = get_device(trans->dev); in iwl_trans_restart_wk()
202 iwl_trans_pcie_reset(trans, mode); in iwl_trans_restart_wk()
211 struct iwl_trans *trans; in iwl_trans_alloc() local
216 trans = devm_kzalloc(dev, sizeof(*trans) + priv_size, GFP_KERNEL); in iwl_trans_alloc()
217 if (!trans) in iwl_trans_alloc()
220 trans->trans_cfg = cfg_trans; in iwl_trans_alloc()
223 lockdep_init_map(&trans->sync_cmd_lockdep_map, "sync_cmd_lockdep_map", in iwl_trans_alloc()
227 trans->dev = dev; in iwl_trans_alloc()
228 trans->num_rx_queues = 1; in iwl_trans_alloc()
230 INIT_WORK(&trans->restart.wk, iwl_trans_restart_wk); in iwl_trans_alloc()
232 return trans; in iwl_trans_alloc()
235 int iwl_trans_init(struct iwl_trans *trans) in iwl_trans_init() argument
239 if (!trans->trans_cfg->gen2) { in iwl_trans_init()
242 } else if (trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_AX210) { in iwl_trans_init()
254 if (WARN_ON(trans->trans_cfg->gen2 && txcmd_size >= txcmd_align)) in iwl_trans_init()
257 snprintf(trans->dev_cmd_pool_name, sizeof(trans->dev_cmd_pool_name), in iwl_trans_init()
258 "iwl_cmd_pool:%s", dev_name(trans->dev)); in iwl_trans_init()
259 trans->dev_cmd_pool = in iwl_trans_init()
260 kmem_cache_create(trans->dev_cmd_pool_name, in iwl_trans_init()
263 if (!trans->dev_cmd_pool) in iwl_trans_init()
267 init_waitqueue_head(&trans->wait_command_queue); in iwl_trans_init()
272 void iwl_trans_free(struct iwl_trans *trans) in iwl_trans_free() argument
274 cancel_work_sync(&trans->restart.wk); in iwl_trans_free()
275 kmem_cache_destroy(trans->dev_cmd_pool); in iwl_trans_free()
278 int iwl_trans_send_cmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) in iwl_trans_send_cmd() argument
283 test_bit(STATUS_RFKILL_OPMODE, &trans->status))) in iwl_trans_send_cmd()
295 if (unlikely(trans->system_pm_mode == IWL_PLAT_PM_MODE_D3 && in iwl_trans_send_cmd()
299 if (unlikely(test_bit(STATUS_FW_ERROR, &trans->status))) in iwl_trans_send_cmd()
302 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_send_cmd()
303 "bad state = %d\n", trans->state)) in iwl_trans_send_cmd()
307 lock_map_acquire_read(&trans->sync_cmd_lockdep_map); in iwl_trans_send_cmd()
309 if (trans->wide_cmd_header && !iwl_cmd_groupid(cmd->id)) { in iwl_trans_send_cmd()
314 ret = iwl_trans_pcie_send_hcmd(trans, cmd); in iwl_trans_send_cmd()
317 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_trans_send_cmd()
343 const char *iwl_get_cmd_string(struct iwl_trans *trans, u32 id) in iwl_get_cmd_string() argument
353 if (!trans->command_groups || grp >= trans->command_groups_size || in iwl_get_cmd_string()
354 !trans->command_groups[grp].arr) in iwl_get_cmd_string()
357 arr = &trans->command_groups[grp]; in iwl_get_cmd_string()
365 int iwl_cmd_groups_verify_sorted(const struct iwl_trans_config *trans) in iwl_cmd_groups_verify_sorted() argument
370 for (i = 0; i < trans->command_groups_size; i++) { in iwl_cmd_groups_verify_sorted()
371 arr = &trans->command_groups[i]; in iwl_cmd_groups_verify_sorted()
382 void iwl_trans_configure(struct iwl_trans *trans, in iwl_trans_configure() argument
385 trans->op_mode = trans_cfg->op_mode; in iwl_trans_configure()
387 iwl_trans_pcie_configure(trans, trans_cfg); in iwl_trans_configure()
392 int iwl_trans_start_hw(struct iwl_trans *trans) in iwl_trans_start_hw() argument
396 return iwl_trans_pcie_start_hw(trans); in iwl_trans_start_hw()
400 void iwl_trans_op_mode_leave(struct iwl_trans *trans) in iwl_trans_op_mode_leave() argument
404 iwl_trans_pcie_op_mode_leave(trans); in iwl_trans_op_mode_leave()
406 cancel_work_sync(&trans->restart.wk); in iwl_trans_op_mode_leave()
408 trans->op_mode = NULL; in iwl_trans_op_mode_leave()
410 trans->state = IWL_TRANS_NO_FW; in iwl_trans_op_mode_leave()
414 void iwl_trans_write8(struct iwl_trans *trans, u32 ofs, u8 val) in iwl_trans_write8() argument
416 iwl_trans_pcie_write8(trans, ofs, val); in iwl_trans_write8()
420 void iwl_trans_write32(struct iwl_trans *trans, u32 ofs, u32 val) in iwl_trans_write32() argument
422 iwl_trans_pcie_write32(trans, ofs, val); in iwl_trans_write32()
426 u32 iwl_trans_read32(struct iwl_trans *trans, u32 ofs) in iwl_trans_read32() argument
428 return iwl_trans_pcie_read32(trans, ofs); in iwl_trans_read32()
432 u32 iwl_trans_read_prph(struct iwl_trans *trans, u32 ofs) in iwl_trans_read_prph() argument
434 return iwl_trans_pcie_read_prph(trans, ofs); in iwl_trans_read_prph()
438 void iwl_trans_write_prph(struct iwl_trans *trans, u32 ofs, u32 val) in iwl_trans_write_prph() argument
440 return iwl_trans_pcie_write_prph(trans, ofs, val); in iwl_trans_write_prph()
444 int iwl_trans_read_mem(struct iwl_trans *trans, u32 addr, in iwl_trans_read_mem() argument
447 return iwl_trans_pcie_read_mem(trans, addr, buf, dwords); in iwl_trans_read_mem()
451 int iwl_trans_write_mem(struct iwl_trans *trans, u32 addr, in iwl_trans_write_mem() argument
454 return iwl_trans_pcie_write_mem(trans, addr, buf, dwords); in iwl_trans_write_mem()
458 void iwl_trans_set_pmi(struct iwl_trans *trans, bool state) in iwl_trans_set_pmi() argument
461 set_bit(STATUS_TPOWER_PMI, &trans->status); in iwl_trans_set_pmi()
463 clear_bit(STATUS_TPOWER_PMI, &trans->status); in iwl_trans_set_pmi()
467 int iwl_trans_sw_reset(struct iwl_trans *trans, bool retake_ownership) in iwl_trans_sw_reset() argument
469 return iwl_trans_pcie_sw_reset(trans, retake_ownership); in iwl_trans_sw_reset()
474 iwl_trans_dump_data(struct iwl_trans *trans, u32 dump_mask, in iwl_trans_dump_data() argument
478 return iwl_trans_pcie_dump_data(trans, dump_mask, in iwl_trans_dump_data()
483 int iwl_trans_d3_suspend(struct iwl_trans *trans, bool test, bool reset) in iwl_trans_d3_suspend() argument
487 return iwl_trans_pcie_d3_suspend(trans, test, reset); in iwl_trans_d3_suspend()
491 int iwl_trans_d3_resume(struct iwl_trans *trans, enum iwl_d3_status *status, in iwl_trans_d3_resume() argument
496 return iwl_trans_pcie_d3_resume(trans, status, test, reset); in iwl_trans_d3_resume()
500 void iwl_trans_interrupts(struct iwl_trans *trans, bool enable) in iwl_trans_interrupts() argument
502 iwl_trans_pci_interrupts(trans, enable); in iwl_trans_interrupts()
506 void iwl_trans_sync_nmi(struct iwl_trans *trans) in iwl_trans_sync_nmi() argument
508 iwl_trans_pcie_sync_nmi(trans); in iwl_trans_sync_nmi()
512 int iwl_trans_write_imr_mem(struct iwl_trans *trans, u32 dst_addr, in iwl_trans_write_imr_mem() argument
515 return iwl_trans_pcie_copy_imr(trans, dst_addr, src_addr, byte_cnt); in iwl_trans_write_imr_mem()
519 void iwl_trans_set_bits_mask(struct iwl_trans *trans, u32 reg, in iwl_trans_set_bits_mask() argument
522 iwl_trans_pcie_set_bits_mask(trans, reg, mask, value); in iwl_trans_set_bits_mask()
526 int iwl_trans_read_config32(struct iwl_trans *trans, u32 ofs, in iwl_trans_read_config32() argument
529 return iwl_trans_pcie_read_config32(trans, ofs, val); in iwl_trans_read_config32()
533 bool _iwl_trans_grab_nic_access(struct iwl_trans *trans) in _iwl_trans_grab_nic_access() argument
535 return iwl_trans_pcie_grab_nic_access(trans); in _iwl_trans_grab_nic_access()
540 iwl_trans_release_nic_access(struct iwl_trans *trans) in __releases()
542 iwl_trans_pcie_release_nic_access(trans); in __releases()
547 void iwl_trans_fw_alive(struct iwl_trans *trans, u32 scd_addr) in iwl_trans_fw_alive() argument
551 trans->state = IWL_TRANS_FW_ALIVE; in iwl_trans_fw_alive()
553 if (trans->trans_cfg->gen2) in iwl_trans_fw_alive()
554 iwl_trans_pcie_gen2_fw_alive(trans); in iwl_trans_fw_alive()
556 iwl_trans_pcie_fw_alive(trans, scd_addr); in iwl_trans_fw_alive()
560 int iwl_trans_start_fw(struct iwl_trans *trans, const struct fw_img *fw, in iwl_trans_start_fw() argument
567 WARN_ON_ONCE(!trans->rx_mpdu_cmd); in iwl_trans_start_fw()
569 clear_bit(STATUS_FW_ERROR, &trans->status); in iwl_trans_start_fw()
571 if (trans->trans_cfg->gen2) in iwl_trans_start_fw()
572 ret = iwl_trans_pcie_gen2_start_fw(trans, fw, run_in_rfkill); in iwl_trans_start_fw()
574 ret = iwl_trans_pcie_start_fw(trans, fw, run_in_rfkill); in iwl_trans_start_fw()
577 trans->state = IWL_TRANS_FW_STARTED; in iwl_trans_start_fw()
583 void iwl_trans_stop_device(struct iwl_trans *trans) in iwl_trans_stop_device() argument
598 * The trans->restart.mode is a handshake with the opmode, we set in iwl_trans_stop_device()
605 if (test_and_clear_bit(STATUS_RESET_PENDING, &trans->status)) { in iwl_trans_stop_device()
608 mode = trans->restart.mode; in iwl_trans_stop_device()
610 trans->restart.mode.context = IWL_ERR_CONTEXT_ABORT; in iwl_trans_stop_device()
612 iwl_op_mode_dump_error(trans->op_mode, &mode); in iwl_trans_stop_device()
615 if (trans->trans_cfg->gen2) in iwl_trans_stop_device()
616 iwl_trans_pcie_gen2_stop_device(trans); in iwl_trans_stop_device()
618 iwl_trans_pcie_stop_device(trans); in iwl_trans_stop_device()
620 trans->state = IWL_TRANS_NO_FW; in iwl_trans_stop_device()
624 int iwl_trans_tx(struct iwl_trans *trans, struct sk_buff *skb, in iwl_trans_tx() argument
627 if (unlikely(test_bit(STATUS_FW_ERROR, &trans->status))) in iwl_trans_tx()
630 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_tx()
631 "bad state = %d\n", trans->state)) in iwl_trans_tx()
634 if (trans->trans_cfg->gen2) in iwl_trans_tx()
635 return iwl_txq_gen2_tx(trans, skb, dev_cmd, queue); in iwl_trans_tx()
637 return iwl_trans_pcie_tx(trans, skb, dev_cmd, queue); in iwl_trans_tx()
641 void iwl_trans_reclaim(struct iwl_trans *trans, int queue, int ssn, in iwl_trans_reclaim() argument
644 if (unlikely(test_bit(STATUS_FW_ERROR, &trans->status))) in iwl_trans_reclaim()
647 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_reclaim()
648 "bad state = %d\n", trans->state)) in iwl_trans_reclaim()
651 iwl_pcie_reclaim(trans, queue, ssn, skbs, is_flush); in iwl_trans_reclaim()
655 void iwl_trans_txq_disable(struct iwl_trans *trans, int queue, in iwl_trans_txq_disable() argument
658 iwl_trans_pcie_txq_disable(trans, queue, configure_scd); in iwl_trans_txq_disable()
662 bool iwl_trans_txq_enable_cfg(struct iwl_trans *trans, int queue, u16 ssn, in iwl_trans_txq_enable_cfg() argument
668 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_txq_enable_cfg()
669 "bad state = %d\n", trans->state)) in iwl_trans_txq_enable_cfg()
672 return iwl_trans_pcie_txq_enable(trans, queue, ssn, in iwl_trans_txq_enable_cfg()
677 int iwl_trans_wait_txq_empty(struct iwl_trans *trans, int queue) in iwl_trans_wait_txq_empty() argument
679 if (unlikely(test_bit(STATUS_FW_ERROR, &trans->status))) in iwl_trans_wait_txq_empty()
682 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_wait_txq_empty()
683 "bad state = %d\n", trans->state)) in iwl_trans_wait_txq_empty()
686 return iwl_trans_pcie_wait_txq_empty(trans, queue); in iwl_trans_wait_txq_empty()
690 int iwl_trans_wait_tx_queues_empty(struct iwl_trans *trans, u32 txqs) in iwl_trans_wait_tx_queues_empty() argument
692 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_wait_tx_queues_empty()
693 "bad state = %d\n", trans->state)) in iwl_trans_wait_tx_queues_empty()
696 return iwl_trans_pcie_wait_txqs_empty(trans, txqs); in iwl_trans_wait_tx_queues_empty()
700 void iwl_trans_freeze_txq_timer(struct iwl_trans *trans, in iwl_trans_freeze_txq_timer() argument
703 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_freeze_txq_timer()
704 "bad state = %d\n", trans->state)) in iwl_trans_freeze_txq_timer()
707 iwl_pcie_freeze_txq_timer(trans, txqs, freeze); in iwl_trans_freeze_txq_timer()
711 void iwl_trans_txq_set_shared_mode(struct iwl_trans *trans, in iwl_trans_txq_set_shared_mode() argument
714 iwl_trans_pcie_txq_set_shared_mode(trans, txq_id, shared_mode); in iwl_trans_txq_set_shared_mode()
719 void iwl_trans_debugfs_cleanup(struct iwl_trans *trans) in iwl_trans_debugfs_cleanup() argument
721 iwl_trans_pcie_debugfs_cleanup(trans); in iwl_trans_debugfs_cleanup()
726 void iwl_trans_set_q_ptrs(struct iwl_trans *trans, int queue, int ptr) in iwl_trans_set_q_ptrs() argument
728 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_set_q_ptrs()
729 "bad state = %d\n", trans->state)) in iwl_trans_set_q_ptrs()
732 iwl_pcie_set_q_ptrs(trans, queue, ptr); in iwl_trans_set_q_ptrs()
736 int iwl_trans_txq_alloc(struct iwl_trans *trans, u32 flags, u32 sta_mask, in iwl_trans_txq_alloc() argument
741 if (WARN_ONCE(trans->state != IWL_TRANS_FW_ALIVE, in iwl_trans_txq_alloc()
742 "bad state = %d\n", trans->state)) in iwl_trans_txq_alloc()
745 return iwl_txq_dyn_alloc(trans, flags, sta_mask, tid, in iwl_trans_txq_alloc()
750 void iwl_trans_txq_free(struct iwl_trans *trans, int queue) in iwl_trans_txq_free() argument
752 iwl_txq_dyn_free(trans, queue); in iwl_trans_txq_free()
756 int iwl_trans_get_rxq_dma_data(struct iwl_trans *trans, int queue, in iwl_trans_get_rxq_dma_data() argument
759 return iwl_trans_pcie_rxq_dma_data(trans, queue, data); in iwl_trans_get_rxq_dma_data()
763 int iwl_trans_load_pnvm(struct iwl_trans *trans, in iwl_trans_load_pnvm() argument
767 return iwl_trans_pcie_ctx_info_gen3_load_pnvm(trans, pnvm_data, capa); in iwl_trans_load_pnvm()
771 void iwl_trans_set_pnvm(struct iwl_trans *trans, in iwl_trans_set_pnvm() argument
774 iwl_trans_pcie_ctx_info_gen3_set_pnvm(trans, capa); in iwl_trans_set_pnvm()
778 int iwl_trans_load_reduce_power(struct iwl_trans *trans, in iwl_trans_load_reduce_power() argument
782 return iwl_trans_pcie_ctx_info_gen3_load_reduce_power(trans, payloads, in iwl_trans_load_reduce_power()
787 void iwl_trans_set_reduce_power(struct iwl_trans *trans, in iwl_trans_set_reduce_power() argument
790 iwl_trans_pcie_ctx_info_gen3_set_reduce_power(trans, capa); in iwl_trans_set_reduce_power()