• Home
  • Raw
  • Download

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()
1929 struct rx_queue *rxq = mp->rxq + index; in rxq_init() local
1934 rxq->index = index; in rxq_init()
1936 rxq->rx_ring_size = mp->rx_ring_size; in rxq_init()
1938 rxq->rx_desc_count = 0; in rxq_init()
1939 rxq->rx_curr_desc = 0; in rxq_init()
1940 rxq->rx_used_desc = 0; in rxq_init()
1942 size = rxq->rx_ring_size * sizeof(struct rx_desc); in rxq_init()
1945 rxq->rx_desc_area = ioremap(mp->rx_desc_sram_addr, in rxq_init()
1947 rxq->rx_desc_dma = mp->rx_desc_sram_addr; in rxq_init()
1949 rxq->rx_desc_area = dma_alloc_coherent(mp->dev->dev.parent, in rxq_init()
1950 size, &rxq->rx_desc_dma, in rxq_init()
1954 if (rxq->rx_desc_area == NULL) { in rxq_init()
1959 memset(rxq->rx_desc_area, 0, size); in rxq_init()
1961 rxq->rx_desc_area_size = size; in rxq_init()
1962 rxq->rx_skb = kcalloc(rxq->rx_ring_size, sizeof(*rxq->rx_skb), in rxq_init()
1964 if (rxq->rx_skb == NULL) in rxq_init()
1967 rx_desc = rxq->rx_desc_area; in rxq_init()
1968 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_init()
1972 if (nexti == rxq->rx_ring_size) in rxq_init()
1975 rx_desc[i].next_desc_ptr = rxq->rx_desc_dma + in rxq_init()
1984 iounmap(rxq->rx_desc_area); in rxq_init()
1987 rxq->rx_desc_area, in rxq_init()
1988 rxq->rx_desc_dma); in rxq_init()
1994 static void rxq_deinit(struct rx_queue *rxq) in rxq_deinit() argument
1996 struct mv643xx_eth_private *mp = rxq_to_mp(rxq); in rxq_deinit()
1999 rxq_disable(rxq); in rxq_deinit()
2001 for (i = 0; i < rxq->rx_ring_size; i++) { in rxq_deinit()
2002 if (rxq->rx_skb[i]) { in rxq_deinit()
2003 dev_consume_skb_any(rxq->rx_skb[i]); in rxq_deinit()
2004 rxq->rx_desc_count--; in rxq_deinit()
2008 if (rxq->rx_desc_count) { in rxq_deinit()
2010 rxq->rx_desc_count); in rxq_deinit()
2013 if (rxq->index == 0 && in rxq_deinit()
2014 rxq->rx_desc_area_size <= mp->rx_desc_sram_size) in rxq_deinit()
2015 iounmap(rxq->rx_desc_area); in rxq_deinit()
2017 dma_free_coherent(mp->dev->dev.parent, rxq->rx_desc_area_size, in rxq_deinit()
2018 rxq->rx_desc_area, rxq->rx_desc_dma); in rxq_deinit()
2020 kfree(rxq->rx_skb); in rxq_deinit()
2282 work_done += rxq_process(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2284 work_done += rxq_refill(mp->rxq + queue, work_tbd); in mv643xx_eth_poll()
2372 struct rx_queue *rxq = mp->rxq + i; in port_start() local
2375 addr = (u32)rxq->rx_desc_dma; in port_start()
2376 addr += rxq->rx_curr_desc * sizeof(struct rx_desc); in port_start()
2379 rxq_enable(rxq); in port_start()
2438 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2442 rxq_refill(mp->rxq + i, INT_MAX); in mv643xx_eth_open()
2472 rxq_deinit(mp->rxq + i); in mv643xx_eth_open()
2486 rxq_disable(mp->rxq + i); in port_reset()
2530 rxq_deinit(mp->rxq + i); in mv643xx_eth_stop()