Lines Matching refs:rxq

399 	struct rx_queue rxq[8];
440 /* rxq/txq helper functions *************************************************/
441 static struct mv643xx_eth_private *rxq_to_mp(struct rx_queue *rxq)
443 return container_of(rxq, struct mv643xx_eth_private, rxq[rxq->index]);
451 static void rxq_enable(struct rx_queue *rxq)
453 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
454 wrlp(mp, RXQ_COMMAND, 1 << rxq->index);
457 static void rxq_disable(struct rx_queue *rxq)
459 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
460 u8 mask = 1 << rxq->index;
506 static int rxq_process(struct rx_queue *rxq, int budget)
508 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
513 while (rx < budget && rxq->rx_desc_count) {
519 rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc];
526 skb = rxq->rx_skb[rxq->rx_curr_desc];
527 rxq->rx_skb[rxq->rx_curr_desc] = NULL;
529 rxq->rx_curr_desc++;
530 if (rxq->rx_curr_desc == rxq->rx_ring_size)
531 rxq->rx_curr_desc = 0;
535 rxq->rx_desc_count--;
538 mp->work_rx_refill |= 1 << rxq->index;
593 mp->work_rx &= ~(1 << rxq->index);
598 static int rxq_refill(struct rx_queue *rxq, int budget)
600 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
604 while (refilled < budget && rxq->rx_desc_count < rxq->rx_ring_size) {
621 rxq->rx_desc_count++;
623 rx = rxq->rx_used_desc++;
624 if (rxq->rx_used_desc == rxq->rx_ring_size)
625 rxq->rx_used_desc = 0;
627 rx_desc = rxq->rx_desc_area + rx;
634 rxq->rx_skb[rx] = skb;
648 mp->work_rx_refill &= ~(1 << rxq->index);
1940 struct rx_queue *rxq = mp->rxq + index;
1945 rxq->index = index;
1947 rxq->rx_ring_size = mp->rx_ring_size;
1949 rxq->rx_desc_count = 0;
1950 rxq->rx_curr_desc = 0;
1951 rxq->rx_used_desc = 0;
1953 size = rxq->rx_ring_size * sizeof(struct rx_desc);
1956 rxq->rx_desc_area = ioremap(mp->rx_desc_sram_addr,
1958 rxq->rx_desc_dma = mp->rx_desc_sram_addr;
1960 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent,
1961 size, &rxq->rx_desc_dma,
1965 if (rxq->rx_desc_area == NULL) {
1970 memset(rxq->rx_desc_area, 0, size);
1972 rxq->rx_desc_area_size = size;
1973 rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb),
1975 if (rxq->rx_skb == NULL)
1978 rx_desc = rxq->rx_desc_area;
1979 for (i = 0; i < rxq->rx_ring_size; i++) {
1983 if (nexti == rxq->rx_ring_size)
1986 rx_desc[i].next_desc_ptr = rxq->rx_desc_dma +
1995 iounmap(rxq->rx_desc_area);
1998 rxq->rx_desc_area,
1999 rxq->rx_desc_dma);
2005 static void rxq_deinit(struct rx_queue *rxq)
2007 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
2010 rxq_disable(rxq);
2012 for (i = 0; i < rxq->rx_ring_size; i++) {
2013 if (rxq->rx_skb[i]) {
2014 dev_consume_skb_any(rxq->rx_skb[i]);
2015 rxq->rx_desc_count--;
2019 if (rxq->rx_desc_count) {
2021 rxq->rx_desc_count);
2024 if (rxq->index == 0 &&
2025 rxq->rx_desc_area_size <= mp->rx_desc_sram_size)
2026 iounmap(rxq->rx_desc_area);
2028 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size,
2029 rxq->rx_desc_area, rxq->rx_desc_dma);
2031 kfree(rxq->rx_skb);
2293 work_done += rxq_process(mp->rxq + queue, work_tbd);
2295 work_done += rxq_refill(mp->rxq + queue, work_tbd);
2383 struct rx_queue *rxq = mp->rxq + i;
2386 addr = (u32)rxq->rx_desc_dma;
2387 addr += rxq->rx_curr_desc * sizeof(struct rx_desc);
2390 rxq_enable(rxq);
2449 rxq_deinit(mp->rxq + i);
2453 rxq_refill(mp->rxq + i, INT_MAX);
2483 rxq_deinit(mp->rxq + i);
2497 rxq_disable(mp->rxq + i);
2541 rxq_deinit(mp->rxq + i);