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.c103
1 files changed, 49 insertions, 54 deletions
diff --git a/drivers/net/tulip/dmfe.c b/drivers/net/tulip/dmfe.c
index 6f44ebf58910..95b38d803e9b 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"
@@ -149,16 +151,17 @@
149#define DMFE_TX_TIMEOUT ((3*HZ)/2) /* tx packet time-out time 1.5 s" */ 151#define DMFE_TX_TIMEOUT ((3*HZ)/2) /* tx packet time-out time 1.5 s" */
150#define DMFE_TX_KICK (HZ/2) /* tx packet Kick-out time 0.5 s" */ 152#define DMFE_TX_KICK (HZ/2) /* tx packet Kick-out time 0.5 s" */
151 153
152#define DMFE_DBUG(dbug_now, msg, value) \ 154#define DMFE_DBUG(dbug_now, msg, value) \
153 do { \ 155 do { \
154 if (dmfe_debug || (dbug_now)) \ 156 if (dmfe_debug || (dbug_now)) \
155 printk(KERN_ERR DRV_NAME ": %s %lx\n",\ 157 pr_err("%s %lx\n", \
156 (msg), (long) (value)); \ 158 (msg), (long) (value)); \
157 } while (0) 159 } while (0)
158 160
159#define SHOW_MEDIA_TYPE(mode) \ 161#define SHOW_MEDIA_TYPE(mode) \
160 printk (KERN_INFO DRV_NAME ": Change Speed to %sMhz %s duplex\n" , \ 162 pr_info("Change Speed to %sMhz %s duplex\n" , \
161 (mode & 1) ? "100":"10", (mode & 4) ? "full":"half"); 163 (mode & 1) ? "100":"10", \
164 (mode & 4) ? "full":"half");
162 165
163 166
164/* CR9 definition: SROM/MII */ 167/* CR9 definition: SROM/MII */
@@ -327,8 +330,8 @@ static void poll_dmfe (struct net_device *dev);
327static void dmfe_descriptor_init(struct dmfe_board_info *, unsigned long); 330static void dmfe_descriptor_init(struct dmfe_board_info *, unsigned long);
328static void allocate_rx_buffer(struct dmfe_board_info *); 331static void allocate_rx_buffer(struct dmfe_board_info *);
329static void update_cr6(u32, unsigned long); 332static void update_cr6(u32, unsigned long);
330static void send_filter_frame(struct DEVICE * ,int); 333static void send_filter_frame(struct DEVICE *);
331static void dm9132_id_table(struct DEVICE * ,int); 334static void dm9132_id_table(struct DEVICE *);
332static u16 phy_read(unsigned long, u8, u8, u32); 335static u16 phy_read(unsigned long, u8, u8, u32);
333static void phy_write(unsigned long, u8, u8, u16, u32); 336static void phy_write(unsigned long, u8, u8, u16, u32);
334static void phy_write_1bit(unsigned long, u32); 337static void phy_write_1bit(unsigned long, u32);
@@ -391,8 +394,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
391 struct device_node *dp = pci_device_to_OF_node(pdev); 394 struct device_node *dp = pci_device_to_OF_node(pdev);
392 395
393 if (dp && of_get_property(dp, "local-mac-address", NULL)) { 396 if (dp && of_get_property(dp, "local-mac-address", NULL)) {
394 printk(KERN_INFO DRV_NAME 397 pr_info("skipping on-board DM910x (use tulip)\n");
395 ": skipping on-board DM910x (use tulip)\n");
396 return -ENODEV; 398 return -ENODEV;
397 } 399 }
398 } 400 }
@@ -405,8 +407,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
405 SET_NETDEV_DEV(dev, &pdev->dev); 407 SET_NETDEV_DEV(dev, &pdev->dev);
406 408
407 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) { 409 if (pci_set_dma_mask(pdev, DMA_BIT_MASK(32))) {
408 printk(KERN_WARNING DRV_NAME 410 pr_warning("32-bit PCI DMA not available\n");
409 ": 32-bit PCI DMA not available.\n");
410 err = -ENODEV; 411 err = -ENODEV;
411 goto err_out_free; 412 goto err_out_free;
412 } 413 }
@@ -417,13 +418,13 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
417 goto err_out_free; 418 goto err_out_free;
418 419
419 if (!pci_resource_start(pdev, 0)) { 420 if (!pci_resource_start(pdev, 0)) {
420 printk(KERN_ERR DRV_NAME ": I/O base is zero\n"); 421 pr_err("I/O base is zero\n");
421 err = -ENODEV; 422 err = -ENODEV;
422 goto err_out_disable; 423 goto err_out_disable;
423 } 424 }
424 425
425 if (pci_resource_len(pdev, 0) < (CHK_IO_SIZE(pdev)) ) { 426 if (pci_resource_len(pdev, 0) < (CHK_IO_SIZE(pdev)) ) {
426 printk(KERN_ERR DRV_NAME ": Allocated I/O size too small\n"); 427 pr_err("Allocated I/O size too small\n");
427 err = -ENODEV; 428 err = -ENODEV;
428 goto err_out_disable; 429 goto err_out_disable;
429 } 430 }
@@ -438,7 +439,7 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
438#endif 439#endif
439 440
440 if (pci_request_regions(pdev, DRV_NAME)) { 441 if (pci_request_regions(pdev, DRV_NAME)) {
441 printk(KERN_ERR DRV_NAME ": Failed to request PCI regions\n"); 442 pr_err("Failed to request PCI regions\n");
442 err = -ENODEV; 443 err = -ENODEV;
443 goto err_out_disable; 444 goto err_out_disable;
444 } 445 }
@@ -497,12 +498,9 @@ static int __devinit dmfe_init_one (struct pci_dev *pdev,
497 if (err) 498 if (err)
498 goto err_out_free_buf; 499 goto err_out_free_buf;
499 500
500 printk(KERN_INFO "%s: Davicom DM%04lx at pci%s, %pM, irq %d.\n", 501 dev_info(&dev->dev, "Davicom DM%04lx at pci%s, %pM, irq %d\n",
501 dev->name, 502 ent->driver_data >> 16,
502 ent->driver_data >> 16, 503 pci_name(pdev), dev->dev_addr, dev->irq);
503 pci_name(pdev),
504 dev->dev_addr,
505 dev->irq);
506 504
507 pci_set_master(pdev); 505 pci_set_master(pdev);
508 506
@@ -660,9 +658,9 @@ static void dmfe_init_dm910x(struct DEVICE *dev)
660 658
661 /* Send setup frame */ 659 /* Send setup frame */
662 if (db->chip_id == PCI_DM9132_ID) 660 if (db->chip_id == PCI_DM9132_ID)
663 dm9132_id_table(dev, dev->mc_count); /* DM9132 */ 661 dm9132_id_table(dev); /* DM9132 */
664 else 662 else
665 send_filter_frame(dev, dev->mc_count); /* DM9102/DM9102A */ 663 send_filter_frame(dev); /* DM9102/DM9102A */
666 664
667 /* Init CR7, interrupt active bit */ 665 /* Init CR7, interrupt active bit */
668 db->cr7_data = CR7_DEFAULT; 666 db->cr7_data = CR7_DEFAULT;
@@ -696,7 +694,7 @@ static netdev_tx_t dmfe_start_xmit(struct sk_buff *skb,
696 694
697 /* Too large packet check */ 695 /* Too large packet check */
698 if (skb->len > MAX_PACKET_SIZE) { 696 if (skb->len > MAX_PACKET_SIZE) {
699 printk(KERN_ERR DRV_NAME ": big packet = %d\n", (u16)skb->len); 697 pr_err("big packet = %d\n", (u16)skb->len);
700 dev_kfree_skb(skb); 698 dev_kfree_skb(skb);
701 return NETDEV_TX_OK; 699 return NETDEV_TX_OK;
702 } 700 }
@@ -706,8 +704,7 @@ static netdev_tx_t dmfe_start_xmit(struct sk_buff *skb,
706 /* No Tx resource check, it never happen nromally */ 704 /* No Tx resource check, it never happen nromally */
707 if (db->tx_queue_cnt >= TX_FREE_DESC_CNT) { 705 if (db->tx_queue_cnt >= TX_FREE_DESC_CNT) {
708 spin_unlock_irqrestore(&db->lock, flags); 706 spin_unlock_irqrestore(&db->lock, flags);
709 printk(KERN_ERR DRV_NAME ": No Tx resource %ld\n", 707 pr_err("No Tx resource %ld\n", db->tx_queue_cnt);
710 db->tx_queue_cnt);
711 return NETDEV_TX_BUSY; 708 return NETDEV_TX_BUSY;
712 } 709 }
713 710
@@ -779,12 +776,11 @@ static int dmfe_stop(struct DEVICE *dev)
779 776
780#if 0 777#if 0
781 /* show statistic counter */ 778 /* show statistic counter */
782 printk(DRV_NAME ": FU:%lx EC:%lx LC:%lx NC:%lx" 779 printk("FU:%lx EC:%lx LC:%lx NC:%lx LOC:%lx TXJT:%lx RESET:%lx RCR8:%lx FAL:%lx TT:%lx\n",
783 " LOC:%lx TXJT:%lx RESET:%lx RCR8:%lx FAL:%lx TT:%lx\n", 780 db->tx_fifo_underrun, db->tx_excessive_collision,
784 db->tx_fifo_underrun, db->tx_excessive_collision, 781 db->tx_late_collision, db->tx_no_carrier, db->tx_loss_carrier,
785 db->tx_late_collision, db->tx_no_carrier, db->tx_loss_carrier, 782 db->tx_jabber_timeout, db->reset_count, db->reset_cr8,
786 db->tx_jabber_timeout, db->reset_count, db->reset_cr8, 783 db->reset_fatal, db->reset_TXtimeout);
787 db->reset_fatal, db->reset_TXtimeout);
788#endif 784#endif
789 785
790 return 0; 786 return 0;
@@ -885,7 +881,7 @@ static void dmfe_free_tx_pkt(struct DEVICE *dev, struct dmfe_board_info * db)
885 txptr = db->tx_remove_ptr; 881 txptr = db->tx_remove_ptr;
886 while(db->tx_packet_cnt) { 882 while(db->tx_packet_cnt) {
887 tdes0 = le32_to_cpu(txptr->tdes0); 883 tdes0 = le32_to_cpu(txptr->tdes0);
888 /* printk(DRV_NAME ": tdes0=%x\n", tdes0); */ 884 pr_debug("tdes0=%x\n", tdes0);
889 if (tdes0 & 0x80000000) 885 if (tdes0 & 0x80000000)
890 break; 886 break;
891 887
@@ -895,7 +891,7 @@ static void dmfe_free_tx_pkt(struct DEVICE *dev, struct dmfe_board_info * db)
895 891
896 /* Transmit statistic counter */ 892 /* Transmit statistic counter */
897 if ( tdes0 != 0x7fffffff ) { 893 if ( tdes0 != 0x7fffffff ) {
898 /* printk(DRV_NAME ": tdes0=%x\n", tdes0); */ 894 pr_debug("tdes0=%x\n", tdes0);
899 dev->stats.collisions += (tdes0 >> 3) & 0xf; 895 dev->stats.collisions += (tdes0 >> 3) & 0xf;
900 dev->stats.tx_bytes += le32_to_cpu(txptr->tdes1) & 0x7ff; 896 dev->stats.tx_bytes += le32_to_cpu(txptr->tdes1) & 0x7ff;
901 if (tdes0 & TDES0_ERR_MASK) { 897 if (tdes0 & TDES0_ERR_MASK) {
@@ -992,7 +988,7 @@ static void dmfe_rx_packet(struct DEVICE *dev, struct dmfe_board_info * db)
992 /* error summary bit check */ 988 /* error summary bit check */
993 if (rdes0 & 0x8000) { 989 if (rdes0 & 0x8000) {
994 /* This is a error packet */ 990 /* This is a error packet */
995 //printk(DRV_NAME ": rdes0: %lx\n", rdes0); 991 pr_debug("rdes0: %x\n", rdes0);
996 dev->stats.rx_errors++; 992 dev->stats.rx_errors++;
997 if (rdes0 & 1) 993 if (rdes0 & 1)
998 dev->stats.rx_fifo_errors++; 994 dev->stats.rx_fifo_errors++;
@@ -1056,6 +1052,7 @@ static void dmfe_set_filter_mode(struct DEVICE * dev)
1056{ 1052{
1057 struct dmfe_board_info *db = netdev_priv(dev); 1053 struct dmfe_board_info *db = netdev_priv(dev);
1058 unsigned long flags; 1054 unsigned long flags;
1055 int mc_count = netdev_mc_count(dev);
1059 1056
1060 DMFE_DBUG(0, "dmfe_set_filter_mode()", 0); 1057 DMFE_DBUG(0, "dmfe_set_filter_mode()", 0);
1061 spin_lock_irqsave(&db->lock, flags); 1058 spin_lock_irqsave(&db->lock, flags);
@@ -1068,19 +1065,19 @@ static void dmfe_set_filter_mode(struct DEVICE * dev)
1068 return; 1065 return;
1069 } 1066 }
1070 1067
1071 if (dev->flags & IFF_ALLMULTI || dev->mc_count > DMFE_MAX_MULTICAST) { 1068 if (dev->flags & IFF_ALLMULTI || mc_count > DMFE_MAX_MULTICAST) {
1072 DMFE_DBUG(0, "Pass all multicast address", dev->mc_count); 1069 DMFE_DBUG(0, "Pass all multicast address", mc_count);
1073 db->cr6_data &= ~(CR6_PM | CR6_PBF); 1070 db->cr6_data &= ~(CR6_PM | CR6_PBF);
1074 db->cr6_data |= CR6_PAM; 1071 db->cr6_data |= CR6_PAM;
1075 spin_unlock_irqrestore(&db->lock, flags); 1072 spin_unlock_irqrestore(&db->lock, flags);
1076 return; 1073 return;
1077 } 1074 }
1078 1075
1079 DMFE_DBUG(0, "Set multicast address", dev->mc_count); 1076 DMFE_DBUG(0, "Set multicast address", mc_count);
1080 if (db->chip_id == PCI_DM9132_ID) 1077 if (db->chip_id == PCI_DM9132_ID)
1081 dm9132_id_table(dev, dev->mc_count); /* DM9132 */ 1078 dm9132_id_table(dev); /* DM9132 */
1082 else 1079 else
1083 send_filter_frame(dev, dev->mc_count); /* DM9102/DM9102A */ 1080 send_filter_frame(dev); /* DM9102/DM9102A */
1084 spin_unlock_irqrestore(&db->lock, flags); 1081 spin_unlock_irqrestore(&db->lock, flags);
1085} 1082}
1086 1083
@@ -1191,8 +1188,7 @@ static void dmfe_timer(unsigned long data)
1191 if ( time_after(jiffies, dev->trans_start + DMFE_TX_TIMEOUT) ) { 1188 if ( time_after(jiffies, dev->trans_start + DMFE_TX_TIMEOUT) ) {
1192 db->reset_TXtimeout++; 1189 db->reset_TXtimeout++;
1193 db->wait_reset = 1; 1190 db->wait_reset = 1;
1194 printk(KERN_WARNING "%s: Tx timeout - resetting\n", 1191 dev_warn(&dev->dev, "Tx timeout - resetting\n");
1195 dev->name);
1196 } 1192 }
1197 } 1193 }
1198 1194
@@ -1456,7 +1452,7 @@ static void update_cr6(u32 cr6_data, unsigned long ioaddr)
1456 * This setup frame initilize DM910X address filter mode 1452 * This setup frame initilize DM910X address filter mode
1457*/ 1453*/
1458 1454
1459static void dm9132_id_table(struct DEVICE *dev, int mc_cnt) 1455static void dm9132_id_table(struct DEVICE *dev)
1460{ 1456{
1461 struct dev_mc_list *mcptr; 1457 struct dev_mc_list *mcptr;
1462 u16 * addrptr; 1458 u16 * addrptr;
@@ -1476,15 +1472,14 @@ static void dm9132_id_table(struct DEVICE *dev, int mc_cnt)
1476 ioaddr += 4; 1472 ioaddr += 4;
1477 1473
1478 /* Clear Hash Table */ 1474 /* Clear Hash Table */
1479 for (i = 0; i < 4; i++) 1475 memset(hash_table, 0, sizeof(hash_table));
1480 hash_table[i] = 0x0;
1481 1476
1482 /* broadcast address */ 1477 /* broadcast address */
1483 hash_table[3] = 0x8000; 1478 hash_table[3] = 0x8000;
1484 1479
1485 /* the multicast address in Hash Table : 64 bits */ 1480 /* the multicast address in Hash Table : 64 bits */
1486 for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) { 1481 netdev_for_each_mc_addr(mcptr, dev) {
1487 hash_val = cal_CRC( (char *) mcptr->dmi_addr, 6, 0) & 0x3f; 1482 hash_val = cal_CRC((char *) mcptr->dmi_addr, 6, 0) & 0x3f;
1488 hash_table[hash_val / 16] |= (u16) 1 << (hash_val % 16); 1483 hash_table[hash_val / 16] |= (u16) 1 << (hash_val % 16);
1489 } 1484 }
1490 1485
@@ -1499,7 +1494,7 @@ static void dm9132_id_table(struct DEVICE *dev, int mc_cnt)
1499 * This setup frame initilize DM910X address filter mode 1494 * This setup frame initilize DM910X address filter mode
1500 */ 1495 */
1501 1496
1502static void send_filter_frame(struct DEVICE *dev, int mc_cnt) 1497static void send_filter_frame(struct DEVICE *dev)
1503{ 1498{
1504 struct dmfe_board_info *db = netdev_priv(dev); 1499 struct dmfe_board_info *db = netdev_priv(dev);
1505 struct dev_mc_list *mcptr; 1500 struct dev_mc_list *mcptr;
@@ -1525,14 +1520,14 @@ static void send_filter_frame(struct DEVICE *dev, int mc_cnt)
1525 *suptr++ = 0xffff; 1520 *suptr++ = 0xffff;
1526 1521
1527 /* fit the multicast address */ 1522 /* fit the multicast address */
1528 for (mcptr = dev->mc_list, i = 0; i < mc_cnt; i++, mcptr = mcptr->next) { 1523 netdev_for_each_mc_addr(mcptr, dev) {
1529 addrptr = (u16 *) mcptr->dmi_addr; 1524 addrptr = (u16 *) mcptr->dmi_addr;
1530 *suptr++ = addrptr[0]; 1525 *suptr++ = addrptr[0];
1531 *suptr++ = addrptr[1]; 1526 *suptr++ = addrptr[1];
1532 *suptr++ = addrptr[2]; 1527 *suptr++ = addrptr[2];
1533 } 1528 }
1534 1529
1535 for (; i<14; i++) { 1530 for (i = netdev_mc_count(dev); i < 14; i++) {
1536 *suptr++ = 0xffff; 1531 *suptr++ = 0xffff;
1537 *suptr++ = 0xffff; 1532 *suptr++ = 0xffff;
1538 *suptr++ = 0xffff; 1533 *suptr++ = 0xffff;
@@ -1646,7 +1641,7 @@ static u8 dmfe_sense_speed(struct dmfe_board_info * db)
1646 else /* DM9102/DM9102A */ 1641 else /* DM9102/DM9102A */
1647 phy_mode = phy_read(db->ioaddr, 1642 phy_mode = phy_read(db->ioaddr,
1648 db->phy_addr, 17, db->chip_id) & 0xf000; 1643 db->phy_addr, 17, db->chip_id) & 0xf000;
1649 /* printk(DRV_NAME ": Phy_mode %x ",phy_mode); */ 1644 pr_debug("Phy_mode %x\n", phy_mode);
1650 switch (phy_mode) { 1645 switch (phy_mode) {
1651 case 0x1000: db->op_mode = DMFE_10MHF; break; 1646 case 0x1000: db->op_mode = DMFE_10MHF; break;
1652 case 0x2000: db->op_mode = DMFE_10MFD; break; 1647 case 0x2000: db->op_mode = DMFE_10MFD; break;
@@ -2089,7 +2084,7 @@ static void dmfe_HPNA_remote_cmd_chk(struct dmfe_board_info * db)
2089 2084
2090 2085
2091 2086
2092static struct pci_device_id dmfe_pci_tbl[] = { 2087static DEFINE_PCI_DEVICE_TABLE(dmfe_pci_tbl) = {
2093 { 0x1282, 0x9132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9132_ID }, 2088 { 0x1282, 0x9132, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9132_ID },
2094 { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9102_ID }, 2089 { 0x1282, 0x9102, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9102_ID },
2095 { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9100_ID }, 2090 { 0x1282, 0x9100, PCI_ANY_ID, PCI_ANY_ID, 0, 0, PCI_DM9100_ID },