| .. | .. |
|---|
| 1 | +// SPDX-License-Identifier: GPL-2.0-only |
|---|
| 1 | 2 | /* |
|---|
| 2 | 3 | * Copyright (c) 1997-2000 LAN Media Corporation (LMC) |
|---|
| 3 | 4 | * All rights reserved. www.lanmedia.com |
|---|
| .. | .. |
|---|
| 13 | 14 | * David Boggs |
|---|
| 14 | 15 | * Ron Crane |
|---|
| 15 | 16 | * Alan Cox |
|---|
| 16 | | - * |
|---|
| 17 | | - * This software may be used and distributed according to the terms |
|---|
| 18 | | - * of the GNU General Public License version 2, incorporated herein by reference. |
|---|
| 19 | 17 | * |
|---|
| 20 | 18 | * Driver for the LanMedia LMC5200, LMC5245, LMC1000, LMC1200 cards. |
|---|
| 21 | 19 | * |
|---|
| .. | .. |
|---|
| 34 | 32 | * we still have link, and that the timing source is what we expected |
|---|
| 35 | 33 | * it to be. If link is lost, the interface is marked down, and |
|---|
| 36 | 34 | * we no longer can transmit. |
|---|
| 37 | | - * |
|---|
| 38 | 35 | */ |
|---|
| 39 | 36 | |
|---|
| 40 | 37 | #include <linux/kernel.h> |
|---|
| .. | .. |
|---|
| 102 | 99 | static void lmc_watchdog(struct timer_list *t); |
|---|
| 103 | 100 | static void lmc_reset(lmc_softc_t * const sc); |
|---|
| 104 | 101 | static void lmc_dec_reset(lmc_softc_t * const sc); |
|---|
| 105 | | -static void lmc_driver_timeout(struct net_device *dev); |
|---|
| 102 | +static void lmc_driver_timeout(struct net_device *dev, unsigned int txqueue); |
|---|
| 106 | 103 | |
|---|
| 107 | 104 | /* |
|---|
| 108 | 105 | * linux reserves 16 device specific IOCTLs. We call them |
|---|
| .. | .. |
|---|
| 115 | 112 | int ret = -EOPNOTSUPP; |
|---|
| 116 | 113 | u16 regVal; |
|---|
| 117 | 114 | unsigned long flags; |
|---|
| 118 | | - |
|---|
| 119 | | - lmc_trace(dev, "lmc_ioctl in"); |
|---|
| 120 | 115 | |
|---|
| 121 | 116 | /* |
|---|
| 122 | 117 | * Most functions mess with the structure |
|---|
| .. | .. |
|---|
| 622 | 617 | break; |
|---|
| 623 | 618 | } |
|---|
| 624 | 619 | |
|---|
| 625 | | - lmc_trace(dev, "lmc_ioctl out"); |
|---|
| 626 | | - |
|---|
| 627 | 620 | return ret; |
|---|
| 628 | 621 | } |
|---|
| 629 | 622 | |
|---|
| .. | .. |
|---|
| 636 | 629 | int link_status; |
|---|
| 637 | 630 | u32 ticks; |
|---|
| 638 | 631 | unsigned long flags; |
|---|
| 639 | | - |
|---|
| 640 | | - lmc_trace(dev, "lmc_watchdog in"); |
|---|
| 641 | 632 | |
|---|
| 642 | 633 | spin_lock_irqsave(&sc->lmc_lock, flags); |
|---|
| 643 | 634 | |
|---|
| .. | .. |
|---|
| 785 | 776 | add_timer (&sc->timer); |
|---|
| 786 | 777 | |
|---|
| 787 | 778 | spin_unlock_irqrestore(&sc->lmc_lock, flags); |
|---|
| 788 | | - |
|---|
| 789 | | - lmc_trace(dev, "lmc_watchdog out"); |
|---|
| 790 | | - |
|---|
| 791 | 779 | } |
|---|
| 792 | 780 | |
|---|
| 793 | 781 | static int lmc_attach(struct net_device *dev, unsigned short encoding, |
|---|
| .. | .. |
|---|
| 815 | 803 | u16 AdapModelNum; |
|---|
| 816 | 804 | int err; |
|---|
| 817 | 805 | static int cards_found; |
|---|
| 818 | | - |
|---|
| 819 | | - /* lmc_trace(dev, "lmc_init_one in"); */ |
|---|
| 820 | 806 | |
|---|
| 821 | 807 | err = pcim_enable_device(pdev); |
|---|
| 822 | 808 | if (err) { |
|---|
| .. | .. |
|---|
| 960 | 946 | sc->lmc_ok = 0; |
|---|
| 961 | 947 | sc->last_link_status = 0; |
|---|
| 962 | 948 | |
|---|
| 963 | | - lmc_trace(dev, "lmc_init_one out"); |
|---|
| 964 | 949 | return 0; |
|---|
| 965 | 950 | } |
|---|
| 966 | 951 | |
|---|
| .. | .. |
|---|
| 986 | 971 | lmc_softc_t *sc = dev_to_sc(dev); |
|---|
| 987 | 972 | int err; |
|---|
| 988 | 973 | |
|---|
| 989 | | - lmc_trace(dev, "lmc_open in"); |
|---|
| 990 | | - |
|---|
| 991 | 974 | lmc_led_on(sc, LMC_DS3_LED0); |
|---|
| 992 | 975 | |
|---|
| 993 | 976 | lmc_dec_reset(sc); |
|---|
| .. | .. |
|---|
| 997 | 980 | LMC_EVENT_LOG(LMC_EVENT_RESET2, lmc_mii_readreg(sc, 0, 16), |
|---|
| 998 | 981 | lmc_mii_readreg(sc, 0, 17)); |
|---|
| 999 | 982 | |
|---|
| 1000 | | - if (sc->lmc_ok){ |
|---|
| 1001 | | - lmc_trace(dev, "lmc_open lmc_ok out"); |
|---|
| 983 | + if (sc->lmc_ok) |
|---|
| 1002 | 984 | return 0; |
|---|
| 1003 | | - } |
|---|
| 1004 | 985 | |
|---|
| 1005 | 986 | lmc_softreset (sc); |
|---|
| 1006 | 987 | |
|---|
| 1007 | 988 | /* Since we have to use PCI bus, this should work on x86,alpha,ppc */ |
|---|
| 1008 | 989 | if (request_irq (dev->irq, lmc_interrupt, IRQF_SHARED, dev->name, dev)){ |
|---|
| 1009 | 990 | printk(KERN_WARNING "%s: could not get irq: %d\n", dev->name, dev->irq); |
|---|
| 1010 | | - lmc_trace(dev, "lmc_open irq failed out"); |
|---|
| 1011 | 991 | return -EAGAIN; |
|---|
| 1012 | 992 | } |
|---|
| 1013 | 993 | sc->got_irq = 1; |
|---|
| .. | .. |
|---|
| 1083 | 1063 | sc->timer.expires = jiffies + HZ; |
|---|
| 1084 | 1064 | add_timer (&sc->timer); |
|---|
| 1085 | 1065 | |
|---|
| 1086 | | - lmc_trace(dev, "lmc_open out"); |
|---|
| 1087 | | - |
|---|
| 1088 | 1066 | return 0; |
|---|
| 1089 | 1067 | } |
|---|
| 1090 | 1068 | |
|---|
| .. | .. |
|---|
| 1095 | 1073 | static void lmc_running_reset (struct net_device *dev) /*fold00*/ |
|---|
| 1096 | 1074 | { |
|---|
| 1097 | 1075 | lmc_softc_t *sc = dev_to_sc(dev); |
|---|
| 1098 | | - |
|---|
| 1099 | | - lmc_trace(dev, "lmc_running_reset in"); |
|---|
| 1100 | 1076 | |
|---|
| 1101 | 1077 | /* stop interrupts */ |
|---|
| 1102 | 1078 | /* Clear the interrupt mask */ |
|---|
| .. | .. |
|---|
| 1119 | 1095 | |
|---|
| 1120 | 1096 | sc->lmc_cmdmode |= (TULIP_CMD_TXRUN | TULIP_CMD_RXRUN); |
|---|
| 1121 | 1097 | LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode); |
|---|
| 1122 | | - |
|---|
| 1123 | | - lmc_trace(dev, "lmc_runnin_reset_out"); |
|---|
| 1124 | 1098 | } |
|---|
| 1125 | 1099 | |
|---|
| 1126 | 1100 | |
|---|
| .. | .. |
|---|
| 1133 | 1107 | /* not calling release_region() as we should */ |
|---|
| 1134 | 1108 | lmc_softc_t *sc = dev_to_sc(dev); |
|---|
| 1135 | 1109 | |
|---|
| 1136 | | - lmc_trace(dev, "lmc_close in"); |
|---|
| 1137 | | - |
|---|
| 1138 | 1110 | sc->lmc_ok = 0; |
|---|
| 1139 | 1111 | sc->lmc_media->set_link_status (sc, 0); |
|---|
| 1140 | 1112 | del_timer (&sc->timer); |
|---|
| 1141 | 1113 | lmc_proto_close(sc); |
|---|
| 1142 | 1114 | lmc_ifdown (dev); |
|---|
| 1143 | | - |
|---|
| 1144 | | - lmc_trace(dev, "lmc_close out"); |
|---|
| 1145 | 1115 | |
|---|
| 1146 | 1116 | return 0; |
|---|
| 1147 | 1117 | } |
|---|
| .. | .. |
|---|
| 1153 | 1123 | lmc_softc_t *sc = dev_to_sc(dev); |
|---|
| 1154 | 1124 | u32 csr6; |
|---|
| 1155 | 1125 | int i; |
|---|
| 1156 | | - |
|---|
| 1157 | | - lmc_trace(dev, "lmc_ifdown in"); |
|---|
| 1158 | 1126 | |
|---|
| 1159 | 1127 | /* Don't let anything else go on right now */ |
|---|
| 1160 | 1128 | // dev->start = 0; |
|---|
| .. | .. |
|---|
| 1205 | 1173 | netif_wake_queue(dev); |
|---|
| 1206 | 1174 | sc->extra_stats.tx_tbusy0++; |
|---|
| 1207 | 1175 | |
|---|
| 1208 | | - lmc_trace(dev, "lmc_ifdown out"); |
|---|
| 1209 | | - |
|---|
| 1210 | 1176 | return 0; |
|---|
| 1211 | 1177 | } |
|---|
| 1212 | 1178 | |
|---|
| .. | .. |
|---|
| 1224 | 1190 | u32 firstcsr; |
|---|
| 1225 | 1191 | int max_work = LMC_RXDESCS; |
|---|
| 1226 | 1192 | int handled = 0; |
|---|
| 1227 | | - |
|---|
| 1228 | | - lmc_trace(dev, "lmc_interrupt in"); |
|---|
| 1229 | 1193 | |
|---|
| 1230 | 1194 | spin_lock(&sc->lmc_lock); |
|---|
| 1231 | 1195 | |
|---|
| .. | .. |
|---|
| 1269 | 1233 | lmc_running_reset (dev); |
|---|
| 1270 | 1234 | break; |
|---|
| 1271 | 1235 | } |
|---|
| 1272 | | - |
|---|
| 1273 | | - if (csr & TULIP_STS_RXINTR){ |
|---|
| 1274 | | - lmc_trace(dev, "rx interrupt"); |
|---|
| 1236 | + |
|---|
| 1237 | + if (csr & TULIP_STS_RXINTR) |
|---|
| 1275 | 1238 | lmc_rx (dev); |
|---|
| 1276 | | - |
|---|
| 1277 | | - } |
|---|
| 1239 | + |
|---|
| 1278 | 1240 | if (csr & (TULIP_STS_TXINTR | TULIP_STS_TXNOBUF | TULIP_STS_TXSTOPPED)) { |
|---|
| 1279 | 1241 | |
|---|
| 1280 | 1242 | int n_compl = 0 ; |
|---|
| .. | .. |
|---|
| 1322 | 1284 | sc->lmc_device->stats.tx_packets++; |
|---|
| 1323 | 1285 | } |
|---|
| 1324 | 1286 | |
|---|
| 1325 | | - // dev_kfree_skb(sc->lmc_txq[i]); |
|---|
| 1326 | | - dev_kfree_skb_irq(sc->lmc_txq[i]); |
|---|
| 1287 | + dev_consume_skb_irq(sc->lmc_txq[i]); |
|---|
| 1327 | 1288 | sc->lmc_txq[i] = NULL; |
|---|
| 1328 | 1289 | |
|---|
| 1329 | 1290 | badtx++; |
|---|
| .. | .. |
|---|
| 1395 | 1356 | |
|---|
| 1396 | 1357 | spin_unlock(&sc->lmc_lock); |
|---|
| 1397 | 1358 | |
|---|
| 1398 | | - lmc_trace(dev, "lmc_interrupt out"); |
|---|
| 1399 | 1359 | return IRQ_RETVAL(handled); |
|---|
| 1400 | 1360 | } |
|---|
| 1401 | 1361 | |
|---|
| .. | .. |
|---|
| 1406 | 1366 | u32 flag; |
|---|
| 1407 | 1367 | int entry; |
|---|
| 1408 | 1368 | unsigned long flags; |
|---|
| 1409 | | - |
|---|
| 1410 | | - lmc_trace(dev, "lmc_start_xmit in"); |
|---|
| 1411 | 1369 | |
|---|
| 1412 | 1370 | spin_lock_irqsave(&sc->lmc_lock, flags); |
|---|
| 1413 | 1371 | |
|---|
| .. | .. |
|---|
| 1483 | 1441 | |
|---|
| 1484 | 1442 | spin_unlock_irqrestore(&sc->lmc_lock, flags); |
|---|
| 1485 | 1443 | |
|---|
| 1486 | | - lmc_trace(dev, "lmc_start_xmit_out"); |
|---|
| 1487 | 1444 | return NETDEV_TX_OK; |
|---|
| 1488 | 1445 | } |
|---|
| 1489 | 1446 | |
|---|
| .. | .. |
|---|
| 1498 | 1455 | long stat; |
|---|
| 1499 | 1456 | struct sk_buff *skb, *nsb; |
|---|
| 1500 | 1457 | u16 len; |
|---|
| 1501 | | - |
|---|
| 1502 | | - lmc_trace(dev, "lmc_rx in"); |
|---|
| 1503 | 1458 | |
|---|
| 1504 | 1459 | lmc_led_on(sc, LMC_DS3_LED3); |
|---|
| 1505 | 1460 | |
|---|
| .. | .. |
|---|
| 1679 | 1634 | lmc_led_off(sc, LMC_DS3_LED3); |
|---|
| 1680 | 1635 | |
|---|
| 1681 | 1636 | skip_out_of_mem: |
|---|
| 1682 | | - |
|---|
| 1683 | | - lmc_trace(dev, "lmc_rx out"); |
|---|
| 1684 | | - |
|---|
| 1685 | 1637 | return 0; |
|---|
| 1686 | 1638 | } |
|---|
| 1687 | 1639 | |
|---|
| .. | .. |
|---|
| 1690 | 1642 | lmc_softc_t *sc = dev_to_sc(dev); |
|---|
| 1691 | 1643 | unsigned long flags; |
|---|
| 1692 | 1644 | |
|---|
| 1693 | | - lmc_trace(dev, "lmc_get_stats in"); |
|---|
| 1694 | | - |
|---|
| 1695 | 1645 | spin_lock_irqsave(&sc->lmc_lock, flags); |
|---|
| 1696 | 1646 | |
|---|
| 1697 | 1647 | sc->lmc_device->stats.rx_missed_errors += LMC_CSR_READ(sc, csr_missed_frames) & 0xffff; |
|---|
| 1698 | 1648 | |
|---|
| 1699 | 1649 | spin_unlock_irqrestore(&sc->lmc_lock, flags); |
|---|
| 1700 | | - |
|---|
| 1701 | | - lmc_trace(dev, "lmc_get_stats out"); |
|---|
| 1702 | 1650 | |
|---|
| 1703 | 1651 | return &sc->lmc_device->stats; |
|---|
| 1704 | 1652 | } |
|---|
| .. | .. |
|---|
| 1718 | 1666 | int command = (0xf6 << 10) | (devaddr << 5) | regno; |
|---|
| 1719 | 1667 | int retval = 0; |
|---|
| 1720 | 1668 | |
|---|
| 1721 | | - lmc_trace(sc->lmc_device, "lmc_mii_readreg in"); |
|---|
| 1722 | | - |
|---|
| 1723 | 1669 | LMC_MII_SYNC (sc); |
|---|
| 1724 | | - |
|---|
| 1725 | | - lmc_trace(sc->lmc_device, "lmc_mii_readreg: done sync"); |
|---|
| 1726 | 1670 | |
|---|
| 1727 | 1671 | for (i = 15; i >= 0; i--) |
|---|
| 1728 | 1672 | { |
|---|
| .. | .. |
|---|
| 1736 | 1680 | /* __SLOW_DOWN_IO; */ |
|---|
| 1737 | 1681 | } |
|---|
| 1738 | 1682 | |
|---|
| 1739 | | - lmc_trace(sc->lmc_device, "lmc_mii_readreg: done1"); |
|---|
| 1740 | | - |
|---|
| 1741 | 1683 | for (i = 19; i > 0; i--) |
|---|
| 1742 | 1684 | { |
|---|
| 1743 | 1685 | LMC_CSR_WRITE (sc, csr_9, 0x40000); |
|---|
| .. | .. |
|---|
| 1749 | 1691 | /* __SLOW_DOWN_IO; */ |
|---|
| 1750 | 1692 | } |
|---|
| 1751 | 1693 | |
|---|
| 1752 | | - lmc_trace(sc->lmc_device, "lmc_mii_readreg out"); |
|---|
| 1753 | | - |
|---|
| 1754 | 1694 | return (retval >> 1) & 0xffff; |
|---|
| 1755 | 1695 | } |
|---|
| 1756 | 1696 | |
|---|
| .. | .. |
|---|
| 1758 | 1698 | { |
|---|
| 1759 | 1699 | int i = 32; |
|---|
| 1760 | 1700 | int command = (0x5002 << 16) | (devaddr << 23) | (regno << 18) | data; |
|---|
| 1761 | | - |
|---|
| 1762 | | - lmc_trace(sc->lmc_device, "lmc_mii_writereg in"); |
|---|
| 1763 | 1701 | |
|---|
| 1764 | 1702 | LMC_MII_SYNC (sc); |
|---|
| 1765 | 1703 | |
|---|
| .. | .. |
|---|
| 1793 | 1731 | /* __SLOW_DOWN_IO; */ |
|---|
| 1794 | 1732 | i--; |
|---|
| 1795 | 1733 | } |
|---|
| 1796 | | - |
|---|
| 1797 | | - lmc_trace(sc->lmc_device, "lmc_mii_writereg out"); |
|---|
| 1798 | 1734 | } |
|---|
| 1799 | 1735 | |
|---|
| 1800 | 1736 | static void lmc_softreset (lmc_softc_t * const sc) /*fold00*/ |
|---|
| 1801 | 1737 | { |
|---|
| 1802 | 1738 | int i; |
|---|
| 1803 | | - |
|---|
| 1804 | | - lmc_trace(sc->lmc_device, "lmc_softreset in"); |
|---|
| 1805 | 1739 | |
|---|
| 1806 | 1740 | /* Initialize the receive rings and buffers. */ |
|---|
| 1807 | 1741 | sc->lmc_txfull = 0; |
|---|
| .. | .. |
|---|
| 1877 | 1811 | } |
|---|
| 1878 | 1812 | sc->lmc_txring[i - 1].buffer2 = virt_to_bus (&sc->lmc_txring[0]); |
|---|
| 1879 | 1813 | LMC_CSR_WRITE (sc, csr_txlist, virt_to_bus (sc->lmc_txring)); |
|---|
| 1880 | | - |
|---|
| 1881 | | - lmc_trace(sc->lmc_device, "lmc_softreset out"); |
|---|
| 1882 | 1814 | } |
|---|
| 1883 | 1815 | |
|---|
| 1884 | 1816 | void lmc_gpio_mkinput(lmc_softc_t * const sc, u32 bits) /*fold00*/ |
|---|
| 1885 | 1817 | { |
|---|
| 1886 | | - lmc_trace(sc->lmc_device, "lmc_gpio_mkinput in"); |
|---|
| 1887 | 1818 | sc->lmc_gpio_io &= ~bits; |
|---|
| 1888 | 1819 | LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io)); |
|---|
| 1889 | | - lmc_trace(sc->lmc_device, "lmc_gpio_mkinput out"); |
|---|
| 1890 | 1820 | } |
|---|
| 1891 | 1821 | |
|---|
| 1892 | 1822 | void lmc_gpio_mkoutput(lmc_softc_t * const sc, u32 bits) /*fold00*/ |
|---|
| 1893 | 1823 | { |
|---|
| 1894 | | - lmc_trace(sc->lmc_device, "lmc_gpio_mkoutput in"); |
|---|
| 1895 | 1824 | sc->lmc_gpio_io |= bits; |
|---|
| 1896 | 1825 | LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io)); |
|---|
| 1897 | | - lmc_trace(sc->lmc_device, "lmc_gpio_mkoutput out"); |
|---|
| 1898 | 1826 | } |
|---|
| 1899 | 1827 | |
|---|
| 1900 | 1828 | void lmc_led_on(lmc_softc_t * const sc, u32 led) /*fold00*/ |
|---|
| 1901 | 1829 | { |
|---|
| 1902 | | - lmc_trace(sc->lmc_device, "lmc_led_on in"); |
|---|
| 1903 | | - if((~sc->lmc_miireg16) & led){ /* Already on! */ |
|---|
| 1904 | | - lmc_trace(sc->lmc_device, "lmc_led_on aon out"); |
|---|
| 1830 | + if ((~sc->lmc_miireg16) & led) /* Already on! */ |
|---|
| 1905 | 1831 | return; |
|---|
| 1906 | | - } |
|---|
| 1907 | | - |
|---|
| 1832 | + |
|---|
| 1908 | 1833 | sc->lmc_miireg16 &= ~led; |
|---|
| 1909 | 1834 | lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); |
|---|
| 1910 | | - lmc_trace(sc->lmc_device, "lmc_led_on out"); |
|---|
| 1911 | 1835 | } |
|---|
| 1912 | 1836 | |
|---|
| 1913 | 1837 | void lmc_led_off(lmc_softc_t * const sc, u32 led) /*fold00*/ |
|---|
| 1914 | 1838 | { |
|---|
| 1915 | | - lmc_trace(sc->lmc_device, "lmc_led_off in"); |
|---|
| 1916 | | - if(sc->lmc_miireg16 & led){ /* Already set don't do anything */ |
|---|
| 1917 | | - lmc_trace(sc->lmc_device, "lmc_led_off aoff out"); |
|---|
| 1839 | + if (sc->lmc_miireg16 & led) /* Already set don't do anything */ |
|---|
| 1918 | 1840 | return; |
|---|
| 1919 | | - } |
|---|
| 1920 | | - |
|---|
| 1841 | + |
|---|
| 1921 | 1842 | sc->lmc_miireg16 |= led; |
|---|
| 1922 | 1843 | lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); |
|---|
| 1923 | | - lmc_trace(sc->lmc_device, "lmc_led_off out"); |
|---|
| 1924 | 1844 | } |
|---|
| 1925 | 1845 | |
|---|
| 1926 | 1846 | static void lmc_reset(lmc_softc_t * const sc) /*fold00*/ |
|---|
| 1927 | 1847 | { |
|---|
| 1928 | | - lmc_trace(sc->lmc_device, "lmc_reset in"); |
|---|
| 1929 | 1848 | sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET; |
|---|
| 1930 | 1849 | lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); |
|---|
| 1931 | 1850 | |
|---|
| .. | .. |
|---|
| 1961 | 1880 | sc->lmc_media->init(sc); |
|---|
| 1962 | 1881 | |
|---|
| 1963 | 1882 | sc->extra_stats.resetCount++; |
|---|
| 1964 | | - lmc_trace(sc->lmc_device, "lmc_reset out"); |
|---|
| 1965 | 1883 | } |
|---|
| 1966 | 1884 | |
|---|
| 1967 | 1885 | static void lmc_dec_reset(lmc_softc_t * const sc) /*fold00*/ |
|---|
| 1968 | 1886 | { |
|---|
| 1969 | 1887 | u32 val; |
|---|
| 1970 | | - lmc_trace(sc->lmc_device, "lmc_dec_reset in"); |
|---|
| 1971 | 1888 | |
|---|
| 1972 | 1889 | /* |
|---|
| 1973 | 1890 | * disable all interrupts |
|---|
| .. | .. |
|---|
| 2023 | 1940 | val = LMC_CSR_READ(sc, csr_sia_general); |
|---|
| 2024 | 1941 | val |= (TULIP_WATCHDOG_TXDISABLE | TULIP_WATCHDOG_RXDISABLE); |
|---|
| 2025 | 1942 | LMC_CSR_WRITE(sc, csr_sia_general, val); |
|---|
| 2026 | | - |
|---|
| 2027 | | - lmc_trace(sc->lmc_device, "lmc_dec_reset out"); |
|---|
| 2028 | 1943 | } |
|---|
| 2029 | 1944 | |
|---|
| 2030 | 1945 | static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, /*fold00*/ |
|---|
| 2031 | 1946 | size_t csr_size) |
|---|
| 2032 | 1947 | { |
|---|
| 2033 | | - lmc_trace(sc->lmc_device, "lmc_initcsrs in"); |
|---|
| 2034 | 1948 | sc->lmc_csrs.csr_busmode = csr_base + 0 * csr_size; |
|---|
| 2035 | 1949 | sc->lmc_csrs.csr_txpoll = csr_base + 1 * csr_size; |
|---|
| 2036 | 1950 | sc->lmc_csrs.csr_rxpoll = csr_base + 2 * csr_size; |
|---|
| .. | .. |
|---|
| 2047 | 1961 | sc->lmc_csrs.csr_13 = csr_base + 13 * csr_size; |
|---|
| 2048 | 1962 | sc->lmc_csrs.csr_14 = csr_base + 14 * csr_size; |
|---|
| 2049 | 1963 | sc->lmc_csrs.csr_15 = csr_base + 15 * csr_size; |
|---|
| 2050 | | - lmc_trace(sc->lmc_device, "lmc_initcsrs out"); |
|---|
| 2051 | 1964 | } |
|---|
| 2052 | 1965 | |
|---|
| 2053 | | -static void lmc_driver_timeout(struct net_device *dev) |
|---|
| 1966 | +static void lmc_driver_timeout(struct net_device *dev, unsigned int txqueue) |
|---|
| 2054 | 1967 | { |
|---|
| 2055 | 1968 | lmc_softc_t *sc = dev_to_sc(dev); |
|---|
| 2056 | 1969 | u32 csr6; |
|---|
| 2057 | 1970 | unsigned long flags; |
|---|
| 2058 | | - |
|---|
| 2059 | | - lmc_trace(dev, "lmc_driver_timeout in"); |
|---|
| 2060 | 1971 | |
|---|
| 2061 | 1972 | spin_lock_irqsave(&sc->lmc_lock, flags); |
|---|
| 2062 | 1973 | |
|---|
| .. | .. |
|---|
| 2069 | 1980 | /* |
|---|
| 2070 | 1981 | * Chip seems to have locked up |
|---|
| 2071 | 1982 | * Reset it |
|---|
| 2072 | | - * This whips out all our decriptor |
|---|
| 1983 | + * This whips out all our descriptor |
|---|
| 2073 | 1984 | * table and starts from scartch |
|---|
| 2074 | 1985 | */ |
|---|
| 2075 | 1986 | |
|---|
| .. | .. |
|---|
| 2100 | 2011 | bug_out: |
|---|
| 2101 | 2012 | |
|---|
| 2102 | 2013 | spin_unlock_irqrestore(&sc->lmc_lock, flags); |
|---|
| 2103 | | - |
|---|
| 2104 | | - lmc_trace(dev, "lmc_driver_timeout out"); |
|---|
| 2105 | | - |
|---|
| 2106 | | - |
|---|
| 2107 | 2014 | } |
|---|