Lines Matching refs:rxq

399 	struct rx_queue rxq[8];  member
441 static struct mv643xx_eth_private *rxq_to_mp(struct rx_queue *rxq) in rxq_to_mp() argument
443 return container_of(rxq, struct mv643xx_eth_private, rxq[rxq->index]); in rxq_to_mp()
451 static void rxq_enable(struct rx_queue *rxq) in rxq_enable() argument
453 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_enable()
454 wrlp(mp, RXQ_COMMAND, 1 << rxq->index); in rxq_enable()
457 static void rxq_disable(struct rx_queue *rxq) in rxq_disable() argument
459 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_disable()
460 u8 mask = 1 << rxq->index; in rxq_disable()
506 static int rxq_process(struct rx_queue *rxq, int budget) in rxq_process() argument
508 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_process()
513 while (rx < budget && rxq->rx_desc_count) { in rxq_process()
519 rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc]; in rxq_process()
526 skb = rxq->rx_skb[rxq->rx_curr_desc]; in rxq_process()
527 rxq->rx_skb[rxq->rx_curr_desc] = NULL; in rxq_process()
529 rxq->rx_curr_desc++; in rxq_process()
530 if (rxq->rx_curr_desc == rxq->rx_ring_size) in rxq_process()
531 rxq->rx_curr_desc = 0; in rxq_process()
535 rxq->rx_desc_count--; in rxq_process()
538 mp->work_rx_refill |= 1 << rxq->index; in rxq_process()
593 mp->work_rx &= ~(1 << rxq->index); in rxq_process()
598 static int rxq_refill(struct rx_queue *rxq, int budget) in rxq_refill() argument
600 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_refill()
604 while (refilled < budget && rxq->rx_desc_count < rxq->rx_ring_size) { in rxq_refill()
621 rxq->rx_desc_count++; in rxq_refill()
623 rx = rxq->rx_used_desc++; in rxq_refill()
624 if (rxq->rx_used_desc == rxq->rx_ring_size) in rxq_refill()
625 rxq->rx_used_desc = 0; in rxq_refill()
627 rx_desc = rxq->rx_desc_area + rx; in rxq_refill()
634 rxq->rx_skb[rx] = skb; in rxq_refill()
648 mp->work_rx_refill &= ~(1 << rxq->index); in rxq_refill()
1937 struct rx_queue *rxq = mp->rxq + index; in rxq_init() local
1942 rxq->index = index; in rxq_init()
1944 rxq->rx_ring_size = mp->rx_ring_size; in rxq_init()
1946 rxq->rx_desc_count = 0; in rxq_init()
1947 rxq->rx_curr_desc = 0; in rxq_init()
1948 rxq->rx_used_desc = 0; in rxq_init()
1950 size = rxq->rx_ring_size * sizeof(struct rx_desc); in rxq_init()
1953 rxq->rx_desc_area = ioremap(mp->rx_desc_sram_addr, in rxq_init()
1955 rxq->rx_desc_dma = mp->rx_desc_sram_addr; in rxq_init()
1957 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent, in rxq_init()
1958 size, &rxq->rx_desc_dma, in rxq_init()
1962 if (rxq->rx_desc_area == NULL) { in rxq_init()
1967 memset(rxq->rx_desc_area, 0, size); in rxq_init()
1969 rxq->rx_desc_area_size = size; in rxq_init()
1970 rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb), in rxq_init()
1972 if (rxq->rx_skb == NULL) in rxq_init()
1975 rx_desc = rxq->rx_desc_area; in rxq_init()
1976 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_init()
1980 if (nexti == rxq->rx_ring_size) in rxq_init()
1983 rx_desc[i].next_desc_ptr = rxq->rx_desc_dma + in rxq_init()
1992 iounmap(rxq->rx_desc_area); in rxq_init()
1995 rxq->rx_desc_area, in rxq_init()
1996 rxq->rx_desc_dma); in rxq_init()
2002 static void rxq_deinit(struct rx_queue *rxq) in rxq_deinit() argument
2004 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_deinit()
2007 rxq_disable(rxq); in rxq_deinit()
2009 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_deinit()
2010 if (rxq->rx_skb[i]) { in rxq_deinit()
2011 dev_consume_skb_any(rxq->rx_skb[i]); in rxq_deinit()
2012 rxq->rx_desc_count--; in rxq_deinit()
2016 if (rxq->rx_desc_count) { in rxq_deinit()
2018 rxq->rx_desc_count); in rxq_deinit()
2021 if (rxq->index == 0 && in rxq_deinit()
2022 rxq->rx_desc_area_size <= mp->rx_desc_sram_size) in rxq_deinit()
2023 iounmap(rxq->rx_desc_area); in rxq_deinit()
2025 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size, in rxq_deinit()
2026 rxq->rx_desc_area, rxq->rx_desc_dma); in rxq_deinit()
2028 kfree(rxq->rx_skb); in rxq_deinit()
2290 work_done += rxq_process(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2292 work_done += rxq_refill(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2380 struct rx_queue *rxq = mp->rxq + i; in port_start() local
2383 addr = (u32)rxq->rx_desc_dma; in port_start()
2384 addr += rxq->rx_curr_desc * sizeof(struct rx_desc); in port_start()
2387 rxq_enable(rxq); in port_start()
2446 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2450 rxq_refill(mp->rxq + i, INT_MAX); in mv643xx_eth_open()
2480 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2494 rxq_disable(mp->rxq + i); in port_reset()
2538 rxq_deinit(mp->rxq + i); in mv643xx_eth_stop()