Lines Matching refs:trans

166 int iwl_pcie_rx_stop(struct iwl_trans *trans)  in iwl_pcie_rx_stop()  argument
168 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwl_pcie_rx_stop()
169 return iwl_poll_direct_bit(trans, FH_MEM_RSSR_RX_STATUS_REG, in iwl_pcie_rx_stop()
176 static void iwl_pcie_rxq_inc_wr_ptr(struct iwl_trans *trans) in iwl_pcie_rxq_inc_wr_ptr() argument
178 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_inc_wr_ptr()
189 if (!trans->cfg->base_params->shadow_reg_enable && in iwl_pcie_rxq_inc_wr_ptr()
190 test_bit(STATUS_TPOWER_PMI, &trans->status)) { in iwl_pcie_rxq_inc_wr_ptr()
191 reg = iwl_read32(trans, CSR_UCODE_DRV_GP1); in iwl_pcie_rxq_inc_wr_ptr()
194 IWL_DEBUG_INFO(trans, "Rx queue requesting wakeup, GP1 = 0x%x\n", in iwl_pcie_rxq_inc_wr_ptr()
196 iwl_set_bit(trans, CSR_GP_CNTRL, in iwl_pcie_rxq_inc_wr_ptr()
204 iwl_write32(trans, FH_RSCSR_CHNL0_WPTR, rxq->write_actual); in iwl_pcie_rxq_inc_wr_ptr()
207 static void iwl_pcie_rxq_check_wrptr(struct iwl_trans *trans) in iwl_pcie_rxq_check_wrptr() argument
209 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_check_wrptr()
217 iwl_pcie_rxq_inc_wr_ptr(trans); in iwl_pcie_rxq_check_wrptr()
235 static void iwl_pcie_rxq_restock(struct iwl_trans *trans) in iwl_pcie_rxq_restock() argument
237 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_restock()
249 if (!test_bit(STATUS_DEVICE_ENABLED, &trans->status)) in iwl_pcie_rxq_restock()
275 iwl_pcie_rxq_inc_wr_ptr(trans); in iwl_pcie_rxq_restock()
284 static struct page *iwl_pcie_rx_alloc_page(struct iwl_trans *trans, in iwl_pcie_rx_alloc_page() argument
287 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_alloc_page()
302 IWL_DEBUG_INFO(trans, "alloc_pages failed, order: %d\n", in iwl_pcie_rx_alloc_page()
311 IWL_CRIT(trans, in iwl_pcie_rx_alloc_page()
328 static void iwl_pcie_rxq_alloc_rbs(struct iwl_trans *trans, gfp_t priority) in iwl_pcie_rxq_alloc_rbs() argument
330 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_alloc_rbs()
344 page = iwl_pcie_rx_alloc_page(trans, priority); in iwl_pcie_rxq_alloc_rbs()
364 dma_map_page(trans->dev, page, 0, in iwl_pcie_rxq_alloc_rbs()
367 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rxq_alloc_rbs()
389 static void iwl_pcie_rxq_free_rbs(struct iwl_trans *trans) in iwl_pcie_rxq_free_rbs() argument
391 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rxq_free_rbs()
400 dma_unmap_page(trans->dev, rxq->pool[i].page_dma, in iwl_pcie_rxq_free_rbs()
416 static void iwl_pcie_rx_replenish(struct iwl_trans *trans) in iwl_pcie_rx_replenish() argument
418 iwl_pcie_rxq_alloc_rbs(trans, GFP_KERNEL); in iwl_pcie_rx_replenish()
420 iwl_pcie_rxq_restock(trans); in iwl_pcie_rx_replenish()
429 static void iwl_pcie_rx_allocator(struct iwl_trans *trans) in iwl_pcie_rx_allocator() argument
431 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_allocator()
436 IWL_DEBUG_RX(trans, "Pending allocation requests = %d\n", pending); in iwl_pcie_rx_allocator()
466 page = iwl_pcie_rx_alloc_page(trans, GFP_KERNEL); in iwl_pcie_rx_allocator()
472 rxb->page_dma = dma_map_page(trans->dev, page, 0, in iwl_pcie_rx_allocator()
475 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rx_allocator()
493 IWL_DEBUG_RX(trans, in iwl_pcie_rx_allocator()
520 static int iwl_pcie_rx_allocator_get(struct iwl_trans *trans, in iwl_pcie_rx_allocator_get() argument
524 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_allocator_get()
558 iwl_pcie_rx_allocator(trans_pcie->trans); in iwl_pcie_rx_allocator_work()
561 static int iwl_pcie_rx_alloc(struct iwl_trans *trans) in iwl_pcie_rx_alloc() argument
563 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_alloc()
566 struct device *dev = trans->dev; in iwl_pcie_rx_alloc()
599 static void iwl_pcie_rx_hw_init(struct iwl_trans *trans, struct iwl_rxq *rxq) in iwl_pcie_rx_hw_init() argument
601 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_hw_init()
611 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); in iwl_pcie_rx_hw_init()
613 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_RBDCB_WPTR, 0); in iwl_pcie_rx_hw_init()
614 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_FLUSH_RB_REQ, 0); in iwl_pcie_rx_hw_init()
615 iwl_write_direct32(trans, FH_RSCSR_CHNL0_RDPTR, 0); in iwl_pcie_rx_hw_init()
618 iwl_write_direct32(trans, FH_RSCSR_CHNL0_RBDCB_WPTR_REG, 0); in iwl_pcie_rx_hw_init()
621 iwl_write_direct32(trans, FH_RSCSR_CHNL0_RBDCB_BASE_REG, in iwl_pcie_rx_hw_init()
625 iwl_write_direct32(trans, FH_RSCSR_CHNL0_STTS_WPTR_REG, in iwl_pcie_rx_hw_init()
636 iwl_write_direct32(trans, FH_MEM_RCSR_CHNL0_CONFIG_REG, in iwl_pcie_rx_hw_init()
645 iwl_write8(trans, CSR_INT_COALESCING, IWL_HOST_INT_TIMEOUT_DEF); in iwl_pcie_rx_hw_init()
648 if (trans->cfg->host_interrupt_operation_mode) in iwl_pcie_rx_hw_init()
649 iwl_set_bit(trans, CSR_INT_COALESCING, IWL_HOST_INT_OPER_MODE); in iwl_pcie_rx_hw_init()
680 static void iwl_pcie_rx_free_rba(struct iwl_trans *trans) in iwl_pcie_rx_free_rba() argument
682 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_free_rba()
691 dma_unmap_page(trans->dev, rba->pool[i].page_dma, in iwl_pcie_rx_free_rba()
699 int iwl_pcie_rx_init(struct iwl_trans *trans) in iwl_pcie_rx_init() argument
701 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_init()
707 err = iwl_pcie_rx_alloc(trans); in iwl_pcie_rx_init()
720 iwl_pcie_rx_free_rba(trans); in iwl_pcie_rx_init()
727 iwl_pcie_rxq_free_rbs(trans); in iwl_pcie_rx_init()
740 iwl_pcie_rx_replenish(trans); in iwl_pcie_rx_init()
742 iwl_pcie_rx_hw_init(trans, rxq); in iwl_pcie_rx_init()
745 iwl_pcie_rxq_inc_wr_ptr(trans); in iwl_pcie_rx_init()
751 void iwl_pcie_rx_free(struct iwl_trans *trans) in iwl_pcie_rx_free() argument
753 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_free()
760 IWL_DEBUG_INFO(trans, "Free NULL rx context\n"); in iwl_pcie_rx_free()
771 iwl_pcie_rx_free_rba(trans); in iwl_pcie_rx_free()
775 iwl_pcie_rxq_free_rbs(trans); in iwl_pcie_rx_free()
778 dma_free_coherent(trans->dev, sizeof(__le32) * RX_QUEUE_SIZE, in iwl_pcie_rx_free()
784 dma_free_coherent(trans->dev, in iwl_pcie_rx_free()
788 IWL_DEBUG_INFO(trans, "Free rxq->rb_stts which is NULL\n"); in iwl_pcie_rx_free()
799 static void iwl_pcie_rx_reuse_rbd(struct iwl_trans *trans, in iwl_pcie_rx_reuse_rbd() argument
803 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_reuse_rbd()
833 static void iwl_pcie_rx_handle_rb(struct iwl_trans *trans, in iwl_pcie_rx_handle_rb() argument
837 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_handle_rb()
847 dma_unmap_page(trans->dev, rxb->page_dma, max_len, DMA_FROM_DEVICE); in iwl_pcie_rx_handle_rb()
867 IWL_DEBUG_RX(trans, in iwl_pcie_rx_handle_rb()
875 trace_iwlwifi_dev_rx(trans->dev, trans, pkt, len); in iwl_pcie_rx_handle_rb()
876 trace_iwlwifi_dev_rx_data(trans->dev, trans, pkt, len); in iwl_pcie_rx_handle_rb()
901 iwl_op_mode_rx(trans->op_mode, &trans_pcie->napi, &rxcb); in iwl_pcie_rx_handle_rb()
919 iwl_pcie_hcmd_complete(trans, &rxcb); in iwl_pcie_rx_handle_rb()
921 IWL_WARN(trans, "Claim null rxb?\n"); in iwl_pcie_rx_handle_rb()
939 dma_map_page(trans->dev, rxb->page, 0, in iwl_pcie_rx_handle_rb()
942 if (dma_mapping_error(trans->dev, rxb->page_dma)) { in iwl_pcie_rx_handle_rb()
950 iwl_pcie_rx_reuse_rbd(trans, rxb, rxq, emergency); in iwl_pcie_rx_handle_rb()
956 iwl_pcie_rx_reuse_rbd(trans, rxb, rxq, emergency); in iwl_pcie_rx_handle_rb()
962 static void iwl_pcie_rx_handle(struct iwl_trans *trans) in iwl_pcie_rx_handle() argument
964 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_rx_handle()
978 IWL_DEBUG_RX(trans, "HW = SW = %d\n", r); in iwl_pcie_rx_handle()
989 IWL_DEBUG_RX(trans, "rxbuf: HW = %d, SW = %d (%p)\n", in iwl_pcie_rx_handle()
991 iwl_pcie_rx_handle_rb(trans, rxb, emergency); in iwl_pcie_rx_handle()
1015 if (!iwl_pcie_rx_allocator_get(trans, out)) { in iwl_pcie_rx_handle()
1034 iwl_pcie_rxq_alloc_rbs(trans, GFP_ATOMIC); in iwl_pcie_rx_handle()
1046 iwl_pcie_rxq_restock(trans); in iwl_pcie_rx_handle()
1068 iwl_pcie_rxq_alloc_rbs(trans, GFP_ATOMIC); in iwl_pcie_rx_handle()
1077 static void iwl_pcie_irq_handle_error(struct iwl_trans *trans) in iwl_pcie_irq_handle_error() argument
1079 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_irq_handle_error()
1083 if (trans->cfg->internal_wimax_coex && in iwl_pcie_irq_handle_error()
1084 !trans->cfg->apmg_not_supported && in iwl_pcie_irq_handle_error()
1085 (!(iwl_read_prph(trans, APMG_CLK_CTRL_REG) & in iwl_pcie_irq_handle_error()
1087 (iwl_read_prph(trans, APMG_PS_CTRL_REG) & in iwl_pcie_irq_handle_error()
1089 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_irq_handle_error()
1090 iwl_op_mode_wimax_active(trans->op_mode); in iwl_pcie_irq_handle_error()
1095 iwl_pcie_dump_csr(trans); in iwl_pcie_irq_handle_error()
1096 iwl_dump_fh(trans, NULL); in iwl_pcie_irq_handle_error()
1101 iwl_trans_fw_error(trans); in iwl_pcie_irq_handle_error()
1104 for (i = 0; i < trans->cfg->base_params->num_of_queues; i++) in iwl_pcie_irq_handle_error()
1107 clear_bit(STATUS_SYNC_HCMD_ACTIVE, &trans->status); in iwl_pcie_irq_handle_error()
1111 static u32 iwl_pcie_int_cause_non_ict(struct iwl_trans *trans) in iwl_pcie_int_cause_non_ict() argument
1115 lockdep_assert_held(&IWL_TRANS_GET_PCIE_TRANS(trans)->irq_lock); in iwl_pcie_int_cause_non_ict()
1117 trace_iwlwifi_dev_irq(trans->dev); in iwl_pcie_int_cause_non_ict()
1120 inta = iwl_read32(trans, CSR_INT); in iwl_pcie_int_cause_non_ict()
1139 static u32 iwl_pcie_int_cause_ict(struct iwl_trans *trans) in iwl_pcie_int_cause_ict() argument
1141 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_int_cause_ict()
1146 trace_iwlwifi_dev_irq(trans->dev); in iwl_pcie_int_cause_ict()
1152 trace_iwlwifi_dev_ict_read(trans->dev, trans_pcie->ict_index, read); in iwl_pcie_int_cause_ict()
1162 IWL_DEBUG_ISR(trans, "ICT index %d value 0x%08X\n", in iwl_pcie_int_cause_ict()
1169 trace_iwlwifi_dev_ict_read(trans->dev, trans_pcie->ict_index, in iwl_pcie_int_cause_ict()
1193 struct iwl_trans *trans = dev_id; in iwl_pcie_irq_handler() local
1194 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_irq_handler()
1199 lock_map_acquire(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1207 inta = iwl_pcie_int_cause_ict(trans); in iwl_pcie_irq_handler()
1209 inta = iwl_pcie_int_cause_non_ict(trans); in iwl_pcie_irq_handler()
1212 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1215 iwl_read32(trans, CSR_INT_MASK), in iwl_pcie_irq_handler()
1216 iwl_read32(trans, CSR_FH_INT_STATUS)); in iwl_pcie_irq_handler()
1218 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1231 IWL_DEBUG_ISR(trans, "Ignore interrupt, inta == 0\n"); in iwl_pcie_irq_handler()
1236 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_irq_handler()
1237 iwl_enable_interrupts(trans); in iwl_pcie_irq_handler()
1239 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1248 IWL_WARN(trans, "HARDWARE GONE?? INTA == 0x%08x\n", inta); in iwl_pcie_irq_handler()
1264 iwl_write32(trans, CSR_INT, inta | ~trans_pcie->inta_mask); in iwl_pcie_irq_handler()
1267 IWL_DEBUG_ISR(trans, "inta 0x%08x, enabled 0x%08x\n", in iwl_pcie_irq_handler()
1268 inta, iwl_read32(trans, CSR_INT_MASK)); in iwl_pcie_irq_handler()
1274 IWL_ERR(trans, "Hardware error detected. Restarting.\n"); in iwl_pcie_irq_handler()
1277 iwl_disable_interrupts(trans); in iwl_pcie_irq_handler()
1280 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_handler()
1290 IWL_DEBUG_ISR(trans, in iwl_pcie_irq_handler()
1297 IWL_DEBUG_ISR(trans, "Alive interrupt\n"); in iwl_pcie_irq_handler()
1309 hw_rfkill = iwl_is_rfkill_set(trans); in iwl_pcie_irq_handler()
1310 IWL_WARN(trans, "RF_KILL bit toggled to %s.\n", in iwl_pcie_irq_handler()
1316 iwl_trans_pcie_rf_kill(trans, hw_rfkill); in iwl_pcie_irq_handler()
1319 set_bit(STATUS_RFKILL, &trans->status); in iwl_pcie_irq_handler()
1321 &trans->status)) in iwl_pcie_irq_handler()
1322 IWL_DEBUG_RF_KILL(trans, in iwl_pcie_irq_handler()
1326 clear_bit(STATUS_RFKILL, &trans->status); in iwl_pcie_irq_handler()
1334 IWL_ERR(trans, "Microcode CT kill error detected.\n"); in iwl_pcie_irq_handler()
1341 IWL_ERR(trans, "Microcode SW error detected. " in iwl_pcie_irq_handler()
1344 iwl_pcie_irq_handle_error(trans); in iwl_pcie_irq_handler()
1350 IWL_DEBUG_ISR(trans, "Wakeup interrupt\n"); in iwl_pcie_irq_handler()
1351 iwl_pcie_rxq_check_wrptr(trans); in iwl_pcie_irq_handler()
1352 iwl_pcie_txq_check_wrptrs(trans); in iwl_pcie_irq_handler()
1364 IWL_DEBUG_ISR(trans, "Rx interrupt\n"); in iwl_pcie_irq_handler()
1367 iwl_write32(trans, CSR_FH_INT_STATUS, in iwl_pcie_irq_handler()
1372 iwl_write32(trans, in iwl_pcie_irq_handler()
1387 iwl_write8(trans, CSR_INT_PERIODIC_REG, in iwl_pcie_irq_handler()
1398 iwl_write8(trans, CSR_INT_PERIODIC_REG, in iwl_pcie_irq_handler()
1404 iwl_pcie_rx_handle(trans); in iwl_pcie_irq_handler()
1410 iwl_write32(trans, CSR_FH_INT_STATUS, CSR_FH_INT_TX_MASK); in iwl_pcie_irq_handler()
1411 IWL_DEBUG_ISR(trans, "uCode load interrupt\n"); in iwl_pcie_irq_handler()
1420 IWL_ERR(trans, "Unhandled INTA bits 0x%08x\n", inta & ~handled); in iwl_pcie_irq_handler()
1425 IWL_WARN(trans, "Disabled INTA bits 0x%08x were pending\n", in iwl_pcie_irq_handler()
1431 if (test_bit(STATUS_INT_ENABLED, &trans->status)) in iwl_pcie_irq_handler()
1432 iwl_enable_interrupts(trans); in iwl_pcie_irq_handler()
1435 iwl_enable_rfkill_int(trans); in iwl_pcie_irq_handler()
1438 lock_map_release(&trans->sync_cmd_lockdep_map); in iwl_pcie_irq_handler()
1449 void iwl_pcie_free_ict(struct iwl_trans *trans) in iwl_pcie_free_ict() argument
1451 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_free_ict()
1454 dma_free_coherent(trans->dev, ICT_SIZE, in iwl_pcie_free_ict()
1467 int iwl_pcie_alloc_ict(struct iwl_trans *trans) in iwl_pcie_alloc_ict() argument
1469 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_alloc_ict()
1472 dma_zalloc_coherent(trans->dev, ICT_SIZE, in iwl_pcie_alloc_ict()
1480 iwl_pcie_free_ict(trans); in iwl_pcie_alloc_ict()
1484 IWL_DEBUG_ISR(trans, "ict dma addr %Lx ict vir addr %p\n", in iwl_pcie_alloc_ict()
1494 void iwl_pcie_reset_ict(struct iwl_trans *trans) in iwl_pcie_reset_ict() argument
1496 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_reset_ict()
1503 iwl_disable_interrupts(trans); in iwl_pcie_reset_ict()
1513 IWL_DEBUG_ISR(trans, "CSR_DRAM_INT_TBL_REG =0x%x\n", val); in iwl_pcie_reset_ict()
1515 iwl_write32(trans, CSR_DRAM_INT_TBL_REG, val); in iwl_pcie_reset_ict()
1518 iwl_write32(trans, CSR_INT, trans_pcie->inta_mask); in iwl_pcie_reset_ict()
1519 iwl_enable_interrupts(trans); in iwl_pcie_reset_ict()
1524 void iwl_pcie_disable_ict(struct iwl_trans *trans) in iwl_pcie_disable_ict() argument
1526 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); in iwl_pcie_disable_ict()
1535 struct iwl_trans *trans = data; in iwl_pcie_isr() local
1537 if (!trans) in iwl_pcie_isr()
1545 iwl_write32(trans, CSR_INT_MASK, 0x00000000); in iwl_pcie_isr()