Lines Matching refs:rxq
398 struct rx_queue rxq[8]; member
440 static struct mv643xx_eth_private *rxq_to_mp(struct rx_queue *rxq) in rxq_to_mp() argument
442 return container_of(rxq, struct mv643xx_eth_private, rxq[rxq->index]); in rxq_to_mp()
450 static void rxq_enable(struct rx_queue *rxq) in rxq_enable() argument
452 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_enable()
453 wrlp(mp, RXQ_COMMAND, 1 << rxq->index); in rxq_enable()
456 static void rxq_disable(struct rx_queue *rxq) in rxq_disable() argument
458 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_disable()
459 u8 mask = 1 << rxq->index; in rxq_disable()
505 static int rxq_process(struct rx_queue *rxq, int budget) in rxq_process() argument
507 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_process()
512 while (rx < budget && rxq->rx_desc_count) { in rxq_process()
518 rx_desc = &rxq->rx_desc_area[rxq->rx_curr_desc]; in rxq_process()
525 skb = rxq->rx_skb[rxq->rx_curr_desc]; in rxq_process()
526 rxq->rx_skb[rxq->rx_curr_desc] = NULL; in rxq_process()
528 rxq->rx_curr_desc++; in rxq_process()
529 if (rxq->rx_curr_desc == rxq->rx_ring_size) in rxq_process()
530 rxq->rx_curr_desc = 0; in rxq_process()
534 rxq->rx_desc_count--; in rxq_process()
537 mp->work_rx_refill |= 1 << rxq->index; in rxq_process()
592 mp->work_rx &= ~(1 << rxq->index); in rxq_process()
597 static int rxq_refill(struct rx_queue *rxq, int budget) in rxq_refill() argument
599 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_refill()
603 while (refilled < budget && rxq->rx_desc_count < rxq->rx_ring_size) { in rxq_refill()
620 rxq->rx_desc_count++; in rxq_refill()
622 rx = rxq->rx_used_desc++; in rxq_refill()
623 if (rxq->rx_used_desc == rxq->rx_ring_size) in rxq_refill()
624 rxq->rx_used_desc = 0; in rxq_refill()
626 rx_desc = rxq->rx_desc_area + rx; in rxq_refill()
633 rxq->rx_skb[rx] = skb; in rxq_refill()
647 mp->work_rx_refill &= ~(1 << rxq->index); in rxq_refill()
1935 struct rx_queue *rxq = mp->rxq + index; in rxq_init() local
1940 rxq->index = index; in rxq_init()
1942 rxq->rx_ring_size = mp->rx_ring_size; in rxq_init()
1944 rxq->rx_desc_count = 0; in rxq_init()
1945 rxq->rx_curr_desc = 0; in rxq_init()
1946 rxq->rx_used_desc = 0; in rxq_init()
1948 size = rxq->rx_ring_size * sizeof(struct rx_desc); in rxq_init()
1951 rxq->rx_desc_area = ioremap(mp->rx_desc_sram_addr, in rxq_init()
1953 rxq->rx_desc_dma = mp->rx_desc_sram_addr; in rxq_init()
1955 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent, in rxq_init()
1956 size, &rxq->rx_desc_dma, in rxq_init()
1960 if (rxq->rx_desc_area == NULL) { in rxq_init()
1965 memset(rxq->rx_desc_area, 0, size); in rxq_init()
1967 rxq->rx_desc_area_size = size; in rxq_init()
1968 rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb), in rxq_init()
1970 if (rxq->rx_skb == NULL) in rxq_init()
1973 rx_desc = rxq->rx_desc_area; in rxq_init()
1974 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_init()
1978 if (nexti == rxq->rx_ring_size) in rxq_init()
1981 rx_desc[i].next_desc_ptr = rxq->rx_desc_dma + in rxq_init()
1990 iounmap(rxq->rx_desc_area); in rxq_init()
1993 rxq->rx_desc_area, in rxq_init()
1994 rxq->rx_desc_dma); in rxq_init()
2000 static void rxq_deinit(struct rx_queue *rxq) in rxq_deinit() argument
2002 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_deinit()
2005 rxq_disable(rxq); in rxq_deinit()
2007 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_deinit()
2008 if (rxq->rx_skb[i]) { in rxq_deinit()
2009 dev_consume_skb_any(rxq->rx_skb[i]); in rxq_deinit()
2010 rxq->rx_desc_count--; in rxq_deinit()
2014 if (rxq->rx_desc_count) { in rxq_deinit()
2016 rxq->rx_desc_count); in rxq_deinit()
2019 if (rxq->index == 0 && in rxq_deinit()
2020 rxq->rx_desc_area_size <= mp->rx_desc_sram_size) in rxq_deinit()
2021 iounmap(rxq->rx_desc_area); in rxq_deinit()
2023 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size, in rxq_deinit()
2024 rxq->rx_desc_area, rxq->rx_desc_dma); in rxq_deinit()
2026 kfree(rxq->rx_skb); in rxq_deinit()
2288 work_done += rxq_process(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2290 work_done += rxq_refill(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2378 struct rx_queue *rxq = mp->rxq + i; in port_start() local
2381 addr = (u32)rxq->rx_desc_dma; in port_start()
2382 addr += rxq->rx_curr_desc * sizeof(struct rx_desc); in port_start()
2385 rxq_enable(rxq); in port_start()
2444 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2448 rxq_refill(mp->rxq + i, INT_MAX); in mv643xx_eth_open()
2478 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2491 rxq_disable(mp->rxq + i); in port_reset()
2535 rxq_deinit(mp->rxq + i); in mv643xx_eth_stop()