Lines Matching refs:rxq
398 struct rx_queue rxq[8];
439 /* rxq/txq helper functions *************************************************/
440 static struct mv643xx_eth_private *rxq_to_mp(struct rx_queue *rxq)
442 return container_of(rxq, struct mv643xx_eth_private, rxq[rxq->index]);
450 static void rxq_enable(struct rx_queue *rxq)
452 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
453 wrlp(mp, RXQ_COMMAND, 1 << rxq->index);
456 static void rxq_disable(struct rx_queue *rxq)
458 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
459 u8 mask = 1 << rxq->index;
505 static int rxq_process(struct rx_queue *rxq, int budget)
507 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
512 while (rx < budget && rxq->rx_desc_count) {
518 rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc];
525 skb = rxq->rx_skb[rxq->rx_curr_desc];
526 rxq->rx_skb[rxq->rx_curr_desc] = NULL;
528 rxq->rx_curr_desc++;
529 if (rxq->rx_curr_desc == rxq->rx_ring_size)
530 rxq->rx_curr_desc = 0;
534 rxq->rx_desc_count--;
537 mp->work_rx_refill |= 1 << rxq->index;
592 mp->work_rx &= ~(1 << rxq->index);
597 static int rxq_refill(struct rx_queue *rxq, int budget)
599 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
603 while (refilled < budget && rxq->rx_desc_count < rxq->rx_ring_size) {
620 rxq->rx_desc_count++;
622 rx = rxq->rx_used_desc++;
623 if (rxq->rx_used_desc == rxq->rx_ring_size)
624 rxq->rx_used_desc = 0;
626 rx_desc = rxq->rx_desc_area + rx;
633 rxq->rx_skb[rx] = skb;
647 mp->work_rx_refill &= ~(1 << rxq->index);
1929 struct rx_queue *rxq = mp->rxq + index;
1934 rxq->index = index;
1936 rxq->rx_ring_size = mp->rx_ring_size;
1938 rxq->rx_desc_count = 0;
1939 rxq->rx_curr_desc = 0;
1940 rxq->rx_used_desc = 0;
1942 size = rxq->rx_ring_size * sizeof(struct rx_desc);
1945 rxq->rx_desc_area = ioremap(mp->rx_desc_sram_addr,
1947 rxq->rx_desc_dma = mp->rx_desc_sram_addr;
1949 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent,
1950 size, &rxq->rx_desc_dma,
1954 if (rxq->rx_desc_area == NULL) {
1959 memset(rxq->rx_desc_area, 0, size);
1961 rxq->rx_desc_area_size = size;
1962 rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb),
1964 if (rxq->rx_skb == NULL)
1967 rx_desc = rxq->rx_desc_area;
1968 for (i = 0; i < rxq->rx_ring_size; i++) {
1972 if (nexti == rxq->rx_ring_size)
1975 rx_desc[i].next_desc_ptr = rxq->rx_desc_dma +
1984 iounmap(rxq->rx_desc_area);
1987 rxq->rx_desc_area,
1988 rxq->rx_desc_dma);
1994 static void rxq_deinit(struct rx_queue *rxq)
1996 struct mv643xx_eth_private *mp = rxq_to_mp(rxq);
1999 rxq_disable(rxq);
2001 for (i = 0; i < rxq->rx_ring_size; i++) {
2002 if (rxq->rx_skb[i]) {
2003 dev_consume_skb_any(rxq->rx_skb[i]);
2004 rxq->rx_desc_count--;
2008 if (rxq->rx_desc_count) {
2010 rxq->rx_desc_count);
2013 if (rxq->index == 0 &&
2014 rxq->rx_desc_area_size <= mp->rx_desc_sram_size)
2015 iounmap(rxq->rx_desc_area);
2017 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size,
2018 rxq->rx_desc_area, rxq->rx_desc_dma);
2020 kfree(rxq->rx_skb);
2282 work_done += rxq_process(mp->rxq + queue, work_tbd);
2284 work_done += rxq_refill(mp->rxq + queue, work_tbd);
2372 struct rx_queue *rxq = mp->rxq + i;
2375 addr = (u32)rxq->rx_desc_dma;
2376 addr += rxq->rx_curr_desc * sizeof(struct rx_desc);
2379 rxq_enable(rxq);
2438 rxq_deinit(mp->rxq + i);
2442 rxq_refill(mp->rxq + i, INT_MAX);
2472 rxq_deinit(mp->rxq + i);
2486 rxq_disable(mp->rxq + i);
2530 rxq_deinit(mp->rxq + i);