Lines Matching refs:trans
144 int iwl_pcie_rx_stop(struct iwl_trans *trans) in iwl_pcie_rx_stop() argument
146 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) { in iwl_pcie_rx_stop()
148 iwl_write_umac_prph(trans, RFH_RXF_DMA_CFG_GEN3, 0); in iwl_pcie_rx_stop()
149 return iwl_poll_umac_prph_bit(trans, RFH_GEN_STATUS_GEN3, in iwl_pcie_rx_stop()
151 } else if (trans->trans_cfg->mq_rx_supported) { in iwl_pcie_rx_stop()
152 iwl_write_prph(trans, RFH_RXF_DMA_CFG, 0); in iwl_pcie_rx_stop()
153 return iwl_poll_prph_bit(trans, RFH_GEN_STATUS, in iwl_pcie_rx_stop()
156 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwl_pcie_rx_stop()
157 return iwl_poll_direct_bit(trans, FH_MEM_RSSR_RX_STATUS_REG, in iwl_pcie_rx_stop()
166 static void iwl_pcie_rxq_inc_wr_ptr(struct iwl_trans *trans, in iwl_pcie_rxq_inc_wr_ptr() argument
178 if (!trans->trans_cfg->base_params->shadow_reg_enable && in iwl_pcie_rxq_inc_wr_ptr()
179 test_bit(STATUS_TPOWER_PMI, &trans->status)) { in iwl_pcie_rxq_inc_wr_ptr()
180 reg = iwl_read32(trans, CSR_UCODE_DRV_GP1); in iwl_pcie_rxq_inc_wr_ptr()
183 IWL_DEBUG_INFO(trans, "Rx queue requesting wakeup, GP1 = 0x%x\n", in iwl_pcie_rxq_inc_wr_ptr()
185 iwl_set_bit(trans, CSR_GP_CNTRL, in iwl_pcie_rxq_inc_wr_ptr()
193 if (!trans->trans_cfg->mq_rx_supported) in iwl_pcie_rxq_inc_wr_ptr()
194 iwl_write32(trans, FH_RSCSR_CHNL0_WPTR, rxq->write_actual); in iwl_pcie_rxq_inc_wr_ptr()
195 else if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) in iwl_pcie_rxq_inc_wr_ptr()
196 iwl_write32(trans, HBUS_TARG_WRPTR, rxq->write_actual | in iwl_pcie_rxq_inc_wr_ptr()
199 iwl_write32(trans, RFH_Q_FRBDCB_WIDX_TRG(rxq->id), in iwl_pcie_rxq_inc_wr_ptr()
203 static void iwl_pcie_rxq_check_wrptr(struct iwl_trans *trans) in iwl_pcie_rxq_check_wrptr() argument
205 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_check_wrptr()
208 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rxq_check_wrptr()
214 iwl_pcie_rxq_inc_wr_ptr(trans, rxq); in iwl_pcie_rxq_check_wrptr()
220 static void iwl_pcie_restock_bd(struct iwl_trans *trans, in iwl_pcie_restock_bd() argument
224 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) { in iwl_pcie_restock_bd()
237 IWL_DEBUG_RX(trans, "Assigned virtual RB ID %u to queue %d index %d\n", in iwl_pcie_restock_bd()
244 static void iwl_pcie_rxmq_restock(struct iwl_trans *trans, in iwl_pcie_rxmq_restock() argument
247 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxmq_restock()
258 if (!test_bit(STATUS_DEVICE_ENABLED, &trans->status)) in iwl_pcie_rxmq_restock()
271 iwl_pcie_restock_bd(trans, rxq, rxb); in iwl_pcie_rxmq_restock()
283 iwl_pcie_rxq_inc_wr_ptr(trans, rxq); in iwl_pcie_rxmq_restock()
291 static void iwl_pcie_rxsq_restock(struct iwl_trans *trans, in iwl_pcie_rxsq_restock() argument
304 if (!test_bit(STATUS_DEVICE_ENABLED, &trans->status)) in iwl_pcie_rxsq_restock()
332 iwl_pcie_rxq_inc_wr_ptr(trans, rxq); in iwl_pcie_rxsq_restock()
349 void iwl_pcie_rxq_restock(struct iwl_trans *trans, struct iwl_rxq *rxq) in iwl_pcie_rxq_restock() argument
351 if (trans->trans_cfg->mq_rx_supported) in iwl_pcie_rxq_restock()
352 iwl_pcie_rxmq_restock(trans, rxq); in iwl_pcie_rxq_restock()
354 iwl_pcie_rxsq_restock(trans, rxq); in iwl_pcie_rxq_restock()
361 static struct page *iwl_pcie_rx_alloc_page(struct iwl_trans *trans, in iwl_pcie_rx_alloc_page() argument
364 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_alloc_page()
394 IWL_DEBUG_INFO(trans, "alloc_pages failed, order: %d\n", in iwl_pcie_rx_alloc_page()
401 IWL_CRIT(trans, in iwl_pcie_rx_alloc_page()
429 void iwl_pcie_rxq_alloc_rbs(struct iwl_trans *trans, gfp_t priority, in iwl_pcie_rxq_alloc_rbs() argument
432 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_alloc_rbs()
446 page = iwl_pcie_rx_alloc_page(trans, &offset, priority); in iwl_pcie_rxq_alloc_rbs()
467 dma_map_page(trans->dev, page, rxb->offset, in iwl_pcie_rxq_alloc_rbs()
470 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rxq_alloc_rbs()
488 void iwl_pcie_free_rbs_pool(struct iwl_trans *trans) in iwl_pcie_free_rbs_pool() argument
490 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_free_rbs_pool()
499 dma_unmap_page(trans->dev, trans_pcie->rx_pool[i].page_dma, in iwl_pcie_free_rbs_pool()
513 static void iwl_pcie_rx_allocator(struct iwl_trans *trans) in iwl_pcie_rx_allocator() argument
515 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_allocator()
520 IWL_DEBUG_TPT(trans, "Pending allocation requests = %d\n", pending); in iwl_pcie_rx_allocator()
553 page = iwl_pcie_rx_alloc_page(trans, &rxb->offset, in iwl_pcie_rx_allocator()
560 rxb->page_dma = dma_map_page(trans->dev, page, in iwl_pcie_rx_allocator()
564 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rx_allocator()
581 IWL_DEBUG_TPT(trans, in iwl_pcie_rx_allocator()
602 IWL_DEBUG_TPT(trans, "%s, exit.\n", __func__); in iwl_pcie_rx_allocator()
613 static void iwl_pcie_rx_allocator_get(struct iwl_trans *trans, in iwl_pcie_rx_allocator_get() argument
616 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_allocator_get()
655 iwl_pcie_rx_allocator(trans_pcie->trans); in iwl_pcie_rx_allocator_work()
658 static int iwl_pcie_free_bd_size(struct iwl_trans *trans) in iwl_pcie_free_bd_size() argument
660 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) in iwl_pcie_free_bd_size()
663 return trans->trans_cfg->mq_rx_supported ? in iwl_pcie_free_bd_size()
667 static int iwl_pcie_used_bd_size(struct iwl_trans *trans) in iwl_pcie_used_bd_size() argument
669 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) in iwl_pcie_used_bd_size()
672 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) in iwl_pcie_used_bd_size()
678 static void iwl_pcie_free_rxq_dma(struct iwl_trans *trans, in iwl_pcie_free_rxq_dma() argument
681 int free_size = iwl_pcie_free_bd_size(trans); in iwl_pcie_free_rxq_dma()
684 dma_free_coherent(trans->dev, in iwl_pcie_free_rxq_dma()
694 dma_free_coherent(trans->dev, in iwl_pcie_free_rxq_dma()
695 iwl_pcie_used_bd_size(trans) * in iwl_pcie_free_rxq_dma()
702 static size_t iwl_pcie_rb_stts_size(struct iwl_trans *trans) in iwl_pcie_rb_stts_size() argument
704 bool use_rx_td = (trans->trans_cfg->device_family >= in iwl_pcie_rb_stts_size()
713 static int iwl_pcie_alloc_rxq_dma(struct iwl_trans *trans, in iwl_pcie_alloc_rxq_dma() argument
716 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_alloc_rxq_dma()
717 size_t rb_stts_size = iwl_pcie_rb_stts_size(trans); in iwl_pcie_alloc_rxq_dma()
718 struct device *dev = trans->dev; in iwl_pcie_alloc_rxq_dma()
723 if (trans->trans_cfg->mq_rx_supported) in iwl_pcie_alloc_rxq_dma()
724 rxq->queue_size = trans->cfg->num_rbds; in iwl_pcie_alloc_rxq_dma()
728 free_size = iwl_pcie_free_bd_size(trans); in iwl_pcie_alloc_rxq_dma()
739 if (trans->trans_cfg->mq_rx_supported) { in iwl_pcie_alloc_rxq_dma()
741 iwl_pcie_used_bd_size(trans) * in iwl_pcie_alloc_rxq_dma()
756 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_alloc_rxq_dma()
759 iwl_pcie_free_rxq_dma(trans, rxq); in iwl_pcie_alloc_rxq_dma()
765 static int iwl_pcie_rx_alloc(struct iwl_trans *trans) in iwl_pcie_rx_alloc() argument
767 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_alloc()
768 size_t rb_stts_size = iwl_pcie_rb_stts_size(trans); in iwl_pcie_rx_alloc()
775 trans_pcie->rxq = kcalloc(trans->num_rx_queues, sizeof(struct iwl_rxq), in iwl_pcie_rx_alloc()
797 dma_alloc_coherent(trans->dev, in iwl_pcie_rx_alloc()
798 rb_stts_size * trans->num_rx_queues, in iwl_pcie_rx_alloc()
806 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rx_alloc()
810 ret = iwl_pcie_alloc_rxq_dma(trans, rxq); in iwl_pcie_rx_alloc()
818 dma_free_coherent(trans->dev, in iwl_pcie_rx_alloc()
819 rb_stts_size * trans->num_rx_queues, in iwl_pcie_rx_alloc()
835 static void iwl_pcie_rx_hw_init(struct iwl_trans *trans, struct iwl_rxq *rxq) in iwl_pcie_rx_hw_init() argument
837 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_hw_init()
856 if (!iwl_trans_grab_nic_access(trans)) in iwl_pcie_rx_hw_init()
860 iwl_write32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwl_pcie_rx_hw_init()
862 iwl_write32(trans, FH_MEM_RCSR_CHNL0_RBDCB_WPTR, 0); in iwl_pcie_rx_hw_init()
863 iwl_write32(trans, FH_MEM_RCSR_CHNL0_FLUSH_RB_REQ, 0); in iwl_pcie_rx_hw_init()
864 iwl_write32(trans, FH_RSCSR_CHNL0_RDPTR, 0); in iwl_pcie_rx_hw_init()
867 iwl_write32(trans, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, 0); in iwl_pcie_rx_hw_init()
870 iwl_write32(trans, FH_RSCSR_CHNL0_RBDCB_BASE_REG, in iwl_pcie_rx_hw_init()
874 iwl_write32(trans, FH_RSCSR_CHNL0_STTS_WPTR_REG, in iwl_pcie_rx_hw_init()
885 iwl_write32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, in iwl_pcie_rx_hw_init()
893 iwl_trans_release_nic_access(trans); in iwl_pcie_rx_hw_init()
896 iwl_write8(trans, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF); in iwl_pcie_rx_hw_init()
899 if (trans->cfg->host_interrupt_operation_mode) in iwl_pcie_rx_hw_init()
900 iwl_set_bit(trans, CSR_INT_COALESCING, IWL_HOST_INT_OPER_MODE); in iwl_pcie_rx_hw_init()
903 static void iwl_pcie_rx_mq_hw_init(struct iwl_trans *trans) in iwl_pcie_rx_mq_hw_init() argument
905 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_mq_hw_init()
927 if (!iwl_trans_grab_nic_access(trans)) in iwl_pcie_rx_mq_hw_init()
931 iwl_write_prph_no_grab(trans, RFH_RXF_DMA_CFG, 0); in iwl_pcie_rx_mq_hw_init()
933 iwl_write_prph_no_grab(trans, RFH_RXF_RXQ_ACTIVE, 0); in iwl_pcie_rx_mq_hw_init()
935 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rx_mq_hw_init()
937 iwl_write_prph64_no_grab(trans, in iwl_pcie_rx_mq_hw_init()
941 iwl_write_prph64_no_grab(trans, in iwl_pcie_rx_mq_hw_init()
945 iwl_write_prph64_no_grab(trans, in iwl_pcie_rx_mq_hw_init()
949 iwl_write_prph_no_grab(trans, RFH_Q_FRBDCB_WIDX(i), 0); in iwl_pcie_rx_mq_hw_init()
950 iwl_write_prph_no_grab(trans, RFH_Q_FRBDCB_RIDX(i), 0); in iwl_pcie_rx_mq_hw_init()
951 iwl_write_prph_no_grab(trans, RFH_Q_URBDCB_WIDX(i), 0); in iwl_pcie_rx_mq_hw_init()
963 iwl_write_prph_no_grab(trans, RFH_RXF_DMA_CFG, in iwl_pcie_rx_mq_hw_init()
974 iwl_write_prph_no_grab(trans, RFH_GEN_CFG, in iwl_pcie_rx_mq_hw_init()
979 trans->trans_cfg->integrated ? in iwl_pcie_rx_mq_hw_init()
983 iwl_write_prph_no_grab(trans, RFH_RXF_RXQ_ACTIVE, enabled); in iwl_pcie_rx_mq_hw_init()
985 iwl_trans_release_nic_access(trans); in iwl_pcie_rx_mq_hw_init()
988 iwl_write8(trans, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF); in iwl_pcie_rx_mq_hw_init()
1001 static int iwl_pcie_rx_handle(struct iwl_trans *trans, int queue, int budget);
1012 struct iwl_trans *trans; in iwl_pcie_napi_poll() local
1016 trans = trans_pcie->trans; in iwl_pcie_napi_poll()
1018 ret = iwl_pcie_rx_handle(trans, rxq->id, budget); in iwl_pcie_napi_poll()
1020 IWL_DEBUG_ISR(trans, "[%d] handled %d, budget %d\n", in iwl_pcie_napi_poll()
1025 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_napi_poll()
1026 _iwl_enable_interrupts(trans); in iwl_pcie_napi_poll()
1039 struct iwl_trans *trans; in iwl_pcie_napi_poll_msix() local
1043 trans = trans_pcie->trans; in iwl_pcie_napi_poll_msix()
1045 ret = iwl_pcie_rx_handle(trans, rxq->id, budget); in iwl_pcie_napi_poll_msix()
1046 IWL_DEBUG_ISR(trans, "[%d] handled %d, budget %d\n", rxq->id, ret, in iwl_pcie_napi_poll_msix()
1058 iwl_pcie_clear_irq(trans, irq_line); in iwl_pcie_napi_poll_msix()
1067 void iwl_pcie_rx_napi_sync(struct iwl_trans *trans) in iwl_pcie_rx_napi_sync() argument
1069 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_napi_sync()
1075 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rx_napi_sync()
1083 static int _iwl_pcie_rx_init(struct iwl_trans *trans) in _iwl_pcie_rx_init() argument
1085 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in _iwl_pcie_rx_init()
1091 err = iwl_pcie_rx_alloc(trans); in _iwl_pcie_rx_init()
1107 iwl_pcie_free_rbs_pool(trans); in _iwl_pcie_rx_init()
1112 for (i = 0; i < trans->num_rx_queues; i++) { in _iwl_pcie_rx_init()
1125 (trans->trans_cfg->device_family >= in _iwl_pcie_rx_init()
1147 queue_size = trans->trans_cfg->mq_rx_supported ? in _iwl_pcie_rx_init()
1149 allocator_pool_size = trans->num_rx_queues * in _iwl_pcie_rx_init()
1165 iwl_pcie_rxq_alloc_rbs(trans, GFP_KERNEL, def_rxq); in _iwl_pcie_rx_init()
1170 int iwl_pcie_rx_init(struct iwl_trans *trans) in iwl_pcie_rx_init() argument
1172 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_init()
1173 int ret = _iwl_pcie_rx_init(trans); in iwl_pcie_rx_init()
1178 if (trans->trans_cfg->mq_rx_supported) in iwl_pcie_rx_init()
1179 iwl_pcie_rx_mq_hw_init(trans); in iwl_pcie_rx_init()
1181 iwl_pcie_rx_hw_init(trans, trans_pcie->rxq); in iwl_pcie_rx_init()
1183 iwl_pcie_rxq_restock(trans, trans_pcie->rxq); in iwl_pcie_rx_init()
1186 iwl_pcie_rxq_inc_wr_ptr(trans, trans_pcie->rxq); in iwl_pcie_rx_init()
1192 int iwl_pcie_gen2_rx_init(struct iwl_trans *trans) in iwl_pcie_gen2_rx_init() argument
1195 iwl_write8(trans, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF); in iwl_pcie_gen2_rx_init()
1201 return _iwl_pcie_rx_init(trans); in iwl_pcie_gen2_rx_init()
1204 void iwl_pcie_rx_free(struct iwl_trans *trans) in iwl_pcie_rx_free() argument
1206 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_free()
1207 size_t rb_stts_size = iwl_pcie_rb_stts_size(trans); in iwl_pcie_rx_free()
1216 IWL_DEBUG_INFO(trans, "Free NULL rx context\n"); in iwl_pcie_rx_free()
1222 iwl_pcie_free_rbs_pool(trans); in iwl_pcie_rx_free()
1225 dma_free_coherent(trans->dev, in iwl_pcie_rx_free()
1226 rb_stts_size * trans->num_rx_queues, in iwl_pcie_rx_free()
1233 for (i = 0; i < trans->num_rx_queues; i++) { in iwl_pcie_rx_free()
1236 iwl_pcie_free_rxq_dma(trans, rxq); in iwl_pcie_rx_free()
1265 static void iwl_pcie_rx_reuse_rbd(struct iwl_trans *trans, in iwl_pcie_rx_reuse_rbd() argument
1269 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_reuse_rbd()
1297 static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans, in iwl_pcie_rx_handle_rb() argument
1303 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_handle_rb()
1312 dma_unmap_page(trans->dev, rxb->page_dma, max_len, DMA_FROM_DEVICE); in iwl_pcie_rx_handle_rb()
1329 IWL_DEBUG_RX(trans, in iwl_pcie_rx_handle_rb()
1342 IWL_DEBUG_RX(trans, in iwl_pcie_rx_handle_rb()
1345 iwl_get_cmd_string(trans, in iwl_pcie_rx_handle_rb()
1359 maybe_trace_iwlwifi_dev_rx(trans, pkt, len); in iwl_pcie_rx_handle_rb()
1381 iwl_op_mode_rx(trans->op_mode, &rxq->napi, in iwl_pcie_rx_handle_rb()
1384 iwl_op_mode_rx_rss(trans->op_mode, &rxq->napi, in iwl_pcie_rx_handle_rb()
1405 iwl_pcie_hcmd_complete(trans, &rxcb); in iwl_pcie_rx_handle_rb()
1407 IWL_WARN(trans, "Claim null rxb?\n"); in iwl_pcie_rx_handle_rb()
1411 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) in iwl_pcie_rx_handle_rb()
1426 dma_map_page(trans->dev, rxb->page, rxb->offset, in iwl_pcie_rx_handle_rb()
1429 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rx_handle_rb()
1437 iwl_pcie_rx_reuse_rbd(trans, rxb, rxq, emergency); in iwl_pcie_rx_handle_rb()
1443 iwl_pcie_rx_reuse_rbd(trans, rxb, rxq, emergency); in iwl_pcie_rx_handle_rb()
1446 static struct iwl_rx_mem_buffer *iwl_pcie_get_rxb(struct iwl_trans *trans, in iwl_pcie_get_rxb() argument
1450 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_get_rxb()
1457 if (!trans->trans_cfg->mq_rx_supported) { in iwl_pcie_get_rxb()
1463 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) { in iwl_pcie_get_rxb()
1468 } else if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) { in iwl_pcie_get_rxb()
1486 IWL_DEBUG_RX(trans, "Got virtual RB ID %u\n", (u32)rxb->vid); in iwl_pcie_get_rxb()
1494 iwl_force_nmi(trans); in iwl_pcie_get_rxb()
1501 static int iwl_pcie_rx_handle(struct iwl_trans *trans, int queue, int budget) in iwl_pcie_rx_handle() argument
1503 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_handle()
1517 r = iwl_get_closed_rb_stts(trans, rxq); in iwl_pcie_rx_handle()
1525 IWL_DEBUG_RX(trans, "Q %d: HW = SW = %d\n", rxq->id, r); in iwl_pcie_rx_handle()
1540 IWL_DEBUG_TPT(trans, in iwl_pcie_rx_handle()
1545 IWL_DEBUG_RX(trans, "Q %d: HW = %d, SW = %d\n", rxq->id, r, i); in iwl_pcie_rx_handle()
1547 rxb = iwl_pcie_get_rxb(trans, rxq, i, &join); in iwl_pcie_rx_handle()
1568 iwl_pcie_rx_handle_rb(trans, rxq, rxb, emergency, i); in iwl_pcie_rx_handle()
1581 iwl_pcie_rx_allocator_get(trans, rxq); in iwl_pcie_rx_handle()
1591 IWL_DEBUG_TPT(trans, in iwl_pcie_rx_handle()
1599 iwl_pcie_rxq_alloc_rbs(trans, GFP_ATOMIC, rxq); in iwl_pcie_rx_handle()
1600 iwl_pcie_rxq_restock(trans, rxq); in iwl_pcie_rx_handle()
1623 iwl_pcie_rxq_alloc_rbs(trans, GFP_ATOMIC, rxq); in iwl_pcie_rx_handle()
1625 iwl_pcie_rxq_restock(trans, rxq); in iwl_pcie_rx_handle()
1646 struct iwl_trans *trans = trans_pcie->trans; in iwl_pcie_irq_rx_msix_handler() local
1649 trace_iwlwifi_dev_irq_msix(trans->dev, entry, false, 0, 0); in iwl_pcie_irq_rx_msix_handler()
1651 if (WARN_ON(entry->entry >= trans->num_rx_queues)) in iwl_pcie_irq_rx_msix_handler()
1656 IWL_ERR(trans, in iwl_pcie_irq_rx_msix_handler()
1663 lock_map_acquire(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_rx_msix_handler()
1664 IWL_DEBUG_ISR(trans, "[%d] Got interrupt\n", entry->entry); in iwl_pcie_irq_rx_msix_handler()
1668 iwl_pcie_clear_irq(trans, entry->entry); in iwl_pcie_irq_rx_msix_handler()
1671 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_rx_msix_handler()
1679 static void iwl_pcie_irq_handle_error(struct iwl_trans *trans) in iwl_pcie_irq_handle_error() argument
1681 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_irq_handle_error()
1685 if (trans->cfg->internal_wimax_coex && in iwl_pcie_irq_handle_error()
1686 !trans->cfg->apmg_not_supported && in iwl_pcie_irq_handle_error()
1687 (!(iwl_read_prph(trans, APMG_CLK_CTRL_REG) & in iwl_pcie_irq_handle_error()
1689 (iwl_read_prph(trans, APMG_PS_CTRL_REG) & in iwl_pcie_irq_handle_error()
1691 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_irq_handle_error()
1692 iwl_op_mode_wimax_active(trans->op_mode); in iwl_pcie_irq_handle_error()
1693 wake_up(&trans->wait_command_queue); in iwl_pcie_irq_handle_error()
1697 for (i = 0; i < trans->trans_cfg->base_params->num_of_queues; i++) { in iwl_pcie_irq_handle_error()
1705 iwl_trans_fw_error(trans, false); in iwl_pcie_irq_handle_error()
1707 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_irq_handle_error()
1708 wake_up(&trans->wait_command_queue); in iwl_pcie_irq_handle_error()
1711 static u32 iwl_pcie_int_cause_non_ict(struct iwl_trans *trans) in iwl_pcie_int_cause_non_ict() argument
1715 lockdep_assert_held(&IWL_TRANS_GET_PCIE_TRANS(trans)->irq_lock); in iwl_pcie_int_cause_non_ict()
1717 trace_iwlwifi_dev_irq(trans->dev); in iwl_pcie_int_cause_non_ict()
1720 inta = iwl_read32(trans, CSR_INT); in iwl_pcie_int_cause_non_ict()
1739 static u32 iwl_pcie_int_cause_ict(struct iwl_trans *trans) in iwl_pcie_int_cause_ict() argument
1741 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_int_cause_ict()
1746 trace_iwlwifi_dev_irq(trans->dev); in iwl_pcie_int_cause_ict()
1752 trace_iwlwifi_dev_ict_read(trans->dev, trans_pcie->ict_index, read); in iwl_pcie_int_cause_ict()
1762 IWL_DEBUG_ISR(trans, "ICT index %d value 0x%08X\n", in iwl_pcie_int_cause_ict()
1769 trace_iwlwifi_dev_ict_read(trans->dev, trans_pcie->ict_index, in iwl_pcie_int_cause_ict()
1791 void iwl_pcie_handle_rfkill_irq(struct iwl_trans *trans, bool from_irq) in iwl_pcie_handle_rfkill_irq() argument
1793 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_handle_rfkill_irq()
1798 prev = test_bit(STATUS_RFKILL_OPMODE, &trans->status); in iwl_pcie_handle_rfkill_irq()
1799 hw_rfkill = iwl_is_rfkill_set(trans); in iwl_pcie_handle_rfkill_irq()
1801 set_bit(STATUS_RFKILL_OPMODE, &trans->status); in iwl_pcie_handle_rfkill_irq()
1802 set_bit(STATUS_RFKILL_HW, &trans->status); in iwl_pcie_handle_rfkill_irq()
1807 report = test_bit(STATUS_RFKILL_OPMODE, &trans->status); in iwl_pcie_handle_rfkill_irq()
1809 IWL_WARN(trans, "RF_KILL bit toggled to %s.\n", in iwl_pcie_handle_rfkill_irq()
1815 iwl_trans_pcie_rf_kill(trans, report, from_irq); in iwl_pcie_handle_rfkill_irq()
1820 &trans->status)) in iwl_pcie_handle_rfkill_irq()
1821 IWL_DEBUG_RF_KILL(trans, in iwl_pcie_handle_rfkill_irq()
1823 wake_up(&trans->wait_command_queue); in iwl_pcie_handle_rfkill_irq()
1825 clear_bit(STATUS_RFKILL_HW, &trans->status); in iwl_pcie_handle_rfkill_irq()
1827 clear_bit(STATUS_RFKILL_OPMODE, &trans->status); in iwl_pcie_handle_rfkill_irq()
1833 struct iwl_trans *trans = dev_id; in iwl_pcie_irq_handler() local
1834 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_irq_handler()
1840 lock_map_acquire(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1848 inta = iwl_pcie_int_cause_ict(trans); in iwl_pcie_irq_handler()
1850 inta = iwl_pcie_int_cause_non_ict(trans); in iwl_pcie_irq_handler()
1853 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1856 iwl_read32(trans, CSR_INT_MASK), in iwl_pcie_irq_handler()
1857 iwl_read32(trans, CSR_FH_INT_STATUS)); in iwl_pcie_irq_handler()
1859 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1872 IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); in iwl_pcie_irq_handler()
1877 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_irq_handler()
1878 _iwl_enable_interrupts(trans); in iwl_pcie_irq_handler()
1880 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1889 IWL_WARN(trans, "HARDWARE GONE?? INTA == 0x%08x\n", inta); in iwl_pcie_irq_handler()
1905 iwl_write32(trans, CSR_INT, inta | ~trans_pcie->inta_mask); in iwl_pcie_irq_handler()
1908 IWL_DEBUG_ISR(trans, "inta 0x%08x, enabled 0x%08x\n", in iwl_pcie_irq_handler()
1909 inta, iwl_read32(trans, CSR_INT_MASK)); in iwl_pcie_irq_handler()
1915 IWL_ERR(trans, "Hardware error detected. Restarting.\n"); in iwl_pcie_irq_handler()
1918 iwl_disable_interrupts(trans); in iwl_pcie_irq_handler()
1921 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_handler()
1930 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1937 IWL_DEBUG_ISR(trans, "Alive interrupt\n"); in iwl_pcie_irq_handler()
1939 if (trans->trans_cfg->gen2) { in iwl_pcie_irq_handler()
1944 iwl_pcie_rxmq_restock(trans, trans_pcie->rxq); in iwl_pcie_irq_handler()
1955 iwl_pcie_handle_rfkill_irq(trans, true); in iwl_pcie_irq_handler()
1961 IWL_ERR(trans, "Microcode CT kill error detected.\n"); in iwl_pcie_irq_handler()
1968 IWL_ERR(trans, "Microcode SW error detected. " in iwl_pcie_irq_handler()
1971 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_handler()
1977 IWL_DEBUG_ISR(trans, "Wakeup interrupt\n"); in iwl_pcie_irq_handler()
1978 iwl_pcie_rxq_check_wrptr(trans); in iwl_pcie_irq_handler()
1979 iwl_pcie_txq_check_wrptrs(trans); in iwl_pcie_irq_handler()
1991 IWL_DEBUG_ISR(trans, "Rx interrupt\n"); in iwl_pcie_irq_handler()
1994 iwl_write32(trans, CSR_FH_INT_STATUS, in iwl_pcie_irq_handler()
1999 iwl_write32(trans, in iwl_pcie_irq_handler()
2014 iwl_write8(trans, CSR_INT_PERIODIC_REG, in iwl_pcie_irq_handler()
2025 iwl_write8(trans, CSR_INT_PERIODIC_REG, in iwl_pcie_irq_handler()
2040 iwl_write32(trans, CSR_FH_INT_STATUS, CSR_FH_INT_TX_MASK); in iwl_pcie_irq_handler()
2041 IWL_DEBUG_ISR(trans, "uCode load interrupt\n"); in iwl_pcie_irq_handler()
2055 IWL_ERR(trans, "Unhandled INTA bits 0x%08x\n", inta & ~handled); in iwl_pcie_irq_handler()
2060 IWL_WARN(trans, "Disabled INTA bits 0x%08x were pending\n", in iwl_pcie_irq_handler()
2067 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_irq_handler()
2068 _iwl_enable_interrupts(trans); in iwl_pcie_irq_handler()
2071 iwl_enable_fw_load_int(trans); in iwl_pcie_irq_handler()
2074 iwl_enable_rfkill_int(trans); in iwl_pcie_irq_handler()
2077 iwl_enable_fw_load_int_ctx_info(trans); in iwl_pcie_irq_handler()
2082 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
2093 void iwl_pcie_free_ict(struct iwl_trans *trans) in iwl_pcie_free_ict() argument
2095 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_free_ict()
2098 dma_free_coherent(trans->dev, ICT_SIZE, in iwl_pcie_free_ict()
2111 int iwl_pcie_alloc_ict(struct iwl_trans *trans) in iwl_pcie_alloc_ict() argument
2113 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_alloc_ict()
2116 dma_alloc_coherent(trans->dev, ICT_SIZE, in iwl_pcie_alloc_ict()
2123 iwl_pcie_free_ict(trans); in iwl_pcie_alloc_ict()
2133 void iwl_pcie_reset_ict(struct iwl_trans *trans) in iwl_pcie_reset_ict() argument
2135 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_reset_ict()
2142 _iwl_disable_interrupts(trans); in iwl_pcie_reset_ict()
2152 IWL_DEBUG_ISR(trans, "CSR_DRAM_INT_TBL_REG =0x%x\n", val); in iwl_pcie_reset_ict()
2154 iwl_write32(trans, CSR_DRAM_INT_TBL_REG, val); in iwl_pcie_reset_ict()
2157 iwl_write32(trans, CSR_INT, trans_pcie->inta_mask); in iwl_pcie_reset_ict()
2158 _iwl_enable_interrupts(trans); in iwl_pcie_reset_ict()
2163 void iwl_pcie_disable_ict(struct iwl_trans *trans) in iwl_pcie_disable_ict() argument
2165 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_disable_ict()
2174 struct iwl_trans *trans = data; in iwl_pcie_isr() local
2176 if (!trans) in iwl_pcie_isr()
2184 iwl_write32(trans, CSR_INT_MASK, 0x00000000); in iwl_pcie_isr()
2198 struct iwl_trans *trans = trans_pcie->trans; in iwl_pcie_irq_msix_handler() local
2211 lock_map_acquire(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_msix_handler()
2214 inta_fh = iwl_read32(trans, CSR_MSIX_FH_INT_CAUSES_AD); in iwl_pcie_irq_msix_handler()
2215 inta_hw = iwl_read32(trans, CSR_MSIX_HW_INT_CAUSES_AD); in iwl_pcie_irq_msix_handler()
2219 iwl_write32(trans, CSR_MSIX_FH_INT_CAUSES_AD, inta_fh & inta_fh_msk); in iwl_pcie_irq_msix_handler()
2220 iwl_write32(trans, CSR_MSIX_HW_INT_CAUSES_AD, inta_hw); in iwl_pcie_irq_msix_handler()
2223 trace_iwlwifi_dev_irq_msix(trans->dev, entry, true, inta_fh, inta_hw); in iwl_pcie_irq_msix_handler()
2226 IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); in iwl_pcie_irq_msix_handler()
2227 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_msix_handler()
2232 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2235 iwl_read32(trans, CSR_MSIX_FH_INT_MASK_AD)); in iwl_pcie_irq_msix_handler()
2237 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2267 IWL_DEBUG_ISR(trans, "IMR Complete interrupt\n"); in iwl_pcie_irq_msix_handler()
2276 IWL_DEBUG_ISR(trans, "uCode load interrupt\n"); in iwl_pcie_irq_msix_handler()
2292 if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_BZ) in iwl_pcie_irq_msix_handler()
2298 IWL_ERR(trans, "TOP Fatal error detected, inta_hw=0x%x.\n", in iwl_pcie_irq_msix_handler()
2305 IWL_ERR(trans, in iwl_pcie_irq_msix_handler()
2317 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_msix_handler()
2323 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2326 iwl_read32(trans, CSR_MSIX_HW_INT_MASK_AD)); in iwl_pcie_irq_msix_handler()
2328 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2337 IWL_DEBUG_ISR(trans, "Alive interrupt\n"); in iwl_pcie_irq_msix_handler()
2339 if (trans->trans_cfg->gen2) { in iwl_pcie_irq_msix_handler()
2341 iwl_pcie_rxmq_restock(trans, trans_pcie->rxq); in iwl_pcie_irq_msix_handler()
2355 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_msix_handler()
2362 IWL_DEBUG_ISR(trans, "Wakeup interrupt\n"); in iwl_pcie_irq_msix_handler()
2363 iwl_pcie_rxq_check_wrptr(trans); in iwl_pcie_irq_msix_handler()
2364 iwl_pcie_txq_check_wrptrs(trans); in iwl_pcie_irq_msix_handler()
2372 IWL_ERR(trans, "Microcode CT kill error detected.\n"); in iwl_pcie_irq_msix_handler()
2378 iwl_pcie_handle_rfkill_irq(trans, true); in iwl_pcie_irq_msix_handler()
2381 IWL_ERR(trans, in iwl_pcie_irq_msix_handler()
2385 trans->dbg.hw_error = true; in iwl_pcie_irq_msix_handler()
2386 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_msix_handler()
2390 IWL_DEBUG_ISR(trans, "Reset flow completed\n"); in iwl_pcie_irq_msix_handler()
2396 iwl_pcie_clear_irq(trans, entry->entry); in iwl_pcie_irq_msix_handler()
2398 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_msix_handler()