Changeset 19442


Ignore:
Timestamp:
2010-01-31T13:48:43+01:00 (7 years ago)
Author:
juhosg
Message:

ramips_eth: pass 'raeth_priv' struct directly to dma specific functions

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/ramips/files/drivers/net/ramips.c

    r19440 r19442  
    5353 
    5454static void 
    55 ramips_cleanup_dma(struct net_device *dev) 
    56 { 
    57         struct raeth_priv *priv = netdev_priv(dev); 
     55ramips_cleanup_dma(struct raeth_priv *re) 
     56{ 
    5857        int i; 
    5958 
    6059        for (i = 0; i < NUM_RX_DESC; i++) 
    61                 if (priv->rx_skb[i]) 
    62                         dev_kfree_skb_any(priv->rx_skb[i]); 
    63  
    64         if (priv->rx) 
     60                if (re->rx_skb[i]) 
     61                        dev_kfree_skb_any(re->rx_skb[i]); 
     62 
     63        if (re->rx) 
    6564                dma_free_coherent(NULL, 
    6665                                  NUM_RX_DESC * sizeof(struct ramips_rx_dma), 
    67                                   priv->rx, priv->phy_rx); 
    68  
    69         if (priv->tx) 
     66                                  re->rx, re->phy_rx); 
     67 
     68        if (re->tx) 
    7069                dma_free_coherent(NULL, 
    7170                                  NUM_TX_DESC * sizeof(struct ramips_tx_dma), 
    72                                   priv->tx, priv->phy_tx); 
    73 } 
    74  
    75 static int 
    76 ramips_alloc_dma(struct net_device *dev) 
    77 { 
    78         struct raeth_priv *priv = netdev_priv(dev); 
     71                                  re->tx, re->phy_tx); 
     72} 
     73 
     74static int 
     75ramips_alloc_dma(struct raeth_priv *re) 
     76{ 
    7977        int err = -ENOMEM; 
    8078        int i; 
    8179 
    82         priv->skb_free_idx = 0; 
     80        re->skb_free_idx = 0; 
    8381 
    8482        /* setup tx ring */ 
    85         priv->tx = dma_alloc_coherent(NULL, 
    86                                       NUM_TX_DESC * sizeof(struct ramips_tx_dma), 
    87                                       &priv->phy_tx, GFP_ATOMIC); 
    88         if (!priv->tx) 
     83        re->tx = dma_alloc_coherent(NULL, 
     84                                    NUM_TX_DESC * sizeof(struct ramips_tx_dma), 
     85                                    &re->phy_tx, GFP_ATOMIC); 
     86        if (!re->tx) 
    8987                goto err_cleanup; 
    9088 
    91         memset(priv->tx, 0, NUM_TX_DESC * sizeof(struct ramips_tx_dma)); 
     89        memset(re->tx, 0, NUM_TX_DESC * sizeof(struct ramips_tx_dma)); 
    9290        for (i = 0; i < NUM_TX_DESC; i++) { 
    93                 priv->tx[i].txd2 |= TX_DMA_LSO | TX_DMA_DONE; 
    94                 priv->tx[i].txd4 &= (TX_DMA_QN_MASK | TX_DMA_PN_MASK); 
    95                 priv->tx[i].txd4 |= TX_DMA_QN(3) | TX_DMA_PN(1); 
     91                re->tx[i].txd2 |= TX_DMA_LSO | TX_DMA_DONE; 
     92                re->tx[i].txd4 &= (TX_DMA_QN_MASK | TX_DMA_PN_MASK); 
     93                re->tx[i].txd4 |= TX_DMA_QN(3) | TX_DMA_PN(1); 
    9694        } 
    9795 
    9896        /* setup rx ring */ 
    99         priv->rx = dma_alloc_coherent(NULL, 
    100                                       NUM_RX_DESC * sizeof(struct ramips_rx_dma), 
    101                                       &priv->phy_rx, GFP_ATOMIC); 
    102         if (!priv->rx) 
     97        re->rx = dma_alloc_coherent(NULL, 
     98                                    NUM_RX_DESC * sizeof(struct ramips_rx_dma), 
     99                                    &re->phy_rx, GFP_ATOMIC); 
     100        if (!re->rx) 
    103101                goto err_cleanup; 
    104102 
    105         memset(priv->rx, 0, sizeof(struct ramips_rx_dma) * NUM_RX_DESC); 
     103        memset(re->rx, 0, sizeof(struct ramips_rx_dma) * NUM_RX_DESC); 
    106104        for (i = 0; i < NUM_RX_DESC; i++) { 
    107105                struct sk_buff *new_skb = dev_alloc_skb(MAX_RX_LENGTH + 2); 
     
    111109 
    112110                skb_reserve(new_skb, 2); 
    113                 priv->rx[i].rxd1 = dma_map_single(NULL, 
    114                                                   skb_put(new_skb, 2), 
    115                                                   MAX_RX_LENGTH + 2, 
    116                                                   DMA_FROM_DEVICE); 
    117                 priv->rx[i].rxd2 |= RX_DMA_LSO; 
    118                 priv->rx_skb[i] = new_skb; 
     111                re->rx[i].rxd1 = dma_map_single(NULL, 
     112                                                skb_put(new_skb, 2), 
     113                                                MAX_RX_LENGTH + 2, 
     114                                                DMA_FROM_DEVICE); 
     115                re->rx[i].rxd2 |= RX_DMA_LSO; 
     116                re->rx_skb[i] = new_skb; 
    119117        } 
    120118 
     
    122120 
    123121 err_cleanup: 
    124         ramips_cleanup_dma(dev); 
     122        ramips_cleanup_dma(re); 
    125123        return err; 
    126124} 
    127125 
    128126static void 
    129 ramips_setup_dma(struct net_device *dev) 
    130 { 
    131         struct raeth_priv *priv = netdev_priv(dev); 
    132  
    133         ramips_fe_wr(phys_to_bus(priv->phy_tx), RAMIPS_TX_BASE_PTR0); 
     127ramips_setup_dma(struct raeth_priv *re) 
     128{ 
     129        ramips_fe_wr(phys_to_bus(re->phy_tx), RAMIPS_TX_BASE_PTR0); 
    134130        ramips_fe_wr(NUM_TX_DESC, RAMIPS_TX_MAX_CNT0); 
    135131        ramips_fe_wr(0, RAMIPS_TX_CTX_IDX0); 
    136132        ramips_fe_wr(RAMIPS_PST_DTX_IDX0, RAMIPS_PDMA_RST_CFG); 
    137133 
    138         ramips_fe_wr(phys_to_bus(priv->phy_rx), RAMIPS_RX_BASE_PTR0); 
     134        ramips_fe_wr(phys_to_bus(re->phy_rx), RAMIPS_RX_BASE_PTR0); 
    139135        ramips_fe_wr(NUM_RX_DESC, RAMIPS_RX_MAX_CNT0); 
    140136        ramips_fe_wr((NUM_RX_DESC - 1), RAMIPS_RX_CALC_IDX0); 
     
    315311                return err; 
    316312 
    317         err = ramips_alloc_dma(dev); 
     313        err = ramips_alloc_dma(priv); 
    318314        if (err) 
    319315                goto err_free_irq; 
    320316 
    321         ramips_setup_dma(dev); 
     317        ramips_setup_dma(priv); 
    322318        ramips_fe_wr((ramips_fe_rr(RAMIPS_PDMA_GLO_CFG) & 0xff) | 
    323319                (RAMIPS_TX_WB_DDONE | RAMIPS_RX_DMA_EN | 
     
    365361        tasklet_kill(&priv->tx_housekeeping_tasklet); 
    366362        tasklet_kill(&priv->rx_tasklet); 
    367         ramips_cleanup_dma(dev); 
     363        ramips_cleanup_dma(priv); 
    368364        printk(KERN_DEBUG "ramips_eth: stopped\n"); 
    369365        return 0; 
Note: See TracChangeset for help on using the changeset viewer.