Lines Matching refs:trans
139 int iwl_pcie_rx_stop(struct iwl_trans *trans) in iwl_pcie_rx_stop() argument
141 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwl_pcie_rx_stop()
142 return iwl_poll_direct_bit(trans, FH_MEM_RSSR_RX_STATUS_REG, in iwl_pcie_rx_stop()
149 static void iwl_pcie_rxq_inc_wr_ptr(struct iwl_trans *trans) in iwl_pcie_rxq_inc_wr_ptr() argument
151 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_inc_wr_ptr()
162 if (!trans->cfg->base_params->shadow_reg_enable && in iwl_pcie_rxq_inc_wr_ptr()
163 test_bit(STATUS_TPOWER_PMI, &trans->status)) { in iwl_pcie_rxq_inc_wr_ptr()
164 reg = iwl_read32(trans, CSR_UCODE_DRV_GP1); in iwl_pcie_rxq_inc_wr_ptr()
167 IWL_DEBUG_INFO(trans, "Rx queue requesting wakeup, GP1 = 0x%x\n", in iwl_pcie_rxq_inc_wr_ptr()
169 iwl_set_bit(trans, CSR_GP_CNTRL, in iwl_pcie_rxq_inc_wr_ptr()
177 iwl_write32(trans, FH_RSCSR_CHNL0_WPTR, rxq->write_actual); in iwl_pcie_rxq_inc_wr_ptr()
180 static void iwl_pcie_rxq_check_wrptr(struct iwl_trans *trans) in iwl_pcie_rxq_check_wrptr() argument
182 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_check_wrptr()
190 iwl_pcie_rxq_inc_wr_ptr(trans); in iwl_pcie_rxq_check_wrptr()
208 static void iwl_pcie_rxq_restock(struct iwl_trans *trans) in iwl_pcie_rxq_restock() argument
210 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_restock()
222 if (!test_bit(STATUS_DEVICE_ENABLED, &trans->status)) in iwl_pcie_rxq_restock()
252 iwl_pcie_rxq_inc_wr_ptr(trans); in iwl_pcie_rxq_restock()
266 static void iwl_pcie_rxq_alloc_rbs(struct iwl_trans *trans, gfp_t priority) in iwl_pcie_rxq_alloc_rbs() argument
268 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_alloc_rbs()
292 IWL_DEBUG_INFO(trans, "alloc_pages failed, " in iwl_pcie_rxq_alloc_rbs()
298 IWL_CRIT(trans, "Failed to alloc_pages with %s." in iwl_pcie_rxq_alloc_rbs()
325 dma_map_page(trans->dev, page, 0, in iwl_pcie_rxq_alloc_rbs()
328 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rxq_alloc_rbs()
350 static void iwl_pcie_rxq_free_rbs(struct iwl_trans *trans) in iwl_pcie_rxq_free_rbs() argument
352 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_free_rbs()
361 dma_unmap_page(trans->dev, rxq->pool[i].page_dma, in iwl_pcie_rxq_free_rbs()
377 static void iwl_pcie_rx_replenish(struct iwl_trans *trans, gfp_t gfp) in iwl_pcie_rx_replenish() argument
379 iwl_pcie_rxq_alloc_rbs(trans, gfp); in iwl_pcie_rx_replenish()
381 iwl_pcie_rxq_restock(trans); in iwl_pcie_rx_replenish()
389 iwl_pcie_rx_replenish(trans_pcie->trans, GFP_KERNEL); in iwl_pcie_rx_replenish_work()
392 static int iwl_pcie_rx_alloc(struct iwl_trans *trans) in iwl_pcie_rx_alloc() argument
394 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_alloc()
396 struct device *dev = trans->dev; in iwl_pcie_rx_alloc()
428 static void iwl_pcie_rx_hw_init(struct iwl_trans *trans, struct iwl_rxq *rxq) in iwl_pcie_rx_hw_init() argument
430 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_hw_init()
440 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwl_pcie_rx_hw_init()
442 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_RBDCB_WPTR, 0); in iwl_pcie_rx_hw_init()
443 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_FLUSH_RB_REQ, 0); in iwl_pcie_rx_hw_init()
444 iwl_write_direct32(trans, FH_RSCSR_CHNL0_RDPTR, 0); in iwl_pcie_rx_hw_init()
447 iwl_write_direct32(trans, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, 0); in iwl_pcie_rx_hw_init()
450 iwl_write_direct32(trans, FH_RSCSR_CHNL0_RBDCB_BASE_REG, in iwl_pcie_rx_hw_init()
454 iwl_write_direct32(trans, FH_RSCSR_CHNL0_STTS_WPTR_REG, in iwl_pcie_rx_hw_init()
465 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, in iwl_pcie_rx_hw_init()
474 iwl_write8(trans, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF); in iwl_pcie_rx_hw_init()
477 if (trans->cfg->host_interrupt_operation_mode) in iwl_pcie_rx_hw_init()
478 iwl_set_bit(trans, CSR_INT_COALESCING, IWL_HOST_INT_OPER_MODE); in iwl_pcie_rx_hw_init()
495 int iwl_pcie_rx_init(struct iwl_trans *trans) in iwl_pcie_rx_init() argument
497 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_init()
502 err = iwl_pcie_rx_alloc(trans); in iwl_pcie_rx_init()
512 iwl_pcie_rxq_free_rbs(trans); in iwl_pcie_rx_init()
525 iwl_pcie_rx_replenish(trans, GFP_KERNEL); in iwl_pcie_rx_init()
527 iwl_pcie_rx_hw_init(trans, rxq); in iwl_pcie_rx_init()
530 iwl_pcie_rxq_inc_wr_ptr(trans); in iwl_pcie_rx_init()
536 void iwl_pcie_rx_free(struct iwl_trans *trans) in iwl_pcie_rx_free() argument
538 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_free()
544 IWL_DEBUG_INFO(trans, "Free NULL rx context\n"); in iwl_pcie_rx_free()
551 iwl_pcie_rxq_free_rbs(trans); in iwl_pcie_rx_free()
554 dma_free_coherent(trans->dev, sizeof(__le32) * RX_QUEUE_SIZE, in iwl_pcie_rx_free()
560 dma_free_coherent(trans->dev, in iwl_pcie_rx_free()
564 IWL_DEBUG_INFO(trans, "Free rxq->rb_stts which is NULL\n"); in iwl_pcie_rx_free()
569 static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans, in iwl_pcie_rx_handle_rb() argument
572 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_handle_rb()
582 dma_unmap_page(trans->dev, rxb->page_dma, max_len, DMA_FROM_DEVICE); in iwl_pcie_rx_handle_rb()
603 IWL_DEBUG_RX(trans, in iwl_pcie_rx_handle_rb()
611 trace_iwlwifi_dev_rx(trans->dev, trans, pkt, len); in iwl_pcie_rx_handle_rb()
612 trace_iwlwifi_dev_rx_data(trans->dev, trans, pkt, len); in iwl_pcie_rx_handle_rb()
642 err = iwl_op_mode_rx(trans->op_mode, &rxcb, cmd); in iwl_pcie_rx_handle_rb()
660 iwl_pcie_hcmd_complete(trans, &rxcb, err); in iwl_pcie_rx_handle_rb()
662 IWL_WARN(trans, "Claim null rxb?\n"); in iwl_pcie_rx_handle_rb()
680 dma_map_page(trans->dev, rxb->page, 0, in iwl_pcie_rx_handle_rb()
683 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rx_handle_rb()
703 static void iwl_pcie_rx_handle(struct iwl_trans *trans) in iwl_pcie_rx_handle() argument
705 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_handle()
721 IWL_DEBUG_RX(trans, "HW = SW = %d\n", r); in iwl_pcie_rx_handle()
737 IWL_DEBUG_RX(trans, "rxbuf: HW = %d, SW = %d (%p)\n", in iwl_pcie_rx_handle()
739 iwl_pcie_rx_handle_rb(trans, rxb); in iwl_pcie_rx_handle()
749 iwl_pcie_rx_replenish(trans, GFP_ATOMIC); in iwl_pcie_rx_handle()
761 iwl_pcie_rx_replenish(trans, GFP_ATOMIC); in iwl_pcie_rx_handle()
763 iwl_pcie_rxq_restock(trans); in iwl_pcie_rx_handle()
772 static void iwl_pcie_irq_handle_error(struct iwl_trans *trans) in iwl_pcie_irq_handle_error() argument
774 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_irq_handle_error()
777 if (trans->cfg->internal_wimax_coex && in iwl_pcie_irq_handle_error()
778 (!(iwl_read_prph(trans, APMG_CLK_CTRL_REG) & in iwl_pcie_irq_handle_error()
780 (iwl_read_prph(trans, APMG_PS_CTRL_REG) & in iwl_pcie_irq_handle_error()
782 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_irq_handle_error()
783 iwl_op_mode_wimax_active(trans->op_mode); in iwl_pcie_irq_handle_error()
788 iwl_pcie_dump_csr(trans); in iwl_pcie_irq_handle_error()
789 iwl_dump_fh(trans, NULL); in iwl_pcie_irq_handle_error()
794 iwl_trans_fw_error(trans); in iwl_pcie_irq_handle_error()
797 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_irq_handle_error()
801 static u32 iwl_pcie_int_cause_non_ict(struct iwl_trans *trans) in iwl_pcie_int_cause_non_ict() argument
805 lockdep_assert_held(&IWL_TRANS_GET_PCIE_TRANS(trans)->irq_lock); in iwl_pcie_int_cause_non_ict()
807 trace_iwlwifi_dev_irq(trans->dev); in iwl_pcie_int_cause_non_ict()
810 inta = iwl_read32(trans, CSR_INT); in iwl_pcie_int_cause_non_ict()
829 static u32 iwl_pcie_int_cause_ict(struct iwl_trans *trans) in iwl_pcie_int_cause_ict() argument
831 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_int_cause_ict()
836 trace_iwlwifi_dev_irq(trans->dev); in iwl_pcie_int_cause_ict()
842 trace_iwlwifi_dev_ict_read(trans->dev, trans_pcie->ict_index, read); in iwl_pcie_int_cause_ict()
852 IWL_DEBUG_ISR(trans, "ICT index %d value 0x%08X\n", in iwl_pcie_int_cause_ict()
859 trace_iwlwifi_dev_ict_read(trans->dev, trans_pcie->ict_index, in iwl_pcie_int_cause_ict()
883 struct iwl_trans *trans = dev_id; in iwl_pcie_irq_handler() local
884 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_irq_handler()
889 lock_map_acquire(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
897 inta = iwl_pcie_int_cause_ict(trans); in iwl_pcie_irq_handler()
899 inta = iwl_pcie_int_cause_non_ict(trans); in iwl_pcie_irq_handler()
902 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
905 iwl_read32(trans, CSR_INT_MASK), in iwl_pcie_irq_handler()
906 iwl_read32(trans, CSR_FH_INT_STATUS)); in iwl_pcie_irq_handler()
908 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
921 IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); in iwl_pcie_irq_handler()
926 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_irq_handler()
927 iwl_enable_interrupts(trans); in iwl_pcie_irq_handler()
929 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
938 IWL_WARN(trans, "HARDWARE GONE?? INTA == 0x%08x\n", inta); in iwl_pcie_irq_handler()
954 iwl_write32(trans, CSR_INT, inta | ~trans_pcie->inta_mask); in iwl_pcie_irq_handler()
957 IWL_DEBUG_ISR(trans, "inta 0x%08x, enabled 0x%08x\n", in iwl_pcie_irq_handler()
958 inta, iwl_read32(trans, CSR_INT_MASK)); in iwl_pcie_irq_handler()
964 IWL_ERR(trans, "Hardware error detected. Restarting.\n"); in iwl_pcie_irq_handler()
967 iwl_disable_interrupts(trans); in iwl_pcie_irq_handler()
970 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_handler()
980 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
987 IWL_DEBUG_ISR(trans, "Alive interrupt\n"); in iwl_pcie_irq_handler()
999 hw_rfkill = iwl_is_rfkill_set(trans); in iwl_pcie_irq_handler()
1000 IWL_WARN(trans, "RF_KILL bit toggled to %s.\n", in iwl_pcie_irq_handler()
1005 iwl_trans_pcie_rf_kill(trans, hw_rfkill); in iwl_pcie_irq_handler()
1007 set_bit(STATUS_RFKILL, &trans->status); in iwl_pcie_irq_handler()
1009 &trans->status)) in iwl_pcie_irq_handler()
1010 IWL_DEBUG_RF_KILL(trans, in iwl_pcie_irq_handler()
1014 clear_bit(STATUS_RFKILL, &trans->status); in iwl_pcie_irq_handler()
1022 IWL_ERR(trans, "Microcode CT kill error detected.\n"); in iwl_pcie_irq_handler()
1029 IWL_ERR(trans, "Microcode SW error detected. " in iwl_pcie_irq_handler()
1032 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_handler()
1038 IWL_DEBUG_ISR(trans, "Wakeup interrupt\n"); in iwl_pcie_irq_handler()
1039 iwl_pcie_rxq_check_wrptr(trans); in iwl_pcie_irq_handler()
1040 iwl_pcie_txq_check_wrptrs(trans); in iwl_pcie_irq_handler()
1052 IWL_DEBUG_ISR(trans, "Rx interrupt\n"); in iwl_pcie_irq_handler()
1055 iwl_write32(trans, CSR_FH_INT_STATUS, in iwl_pcie_irq_handler()
1060 iwl_write32(trans, in iwl_pcie_irq_handler()
1075 iwl_write8(trans, CSR_INT_PERIODIC_REG, in iwl_pcie_irq_handler()
1086 iwl_write8(trans, CSR_INT_PERIODIC_REG, in iwl_pcie_irq_handler()
1092 iwl_pcie_rx_handle(trans); in iwl_pcie_irq_handler()
1098 iwl_write32(trans, CSR_FH_INT_STATUS, CSR_FH_INT_TX_MASK); in iwl_pcie_irq_handler()
1099 IWL_DEBUG_ISR(trans, "uCode load interrupt\n"); in iwl_pcie_irq_handler()
1108 IWL_ERR(trans, "Unhandled INTA bits 0x%08x\n", inta & ~handled); in iwl_pcie_irq_handler()
1113 IWL_WARN(trans, "Disabled INTA bits 0x%08x were pending\n", in iwl_pcie_irq_handler()
1119 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_irq_handler()
1120 iwl_enable_interrupts(trans); in iwl_pcie_irq_handler()
1123 iwl_enable_rfkill_int(trans); in iwl_pcie_irq_handler()
1126 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1137 void iwl_pcie_free_ict(struct iwl_trans *trans) in iwl_pcie_free_ict() argument
1139 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_free_ict()
1142 dma_free_coherent(trans->dev, ICT_SIZE, in iwl_pcie_free_ict()
1155 int iwl_pcie_alloc_ict(struct iwl_trans *trans) in iwl_pcie_alloc_ict() argument
1157 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_alloc_ict()
1160 dma_zalloc_coherent(trans->dev, ICT_SIZE, in iwl_pcie_alloc_ict()
1168 iwl_pcie_free_ict(trans); in iwl_pcie_alloc_ict()
1172 IWL_DEBUG_ISR(trans, "ict dma addr %Lx ict vir addr %p\n", in iwl_pcie_alloc_ict()
1182 void iwl_pcie_reset_ict(struct iwl_trans *trans) in iwl_pcie_reset_ict() argument
1184 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_reset_ict()
1191 iwl_disable_interrupts(trans); in iwl_pcie_reset_ict()
1200 IWL_DEBUG_ISR(trans, "CSR_DRAM_INT_TBL_REG =0x%x\n", val); in iwl_pcie_reset_ict()
1202 iwl_write32(trans, CSR_DRAM_INT_TBL_REG, val); in iwl_pcie_reset_ict()
1205 iwl_write32(trans, CSR_INT, trans_pcie->inta_mask); in iwl_pcie_reset_ict()
1206 iwl_enable_interrupts(trans); in iwl_pcie_reset_ict()
1211 void iwl_pcie_disable_ict(struct iwl_trans *trans) in iwl_pcie_disable_ict() argument
1213 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_disable_ict()
1222 struct iwl_trans *trans = data; in iwl_pcie_isr() local
1224 if (!trans) in iwl_pcie_isr()
1232 iwl_write32(trans, CSR_INT_MASK, 0x00000000); in iwl_pcie_isr()