Lines Matching refs:rxq
114 static int iwl_rxq_space(const struct iwl_rxq *rxq) in iwl_rxq_space() argument
125 return (rxq->read - rxq->write - 1) & (RX_QUEUE_SIZE - 1); in iwl_rxq_space()
152 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_inc_wr_ptr() local
155 lockdep_assert_held(&rxq->lock); in iwl_pcie_rxq_inc_wr_ptr()
171 rxq->need_update = true; in iwl_pcie_rxq_inc_wr_ptr()
176 rxq->write_actual = round_down(rxq->write, 8); 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()
183 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_check_wrptr() local
185 spin_lock(&rxq->lock); in iwl_pcie_rxq_check_wrptr()
187 if (!rxq->need_update) in iwl_pcie_rxq_check_wrptr()
191 rxq->need_update = false; in iwl_pcie_rxq_check_wrptr()
194 spin_unlock(&rxq->lock); in iwl_pcie_rxq_check_wrptr()
211 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_restock() local
225 spin_lock(&rxq->lock); in iwl_pcie_rxq_restock()
226 while ((iwl_rxq_space(rxq) > 0) && (rxq->free_count)) { in iwl_pcie_rxq_restock()
228 rxb = rxq->queue[rxq->write]; in iwl_pcie_rxq_restock()
232 rxb = list_first_entry(&rxq->rx_free, struct iwl_rx_mem_buffer, in iwl_pcie_rxq_restock()
237 rxq->bd[rxq->write] = iwl_pcie_dma_addr2rbd_ptr(rxb->page_dma); in iwl_pcie_rxq_restock()
238 rxq->queue[rxq->write] = rxb; in iwl_pcie_rxq_restock()
239 rxq->write = (rxq->write + 1) & RX_QUEUE_MASK; in iwl_pcie_rxq_restock()
240 rxq->free_count--; in iwl_pcie_rxq_restock()
242 spin_unlock(&rxq->lock); in iwl_pcie_rxq_restock()
245 if (rxq->free_count <= RX_LOW_WATERMARK) in iwl_pcie_rxq_restock()
250 if (rxq->write_actual != (rxq->write & ~0x7)) { in iwl_pcie_rxq_restock()
251 spin_lock(&rxq->lock); in iwl_pcie_rxq_restock()
253 spin_unlock(&rxq->lock); in iwl_pcie_rxq_restock()
269 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_alloc_rbs() local
275 spin_lock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
276 if (list_empty(&rxq->rx_used)) { in iwl_pcie_rxq_alloc_rbs()
277 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
280 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
282 if (rxq->free_count > RX_LOW_WATERMARK) in iwl_pcie_rxq_alloc_rbs()
296 if ((rxq->free_count <= RX_LOW_WATERMARK) && in iwl_pcie_rxq_alloc_rbs()
302 rxq->free_count); in iwl_pcie_rxq_alloc_rbs()
309 spin_lock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
311 if (list_empty(&rxq->rx_used)) { in iwl_pcie_rxq_alloc_rbs()
312 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
316 rxb = list_first_entry(&rxq->rx_used, struct iwl_rx_mem_buffer, in iwl_pcie_rxq_alloc_rbs()
319 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
330 spin_lock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
331 list_add(&rxb->list, &rxq->rx_used); in iwl_pcie_rxq_alloc_rbs()
332 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
341 spin_lock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
343 list_add_tail(&rxb->list, &rxq->rx_free); in iwl_pcie_rxq_alloc_rbs()
344 rxq->free_count++; in iwl_pcie_rxq_alloc_rbs()
346 spin_unlock(&rxq->lock); in iwl_pcie_rxq_alloc_rbs()
353 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rxq_free_rbs() local
356 lockdep_assert_held(&rxq->lock); in iwl_pcie_rxq_free_rbs()
359 if (!rxq->pool[i].page) in iwl_pcie_rxq_free_rbs()
361 dma_unmap_page(trans->dev, rxq->pool[i].page_dma, in iwl_pcie_rxq_free_rbs()
364 __free_pages(rxq->pool[i].page, trans_pcie->rx_page_order); in iwl_pcie_rxq_free_rbs()
365 rxq->pool[i].page = NULL; in iwl_pcie_rxq_free_rbs()
395 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_alloc() local
398 memset(&trans_pcie->rxq, 0, sizeof(trans_pcie->rxq)); in iwl_pcie_rx_alloc()
400 spin_lock_init(&rxq->lock); in iwl_pcie_rx_alloc()
402 if (WARN_ON(rxq->bd || rxq->rb_stts)) in iwl_pcie_rx_alloc()
406 rxq->bd = dma_zalloc_coherent(dev, sizeof(__le32) * RX_QUEUE_SIZE, in iwl_pcie_rx_alloc()
407 &rxq->bd_dma, GFP_KERNEL); in iwl_pcie_rx_alloc()
408 if (!rxq->bd) in iwl_pcie_rx_alloc()
412 rxq->rb_stts = dma_zalloc_coherent(dev, sizeof(*rxq->rb_stts), in iwl_pcie_rx_alloc()
413 &rxq->rb_stts_dma, GFP_KERNEL); in iwl_pcie_rx_alloc()
414 if (!rxq->rb_stts) in iwl_pcie_rx_alloc()
421 rxq->bd, rxq->bd_dma); in iwl_pcie_rx_alloc()
422 rxq->bd_dma = 0; in iwl_pcie_rx_alloc()
423 rxq->bd = NULL; 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
451 (u32)(rxq->bd_dma >> 8)); in iwl_pcie_rx_hw_init()
455 rxq->rb_stts_dma >> 4); in iwl_pcie_rx_hw_init()
481 static void iwl_pcie_rx_init_rxb_lists(struct iwl_rxq *rxq) in iwl_pcie_rx_init_rxb_lists() argument
485 lockdep_assert_held(&rxq->lock); in iwl_pcie_rx_init_rxb_lists()
487 INIT_LIST_HEAD(&rxq->rx_free); in iwl_pcie_rx_init_rxb_lists()
488 INIT_LIST_HEAD(&rxq->rx_used); in iwl_pcie_rx_init_rxb_lists()
489 rxq->free_count = 0; in iwl_pcie_rx_init_rxb_lists()
492 list_add(&rxq->pool[i].list, &rxq->rx_used); in iwl_pcie_rx_init_rxb_lists()
498 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_init() local
501 if (!rxq->bd) { in iwl_pcie_rx_init()
507 spin_lock(&rxq->lock); in iwl_pcie_rx_init()
513 iwl_pcie_rx_init_rxb_lists(rxq); in iwl_pcie_rx_init()
516 rxq->queue[i] = NULL; in iwl_pcie_rx_init()
520 rxq->read = rxq->write = 0; in iwl_pcie_rx_init()
521 rxq->write_actual = 0; in iwl_pcie_rx_init()
522 memset(rxq->rb_stts, 0, sizeof(*rxq->rb_stts)); in iwl_pcie_rx_init()
523 spin_unlock(&rxq->lock); in iwl_pcie_rx_init()
527 iwl_pcie_rx_hw_init(trans, rxq); in iwl_pcie_rx_init()
529 spin_lock(&rxq->lock); in iwl_pcie_rx_init()
531 spin_unlock(&rxq->lock); in iwl_pcie_rx_init()
539 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_free() local
543 if (!rxq->bd) { in iwl_pcie_rx_free()
550 spin_lock(&rxq->lock); in iwl_pcie_rx_free()
552 spin_unlock(&rxq->lock); in iwl_pcie_rx_free()
555 rxq->bd, rxq->bd_dma); in iwl_pcie_rx_free()
556 rxq->bd_dma = 0; in iwl_pcie_rx_free()
557 rxq->bd = NULL; in iwl_pcie_rx_free()
559 if (rxq->rb_stts) in iwl_pcie_rx_free()
562 rxq->rb_stts, rxq->rb_stts_dma); in iwl_pcie_rx_free()
565 rxq->rb_stts_dma = 0; in iwl_pcie_rx_free()
566 rxq->rb_stts = NULL; in iwl_pcie_rx_free()
573 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_handle_rb() local
691 list_add_tail(&rxb->list, &rxq->rx_used); in iwl_pcie_rx_handle_rb()
693 list_add_tail(&rxb->list, &rxq->rx_free); in iwl_pcie_rx_handle_rb()
694 rxq->free_count++; in iwl_pcie_rx_handle_rb()
697 list_add_tail(&rxb->list, &rxq->rx_used); in iwl_pcie_rx_handle_rb()
706 struct iwl_rxq *rxq = &trans_pcie->rxq; in iwl_pcie_rx_handle() local
713 spin_lock(&rxq->lock); in iwl_pcie_rx_handle()
716 r = le16_to_cpu(ACCESS_ONCE(rxq->rb_stts->closed_rb_num)) & 0x0FFF; in iwl_pcie_rx_handle()
717 i = rxq->read; in iwl_pcie_rx_handle()
724 total_empty = r - rxq->write_actual; in iwl_pcie_rx_handle()
734 rxb = rxq->queue[i]; in iwl_pcie_rx_handle()
735 rxq->queue[i] = NULL; in iwl_pcie_rx_handle()
747 rxq->read = i; in iwl_pcie_rx_handle()
748 spin_unlock(&rxq->lock); in iwl_pcie_rx_handle()
757 rxq->read = i; in iwl_pcie_rx_handle()
758 spin_unlock(&rxq->lock); in iwl_pcie_rx_handle()