773 |
773 |
774 |
774 |
775 static void rtl8139_chip_reset (void *ioaddr) |
775 static void rtl8139_chip_reset (void *ioaddr) |
776 { |
776 { |
777 int i; |
777 int i; |
778 int succ = 0 ; |
778 #ifdef ECAT_DEBUG |
|
779 int succ = 0; |
|
780 #endif |
779 /* Soft reset the chip. */ |
781 /* Soft reset the chip. */ |
780 RTL_W8 (ChipCmd, CmdReset); |
782 RTL_W8 (ChipCmd, CmdReset); |
781 |
783 |
782 /* Check that the chip has finished the reset. */ |
784 /* Check that the chip has finished the reset. */ |
783 for (i = 1000; i > 0; i--) { |
785 for (i = 1000; i > 0; i--) { |
784 barrier(); |
786 barrier(); |
785 if ((RTL_R8 (ChipCmd) & CmdReset) == 0) { |
787 if ((RTL_R8 (ChipCmd) & CmdReset) == 0) { |
|
788 #ifdef ECAT_DEBUG |
786 succ = 1; |
789 succ = 1; |
|
790 #endif |
787 break; |
791 break; |
788 } |
792 } |
789 udelay (10); |
793 udelay (10); |
790 } |
794 } |
|
795 #ifdef ECAT_DEBUG |
791 EC_DBG("rtl8139 chipreset"); |
796 EC_DBG("rtl8139 chipreset"); |
792 if(succ == 0) |
797 if(succ == 0) |
793 EC_DBG("failed"); |
798 EC_DBG("failed"); |
794 else |
799 else |
795 EC_DBG("success at count %d",i); |
800 EC_DBG("success at count %d",i); |
796 |
801 #endif |
797 } |
802 } |
798 |
803 |
799 |
804 |
800 static int __devinit rtl8139_init_board (struct pci_dev *pdev, |
805 static int __devinit rtl8139_init_board (struct pci_dev *pdev, |
801 struct net_device **dev_out) |
806 struct net_device **dev_out) |
1377 int retval; |
1382 int retval; |
1378 #ifdef RTL8139_DEBUG |
1383 #ifdef RTL8139_DEBUG |
1379 void *ioaddr = tp->mmio_addr; |
1384 void *ioaddr = tp->mmio_addr; |
1380 #endif |
1385 #endif |
1381 |
1386 |
|
1387 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
|
1388 |
|
1389 #ifdef ECAT_DEBUG |
1382 EC_DBG(KERN_DEBUG "%s: open\n", dev->name); |
1390 EC_DBG(KERN_DEBUG "%s: open\n", dev->name); |
1383 |
1391 #endif |
1384 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
|
1385 |
1392 |
1386 if (dev != rtl_ecat_dev.dev) |
1393 if (dev != rtl_ecat_dev.dev) |
1387 { |
1394 { |
1388 retval = request_irq(dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev); |
1395 retval = request_irq(dev->irq, rtl8139_interrupt, SA_SHIRQ, dev->name, dev); |
1389 if (retval) |
1396 if (retval) |
1469 " auto-negotiated partner ability %4.4x.\n", |
1478 " auto-negotiated partner ability %4.4x.\n", |
1470 dev->name, mii_lpa == 0 ? "" : |
1479 dev->name, mii_lpa == 0 ? "" : |
1471 (mii_lpa & 0x0180) ? "100mbps " : "10mbps ", |
1480 (mii_lpa & 0x0180) ? "100mbps " : "10mbps ", |
1472 tp->mii.full_duplex ? "full" : "half", mii_lpa); |
1481 tp->mii.full_duplex ? "full" : "half", mii_lpa); |
1473 } |
1482 } |
|
1483 |
|
1484 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
|
1485 |
|
1486 #ifdef ECAT_DEBUG |
1474 EC_DBG(KERN_DEBUG "rtl_check_media done.\n"); |
1487 EC_DBG(KERN_DEBUG "rtl_check_media done.\n"); |
|
1488 #endif |
|
1489 |
|
1490 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
1475 } |
1491 } |
1476 |
1492 |
1477 /* Start the hardware at open or resume. */ |
1493 /* Start the hardware at open or resume. */ |
1478 static void rtl8139_hw_start (struct net_device *dev) |
1494 static void rtl8139_hw_start (struct net_device *dev) |
1479 { |
1495 { |
1480 struct rtl8139_private *tp = dev->priv; |
1496 struct rtl8139_private *tp = dev->priv; |
1481 void *ioaddr = tp->mmio_addr; |
1497 void *ioaddr = tp->mmio_addr; |
1482 u32 i; |
1498 u32 i; |
1483 u8 tmp; |
1499 u8 tmp; |
1484 |
1500 |
|
1501 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
|
1502 |
|
1503 #ifdef ECAT_DEBUG |
1485 EC_DBG(KERN_DEBUG "%s: rtl8139_hw_start\n", dev->name); |
1504 EC_DBG(KERN_DEBUG "%s: rtl8139_hw_start\n", dev->name); |
|
1505 #endif |
|
1506 |
|
1507 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
1486 |
1508 |
1487 /* Bring old chips out of low-power mode. */ |
1509 /* Bring old chips out of low-power mode. */ |
1488 if (rtl_chip_info[tp->chipset].flags & HasHltClk) |
1510 if (rtl_chip_info[tp->chipset].flags & HasHltClk) |
1489 RTL_W8 (HltClk, 'R'); |
1511 RTL_W8 (HltClk, 'R'); |
1490 |
1512 |
1551 else |
1573 else |
1552 { |
1574 { |
1553 RTL_W16 (IntrMask, 0x0000); |
1575 RTL_W16 (IntrMask, 0x0000); |
1554 } |
1576 } |
1555 |
1577 |
|
1578 #ifdef ECAT_DEBUG |
|
1579 EC_DBG(KERN_DEBUG "%s: rtl8139_hw_start finished.\n", dev->name); |
|
1580 #endif |
|
1581 |
1556 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
1582 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
1557 |
|
1558 EC_DBG(KERN_DEBUG "%s: rtl8139_hw_start finished.\n", dev->name); |
|
1559 } |
1583 } |
1560 |
1584 |
1561 |
1585 |
1562 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */ |
1586 /* Initialize the Rx and Tx rings, along with various 'dev' bits. */ |
1563 static void rtl8139_init_ring (struct net_device *dev) |
1587 static void rtl8139_init_ring (struct net_device *dev) |
1719 { |
1743 { |
1720 struct net_device *dev = data; |
1744 struct net_device *dev = data; |
1721 struct rtl8139_private *tp = dev->priv; |
1745 struct rtl8139_private *tp = dev->priv; |
1722 unsigned long timeout; |
1746 unsigned long timeout; |
1723 |
1747 |
1724 EC_DBG(KERN_DEBUG "%s: thread\n", dev->name); |
|
1725 |
|
1726 daemonize (); |
1748 daemonize (); |
1727 reparent_to_init(); |
1749 reparent_to_init(); |
1728 spin_lock_irq(¤t->sigmask_lock); |
1750 spin_lock_irq(¤t->sigmask_lock); |
1729 sigemptyset(¤t->blocked); |
1751 sigemptyset(¤t->blocked); |
1730 recalc_sigpending(current); |
1752 recalc_sigpending(current); |
1731 spin_unlock_irq(¤t->sigmask_lock); |
1753 spin_unlock_irq(¤t->sigmask_lock); |
1732 |
1754 |
1733 strncpy (current->comm, dev->name, sizeof(current->comm) - 1); |
1755 strncpy (current->comm, dev->name, sizeof(current->comm) - 1); |
1734 current->comm[sizeof(current->comm) - 1] = '\0'; |
1756 current->comm[sizeof(current->comm) - 1] = '\0'; |
1735 |
1757 |
1736 EC_DBG(KERN_DEBUG "%s: thread entering loop...\n", dev->name); |
|
1737 |
|
1738 while (1) { |
1758 while (1) { |
1739 timeout = next_tick; |
1759 timeout = next_tick; |
1740 do { |
1760 do { |
1741 timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout); |
1761 timeout = interruptible_sleep_on_timeout (&tp->thr_wait, timeout); |
1742 } while (!signal_pending (current) && (timeout > 0)); |
1762 } while (!signal_pending (current) && (timeout > 0)); |
1749 |
1769 |
1750 if (tp->time_to_die) |
1770 if (tp->time_to_die) |
1751 break; |
1771 break; |
1752 |
1772 |
1753 rtnl_lock (); |
1773 rtnl_lock (); |
1754 EC_DBG(KERN_DEBUG "%s: thread iter\n", dev->name); |
|
1755 rtl8139_thread_iter (dev, tp, tp->mmio_addr); |
1774 rtl8139_thread_iter (dev, tp, tp->mmio_addr); |
1756 EC_DBG(KERN_DEBUG "%s: thread iter finished.\n", dev->name); |
|
1757 rtnl_unlock (); |
1775 rtnl_unlock (); |
1758 } |
1776 } |
1759 |
1777 |
1760 EC_DBG(KERN_DEBUG "%s: thread exiting...\n", dev->name); |
|
1761 |
|
1762 complete_and_exit (&tp->thr_exited, 0); |
1778 complete_and_exit (&tp->thr_exited, 0); |
1763 |
|
1764 EC_DBG(KERN_DEBUG "%s: thread exit.\n", dev->name); |
|
1765 } |
1779 } |
1766 |
1780 |
1767 |
1781 |
1768 static void rtl8139_tx_clear (struct rtl8139_private *tp) |
1782 static void rtl8139_tx_clear (struct rtl8139_private *tp) |
1769 { |
1783 { |
1780 void *ioaddr = tp->mmio_addr; |
1794 void *ioaddr = tp->mmio_addr; |
1781 int i; |
1795 int i; |
1782 u8 tmp8; |
1796 u8 tmp8; |
1783 unsigned long flags; |
1797 unsigned long flags; |
1784 |
1798 |
1785 EC_DBG(KERN_DEBUG "%s: tx_timeout\n", dev->name); |
|
1786 |
|
1787 DPRINTK ("%s: Transmit timeout, status %2.2x %4.4x " |
1799 DPRINTK ("%s: Transmit timeout, status %2.2x %4.4x " |
1788 "media %2.2x.\n", dev->name, |
1800 "media %2.2x.\n", dev->name, |
1789 RTL_R8 (ChipCmd), |
1801 RTL_R8 (ChipCmd), |
1790 RTL_R16 (IntrStatus), |
1802 RTL_R16 (IntrStatus), |
1791 RTL_R8 (MediaStatus)); |
1803 RTL_R8 (MediaStatus)); |
1792 |
1804 |
1793 tp->xstats.tx_timeouts++; |
1805 tp->xstats.tx_timeouts++; |
1794 |
1806 |
1795 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
1807 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
|
1808 |
|
1809 EC_DBG(KERN_DEBUG "%s: tx_timeout\n", dev->name); |
1796 |
1810 |
1797 if (dev == rtl_ecat_dev.dev) |
1811 if (dev == rtl_ecat_dev.dev) |
1798 { |
1812 { |
1799 if (rtl_ecat_dev.state != ECAT_DS_SENT) |
1813 if (rtl_ecat_dev.state != ECAT_DS_SENT) |
1800 { |
1814 { |
1835 |
1849 |
1836 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
1850 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
1837 |
1851 |
1838 if (dev != rtl_ecat_dev.dev) netif_wake_queue (dev); |
1852 if (dev != rtl_ecat_dev.dev) netif_wake_queue (dev); |
1839 |
1853 |
|
1854 EC_DBG(KERN_DEBUG "%s: tx_timeout finished.\n", dev->name); |
|
1855 |
1840 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
1856 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
1841 |
|
1842 EC_DBG(KERN_DEBUG "%s: tx_timeout finished.\n", dev->name); |
|
1843 } |
1857 } |
1844 |
1858 |
1845 static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev) |
1859 static int rtl8139_start_xmit (struct sk_buff *skb, struct net_device *dev) |
1846 { |
1860 { |
1847 struct rtl8139_private *tp = dev->priv; |
1861 struct rtl8139_private *tp = dev->priv; |
2468 RTL_W8 (Cfg9346, Cfg9346_Unlock); |
2482 RTL_W8 (Cfg9346, Cfg9346_Unlock); |
2469 |
2483 |
2470 if (rtl_chip_info[tp->chipset].flags & HasHltClk) |
2484 if (rtl_chip_info[tp->chipset].flags & HasHltClk) |
2471 RTL_W8 (HltClk, 'H'); /* 'R' would leave the clock running. */ |
2485 RTL_W8 (HltClk, 'H'); /* 'R' would leave the clock running. */ |
2472 |
2486 |
2473 EC_DBG ("rtl8139: closing done\n"); |
|
2474 |
|
2475 return 0; |
2487 return 0; |
2476 } |
2488 } |
2477 |
2489 |
2478 |
2490 |
2479 /* Get the ethtool Wake-on-LAN settings. Assumes that wol points to |
2491 /* Get the ethtool Wake-on-LAN settings. Assumes that wol points to |
2783 static struct net_device_stats *rtl8139_get_stats (struct net_device *dev) |
2795 static struct net_device_stats *rtl8139_get_stats (struct net_device *dev) |
2784 { |
2796 { |
2785 struct rtl8139_private *tp = dev->priv; |
2797 struct rtl8139_private *tp = dev->priv; |
2786 void *ioaddr = tp->mmio_addr; |
2798 void *ioaddr = tp->mmio_addr; |
2787 unsigned long flags; |
2799 unsigned long flags; |
2788 |
|
2789 EC_DBG("%s: rtl8139 GETSTATS called...",dev->name); |
|
2790 |
2800 |
2791 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
2801 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
2792 |
2802 |
2793 if (dev == rtl_ecat_dev.dev || netif_running(dev)) |
2803 if (dev == rtl_ecat_dev.dev || netif_running(dev)) |
2794 { |
2804 { |
2940 |
2950 |
2941 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
2951 /* EtherCAT >>>>>>>>>>>>>>>>>>>>>>>>>>>>*/ |
2942 |
2952 |
2943 EtherCAT_device_init(&rtl_ecat_dev); |
2953 EtherCAT_device_init(&rtl_ecat_dev); |
2944 |
2954 |
2945 printk(KERN_DEBUG "Driver rtl_ecat_dev has address %X.\n", |
|
2946 (unsigned) &rtl_ecat_dev); |
|
2947 |
|
2948 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
2955 /* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<*/ |
2949 |
2956 |
2950 return pci_module_init (&rtl8139_pci_driver); |
2957 return pci_module_init (&rtl8139_pci_driver); |
2951 } |
2958 } |
2952 |
2959 |