Changeset 30732


Ignore:
Timestamp:
2012-02-26T11:54:12+01:00 (6 years ago)
Author:
juhosg
Message:

ramips: raeth: add rx_info structure

This helps to reduce code size on RX path:

add/remove: 0/0 grow/shrink: 3/1 up/down: 68/-56 (12)
function old new delta
ramips_eth_open 1104 1144 +40
ramips_ring_free 212 232 +20
ramips_eth_stop 400 408 +8
ramips_eth_rx_hw 648 592 -56

Location:
trunk/target/linux/ramips/files/drivers/net/ethernet/ramips
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_eth.h

    r30731 r30732  
    219219}; 
    220220 
     221struct raeth_rx_info { 
     222        struct ramips_rx_dma    *rx_desc; 
     223        struct sk_buff          *rx_skb; 
     224        dma_addr_t              rx_dma; 
     225        unsigned int            pad; 
     226}; 
     227 
    221228struct raeth_int_stats { 
    222229        unsigned long           rx_delayed; 
     
    247254struct raeth_priv 
    248255{ 
     256        struct raeth_rx_info    *rx_info; 
    249257        dma_addr_t              rx_desc_dma; 
    250258        struct tasklet_struct   rx_tasklet; 
    251259        struct ramips_rx_dma    *rx; 
    252         struct sk_buff          *rx_skb[NUM_RX_DESC]; 
    253         dma_addr_t              rx_dma[NUM_RX_DESC]; 
    254260 
    255261        struct raeth_tx_info    *tx_info; 
  • trunk/target/linux/ramips/files/drivers/net/ethernet/ramips/ramips_main.c

    r30731 r30732  
    135135 
    136136        for (i = 0; i < NUM_RX_DESC; i++) { 
     137                struct raeth_rx_info *rxi; 
     138                struct ramips_rx_dma *rxd; 
    137139                dma_addr_t dma_addr; 
    138140 
    139                 BUG_ON(re->rx_skb[i] == NULL); 
    140                 dma_addr = dma_map_single(&re->netdev->dev, re->rx_skb[i]->data, 
     141                rxd = &re->rx[i]; 
     142                rxi = &re->rx_info[i]; 
     143                BUG_ON(rxi->rx_skb == NULL); 
     144                dma_addr = dma_map_single(&re->netdev->dev, rxi->rx_skb->data, 
    141145                                          MAX_RX_LENGTH, DMA_FROM_DEVICE); 
    142                 re->rx_dma[i] = dma_addr; 
    143                 re->rx[i].rxd1 = (unsigned int) dma_addr; 
    144                 re->rx[i].rxd2 = RX_DMA_LSO; 
     146                rxi->rx_dma = dma_addr; 
     147                rxi->rx_desc = rxd; 
     148 
     149                rxd->rxd1 = (unsigned int) dma_addr; 
     150                rxd->rxd2 = RX_DMA_LSO; 
    145151        } 
    146152 
     
    154160        int i; 
    155161 
    156         for (i = 0; i < NUM_RX_DESC; i++) 
    157                 if (re->rx_skb[i]) 
    158                         dma_unmap_single(&re->netdev->dev, re->rx_dma[i], 
     162        for (i = 0; i < NUM_RX_DESC; i++) { 
     163                struct raeth_rx_info *rxi; 
     164 
     165                rxi = &re->rx_info[i]; 
     166                if (rxi->rx_skb) 
     167                        dma_unmap_single(&re->netdev->dev, rxi->rx_dma, 
    159168                                         MAX_RX_LENGTH, DMA_FROM_DEVICE); 
     169        } 
    160170 
    161171        for (i = 0; i < NUM_TX_DESC; i++) { 
     
    554564        int i; 
    555565 
    556         for (i = 0; i < NUM_RX_DESC; i++) 
    557                 if (re->rx_skb[i]) 
    558                         dev_kfree_skb_any(re->rx_skb[i]); 
     566        if (re->rx_info) { 
     567                for (i = 0; i < NUM_RX_DESC; i++) { 
     568                        struct raeth_rx_info *rxi; 
     569 
     570                        rxi = &re->rx_info[i]; 
     571                        if (rxi->rx_skb) 
     572                                dev_kfree_skb_any(rxi->rx_skb); 
     573                } 
     574                kfree(re->rx_info); 
     575        } 
    559576 
    560577        if (re->rx) { 
     
    583600                              GFP_ATOMIC); 
    584601        if (!re->tx_info) 
     602                goto err_cleanup; 
     603 
     604        re->rx_info = kzalloc(NUM_RX_DESC * sizeof(struct raeth_rx_info), 
     605                              GFP_ATOMIC); 
     606        if (!re->rx_info) 
    585607                goto err_cleanup; 
    586608 
     
    606628                        goto err_cleanup; 
    607629 
    608                 re->rx_skb[i] = skb; 
     630                re->rx_info[i].rx_skb = skb; 
    609631        } 
    610632 
     
    697719 
    698720        while (max_rx) { 
     721                struct raeth_rx_info *rxi; 
     722                struct ramips_rx_dma *rxd; 
    699723                struct sk_buff *rx_skb, *new_skb; 
    700724                int pktlen; 
    701725 
    702726                rx = (ramips_fe_rr(RAMIPS_RX_CALC_IDX0) + 1) % NUM_RX_DESC; 
    703                 if (!(re->rx[rx].rxd2 & RX_DMA_DONE)) 
     727 
     728                rxi = &re->rx_info[rx]; 
     729                rxd = rxi->rx_desc; 
     730                if (!(rxd->rxd2 & RX_DMA_DONE)) 
    704731                        break; 
    705                 max_rx--; 
    706  
    707                 rx_skb = re->rx_skb[rx]; 
    708                 pktlen = RX_DMA_PLEN0(re->rx[rx].rxd2); 
     732 
     733                rx_skb = rxi->rx_skb; 
     734                pktlen = RX_DMA_PLEN0(rxd->rxd2); 
    709735 
    710736                new_skb = ramips_alloc_skb(re); 
     
    713739                        dma_addr_t dma_addr; 
    714740 
    715                         dma_unmap_single(&re->netdev->dev, re->rx_dma[rx], 
     741                        dma_unmap_single(&re->netdev->dev, rxi->rx_dma, 
    716742                                         MAX_RX_LENGTH, DMA_FROM_DEVICE); 
    717743 
     
    724750                        netif_rx(rx_skb); 
    725751 
    726                         re->rx_skb[rx] = new_skb; 
     752                        rxi->rx_skb = new_skb; 
    727753 
    728754                        dma_addr = dma_map_single(&re->netdev->dev, 
     
    730756                                                  MAX_RX_LENGTH, 
    731757                                                  DMA_FROM_DEVICE); 
    732                         re->rx_dma[rx] = dma_addr; 
    733                         re->rx[rx].rxd1 = (unsigned int) dma_addr; 
     758                        rxi->rx_dma = dma_addr; 
     759                        rxd->rxd1 = (unsigned int) dma_addr; 
     760                        wmb(); 
    734761                } else { 
    735762                        dev->stats.rx_dropped++; 
    736763                } 
    737764 
    738                 re->rx[rx].rxd2 &= ~RX_DMA_DONE; 
    739                 wmb(); 
     765                rxd->rxd2 = RX_DMA_LSO; 
    740766                ramips_fe_wr(rx, RAMIPS_RX_CALC_IDX0); 
     767                max_rx--; 
    741768        } 
    742769 
Note: See TracChangeset for help on using the changeset viewer.