diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /drivers/net/tulip/uli526x.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'drivers/net/tulip/uli526x.c')
-rw-r--r-- | drivers/net/tulip/uli526x.c | 75 |
1 files changed, 43 insertions, 32 deletions
diff --git a/drivers/net/tulip/uli526x.c b/drivers/net/tulip/uli526x.c index c457a0ca55ad..a589dd34891e 100644 --- a/drivers/net/tulip/uli526x.c +++ b/drivers/net/tulip/uli526x.c | |||
@@ -12,6 +12,8 @@ | |||
12 | 12 | ||
13 | */ | 13 | */ |
14 | 14 | ||
15 | #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt | ||
16 | |||
15 | #define DRV_NAME "uli526x" | 17 | #define DRV_NAME "uli526x" |
16 | #define DRV_VERSION "0.9.3" | 18 | #define DRV_VERSION "0.9.3" |
17 | #define DRV_RELDATE "2005-7-29" | 19 | #define DRV_RELDATE "2005-7-29" |
@@ -23,7 +25,6 @@ | |||
23 | #include <linux/timer.h> | 25 | #include <linux/timer.h> |
24 | #include <linux/errno.h> | 26 | #include <linux/errno.h> |
25 | #include <linux/ioport.h> | 27 | #include <linux/ioport.h> |
26 | #include <linux/slab.h> | ||
27 | #include <linux/interrupt.h> | 28 | #include <linux/interrupt.h> |
28 | #include <linux/pci.h> | 29 | #include <linux/pci.h> |
29 | #include <linux/init.h> | 30 | #include <linux/init.h> |
@@ -82,9 +83,16 @@ | |||
82 | #define ULI526X_TX_TIMEOUT ((16*HZ)/2) /* tx packet time-out time 8 s" */ | 83 | #define ULI526X_TX_TIMEOUT ((16*HZ)/2) /* tx packet time-out time 8 s" */ |
83 | #define ULI526X_TX_KICK (4*HZ/2) /* tx packet Kick-out time 2 s" */ | 84 | #define ULI526X_TX_KICK (4*HZ/2) /* tx packet Kick-out time 2 s" */ |
84 | 85 | ||
85 | #define ULI526X_DBUG(dbug_now, msg, value) if (uli526x_debug || (dbug_now)) printk(KERN_ERR DRV_NAME ": %s %lx\n", (msg), (long) (value)) | 86 | #define ULI526X_DBUG(dbug_now, msg, value) \ |
87 | do { \ | ||
88 | if (uli526x_debug || (dbug_now)) \ | ||
89 | pr_err("%s %lx\n", (msg), (long) (value)); \ | ||
90 | } while (0) | ||
86 | 91 | ||
87 | #define SHOW_MEDIA_TYPE(mode) printk(KERN_ERR DRV_NAME ": Change Speed to %sMhz %s duplex\n",mode & 1 ?"100":"10", mode & 4 ? "full":"half"); | 92 | #define SHOW_MEDIA_TYPE(mode) \ |
93 | pr_err("Change Speed to %sMhz %s duplex\n", \ | ||
94 | mode & 1 ? "100" : "10", \ | ||
95 | mode & 4 ? "full" : "half"); | ||
88 | 96 | ||
89 | 97 | ||
90 | /* CR9 definition: SROM/MII */ | 98 | /* CR9 definition: SROM/MII */ |
@@ -284,7 +292,7 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev, | |||
284 | SET_NETDEV_DEV(dev, &pdev->dev); | 292 | SET_NETDEV_DEV(dev, &pdev->dev); |
285 | 293 | ||
286 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { | 294 | if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { |
287 | printk(KERN_WARNING DRV_NAME ": 32-bit PCI DMA not available.\n"); | 295 | pr_warning("32-bit PCI DMA not available\n"); |
288 | err = -ENODEV; | 296 | err = -ENODEV; |
289 | goto err_out_free; | 297 | goto err_out_free; |
290 | } | 298 | } |
@@ -295,19 +303,19 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev, | |||
295 | goto err_out_free; | 303 | goto err_out_free; |
296 | 304 | ||
297 | if (!pci_resource_start(pdev, 0)) { | 305 | if (!pci_resource_start(pdev, 0)) { |
298 | printk(KERN_ERR DRV_NAME ": I/O base is zero\n"); | 306 | pr_err("I/O base is zero\n"); |
299 | err = -ENODEV; | 307 | err = -ENODEV; |
300 | goto err_out_disable; | 308 | goto err_out_disable; |
301 | } | 309 | } |
302 | 310 | ||
303 | if (pci_resource_len(pdev, 0) < (ULI526X_IO_SIZE) ) { | 311 | if (pci_resource_len(pdev, 0) < (ULI526X_IO_SIZE) ) { |
304 | printk(KERN_ERR DRV_NAME ": Allocated I/O size too small\n"); | 312 | pr_err("Allocated I/O size too small\n"); |
305 | err = -ENODEV; | 313 | err = -ENODEV; |
306 | goto err_out_disable; | 314 | goto err_out_disable; |
307 | } | 315 | } |
308 | 316 | ||
309 | if (pci_request_regions(pdev, DRV_NAME)) { | 317 | if (pci_request_regions(pdev, DRV_NAME)) { |
310 | printk(KERN_ERR DRV_NAME ": Failed to request PCI regions\n"); | 318 | pr_err("Failed to request PCI regions\n"); |
311 | err = -ENODEV; | 319 | err = -ENODEV; |
312 | goto err_out_disable; | 320 | goto err_out_disable; |
313 | } | 321 | } |
@@ -382,9 +390,9 @@ static int __devinit uli526x_init_one (struct pci_dev *pdev, | |||
382 | if (err) | 390 | if (err) |
383 | goto err_out_res; | 391 | goto err_out_res; |
384 | 392 | ||
385 | printk(KERN_INFO "%s: ULi M%04lx at pci%s, %pM, irq %d.\n", | 393 | dev_info(&dev->dev, "ULi M%04lx at pci%s, %pM, irq %d\n", |
386 | dev->name,ent->driver_data >> 16,pci_name(pdev), | 394 | ent->driver_data >> 16, pci_name(pdev), |
387 | dev->dev_addr, dev->irq); | 395 | dev->dev_addr, dev->irq); |
388 | 396 | ||
389 | pci_set_master(pdev); | 397 | pci_set_master(pdev); |
390 | 398 | ||
@@ -461,7 +469,7 @@ static int uli526x_open(struct net_device *dev) | |||
461 | /* Initialize ULI526X board */ | 469 | /* Initialize ULI526X board */ |
462 | uli526x_init(dev); | 470 | uli526x_init(dev); |
463 | 471 | ||
464 | ret = request_irq(dev->irq, &uli526x_interrupt, IRQF_SHARED, dev->name, dev); | 472 | ret = request_irq(dev->irq, uli526x_interrupt, IRQF_SHARED, dev->name, dev); |
465 | if (ret) | 473 | if (ret) |
466 | return ret; | 474 | return ret; |
467 | 475 | ||
@@ -516,7 +524,7 @@ static void uli526x_init(struct net_device *dev) | |||
516 | } | 524 | } |
517 | } | 525 | } |
518 | if(phy_tmp == 32) | 526 | if(phy_tmp == 32) |
519 | printk(KERN_WARNING "Can not find the phy address!!!"); | 527 | pr_warning("Can not find the phy address!!!"); |
520 | /* Parser SROM and media mode */ | 528 | /* Parser SROM and media mode */ |
521 | db->media_mode = uli526x_media_mode; | 529 | db->media_mode = uli526x_media_mode; |
522 | 530 | ||
@@ -548,7 +556,7 @@ static void uli526x_init(struct net_device *dev) | |||
548 | update_cr6(db->cr6_data, ioaddr); | 556 | update_cr6(db->cr6_data, ioaddr); |
549 | 557 | ||
550 | /* Send setup frame */ | 558 | /* Send setup frame */ |
551 | send_filter_frame(dev, dev->mc_count); /* M5261/M5263 */ | 559 | send_filter_frame(dev, netdev_mc_count(dev)); /* M5261/M5263 */ |
552 | 560 | ||
553 | /* Init CR7, interrupt active bit */ | 561 | /* Init CR7, interrupt active bit */ |
554 | db->cr7_data = CR7_DEFAULT; | 562 | db->cr7_data = CR7_DEFAULT; |
@@ -582,7 +590,7 @@ static netdev_tx_t uli526x_start_xmit(struct sk_buff *skb, | |||
582 | 590 | ||
583 | /* Too large packet check */ | 591 | /* Too large packet check */ |
584 | if (skb->len > MAX_PACKET_SIZE) { | 592 | if (skb->len > MAX_PACKET_SIZE) { |
585 | printk(KERN_ERR DRV_NAME ": big packet = %d\n", (u16)skb->len); | 593 | pr_err("big packet = %d\n", (u16)skb->len); |
586 | dev_kfree_skb(skb); | 594 | dev_kfree_skb(skb); |
587 | return NETDEV_TX_OK; | 595 | return NETDEV_TX_OK; |
588 | } | 596 | } |
@@ -592,7 +600,7 @@ static netdev_tx_t uli526x_start_xmit(struct sk_buff *skb, | |||
592 | /* No Tx resource check, it never happen nromally */ | 600 | /* No Tx resource check, it never happen nromally */ |
593 | if (db->tx_packet_cnt >= TX_FREE_DESC_CNT) { | 601 | if (db->tx_packet_cnt >= TX_FREE_DESC_CNT) { |
594 | spin_unlock_irqrestore(&db->lock, flags); | 602 | spin_unlock_irqrestore(&db->lock, flags); |
595 | printk(KERN_ERR DRV_NAME ": No Tx resource %ld\n", db->tx_packet_cnt); | 603 | pr_err("No Tx resource %ld\n", db->tx_packet_cnt); |
596 | return NETDEV_TX_BUSY; | 604 | return NETDEV_TX_BUSY; |
597 | } | 605 | } |
598 | 606 | ||
@@ -842,13 +850,15 @@ static void uli526x_rx_packet(struct net_device *dev, struct uli526x_board_info | |||
842 | 850 | ||
843 | if ( !(rdes0 & 0x8000) || | 851 | if ( !(rdes0 & 0x8000) || |
844 | ((db->cr6_data & CR6_PM) && (rxlen>6)) ) { | 852 | ((db->cr6_data & CR6_PM) && (rxlen>6)) ) { |
853 | struct sk_buff *new_skb = NULL; | ||
854 | |||
845 | skb = rxptr->rx_skb_ptr; | 855 | skb = rxptr->rx_skb_ptr; |
846 | 856 | ||
847 | /* Good packet, send to upper layer */ | 857 | /* Good packet, send to upper layer */ |
848 | /* Shorst packet used new SKB */ | 858 | /* Shorst packet used new SKB */ |
849 | if ( (rxlen < RX_COPY_SIZE) && | 859 | if ((rxlen < RX_COPY_SIZE) && |
850 | ( (skb = dev_alloc_skb(rxlen + 2) ) | 860 | (((new_skb = dev_alloc_skb(rxlen + 2)) != NULL))) { |
851 | != NULL) ) { | 861 | skb = new_skb; |
852 | /* size less than COPY_SIZE, allocate a rxlen SKB */ | 862 | /* size less than COPY_SIZE, allocate a rxlen SKB */ |
853 | skb_reserve(skb, 2); /* 16byte align */ | 863 | skb_reserve(skb, 2); /* 16byte align */ |
854 | memcpy(skb_put(skb, rxlen), | 864 | memcpy(skb_put(skb, rxlen), |
@@ -897,16 +907,18 @@ static void uli526x_set_filter_mode(struct net_device * dev) | |||
897 | return; | 907 | return; |
898 | } | 908 | } |
899 | 909 | ||
900 | if (dev->flags & IFF_ALLMULTI || dev->mc_count > ULI5261_MAX_MULTICAST) { | 910 | if (dev->flags & IFF_ALLMULTI || |
901 | ULI526X_DBUG(0, "Pass all multicast address", dev->mc_count); | 911 | netdev_mc_count(dev) > ULI5261_MAX_MULTICAST) { |
912 | ULI526X_DBUG(0, "Pass all multicast address", | ||
913 | netdev_mc_count(dev)); | ||
902 | db->cr6_data &= ~(CR6_PM | CR6_PBF); | 914 | db->cr6_data &= ~(CR6_PM | CR6_PBF); |
903 | db->cr6_data |= CR6_PAM; | 915 | db->cr6_data |= CR6_PAM; |
904 | spin_unlock_irqrestore(&db->lock, flags); | 916 | spin_unlock_irqrestore(&db->lock, flags); |
905 | return; | 917 | return; |
906 | } | 918 | } |
907 | 919 | ||
908 | ULI526X_DBUG(0, "Set multicast address", dev->mc_count); | 920 | ULI526X_DBUG(0, "Set multicast address", netdev_mc_count(dev)); |
909 | send_filter_frame(dev, dev->mc_count); /* M5261/M5263 */ | 921 | send_filter_frame(dev, netdev_mc_count(dev)); /* M5261/M5263 */ |
910 | spin_unlock_irqrestore(&db->lock, flags); | 922 | spin_unlock_irqrestore(&db->lock, flags); |
911 | } | 923 | } |
912 | 924 | ||
@@ -1058,7 +1070,7 @@ static void uli526x_timer(unsigned long data) | |||
1058 | /* Link Failed */ | 1070 | /* Link Failed */ |
1059 | ULI526X_DBUG(0, "Link Failed", tmp_cr12); | 1071 | ULI526X_DBUG(0, "Link Failed", tmp_cr12); |
1060 | netif_carrier_off(dev); | 1072 | netif_carrier_off(dev); |
1061 | printk(KERN_INFO "uli526x: %s NIC Link is Down\n",dev->name); | 1073 | pr_info("%s NIC Link is Down\n",dev->name); |
1062 | db->link_failed = 1; | 1074 | db->link_failed = 1; |
1063 | 1075 | ||
1064 | /* For Force 10/100M Half/Full mode: Enable Auto-Nego mode */ | 1076 | /* For Force 10/100M Half/Full mode: Enable Auto-Nego mode */ |
@@ -1090,11 +1102,11 @@ static void uli526x_timer(unsigned long data) | |||
1090 | } | 1102 | } |
1091 | if(db->op_mode==ULI526X_10MFD || db->op_mode==ULI526X_100MFD) | 1103 | if(db->op_mode==ULI526X_10MFD || db->op_mode==ULI526X_100MFD) |
1092 | { | 1104 | { |
1093 | printk(KERN_INFO "uli526x: %s NIC Link is Up %d Mbps Full duplex\n",dev->name,TmpSpeed); | 1105 | pr_info("%s NIC Link is Up %d Mbps Full duplex\n",dev->name,TmpSpeed); |
1094 | } | 1106 | } |
1095 | else | 1107 | else |
1096 | { | 1108 | { |
1097 | printk(KERN_INFO "uli526x: %s NIC Link is Up %d Mbps Half duplex\n",dev->name,TmpSpeed); | 1109 | pr_info("%s NIC Link is Up %d Mbps Half duplex\n",dev->name,TmpSpeed); |
1098 | } | 1110 | } |
1099 | netif_carrier_on(dev); | 1111 | netif_carrier_on(dev); |
1100 | } | 1112 | } |
@@ -1104,7 +1116,7 @@ static void uli526x_timer(unsigned long data) | |||
1104 | { | 1116 | { |
1105 | if(db->init==1) | 1117 | if(db->init==1) |
1106 | { | 1118 | { |
1107 | printk(KERN_INFO "uli526x: %s NIC Link is Down\n",dev->name); | 1119 | pr_info("%s NIC Link is Down\n",dev->name); |
1108 | netif_carrier_off(dev); | 1120 | netif_carrier_off(dev); |
1109 | } | 1121 | } |
1110 | } | 1122 | } |
@@ -1230,8 +1242,7 @@ static int uli526x_resume(struct pci_dev *pdev) | |||
1230 | 1242 | ||
1231 | err = pci_set_power_state(pdev, PCI_D0); | 1243 | err = pci_set_power_state(pdev, PCI_D0); |
1232 | if (err) { | 1244 | if (err) { |
1233 | printk(KERN_WARNING "%s: Could not put device into D0\n", | 1245 | dev_warn(&dev->dev, "Could not put device into D0\n"); |
1234 | dev->name); | ||
1235 | return err; | 1246 | return err; |
1236 | } | 1247 | } |
1237 | 1248 | ||
@@ -1405,14 +1416,14 @@ static void send_filter_frame(struct net_device *dev, int mc_cnt) | |||
1405 | *suptr++ = 0xffff << FLT_SHIFT; | 1416 | *suptr++ = 0xffff << FLT_SHIFT; |
1406 | 1417 | ||
1407 | /* fit the multicast address */ | 1418 | /* fit the multicast address */ |
1408 | for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) { | 1419 | netdev_for_each_mc_addr(mcptr, dev) { |
1409 | addrptr = (u16 *) mcptr->dmi_addr; | 1420 | addrptr = (u16 *) mcptr->dmi_addr; |
1410 | *suptr++ = addrptr[0] << FLT_SHIFT; | 1421 | *suptr++ = addrptr[0] << FLT_SHIFT; |
1411 | *suptr++ = addrptr[1] << FLT_SHIFT; | 1422 | *suptr++ = addrptr[1] << FLT_SHIFT; |
1412 | *suptr++ = addrptr[2] << FLT_SHIFT; | 1423 | *suptr++ = addrptr[2] << FLT_SHIFT; |
1413 | } | 1424 | } |
1414 | 1425 | ||
1415 | for (; i<14; i++) { | 1426 | for (i = netdev_mc_count(dev); i < 14; i++) { |
1416 | *suptr++ = 0xffff << FLT_SHIFT; | 1427 | *suptr++ = 0xffff << FLT_SHIFT; |
1417 | *suptr++ = 0xffff << FLT_SHIFT; | 1428 | *suptr++ = 0xffff << FLT_SHIFT; |
1418 | *suptr++ = 0xffff << FLT_SHIFT; | 1429 | *suptr++ = 0xffff << FLT_SHIFT; |
@@ -1432,7 +1443,7 @@ static void send_filter_frame(struct net_device *dev, int mc_cnt) | |||
1432 | update_cr6(db->cr6_data, dev->base_addr); | 1443 | update_cr6(db->cr6_data, dev->base_addr); |
1433 | dev->trans_start = jiffies; | 1444 | dev->trans_start = jiffies; |
1434 | } else | 1445 | } else |
1435 | printk(KERN_ERR DRV_NAME ": No Tx resource - Send_filter_frame!\n"); | 1446 | pr_err("No Tx resource - Send_filter_frame!\n"); |
1436 | } | 1447 | } |
1437 | 1448 | ||
1438 | 1449 | ||
@@ -1783,7 +1794,7 @@ static u16 phy_read_1bit(unsigned long ioaddr, u32 chip_id) | |||
1783 | } | 1794 | } |
1784 | 1795 | ||
1785 | 1796 | ||
1786 | static struct pci_device_id uli526x_pci_tbl[] = { | 1797 | static DEFINE_PCI_DEVICE_TABLE(uli526x_pci_tbl) = { |
1787 | { 0x10B9, 0x5261, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_ULI5261_ID }, | 1798 | { 0x10B9, 0x5261, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_ULI5261_ID }, |
1788 | { 0x10B9, 0x5263, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_ULI5263_ID }, | 1799 | { 0x10B9, 0x5263, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_ULI5263_ID }, |
1789 | { 0, } | 1800 | { 0, } |