diff options
-rw-r--r-- | drivers/net/cs89x0.c | 34 |
1 files changed, 31 insertions, 3 deletions
diff --git a/drivers/net/cs89x0.c b/drivers/net/cs89x0.c index 7abc9f858f98..f7ec590e80ea 100644 --- a/drivers/net/cs89x0.c +++ b/drivers/net/cs89x0.c | |||
@@ -378,6 +378,34 @@ writeword(unsigned long base_addr, int portno, int value) | |||
378 | #endif | 378 | #endif |
379 | #endif | 379 | #endif |
380 | 380 | ||
381 | static void | ||
382 | readwords(unsigned long base_addr, int portno, void *buf, int length) | ||
383 | { | ||
384 | u8 *buf8 = (u8 *)buf; | ||
385 | |||
386 | do { | ||
387 | u32 tmp32; | ||
388 | |||
389 | tmp32 = readword(base_addr, portno); | ||
390 | *buf8++ = (u8)tmp32; | ||
391 | *buf8++ = (u8)(tmp32 >> 8); | ||
392 | } while (--length); | ||
393 | } | ||
394 | |||
395 | static void | ||
396 | writewords(unsigned long base_addr, int portno, void *buf, int length) | ||
397 | { | ||
398 | u8 *buf8 = (u8 *)buf; | ||
399 | |||
400 | do { | ||
401 | u32 tmp32; | ||
402 | |||
403 | tmp32 = *buf8++; | ||
404 | tmp32 |= (*buf8++) << 8; | ||
405 | writeword(base_addr, portno, tmp32); | ||
406 | } while (--length); | ||
407 | } | ||
408 | |||
381 | static int | 409 | static int |
382 | readreg(struct net_device *dev, int regno) | 410 | readreg(struct net_device *dev, int regno) |
383 | { | 411 | { |
@@ -1143,7 +1171,7 @@ send_test_pkt(struct net_device *dev) | |||
1143 | return 0; /* this shouldn't happen */ | 1171 | return 0; /* this shouldn't happen */ |
1144 | 1172 | ||
1145 | /* Write the contents of the packet */ | 1173 | /* Write the contents of the packet */ |
1146 | outsw(dev->base_addr + TX_FRAME_PORT,test_packet,(ETH_ZLEN+1) >>1); | 1174 | writewords(dev->base_addr, TX_FRAME_PORT,test_packet,(ETH_ZLEN+1) >>1); |
1147 | 1175 | ||
1148 | if (net_debug > 1) printk("Sending test packet "); | 1176 | if (net_debug > 1) printk("Sending test packet "); |
1149 | /* wait a couple of jiffies for packet to be received */ | 1177 | /* wait a couple of jiffies for packet to be received */ |
@@ -1500,7 +1528,7 @@ static int net_send_packet(struct sk_buff *skb, struct net_device *dev) | |||
1500 | return 1; | 1528 | return 1; |
1501 | } | 1529 | } |
1502 | /* Write the contents of the packet */ | 1530 | /* Write the contents of the packet */ |
1503 | outsw(dev->base_addr + TX_FRAME_PORT,skb->data,(skb->len+1) >>1); | 1531 | writewords(dev->base_addr, TX_FRAME_PORT,skb->data,(skb->len+1) >>1); |
1504 | spin_unlock_irq(&lp->lock); | 1532 | spin_unlock_irq(&lp->lock); |
1505 | lp->stats.tx_bytes += skb->len; | 1533 | lp->stats.tx_bytes += skb->len; |
1506 | dev->trans_start = jiffies; | 1534 | dev->trans_start = jiffies; |
@@ -1654,7 +1682,7 @@ net_rx(struct net_device *dev) | |||
1654 | skb_reserve(skb, 2); /* longword align L3 header */ | 1682 | skb_reserve(skb, 2); /* longword align L3 header */ |
1655 | skb->dev = dev; | 1683 | skb->dev = dev; |
1656 | 1684 | ||
1657 | insw(ioaddr + RX_FRAME_PORT, skb_put(skb, length), length >> 1); | 1685 | readwords(ioaddr, RX_FRAME_PORT, skb_put(skb, length), length >> 1); |
1658 | if (length & 1) | 1686 | if (length & 1) |
1659 | skb->data[length-1] = readword(ioaddr, RX_FRAME_PORT); | 1687 | skb->data[length-1] = readword(ioaddr, RX_FRAME_PORT); |
1660 | 1688 | ||