Lines Matching refs:rxq

141 static int iwl_rxq_space(const struct iwl_rxq *rxq)  in iwl_rxq_space()  argument
152 return (rxq->read - rxq->write - 1) & (RX_QUEUE_SIZE - 1); in iwl_rxq_space()
179 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_inc_wr_ptr() local
182 lockdep_assert_held(&rxq->lock); in iwl_pcie_rxq_inc_wr_ptr()
198 rxq->need_update = true; in iwl_pcie_rxq_inc_wr_ptr()
203 rxq->write_actual = round_down(rxq->write, 8); 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()
210 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_check_wrptr() local
212 spin_lock(&rxq->lock); in iwl_pcie_rxq_check_wrptr()
214 if (!rxq->need_update) in iwl_pcie_rxq_check_wrptr()
218 rxq->need_update = false; in iwl_pcie_rxq_check_wrptr()
221 spin_unlock(&rxq->lock); in iwl_pcie_rxq_check_wrptr()
238 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_restock() local
252 spin_lock(&rxq->lock); in iwl_pcie_rxq_restock()
253 while ((iwl_rxq_space(rxq) > 0) && (rxq->free_count)) { in iwl_pcie_rxq_restock()
255 rxb = rxq->queue[rxq->write]; in iwl_pcie_rxq_restock()
259 rxb = list_first_entry(&rxq->rx_free, struct iwl_rx_mem_buffer, in iwl_pcie_rxq_restock()
264 rxq->bd[rxq->write] = iwl_pcie_dma_addr2rbd_ptr(rxb->page_dma); in iwl_pcie_rxq_restock()
265 rxq->queue[rxq->write] = rxb; in iwl_pcie_rxq_restock()
266 rxq->write = (rxq->write + 1) & RX_QUEUE_MASK; in iwl_pcie_rxq_restock()
267 rxq->free_count--; in iwl_pcie_rxq_restock()
269 spin_unlock(&rxq->lock); in iwl_pcie_rxq_restock()
273 if (rxq->write_actual != (rxq->write & ~0x7)) { in iwl_pcie_rxq_restock()
274 spin_lock(&rxq->lock); in iwl_pcie_rxq_restock()
276 spin_unlock(&rxq->lock); in iwl_pcie_rxq_restock()
288 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_alloc_page() local
292 if (rxq->free_count > RX_LOW_WATERMARK) in iwl_pcie_rx_alloc_page()
308 if (rxq->free_count <= RX_LOW_WATERMARK && in iwl_pcie_rx_alloc_page()
309 iwl_rxq_space(rxq) > (RX_QUEUE_SIZE / 2) && in iwl_pcie_rx_alloc_page()
313 rxq->free_count); in iwl_pcie_rx_alloc_page()
331 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_alloc_rbs() local
336 spin_lock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
337 if (list_empty(&rxq->rx_used)) { in iwl_pcie_rxq_alloc_rbs()
338 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
341 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
348 spin_lock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
350 if (list_empty(&rxq->rx_used)) { in iwl_pcie_rxq_alloc_rbs()
351 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
355 rxb = list_first_entry(&rxq->rx_used, struct iwl_rx_mem_buffer, in iwl_pcie_rxq_alloc_rbs()
358 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
369 spin_lock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
370 list_add(&rxb->list, &rxq->rx_used); in iwl_pcie_rxq_alloc_rbs()
371 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
380 spin_lock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
382 list_add_tail(&rxb->list, &rxq->rx_free); in iwl_pcie_rxq_alloc_rbs()
383 rxq->free_count++; in iwl_pcie_rxq_alloc_rbs()
385 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
392 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_free_rbs() local
395 lockdep_assert_held(&rxq->lock); in iwl_pcie_rxq_free_rbs()
398 if (!rxq->pool[i].page) in iwl_pcie_rxq_free_rbs()
400 dma_unmap_page(trans->dev, rxq->pool[i].page_dma, in iwl_pcie_rxq_free_rbs()
403 __free_pages(rxq->pool[i].page, trans_pcie->rx_page_order); in iwl_pcie_rxq_free_rbs()
404 rxq->pool[i].page = NULL; in iwl_pcie_rxq_free_rbs()
564 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_alloc() local
568 memset(&trans_pcie->rxq, 0, sizeof(trans_pcie->rxq)); in iwl_pcie_rx_alloc()
570 spin_lock_init(&rxq->lock); in iwl_pcie_rx_alloc()
573 if (WARN_ON(rxq->bd || rxq->rb_stts)) in iwl_pcie_rx_alloc()
577 rxq->bd = dma_zalloc_coherent(dev, sizeof(__le32) * RX_QUEUE_SIZE, in iwl_pcie_rx_alloc()
578 &rxq->bd_dma, GFP_KERNEL); in iwl_pcie_rx_alloc()
579 if (!rxq->bd) in iwl_pcie_rx_alloc()
583 rxq->rb_stts = dma_zalloc_coherent(dev, sizeof(*rxq->rb_stts), in iwl_pcie_rx_alloc()
584 &rxq->rb_stts_dma, GFP_KERNEL); in iwl_pcie_rx_alloc()
585 if (!rxq->rb_stts) in iwl_pcie_rx_alloc()
592 rxq->bd, rxq->bd_dma); in iwl_pcie_rx_alloc()
593 rxq->bd_dma = 0; in iwl_pcie_rx_alloc()
594 rxq->bd = NULL; 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
622 (u32)(rxq->bd_dma >> 8)); in iwl_pcie_rx_hw_init()
626 rxq->rb_stts_dma >> 4); in iwl_pcie_rx_hw_init()
652 static void iwl_pcie_rx_init_rxb_lists(struct iwl_rxq *rxq) in iwl_pcie_rx_init_rxb_lists() argument
656 lockdep_assert_held(&rxq->lock); in iwl_pcie_rx_init_rxb_lists()
658 INIT_LIST_HEAD(&rxq->rx_free); in iwl_pcie_rx_init_rxb_lists()
659 INIT_LIST_HEAD(&rxq->rx_used); in iwl_pcie_rx_init_rxb_lists()
660 rxq->free_count = 0; in iwl_pcie_rx_init_rxb_lists()
661 rxq->used_count = 0; in iwl_pcie_rx_init_rxb_lists()
664 list_add(&rxq->pool[i].list, &rxq->rx_used); in iwl_pcie_rx_init_rxb_lists()
702 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_init() local
706 if (!rxq->bd) { in iwl_pcie_rx_init()
724 spin_lock(&rxq->lock); in iwl_pcie_rx_init()
728 iwl_pcie_rx_init_rxb_lists(rxq); in iwl_pcie_rx_init()
731 rxq->queue[i] = NULL; in iwl_pcie_rx_init()
735 rxq->read = rxq->write = 0; in iwl_pcie_rx_init()
736 rxq->write_actual = 0; in iwl_pcie_rx_init()
737 memset(rxq->rb_stts, 0, sizeof(*rxq->rb_stts)); in iwl_pcie_rx_init()
738 spin_unlock(&rxq->lock); in iwl_pcie_rx_init()
742 iwl_pcie_rx_hw_init(trans, rxq); in iwl_pcie_rx_init()
744 spin_lock(&rxq->lock); in iwl_pcie_rx_init()
746 spin_unlock(&rxq->lock); in iwl_pcie_rx_init()
754 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_free() local
759 if (!rxq->bd) { in iwl_pcie_rx_free()
774 spin_lock(&rxq->lock); in iwl_pcie_rx_free()
776 spin_unlock(&rxq->lock); in iwl_pcie_rx_free()
779 rxq->bd, rxq->bd_dma); in iwl_pcie_rx_free()
780 rxq->bd_dma = 0; in iwl_pcie_rx_free()
781 rxq->bd = NULL; in iwl_pcie_rx_free()
783 if (rxq->rb_stts) in iwl_pcie_rx_free()
786 rxq->rb_stts, rxq->rb_stts_dma); in iwl_pcie_rx_free()
789 rxq->rb_stts_dma = 0; in iwl_pcie_rx_free()
790 rxq->rb_stts = NULL; in iwl_pcie_rx_free()
801 struct iwl_rxq *rxq, bool emergency) in iwl_pcie_rx_reuse_rbd() argument
808 list_add_tail(&rxb->list, &rxq->rx_used); in iwl_pcie_rx_reuse_rbd()
814 rxq->used_count++; in iwl_pcie_rx_reuse_rbd()
821 if ((rxq->used_count % RX_CLAIM_REQ_ALLOC) == RX_POST_REQ_ALLOC) { in iwl_pcie_rx_reuse_rbd()
825 list_splice_tail_init(&rxq->rx_used, &rba->rbd_empty); in iwl_pcie_rx_reuse_rbd()
838 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_handle_rb() local
950 iwl_pcie_rx_reuse_rbd(trans, rxb, rxq, emergency); in iwl_pcie_rx_handle_rb()
952 list_add_tail(&rxb->list, &rxq->rx_free); in iwl_pcie_rx_handle_rb()
953 rxq->free_count++; in iwl_pcie_rx_handle_rb()
956 iwl_pcie_rx_reuse_rbd(trans, rxb, rxq, emergency); in iwl_pcie_rx_handle_rb()
965 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_handle() local
970 spin_lock(&rxq->lock); in iwl_pcie_rx_handle()
973 r = le16_to_cpu(ACCESS_ONCE(rxq->rb_stts->closed_rb_num)) & 0x0FFF; in iwl_pcie_rx_handle()
974 i = rxq->read; in iwl_pcie_rx_handle()
983 if (unlikely(rxq->used_count == RX_QUEUE_SIZE / 2)) in iwl_pcie_rx_handle()
986 rxb = rxq->queue[i]; in iwl_pcie_rx_handle()
987 rxq->queue[i] = NULL; in iwl_pcie_rx_handle()
997 if (rxq->used_count >= RX_CLAIM_REQ_ALLOC) { in iwl_pcie_rx_handle()
1001 if (rxq->used_count % RX_CLAIM_REQ_ALLOC == 0 && in iwl_pcie_rx_handle()
1007 list_splice_tail_init(&rxq->rx_used, in iwl_pcie_rx_handle()
1019 rxq->used_count -= RX_CLAIM_REQ_ALLOC; in iwl_pcie_rx_handle()
1022 &rxq->rx_free); in iwl_pcie_rx_handle()
1023 rxq->free_count++; in iwl_pcie_rx_handle()
1031 if (rxq->used_count < RX_QUEUE_SIZE / 3) in iwl_pcie_rx_handle()
1033 spin_unlock(&rxq->lock); in iwl_pcie_rx_handle()
1035 spin_lock(&rxq->lock); in iwl_pcie_rx_handle()
1043 if (rxq->free_count >= RX_CLAIM_REQ_ALLOC) { in iwl_pcie_rx_handle()
1044 rxq->read = i; in iwl_pcie_rx_handle()
1045 spin_unlock(&rxq->lock); in iwl_pcie_rx_handle()
1052 rxq->read = i; in iwl_pcie_rx_handle()
1053 spin_unlock(&rxq->lock); in iwl_pcie_rx_handle()