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()
252 static void iwl_pcie_txq_inval_byte_cnt_tbl(struct iwl_trans *trans, in iwl_pcie_txq_inval_byte_cnt_tbl() argument
256 IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_inval_byte_cnt_tbl()
281 static void iwl_pcie_txq_inc_wr_ptr(struct iwl_trans *trans, in iwl_pcie_txq_inc_wr_ptr() argument
284 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_inc_wr_ptr()
296 if (!trans->cfg->base_params->shadow_reg_enable && in iwl_pcie_txq_inc_wr_ptr()
298 test_bit(STATUS_TPOWER_PMI, &trans->status)) { in iwl_pcie_txq_inc_wr_ptr()
304 reg = iwl_read32(trans, CSR_UCODE_DRV_GP1); in iwl_pcie_txq_inc_wr_ptr()
307 IWL_DEBUG_INFO(trans, "Tx queue %d requesting wakeup, GP1 = 0x%x\n", in iwl_pcie_txq_inc_wr_ptr()
309 iwl_set_bit(trans, CSR_GP_CNTRL, in iwl_pcie_txq_inc_wr_ptr()
320 IWL_DEBUG_TX(trans, "Q:%d WR: 0x%x\n", txq_id, txq->q.write_ptr); in iwl_pcie_txq_inc_wr_ptr()
321 iwl_write32(trans, HBUS_TARG_WRPTR, txq->q.write_ptr | (txq_id << 8)); in iwl_pcie_txq_inc_wr_ptr()
324 void iwl_pcie_txq_check_wrptrs(struct iwl_trans *trans) in iwl_pcie_txq_check_wrptrs() argument
326 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_check_wrptrs()
329 for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) { in iwl_pcie_txq_check_wrptrs()
334 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_pcie_txq_check_wrptrs()
373 static void iwl_pcie_tfd_unmap(struct iwl_trans *trans, in iwl_pcie_tfd_unmap() argument
384 IWL_ERR(trans, "Too many chunks: %i\n", num_tbs); in iwl_pcie_tfd_unmap()
393 dma_unmap_page(trans->dev, in iwl_pcie_tfd_unmap()
398 dma_unmap_single(trans->dev, in iwl_pcie_tfd_unmap()
415 static void iwl_pcie_txq_free_tfd(struct iwl_trans *trans, struct iwl_txq *txq) in iwl_pcie_txq_free_tfd() argument
430 iwl_pcie_tfd_unmap(trans, &txq->entries[idx].meta, &tfd_tmp[rd_ptr]); in iwl_pcie_txq_free_tfd()
443 iwl_op_mode_free_skb(trans->op_mode, skb); in iwl_pcie_txq_free_tfd()
449 static int iwl_pcie_txq_build_tfd(struct iwl_trans *trans, struct iwl_txq *txq, in iwl_pcie_txq_build_tfd() argument
467 IWL_ERR(trans, "Error can not send more than %d chunks\n", in iwl_pcie_txq_build_tfd()
481 static int iwl_pcie_txq_alloc(struct iwl_trans *trans, in iwl_pcie_txq_alloc() argument
485 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_alloc()
517 txq->tfds = dma_alloc_coherent(trans->dev, tfd_sz, in iwl_pcie_txq_alloc()
529 txq->scratchbufs = dma_alloc_coherent(trans->dev, scratchbuf_sz, in iwl_pcie_txq_alloc()
539 dma_free_coherent(trans->dev, tfd_sz, txq->tfds, txq->q.dma_addr); in iwl_pcie_txq_alloc()
551 static int iwl_pcie_txq_init(struct iwl_trans *trans, struct iwl_txq *txq, in iwl_pcie_txq_init() argument
573 iwl_write_direct32(trans, FH_MEM_CBBC_QUEUE(txq_id), in iwl_pcie_txq_init()
582 static void iwl_pcie_txq_unmap(struct iwl_trans *trans, int txq_id) in iwl_pcie_txq_unmap() argument
584 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_unmap()
590 IWL_DEBUG_TX_REPLY(trans, "Q %d Free %d\n", in iwl_pcie_txq_unmap()
592 iwl_pcie_txq_free_tfd(trans, txq); in iwl_pcie_txq_unmap()
599 iwl_wake_queue(trans, txq); in iwl_pcie_txq_unmap()
610 static void iwl_pcie_txq_free(struct iwl_trans *trans, int txq_id) in iwl_pcie_txq_free() argument
612 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_free()
614 struct device *dev = trans->dev; in iwl_pcie_txq_free()
620 iwl_pcie_txq_unmap(trans, txq_id); in iwl_pcie_txq_free()
651 void iwl_pcie_tx_start(struct iwl_trans *trans, u32 scd_base_addr) in iwl_pcie_tx_start() argument
653 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_start()
654 int nq = trans->cfg->base_params->num_of_queues; in iwl_pcie_tx_start()
665 iwl_read_prph(trans, SCD_SRAM_BASE_ADDR); in iwl_pcie_tx_start()
671 iwl_trans_write_mem(trans, trans_pcie->scd_base_addr + in iwl_pcie_tx_start()
675 iwl_write_prph(trans, SCD_DRAM_BASE_ADDR, in iwl_pcie_tx_start()
681 if (trans->cfg->base_params->scd_chain_ext_wa) in iwl_pcie_tx_start()
682 iwl_write_prph(trans, SCD_CHAINEXT_EN, 0); in iwl_pcie_tx_start()
684 iwl_trans_ac_txq_enable(trans, trans_pcie->cmd_queue, in iwl_pcie_tx_start()
689 iwl_scd_activate_fifos(trans); in iwl_pcie_tx_start()
693 iwl_write_direct32(trans, FH_TCSR_CHNL_TX_CONFIG_REG(chan), in iwl_pcie_tx_start()
698 reg_val = iwl_read_direct32(trans, FH_TX_CHICKEN_BITS_REG); in iwl_pcie_tx_start()
699 iwl_write_direct32(trans, FH_TX_CHICKEN_BITS_REG, in iwl_pcie_tx_start()
703 if (trans->cfg->device_family != IWL_DEVICE_FAMILY_8000) in iwl_pcie_tx_start()
704 iwl_clear_bits_prph(trans, APMG_PCIDEV_STT_REG, in iwl_pcie_tx_start()
708 void iwl_trans_pcie_tx_reset(struct iwl_trans *trans) in iwl_trans_pcie_tx_reset() argument
710 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_tx_reset()
713 for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues; in iwl_trans_pcie_tx_reset()
717 iwl_write_direct32(trans, FH_MEM_CBBC_QUEUE(txq_id), in iwl_trans_pcie_tx_reset()
719 iwl_pcie_txq_unmap(trans, txq_id); in iwl_trans_pcie_tx_reset()
725 iwl_write_direct32(trans, FH_KW_MEM_ADDR_REG, in iwl_trans_pcie_tx_reset()
733 iwl_pcie_tx_start(trans, 0); in iwl_trans_pcie_tx_reset()
736 static void iwl_pcie_tx_stop_fh(struct iwl_trans *trans) in iwl_pcie_tx_stop_fh() argument
738 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_stop_fh()
745 if (!iwl_trans_grab_nic_access(trans, false, &flags)) in iwl_pcie_tx_stop_fh()
750 iwl_write32(trans, FH_TCSR_CHNL_TX_CONFIG_REG(ch), 0x0); in iwl_pcie_tx_stop_fh()
755 ret = iwl_poll_bit(trans, FH_TSSR_TX_STATUS_REG, mask, mask, 5000); in iwl_pcie_tx_stop_fh()
757 IWL_ERR(trans, in iwl_pcie_tx_stop_fh()
759 ch, iwl_read32(trans, FH_TSSR_TX_STATUS_REG)); in iwl_pcie_tx_stop_fh()
761 iwl_trans_release_nic_access(trans, &flags); in iwl_pcie_tx_stop_fh()
770 int iwl_pcie_tx_stop(struct iwl_trans *trans) in iwl_pcie_tx_stop() argument
772 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_stop()
776 iwl_scd_deactivate_fifos(trans); in iwl_pcie_tx_stop()
779 iwl_pcie_tx_stop_fh(trans); in iwl_pcie_tx_stop()
794 for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues; in iwl_pcie_tx_stop()
796 iwl_pcie_txq_unmap(trans, txq_id); in iwl_pcie_tx_stop()
806 void iwl_pcie_tx_free(struct iwl_trans *trans) in iwl_pcie_tx_free() argument
809 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_free()
814 txq_id < trans->cfg->base_params->num_of_queues; txq_id++) in iwl_pcie_tx_free()
815 iwl_pcie_txq_free(trans, txq_id); in iwl_pcie_tx_free()
821 iwl_pcie_free_dma_ptr(trans, &trans_pcie->kw); in iwl_pcie_tx_free()
823 iwl_pcie_free_dma_ptr(trans, &trans_pcie->scd_bc_tbls); in iwl_pcie_tx_free()
830 static int iwl_pcie_tx_alloc(struct iwl_trans *trans) in iwl_pcie_tx_alloc() argument
834 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_alloc()
836 u16 scd_bc_tbls_size = trans->cfg->base_params->num_of_queues * in iwl_pcie_tx_alloc()
846 ret = iwl_pcie_alloc_dma_ptr(trans, &trans_pcie->scd_bc_tbls, in iwl_pcie_tx_alloc()
849 IWL_ERR(trans, "Scheduler BC Table allocation failed\n"); in iwl_pcie_tx_alloc()
854 ret = iwl_pcie_alloc_dma_ptr(trans, &trans_pcie->kw, IWL_KW_SIZE); in iwl_pcie_tx_alloc()
856 IWL_ERR(trans, "Keep Warm allocation failed\n"); in iwl_pcie_tx_alloc()
860 trans_pcie->txq = kcalloc(trans->cfg->base_params->num_of_queues, in iwl_pcie_tx_alloc()
863 IWL_ERR(trans, "Not enough memory for txq\n"); in iwl_pcie_tx_alloc()
869 for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues; in iwl_pcie_tx_alloc()
873 ret = iwl_pcie_txq_alloc(trans, &trans_pcie->txq[txq_id], in iwl_pcie_tx_alloc()
876 IWL_ERR(trans, "Tx %d queue alloc failed\n", txq_id); in iwl_pcie_tx_alloc()
884 iwl_pcie_tx_free(trans); in iwl_pcie_tx_alloc()
888 int iwl_pcie_tx_init(struct iwl_trans *trans) in iwl_pcie_tx_init() argument
890 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_tx_init()
896 ret = iwl_pcie_tx_alloc(trans); in iwl_pcie_tx_init()
905 iwl_scd_deactivate_fifos(trans); in iwl_pcie_tx_init()
908 iwl_write_direct32(trans, FH_KW_MEM_ADDR_REG, in iwl_pcie_tx_init()
914 for (txq_id = 0; txq_id < trans->cfg->base_params->num_of_queues; in iwl_pcie_tx_init()
918 ret = iwl_pcie_txq_init(trans, &trans_pcie->txq[txq_id], in iwl_pcie_tx_init()
921 IWL_ERR(trans, "Tx %d queue init failed\n", txq_id); in iwl_pcie_tx_init()
926 iwl_set_bits_prph(trans, SCD_GP_CTRL, SCD_GP_CTRL_AUTO_ACTIVE_MODE); in iwl_pcie_tx_init()
927 if (trans->cfg->base_params->num_of_queues > 20) in iwl_pcie_tx_init()
928 iwl_set_bits_prph(trans, SCD_GP_CTRL, in iwl_pcie_tx_init()
935 iwl_pcie_tx_free(trans); in iwl_pcie_tx_init()
964 void iwl_trans_pcie_reclaim(struct iwl_trans *trans, int txq_id, int ssn, in iwl_trans_pcie_reclaim() argument
967 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_reclaim()
980 IWL_DEBUG_TX_QUEUES(trans, "Q %d inactive - ignoring idx %d\n", in iwl_trans_pcie_reclaim()
988 IWL_DEBUG_TX_REPLY(trans, "[Q %d] %d -> %d (%d)\n", in iwl_trans_pcie_reclaim()
996 IWL_ERR(trans, in iwl_trans_pcie_reclaim()
1017 iwl_pcie_txq_inval_byte_cnt_tbl(trans, txq); in iwl_trans_pcie_reclaim()
1019 iwl_pcie_txq_free_tfd(trans, txq); in iwl_trans_pcie_reclaim()
1025 iwl_wake_queue(trans, txq); in iwl_trans_pcie_reclaim()
1028 IWL_DEBUG_RPM(trans, "Q %d - last tx reclaimed\n", q->id); in iwl_trans_pcie_reclaim()
1029 iwl_trans_pcie_unref(trans); in iwl_trans_pcie_reclaim()
1036 static int iwl_pcie_set_cmd_in_flight(struct iwl_trans *trans, in iwl_pcie_set_cmd_in_flight() argument
1039 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_set_cmd_in_flight()
1047 IWL_DEBUG_RPM(trans, "set ref_cmd_in_flight - ref\n"); in iwl_pcie_set_cmd_in_flight()
1048 iwl_trans_pcie_ref(trans); in iwl_pcie_set_cmd_in_flight()
1057 if (trans->cfg->base_params->apmg_wake_up_wa && in iwl_pcie_set_cmd_in_flight()
1059 __iwl_trans_pcie_set_bit(trans, CSR_GP_CNTRL, in iwl_pcie_set_cmd_in_flight()
1062 ret = iwl_poll_bit(trans, CSR_GP_CNTRL, in iwl_pcie_set_cmd_in_flight()
1068 __iwl_trans_pcie_clear_bit(trans, CSR_GP_CNTRL, in iwl_pcie_set_cmd_in_flight()
1070 IWL_ERR(trans, "Failed to wake NIC for hcmd\n"); in iwl_pcie_set_cmd_in_flight()
1079 static int iwl_pcie_clear_cmd_in_flight(struct iwl_trans *trans) in iwl_pcie_clear_cmd_in_flight() argument
1081 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_clear_cmd_in_flight()
1087 IWL_DEBUG_RPM(trans, "clear ref_cmd_in_flight - unref\n"); in iwl_pcie_clear_cmd_in_flight()
1088 iwl_trans_pcie_unref(trans); in iwl_pcie_clear_cmd_in_flight()
1091 if (trans->cfg->base_params->apmg_wake_up_wa) { in iwl_pcie_clear_cmd_in_flight()
1096 __iwl_trans_pcie_clear_bit(trans, CSR_GP_CNTRL, in iwl_pcie_clear_cmd_in_flight()
1109 static void iwl_pcie_cmdq_reclaim(struct iwl_trans *trans, int txq_id, int idx) in iwl_pcie_cmdq_reclaim() argument
1111 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_cmdq_reclaim()
1120 IWL_ERR(trans, in iwl_pcie_cmdq_reclaim()
1131 IWL_ERR(trans, "HCMD skipped: index (%d) %d %d\n", in iwl_pcie_cmdq_reclaim()
1133 iwl_force_nmi(trans); in iwl_pcie_cmdq_reclaim()
1139 iwl_pcie_clear_cmd_in_flight(trans); in iwl_pcie_cmdq_reclaim()
1146 static int iwl_pcie_txq_set_ratid_map(struct iwl_trans *trans, u16 ra_tid, in iwl_pcie_txq_set_ratid_map() argument
1149 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_txq_set_ratid_map()
1159 tbl_dw = iwl_trans_read_mem32(trans, tbl_dw_addr); in iwl_pcie_txq_set_ratid_map()
1166 iwl_trans_write_mem32(trans, tbl_dw_addr, tbl_dw); in iwl_pcie_txq_set_ratid_map()
1175 void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, u16 ssn, in iwl_trans_pcie_txq_enable() argument
1179 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_txq_enable()
1194 iwl_scd_enable_set_active(trans, 0); in iwl_trans_pcie_txq_enable()
1197 iwl_scd_txq_set_inactive(trans, txq_id); in iwl_trans_pcie_txq_enable()
1201 iwl_scd_txq_set_chain(trans, txq_id); in iwl_trans_pcie_txq_enable()
1207 iwl_pcie_txq_set_ratid_map(trans, ra_tid, txq_id); in iwl_trans_pcie_txq_enable()
1210 iwl_scd_txq_enable_agg(trans, txq_id); in iwl_trans_pcie_txq_enable()
1218 iwl_scd_txq_disable_agg(trans, txq_id); in iwl_trans_pcie_txq_enable()
1228 iwl_write_direct32(trans, HBUS_TARG_WRPTR, in iwl_trans_pcie_txq_enable()
1234 iwl_write_prph(trans, SCD_QUEUE_RDPTR(txq_id), ssn); in iwl_trans_pcie_txq_enable()
1237 iwl_trans_write_mem32(trans, trans_pcie->scd_base_addr + in iwl_trans_pcie_txq_enable()
1239 iwl_trans_write_mem32(trans, in iwl_trans_pcie_txq_enable()
1248 iwl_write_prph(trans, SCD_QUEUE_STATUS_BITS(txq_id), in iwl_trans_pcie_txq_enable()
1257 iwl_scd_enable_set_active(trans, BIT(txq_id)); in iwl_trans_pcie_txq_enable()
1259 IWL_DEBUG_TX_QUEUES(trans, in iwl_trans_pcie_txq_enable()
1263 IWL_DEBUG_TX_QUEUES(trans, in iwl_trans_pcie_txq_enable()
1271 void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id, in iwl_trans_pcie_txq_disable() argument
1274 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_txq_disable()
1289 WARN_ONCE(test_bit(STATUS_DEVICE_ENABLED, &trans->status), in iwl_trans_pcie_txq_disable()
1295 iwl_scd_txq_set_inactive(trans, txq_id); in iwl_trans_pcie_txq_disable()
1297 iwl_trans_write_mem(trans, stts_addr, (void *)zero_val, in iwl_trans_pcie_txq_disable()
1301 iwl_pcie_txq_unmap(trans, txq_id); in iwl_trans_pcie_txq_disable()
1304 IWL_DEBUG_TX_QUEUES(trans, "Deactivate queue %d\n", txq_id); in iwl_trans_pcie_txq_disable()
1318 static int iwl_pcie_enqueue_hcmd(struct iwl_trans *trans, in iwl_pcie_enqueue_hcmd() argument
1321 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_enqueue_hcmd()
1424 IWL_ERR(trans, "No space in command queue\n"); in iwl_pcie_enqueue_hcmd()
1425 iwl_op_mode_cmd_queue_full(trans->op_mode); in iwl_pcie_enqueue_hcmd()
1502 IWL_DEBUG_HC(trans, in iwl_pcie_enqueue_hcmd()
1512 iwl_pcie_txq_build_tfd(trans, txq, in iwl_pcie_enqueue_hcmd()
1518 phys_addr = dma_map_single(trans->dev, in iwl_pcie_enqueue_hcmd()
1522 if (dma_mapping_error(trans->dev, phys_addr)) { in iwl_pcie_enqueue_hcmd()
1523 iwl_pcie_tfd_unmap(trans, out_meta, in iwl_pcie_enqueue_hcmd()
1529 iwl_pcie_txq_build_tfd(trans, txq, phys_addr, in iwl_pcie_enqueue_hcmd()
1544 phys_addr = dma_map_single(trans->dev, (void *)data, in iwl_pcie_enqueue_hcmd()
1546 if (dma_mapping_error(trans->dev, phys_addr)) { in iwl_pcie_enqueue_hcmd()
1547 iwl_pcie_tfd_unmap(trans, out_meta, in iwl_pcie_enqueue_hcmd()
1553 iwl_pcie_txq_build_tfd(trans, txq, phys_addr, cmdlen[i], false); in iwl_pcie_enqueue_hcmd()
1563 trace_iwlwifi_dev_hcmd(trans->dev, cmd, cmd_size, &out_cmd->hdr_wide); in iwl_pcie_enqueue_hcmd()
1570 ret = iwl_pcie_set_cmd_in_flight(trans, cmd); in iwl_pcie_enqueue_hcmd()
1579 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_pcie_enqueue_hcmd()
1599 void iwl_pcie_hcmd_complete(struct iwl_trans *trans, in iwl_pcie_hcmd_complete() argument
1609 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_hcmd_complete()
1620 iwl_print_hex_error(trans, pkt, 32); in iwl_pcie_hcmd_complete()
1630 iwl_pcie_tfd_unmap(trans, meta, &txq->tfds[index]); in iwl_pcie_hcmd_complete()
1641 iwl_pcie_cmdq_reclaim(trans, txq_id, index); in iwl_pcie_hcmd_complete()
1644 if (!test_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status)) { in iwl_pcie_hcmd_complete()
1645 IWL_WARN(trans, in iwl_pcie_hcmd_complete()
1649 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_hcmd_complete()
1650 IWL_DEBUG_INFO(trans, "Clearing HCMD_ACTIVE for command %s\n", in iwl_pcie_hcmd_complete()
1662 static int iwl_pcie_send_hcmd_async(struct iwl_trans *trans, in iwl_pcie_send_hcmd_async() argument
1665 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_send_hcmd_async()
1672 ret = iwl_pcie_enqueue_hcmd(trans, cmd); in iwl_pcie_send_hcmd_async()
1674 IWL_ERR(trans, in iwl_pcie_send_hcmd_async()
1682 static int iwl_pcie_send_hcmd_sync(struct iwl_trans *trans, in iwl_pcie_send_hcmd_sync() argument
1685 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_send_hcmd_sync()
1689 IWL_DEBUG_INFO(trans, "Attempting to send sync command %s\n", in iwl_pcie_send_hcmd_sync()
1693 &trans->status), in iwl_pcie_send_hcmd_sync()
1698 IWL_DEBUG_INFO(trans, "Setting HCMD_ACTIVE for command %s\n", in iwl_pcie_send_hcmd_sync()
1701 cmd_idx = iwl_pcie_enqueue_hcmd(trans, cmd); in iwl_pcie_send_hcmd_sync()
1704 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_send_hcmd_sync()
1705 IWL_ERR(trans, in iwl_pcie_send_hcmd_sync()
1713 &trans->status), in iwl_pcie_send_hcmd_sync()
1719 IWL_ERR(trans, "Error sending %s: time out after %dms.\n", in iwl_pcie_send_hcmd_sync()
1723 IWL_ERR(trans, "Current CMD queue read_ptr %d write_ptr %d\n", in iwl_pcie_send_hcmd_sync()
1726 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_send_hcmd_sync()
1727 IWL_DEBUG_INFO(trans, "Clearing HCMD_ACTIVE for command %s\n", in iwl_pcie_send_hcmd_sync()
1731 iwl_force_nmi(trans); in iwl_pcie_send_hcmd_sync()
1732 iwl_trans_fw_error(trans); in iwl_pcie_send_hcmd_sync()
1737 if (test_bit(STATUS_FW_ERROR, &trans->status)) { in iwl_pcie_send_hcmd_sync()
1738 IWL_ERR(trans, "FW error in SYNC CMD %s\n", in iwl_pcie_send_hcmd_sync()
1746 test_bit(STATUS_RFKILL, &trans->status)) { in iwl_pcie_send_hcmd_sync()
1747 IWL_DEBUG_RF_KILL(trans, "RFKILL in SYNC CMD... no rsp\n"); in iwl_pcie_send_hcmd_sync()
1753 IWL_ERR(trans, "Error: Response NULL in '%s'\n", in iwl_pcie_send_hcmd_sync()
1781 int iwl_trans_pcie_send_hcmd(struct iwl_trans *trans, struct iwl_host_cmd *cmd) in iwl_trans_pcie_send_hcmd() argument
1784 test_bit(STATUS_RFKILL, &trans->status)) { in iwl_trans_pcie_send_hcmd()
1785 IWL_DEBUG_RF_KILL(trans, "Dropping CMD 0x%x: RF KILL\n", in iwl_trans_pcie_send_hcmd()
1791 return iwl_pcie_send_hcmd_async(trans, cmd); in iwl_trans_pcie_send_hcmd()
1794 return iwl_pcie_send_hcmd_sync(trans, cmd); in iwl_trans_pcie_send_hcmd()
1797 int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb, in iwl_trans_pcie_tx() argument
1800 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_trans_pcie_tx()
1883 iwl_pcie_txq_build_tfd(trans, txq, tb0_phys, in iwl_trans_pcie_tx()
1891 tb1_phys = dma_map_single(trans->dev, tb1_addr, tb1_len, DMA_TO_DEVICE); in iwl_trans_pcie_tx()
1892 if (unlikely(dma_mapping_error(trans->dev, tb1_phys))) in iwl_trans_pcie_tx()
1894 iwl_pcie_txq_build_tfd(trans, txq, tb1_phys, tb1_len, false); in iwl_trans_pcie_tx()
1902 dma_addr_t tb2_phys = dma_map_single(trans->dev, in iwl_trans_pcie_tx()
1905 if (unlikely(dma_mapping_error(trans->dev, tb2_phys))) { in iwl_trans_pcie_tx()
1906 iwl_pcie_tfd_unmap(trans, out_meta, in iwl_trans_pcie_tx()
1910 iwl_pcie_txq_build_tfd(trans, txq, tb2_phys, tb2_len, false); in iwl_trans_pcie_tx()
1922 tb_phys = skb_frag_dma_map(trans->dev, frag, 0, in iwl_trans_pcie_tx()
1925 if (unlikely(dma_mapping_error(trans->dev, tb_phys))) { in iwl_trans_pcie_tx()
1926 iwl_pcie_tfd_unmap(trans, out_meta, in iwl_trans_pcie_tx()
1930 tb_idx = iwl_pcie_txq_build_tfd(trans, txq, tb_phys, in iwl_trans_pcie_tx()
1937 iwl_pcie_txq_update_byte_cnt_tbl(trans, txq, le16_to_cpu(tx_cmd->len)); in iwl_trans_pcie_tx()
1939 trace_iwlwifi_dev_tx(trans->dev, skb, in iwl_trans_pcie_tx()
1944 trace_iwlwifi_dev_tx_data(trans->dev, skb, in iwl_trans_pcie_tx()
1964 IWL_DEBUG_RPM(trans, "Q: %d first tx - take ref\n", q->id); in iwl_trans_pcie_tx()
1965 iwl_trans_pcie_ref(trans); in iwl_trans_pcie_tx()
1971 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_trans_pcie_tx()
1979 iwl_pcie_txq_inc_wr_ptr(trans, txq); in iwl_trans_pcie_tx()
1981 iwl_stop_queue(trans, txq); in iwl_trans_pcie_tx()