diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/r6040.c | 31 |
1 files changed, 14 insertions, 17 deletions
diff --git a/drivers/net/r6040.c b/drivers/net/r6040.c index edce5a4c7f20..1d7efa2b6cbc 100644 --- a/drivers/net/r6040.c +++ b/drivers/net/r6040.c | |||
@@ -42,12 +42,12 @@ | |||
42 | #include <linux/ethtool.h> | 42 | #include <linux/ethtool.h> |
43 | #include <linux/crc32.h> | 43 | #include <linux/crc32.h> |
44 | #include <linux/spinlock.h> | 44 | #include <linux/spinlock.h> |
45 | #include <linux/bitops.h> | ||
46 | #include <linux/io.h> | ||
47 | #include <linux/irq.h> | ||
48 | #include <linux/uaccess.h> | ||
45 | 49 | ||
46 | #include <asm/processor.h> | 50 | #include <asm/processor.h> |
47 | #include <asm/bitops.h> | ||
48 | #include <asm/io.h> | ||
49 | #include <asm/irq.h> | ||
50 | #include <asm/uaccess.h> | ||
51 | 51 | ||
52 | #define DRV_NAME "r6040" | 52 | #define DRV_NAME "r6040" |
53 | #define DRV_VERSION "0.16" | 53 | #define DRV_VERSION "0.16" |
@@ -181,7 +181,7 @@ static char version[] __devinitdata = KERN_INFO DRV_NAME | |||
181 | ": RDC R6040 NAPI net driver," | 181 | ": RDC R6040 NAPI net driver," |
182 | "version "DRV_VERSION " (" DRV_RELDATE ")\n"; | 182 | "version "DRV_VERSION " (" DRV_RELDATE ")\n"; |
183 | 183 | ||
184 | static int phy_table[] = { PHY1_ADDR, PHY2_ADDR}; | 184 | static int phy_table[] = { PHY1_ADDR, PHY2_ADDR }; |
185 | 185 | ||
186 | /* Read a word data from PHY Chip */ | 186 | /* Read a word data from PHY Chip */ |
187 | static int phy_read(void __iomem *ioaddr, int phy_addr, int reg) | 187 | static int phy_read(void __iomem *ioaddr, int phy_addr, int reg) |
@@ -771,15 +771,7 @@ r6040_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
771 | struct r6040_descriptor *descptr; | 771 | struct r6040_descriptor *descptr; |
772 | void __iomem *ioaddr = lp->base; | 772 | void __iomem *ioaddr = lp->base; |
773 | unsigned long flags; | 773 | unsigned long flags; |
774 | int ret; | 774 | int ret = NETDEV_TX_OK; |
775 | |||
776 | if (!skb) /* NULL skb directly return */ | ||
777 | return ret; | ||
778 | |||
779 | if (skb->len >= MAX_BUF_SIZE) { /* Packet too long, drop it */ | ||
780 | dev_kfree_skb(skb); | ||
781 | return ret; | ||
782 | } | ||
783 | 775 | ||
784 | /* Critical Section */ | 776 | /* Critical Section */ |
785 | spin_lock_irqsave(&lp->lock, flags); | 777 | spin_lock_irqsave(&lp->lock, flags); |
@@ -787,8 +779,9 @@ r6040_start_xmit(struct sk_buff *skb, struct net_device *dev) | |||
787 | /* TX resource check */ | 779 | /* TX resource check */ |
788 | if (!lp->tx_free_desc) { | 780 | if (!lp->tx_free_desc) { |
789 | spin_unlock_irqrestore(&lp->lock, flags); | 781 | spin_unlock_irqrestore(&lp->lock, flags); |
782 | netif_stop_queue(dev); | ||
790 | printk(KERN_ERR DRV_NAME ": no tx descriptor\n"); | 783 | printk(KERN_ERR DRV_NAME ": no tx descriptor\n"); |
791 | ret = 1; | 784 | ret = NETDEV_TX_BUSY; |
792 | return ret; | 785 | return ret; |
793 | } | 786 | } |
794 | 787 | ||
@@ -916,7 +909,7 @@ static int netdev_get_settings(struct net_device *dev, struct ethtool_cmd *cmd) | |||
916 | 909 | ||
917 | spin_lock_irq(&rp->lock); | 910 | spin_lock_irq(&rp->lock); |
918 | rc = mii_ethtool_gset(&rp->mii_if, cmd); | 911 | rc = mii_ethtool_gset(&rp->mii_if, cmd); |
919 | spin_unlock_irq(&rp->mii_if); | 912 | spin_unlock_irq(&rp->lock); |
920 | 913 | ||
921 | return rc; | 914 | return rc; |
922 | } | 915 | } |
@@ -973,6 +966,11 @@ static int __devinit r6040_init_one(struct pci_dev *pdev, | |||
973 | "not supported by the card\n"); | 966 | "not supported by the card\n"); |
974 | return -ENODEV; | 967 | return -ENODEV; |
975 | } | 968 | } |
969 | if (pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK)) { | ||
970 | printk(KERN_ERR DRV_NAME "32-bit PCI DMA addresses" | ||
971 | "not supported by the card\n"); | ||
972 | return -ENODEV; | ||
973 | } | ||
976 | 974 | ||
977 | /* IO Size check */ | 975 | /* IO Size check */ |
978 | if (pci_resource_len(pdev, 0) < io_size) { | 976 | if (pci_resource_len(pdev, 0) < io_size) { |
@@ -1006,7 +1004,6 @@ static int __devinit r6040_init_one(struct pci_dev *pdev, | |||
1006 | } | 1004 | } |
1007 | 1005 | ||
1008 | /* Init system & device */ | 1006 | /* Init system & device */ |
1009 | dev->base_addr = (unsigned long)ioaddr; | ||
1010 | lp->base = ioaddr; | 1007 | lp->base = ioaddr; |
1011 | dev->irq = pdev->irq; | 1008 | dev->irq = pdev->irq; |
1012 | 1009 | ||