aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tulip/uli526x.c
diff options
context:
space:
mode:
authorAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
committerAndrea Bastoni <bastoni@cs.unc.edu>2010-05-30 19:16:45 -0400
commitada47b5fe13d89735805b566185f4885f5a3f750 (patch)
tree644b88f8a71896307d71438e9b3af49126ffb22b /drivers/net/tulip/uli526x.c
parent43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff)
parent3280f21d43ee541f97f8cda5792150d2dbec20d5 (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.c75
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) \
87do { \
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
1786static struct pci_device_id uli526x_pci_tbl[] = { 1797static 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, }