Less verbose code. Should help when porting some of the other patches. Signed-off-by: Rosen Penev <ros...@gmail.com> --- .../drivers/net/ethernet/atheros/ag71xx/ag71xx.h | 1 + .../net/ethernet/atheros/ag71xx/ag71xx_main.c | 40 +++++++++------------- 2 files changed, 17 insertions(+), 24 deletions(-)
diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h index 9964993..f85e43d 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx.h @@ -106,6 +106,7 @@ struct ag71xx_ring { /* "Hot" fields in the data path. */ unsigned int curr; unsigned int dirty; + u16 size; /* "Cold" fields - not used in the data path. */ struct ag71xx_buf *buf; diff --git a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c index c1d754f..8ce777c 100644 --- a/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c +++ b/target/linux/ar71xx/files/drivers/net/ethernet/atheros/ag71xx/ag71xx_main.c @@ -101,18 +101,15 @@ static inline void ag71xx_dump_intr(struct ag71xx *ag, char *label, u32 intr) static void ag71xx_ring_free(struct ag71xx_ring *ring) { - int ring_size = BIT(ring->order); kfree(ring->buf); if (ring->descs_cpu) - dma_free_coherent(NULL, ring_size * ring->desc_size, + dma_free_coherent(NULL, ring->size * ring->desc_size, ring->descs_cpu, ring->descs_dma); } static int ag71xx_ring_alloc(struct ag71xx_ring *ring) { - int ring_size = BIT(ring->order); - ring->desc_size = sizeof(struct ag71xx_desc); if (ring->desc_size % cache_line_size()) { DBG("ag71xx: ring %p, desc size %u rounded to %u\n", @@ -121,12 +118,12 @@ static int ag71xx_ring_alloc(struct ag71xx_ring *ring) ring->desc_size = roundup(ring->desc_size, cache_line_size()); } - ring->descs_cpu = dma_alloc_coherent(NULL, ring_size * ring->desc_size, + ring->descs_cpu = dma_alloc_coherent(NULL, ring->size * ring->desc_size, &ring->descs_dma, GFP_ATOMIC); if (!ring->descs_cpu) return -ENOMEM; - ring->buf = kzalloc(ring_size * sizeof(*ring->buf), GFP_KERNEL); + ring->buf = kzalloc(ring->size * sizeof(*ring->buf), GFP_KERNEL); if (!ring->buf) return -ENOMEM; @@ -168,15 +165,14 @@ static void ag71xx_ring_tx_clean(struct ag71xx *ag) static void ag71xx_ring_tx_init(struct ag71xx *ag) { struct ag71xx_ring *ring = &ag->tx_ring; - int ring_size = BIT(ring->order); - int ring_mask = ring_size - 1; - int i; + int i, next; - for (i = 0; i < ring_size; i++) { + for (i = 0; i < ring->size; i++) { struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i); + next = (i >= ring->size - 1) ? 0 : (i + 1); desc->next = (u32) (ring->descs_dma + - ring->desc_size * ((i + 1) & ring_mask)); + ring->desc_size * next); desc->ctrl = DESC_EMPTY; ring->buf[i].skb = NULL; @@ -193,13 +189,12 @@ static void ag71xx_ring_tx_init(struct ag71xx *ag) static void ag71xx_ring_rx_clean(struct ag71xx *ag) { struct ag71xx_ring *ring = &ag->rx_ring; - int ring_size = BIT(ring->order); int i; if (!ring->buf) return; - for (i = 0; i < ring_size; i++) + for (i = 0; i < ring->size; i++) if (ring->buf[i].rx_buf) { dma_unmap_single(&ag->dev->dev, ring->buf[i].dma_addr, ag->rx_buf_size, DMA_FROM_DEVICE); @@ -251,24 +246,24 @@ static bool ag71xx_fill_rx_buf(struct ag71xx *ag, struct ag71xx_buf *buf, static int ag71xx_ring_rx_init(struct ag71xx *ag) { struct ag71xx_ring *ring = &ag->rx_ring; - int ring_size = BIT(ring->order); int ring_mask = BIT(ring->order) - 1; - unsigned int i; + unsigned int i, next; int ret; int offset = ag71xx_buffer_offset(ag); ret = 0; - for (i = 0; i < ring_size; i++) { + for (i = 0; i < ring->size; i++) { struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i); + next = (i >= ring->size - 1) ? 0 : (i + 1); desc->next = (u32) (ring->descs_dma + - ring->desc_size * ((i + 1) & ring_mask)); + ring->desc_size * next); DBG("ag71xx: RX desc at %p, next is %08x\n", desc, desc->next); } - for (i = 0; i < ring_size; i++) { + for (i = 0; i < ring->size; i++) { struct ag71xx_desc *desc = ag71xx_ring_desc(ring, i); if (!ag71xx_fill_rx_buf(ag, &ring->buf[i], offset, @@ -790,7 +785,6 @@ static netdev_tx_t ag71xx_hard_start_xmit(struct sk_buff *skb, struct ag71xx *ag = netdev_priv(dev); struct ag71xx_ring *ring = &ag->tx_ring; int ring_mask = BIT(ring->order) - 1; - int ring_size = BIT(ring->order); struct ag71xx_desc *desc; dma_addr_t dma_addr; int i, n, ring_min; @@ -833,7 +827,7 @@ static netdev_tx_t ag71xx_hard_start_xmit(struct sk_buff *skb, if (ring->desc_split) ring_min *= AG71XX_TX_RING_DS_PER_PKT; - if (ring->curr - ring->dirty >= ring_size - ring_min) { + if (ring->curr - ring->dirty >= ring->size - ring_min) { DBG("%s: tx queue full\n", dev->name); netif_stop_queue(dev); } @@ -956,7 +950,6 @@ static int ag71xx_tx_packets(struct ag71xx *ag, bool flush) struct ag71xx_platform_data *pdata = ag71xx_get_pdata(ag); bool dma_stuck = false; int ring_mask = BIT(ring->order) - 1; - int ring_size = BIT(ring->order); int sent = 0; int bytes_compl = 0; int n = 0; @@ -1007,7 +1000,7 @@ static int ag71xx_tx_packets(struct ag71xx *ag, bool flush) return 0; netdev_completed_queue(ag->dev, sent, bytes_compl); - if ((ring->curr - ring->dirty) < (ring_size * 3) / 4) + if ((ring->curr - ring->dirty) < (ring->size * 3) / 4) netif_wake_queue(ag->dev); if (!dma_stuck) @@ -1023,7 +1016,6 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit) int offset = ag71xx_buffer_offset(ag); unsigned int pktlen_mask = ag->desc_pktlen_mask; int ring_mask = BIT(ring->order) - 1; - int ring_size = BIT(ring->order); struct sk_buff_head queue; struct sk_buff *skb; int done = 0; @@ -1042,7 +1034,7 @@ static int ag71xx_rx_packets(struct ag71xx *ag, int limit) if (ag71xx_desc_empty(desc)) break; - if ((ring->dirty + ring_size) == ring->curr) { + if ((ring->dirty + ring->size) == ring->curr) { ag71xx_assert(0); break; } -- 2.7.4 _______________________________________________ Lede-dev mailing list Lede-dev@lists.infradead.org http://lists.infradead.org/mailman/listinfo/lede-dev