Lines Matching refs:trans
201 int iwl_pcie_rx_stop(struct iwl_trans *trans) in iwl_pcie_rx_stop() argument
203 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22560) { in iwl_pcie_rx_stop()
205 iwl_write_umac_prph(trans, RFH_RXF_DMA_CFG_GEN3, 0); in iwl_pcie_rx_stop()
206 return iwl_poll_umac_prph_bit(trans, RFH_GEN_STATUS_GEN3, in iwl_pcie_rx_stop()
208 } else if (trans->trans_cfg->mq_rx_supported) { in iwl_pcie_rx_stop()
209 iwl_write_prph(trans, RFH_RXF_DMA_CFG, 0); in iwl_pcie_rx_stop()
210 return iwl_poll_prph_bit(trans, RFH_GEN_STATUS, in iwl_pcie_rx_stop()
213 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwl_pcie_rx_stop()
214 return iwl_poll_direct_bit(trans, FH_MEM_RSSR_RX_STATUS_REG, in iwl_pcie_rx_stop()
223 static void iwl_pcie_rxq_inc_wr_ptr(struct iwl_trans *trans, in iwl_pcie_rxq_inc_wr_ptr() argument
235 if (!trans->trans_cfg->base_params->shadow_reg_enable && in iwl_pcie_rxq_inc_wr_ptr()
236 test_bit(STATUS_TPOWER_PMI, &trans->status)) { in iwl_pcie_rxq_inc_wr_ptr()
237 reg = iwl_read32(trans, CSR_UCODE_DRV_GP1); in iwl_pcie_rxq_inc_wr_ptr()
240 IWL_DEBUG_INFO(trans, "Rx queue requesting wakeup, GP1 = 0x%x\n", in iwl_pcie_rxq_inc_wr_ptr()
242 iwl_set_bit(trans, CSR_GP_CNTRL, in iwl_pcie_rxq_inc_wr_ptr()
243 BIT(trans->trans_cfg->csr->flag_mac_access_req)); in iwl_pcie_rxq_inc_wr_ptr()
250 if (trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_22560) in iwl_pcie_rxq_inc_wr_ptr()
251 iwl_write32(trans, HBUS_TARG_WRPTR, in iwl_pcie_rxq_inc_wr_ptr()
254 else if (trans->trans_cfg->mq_rx_supported) in iwl_pcie_rxq_inc_wr_ptr()
255 iwl_write32(trans, RFH_Q_FRBDCB_WIDX_TRG(rxq->id), in iwl_pcie_rxq_inc_wr_ptr()
258 iwl_write32(trans, FH_RSCSR_CHNL0_WPTR, rxq->write_actual); in iwl_pcie_rxq_inc_wr_ptr()
261 static void iwl_pcie_rxq_check_wrptr(struct iwl_trans *trans) in iwl_pcie_rxq_check_wrptr() argument
263 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_check_wrptr()
266 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rxq_check_wrptr()
272 iwl_pcie_rxq_inc_wr_ptr(trans, rxq); in iwl_pcie_rxq_check_wrptr()
278 static void iwl_pcie_restock_bd(struct iwl_trans *trans, in iwl_pcie_restock_bd() argument
282 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22560) { in iwl_pcie_restock_bd()
295 IWL_DEBUG_RX(trans, "Assigned virtual RB ID %u to queue %d index %d\n", in iwl_pcie_restock_bd()
302 static void iwl_pcie_rxmq_restock(struct iwl_trans *trans, in iwl_pcie_rxmq_restock() argument
315 if (!test_bit(STATUS_DEVICE_ENABLED, &trans->status)) in iwl_pcie_rxmq_restock()
328 iwl_pcie_restock_bd(trans, rxq, rxb); in iwl_pcie_rxmq_restock()
340 iwl_pcie_rxq_inc_wr_ptr(trans, rxq); in iwl_pcie_rxmq_restock()
348 static void iwl_pcie_rxsq_restock(struct iwl_trans *trans, in iwl_pcie_rxsq_restock() argument
361 if (!test_bit(STATUS_DEVICE_ENABLED, &trans->status)) in iwl_pcie_rxsq_restock()
389 iwl_pcie_rxq_inc_wr_ptr(trans, rxq); in iwl_pcie_rxsq_restock()
406 void iwl_pcie_rxq_restock(struct iwl_trans *trans, struct iwl_rxq *rxq) in iwl_pcie_rxq_restock() argument
408 if (trans->trans_cfg->mq_rx_supported) in iwl_pcie_rxq_restock()
409 iwl_pcie_rxmq_restock(trans, rxq); in iwl_pcie_rxq_restock()
411 iwl_pcie_rxsq_restock(trans, rxq); in iwl_pcie_rxq_restock()
418 static struct page *iwl_pcie_rx_alloc_page(struct iwl_trans *trans, in iwl_pcie_rx_alloc_page() argument
421 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_alloc_page()
432 IWL_DEBUG_INFO(trans, "alloc_pages failed, order: %d\n", in iwl_pcie_rx_alloc_page()
439 IWL_CRIT(trans, in iwl_pcie_rx_alloc_page()
455 void iwl_pcie_rxq_alloc_rbs(struct iwl_trans *trans, gfp_t priority, in iwl_pcie_rxq_alloc_rbs() argument
458 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_alloc_rbs()
471 page = iwl_pcie_rx_alloc_page(trans, priority); in iwl_pcie_rxq_alloc_rbs()
491 dma_map_page(trans->dev, page, 0, in iwl_pcie_rxq_alloc_rbs()
494 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rxq_alloc_rbs()
512 void iwl_pcie_free_rbs_pool(struct iwl_trans *trans) in iwl_pcie_free_rbs_pool() argument
514 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_free_rbs_pool()
520 dma_unmap_page(trans->dev, trans_pcie->rx_pool[i].page_dma, in iwl_pcie_free_rbs_pool()
535 static void iwl_pcie_rx_allocator(struct iwl_trans *trans) in iwl_pcie_rx_allocator() argument
537 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_allocator()
542 IWL_DEBUG_TPT(trans, "Pending allocation requests = %d\n", pending); in iwl_pcie_rx_allocator()
575 page = iwl_pcie_rx_alloc_page(trans, gfp_mask); in iwl_pcie_rx_allocator()
581 rxb->page_dma = dma_map_page(trans->dev, page, 0, in iwl_pcie_rx_allocator()
584 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rx_allocator()
601 IWL_DEBUG_TPT(trans, in iwl_pcie_rx_allocator()
622 IWL_DEBUG_TPT(trans, "%s, exit.\n", __func__); in iwl_pcie_rx_allocator()
633 static void iwl_pcie_rx_allocator_get(struct iwl_trans *trans, in iwl_pcie_rx_allocator_get() argument
636 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_allocator_get()
675 iwl_pcie_rx_allocator(trans_pcie->trans); in iwl_pcie_rx_allocator_work()
678 static int iwl_pcie_free_bd_size(struct iwl_trans *trans, bool use_rx_td) in iwl_pcie_free_bd_size() argument
685 return trans->trans_cfg->mq_rx_supported ? sizeof(__le64) : in iwl_pcie_free_bd_size()
689 static void iwl_pcie_free_rxq_dma(struct iwl_trans *trans, in iwl_pcie_free_rxq_dma() argument
692 struct device *dev = trans->dev; in iwl_pcie_free_rxq_dma()
693 bool use_rx_td = (trans->trans_cfg->device_family >= in iwl_pcie_free_rxq_dma()
695 int free_size = iwl_pcie_free_bd_size(trans, use_rx_td); in iwl_pcie_free_rxq_dma()
698 dma_free_coherent(trans->dev, in iwl_pcie_free_rxq_dma()
708 dma_free_coherent(trans->dev, in iwl_pcie_free_rxq_dma()
715 if (trans->trans_cfg->device_family < IWL_DEVICE_FAMILY_22560) in iwl_pcie_free_rxq_dma()
731 static int iwl_pcie_alloc_rxq_dma(struct iwl_trans *trans, in iwl_pcie_alloc_rxq_dma() argument
734 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_alloc_rxq_dma()
735 struct device *dev = trans->dev; in iwl_pcie_alloc_rxq_dma()
738 bool use_rx_td = (trans->trans_cfg->device_family >= in iwl_pcie_alloc_rxq_dma()
744 if (trans->trans_cfg->mq_rx_supported) in iwl_pcie_alloc_rxq_dma()
749 free_size = iwl_pcie_free_bd_size(trans, use_rx_td); in iwl_pcie_alloc_rxq_dma()
760 if (trans->trans_cfg->mq_rx_supported) { in iwl_pcie_alloc_rxq_dma()
796 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_alloc_rxq_dma()
799 iwl_pcie_free_rxq_dma(trans, rxq); in iwl_pcie_alloc_rxq_dma()
805 int iwl_pcie_rx_alloc(struct iwl_trans *trans) in iwl_pcie_rx_alloc() argument
807 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_alloc()
810 size_t rb_stts_size = trans->trans_cfg->device_family >= in iwl_pcie_rx_alloc()
817 trans_pcie->rxq = kcalloc(trans->num_rx_queues, sizeof(struct iwl_rxq), in iwl_pcie_rx_alloc()
829 dma_alloc_coherent(trans->dev, in iwl_pcie_rx_alloc()
830 rb_stts_size * trans->num_rx_queues, in iwl_pcie_rx_alloc()
838 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rx_alloc()
842 ret = iwl_pcie_alloc_rxq_dma(trans, rxq); in iwl_pcie_rx_alloc()
850 dma_free_coherent(trans->dev, in iwl_pcie_rx_alloc()
851 rb_stts_size * trans->num_rx_queues, in iwl_pcie_rx_alloc()
862 static void iwl_pcie_rx_hw_init(struct iwl_trans *trans, struct iwl_rxq *rxq) in iwl_pcie_rx_hw_init() argument
864 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_hw_init()
884 if (!iwl_trans_grab_nic_access(trans, &flags)) in iwl_pcie_rx_hw_init()
888 iwl_write32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwl_pcie_rx_hw_init()
890 iwl_write32(trans, FH_MEM_RCSR_CHNL0_RBDCB_WPTR, 0); in iwl_pcie_rx_hw_init()
891 iwl_write32(trans, FH_MEM_RCSR_CHNL0_FLUSH_RB_REQ, 0); in iwl_pcie_rx_hw_init()
892 iwl_write32(trans, FH_RSCSR_CHNL0_RDPTR, 0); in iwl_pcie_rx_hw_init()
895 iwl_write32(trans, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, 0); in iwl_pcie_rx_hw_init()
898 iwl_write32(trans, FH_RSCSR_CHNL0_RBDCB_BASE_REG, in iwl_pcie_rx_hw_init()
902 iwl_write32(trans, FH_RSCSR_CHNL0_STTS_WPTR_REG, in iwl_pcie_rx_hw_init()
913 iwl_write32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, in iwl_pcie_rx_hw_init()
921 iwl_trans_release_nic_access(trans, &flags); in iwl_pcie_rx_hw_init()
924 iwl_write8(trans, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF); in iwl_pcie_rx_hw_init()
927 if (trans->cfg->host_interrupt_operation_mode) in iwl_pcie_rx_hw_init()
928 iwl_set_bit(trans, CSR_INT_COALESCING, IWL_HOST_INT_OPER_MODE); in iwl_pcie_rx_hw_init()
931 static void iwl_pcie_rx_mq_hw_init(struct iwl_trans *trans) in iwl_pcie_rx_mq_hw_init() argument
933 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_mq_hw_init()
956 if (!iwl_trans_grab_nic_access(trans, &flags)) in iwl_pcie_rx_mq_hw_init()
960 iwl_write_prph_no_grab(trans, RFH_RXF_DMA_CFG, 0); in iwl_pcie_rx_mq_hw_init()
962 iwl_write_prph_no_grab(trans, RFH_RXF_RXQ_ACTIVE, 0); in iwl_pcie_rx_mq_hw_init()
964 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rx_mq_hw_init()
966 iwl_write_prph64_no_grab(trans, in iwl_pcie_rx_mq_hw_init()
970 iwl_write_prph64_no_grab(trans, in iwl_pcie_rx_mq_hw_init()
974 iwl_write_prph64_no_grab(trans, in iwl_pcie_rx_mq_hw_init()
978 iwl_write_prph_no_grab(trans, RFH_Q_FRBDCB_WIDX(i), 0); in iwl_pcie_rx_mq_hw_init()
979 iwl_write_prph_no_grab(trans, RFH_Q_FRBDCB_RIDX(i), 0); in iwl_pcie_rx_mq_hw_init()
980 iwl_write_prph_no_grab(trans, RFH_Q_URBDCB_WIDX(i), 0); in iwl_pcie_rx_mq_hw_init()
992 iwl_write_prph_no_grab(trans, RFH_RXF_DMA_CFG, in iwl_pcie_rx_mq_hw_init()
1003 iwl_write_prph_no_grab(trans, RFH_GEN_CFG, in iwl_pcie_rx_mq_hw_init()
1008 trans->cfg->integrated ? in iwl_pcie_rx_mq_hw_init()
1012 iwl_write_prph_no_grab(trans, RFH_RXF_RXQ_ACTIVE, enabled); in iwl_pcie_rx_mq_hw_init()
1014 iwl_trans_release_nic_access(trans, &flags); in iwl_pcie_rx_mq_hw_init()
1017 iwl_write8(trans, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF); in iwl_pcie_rx_mq_hw_init()
1036 int _iwl_pcie_rx_init(struct iwl_trans *trans) in _iwl_pcie_rx_init() argument
1038 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in _iwl_pcie_rx_init()
1044 err = iwl_pcie_rx_alloc(trans); in _iwl_pcie_rx_init()
1060 iwl_pcie_free_rbs_pool(trans); in _iwl_pcie_rx_init()
1065 for (i = 0; i < trans->num_rx_queues; i++) { in _iwl_pcie_rx_init()
1077 memset(rxq->rb_stts, 0, (trans->trans_cfg->device_family >= in _iwl_pcie_rx_init()
1091 queue_size = trans->trans_cfg->mq_rx_supported ? in _iwl_pcie_rx_init()
1093 allocator_pool_size = trans->num_rx_queues * in _iwl_pcie_rx_init()
1110 iwl_pcie_rxq_alloc_rbs(trans, GFP_KERNEL, def_rxq); in _iwl_pcie_rx_init()
1115 int iwl_pcie_rx_init(struct iwl_trans *trans) in iwl_pcie_rx_init() argument
1117 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_init()
1118 int ret = _iwl_pcie_rx_init(trans); in iwl_pcie_rx_init()
1123 if (trans->trans_cfg->mq_rx_supported) in iwl_pcie_rx_init()
1124 iwl_pcie_rx_mq_hw_init(trans); in iwl_pcie_rx_init()
1126 iwl_pcie_rx_hw_init(trans, trans_pcie->rxq); in iwl_pcie_rx_init()
1128 iwl_pcie_rxq_restock(trans, trans_pcie->rxq); in iwl_pcie_rx_init()
1131 iwl_pcie_rxq_inc_wr_ptr(trans, trans_pcie->rxq); in iwl_pcie_rx_init()
1137 int iwl_pcie_gen2_rx_init(struct iwl_trans *trans) in iwl_pcie_gen2_rx_init() argument
1140 iwl_write8(trans, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF); in iwl_pcie_gen2_rx_init()
1146 return _iwl_pcie_rx_init(trans); in iwl_pcie_gen2_rx_init()
1149 void iwl_pcie_rx_free(struct iwl_trans *trans) in iwl_pcie_rx_free() argument
1151 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_free()
1154 size_t rb_stts_size = trans->trans_cfg->device_family >= in iwl_pcie_rx_free()
1163 IWL_DEBUG_INFO(trans, "Free NULL rx context\n"); in iwl_pcie_rx_free()
1169 iwl_pcie_free_rbs_pool(trans); in iwl_pcie_rx_free()
1172 dma_free_coherent(trans->dev, in iwl_pcie_rx_free()
1173 rb_stts_size * trans->num_rx_queues, in iwl_pcie_rx_free()
1180 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rx_free()
1183 iwl_pcie_free_rxq_dma(trans, rxq); in iwl_pcie_rx_free()
1205 static void iwl_pcie_rx_reuse_rbd(struct iwl_trans *trans, in iwl_pcie_rx_reuse_rbd() argument
1209 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_reuse_rbd()
1237 static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans, in iwl_pcie_rx_handle_rb() argument
1243 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_handle_rb()
1252 dma_unmap_page(trans->dev, rxb->page_dma, max_len, DMA_FROM_DEVICE); in iwl_pcie_rx_handle_rb()
1270 IWL_DEBUG_RX(trans, in iwl_pcie_rx_handle_rb()
1283 IWL_DEBUG_RX(trans, in iwl_pcie_rx_handle_rb()
1286 iwl_get_cmd_string(trans, in iwl_pcie_rx_handle_rb()
1295 trace_iwlwifi_dev_rx(trans->dev, trans, pkt, len); in iwl_pcie_rx_handle_rb()
1296 trace_iwlwifi_dev_rx_data(trans->dev, trans, pkt, len); in iwl_pcie_rx_handle_rb()
1322 iwl_op_mode_rx(trans->op_mode, &rxq->napi, in iwl_pcie_rx_handle_rb()
1325 iwl_op_mode_rx_rss(trans->op_mode, &rxq->napi, in iwl_pcie_rx_handle_rb()
1344 iwl_pcie_hcmd_complete(trans, &rxcb); in iwl_pcie_rx_handle_rb()
1346 IWL_WARN(trans, "Claim null rxb?\n"); in iwl_pcie_rx_handle_rb()
1350 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22560) in iwl_pcie_rx_handle_rb()
1366 dma_map_page(trans->dev, rxb->page, 0, in iwl_pcie_rx_handle_rb()
1369 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rx_handle_rb()
1377 iwl_pcie_rx_reuse_rbd(trans, rxb, rxq, emergency); in iwl_pcie_rx_handle_rb()
1383 iwl_pcie_rx_reuse_rbd(trans, rxb, rxq, emergency); in iwl_pcie_rx_handle_rb()
1386 static struct iwl_rx_mem_buffer *iwl_pcie_get_rxb(struct iwl_trans *trans, in iwl_pcie_get_rxb() argument
1389 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_get_rxb()
1395 if (!trans->trans_cfg->mq_rx_supported) { in iwl_pcie_get_rxb()
1402 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22560) in iwl_pcie_get_rxb()
1414 IWL_DEBUG_RX(trans, "Got virtual RB ID %u\n", (u32)rxb->vid); in iwl_pcie_get_rxb()
1422 iwl_force_nmi(trans); in iwl_pcie_get_rxb()
1429 static void iwl_pcie_rx_handle(struct iwl_trans *trans, int queue) in iwl_pcie_rx_handle() argument
1431 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_handle()
1446 r = le16_to_cpu(iwl_get_closed_rb_stts(trans, rxq)) & 0x0FFF; in iwl_pcie_rx_handle()
1454 IWL_DEBUG_RX(trans, "Q %d: HW = SW = %d\n", rxq->id, r); in iwl_pcie_rx_handle()
1468 IWL_DEBUG_TPT(trans, in iwl_pcie_rx_handle()
1473 IWL_DEBUG_RX(trans, "Q %d: HW = %d, SW = %d\n", rxq->id, r, i); in iwl_pcie_rx_handle()
1475 rxb = iwl_pcie_get_rxb(trans, rxq, i); in iwl_pcie_rx_handle()
1479 iwl_pcie_rx_handle_rb(trans, rxq, rxb, emergency, i); in iwl_pcie_rx_handle()
1491 iwl_pcie_rx_allocator_get(trans, rxq); in iwl_pcie_rx_handle()
1501 IWL_DEBUG_TPT(trans, in iwl_pcie_rx_handle()
1509 iwl_pcie_rxq_alloc_rbs(trans, GFP_ATOMIC, rxq); in iwl_pcie_rx_handle()
1510 iwl_pcie_rxq_restock(trans, rxq); in iwl_pcie_rx_handle()
1519 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_22560) in iwl_pcie_rx_handle()
1536 iwl_pcie_rxq_alloc_rbs(trans, GFP_ATOMIC, rxq); in iwl_pcie_rx_handle()
1549 iwl_pcie_rxq_restock(trans, rxq); in iwl_pcie_rx_handle()
1568 struct iwl_trans *trans = trans_pcie->trans; in iwl_pcie_irq_rx_msix_handler() local
1570 trace_iwlwifi_dev_irq_msix(trans->dev, entry, false, 0, 0); in iwl_pcie_irq_rx_msix_handler()
1572 if (WARN_ON(entry->entry >= trans->num_rx_queues)) in iwl_pcie_irq_rx_msix_handler()
1575 lock_map_acquire(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_rx_msix_handler()
1578 iwl_pcie_rx_handle(trans, entry->entry); in iwl_pcie_irq_rx_msix_handler()
1581 iwl_pcie_clear_irq(trans, entry); in iwl_pcie_irq_rx_msix_handler()
1583 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_rx_msix_handler()
1591 static void iwl_pcie_irq_handle_error(struct iwl_trans *trans) in iwl_pcie_irq_handle_error() argument
1593 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_irq_handle_error()
1597 if (trans->cfg->internal_wimax_coex && in iwl_pcie_irq_handle_error()
1598 !trans->cfg->apmg_not_supported && in iwl_pcie_irq_handle_error()
1599 (!(iwl_read_prph(trans, APMG_CLK_CTRL_REG) & in iwl_pcie_irq_handle_error()
1601 (iwl_read_prph(trans, APMG_PS_CTRL_REG) & in iwl_pcie_irq_handle_error()
1603 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_irq_handle_error()
1604 iwl_op_mode_wimax_active(trans->op_mode); in iwl_pcie_irq_handle_error()
1609 for (i = 0; i < trans->trans_cfg->base_params->num_of_queues; i++) { in iwl_pcie_irq_handle_error()
1617 iwl_trans_fw_error(trans); in iwl_pcie_irq_handle_error()
1619 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_irq_handle_error()
1623 static u32 iwl_pcie_int_cause_non_ict(struct iwl_trans *trans) in iwl_pcie_int_cause_non_ict() argument
1627 lockdep_assert_held(&IWL_TRANS_GET_PCIE_TRANS(trans)->irq_lock); in iwl_pcie_int_cause_non_ict()
1629 trace_iwlwifi_dev_irq(trans->dev); in iwl_pcie_int_cause_non_ict()
1632 inta = iwl_read32(trans, CSR_INT); in iwl_pcie_int_cause_non_ict()
1651 static u32 iwl_pcie_int_cause_ict(struct iwl_trans *trans) in iwl_pcie_int_cause_ict() argument
1653 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_int_cause_ict()
1658 trace_iwlwifi_dev_irq(trans->dev); in iwl_pcie_int_cause_ict()
1664 trace_iwlwifi_dev_ict_read(trans->dev, trans_pcie->ict_index, read); in iwl_pcie_int_cause_ict()
1674 IWL_DEBUG_ISR(trans, "ICT index %d value 0x%08X\n", in iwl_pcie_int_cause_ict()
1681 trace_iwlwifi_dev_ict_read(trans->dev, trans_pcie->ict_index, in iwl_pcie_int_cause_ict()
1703 void iwl_pcie_handle_rfkill_irq(struct iwl_trans *trans) in iwl_pcie_handle_rfkill_irq() argument
1705 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_handle_rfkill_irq()
1710 prev = test_bit(STATUS_RFKILL_OPMODE, &trans->status); in iwl_pcie_handle_rfkill_irq()
1711 hw_rfkill = iwl_is_rfkill_set(trans); in iwl_pcie_handle_rfkill_irq()
1713 set_bit(STATUS_RFKILL_OPMODE, &trans->status); in iwl_pcie_handle_rfkill_irq()
1714 set_bit(STATUS_RFKILL_HW, &trans->status); in iwl_pcie_handle_rfkill_irq()
1719 report = test_bit(STATUS_RFKILL_OPMODE, &trans->status); in iwl_pcie_handle_rfkill_irq()
1721 IWL_WARN(trans, "RF_KILL bit toggled to %s.\n", in iwl_pcie_handle_rfkill_irq()
1727 iwl_trans_pcie_rf_kill(trans, report); in iwl_pcie_handle_rfkill_irq()
1732 &trans->status)) in iwl_pcie_handle_rfkill_irq()
1733 IWL_DEBUG_RF_KILL(trans, in iwl_pcie_handle_rfkill_irq()
1737 clear_bit(STATUS_RFKILL_HW, &trans->status); in iwl_pcie_handle_rfkill_irq()
1739 clear_bit(STATUS_RFKILL_OPMODE, &trans->status); in iwl_pcie_handle_rfkill_irq()
1745 struct iwl_trans *trans = dev_id; in iwl_pcie_irq_handler() local
1746 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_irq_handler()
1751 lock_map_acquire(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1759 inta = iwl_pcie_int_cause_ict(trans); in iwl_pcie_irq_handler()
1761 inta = iwl_pcie_int_cause_non_ict(trans); in iwl_pcie_irq_handler()
1764 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1767 iwl_read32(trans, CSR_INT_MASK), in iwl_pcie_irq_handler()
1768 iwl_read32(trans, CSR_FH_INT_STATUS)); in iwl_pcie_irq_handler()
1770 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1783 IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); in iwl_pcie_irq_handler()
1788 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_irq_handler()
1789 _iwl_enable_interrupts(trans); in iwl_pcie_irq_handler()
1791 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1800 IWL_WARN(trans, "HARDWARE GONE?? INTA == 0x%08x\n", inta); in iwl_pcie_irq_handler()
1816 iwl_write32(trans, CSR_INT, inta | ~trans_pcie->inta_mask); in iwl_pcie_irq_handler()
1819 IWL_DEBUG_ISR(trans, "inta 0x%08x, enabled 0x%08x\n", in iwl_pcie_irq_handler()
1820 inta, iwl_read32(trans, CSR_INT_MASK)); in iwl_pcie_irq_handler()
1826 IWL_ERR(trans, "Hardware error detected. Restarting.\n"); in iwl_pcie_irq_handler()
1829 iwl_disable_interrupts(trans); in iwl_pcie_irq_handler()
1832 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_handler()
1841 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1848 IWL_DEBUG_ISR(trans, "Alive interrupt\n"); in iwl_pcie_irq_handler()
1850 if (trans->trans_cfg->gen2) { in iwl_pcie_irq_handler()
1855 iwl_pcie_rxmq_restock(trans, trans_pcie->rxq); in iwl_pcie_irq_handler()
1866 iwl_pcie_handle_rfkill_irq(trans); in iwl_pcie_irq_handler()
1872 IWL_ERR(trans, "Microcode CT kill error detected.\n"); in iwl_pcie_irq_handler()
1879 IWL_ERR(trans, "Microcode SW error detected. " in iwl_pcie_irq_handler()
1882 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_handler()
1888 IWL_DEBUG_ISR(trans, "Wakeup interrupt\n"); in iwl_pcie_irq_handler()
1889 iwl_pcie_rxq_check_wrptr(trans); in iwl_pcie_irq_handler()
1890 iwl_pcie_txq_check_wrptrs(trans); in iwl_pcie_irq_handler()
1902 IWL_DEBUG_ISR(trans, "Rx interrupt\n"); in iwl_pcie_irq_handler()
1905 iwl_write32(trans, CSR_FH_INT_STATUS, in iwl_pcie_irq_handler()
1910 iwl_write32(trans, in iwl_pcie_irq_handler()
1925 iwl_write8(trans, CSR_INT_PERIODIC_REG, in iwl_pcie_irq_handler()
1936 iwl_write8(trans, CSR_INT_PERIODIC_REG, in iwl_pcie_irq_handler()
1942 iwl_pcie_rx_handle(trans, 0); in iwl_pcie_irq_handler()
1948 iwl_write32(trans, CSR_FH_INT_STATUS, CSR_FH_INT_TX_MASK); in iwl_pcie_irq_handler()
1949 IWL_DEBUG_ISR(trans, "uCode load interrupt\n"); in iwl_pcie_irq_handler()
1958 IWL_ERR(trans, "Unhandled INTA bits 0x%08x\n", inta & ~handled); in iwl_pcie_irq_handler()
1963 IWL_WARN(trans, "Disabled INTA bits 0x%08x were pending\n", in iwl_pcie_irq_handler()
1969 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_irq_handler()
1970 _iwl_enable_interrupts(trans); in iwl_pcie_irq_handler()
1973 iwl_enable_fw_load_int(trans); in iwl_pcie_irq_handler()
1976 iwl_enable_rfkill_int(trans); in iwl_pcie_irq_handler()
1979 iwl_enable_fw_load_int_ctx_info(trans); in iwl_pcie_irq_handler()
1983 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1994 void iwl_pcie_free_ict(struct iwl_trans *trans) in iwl_pcie_free_ict() argument
1996 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_free_ict()
1999 dma_free_coherent(trans->dev, ICT_SIZE, in iwl_pcie_free_ict()
2012 int iwl_pcie_alloc_ict(struct iwl_trans *trans) in iwl_pcie_alloc_ict() argument
2014 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_alloc_ict()
2017 dma_alloc_coherent(trans->dev, ICT_SIZE, in iwl_pcie_alloc_ict()
2024 iwl_pcie_free_ict(trans); in iwl_pcie_alloc_ict()
2034 void iwl_pcie_reset_ict(struct iwl_trans *trans) in iwl_pcie_reset_ict() argument
2036 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_reset_ict()
2043 _iwl_disable_interrupts(trans); in iwl_pcie_reset_ict()
2053 IWL_DEBUG_ISR(trans, "CSR_DRAM_INT_TBL_REG =0x%x\n", val); in iwl_pcie_reset_ict()
2055 iwl_write32(trans, CSR_DRAM_INT_TBL_REG, val); in iwl_pcie_reset_ict()
2058 iwl_write32(trans, CSR_INT, trans_pcie->inta_mask); in iwl_pcie_reset_ict()
2059 _iwl_enable_interrupts(trans); in iwl_pcie_reset_ict()
2064 void iwl_pcie_disable_ict(struct iwl_trans *trans) in iwl_pcie_disable_ict() argument
2066 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_disable_ict()
2075 struct iwl_trans *trans = data; in iwl_pcie_isr() local
2077 if (!trans) in iwl_pcie_isr()
2085 iwl_write32(trans, CSR_INT_MASK, 0x00000000); in iwl_pcie_isr()
2099 struct iwl_trans *trans = trans_pcie->trans; in iwl_pcie_irq_msix_handler() local
2103 lock_map_acquire(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_msix_handler()
2106 inta_fh = iwl_read32(trans, CSR_MSIX_FH_INT_CAUSES_AD); in iwl_pcie_irq_msix_handler()
2107 inta_hw = iwl_read32(trans, CSR_MSIX_HW_INT_CAUSES_AD); in iwl_pcie_irq_msix_handler()
2111 iwl_write32(trans, CSR_MSIX_FH_INT_CAUSES_AD, inta_fh); in iwl_pcie_irq_msix_handler()
2112 iwl_write32(trans, CSR_MSIX_HW_INT_CAUSES_AD, inta_hw); in iwl_pcie_irq_msix_handler()
2115 trace_iwlwifi_dev_irq_msix(trans->dev, entry, true, inta_fh, inta_hw); in iwl_pcie_irq_msix_handler()
2118 IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); in iwl_pcie_irq_msix_handler()
2119 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_msix_handler()
2124 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2127 iwl_read32(trans, CSR_MSIX_FH_INT_MASK_AD)); in iwl_pcie_irq_msix_handler()
2129 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2139 iwl_pcie_rx_handle(trans, 0); in iwl_pcie_irq_msix_handler()
2146 iwl_pcie_rx_handle(trans, 1); in iwl_pcie_irq_msix_handler()
2152 IWL_DEBUG_ISR(trans, "uCode load interrupt\n"); in iwl_pcie_irq_msix_handler()
2166 IWL_ERR(trans, in iwl_pcie_irq_msix_handler()
2170 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_msix_handler()
2175 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2178 iwl_read32(trans, CSR_MSIX_HW_INT_MASK_AD)); in iwl_pcie_irq_msix_handler()
2180 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2189 IWL_DEBUG_ISR(trans, "Alive interrupt\n"); in iwl_pcie_irq_msix_handler()
2191 if (trans->trans_cfg->gen2) { in iwl_pcie_irq_msix_handler()
2193 iwl_pcie_rxmq_restock(trans, trans_pcie->rxq); in iwl_pcie_irq_msix_handler()
2197 if (trans->trans_cfg->device_family == IWL_DEVICE_FAMILY_22560 && in iwl_pcie_irq_msix_handler()
2200 int res = iwl_read32(trans, CSR_IML_RESP_ADDR); in iwl_pcie_irq_msix_handler()
2202 IWL_DEBUG_ISR(trans, "IML transfer status: %d\n", res); in iwl_pcie_irq_msix_handler()
2205 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_msix_handler()
2212 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2219 IWL_DEBUG_ISR(trans, "Wakeup interrupt\n"); in iwl_pcie_irq_msix_handler()
2220 iwl_pcie_rxq_check_wrptr(trans); in iwl_pcie_irq_msix_handler()
2221 iwl_pcie_txq_check_wrptrs(trans); in iwl_pcie_irq_msix_handler()
2229 int res = iwl_read32(trans, CSR_IML_RESP_ADDR); in iwl_pcie_irq_msix_handler()
2231 IWL_DEBUG_ISR(trans, "IML transfer status: %d\n", res); in iwl_pcie_irq_msix_handler()
2234 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_msix_handler()
2240 IWL_ERR(trans, "Microcode CT kill error detected.\n"); in iwl_pcie_irq_msix_handler()
2246 iwl_pcie_handle_rfkill_irq(trans); in iwl_pcie_irq_msix_handler()
2249 IWL_ERR(trans, in iwl_pcie_irq_msix_handler()
2253 trans->dbg.hw_error = true; in iwl_pcie_irq_msix_handler()
2254 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_msix_handler()
2257 iwl_pcie_clear_irq(trans, entry); in iwl_pcie_irq_msix_handler()
2259 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_msix_handler()