aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sunhme.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/sunhme.c')
-rw-r--r--drivers/net/sunhme.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/net/sunhme.c b/drivers/net/sunhme.c
index 37d721bbdb35..6762f1c6ec8a 100644
--- a/drivers/net/sunhme.c
+++ b/drivers/net/sunhme.c
@@ -1226,10 +1226,16 @@ static void happy_meal_clean_rings(struct happy_meal *hp)
1226 for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) { 1226 for (frag = 0; frag <= skb_shinfo(skb)->nr_frags; frag++) {
1227 txd = &hp->happy_block->happy_meal_txd[i]; 1227 txd = &hp->happy_block->happy_meal_txd[i];
1228 dma_addr = hme_read_desc32(hp, &txd->tx_addr); 1228 dma_addr = hme_read_desc32(hp, &txd->tx_addr);
1229 dma_unmap_single(hp->dma_dev, dma_addr, 1229 if (!frag)
1230 (hme_read_desc32(hp, &txd->tx_flags) 1230 dma_unmap_single(hp->dma_dev, dma_addr,
1231 & TXFLAG_SIZE), 1231 (hme_read_desc32(hp, &txd->tx_flags)
1232 DMA_TO_DEVICE); 1232 & TXFLAG_SIZE),
1233 DMA_TO_DEVICE);
1234 else
1235 dma_unmap_page(hp->dma_dev, dma_addr,
1236 (hme_read_desc32(hp, &txd->tx_flags)
1237 & TXFLAG_SIZE),
1238 DMA_TO_DEVICE);
1233 1239
1234 if (frag != skb_shinfo(skb)->nr_frags) 1240 if (frag != skb_shinfo(skb)->nr_frags)
1235 i++; 1241 i++;
@@ -1953,7 +1959,10 @@ static void happy_meal_tx(struct happy_meal *hp)
1953 dma_len = hme_read_desc32(hp, &this->tx_flags); 1959 dma_len = hme_read_desc32(hp, &this->tx_flags);
1954 1960
1955 dma_len &= TXFLAG_SIZE; 1961 dma_len &= TXFLAG_SIZE;
1956 dma_unmap_single(hp->dma_dev, dma_addr, dma_len, DMA_TO_DEVICE); 1962 if (!frag)
1963 dma_unmap_single(hp->dma_dev, dma_addr, dma_len, DMA_TO_DEVICE);
1964 else
1965 dma_unmap_page(hp->dma_dev, dma_addr, dma_len, DMA_TO_DEVICE);
1957 1966
1958 elem = NEXT_TX(elem); 1967 elem = NEXT_TX(elem);
1959 this = &txbase[elem]; 1968 this = &txbase[elem];
@@ -2184,7 +2193,7 @@ static int happy_meal_open(struct net_device *dev)
2184 * into a single source which we register handling at probe time. 2193 * into a single source which we register handling at probe time.
2185 */ 2194 */
2186 if ((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) != HFLAG_QUATTRO) { 2195 if ((hp->happy_flags & (HFLAG_QUATTRO|HFLAG_PCI)) != HFLAG_QUATTRO) {
2187 if (request_irq(dev->irq, &happy_meal_interrupt, 2196 if (request_irq(dev->irq, happy_meal_interrupt,
2188 IRQF_SHARED, dev->name, (void *)dev)) { 2197 IRQF_SHARED, dev->name, (void *)dev)) {
2189 HMD(("EAGAIN\n")); 2198 HMD(("EAGAIN\n"));
2190 printk(KERN_ERR "happy_meal(SBUS): Can't order irq %d to go.\n", 2199 printk(KERN_ERR "happy_meal(SBUS): Can't order irq %d to go.\n",
@@ -3047,9 +3056,9 @@ static int __devinit happy_meal_pci_probe(struct pci_dev *pdev,
3047 int len; 3056 int len;
3048 3057
3049 if (qfe_slot != -1 && 3058 if (qfe_slot != -1 &&
3050 (addr = of_get_property(dp, 3059 (addr = of_get_property(dp, "local-mac-address", &len))
3051 "local-mac-address", &len)) != NULL 3060 != NULL &&
3052 && len == 6) { 3061 len == 6) {
3053 memcpy(dev->dev_addr, addr, 6); 3062 memcpy(dev->dev_addr, addr, 6);
3054 } else { 3063 } else {
3055 memcpy(dev->dev_addr, idprom->id_ethaddr, 6); 3064 memcpy(dev->dev_addr, idprom->id_ethaddr, 6);