Lines Matching refs:rxq

414 	struct rx_queue rxq[8];  member
456 static struct mv643xx_eth_private *rxq_to_mp(struct rx_queue *rxq) in rxq_to_mp() argument
458 return container_of(rxq, struct mv643xx_eth_private, rxq[rxq->index]); in rxq_to_mp()
466 static void rxq_enable(struct rx_queue *rxq) in rxq_enable() argument
468 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_enable()
469 wrlp(mp, RXQ_COMMAND, 1 << rxq->index); in rxq_enable()
472 static void rxq_disable(struct rx_queue *rxq) in rxq_disable() argument
474 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_disable()
475 u8 mask = 1 << rxq->index; in rxq_disable()
521 static int rxq_process(struct rx_queue *rxq, int budget) in rxq_process() argument
523 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_process()
528 while (rx < budget && rxq->rx_desc_count) { in rxq_process()
534 rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc]; in rxq_process()
541 skb = rxq->rx_skb[rxq->rx_curr_desc]; in rxq_process()
542 rxq->rx_skb[rxq->rx_curr_desc] = NULL; in rxq_process()
544 rxq->rx_curr_desc++; in rxq_process()
545 if (rxq->rx_curr_desc == rxq->rx_ring_size) in rxq_process()
546 rxq->rx_curr_desc = 0; in rxq_process()
550 rxq->rx_desc_count--; in rxq_process()
553 mp->work_rx_refill |= 1 << rxq->index; in rxq_process()
608 mp->work_rx &= ~(1 << rxq->index); in rxq_process()
613 static int rxq_refill(struct rx_queue *rxq, int budget) in rxq_refill() argument
615 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_refill()
619 while (refilled < budget && rxq->rx_desc_count < rxq->rx_ring_size) { in rxq_refill()
636 rxq->rx_desc_count++; in rxq_refill()
638 rx = rxq->rx_used_desc++; in rxq_refill()
639 if (rxq->rx_used_desc == rxq->rx_ring_size) in rxq_refill()
640 rxq->rx_used_desc = 0; in rxq_refill()
642 rx_desc = rxq->rx_desc_area + rx; in rxq_refill()
649 rxq->rx_skb[rx] = skb; in rxq_refill()
663 mp->work_rx_refill &= ~(1 << rxq->index); in rxq_refill()
1920 struct rx_queue *rxq = mp->rxq + index; in rxq_init() local
1925 rxq->index = index; in rxq_init()
1927 rxq->rx_ring_size = mp->rx_ring_size; in rxq_init()
1929 rxq->rx_desc_count = 0; in rxq_init()
1930 rxq->rx_curr_desc = 0; in rxq_init()
1931 rxq->rx_used_desc = 0; in rxq_init()
1933 size = rxq->rx_ring_size * sizeof(struct rx_desc); in rxq_init()
1936 rxq->rx_desc_area = ioremap(mp->rx_desc_sram_addr, in rxq_init()
1938 rxq->rx_desc_dma = mp->rx_desc_sram_addr; in rxq_init()
1940 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent, in rxq_init()
1941 size, &rxq->rx_desc_dma, in rxq_init()
1945 if (rxq->rx_desc_area == NULL) { in rxq_init()
1950 memset(rxq->rx_desc_area, 0, size); in rxq_init()
1952 rxq->rx_desc_area_size = size; in rxq_init()
1953 rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb), in rxq_init()
1955 if (rxq->rx_skb == NULL) in rxq_init()
1958 rx_desc = rxq->rx_desc_area; in rxq_init()
1959 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_init()
1963 if (nexti == rxq->rx_ring_size) in rxq_init()
1966 rx_desc[i].next_desc_ptr = rxq->rx_desc_dma + in rxq_init()
1975 iounmap(rxq->rx_desc_area); in rxq_init()
1978 rxq->rx_desc_area, in rxq_init()
1979 rxq->rx_desc_dma); in rxq_init()
1985 static void rxq_deinit(struct rx_queue *rxq) in rxq_deinit() argument
1987 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_deinit()
1990 rxq_disable(rxq); in rxq_deinit()
1992 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_deinit()
1993 if (rxq->rx_skb[i]) { in rxq_deinit()
1994 dev_kfree_skb(rxq->rx_skb[i]); in rxq_deinit()
1995 rxq->rx_desc_count--; in rxq_deinit()
1999 if (rxq->rx_desc_count) { in rxq_deinit()
2001 rxq->rx_desc_count); in rxq_deinit()
2004 if (rxq->index == 0 && in rxq_deinit()
2005 rxq->rx_desc_area_size <= mp->rx_desc_sram_size) in rxq_deinit()
2006 iounmap(rxq->rx_desc_area); in rxq_deinit()
2008 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size, in rxq_deinit()
2009 rxq->rx_desc_area, rxq->rx_desc_dma); in rxq_deinit()
2011 kfree(rxq->rx_skb); in rxq_deinit()
2273 work_done += rxq_process(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2275 work_done += rxq_refill(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2361 struct rx_queue *rxq = mp->rxq + i; in port_start() local
2364 addr = (u32)rxq->rx_desc_dma; in port_start()
2365 addr += rxq->rx_curr_desc * sizeof(struct rx_desc); in port_start()
2368 rxq_enable(rxq); in port_start()
2427 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2431 rxq_refill(mp->rxq + i, INT_MAX); in mv643xx_eth_open()
2461 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2474 rxq_disable(mp->rxq + i); in port_reset()
2518 rxq_deinit(mp->rxq + i); in mv643xx_eth_stop()