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()
1949 struct rx_queue *rxq = mp->rxq + index; in rxq_init() local
1954 rxq->index = index; in rxq_init()
1956 rxq->rx_ring_size = mp->rx_ring_size; in rxq_init()
1958 rxq->rx_desc_count = 0; in rxq_init()
1959 rxq->rx_curr_desc = 0; in rxq_init()
1960 rxq->rx_used_desc = 0; in rxq_init()
1962 size = rxq->rx_ring_size * sizeof(struct rx_desc); in rxq_init()
1965 rxq->rx_desc_area = ioremap(mp->rx_desc_sram_addr, in rxq_init()
1967 rxq->rx_desc_dma = mp->rx_desc_sram_addr; in rxq_init()
1969 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent, in rxq_init()
1970 size, &rxq->rx_desc_dma, in rxq_init()
1974 if (rxq->rx_desc_area == NULL) { in rxq_init()
1979 memset(rxq->rx_desc_area, 0, size); in rxq_init()
1981 rxq->rx_desc_area_size = size; in rxq_init()
1982 rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb), in rxq_init()
1984 if (rxq->rx_skb == NULL) in rxq_init()
1987 rx_desc = rxq->rx_desc_area; in rxq_init()
1988 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_init()
1992 if (nexti == rxq->rx_ring_size) in rxq_init()
1995 rx_desc[i].next_desc_ptr = rxq->rx_desc_dma + in rxq_init()
2004 iounmap(rxq->rx_desc_area); in rxq_init()
2007 rxq->rx_desc_area, in rxq_init()
2008 rxq->rx_desc_dma); in rxq_init()
2014 static void rxq_deinit(struct rx_queue *rxq) in rxq_deinit() argument
2016 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_deinit()
2019 rxq_disable(rxq); in rxq_deinit()
2021 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_deinit()
2022 if (rxq->rx_skb[i]) { in rxq_deinit()
2023 dev_kfree_skb(rxq->rx_skb[i]); in rxq_deinit()
2024 rxq->rx_desc_count--; in rxq_deinit()
2028 if (rxq->rx_desc_count) { in rxq_deinit()
2030 rxq->rx_desc_count); in rxq_deinit()
2033 if (rxq->index == 0 && in rxq_deinit()
2034 rxq->rx_desc_area_size <= mp->rx_desc_sram_size) in rxq_deinit()
2035 iounmap(rxq->rx_desc_area); in rxq_deinit()
2037 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size, in rxq_deinit()
2038 rxq->rx_desc_area, rxq->rx_desc_dma); in rxq_deinit()
2040 kfree(rxq->rx_skb); in rxq_deinit()
2302 work_done += rxq_process(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2304 work_done += rxq_refill(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2390 struct rx_queue *rxq = mp->rxq + i; in port_start() local
2393 addr = (u32)rxq->rx_desc_dma; in port_start()
2394 addr += rxq->rx_curr_desc * sizeof(struct rx_desc); in port_start()
2397 rxq_enable(rxq); in port_start()
2456 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2460 rxq_refill(mp->rxq + i, INT_MAX); in mv643xx_eth_open()
2490 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2503 rxq_disable(mp->rxq + i); in port_reset()
2547 rxq_deinit(mp->rxq + i); in mv643xx_eth_stop()