Changeset 32728


Ignore:
Timestamp:
2012-07-15T16:09:24+02:00 (6 years ago)
Author:
florian
Message:

[mcs814x] make sure we properly unmap DMA mappings we created

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/target/linux/mcs814x/files-3.3/drivers/net/ethernet/mcs8140/nuport_mac.c

    r32727 r32728  
    146146        /* Transmit buffers */ 
    147147        struct sk_buff *tx_skb[TX_RING_SIZE]; 
     148        dma_addr_t tx_addr; 
    148149        unsigned int valid_txskb[TX_RING_SIZE]; 
    149150        unsigned int cur_tx; 
     
    153154        /* Receive buffers */ 
    154155        struct sk_buff *rx_skb[RX_RING_SIZE]; 
     156        dma_addr_t rx_addr; 
    155157        unsigned int irq_rxskb[RX_RING_SIZE]; 
    156158        int pkt_len[RX_RING_SIZE]; 
     
    238240                                        struct sk_buff *skb) 
    239241{ 
    240         dma_addr_t p; 
    241242        u32 reg; 
    242243        unsigned int timeout = 2048; 
     
    254255                return -EBUSY; 
    255256 
    256         p = dma_map_single(&priv->pdev->dev, skb->data, 
     257        priv->tx_addr = dma_map_single(&priv->pdev->dev, skb->data, 
    257258                        skb->len, DMA_TO_DEVICE); 
    258259 
    259260        /* enable enhanced mode */ 
    260261        nuport_mac_writel(TX_DMA_ENH_ENABLE, TX_DMA_ENH); 
    261         nuport_mac_writel(p, TX_BUFFER_ADDR); 
     262        nuport_mac_writel(priv->tx_addr, TX_BUFFER_ADDR); 
    262263        nuport_mac_writel((skb->len) - 1, TX_PKT_BYTES); 
    263264        wmb(); 
     
    280281                                        struct sk_buff *skb) 
    281282{ 
    282         dma_addr_t p; 
    283283        u32 reg; 
    284284        unsigned int timeout = 2048; 
     
    296296                return -EBUSY; 
    297297 
    298         p = dma_map_single(&priv->pdev->dev, skb->data, 
     298        priv->rx_addr = dma_map_single(&priv->pdev->dev, skb->data, 
    299299                                RX_ALLOC_SIZE, DMA_FROM_DEVICE); 
    300300 
    301         nuport_mac_writel(p, RX_BUFFER_ADDR); 
     301        nuport_mac_writel(priv->rx_addr, RX_BUFFER_ADDR); 
    302302        wmb(); 
    303303        nuport_mac_writel(RX_DMA_ENABLE, RX_START_DMA); 
     
    462462        priv->tx_skb[priv->dma_tx] = NULL; 
    463463        priv->valid_txskb[priv->dma_tx] = 0; 
     464        dma_unmap_single(&priv->pdev->dev, priv->rx_addr, skb->len, 
     465                                DMA_TO_DEVICE); 
    464466        dev_kfree_skb_irq(skb); 
    465467 
     
    554556                status = get_unaligned((u32 *) (skb->data + len)); 
    555557                skb->dev = dev; 
     558 
     559                dma_unmap_single(&priv->pdev->dev, priv->rx_addr, skb->len, 
     560                                DMA_FROM_DEVICE); 
    556561 
    557562                /* packet filter failed */ 
Note: See TracChangeset for help on using the changeset viewer.