Lines Matching refs:trans
123 static int iwl_pcie_alloc_dma_ptr(struct iwl_trans *trans, in iwl_pcie_alloc_dma_ptr() argument
129 ptr->addr = dma_alloc_coherent(trans->dev, size, in iwl_pcie_alloc_dma_ptr()
137 static void iwl_pcie_free_dma_ptr(struct iwl_trans *trans, in iwl_pcie_free_dma_ptr() argument
143 dma_free_coherent(trans->dev, ptr->size, ptr->addr, ptr->dma); in iwl_pcie_free_dma_ptr()
151 struct iwl_trans *trans = iwl_trans_pcie_get_trans(trans_pcie); in iwl_pcie_txq_stuck_timer() local
165 IWL_ERR(trans, "Queue %d stuck for %u ms.\n", txq->q.id, in iwl_pcie_txq_stuck_timer()
167 IWL_ERR(trans, "Current SW read_ptr %d write_ptr %d\n", in iwl_pcie_txq_stuck_timer()
170 iwl_trans_read_mem_bytes(trans, scd_sram_addr, buf, sizeof(buf)); in iwl_pcie_txq_stuck_timer()
172 iwl_print_hex_error(trans, buf, sizeof(buf)); in iwl_pcie_txq_stuck_timer()
175 IWL_ERR(trans, "FH TRBs(%d) = 0x%08x\n", i, in iwl_pcie_txq_stuck_timer()
176 iwl_read_direct32(trans, FH_TX_TRB_REG(i))); in iwl_pcie_txq_stuck_timer()
178 for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) { in iwl_pcie_txq_stuck_timer()
179 u32 status = iwl_read_prph(trans, SCD_QUEUE_STATUS_BITS(i)); in iwl_pcie_txq_stuck_timer()
183 iwl_trans_read_mem32(trans, in iwl_pcie_txq_stuck_timer()
192 IWL_ERR(trans, in iwl_pcie_txq_stuck_timer()
195 iwl_read_prph(trans, SCD_QUEUE_RDPTR(i)) & in iwl_pcie_txq_stuck_timer()
197 iwl_read_prph(trans, SCD_QUEUE_WRPTR(i))); in iwl_pcie_txq_stuck_timer()
200 iwl_force_nmi(trans); in iwl_pcie_txq_stuck_timer()
206 static void iwl_pcie_txq_update_byte_cnt_tbl(struct iwl_trans *trans, in iwl_pcie_txq_update_byte_cnt_tbl() argument
210 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_update_byte_cnt_tbl()
251 static void iwl_pcie_txq_inval_byte_cnt_tbl(struct iwl_trans *trans, in iwl_pcie_txq_inval_byte_cnt_tbl() argument
255 IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_inval_byte_cnt_tbl()
280 static void iwl_pcie_txq_inc_wr_ptr(struct iwl_trans *trans, in iwl_pcie_txq_inc_wr_ptr() argument
283 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_inc_wr_ptr()
295 if (!trans->cfg->base_params->shadow_reg_enable && in iwl_pcie_txq_inc_wr_ptr()
297 test_bit(STATUS_TPOWER_PMI, &trans->status)) { in iwl_pcie_txq_inc_wr_ptr()
303 reg = iwl_read32(trans, CSR_UCODE_DRV_GP1); in iwl_pcie_txq_inc_wr_ptr()
306 IWL_DEBUG_INFO(trans, "Tx queue %d requesting wakeup, GP1 = 0x%x\n", in iwl_pcie_txq_inc_wr_ptr()
308 iwl_set_bit(trans, CSR_GP_CNTRL, in iwl_pcie_txq_inc_wr_ptr()
319 IWL_DEBUG_TX(trans, "Q:%d WR: 0x%x\n", txq_id, txq->q.write_ptr); in iwl_pcie_txq_inc_wr_ptr()
320 iwl_write32(trans, HBUS_TARG_WRPTR, txq->q.write_ptr | (txq_id << 8)); in iwl_pcie_txq_inc_wr_ptr()
323 void iwl_pcie_txq_check_wrptrs(struct iwl_trans *trans) in iwl_pcie_txq_check_wrptrs() argument
325 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_check_wrptrs()
328 for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) { in iwl_pcie_txq_check_wrptrs()
333 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_pcie_txq_check_wrptrs()
372 static void iwl_pcie_tfd_unmap(struct iwl_trans *trans, in iwl_pcie_tfd_unmap() argument
383 IWL_ERR(trans, "Too many chunks: %i\n", num_tbs); in iwl_pcie_tfd_unmap()
391 dma_unmap_single(trans->dev, iwl_pcie_tfd_tb_get_addr(tfd, i), in iwl_pcie_tfd_unmap()
407 static void iwl_pcie_txq_free_tfd(struct iwl_trans *trans, struct iwl_txq *txq) in iwl_pcie_txq_free_tfd() argument
422 iwl_pcie_tfd_unmap(trans, &txq->entries[idx].meta, &tfd_tmp[rd_ptr]); in iwl_pcie_txq_free_tfd()
435 iwl_op_mode_free_skb(trans->op_mode, skb); in iwl_pcie_txq_free_tfd()
441 static int iwl_pcie_txq_build_tfd(struct iwl_trans *trans, struct iwl_txq *txq, in iwl_pcie_txq_build_tfd() argument
459 IWL_ERR(trans, "Error can not send more than %d chunks\n", in iwl_pcie_txq_build_tfd()
473 static int iwl_pcie_txq_alloc(struct iwl_trans *trans, in iwl_pcie_txq_alloc() argument
477 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_alloc()
509 txq->tfds = dma_alloc_coherent(trans->dev, tfd_sz, in iwl_pcie_txq_alloc()
521 txq->scratchbufs = dma_alloc_coherent(trans->dev, scratchbuf_sz, in iwl_pcie_txq_alloc()
531 dma_free_coherent(trans->dev, tfd_sz, txq->tfds, txq->q.dma_addr); in iwl_pcie_txq_alloc()
543 static int iwl_pcie_txq_init(struct iwl_trans *trans, struct iwl_txq *txq, in iwl_pcie_txq_init() argument
565 iwl_write_direct32(trans, FH_MEM_CBBC_QUEUE(txq_id), in iwl_pcie_txq_init()
574 static void iwl_pcie_txq_unmap(struct iwl_trans *trans, int txq_id) in iwl_pcie_txq_unmap() argument
576 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_unmap()
582 IWL_DEBUG_TX_REPLY(trans, "Q %d Free %d\n", in iwl_pcie_txq_unmap()
584 iwl_pcie_txq_free_tfd(trans, txq); in iwl_pcie_txq_unmap()
591 iwl_wake_queue(trans, txq); in iwl_pcie_txq_unmap()
602 static void iwl_pcie_txq_free(struct iwl_trans *trans, int txq_id) in iwl_pcie_txq_free() argument
604 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_free()
606 struct device *dev = trans->dev; in iwl_pcie_txq_free()
612 iwl_pcie_txq_unmap(trans, txq_id); in iwl_pcie_txq_free()
643 void iwl_pcie_tx_start(struct iwl_trans *trans, u32 scd_base_addr) in iwl_pcie_tx_start() argument
645 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_start()
646 int nq = trans->cfg->base_params->num_of_queues; in iwl_pcie_tx_start()
657 iwl_read_prph(trans, SCD_SRAM_BASE_ADDR); in iwl_pcie_tx_start()
663 iwl_trans_write_mem(trans, trans_pcie->scd_base_addr + in iwl_pcie_tx_start()
667 iwl_write_prph(trans, SCD_DRAM_BASE_ADDR, in iwl_pcie_tx_start()
673 if (trans->cfg->base_params->scd_chain_ext_wa) in iwl_pcie_tx_start()
674 iwl_write_prph(trans, SCD_CHAINEXT_EN, 0); in iwl_pcie_tx_start()
676 iwl_trans_ac_txq_enable(trans, trans_pcie->cmd_queue, in iwl_pcie_tx_start()
681 iwl_scd_activate_fifos(trans); in iwl_pcie_tx_start()
685 iwl_write_direct32(trans, FH_TCSR_CHNL_TX_CONFIG_REG(chan), in iwl_pcie_tx_start()
690 reg_val = iwl_read_direct32(trans, FH_TX_CHICKEN_BITS_REG); in iwl_pcie_tx_start()
691 iwl_write_direct32(trans, FH_TX_CHICKEN_BITS_REG, in iwl_pcie_tx_start()
695 if (trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) in iwl_pcie_tx_start()
696 iwl_clear_bits_prph(trans, APMG_PCIDEV_STT_REG, in iwl_pcie_tx_start()
700 void iwl_trans_pcie_tx_reset(struct iwl_trans *trans) in iwl_trans_pcie_tx_reset() argument
702 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_tx_reset()
705 for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues; in iwl_trans_pcie_tx_reset()
709 iwl_write_direct32(trans, FH_MEM_CBBC_QUEUE(txq_id), in iwl_trans_pcie_tx_reset()
711 iwl_pcie_txq_unmap(trans, txq_id); in iwl_trans_pcie_tx_reset()
717 iwl_write_direct32(trans, FH_KW_MEM_ADDR_REG, in iwl_trans_pcie_tx_reset()
725 iwl_pcie_tx_start(trans, 0); in iwl_trans_pcie_tx_reset()
728 static void iwl_pcie_tx_stop_fh(struct iwl_trans *trans) in iwl_pcie_tx_stop_fh() argument
730 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_stop_fh()
737 if (!iwl_trans_grab_nic_access(trans, false, &flags)) in iwl_pcie_tx_stop_fh()
742 iwl_write32(trans, FH_TCSR_CHNL_TX_CONFIG_REG(ch), 0x0); in iwl_pcie_tx_stop_fh()
747 ret = iwl_poll_bit(trans, FH_TSSR_TX_STATUS_REG, mask, mask, 5000); in iwl_pcie_tx_stop_fh()
749 IWL_ERR(trans, in iwl_pcie_tx_stop_fh()
751 ch, iwl_read32(trans, FH_TSSR_TX_STATUS_REG)); in iwl_pcie_tx_stop_fh()
753 iwl_trans_release_nic_access(trans, &flags); in iwl_pcie_tx_stop_fh()
762 int iwl_pcie_tx_stop(struct iwl_trans *trans) in iwl_pcie_tx_stop() argument
764 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_stop()
768 iwl_scd_deactivate_fifos(trans); in iwl_pcie_tx_stop()
771 iwl_pcie_tx_stop_fh(trans); in iwl_pcie_tx_stop()
786 for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues; in iwl_pcie_tx_stop()
788 iwl_pcie_txq_unmap(trans, txq_id); in iwl_pcie_tx_stop()
798 void iwl_pcie_tx_free(struct iwl_trans *trans) in iwl_pcie_tx_free() argument
801 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_free()
806 txq_id < trans->cfg->base_params->num_of_queues; txq_id++) in iwl_pcie_tx_free()
807 iwl_pcie_txq_free(trans, txq_id); in iwl_pcie_tx_free()
813 iwl_pcie_free_dma_ptr(trans, &trans_pcie->kw); in iwl_pcie_tx_free()
815 iwl_pcie_free_dma_ptr(trans, &trans_pcie->scd_bc_tbls); in iwl_pcie_tx_free()
822 static int iwl_pcie_tx_alloc(struct iwl_trans *trans) in iwl_pcie_tx_alloc() argument
826 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_alloc()
828 u16 scd_bc_tbls_size = trans->cfg->base_params->num_of_queues * in iwl_pcie_tx_alloc()
838 ret = iwl_pcie_alloc_dma_ptr(trans, &trans_pcie->scd_bc_tbls, in iwl_pcie_tx_alloc()
841 IWL_ERR(trans, "Scheduler BC Table allocation failed\n"); in iwl_pcie_tx_alloc()
846 ret = iwl_pcie_alloc_dma_ptr(trans, &trans_pcie->kw, IWL_KW_SIZE); in iwl_pcie_tx_alloc()
848 IWL_ERR(trans, "Keep Warm allocation failed\n"); in iwl_pcie_tx_alloc()
852 trans_pcie->txq = kcalloc(trans->cfg->base_params->num_of_queues, in iwl_pcie_tx_alloc()
855 IWL_ERR(trans, "Not enough memory for txq\n"); in iwl_pcie_tx_alloc()
861 for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues; in iwl_pcie_tx_alloc()
865 ret = iwl_pcie_txq_alloc(trans, &trans_pcie->txq[txq_id], in iwl_pcie_tx_alloc()
868 IWL_ERR(trans, "Tx %d queue alloc failed\n", txq_id); in iwl_pcie_tx_alloc()
876 iwl_pcie_tx_free(trans); in iwl_pcie_tx_alloc()
880 int iwl_pcie_tx_init(struct iwl_trans *trans) in iwl_pcie_tx_init() argument
882 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_init()
888 ret = iwl_pcie_tx_alloc(trans); in iwl_pcie_tx_init()
897 iwl_scd_deactivate_fifos(trans); in iwl_pcie_tx_init()
900 iwl_write_direct32(trans, FH_KW_MEM_ADDR_REG, in iwl_pcie_tx_init()
906 for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues; in iwl_pcie_tx_init()
910 ret = iwl_pcie_txq_init(trans, &trans_pcie->txq[txq_id], in iwl_pcie_tx_init()
913 IWL_ERR(trans, "Tx %d queue init failed\n", txq_id); in iwl_pcie_tx_init()
918 if (trans->cfg->base_params->num_of_queues > 20) in iwl_pcie_tx_init()
919 iwl_set_bits_prph(trans, SCD_GP_CTRL, in iwl_pcie_tx_init()
926 iwl_pcie_tx_free(trans); in iwl_pcie_tx_init()
955 void iwl_trans_pcie_reclaim(struct iwl_trans *trans, int txq_id, int ssn, in iwl_trans_pcie_reclaim() argument
958 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_reclaim()
971 IWL_DEBUG_TX_QUEUES(trans, "Q %d inactive - ignoring idx %d\n", in iwl_trans_pcie_reclaim()
979 IWL_DEBUG_TX_REPLY(trans, "[Q %d] %d -> %d (%d)\n", in iwl_trans_pcie_reclaim()
987 IWL_ERR(trans, in iwl_trans_pcie_reclaim()
1008 iwl_pcie_txq_inval_byte_cnt_tbl(trans, txq); in iwl_trans_pcie_reclaim()
1010 iwl_pcie_txq_free_tfd(trans, txq); in iwl_trans_pcie_reclaim()
1016 iwl_wake_queue(trans, txq); in iwl_trans_pcie_reclaim()
1019 IWL_DEBUG_RPM(trans, "Q %d - last tx reclaimed\n", q->id); in iwl_trans_pcie_reclaim()
1020 iwl_trans_pcie_unref(trans); in iwl_trans_pcie_reclaim()
1027 static int iwl_pcie_set_cmd_in_flight(struct iwl_trans *trans, in iwl_pcie_set_cmd_in_flight() argument
1030 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_set_cmd_in_flight()
1038 IWL_DEBUG_RPM(trans, "set ref_cmd_in_flight - ref\n"); in iwl_pcie_set_cmd_in_flight()
1039 iwl_trans_pcie_ref(trans); in iwl_pcie_set_cmd_in_flight()
1048 if (trans->cfg->base_params->apmg_wake_up_wa && in iwl_pcie_set_cmd_in_flight()
1050 __iwl_trans_pcie_set_bit(trans, CSR_GP_CNTRL, in iwl_pcie_set_cmd_in_flight()
1052 if (trans->cfg->device_family == IWL_DEVICE_FAMILY_8000) in iwl_pcie_set_cmd_in_flight()
1055 ret = iwl_poll_bit(trans, CSR_GP_CNTRL, in iwl_pcie_set_cmd_in_flight()
1061 __iwl_trans_pcie_clear_bit(trans, CSR_GP_CNTRL, in iwl_pcie_set_cmd_in_flight()
1063 IWL_ERR(trans, "Failed to wake NIC for hcmd\n"); in iwl_pcie_set_cmd_in_flight()
1072 static int iwl_pcie_clear_cmd_in_flight(struct iwl_trans *trans) in iwl_pcie_clear_cmd_in_flight() argument
1074 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_clear_cmd_in_flight()
1080 IWL_DEBUG_RPM(trans, "clear ref_cmd_in_flight - unref\n"); in iwl_pcie_clear_cmd_in_flight()
1081 iwl_trans_pcie_unref(trans); in iwl_pcie_clear_cmd_in_flight()
1084 if (trans->cfg->base_params->apmg_wake_up_wa) { in iwl_pcie_clear_cmd_in_flight()
1089 __iwl_trans_pcie_clear_bit(trans, CSR_GP_CNTRL, in iwl_pcie_clear_cmd_in_flight()
1102 static void iwl_pcie_cmdq_reclaim(struct iwl_trans *trans, int txq_id, int idx) in iwl_pcie_cmdq_reclaim() argument
1104 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_cmdq_reclaim()
1113 IWL_ERR(trans, in iwl_pcie_cmdq_reclaim()
1124 IWL_ERR(trans, "HCMD skipped: index (%d) %d %d\n", in iwl_pcie_cmdq_reclaim()
1126 iwl_force_nmi(trans); in iwl_pcie_cmdq_reclaim()
1132 iwl_pcie_clear_cmd_in_flight(trans); in iwl_pcie_cmdq_reclaim()
1139 static int iwl_pcie_txq_set_ratid_map(struct iwl_trans *trans, u16 ra_tid, in iwl_pcie_txq_set_ratid_map() argument
1142 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_set_ratid_map()
1152 tbl_dw = iwl_trans_read_mem32(trans, tbl_dw_addr); in iwl_pcie_txq_set_ratid_map()
1159 iwl_trans_write_mem32(trans, tbl_dw_addr, tbl_dw); in iwl_pcie_txq_set_ratid_map()
1168 void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, u16 ssn, in iwl_trans_pcie_txq_enable() argument
1172 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_txq_enable()
1187 iwl_scd_enable_set_active(trans, 0); in iwl_trans_pcie_txq_enable()
1190 iwl_scd_txq_set_inactive(trans, txq_id); in iwl_trans_pcie_txq_enable()
1194 iwl_scd_txq_set_chain(trans, txq_id); in iwl_trans_pcie_txq_enable()
1200 iwl_pcie_txq_set_ratid_map(trans, ra_tid, txq_id); in iwl_trans_pcie_txq_enable()
1203 iwl_scd_txq_enable_agg(trans, txq_id); in iwl_trans_pcie_txq_enable()
1211 iwl_scd_txq_disable_agg(trans, txq_id); in iwl_trans_pcie_txq_enable()
1221 iwl_write_direct32(trans, HBUS_TARG_WRPTR, in iwl_trans_pcie_txq_enable()
1227 iwl_write_prph(trans, SCD_QUEUE_RDPTR(txq_id), ssn); in iwl_trans_pcie_txq_enable()
1230 iwl_trans_write_mem32(trans, trans_pcie->scd_base_addr + in iwl_trans_pcie_txq_enable()
1232 iwl_trans_write_mem32(trans, in iwl_trans_pcie_txq_enable()
1241 iwl_write_prph(trans, SCD_QUEUE_STATUS_BITS(txq_id), in iwl_trans_pcie_txq_enable()
1250 iwl_scd_enable_set_active(trans, BIT(txq_id)); in iwl_trans_pcie_txq_enable()
1252 IWL_DEBUG_TX_QUEUES(trans, in iwl_trans_pcie_txq_enable()
1256 IWL_DEBUG_TX_QUEUES(trans, in iwl_trans_pcie_txq_enable()
1264 void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id, in iwl_trans_pcie_txq_disable() argument
1267 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_txq_disable()
1282 WARN_ONCE(test_bit(STATUS_DEVICE_ENABLED, &trans->status), in iwl_trans_pcie_txq_disable()
1288 iwl_scd_txq_set_inactive(trans, txq_id); in iwl_trans_pcie_txq_disable()
1290 iwl_trans_write_mem(trans, stts_addr, (void *)zero_val, in iwl_trans_pcie_txq_disable()
1294 iwl_pcie_txq_unmap(trans, txq_id); in iwl_trans_pcie_txq_disable()
1297 IWL_DEBUG_TX_QUEUES(trans, "Deactivate queue %d\n", txq_id); in iwl_trans_pcie_txq_disable()
1311 static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans, in iwl_pcie_enqueue_hcmd() argument
1314 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_enqueue_hcmd()
1406 IWL_ERR(trans, "No space in command queue\n"); in iwl_pcie_enqueue_hcmd()
1407 iwl_op_mode_cmd_queue_full(trans->op_mode); in iwl_pcie_enqueue_hcmd()
1468 IWL_DEBUG_HC(trans, in iwl_pcie_enqueue_hcmd()
1477 iwl_pcie_txq_build_tfd(trans, txq, in iwl_pcie_enqueue_hcmd()
1483 phys_addr = dma_map_single(trans->dev, in iwl_pcie_enqueue_hcmd()
1487 if (dma_mapping_error(trans->dev, phys_addr)) { in iwl_pcie_enqueue_hcmd()
1488 iwl_pcie_tfd_unmap(trans, out_meta, in iwl_pcie_enqueue_hcmd()
1494 iwl_pcie_txq_build_tfd(trans, txq, phys_addr, in iwl_pcie_enqueue_hcmd()
1509 phys_addr = dma_map_single(trans->dev, (void *)data, in iwl_pcie_enqueue_hcmd()
1511 if (dma_mapping_error(trans->dev, phys_addr)) { in iwl_pcie_enqueue_hcmd()
1512 iwl_pcie_tfd_unmap(trans, out_meta, in iwl_pcie_enqueue_hcmd()
1518 iwl_pcie_txq_build_tfd(trans, txq, phys_addr, cmdlen[i], false); in iwl_pcie_enqueue_hcmd()
1526 trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, &out_cmd->hdr); in iwl_pcie_enqueue_hcmd()
1533 ret = iwl_pcie_set_cmd_in_flight(trans, cmd); in iwl_pcie_enqueue_hcmd()
1542 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_pcie_enqueue_hcmd()
1564 void iwl_pcie_hcmd_complete(struct iwl_trans *trans, in iwl_pcie_hcmd_complete() argument
1574 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_hcmd_complete()
1585 iwl_print_hex_error(trans, pkt, 32); in iwl_pcie_hcmd_complete()
1595 iwl_pcie_tfd_unmap(trans, meta, &txq->tfds[index]); in iwl_pcie_hcmd_complete()
1607 iwl_pcie_cmdq_reclaim(trans, txq_id, index); in iwl_pcie_hcmd_complete()
1610 if (!test_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status)) { in iwl_pcie_hcmd_complete()
1611 IWL_WARN(trans, in iwl_pcie_hcmd_complete()
1615 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_hcmd_complete()
1616 IWL_DEBUG_INFO(trans, "Clearing HCMD_ACTIVE for command %s\n", in iwl_pcie_hcmd_complete()
1628 static int iwl_pcie_send_hcmd_async(struct iwl_trans *trans, in iwl_pcie_send_hcmd_async() argument
1631 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_send_hcmd_async()
1638 ret = iwl_pcie_enqueue_hcmd(trans, cmd); in iwl_pcie_send_hcmd_async()
1640 IWL_ERR(trans, in iwl_pcie_send_hcmd_async()
1648 static int iwl_pcie_send_hcmd_sync(struct iwl_trans *trans, in iwl_pcie_send_hcmd_sync() argument
1651 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_send_hcmd_sync()
1655 IWL_DEBUG_INFO(trans, "Attempting to send sync command %s\n", in iwl_pcie_send_hcmd_sync()
1659 &trans->status), in iwl_pcie_send_hcmd_sync()
1664 IWL_DEBUG_INFO(trans, "Setting HCMD_ACTIVE for command %s\n", in iwl_pcie_send_hcmd_sync()
1667 cmd_idx = iwl_pcie_enqueue_hcmd(trans, cmd); in iwl_pcie_send_hcmd_sync()
1670 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_send_hcmd_sync()
1671 IWL_ERR(trans, in iwl_pcie_send_hcmd_sync()
1679 &trans->status), in iwl_pcie_send_hcmd_sync()
1685 IWL_ERR(trans, "Error sending %s: time out after %dms.\n", in iwl_pcie_send_hcmd_sync()
1689 IWL_ERR(trans, "Current CMD queue read_ptr %d write_ptr %d\n", in iwl_pcie_send_hcmd_sync()
1692 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_send_hcmd_sync()
1693 IWL_DEBUG_INFO(trans, "Clearing HCMD_ACTIVE for command %s\n", in iwl_pcie_send_hcmd_sync()
1697 iwl_force_nmi(trans); in iwl_pcie_send_hcmd_sync()
1698 iwl_trans_fw_error(trans); in iwl_pcie_send_hcmd_sync()
1703 if (test_bit(STATUS_FW_ERROR, &trans->status)) { in iwl_pcie_send_hcmd_sync()
1704 IWL_ERR(trans, "FW error in SYNC CMD %s\n", in iwl_pcie_send_hcmd_sync()
1712 test_bit(STATUS_RFKILL, &trans->status)) { in iwl_pcie_send_hcmd_sync()
1713 IWL_DEBUG_RF_KILL(trans, "RFKILL in SYNC CMD... no rsp\n"); in iwl_pcie_send_hcmd_sync()
1719 IWL_ERR(trans, "Error: Response NULL in '%s'\n", in iwl_pcie_send_hcmd_sync()
1747 int iwl_trans_pcie_send_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) in iwl_trans_pcie_send_hcmd() argument
1750 test_bit(STATUS_RFKILL, &trans->status)) { in iwl_trans_pcie_send_hcmd()
1751 IWL_DEBUG_RF_KILL(trans, "Dropping CMD 0x%x: RF KILL\n", in iwl_trans_pcie_send_hcmd()
1757 return iwl_pcie_send_hcmd_async(trans, cmd); in iwl_trans_pcie_send_hcmd()
1760 return iwl_pcie_send_hcmd_sync(trans, cmd); in iwl_trans_pcie_send_hcmd()
1763 int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb, in iwl_trans_pcie_tx() argument
1766 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_tx()
1835 iwl_pcie_txq_build_tfd(trans, txq, tb0_phys, in iwl_trans_pcie_tx()
1843 tb1_phys = dma_map_single(trans->dev, tb1_addr, tb1_len, DMA_TO_DEVICE); in iwl_trans_pcie_tx()
1844 if (unlikely(dma_mapping_error(trans->dev, tb1_phys))) in iwl_trans_pcie_tx()
1846 iwl_pcie_txq_build_tfd(trans, txq, tb1_phys, tb1_len, false); in iwl_trans_pcie_tx()
1854 dma_addr_t tb2_phys = dma_map_single(trans->dev, in iwl_trans_pcie_tx()
1857 if (unlikely(dma_mapping_error(trans->dev, tb2_phys))) { in iwl_trans_pcie_tx()
1858 iwl_pcie_tfd_unmap(trans, out_meta, in iwl_trans_pcie_tx()
1862 iwl_pcie_txq_build_tfd(trans, txq, tb2_phys, tb2_len, false); in iwl_trans_pcie_tx()
1866 iwl_pcie_txq_update_byte_cnt_tbl(trans, txq, le16_to_cpu(tx_cmd->len)); in iwl_trans_pcie_tx()
1868 trace_iwlwifi_dev_tx(trans->dev, skb, in iwl_trans_pcie_tx()
1873 trace_iwlwifi_dev_tx_data(trans->dev, skb, in iwl_trans_pcie_tx()
1882 IWL_DEBUG_RPM(trans, "Q: %d first tx - take ref\n", q->id); in iwl_trans_pcie_tx()
1883 iwl_trans_pcie_ref(trans); in iwl_trans_pcie_tx()
1889 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_trans_pcie_tx()
1897 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_trans_pcie_tx()
1899 iwl_stop_queue(trans, txq); in iwl_trans_pcie_tx()