drivers/drv_8139too.c
changeset 18 5a42f6d1085c
parent 5 6f2508af550c
equal deleted inserted replaced
17:1b5aea4d5147 18:5a42f6d1085c
   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)
  1442           if (tp->thr_pid < 0)
  1449           if (tp->thr_pid < 0)
  1443             EC_DBG (KERN_WARNING "%s: unable to start kernel thread\n",
  1450             EC_DBG (KERN_WARNING "%s: unable to start kernel thread\n",
  1444                     dev->name);
  1451                     dev->name);
  1445 	}
  1452 	}
  1446 
  1453 
       
  1454 #ifdef ECAT_DEBUG
       
  1455         EC_DBG(KERN_DEBUG "%s: open finished.\n", dev->name);
       
  1456 #endif
       
  1457 
  1447 	/* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  1458 	/* EtherCAT <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<*/
  1448 
       
  1449         EC_DBG(KERN_DEBUG "%s: open finished.\n", dev->name);
       
  1450 
  1459 
  1451 	return 0;
  1460 	return 0;
  1452 }
  1461 }
  1453 
  1462 
  1454 
  1463 
  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(&current->sigmask_lock);
  1750 	spin_lock_irq(&current->sigmask_lock);
  1729 	sigemptyset(&current->blocked);
  1751 	sigemptyset(&current->blocked);
  1730 	recalc_sigpending(current);
  1752 	recalc_sigpending(current);
  1731 	spin_unlock_irq(&current->sigmask_lock);
  1753 	spin_unlock_irq(&current->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