aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/tulip/dmfe.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/tulip/dmfe.c')
-rw-r--r--drivers/net/tulip/dmfe.c123
1 files changed, 69 insertions, 54 deletions
diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c
index a45ded0538b8..9568156dea98 100644
--- a/drivers/net/tulip/dmfe.c
+++ b/drivers/net/tulip/dmfe.c
@@ -61,6 +61,8 @@
61 Test and make sure PCI latency is now correct for all cases. 61 Test and make sure PCI latency is now correct for all cases.
62*/ 62*/
63 63
64#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
65
64#define DRV_NAME "dmfe" 66#define DRV_NAME "dmfe"
65#define DRV_VERSION "1.36.4" 67#define DRV_VERSION "1.36.4"
66#define DRV_RELDATE "2002-01-17" 68#define DRV_RELDATE "2002-01-17"
@@ -72,7 +74,6 @@
72#include <linux/ptrace.h> 74#include <linux/ptrace.h>
73#include <linux/errno.h> 75#include <linux/errno.h>
74#include <linux/ioport.h> 76#include <linux/ioport.h>
75#include <linux/slab.h>
76#include <linux/interrupt.h> 77#include <linux/interrupt.h>
77#include <linux/pci.h> 78#include <linux/pci.h>
78#include <linux/dma-mapping.h> 79#include <linux/dma-mapping.h>
@@ -92,6 +93,10 @@
92#include <asm/uaccess.h> 93#include <asm/uaccess.h>
93#include <asm/irq.h> 94#include <asm/irq.h>
94 95
96#ifdef CONFIG_TULIP_DM910X
97#include <linux/of.h>
98#endif
99
95 100
96/* Board/System/Debug information/definition ---------------- */ 101/* Board/System/Debug information/definition ---------------- */
97#define PCI_DM9132_ID 0x91321282 /* Davicom DM9132 ID */ 102#define PCI_DM9132_ID 0x91321282 /* Davicom DM9132 ID */
@@ -145,16 +150,17 @@
145#define DMFE_TX_TIMEOUT ((3*HZ)/2) /* tx packet time-out time 1.5 s" */ 150#define DMFE_TX_TIMEOUT ((3*HZ)/2) /* tx packet time-out time 1.5 s" */
146#define DMFE_TX_KICK (HZ/2) /* tx packet Kick-out time 0.5 s" */ 151#define DMFE_TX_KICK (HZ/2) /* tx packet Kick-out time 0.5 s" */
147 152
148#define DMFE_DBUG(dbug_now, msg, value) \ 153#define DMFE_DBUG(dbug_now, msg, value) \
149 do { \ 154 do { \
150 if (dmfe_debug || (dbug_now)) \ 155 if (dmfe_debug || (dbug_now)) \
151 printk(KERN_ERR DRV_NAME ": %s %lx\n",\ 156 pr_err("%s %lx\n", \
152 (msg), (long) (value)); \ 157 (msg), (long) (value)); \
153 } while (0) 158 } while (0)
154 159
155#define SHOW_MEDIA_TYPE(mode) \ 160#define SHOW_MEDIA_TYPE(mode) \
156 printk (KERN_INFO DRV_NAME ": Change Speed to %sMhz %s duplex\n" , \ 161 pr_info("Change Speed to %sMhz %s duplex\n" , \
157 (mode & 1) ? "100":"10", (mode & 4) ? "full":"half"); 162 (mode & 1) ? "100":"10", \
163 (mode & 4) ? "full":"half");
158 164
159 165
160/* CR9 definition: SROM/MII */ 166/* CR9 definition: SROM/MII */
@@ -323,8 +329,8 @@ static void poll_dmfe (struct net_device *dev);
323static void dmfe_descriptor_init(struct dmfe_board_info *, unsigned long); 329static void dmfe_descriptor_init(struct dmfe_board_info *, unsigned long);
324static void allocate_rx_buffer(struct dmfe_board_info *); 330static void allocate_rx_buffer(struct dmfe_board_info *);
325static void update_cr6(u32, unsigned long); 331static void update_cr6(u32, unsigned long);
326static void send_filter_frame(struct DEVICE * ,int); 332static void send_filter_frame(struct DEVICE *);
327static void dm9132_id_table(struct DEVICE * ,int); 333static void dm9132_id_table(struct DEVICE *);
328static u16 phy_read(unsigned long, u8, u8, u32); 334static u16 phy_read(unsigned long, u8, u8, u32);
329static void phy_write(unsigned long, u8, u8, u16, u32); 335static void phy_write(unsigned long, u8, u8, u16, u32);
330static void phy_write_1bit(unsigned long, u32); 336static void phy_write_1bit(unsigned long, u32);
@@ -377,6 +383,22 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
377 if (!printed_version++) 383 if (!printed_version++)
378 printk(version); 384 printk(version);
379 385
386 /*
387 * SPARC on-board DM910x chips should be handled by the main
388 * tulip driver, except for early DM9100s.
389 */
390#ifdef CONFIG_TULIP_DM910X
391 if ((ent->driver_data == PCI_DM9100_ID && pdev->revision >= 0x30) ||
392 ent->driver_data == PCI_DM9102_ID) {
393 struct device_node *dp = pci_device_to_OF_node(pdev);
394
395 if (dp && of_get_property(dp, "local-mac-address", NULL)) {
396 pr_info("skipping on-board DM910x (use tulip)\n");
397 return -ENODEV;
398 }
399 }
400#endif
401
380 /* Init network device */ 402 /* Init network device */
381 dev = alloc_etherdev(sizeof(*db)); 403 dev = alloc_etherdev(sizeof(*db));
382 if (dev == NULL) 404 if (dev == NULL)
@@ -384,8 +406,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
384 SET_NETDEV_DEV(dev, &pdev->dev); 406 SET_NETDEV_DEV(dev, &pdev->dev);
385 407
386 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { 408 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
387 printk(KERN_WARNING DRV_NAME 409 pr_warning("32-bit PCI DMA not available\n");
388 ": 32-bit PCI DMA not available.\n");
389 err = -ENODEV; 410 err = -ENODEV;
390 goto err_out_free; 411 goto err_out_free;
391 } 412 }
@@ -396,13 +417,13 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
396 goto err_out_free; 417 goto err_out_free;
397 418
398 if (!pci_resource_start(pdev, 0)) { 419 if (!pci_resource_start(pdev, 0)) {
399 printk(KERN_ERR DRV_NAME ": I/O base is zero\n"); 420 pr_err("I/O base is zero\n");
400 err = -ENODEV; 421 err = -ENODEV;
401 goto err_out_disable; 422 goto err_out_disable;
402 } 423 }
403 424
404 if (pci_resource_len(pdev, 0) < (CHK_IO_SIZE(pdev)) ) { 425 if (pci_resource_len(pdev, 0) < (CHK_IO_SIZE(pdev)) ) {
405 printk(KERN_ERR DRV_NAME ": Allocated I/O size too small\n"); 426 pr_err("Allocated I/O size too small\n");
406 err = -ENODEV; 427 err = -ENODEV;
407 goto err_out_disable; 428 goto err_out_disable;
408 } 429 }
@@ -417,7 +438,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
417#endif 438#endif
418 439
419 if (pci_request_regions(pdev, DRV_NAME)) { 440 if (pci_request_regions(pdev, DRV_NAME)) {
420 printk(KERN_ERR DRV_NAME ": Failed to request PCI regions\n"); 441 pr_err("Failed to request PCI regions\n");
421 err = -ENODEV; 442 err = -ENODEV;
422 goto err_out_disable; 443 goto err_out_disable;
423 } 444 }
@@ -476,12 +497,9 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
476 if (err) 497 if (err)
477 goto err_out_free_buf; 498 goto err_out_free_buf;
478 499
479 printk(KERN_INFO "%s: Davicom DM%04lx at pci%s, %pM, irq %d.\n", 500 dev_info(&dev->dev, "Davicom DM%04lx at pci%s, %pM, irq %d\n",
480 dev->name, 501 ent->driver_data >> 16,
481 ent->driver_data >> 16, 502 pci_name(pdev), dev->dev_addr, dev->irq);
482 pci_name(pdev),
483 dev->dev_addr,
484 dev->irq);
485 503
486 pci_set_master(pdev); 504 pci_set_master(pdev);
487 505
@@ -543,7 +561,7 @@ static int dmfe_open(struct DEVICE *dev)
543 561
544 DMFE_DBUG(0, "dmfe_open", 0); 562 DMFE_DBUG(0, "dmfe_open", 0);
545 563
546 ret = request_irq(dev->irq, &dmfe_interrupt, 564 ret = request_irq(dev->irq, dmfe_interrupt,
547 IRQF_SHARED, dev->name, dev); 565 IRQF_SHARED, dev->name, dev);
548 if (ret) 566 if (ret)
549 return ret; 567 return ret;
@@ -639,9 +657,9 @@ static void dmfe_init_dm910x(struct DEVICE *dev)
639 657
640 /* Send setup frame */ 658 /* Send setup frame */
641 if (db->chip_id == PCI_DM9132_ID) 659 if (db->chip_id == PCI_DM9132_ID)
642 dm9132_id_table(dev, dev->mc_count); /* DM9132 */ 660 dm9132_id_table(dev); /* DM9132 */
643 else 661 else
644 send_filter_frame(dev, dev->mc_count); /* DM9102/DM9102A */ 662 send_filter_frame(dev); /* DM9102/DM9102A */
645 663
646 /* Init CR7, interrupt active bit */ 664 /* Init CR7, interrupt active bit */
647 db->cr7_data = CR7_DEFAULT; 665 db->cr7_data = CR7_DEFAULT;
@@ -675,7 +693,7 @@ static netdev_tx_t dmfe_start_xmit(struct sk_buff *skb,
675 693
676 /* Too large packet check */ 694 /* Too large packet check */
677 if (skb->len > MAX_PACKET_SIZE) { 695 if (skb->len > MAX_PACKET_SIZE) {
678 printk(KERN_ERR DRV_NAME ": big packet = %d\n", (u16)skb->len); 696 pr_err("big packet = %d\n", (u16)skb->len);
679 dev_kfree_skb(skb); 697 dev_kfree_skb(skb);
680 return NETDEV_TX_OK; 698 return NETDEV_TX_OK;
681 } 699 }
@@ -685,8 +703,7 @@ static netdev_tx_t dmfe_start_xmit(struct sk_buff *skb,
685 /* No Tx resource check, it never happen nromally */ 703 /* No Tx resource check, it never happen nromally */
686 if (db->tx_queue_cnt >= TX_FREE_DESC_CNT) { 704 if (db->tx_queue_cnt >= TX_FREE_DESC_CNT) {
687 spin_unlock_irqrestore(&db->lock, flags); 705 spin_unlock_irqrestore(&db->lock, flags);
688 printk(KERN_ERR DRV_NAME ": No Tx resource %ld\n", 706 pr_err("No Tx resource %ld\n", db->tx_queue_cnt);
689 db->tx_queue_cnt);
690 return NETDEV_TX_BUSY; 707 return NETDEV_TX_BUSY;
691 } 708 }
692 709
@@ -758,12 +775,11 @@ static int dmfe_stop(struct DEVICE *dev)
758 775
759#if 0 776#if 0
760 /* show statistic counter */ 777 /* show statistic counter */
761 printk(DRV_NAME ": FU:%lx EC:%lx LC:%lx NC:%lx" 778 printk("FU:%lx EC:%lx LC:%lx NC:%lx LOC:%lx TXJT:%lx RESET:%lx RCR8:%lx FAL:%lx TT:%lx\n",
762 " LOC:%lx TXJT:%lx RESET:%lx RCR8:%lx FAL:%lx TT:%lx\n", 779 db->tx_fifo_underrun, db->tx_excessive_collision,
763 db->tx_fifo_underrun, db->tx_excessive_collision, 780 db->tx_late_collision, db->tx_no_carrier, db->tx_loss_carrier,
764 db->tx_late_collision, db->tx_no_carrier, db->tx_loss_carrier, 781 db->tx_jabber_timeout, db->reset_count, db->reset_cr8,
765 db->tx_jabber_timeout, db->reset_count, db->reset_cr8, 782 db->reset_fatal, db->reset_TXtimeout);
766 db->reset_fatal, db->reset_TXtimeout);
767#endif 783#endif
768 784
769 return 0; 785 return 0;
@@ -864,7 +880,7 @@ static void dmfe_free_tx_pkt(struct DEVICE *dev, struct dmfe_board_info * db)
864 txptr = db->tx_remove_ptr; 880 txptr = db->tx_remove_ptr;
865 while(db->tx_packet_cnt) { 881 while(db->tx_packet_cnt) {
866 tdes0 = le32_to_cpu(txptr->tdes0); 882 tdes0 = le32_to_cpu(txptr->tdes0);
867 /* printk(DRV_NAME ": tdes0=%x\n", tdes0); */ 883 pr_debug("tdes0=%x\n", tdes0);
868 if (tdes0 & 0x80000000) 884 if (tdes0 & 0x80000000)
869 break; 885 break;
870 886
@@ -874,7 +890,7 @@ static void dmfe_free_tx_pkt(struct DEVICE *dev, struct dmfe_board_info * db)
874 890
875 /* Transmit statistic counter */ 891 /* Transmit statistic counter */
876 if ( tdes0 != 0x7fffffff ) { 892 if ( tdes0 != 0x7fffffff ) {
877 /* printk(DRV_NAME ": tdes0=%x\n", tdes0); */ 893 pr_debug("tdes0=%x\n", tdes0);
878 dev->stats.collisions += (tdes0 >> 3) & 0xf; 894 dev->stats.collisions += (tdes0 >> 3) & 0xf;
879 dev->stats.tx_bytes += le32_to_cpu(txptr->tdes1) & 0x7ff; 895 dev->stats.tx_bytes += le32_to_cpu(txptr->tdes1) & 0x7ff;
880 if (tdes0 & TDES0_ERR_MASK) { 896 if (tdes0 & TDES0_ERR_MASK) {
@@ -971,7 +987,7 @@ static void dmfe_rx_packet(struct DEVICE *dev, struct dmfe_board_info * db)
971 /* error summary bit check */ 987 /* error summary bit check */
972 if (rdes0 & 0x8000) { 988 if (rdes0 & 0x8000) {
973 /* This is a error packet */ 989 /* This is a error packet */
974 //printk(DRV_NAME ": rdes0: %lx\n", rdes0); 990 pr_debug("rdes0: %x\n", rdes0);
975 dev->stats.rx_errors++; 991 dev->stats.rx_errors++;
976 if (rdes0 & 1) 992 if (rdes0 & 1)
977 dev->stats.rx_fifo_errors++; 993 dev->stats.rx_fifo_errors++;
@@ -1035,6 +1051,7 @@ static void dmfe_set_filter_mode(struct DEVICE * dev)
1035{ 1051{
1036 struct dmfe_board_info *db = netdev_priv(dev); 1052 struct dmfe_board_info *db = netdev_priv(dev);
1037 unsigned long flags; 1053 unsigned long flags;
1054 int mc_count = netdev_mc_count(dev);
1038 1055
1039 DMFE_DBUG(0, "dmfe_set_filter_mode()", 0); 1056 DMFE_DBUG(0, "dmfe_set_filter_mode()", 0);
1040 spin_lock_irqsave(&db->lock, flags); 1057 spin_lock_irqsave(&db->lock, flags);
@@ -1047,19 +1064,19 @@ static void dmfe_set_filter_mode(struct DEVICE * dev)
1047 return; 1064 return;
1048 } 1065 }
1049 1066
1050 if (dev->flags & IFF_ALLMULTI || dev->mc_count > DMFE_MAX_MULTICAST) { 1067 if (dev->flags & IFF_ALLMULTI || mc_count > DMFE_MAX_MULTICAST) {
1051 DMFE_DBUG(0, "Pass all multicast address", dev->mc_count); 1068 DMFE_DBUG(0, "Pass all multicast address", mc_count);
1052 db->cr6_data &= ~(CR6_PM | CR6_PBF); 1069 db->cr6_data &= ~(CR6_PM | CR6_PBF);
1053 db->cr6_data |= CR6_PAM; 1070 db->cr6_data |= CR6_PAM;
1054 spin_unlock_irqrestore(&db->lock, flags); 1071 spin_unlock_irqrestore(&db->lock, flags);
1055 return; 1072 return;
1056 } 1073 }
1057 1074
1058 DMFE_DBUG(0, "Set multicast address", dev->mc_count); 1075 DMFE_DBUG(0, "Set multicast address", mc_count);
1059 if (db->chip_id == PCI_DM9132_ID) 1076 if (db->chip_id == PCI_DM9132_ID)
1060 dm9132_id_table(dev, dev->mc_count); /* DM9132 */ 1077 dm9132_id_table(dev); /* DM9132 */
1061 else 1078 else
1062 send_filter_frame(dev, dev->mc_count); /* DM9102/DM9102A */ 1079 send_filter_frame(dev); /* DM9102/DM9102A */
1063 spin_unlock_irqrestore(&db->lock, flags); 1080 spin_unlock_irqrestore(&db->lock, flags);
1064} 1081}
1065 1082
@@ -1170,8 +1187,7 @@ static void dmfe_timer(unsigned long data)
1170 if ( time_after(jiffies, dev->trans_start + DMFE_TX_TIMEOUT) ) { 1187 if ( time_after(jiffies, dev->trans_start + DMFE_TX_TIMEOUT) ) {
1171 db->reset_TXtimeout++; 1188 db->reset_TXtimeout++;
1172 db->wait_reset = 1; 1189 db->wait_reset = 1;
1173 printk(KERN_WARNING "%s: Tx timeout - resetting\n", 1190 dev_warn(&dev->dev, "Tx timeout - resetting\n");
1174 dev->name);
1175 } 1191 }
1176 } 1192 }
1177 1193
@@ -1435,7 +1451,7 @@ static void update_cr6(u32 cr6_data, unsigned long ioaddr)
1435 * This setup frame initilize DM910X address filter mode 1451 * This setup frame initilize DM910X address filter mode
1436*/ 1452*/
1437 1453
1438static void dm9132_id_table(struct DEVICE *dev, int mc_cnt) 1454static void dm9132_id_table(struct DEVICE *dev)
1439{ 1455{
1440 struct dev_mc_list *mcptr; 1456 struct dev_mc_list *mcptr;
1441 u16 * addrptr; 1457 u16 * addrptr;
@@ -1455,15 +1471,14 @@ static void dm9132_id_table(struct DEVICE *dev, int mc_cnt)
1455 ioaddr += 4; 1471 ioaddr += 4;
1456 1472
1457 /* Clear Hash Table */ 1473 /* Clear Hash Table */
1458 for (i = 0; i < 4; i++) 1474 memset(hash_table, 0, sizeof(hash_table));
1459 hash_table[i] = 0x0;
1460 1475
1461 /* broadcast address */ 1476 /* broadcast address */
1462 hash_table[3] = 0x8000; 1477 hash_table[3] = 0x8000;
1463 1478
1464 /* the multicast address in Hash Table : 64 bits */ 1479 /* the multicast address in Hash Table : 64 bits */
1465 for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) { 1480 netdev_for_each_mc_addr(mcptr, dev) {
1466 hash_val = cal_CRC( (char *) mcptr->dmi_addr, 6, 0) & 0x3f; 1481 hash_val = cal_CRC((char *) mcptr->dmi_addr, 6, 0) & 0x3f;
1467 hash_table[hash_val / 16] |= (u16) 1 << (hash_val % 16); 1482 hash_table[hash_val / 16] |= (u16) 1 << (hash_val % 16);
1468 } 1483 }
1469 1484
@@ -1478,7 +1493,7 @@ static void dm9132_id_table(struct DEVICE *dev, int mc_cnt)
1478 * This setup frame initilize DM910X address filter mode 1493 * This setup frame initilize DM910X address filter mode
1479 */ 1494 */
1480 1495
1481static void send_filter_frame(struct DEVICE *dev, int mc_cnt) 1496static void send_filter_frame(struct DEVICE *dev)
1482{ 1497{
1483 struct dmfe_board_info *db = netdev_priv(dev); 1498 struct dmfe_board_info *db = netdev_priv(dev);
1484 struct dev_mc_list *mcptr; 1499 struct dev_mc_list *mcptr;
@@ -1504,14 +1519,14 @@ static void send_filter_frame(struct DEVICE *dev, int mc_cnt)
1504 *suptr++ = 0xffff; 1519 *suptr++ = 0xffff;
1505 1520
1506 /* fit the multicast address */ 1521 /* fit the multicast address */
1507 for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) { 1522 netdev_for_each_mc_addr(mcptr, dev) {
1508 addrptr = (u16 *) mcptr->dmi_addr; 1523 addrptr = (u16 *) mcptr->dmi_addr;
1509 *suptr++ = addrptr[0]; 1524 *suptr++ = addrptr[0];
1510 *suptr++ = addrptr[1]; 1525 *suptr++ = addrptr[1];
1511 *suptr++ = addrptr[2]; 1526 *suptr++ = addrptr[2];
1512 } 1527 }
1513 1528
1514 for (; i<14; i++) { 1529 for (i = netdev_mc_count(dev); i < 14; i++) {
1515 *suptr++ = 0xffff; 1530 *suptr++ = 0xffff;
1516 *suptr++ = 0xffff; 1531 *suptr++ = 0xffff;
1517 *suptr++ = 0xffff; 1532 *suptr++ = 0xffff;
@@ -1625,7 +1640,7 @@ static u8 dmfe_sense_speed(struct dmfe_board_info * db)
1625 else /* DM9102/DM9102A */ 1640 else /* DM9102/DM9102A */
1626 phy_mode = phy_read(db->ioaddr, 1641 phy_mode = phy_read(db->ioaddr,
1627 db->phy_addr, 17, db->chip_id) & 0xf000; 1642 db->phy_addr, 17, db->chip_id) & 0xf000;
1628 /* printk(DRV_NAME ": Phy_mode %x ",phy_mode); */ 1643 pr_debug("Phy_mode %x\n", phy_mode);
1629 switch (phy_mode) { 1644 switch (phy_mode) {
1630 case 0x1000: db->op_mode = DMFE_10MHF; break; 1645 case 0x1000: db->op_mode = DMFE_10MHF; break;
1631 case 0x2000: db->op_mode = DMFE_10MFD; break; 1646 case 0x2000: db->op_mode = DMFE_10MFD; break;
@@ -2068,7 +2083,7 @@ static void dmfe_HPNA_remote_cmd_chk(struct dmfe_board_info * db)
2068 2083
2069 2084
2070 2085
2071static struct pci_device_id dmfe_pci_tbl[] = { 2086static DEFINE_PCI_DEVICE_TABLE(dmfe_pci_tbl) = {
2072 { 0x1282, 0x9132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9132_ID }, 2087 { 0x1282, 0x9132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9132_ID },
2073 { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9102_ID }, 2088 { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9102_ID },
2074 { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9100_ID }, 2089 { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9100_ID },