|
@@ -1226,10 +1226,16 @@ static void happy_meal_clean_rings(struct happy_meal *hp)
|
|
|
for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) {
|
|
|
txd = &hp->happy_block->happy_meal_txd[i];
|
|
|
dma_addr = hme_read_desc32(hp, &txd->tx_addr);
|
|
|
- dma_unmap_single(hp->dma_dev, dma_addr,
|
|
|
- (hme_read_desc32(hp, &txd->tx_flags)
|
|
|
- & TXFLAG_SIZE),
|
|
|
- DMA_TO_DEVICE);
|
|
|
+ if (!frag)
|
|
|
+ dma_unmap_single(hp->dma_dev, dma_addr,
|
|
|
+ (hme_read_desc32(hp, &txd->tx_flags)
|
|
|
+ & TXFLAG_SIZE),
|
|
|
+ DMA_TO_DEVICE);
|
|
|
+ else
|
|
|
+ dma_unmap_page(hp->dma_dev, dma_addr,
|
|
|
+ (hme_read_desc32(hp, &txd->tx_flags)
|
|
|
+ & TXFLAG_SIZE),
|
|
|
+ DMA_TO_DEVICE);
|
|
|
|
|
|
if (frag != skb_shinfo(skb)->nr_frags)
|
|
|
i++;
|
|
@@ -1953,7 +1959,10 @@ static void happy_meal_tx(struct happy_meal *hp)
|
|
|
dma_len = hme_read_desc32(hp, &this->tx_flags);
|
|
|
|
|
|
dma_len &= TXFLAG_SIZE;
|
|
|
- dma_unmap_single(hp->dma_dev, dma_addr, dma_len, DMA_TO_DEVICE);
|
|
|
+ if (!frag)
|
|
|
+ dma_unmap_single(hp->dma_dev, dma_addr, dma_len, DMA_TO_DEVICE);
|
|
|
+ else
|
|
|
+ dma_unmap_page(hp->dma_dev, dma_addr, dma_len, DMA_TO_DEVICE);
|
|
|
|
|
|
elem = NEXT_TX(elem);
|
|
|
this = &txbase[elem];
|