lmc_main.c
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:70k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1.  /*
  2.   * Copyright (c) 1997-2000 LAN Media Corporation (LMC)
  3.   * All rights reserved.  www.lanmedia.com
  4.   *
  5.   * This code is written by:
  6.   * Andrew Stanley-Jones (asj@cban.com)
  7.   * Rob Braun (bbraun@vix.com),
  8.   * Michael Graff (explorer@vix.com) and
  9.   * Matt Thomas (matt@3am-software.com).
  10.   *
  11.   * With Help By:
  12.   * David Boggs
  13.   * Ron Crane
  14.   * Allan Cox
  15.   *
  16.   * This software may be used and distributed according to the terms
  17.   * of the GNU General Public License version 2, incorporated herein by reference.
  18.   *
  19.   * Driver for the LanMedia LMC5200, LMC5245, LMC1000, LMC1200 cards.
  20.   *
  21.   * To control link specific options lmcctl is required.
  22.   * It can be obtained from ftp.lanmedia.com.
  23.   *
  24.   * Linux driver notes:
  25.   * Linux uses the device struct lmc_private to pass private information
  26.   * arround.
  27.   *
  28.   * The initialization portion of this driver (the lmc_reset() and the
  29.   * lmc_dec_reset() functions, as well as the led controls and the
  30.   * lmc_initcsrs() functions.
  31.   *
  32.   * The watchdog function runs every second and checks to see if
  33.   * we still have link, and that the timing source is what we expected
  34.   * it to be.  If link is lost, the interface is marked down, and
  35.   * we no longer can transmit.
  36.   *
  37.   */
  38. /* $Id: lmc_main.c,v 1.36 2000/04/11 05:25:25 asj Exp $ */
  39. #include <linux/version.h>
  40. #include <linux/kernel.h>
  41. #include <linux/sched.h>
  42. #include <linux/string.h>
  43. #include <linux/timer.h>
  44. #include <linux/ptrace.h>
  45. #include <linux/errno.h>
  46. #include <linux/ioport.h>
  47. #include <linux/slab.h>
  48. #include <linux/interrupt.h>
  49. #include <linux/pci.h>
  50. #include <linux/delay.h>
  51. #include <asm/segment.h>
  52. #include <linux/init.h>
  53. #if LINUX_VERSION_CODE < 0x20155
  54. #include <linux/bios32.h>
  55. #endif
  56. #include <linux/in.h>
  57. #include <linux/if_arp.h>
  58. #include <asm/processor.h>             /* Processor type for cache alignment. */
  59. #include <asm/bitops.h>
  60. #include <asm/io.h>
  61. #include <asm/dma.h>
  62. #include <linux/netdevice.h>
  63. #include <linux/etherdevice.h>
  64. #include <linux/skbuff.h>
  65. #include <net/syncppp.h>
  66. #include <linux/inet.h>
  67. #if LINUX_VERSION_CODE >= 0x20200
  68. #include <asm/uaccess.h>
  69. //#include <asm/spinlock.h>
  70. #else /* 2.0 kernel */
  71. #define ARPHRD_HDLC 513
  72. #endif
  73. #include <linux/module.h>
  74. #define DRIVER_MAJOR_VERSION     1
  75. #define DRIVER_MINOR_VERSION    34
  76. #define DRIVER_SUB_VERSION       0
  77. #define DRIVER_VERSION  ((DRIVER_MAJOR_VERSION << 8) + DRIVER_MINOR_VERSION)
  78. #include "lmc_ver.h"
  79. #include "lmc.h"
  80. #include "lmc_var.h"
  81. #include "lmc_ioctl.h"
  82. #include "lmc_debug.h"
  83. #include "lmc_proto.h"
  84. static int Lmc_Count = 0;
  85. static struct net_device *Lmc_root_dev = NULL;
  86. static u8 cards_found = 0;
  87. static int lmc_first_load = 0;
  88. int LMC_PKT_BUF_SZ = 1542;
  89. #ifdef MODULE
  90. static struct pci_device_id lmc_pci_tbl[] __devinitdata = {
  91.     { 0x1011, 0x009, 0x1379, PCI_ANY_ID, 0, 0, 0},
  92.     { 0, }
  93. };
  94. MODULE_DEVICE_TABLE(pci, lmc_pci_tbl);
  95. MODULE_LICENSE("GPL");
  96. #endif
  97. int lmc_probe_fake(struct net_device *dev);
  98. static struct net_device *lmc_probe1(struct net_device *dev, unsigned long ioaddr, unsigned int irq,
  99.  int chip_id, int subdevice, int board_idx);
  100. static int lmc_start_xmit(struct sk_buff *skb, struct net_device *dev);
  101. static int lmc_start_xmit(struct sk_buff *skb, struct net_device *dev);
  102. static int lmc_rx (struct net_device *dev);
  103. static int lmc_open(struct net_device *dev);
  104. static int lmc_close(struct net_device *dev);
  105. static struct net_device_stats *lmc_get_stats(struct net_device *dev);
  106. static void lmc_interrupt(int irq, void *dev_instance, struct pt_regs *regs);
  107. static int lmc_set_config(struct net_device *dev, struct ifmap *map);
  108. static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, size_t csr_size);
  109. static void lmc_softreset(lmc_softc_t * const);
  110. static void lmc_running_reset(struct net_device *dev);
  111. static int lmc_ifdown(struct net_device * const);
  112. static void lmc_watchdog(unsigned long data);
  113. static int lmc_init(struct net_device * const);
  114. static void lmc_reset(lmc_softc_t * const sc);
  115. static void lmc_dec_reset(lmc_softc_t * const sc);
  116. #if LINUX_VERSION_CODE >= 0x20363
  117. static void lmc_driver_timeout(struct net_device *dev);
  118. int lmc_setup(void);
  119. #endif
  120. /*
  121.  * linux reserves 16 device specific IOCTLs.  We call them
  122.  * LMCIOC* to control various bits of our world.
  123.  */
  124. int lmc_ioctl (struct net_device *dev, struct ifreq *ifr, int cmd) /*fold00*/
  125. {
  126.     lmc_softc_t *sc;
  127.     lmc_ctl_t ctl;
  128.     int ret;
  129.     u_int16_t regVal;
  130.     unsigned long flags;
  131.     struct sppp *sp;
  132.     ret = -EOPNOTSUPP;
  133.     sc = dev->priv;
  134.     lmc_trace(dev, "lmc_ioctl in");
  135.     /*
  136.      * Most functions mess with the structure
  137.      * Disable interrupts while we do the polling
  138.      */
  139.     spin_lock_irqsave(&sc->lmc_lock, flags);
  140.     switch (cmd) {
  141.         /*
  142.          * Return current driver state.  Since we keep this up
  143.          * To date internally, just copy this out to the user.
  144.          */
  145.     case LMCIOCGINFO: /*fold01*/
  146.         LMC_COPY_TO_USER(ifr->ifr_data, &sc->ictl, sizeof (lmc_ctl_t));
  147.         ret = 0;
  148.         break;
  149.     case LMCIOCSINFO: /*fold01*/
  150.         sp = &((struct ppp_device *) dev)->sppp;
  151.         if (!suser ()) {
  152.             ret = -EPERM;
  153.             break;
  154.         }
  155.         if(dev->flags & IFF_UP){
  156.             ret = -EBUSY;
  157.             break;
  158.         }
  159.         LMC_COPY_FROM_USER(&ctl, ifr->ifr_data, sizeof (lmc_ctl_t));
  160.         sc->lmc_media->set_status (sc, &ctl);
  161.         if(ctl.crc_length != sc->ictl.crc_length) {
  162.             sc->lmc_media->set_crc_length(sc, ctl.crc_length);
  163.     if (sc->ictl.crc_length == LMC_CTL_CRC_LENGTH_16)
  164. sc->TxDescriptControlInit |=  LMC_TDES_ADD_CRC_DISABLE;
  165.     else
  166. sc->TxDescriptControlInit &= ~LMC_TDES_ADD_CRC_DISABLE;
  167.         }
  168.         if (ctl.keepalive_onoff == LMC_CTL_OFF)
  169.             sp->pp_flags &= ~PP_KEEPALIVE; /* Turn off */
  170.         else
  171.             sp->pp_flags |= PP_KEEPALIVE; /* Turn on */
  172.         ret = 0;
  173.         break;
  174.     case LMCIOCIFTYPE: /*fold01*/
  175.         {
  176.             u_int16_t old_type = sc->if_type;
  177.             u_int16_t new_type;
  178.     if (!suser ()) {
  179. ret = -EPERM;
  180. break;
  181.     }
  182.     LMC_COPY_FROM_USER(&new_type, ifr->ifr_data, sizeof(u_int16_t));
  183.             
  184.     if (new_type == old_type)
  185.     {
  186. ret = 0 ;
  187. break; /* no change */
  188.             }
  189.             
  190.             lmc_proto_close(sc);
  191.             lmc_proto_detach(sc);
  192.             sc->if_type = new_type;
  193. //            lmc_proto_init(sc);
  194.             lmc_proto_attach(sc);
  195.             lmc_proto_open(sc);
  196.     ret = 0 ;
  197.     break ;
  198. }
  199.     case LMCIOCGETXINFO: /*fold01*/
  200.         sc->lmc_xinfo.Magic0 = 0xBEEFCAFE;
  201.         sc->lmc_xinfo.PciCardType = sc->lmc_cardtype;
  202.         sc->lmc_xinfo.PciSlotNumber = 0;
  203.         sc->lmc_xinfo.DriverMajorVersion = DRIVER_MAJOR_VERSION;
  204.         sc->lmc_xinfo.DriverMinorVersion = DRIVER_MINOR_VERSION;
  205.         sc->lmc_xinfo.DriverSubVersion = DRIVER_SUB_VERSION;
  206.         sc->lmc_xinfo.XilinxRevisionNumber =
  207.             lmc_mii_readreg (sc, 0, 3) & 0xf;
  208.         sc->lmc_xinfo.MaxFrameSize = LMC_PKT_BUF_SZ;
  209.         sc->lmc_xinfo.link_status = sc->lmc_media->get_link_status (sc);
  210.         sc->lmc_xinfo.mii_reg16 = lmc_mii_readreg (sc, 0, 16);
  211.         sc->lmc_xinfo.Magic1 = 0xDEADBEEF;
  212.         LMC_COPY_TO_USER(ifr->ifr_data, &sc->lmc_xinfo,
  213.                          sizeof (struct lmc_xinfo));
  214.         ret = 0;
  215.         break;
  216.     case LMCIOCGETLMCSTATS: /*fold01*/
  217.         if (sc->lmc_cardtype == LMC_CARDTYPE_T1){
  218.             lmc_mii_writereg (sc, 0, 17, T1FRAMER_FERR_LSB);
  219.             sc->stats.framingBitErrorCount +=
  220.                 lmc_mii_readreg (sc, 0, 18) & 0xff;
  221.             lmc_mii_writereg (sc, 0, 17, T1FRAMER_FERR_MSB);
  222.             sc->stats.framingBitErrorCount +=
  223.                 (lmc_mii_readreg (sc, 0, 18) & 0xff) << 8;
  224.             lmc_mii_writereg (sc, 0, 17, T1FRAMER_LCV_LSB);
  225.             sc->stats.lineCodeViolationCount +=
  226.                 lmc_mii_readreg (sc, 0, 18) & 0xff;
  227.             lmc_mii_writereg (sc, 0, 17, T1FRAMER_LCV_MSB);
  228.             sc->stats.lineCodeViolationCount +=
  229.                 (lmc_mii_readreg (sc, 0, 18) & 0xff) << 8;
  230.             lmc_mii_writereg (sc, 0, 17, T1FRAMER_AERR);
  231.             regVal = lmc_mii_readreg (sc, 0, 18) & 0xff;
  232.             sc->stats.lossOfFrameCount +=
  233.                 (regVal & T1FRAMER_LOF_MASK) >> 4;
  234.             sc->stats.changeOfFrameAlignmentCount +=
  235.                 (regVal & T1FRAMER_COFA_MASK) >> 2;
  236.             sc->stats.severelyErroredFrameCount +=
  237.                 regVal & T1FRAMER_SEF_MASK;
  238.         }
  239.         LMC_COPY_TO_USER(ifr->ifr_data, &sc->stats,
  240.                          sizeof (struct lmc_statistics));
  241.         ret = 0;
  242.         break;
  243.     case LMCIOCCLEARLMCSTATS: /*fold01*/
  244.         if (!suser ()){
  245.             ret = -EPERM;
  246.             break;
  247.         }
  248.         memset (&sc->stats, 0, sizeof (struct lmc_statistics));
  249.         sc->stats.check = STATCHECK;
  250.         sc->stats.version_size = (DRIVER_VERSION << 16) +
  251.             sizeof (struct lmc_statistics);
  252.         sc->stats.lmc_cardtype = sc->lmc_cardtype;
  253.         ret = 0;
  254.         break;
  255.     case LMCIOCSETCIRCUIT: /*fold01*/
  256.         if (!suser ()){
  257.             ret = -EPERM;
  258.             break;
  259.         }
  260.         if(dev->flags & IFF_UP){
  261.             ret = -EBUSY;
  262.             break;
  263.         }
  264.         LMC_COPY_FROM_USER(&ctl, ifr->ifr_data, sizeof (lmc_ctl_t));
  265.         sc->lmc_media->set_circuit_type(sc, ctl.circuit_type);
  266.         sc->ictl.circuit_type = ctl.circuit_type;
  267.         ret = 0;
  268.         break;
  269.     case LMCIOCRESET: /*fold01*/
  270.         if (!suser ()){
  271.             ret = -EPERM;
  272.             break;
  273.         }
  274.         /* Reset driver and bring back to current state */
  275.         printk (" REG16 before reset +%04xn", lmc_mii_readreg (sc, 0, 16));
  276.         lmc_running_reset (dev);
  277.         printk (" REG16 after reset +%04xn", lmc_mii_readreg (sc, 0, 16));
  278.         LMC_EVENT_LOG(LMC_EVENT_FORCEDRESET, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16));
  279.         ret = 0;
  280.         break;
  281. #ifdef DEBUG
  282.     case LMCIOCDUMPEVENTLOG:
  283.         LMC_COPY_TO_USER(ifr->ifr_data, &lmcEventLogIndex, sizeof (u32));
  284.         LMC_COPY_TO_USER(ifr->ifr_data + sizeof (u32), lmcEventLogBuf, sizeof (lmcEventLogBuf));
  285.         ret = 0;
  286.         break;
  287. #endif /* end ifdef _DBG_EVENTLOG */
  288.     case LMCIOCT1CONTROL: /*fold01*/
  289.         if (sc->lmc_cardtype != LMC_CARDTYPE_T1){
  290.             ret = -EOPNOTSUPP;
  291.             break;
  292.         }
  293.         break;
  294.     case LMCIOCXILINX: /*fold01*/
  295.         {
  296.             struct lmc_xilinx_control xc; /*fold02*/
  297.             if (!suser ()){
  298.                 ret = -EPERM;
  299.                 break;
  300.             }
  301.             /*
  302.              * Stop the xwitter whlie we restart the hardware
  303.              */
  304.             LMC_XMITTER_BUSY(dev);
  305.             LMC_COPY_FROM_USER(&xc, ifr->ifr_data, sizeof (struct lmc_xilinx_control));
  306.             switch(xc.command){
  307.             case lmc_xilinx_reset: /*fold02*/
  308.                 {
  309.                     u16 mii;
  310.                     mii = lmc_mii_readreg (sc, 0, 16);
  311.                     /*
  312.                      * Make all of them 0 and make input
  313.                      */
  314.                     lmc_gpio_mkinput(sc, 0xff);
  315.                     /*
  316.                      * make the reset output
  317.                      */
  318.                     lmc_gpio_mkoutput(sc, LMC_GEP_RESET);
  319.                     /*
  320.                      * RESET low to force configuration.  This also forces
  321.                      * the transmitter clock to be internal, but we expect to reset
  322.                      * that later anyway.
  323.                      */
  324.                     sc->lmc_gpio &= ~LMC_GEP_RESET;
  325.                     LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  326.                     /*
  327.                      * hold for more than 10 microseconds
  328.                      */
  329.                     udelay(50);
  330.                     sc->lmc_gpio |= LMC_GEP_RESET;
  331.                     LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  332.                     /*
  333.                      * stop driving Xilinx-related signals
  334.                      */
  335.                     lmc_gpio_mkinput(sc, 0xff);
  336.                     /* Reset the frammer hardware */
  337.                     sc->lmc_media->set_link_status (sc, 1);
  338.                     sc->lmc_media->set_status (sc, NULL);
  339. //                    lmc_softreset(sc);
  340.                     {
  341.                         int i;
  342.                         for(i = 0; i < 5; i++){
  343.                             lmc_led_on(sc, LMC_DS3_LED0);
  344.                             mdelay(100);
  345.                             lmc_led_off(sc, LMC_DS3_LED0);
  346.                             lmc_led_on(sc, LMC_DS3_LED1);
  347.                             mdelay(100);
  348.                             lmc_led_off(sc, LMC_DS3_LED1);
  349.                             lmc_led_on(sc, LMC_DS3_LED3);
  350.                             mdelay(100);
  351.                             lmc_led_off(sc, LMC_DS3_LED3);
  352.                             lmc_led_on(sc, LMC_DS3_LED2);
  353.                             mdelay(100);
  354.                             lmc_led_off(sc, LMC_DS3_LED2);
  355.                         }
  356.                     }
  357.                     
  358.                     
  359.                     ret = 0x0;
  360.                 }
  361.                 break;
  362.             case lmc_xilinx_load_prom: /*fold02*/
  363.                 {
  364.                     u16 mii;
  365.                     int timeout = 500000;
  366.                     mii = lmc_mii_readreg (sc, 0, 16);
  367.                     /*
  368.                      * Make all of them 0 and make input
  369.                      */
  370.                     lmc_gpio_mkinput(sc, 0xff);
  371.                     /*
  372.                      * make the reset output
  373.                      */
  374.                     lmc_gpio_mkoutput(sc,  LMC_GEP_DP | LMC_GEP_RESET);
  375.                     /*
  376.                      * RESET low to force configuration.  This also forces
  377.                      * the transmitter clock to be internal, but we expect to reset
  378.                      * that later anyway.
  379.                      */
  380.                     sc->lmc_gpio &= ~(LMC_GEP_RESET | LMC_GEP_DP);
  381.                     LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  382.                     /*
  383.                      * hold for more than 10 microseconds
  384.                      */
  385.                     udelay(50);
  386.                     sc->lmc_gpio |= LMC_GEP_DP | LMC_GEP_RESET;
  387.                     LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  388.                     /*
  389.                      * busy wait for the chip to reset
  390.                      */
  391.                     while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 &&
  392.                            (timeout-- > 0))
  393.                         ;
  394.                     /*
  395.                      * stop driving Xilinx-related signals
  396.                      */
  397.                     lmc_gpio_mkinput(sc, 0xff);
  398.                     ret = 0x0;
  399.                     
  400.                     break;
  401.                 }
  402.             case lmc_xilinx_load: /*fold02*/
  403.                 {
  404.                     char *data;
  405.                     int pos;
  406.                     int timeout = 500000;
  407.                     if(xc.data == 0x0){
  408.                             ret = -EINVAL;
  409.                             break;
  410.                     }
  411.                     data = kmalloc(xc.len, GFP_KERNEL);
  412.                     if(data == 0x0){
  413.                             printk(KERN_WARNING "%s: Failed to allocate memory for copyn", dev->name);
  414.                             ret = -ENOMEM;
  415.                             break;
  416.                     }
  417.                     
  418.                     if(copy_from_user(data, xc.data, xc.len))
  419.                     {
  420.                      kfree(data);
  421.                      ret = -ENOMEM;
  422.                      break;
  423.                     }
  424.                     printk("%s: Starting load of data Len: %d at 0x%p == 0x%pn", dev->name, xc.len, xc.data, data);
  425.                     lmc_gpio_mkinput(sc, 0xff);
  426.                     /*
  427.                      * Clear the Xilinx and start prgramming from the DEC
  428.                      */
  429.                     /*
  430.                      * Set ouput as:
  431.                      * Reset: 0 (active)
  432.                      * DP:    0 (active)
  433.                      * Mode:  1
  434.                      *
  435.                      */
  436.                     sc->lmc_gpio = 0x00;
  437.                     sc->lmc_gpio &= ~LMC_GEP_DP;
  438.                     sc->lmc_gpio &= ~LMC_GEP_RESET;
  439.                     sc->lmc_gpio |=  LMC_GEP_MODE;
  440.                     LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  441.                     lmc_gpio_mkoutput(sc, LMC_GEP_MODE | LMC_GEP_DP | LMC_GEP_RESET);
  442.                     /*
  443.                      * Wait at least 10 us 20 to be safe
  444.                      */
  445.                     udelay(50);
  446.                     /*
  447.                      * Clear reset and activate programming lines
  448.                      * Reset: Input
  449.                      * DP:    Input
  450.                      * Clock: Output
  451.                      * Data:  Output
  452.                      * Mode:  Output
  453.                      */
  454.                     lmc_gpio_mkinput(sc, LMC_GEP_DP | LMC_GEP_RESET);
  455.                     /*
  456.                      * Set LOAD, DATA, Clock to 1
  457.                      */
  458.                     sc->lmc_gpio = 0x00;
  459.                     sc->lmc_gpio |= LMC_GEP_MODE;
  460.                     sc->lmc_gpio |= LMC_GEP_DATA;
  461.                     sc->lmc_gpio |= LMC_GEP_CLK;
  462.                     LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  463.                     
  464.                     lmc_gpio_mkoutput(sc, LMC_GEP_DATA | LMC_GEP_CLK | LMC_GEP_MODE );
  465.                     /*
  466.                      * busy wait for the chip to reset
  467.                      */
  468.                     while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 &&
  469.                            (timeout-- > 0))
  470.                         ;
  471.                     printk(KERN_DEBUG "%s: Waited %d for the Xilinx to clear it's memoryn", dev->name, 500000-timeout);
  472.                     for(pos = 0; pos < xc.len; pos++){
  473.                         switch(data[pos]){
  474.                         case 0:
  475.                             sc->lmc_gpio &= ~LMC_GEP_DATA; /* Data is 0 */
  476.                             break;
  477.                         case 1:
  478.                             sc->lmc_gpio |= LMC_GEP_DATA; /* Data is 1 */
  479.                             break;
  480.                         default:
  481.                             printk(KERN_WARNING "%s Bad data in xilinx programming data at %d, got %d wanted 0 or 1n", dev->name, pos, data[pos]);
  482.                             sc->lmc_gpio |= LMC_GEP_DATA; /* Assume it's 1 */
  483.                         }
  484.                         sc->lmc_gpio &= ~LMC_GEP_CLK; /* Clock to zero */
  485.                         sc->lmc_gpio |= LMC_GEP_MODE;
  486.                         LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  487.                         udelay(1);
  488.                         
  489.                         sc->lmc_gpio |= LMC_GEP_CLK; /* Put the clack back to one */
  490.                         sc->lmc_gpio |= LMC_GEP_MODE;
  491.                         LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  492.                         udelay(1);
  493.                     }
  494.                     if((LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0){
  495.                         printk(KERN_WARNING "%s: Reprogramming FAILED. Needs to be reprogrammed. (corrupted data)n", dev->name);
  496.                     }
  497.                     else if((LMC_CSR_READ(sc, csr_gp) & LMC_GEP_DP) == 0){
  498.                         printk(KERN_WARNING "%s: Reprogramming FAILED. Needs to be reprogrammed. (done)n", dev->name);
  499.                     }
  500.                     else {
  501.                         printk(KERN_DEBUG "%s: Done reprogramming Xilinx, %d bits, good luck!n", dev->name, pos);
  502.                     }
  503.                     lmc_gpio_mkinput(sc, 0xff);
  504.                     
  505.                     sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET;
  506.                     lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
  507.                     sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET;
  508.                     lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
  509.                     kfree(data);
  510.                     
  511.                     ret = 0;
  512.                     
  513.                     break;
  514.                 }
  515.             default: /*fold02*/
  516.                 ret = -EBADE;
  517.                 break;
  518.             }
  519.             LMC_XMITTER_FREE(dev);
  520.             sc->lmc_txfull = 0;
  521.         }
  522.         break;
  523.     default: /*fold01*/
  524.         /* If we don't know what to do, give the protocol a shot. */
  525.         ret = lmc_proto_ioctl (sc, ifr, cmd);
  526.         break;
  527.     }
  528.     spin_unlock_irqrestore(&sc->lmc_lock, flags); /*fold01*/
  529.     lmc_trace(dev, "lmc_ioctl out");
  530.     return ret;
  531. }
  532. /* the watchdog process that cruises around */
  533. static void lmc_watchdog (unsigned long data) /*fold00*/
  534. {
  535.     struct net_device *dev = (struct net_device *) data;
  536.     lmc_softc_t *sc;
  537.     int link_status;
  538.     u_int32_t ticks;
  539.     LMC_SPIN_FLAGS;
  540.     sc = dev->priv;
  541.     lmc_trace(dev, "lmc_watchdog in");
  542.     spin_lock_irqsave(&sc->lmc_lock, flags);
  543.     if(sc->check != 0xBEAFCAFE){
  544.         printk("LMC: Corrupt net_device stuct, breaking outn");
  545. spin_unlock_irqrestore(&sc->lmc_lock, flags);
  546.         return;
  547.     }
  548.     /* Make sure the tx jabber and rx watchdog are off,
  549.      * and the transmit and receive processes are running.
  550.      */
  551.     LMC_CSR_WRITE (sc, csr_15, 0x00000011);
  552.     sc->lmc_cmdmode |= TULIP_CMD_TXRUN | TULIP_CMD_RXRUN;
  553.     LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode);
  554.     if (sc->lmc_ok == 0)
  555.         goto kick_timer;
  556.     LMC_EVENT_LOG(LMC_EVENT_WATCHDOG, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16));
  557.     /* --- begin time out check -----------------------------------
  558.      * check for a transmit interrupt timeout
  559.      * Has the packet xmt vs xmt serviced threshold been exceeded */
  560.     if (sc->lmc_taint_tx == sc->lastlmc_taint_tx &&
  561.         sc->stats.tx_packets > sc->lasttx_packets &&
  562.         sc->tx_TimeoutInd == 0)
  563.     {
  564.         /* wait for the watchdog to come around again */
  565.         sc->tx_TimeoutInd = 1;
  566.     }
  567.     else if (sc->lmc_taint_tx == sc->lastlmc_taint_tx &&
  568.              sc->stats.tx_packets > sc->lasttx_packets &&
  569.              sc->tx_TimeoutInd)
  570.     {
  571.         LMC_EVENT_LOG(LMC_EVENT_XMTINTTMO, LMC_CSR_READ (sc, csr_status), 0);
  572.         sc->tx_TimeoutDisplay = 1;
  573.         sc->stats.tx_TimeoutCnt++;
  574.         /* DEC chip is stuck, hit it with a RESET!!!! */
  575.         lmc_running_reset (dev);
  576.         /* look at receive & transmit process state to make sure they are running */
  577.         LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0);
  578.         /* look at: DSR - 02  for Reg 16
  579.          *                  CTS - 08
  580.          *                  DCD - 10
  581.          *                  RI  - 20
  582.          * for Reg 17
  583.          */
  584.         LMC_EVENT_LOG(LMC_EVENT_RESET2, lmc_mii_readreg (sc, 0, 16), lmc_mii_readreg (sc, 0, 17));
  585.         /* reset the transmit timeout detection flag */
  586.         sc->tx_TimeoutInd = 0;
  587.         sc->lastlmc_taint_tx = sc->lmc_taint_tx;
  588.         sc->lasttx_packets = sc->stats.tx_packets;
  589.     }
  590.     else
  591.     {
  592.         sc->tx_TimeoutInd = 0;
  593.         sc->lastlmc_taint_tx = sc->lmc_taint_tx;
  594.         sc->lasttx_packets = sc->stats.tx_packets;
  595.     }
  596.     /* --- end time out check ----------------------------------- */
  597.     link_status = sc->lmc_media->get_link_status (sc);
  598.     /*
  599.      * hardware level link lost, but the interface is marked as up.
  600.      * Mark it as down.
  601.      */
  602.     if ((link_status == 0) && (sc->last_link_status != 0)) {
  603.         printk(KERN_WARNING "%s: hardware/physical link downn", dev->name);
  604.         sc->last_link_status = 0;
  605.         /* lmc_reset (sc); Why reset??? The link can go down ok */
  606.         /* Inform the world that link has been lost */
  607.         dev->flags &= ~IFF_RUNNING;
  608.     }
  609.     /*
  610.      * hardware link is up, but the interface is marked as down.
  611.      * Bring it back up again.
  612.      */
  613.      if (link_status != 0 && sc->last_link_status == 0) {
  614.          printk(KERN_WARNING "%s: hardware/physical link upn", dev->name);
  615.          sc->last_link_status = 1;
  616.          /* lmc_reset (sc); Again why reset??? */
  617.          /* Inform the world that link protocol is back up. */
  618.          dev->flags |= IFF_RUNNING;
  619.          /* Now we have to tell the syncppp that we had an outage
  620.           * and that it should deal.  Calling sppp_reopen here
  621.           * should do the trick, but we may have to call sppp_close
  622.           * when the link goes down, and call sppp_open here.
  623.           * Subject to more testing.
  624.           * --bbraun
  625.           */
  626.          lmc_proto_reopen(sc);
  627.      }
  628.     /* Call media specific watchdog functions */
  629.     sc->lmc_media->watchdog(sc);
  630.     /*
  631.      * Poke the transmitter to make sure it
  632.      * never stops, even if we run out of mem
  633.      */
  634.     LMC_CSR_WRITE(sc, csr_rxpoll, 0);
  635.     /*
  636.      * Check for code that failed
  637.      * and try and fix it as appropriate
  638.      */
  639.     if(sc->failed_ring == 1){
  640.         /*
  641.          * Failed to setup the recv/xmit rin
  642.          * Try again
  643.          */
  644.         sc->failed_ring = 0;
  645.         lmc_softreset(sc);
  646.     }
  647.     if(sc->failed_recv_alloc == 1){
  648.         /*
  649.          * We failed to alloc mem in the
  650.          * interrupt handler, go through the rings
  651.          * and rebuild them
  652.          */
  653.         sc->failed_recv_alloc = 0;
  654.         lmc_softreset(sc);
  655.     }
  656.     /*
  657.      * remember the timer value
  658.      */
  659. kick_timer:
  660.     ticks = LMC_CSR_READ (sc, csr_gp_timer);
  661.     LMC_CSR_WRITE (sc, csr_gp_timer, 0xffffffffUL);
  662.     sc->ictl.ticks = 0x0000ffff - (ticks & 0x0000ffff);
  663.     /*
  664.      * restart this timer.
  665.      */
  666.     sc->timer.expires = jiffies + (HZ);
  667.     add_timer (&sc->timer);
  668.     spin_unlock_irqrestore(&sc->lmc_lock, flags);
  669.     lmc_trace(dev, "lmc_watchdog out");
  670. }
  671. static int lmc_init(struct net_device * const dev) /*fold00*/
  672. {
  673.     lmc_trace(dev, "lmc_init in");
  674.     lmc_trace(dev, "lmc_init out");
  675.     return 0;
  676. }
  677. /* This initializes each card from lmc_probe() */
  678. static struct net_device *lmc_probe1 (struct net_device *dev, unsigned long ioaddr, unsigned int irq, /*fold00*/
  679.                                   int chip_id, int subdevice, int board_idx)
  680. {
  681.     lmc_softc_t *sc = NULL;
  682.     u_int16_t AdapModelNum;
  683.     /*
  684.      * Allocate our own device structure
  685.      */
  686. #if LINUX_VERSION_CODE < 0x20363
  687.     dev = kmalloc (sizeof (struct ppp_device)+8, GFP_KERNEL);
  688. #else
  689.     dev = kmalloc (sizeof (struct net_device)+8, GFP_KERNEL);
  690. #endif
  691.     if (dev == NULL){
  692.         printk (KERN_ERR "lmc: kmalloc for device failedn");
  693.         return NULL;
  694.     }
  695.     memset (dev, 0, sizeof (struct net_device));
  696. #ifndef GCOM
  697.     /*
  698.      * Switch to common hdlc%d naming. We name by type not by vendor
  699.      */
  700.     
  701.     dev_alloc_name(dev, "hdlc%d");
  702. #else
  703.     /*
  704.      * GCOM uses LMC vendor name so that clients can know which card
  705.      * to attach to.
  706.      */
  707.     dev_alloc_name(dev, "lmc%d");
  708. #endif
  709.     lmc_trace(dev, "lmc_probe1 in");
  710.     
  711.     Lmc_Count++;
  712.     if(lmc_first_load == 0){
  713.         printk(KERN_INFO "Lan Media Corporation WAN Driver Version %d.%d.%dn",DRIVER_MAJOR_VERSION, DRIVER_MINOR_VERSION,DRIVER_SUB_VERSION);
  714.         lmc_first_load = 1;
  715.     }
  716.     
  717.     /*
  718.      * Allocate space for the private data structure
  719.      */
  720.     sc = kmalloc (sizeof (lmc_softc_t), GFP_KERNEL);
  721.     if (sc == NULL) {
  722.         printk (KERN_WARNING "%s: Cannot allocate memory for device staten",
  723.                 dev->name);
  724.         return (NULL);
  725.     }
  726.     memset (sc, 0, sizeof (lmc_softc_t));
  727.     dev->priv = sc;
  728.     sc->lmc_device = dev;
  729.     sc->name = dev->name;
  730.     /* Initialize the sppp layer */
  731.     /* An ioctl can cause a subsequent detach for raw frame interface */
  732.     sc->if_type = LMC_PPP;
  733.     sc->check = 0xBEAFCAFE;
  734.     dev->base_addr = ioaddr;
  735.     dev->irq = irq;
  736.     /*
  737.      * This will get the protocol layer ready and do any 1 time init's
  738.      * Must have a valid sc and dev structure
  739.      */
  740.     lmc_proto_init(sc);
  741.     lmc_proto_attach(sc);
  742.     /* Just fill in the entries for the device */
  743.     dev->init = lmc_init;
  744.     dev->type = ARPHRD_HDLC;
  745.     dev->hard_start_xmit = lmc_start_xmit;
  746.     dev->open = lmc_open;
  747.     dev->stop = lmc_close;
  748.     dev->get_stats = lmc_get_stats;
  749.     dev->do_ioctl = lmc_ioctl;
  750.     dev->set_config = lmc_set_config;
  751. #if LINUX_VERSION_CODE >= 0x20363
  752.     dev->tx_timeout = lmc_driver_timeout;
  753.     dev->watchdog_timeo = (HZ); /* 1 second */
  754. #endif
  755.     
  756.     /*
  757.      * Why were we changing this???
  758.      dev->tx_queue_len = 100;
  759.      */
  760.     /* Init the spin lock so can call it latter */
  761.     spin_lock_init(&sc->lmc_lock);
  762.     LMC_SETUP_20_DEV;
  763.     printk ("%s: detected at %lx, irq %dn", dev->name, ioaddr, dev->irq);
  764.     if (register_netdev (dev) != 0) {
  765.         printk (KERN_ERR "%s: register_netdev failed.n", dev->name);
  766.         lmc_proto_detach(sc);
  767.         kfree (dev->priv);
  768.         kfree (dev);
  769.         return NULL;
  770.     }
  771.     /*
  772.      * Request the region of registers we need, so that
  773.      * later on, no one else will take our card away from
  774.      * us.
  775.      */
  776.     request_region (ioaddr, LMC_REG_RANGE, dev->name);
  777.     sc->lmc_cardtype = LMC_CARDTYPE_UNKNOWN;
  778.     sc->lmc_timing = LMC_CTL_CLOCK_SOURCE_EXT;
  779.     switch (subdevice) {
  780.     case PCI_PRODUCT_LMC_HSSI:
  781.         printk ("%s: LMC HSSIn", dev->name);
  782.         sc->lmc_cardtype = LMC_CARDTYPE_HSSI;
  783.         sc->lmc_media = &lmc_hssi_media;
  784.         break;
  785.     case PCI_PRODUCT_LMC_DS3:
  786.         printk ("%s: LMC DS3n", dev->name);
  787.         sc->lmc_cardtype = LMC_CARDTYPE_DS3;
  788.         sc->lmc_media = &lmc_ds3_media;
  789.         break;
  790.     case PCI_PRODUCT_LMC_SSI:
  791.         printk ("%s: LMC SSIn", dev->name);
  792.         sc->lmc_cardtype = LMC_CARDTYPE_SSI;
  793.         sc->lmc_media = &lmc_ssi_media;
  794.         break;
  795.     case PCI_PRODUCT_LMC_T1:
  796.         printk ("%s: LMC T1n", dev->name);
  797.         sc->lmc_cardtype = LMC_CARDTYPE_T1;
  798.         sc->lmc_media = &lmc_t1_media;
  799.         break;
  800.     default:
  801.         printk (KERN_WARNING "%s: LMC UNKOWN CARD!n", dev->name);
  802.         break;
  803.     }
  804.     lmc_initcsrs (sc, dev->base_addr, 8);
  805.     lmc_gpio_mkinput (sc, 0xff);
  806.     sc->lmc_gpio = 0; /* drive no signals yet */
  807.     sc->lmc_media->defaults (sc);
  808.     sc->lmc_media->set_link_status (sc, LMC_LINK_UP);
  809.     /* verify that the PCI Sub System ID matches the Adapter Model number
  810.      * from the MII register
  811.      */
  812.     AdapModelNum = (lmc_mii_readreg (sc, 0, 3) & 0x3f0) >> 4;
  813.     if ((AdapModelNum == LMC_ADAP_T1
  814.          && subdevice == PCI_PRODUCT_LMC_T1) || /* detect LMC1200 */
  815.         (AdapModelNum == LMC_ADAP_SSI
  816.          && subdevice == PCI_PRODUCT_LMC_SSI) || /* detect LMC1000 */
  817.         (AdapModelNum == LMC_ADAP_DS3
  818.          && subdevice == PCI_PRODUCT_LMC_DS3) || /* detect LMC5245 */
  819.         (AdapModelNum == LMC_ADAP_HSSI
  820.          && subdevice == PCI_PRODUCT_LMC_HSSI))
  821.     { /* detect LMC5200 */
  822.     }
  823.     else {
  824.         printk ("%s: Model number (%d) miscompare for PCI Subsystem ID = 0x%04xn",
  825.                 dev->name, AdapModelNum, subdevice);
  826. //        return (NULL);
  827.     }
  828.     /*
  829.      * reset clock
  830.      */
  831.     LMC_CSR_WRITE (sc, csr_gp_timer, 0xFFFFFFFFUL);
  832.     sc->board_idx = board_idx;
  833.     memset (&sc->stats, 0, sizeof (struct lmc_statistics));
  834.     sc->stats.check = STATCHECK;
  835.     sc->stats.version_size = (DRIVER_VERSION << 16) +
  836.         sizeof (struct lmc_statistics);
  837.     sc->stats.lmc_cardtype = sc->lmc_cardtype;
  838.     sc->lmc_ok = 0;
  839.     sc->last_link_status = 0;
  840.     lmc_trace(dev, "lmc_probe1 out");
  841.     return dev;
  842. }
  843. /* This is the entry point.  This is what is called immediatly. */
  844. /* This goes out and finds the card */
  845. int lmc_probe_fake(struct net_device *dev) /*fold00*/
  846. {
  847.     lmc_probe(NULL);
  848.     /* Return 1 to unloaded bogus device */
  849.     return 1;
  850. }
  851. int lmc_probe (struct net_device *dev) /*fold00*/
  852. {
  853.     int pci_index = 0;
  854.     unsigned long pci_ioaddr;
  855.     unsigned int pci_irq_line;
  856.     u16 vendor, subvendor, device, subdevice;
  857.     u32 foundaddr = 0;
  858.     unsigned char pci_bus, pci_device_fn;
  859.     u8 intcf = 0;
  860.     /* The card is only available on PCI, so if we don't have a
  861.      * PCI bus, we are in trouble.
  862.      */
  863.     if (!LMC_PCI_PRESENT()) {
  864. /*        printk ("%s: We really want a pci bios!n", dev->name);*/
  865.         return -1;
  866.     }
  867.     /* Loop basically until we don't find anymore. */
  868.     while (pci_index < 0xff){
  869.      struct pci_dev *pdev;
  870.         /* The tulip is considered an ethernet class of card... */
  871.         if (pcibios_find_class (PCI_CLASS_NETWORK_ETHERNET << 8,
  872.                                 pci_index, &pci_bus,
  873.                                 &pci_device_fn) != PCIBIOS_SUCCESSFUL) {
  874.             /* No card found on this pass */
  875.             break;
  876.         }
  877.         /* Read the info we need to determine if this is
  878.          * our card or not
  879.          */
  880. pdev = pci_find_slot (pci_bus, pci_device_fn);
  881. if (!pdev) break;
  882. if (pci_enable_device(pdev))
  883. break;
  884.         vendor = pdev->vendor;
  885.         device = pdev->device;
  886.         pci_irq_line = pdev->irq;
  887.         pci_ioaddr = pci_resource_start (pdev, 0);
  888. subvendor = pdev->subsystem_vendor;
  889. subdevice = pdev->subsystem_device;
  890. pci_set_master (pdev);
  891.         /*
  892.          * Make sure it's the correct card.  CHECK SUBVENDOR ID!
  893.          * There are lots of tulip's out there.
  894.          * Also check the region of registers we will soon be
  895.          * poking, to make sure no one else has reserved them.
  896.          * This prevents taking someone else's device.
  897.          *
  898.          * Check either the subvendor or the subdevice, some systems reverse
  899.          * the setting in the bois, seems to be version and arch dependant?
  900.          * Fix the two variables
  901.          *
  902.          */
  903.         if (!(check_region (pci_ioaddr, LMC_REG_RANGE)) &&
  904.             (vendor == CORRECT_VENDOR_ID) &&
  905.             (device == CORRECT_DEV_ID) &&
  906.             ((subvendor == PCI_VENDOR_LMC)  || (subdevice == PCI_VENDOR_LMC))){
  907.             struct net_device *cur, *prev = NULL;
  908.             /* Fix the error, exchange the two values */
  909.             if(subdevice == PCI_VENDOR_LMC){
  910.                 subdevice = subvendor;
  911.                 subvendor = PCI_VENDOR_LMC ;
  912.             }
  913.             /* Make the call to actually setup this card */
  914.             dev = lmc_probe1 (dev, pci_ioaddr, pci_irq_line,
  915.                               device, subdevice, cards_found);
  916.             if (dev == NULL) {
  917.                 printk ("lmc_probe: lmc_probe1 failedn");
  918.                 goto lmc_probe_next_card;
  919.             }
  920.             /* insert the device into the chain of lmc devices */
  921.             for (cur = Lmc_root_dev;
  922.                  cur != NULL;
  923.                  cur = ((lmc_softc_t *) cur->priv)->next_module) {
  924.                 prev = cur;
  925.             }
  926.             if (prev == NULL)
  927.                 Lmc_root_dev = dev;
  928.             else
  929.                 ((lmc_softc_t *) prev->priv)->next_module = dev;
  930.             ((lmc_softc_t *) dev->priv)->next_module = NULL;
  931.             /* end insert */
  932.             foundaddr = dev->base_addr;
  933.             cards_found++;
  934.             intcf++;
  935.         }
  936.     lmc_probe_next_card:
  937.         pci_index++;
  938.     }
  939.     if (cards_found < 1)
  940.         return -1;
  941. #if LINUX_VERSION_CODE >= 0x20200
  942.     return foundaddr;
  943. #else
  944.     return 0;
  945. #endif
  946. }
  947. /* After this is called, packets can be sent.
  948.  * Does not initialize the addresses
  949.  */
  950. static int lmc_open (struct net_device *dev) /*fold00*/
  951. {
  952.     lmc_softc_t *sc = dev->priv;
  953.     lmc_trace(dev, "lmc_open in");
  954.     lmc_led_on(sc, LMC_DS3_LED0);
  955.     lmc_dec_reset (sc);
  956.     lmc_reset (sc);
  957.     LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0);
  958.     LMC_EVENT_LOG(LMC_EVENT_RESET2,
  959.                   lmc_mii_readreg (sc, 0, 16),
  960.                   lmc_mii_readreg (sc, 0, 17));
  961.     if (sc->lmc_ok){
  962.         lmc_trace(dev, "lmc_open lmc_ok out");
  963.         return (0);
  964.     }
  965.     lmc_softreset (sc);
  966.     /* Since we have to use PCI bus, this should work on x86,alpha,ppc */
  967.     if (request_irq (dev->irq, &lmc_interrupt, SA_SHIRQ, dev->name, dev)){
  968.         printk(KERN_WARNING "%s: could not get irq: %dn", dev->name, dev->irq);
  969.         lmc_trace(dev, "lmc_open irq failed out");
  970.         return -EAGAIN;
  971.     }
  972.     sc->got_irq = 1;
  973.     /* Assert Terminal Active */
  974.     sc->lmc_miireg16 |= LMC_MII16_LED_ALL;
  975.     sc->lmc_media->set_link_status (sc, LMC_LINK_UP);
  976.     /*
  977.      * reset to last state.
  978.      */
  979.     sc->lmc_media->set_status (sc, NULL);
  980.     /* setup default bits to be used in tulip_desc_t transmit descriptor
  981.      * -baz */
  982.     sc->TxDescriptControlInit = (
  983.                                  LMC_TDES_INTERRUPT_ON_COMPLETION
  984.                                  | LMC_TDES_FIRST_SEGMENT
  985.                                  | LMC_TDES_LAST_SEGMENT
  986.                                  | LMC_TDES_SECOND_ADDR_CHAINED
  987.                                  | LMC_TDES_DISABLE_PADDING
  988.                                 );
  989.     if (sc->ictl.crc_length == LMC_CTL_CRC_LENGTH_16) {
  990.         /* disable 32 bit CRC generated by ASIC */
  991.         sc->TxDescriptControlInit |= LMC_TDES_ADD_CRC_DISABLE;
  992.     }
  993.     sc->lmc_media->set_crc_length(sc, sc->ictl.crc_length);
  994.     /* Acknoledge the Terminal Active and light LEDs */
  995.     /* dev->flags |= IFF_UP; */
  996.     lmc_proto_open(sc);
  997.     dev->do_ioctl = lmc_ioctl;
  998.     LMC_XMITTER_INIT(dev);
  999.     
  1000. #if LINUX_VERSION_CODE < 0x20363
  1001.     dev->start = 1;
  1002. #endif
  1003.     
  1004.     sc->stats.tx_tbusy0++ ;
  1005.     MOD_INC_USE_COUNT;
  1006.     /*
  1007.      * select what interrupts we want to get
  1008.      */
  1009.     sc->lmc_intrmask = 0;
  1010.     /* Should be using the default interrupt mask defined in the .h file. */
  1011.     sc->lmc_intrmask |= (TULIP_STS_NORMALINTR
  1012.                          | TULIP_STS_RXINTR
  1013.                          | TULIP_STS_TXINTR
  1014.                          | TULIP_STS_ABNRMLINTR
  1015.                          | TULIP_STS_SYSERROR
  1016.                          | TULIP_STS_TXSTOPPED
  1017.                          | TULIP_STS_TXUNDERFLOW
  1018.                          | TULIP_STS_RXSTOPPED
  1019.          | TULIP_STS_RXNOBUF
  1020.                         );
  1021.     LMC_CSR_WRITE (sc, csr_intr, sc->lmc_intrmask);
  1022.     sc->lmc_cmdmode |= TULIP_CMD_TXRUN;
  1023.     sc->lmc_cmdmode |= TULIP_CMD_RXRUN;
  1024.     LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode);
  1025.     sc->lmc_ok = 1; /* Run watchdog */
  1026.     /*
  1027.      * Set the if up now - pfb
  1028.      */
  1029.     sc->last_link_status = 1;
  1030.     /*
  1031.      * Setup a timer for the watchdog on probe, and start it running.
  1032.      * Since lmc_ok == 0, it will be a NOP for now.
  1033.      */
  1034.     init_timer (&sc->timer);
  1035.     sc->timer.expires = jiffies + HZ;
  1036.     sc->timer.data = (unsigned long) dev;
  1037.     sc->timer.function = &lmc_watchdog;
  1038.     add_timer (&sc->timer);
  1039.     lmc_trace(dev, "lmc_open out");
  1040.     return (0);
  1041. }
  1042. /* Total reset to compensate for the AdTran DSU doing bad things
  1043.  *  under heavy load
  1044.  */
  1045. static void lmc_running_reset (struct net_device *dev) /*fold00*/
  1046. {
  1047.     lmc_softc_t *sc = (lmc_softc_t *) dev->priv;
  1048.     lmc_trace(dev, "lmc_runnig_reset in");
  1049.     /* stop interrupts */
  1050.     /* Clear the interrupt mask */
  1051.     LMC_CSR_WRITE (sc, csr_intr, 0x00000000);
  1052.     lmc_dec_reset (sc);
  1053.     lmc_reset (sc);
  1054.     lmc_softreset (sc);
  1055.     /* sc->lmc_miireg16 |= LMC_MII16_LED_ALL; */
  1056.     sc->lmc_media->set_link_status (sc, 1);
  1057.     sc->lmc_media->set_status (sc, NULL);
  1058.     //dev->flags |= IFF_RUNNING;
  1059.     
  1060.     LMC_XMITTER_FREE(dev);
  1061.     sc->lmc_txfull = 0;
  1062.     sc->stats.tx_tbusy0++ ;
  1063.     sc->lmc_intrmask = TULIP_DEFAULT_INTR_MASK;
  1064.     LMC_CSR_WRITE (sc, csr_intr, sc->lmc_intrmask);
  1065.     sc->lmc_cmdmode |= (TULIP_CMD_TXRUN | TULIP_CMD_RXRUN);
  1066.     LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode);
  1067.     lmc_trace(dev, "lmc_runnin_reset_out");
  1068. }
  1069. /* This is what is called when you ifconfig down a device.
  1070.  * This disables the timer for the watchdog and keepalives,
  1071.  * and disables the irq for dev.
  1072.  */
  1073. static int lmc_close (struct net_device *dev) /*fold00*/
  1074. {
  1075.     /* not calling release_region() as we should */
  1076.     lmc_softc_t *sc;
  1077.     lmc_trace(dev, "lmc_close in");
  1078.     
  1079.     sc = dev->priv;
  1080.     sc->lmc_ok = 0;
  1081.     sc->lmc_media->set_link_status (sc, 0);
  1082.     del_timer (&sc->timer);
  1083.     lmc_proto_close(sc);
  1084.     lmc_ifdown (dev);
  1085.     lmc_trace(dev, "lmc_close out");
  1086.     
  1087.     return 0;
  1088. }
  1089. /* Ends the transfer of packets */
  1090. /* When the interface goes down, this is called */
  1091. static int lmc_ifdown (struct net_device *dev) /*fold00*/
  1092. {
  1093.     lmc_softc_t *sc = dev->priv;
  1094.     u32 csr6;
  1095.     int i;
  1096.     lmc_trace(dev, "lmc_ifdown in");
  1097.     
  1098.     /* Don't let anything else go on right now */
  1099.     //    dev->start = 0;
  1100.     LMC_XMITTER_BUSY(dev);
  1101.     sc->stats.tx_tbusy1++ ;
  1102.     /* stop interrupts */
  1103.     /* Clear the interrupt mask */
  1104.     LMC_CSR_WRITE (sc, csr_intr, 0x00000000);
  1105.     /* Stop Tx and Rx on the chip */
  1106.     csr6 = LMC_CSR_READ (sc, csr_command);
  1107.     csr6 &= ~LMC_DEC_ST; /* Turn off the Transmission bit */
  1108.     csr6 &= ~LMC_DEC_SR; /* Turn off the Receive bit */
  1109.     LMC_CSR_WRITE (sc, csr_command, csr6);
  1110.     dev->flags &= ~IFF_RUNNING;
  1111.     sc->stats.rx_missed_errors +=
  1112.         LMC_CSR_READ (sc, csr_missed_frames) & 0xffff;
  1113.     /* release the interrupt */
  1114.     if(sc->got_irq == 1){
  1115.         free_irq (dev->irq, dev);
  1116.         sc->got_irq = 0;
  1117.     }
  1118.     /* free skbuffs in the Rx queue */
  1119.     for (i = 0; i < LMC_RXDESCS; i++)
  1120.     {
  1121.         struct sk_buff *skb = sc->lmc_rxq[i];
  1122.         sc->lmc_rxq[i] = 0;
  1123.         sc->lmc_rxring[i].status = 0;
  1124.         sc->lmc_rxring[i].length = 0;
  1125.         sc->lmc_rxring[i].buffer1 = 0xDEADBEEF;
  1126.         if (skb != NULL)
  1127.         {
  1128.             LMC_SKB_FREE(skb, 1);
  1129.             LMC_DEV_KFREE_SKB (skb);
  1130.         }
  1131.         sc->lmc_rxq[i] = NULL;
  1132.     }
  1133.     for (i = 0; i < LMC_TXDESCS; i++)
  1134.     {
  1135.         if (sc->lmc_txq[i] != NULL)
  1136.             LMC_DEV_KFREE_SKB (sc->lmc_txq[i]);
  1137.         sc->lmc_txq[i] = NULL;
  1138.     }
  1139.     lmc_led_off (sc, LMC_MII16_LED_ALL);
  1140.     LMC_XMITTER_FREE(dev);
  1141.     sc->stats.tx_tbusy0++ ;
  1142.     lmc_trace(dev, "lmc_ifdown out");
  1143.     MOD_DEC_USE_COUNT;
  1144.     return 0;
  1145. }
  1146. /* Interrupt handling routine.  This will take an incoming packet, or clean
  1147.  * up after a trasmit.
  1148.  */
  1149. static void lmc_interrupt (int irq, void *dev_instance, struct pt_regs *regs) /*fold00*/
  1150. {
  1151.     struct net_device *dev = (struct net_device *) dev_instance;
  1152.     lmc_softc_t *sc;
  1153.     u32 csr;
  1154.     int i;
  1155.     s32 stat;
  1156.     unsigned int badtx;
  1157.     u32 firstcsr;
  1158.     int max_work = LMC_RXDESCS;
  1159.     lmc_trace(dev, "lmc_interrupt in");
  1160.     sc = dev->priv;
  1161.     
  1162.     spin_lock(&sc->lmc_lock);
  1163.     /*
  1164.      * Read the csr to find what interrupts we have (if any)
  1165.      */
  1166.     csr = LMC_CSR_READ (sc, csr_status);
  1167.     /*
  1168.      * Make sure this is our interrupt
  1169.      */
  1170.     if ( ! (csr & sc->lmc_intrmask)) {
  1171.         goto lmc_int_fail_out;
  1172.     }
  1173.     firstcsr = csr;
  1174.     /* always go through this loop at least once */
  1175.     while (csr & sc->lmc_intrmask) {
  1176.         /*
  1177.          * Clear interrupt bits, we handle all case below
  1178.          */
  1179.         LMC_CSR_WRITE (sc, csr_status, csr);
  1180.         /*
  1181.          * One of
  1182.          *  - Transmit process timed out CSR5<1>
  1183.          *  - Transmit jabber timeout    CSR5<3>
  1184.          *  - Transmit underflow         CSR5<5>
  1185.          *  - Transmit Receiver buffer unavailable CSR5<7>
  1186.          *  - Receive process stopped    CSR5<8>
  1187.          *  - Receive watchdog timeout   CSR5<9>
  1188.          *  - Early transmit interrupt   CSR5<10>
  1189.          *
  1190.          * Is this really right? Should we do a running reset for jabber?
  1191.          * (being a WAN card and all)
  1192.          */
  1193.         if (csr & TULIP_STS_ABNRMLINTR){
  1194.             lmc_running_reset (dev);
  1195.             break;
  1196.         }
  1197.         
  1198.         if (csr & TULIP_STS_RXINTR){
  1199.             lmc_trace(dev, "rx interrupt");
  1200.             lmc_rx (dev);
  1201.             
  1202.         }
  1203.         if (csr & (TULIP_STS_TXINTR | TULIP_STS_TXNOBUF | TULIP_STS_TXSTOPPED)) {
  1204.     int n_compl = 0 ;
  1205.             /* reset the transmit timeout detection flag -baz */
  1206.             sc->stats.tx_NoCompleteCnt = 0;
  1207.             badtx = sc->lmc_taint_tx;
  1208.             i = badtx % LMC_TXDESCS;
  1209.             while ((badtx < sc->lmc_next_tx)) {
  1210.                 stat = sc->lmc_txring[i].status;
  1211.                 LMC_EVENT_LOG (LMC_EVENT_XMTINT, stat,
  1212.  sc->lmc_txring[i].length);
  1213.                 /*
  1214.                  * If bit 31 is 1 the tulip owns it break out of the loop
  1215.                  */
  1216.                 if (stat & 0x80000000)
  1217.                     break;
  1218. n_compl++ ; /* i.e., have an empty slot in ring */
  1219.                 /*
  1220.                  * If we have no skbuff or have cleared it
  1221.                  * Already continue to the next buffer
  1222.                  */
  1223.                 if (sc->lmc_txq[i] == NULL)
  1224.                     continue;
  1225.                 /*
  1226.                  * Check the total error summary to look for any errors
  1227.                  */
  1228.                 if (stat & 0x8000) {
  1229.                     sc->stats.tx_errors++;
  1230.                     if (stat & 0x4104)
  1231.                         sc->stats.tx_aborted_errors++;
  1232.                     if (stat & 0x0C00)
  1233.                         sc->stats.tx_carrier_errors++;
  1234.                     if (stat & 0x0200)
  1235.                         sc->stats.tx_window_errors++;
  1236.                     if (stat & 0x0002)
  1237.                         sc->stats.tx_fifo_errors++;
  1238.                 }
  1239.                 else {
  1240.                     
  1241. #if LINUX_VERSION_CODE >= 0x20200
  1242.                     sc->stats.tx_bytes += sc->lmc_txring[i].length & 0x7ff;
  1243. #endif
  1244.                     
  1245.                     sc->stats.tx_packets++;
  1246.                 }
  1247.                 
  1248.                 //                LMC_DEV_KFREE_SKB (sc->lmc_txq[i]);
  1249.                 dev_kfree_skb_irq(sc->lmc_txq[i]);
  1250.                 sc->lmc_txq[i] = 0;
  1251.                 badtx++;
  1252.                 i = badtx % LMC_TXDESCS;
  1253.             }
  1254.             if (sc->lmc_next_tx - badtx > LMC_TXDESCS)
  1255.             {
  1256.                 printk ("%s: out of sync pointern", dev->name);
  1257.                 badtx += LMC_TXDESCS;
  1258.             }
  1259.             LMC_EVENT_LOG(LMC_EVENT_TBUSY0, n_compl, 0);
  1260.             sc->lmc_txfull = 0;
  1261.             LMC_XMITTER_FREE(dev);
  1262.             sc->stats.tx_tbusy0++ ;
  1263. #if LINUX_VERSION_CODE < 0x20363
  1264.             mark_bh (NET_BH); /* Tell Linux to give me more packets */
  1265. #endif
  1266. #ifdef DEBUG
  1267.             sc->stats.dirtyTx = badtx;
  1268.             sc->stats.lmc_next_tx = sc->lmc_next_tx;
  1269.             sc->stats.lmc_txfull = sc->lmc_txfull;
  1270. #if LINUX_VERSION_CODE < 0x20363
  1271.             sc->stats.tbusy = dev->tbusy;
  1272. #endif
  1273. #endif
  1274.             sc->lmc_taint_tx = badtx;
  1275.             /*
  1276.              * Why was there a break here???
  1277.              */
  1278.         } /* end handle transmit interrupt */
  1279.         if (csr & TULIP_STS_SYSERROR) {
  1280.             u32 error;
  1281.             printk (KERN_WARNING "%s: system bus error csr: %#8.8xn", dev->name, csr);
  1282.             error = csr>>23 & 0x7;
  1283.             switch(error){
  1284.             case 0x000:
  1285.                 printk(KERN_WARNING "%s: Parity Fault (bad)n", dev->name);
  1286.                 break;
  1287.             case 0x001:
  1288.                 printk(KERN_WARNING "%s: Master Abort (naughty)n", dev->name);
  1289.                 break;
  1290.             case 0x010:
  1291.                 printk(KERN_WARNING "%s: Target Abort (not so naughty)n", dev->name);
  1292.                 break;
  1293.             default:
  1294.                 printk(KERN_WARNING "%s: This bus error code was supposed to be reserved!n", dev->name);
  1295.             }
  1296.             lmc_dec_reset (sc);
  1297.             lmc_reset (sc);
  1298.             LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0);
  1299.             LMC_EVENT_LOG(LMC_EVENT_RESET2,
  1300.                           lmc_mii_readreg (sc, 0, 16),
  1301.                           lmc_mii_readreg (sc, 0, 17));
  1302.         }
  1303.         
  1304.         if(max_work-- <= 0)
  1305.             break;
  1306.         
  1307.         /*
  1308.          * Get current csr status to make sure
  1309.          * we've cleared all interrupts
  1310.          */
  1311.         csr = LMC_CSR_READ (sc, csr_status);
  1312.     } /* end interrupt loop */
  1313.     LMC_EVENT_LOG(LMC_EVENT_INT, firstcsr, csr);
  1314. lmc_int_fail_out:
  1315.     spin_unlock(&sc->lmc_lock);
  1316.     lmc_trace(dev, "lmc_interrupt out");
  1317. }
  1318. static int lmc_start_xmit (struct sk_buff *skb, struct net_device *dev) /*fold00*/
  1319. {
  1320.     lmc_softc_t *sc;
  1321.     u32 flag;
  1322.     int entry;
  1323.     int ret = 0;
  1324.     LMC_SPIN_FLAGS;
  1325.     lmc_trace(dev, "lmc_start_xmit in");
  1326.     sc = dev->priv;
  1327.     spin_lock_irqsave(&sc->lmc_lock, flags);
  1328.     /*
  1329.      * If the transmitter is busy
  1330.      * this must be the 5 second polling
  1331.      * from the kernel which called us.
  1332.      * Poke the chip and try to get it running
  1333.      *
  1334.      */
  1335. #if LINUX_VERSION_CODE < 0x20363
  1336.     if(dev->tbusy != 0){
  1337.         u32 csr6;
  1338.         printk("%s: Xmitter busy|n", dev->name);
  1339. sc->stats.tx_tbusy_calls++ ;
  1340.         if (jiffies - dev->trans_start < TX_TIMEOUT) {
  1341.             ret = 1;
  1342.             goto lmc_start_xmit_bug_out;
  1343.         }
  1344.         /*
  1345.          * Chip seems to have locked up
  1346.          * Reset it
  1347.          * This whips out all our decriptor
  1348.          * table and starts from scartch
  1349.          */
  1350.         LMC_EVENT_LOG(LMC_EVENT_XMTPRCTMO,
  1351.                       LMC_CSR_READ (sc, csr_status),
  1352.                       sc->stats.tx_ProcTimeout);
  1353.         lmc_running_reset (dev);
  1354.         LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0);
  1355.         LMC_EVENT_LOG(LMC_EVENT_RESET2,
  1356.                       lmc_mii_readreg (sc, 0, 16),
  1357.                       lmc_mii_readreg (sc, 0, 17));
  1358.         /* restart the tx processes */
  1359.         csr6 = LMC_CSR_READ (sc, csr_command);
  1360.         LMC_CSR_WRITE (sc, csr_command, csr6 | 0x0002);
  1361.         LMC_CSR_WRITE (sc, csr_command, csr6 | 0x2002);
  1362.         /* immediate transmit */
  1363.         LMC_CSR_WRITE (sc, csr_txpoll, 0);
  1364.         sc->stats.tx_errors++;
  1365.         sc->stats.tx_ProcTimeout++; /* -baz */
  1366.         dev->trans_start = jiffies;
  1367.         ret = 1;
  1368.         goto lmc_start_xmit_bug_out;
  1369.     }
  1370. #endif
  1371.     /* normal path, tbusy known to be zero */
  1372.     entry = sc->lmc_next_tx % LMC_TXDESCS;
  1373.     sc->lmc_txq[entry] = skb;
  1374.     sc->lmc_txring[entry].buffer1 = virt_to_bus (skb->data);
  1375.     LMC_CONSOLE_LOG("xmit", skb->data, skb->len);
  1376. #ifndef GCOM
  1377.     /* If the queue is less than half full, don't interrupt */
  1378.     if (sc->lmc_next_tx - sc->lmc_taint_tx < LMC_TXDESCS / 2)
  1379.     {
  1380.         /* Do not interrupt on completion of this packet */
  1381.         flag = 0x60000000;
  1382.         LMC_XMITTER_FREE(dev);
  1383.     }
  1384.     else if (sc->lmc_next_tx - sc->lmc_taint_tx == LMC_TXDESCS / 2)
  1385.     {
  1386.         /* This generates an interrupt on completion of this packet */
  1387.         flag = 0xe0000000;
  1388.         LMC_XMITTER_FREE(dev);
  1389.     }
  1390.     else if (sc->lmc_next_tx - sc->lmc_taint_tx < LMC_TXDESCS - 1)
  1391.     {
  1392.         /* Do not interrupt on completion of this packet */
  1393.         flag = 0x60000000;
  1394.         LMC_XMITTER_FREE(dev);
  1395.     }
  1396.     else
  1397.     {
  1398.         /* This generates an interrupt on completion of this packet */
  1399.         flag = 0xe0000000;
  1400.         sc->lmc_txfull = 1;
  1401.         LMC_XMITTER_BUSY(dev);
  1402.     }
  1403. #else
  1404.     flag = LMC_TDES_INTERRUPT_ON_COMPLETION;
  1405.     if (sc->lmc_next_tx - sc->lmc_taint_tx >= LMC_TXDESCS - 1)
  1406.     { /* ring full, go busy */
  1407.         sc->lmc_txfull = 1;
  1408.         LMC_XMITTER_BUSY(dev);
  1409.         sc->stats.tx_tbusy1++ ;
  1410.         LMC_EVENT_LOG(LMC_EVENT_TBUSY1, entry, 0);
  1411.     }
  1412. #endif
  1413.     if (entry == LMC_TXDESCS - 1) /* last descriptor in ring */
  1414. flag |= LMC_TDES_END_OF_RING; /* flag as such for Tulip */
  1415.     /* don't pad small packets either */
  1416.     flag = sc->lmc_txring[entry].length = (skb->len) | flag |
  1417. sc->TxDescriptControlInit;
  1418.     /* set the transmit timeout flag to be checked in
  1419.      * the watchdog timer handler. -baz
  1420.      */
  1421.     sc->stats.tx_NoCompleteCnt++;
  1422.     sc->lmc_next_tx++;
  1423.     /* give ownership to the chip */
  1424.     LMC_EVENT_LOG(LMC_EVENT_XMT, flag, entry);
  1425.     sc->lmc_txring[entry].status = 0x80000000;
  1426.     /* send now! */
  1427.     LMC_CSR_WRITE (sc, csr_txpoll, 0);
  1428.     dev->trans_start = jiffies;
  1429. #if LINUX_VERSION_CODE < 0x20363
  1430. lmc_start_xmit_bug_out:
  1431. #endif
  1432.     spin_unlock_irqrestore(&sc->lmc_lock, flags);
  1433.     lmc_trace(dev, "lmc_start_xmit_out");
  1434.     return ret;
  1435. }
  1436. static int lmc_rx (struct net_device *dev) /*fold00*/
  1437. {
  1438.     lmc_softc_t *sc;
  1439.     int i;
  1440.     int rx_work_limit = LMC_RXDESCS;
  1441.     unsigned int next_rx;
  1442.     int rxIntLoopCnt; /* debug -baz */
  1443.     int localLengthErrCnt = 0;
  1444.     long stat;
  1445.     struct sk_buff *skb, *nsb;
  1446.     u16 len;
  1447.     lmc_trace(dev, "lmc_rx in");
  1448.     sc = dev->priv;
  1449.     lmc_led_on(sc, LMC_DS3_LED3);
  1450.     rxIntLoopCnt = 0; /* debug -baz */
  1451.     i = sc->lmc_next_rx % LMC_RXDESCS;
  1452.     next_rx = sc->lmc_next_rx;
  1453.     while (((stat = sc->lmc_rxring[i].status) & LMC_RDES_OWN_BIT) != DESC_OWNED_BY_DC21X4)
  1454.     {
  1455.         rxIntLoopCnt++; /* debug -baz */
  1456.         len = ((stat & LMC_RDES_FRAME_LENGTH) >> RDES_FRAME_LENGTH_BIT_NUMBER);
  1457.         if ((stat & 0x0300) != 0x0300) {  /* Check first segment and last segment */
  1458.             if ((stat & 0x0000ffff) != 0x7fff) {
  1459.                 /* Oversized frame */
  1460.                 sc->stats.rx_length_errors++;
  1461.                 goto skip_packet;
  1462.             }
  1463.         }
  1464.         if(stat & 0x00000008){ /* Catch a dribbling bit error */
  1465.             sc->stats.rx_errors++;
  1466.             sc->stats.rx_frame_errors++;
  1467.             goto skip_packet;
  1468.         }
  1469.         if(stat & 0x00000004){ /* Catch a CRC error by the Xilinx */
  1470.             sc->stats.rx_errors++;
  1471.             sc->stats.rx_crc_errors++;
  1472.             goto skip_packet;
  1473.         }
  1474.         if (len > LMC_PKT_BUF_SZ){
  1475.             sc->stats.rx_length_errors++;
  1476.             localLengthErrCnt++;
  1477.             goto skip_packet;
  1478.         }
  1479.         if (len < sc->lmc_crcSize + 2) {
  1480.             sc->stats.rx_length_errors++;
  1481.             sc->stats.rx_SmallPktCnt++;
  1482.             localLengthErrCnt++;
  1483.             goto skip_packet;
  1484.         }
  1485.         if(stat & 0x00004000){
  1486.             printk(KERN_WARNING "%s: Receiver descriptor error, receiver out of sync?n", dev->name);
  1487.         }
  1488.         len -= sc->lmc_crcSize;
  1489.         skb = sc->lmc_rxq[i];
  1490.         /*
  1491.          * We ran out of memory at some point
  1492.          * just allocate an skb buff and continue.
  1493.          */
  1494.         
  1495.         if(skb == 0x0){
  1496.             nsb = dev_alloc_skb (LMC_PKT_BUF_SZ + 2);
  1497.             if (nsb) {
  1498.                 LMC_SKB_FREE(nsb, 1);
  1499.                 sc->lmc_rxq[i] = nsb;
  1500.                 nsb->dev = dev;
  1501.                 sc->lmc_rxring[i].buffer1 = virt_to_bus (nsb->tail);
  1502.             }
  1503.             sc->failed_recv_alloc = 1;
  1504.             goto skip_packet;
  1505.         }
  1506.         
  1507.         dev->last_rx = jiffies;
  1508.         sc->stats.rx_packets++;
  1509.         sc->stats.rx_bytes += len;
  1510.         LMC_CONSOLE_LOG("recv", skb->data, len);
  1511.         /*
  1512.          * I'm not sure of the sanity of this
  1513.          * Packets could be arriving at a constant
  1514.          * 44.210mbits/sec and we're going to copy
  1515.          * them into a new buffer??
  1516.          */
  1517.         
  1518.         if(len > (LMC_MTU - (LMC_MTU>>2))){ /* len > LMC_MTU * 0.75 */
  1519.             /*
  1520.              * If it's a large packet don't copy it just hand it up
  1521.              */
  1522.         give_it_anyways:
  1523.             sc->lmc_rxq[i] = 0x0;
  1524.             sc->lmc_rxring[i].buffer1 = 0x0;
  1525.             skb_put (skb, len);
  1526.             skb->protocol = lmc_proto_type(sc, skb);
  1527.             skb->protocol = htons(ETH_P_WAN_PPP);
  1528.             skb->mac.raw = skb->data;
  1529. //            skb->nh.raw = skb->data;
  1530.             skb->dev = dev;
  1531.             lmc_proto_netif(sc, skb);
  1532.             /*
  1533.              * This skb will be destroyed by the upper layers, make a new one
  1534.              */
  1535.             nsb = dev_alloc_skb (LMC_PKT_BUF_SZ + 2);
  1536.             if (nsb) {
  1537.                 LMC_SKB_FREE(nsb, 1);
  1538.                 sc->lmc_rxq[i] = nsb;
  1539.                 nsb->dev = dev;
  1540.                 sc->lmc_rxring[i].buffer1 = virt_to_bus (nsb->tail);
  1541.                 /* Transferred to 21140 below */
  1542.             }
  1543.             else {
  1544.                 /*
  1545.                  * We've run out of memory, stop trying to allocate
  1546.                  * memory and exit the interrupt handler
  1547.                  *
  1548.                  * The chip may run out of receivers and stop
  1549.                  * in which care we'll try to allocate the buffer
  1550.                  * again.  (once a second)
  1551.                  */
  1552.                 sc->stats.rx_BuffAllocErr++;
  1553.                 LMC_EVENT_LOG(LMC_EVENT_RCVINT, stat, len);
  1554.                 sc->failed_recv_alloc = 1;
  1555.                 goto skip_out_of_mem;
  1556.             }
  1557.         }
  1558.         else {
  1559.             nsb = dev_alloc_skb(len);
  1560.             if(!nsb) {
  1561.                 goto give_it_anyways;
  1562.             }
  1563.             memcpy(skb_put(nsb, len), skb->data, len);
  1564.             
  1565.             nsb->protocol = lmc_proto_type(sc, skb);
  1566.             nsb->mac.raw = nsb->data;
  1567. //            nsb->nh.raw = nsb->data;
  1568.             nsb->dev = dev;
  1569.             lmc_proto_netif(sc, nsb);
  1570.         }
  1571.     skip_packet:
  1572.         LMC_EVENT_LOG(LMC_EVENT_RCVINT, stat, len);
  1573.         sc->lmc_rxring[i].status = DESC_OWNED_BY_DC21X4;
  1574.         sc->lmc_next_rx++;
  1575.         i = sc->lmc_next_rx % LMC_RXDESCS;
  1576.         rx_work_limit--;
  1577.         if (rx_work_limit < 0)
  1578.             break;
  1579.     }
  1580.     /* detect condition for LMC1000 where DSU cable attaches and fills
  1581.      * descriptors with bogus packets
  1582.      *
  1583.     if (localLengthErrCnt > LMC_RXDESCS - 3) {
  1584.         sc->stats.rx_BadPktSurgeCnt++;
  1585.         LMC_EVENT_LOG(LMC_EVENT_BADPKTSURGE,
  1586.                       localLengthErrCnt,
  1587.                       sc->stats.rx_BadPktSurgeCnt);
  1588.     } */
  1589.     /* save max count of receive descriptors serviced */
  1590.     if (rxIntLoopCnt > sc->stats.rxIntLoopCnt) {
  1591.         sc->stats.rxIntLoopCnt = rxIntLoopCnt; /* debug -baz */
  1592.     }
  1593. #ifdef DEBUG
  1594.     if (rxIntLoopCnt == 0)
  1595.     {
  1596.         for (i = 0; i < LMC_RXDESCS; i++)
  1597.         {
  1598.             if ((sc->lmc_rxring[i].status & LMC_RDES_OWN_BIT)
  1599.                 != DESC_OWNED_BY_DC21X4)
  1600.             {
  1601.                 rxIntLoopCnt++;
  1602.             }
  1603.         }
  1604.         LMC_EVENT_LOG(LMC_EVENT_RCVEND, rxIntLoopCnt, 0);
  1605.     }
  1606. #endif
  1607.     lmc_led_off(sc, LMC_DS3_LED3);
  1608. skip_out_of_mem:
  1609.     lmc_trace(dev, "lmc_rx out");
  1610.     return 0;
  1611. }
  1612. static struct net_device_stats *lmc_get_stats (struct net_device *dev) /*fold00*/
  1613. {
  1614.     lmc_softc_t *sc;
  1615.     LMC_SPIN_FLAGS;
  1616.     lmc_trace(dev, "lmc_get_stats in");
  1617.     sc = dev->priv;
  1618.     spin_lock_irqsave(&sc->lmc_lock, flags);
  1619.     sc->stats.rx_missed_errors += LMC_CSR_READ (sc, csr_missed_frames) & 0xffff;
  1620.     spin_unlock_irqrestore(&sc->lmc_lock, flags);
  1621.     lmc_trace(dev, "lmc_get_stats out");
  1622.     return (struct net_device_stats *) &sc->stats;
  1623. }
  1624. #ifdef MODULE
  1625. int init_module (void) /*fold00*/
  1626. {
  1627.     printk ("lmc: module loadedn");
  1628.     /* Have lmc_probe search for all the cards, and allocate devices */
  1629.     if (lmc_probe (NULL) < 0)
  1630.         return -EIO;
  1631.     return 0;
  1632. }
  1633. void cleanup_module (void) /*fold00*/
  1634. {
  1635.     struct net_device *dev, *next;
  1636.     lmc_softc_t *sc;
  1637.     /* we have no pointer to our devices, since they are all dynamically
  1638.      * allocated.  So, here we loop through all the network devices
  1639.      * looking for ours.  When found, dispose of them properly.
  1640.      */
  1641.     for (dev = Lmc_root_dev;
  1642.          dev != NULL;
  1643.          dev = next )
  1644.     {
  1645.         next = ((lmc_softc_t *) dev->priv)->next_module; /* get it now before we deallocate it */
  1646.         printk ("%s: removing...n", dev->name);
  1647.         /* close the syncppp stuff, and release irq. Close is run on unreg net */
  1648.         lmc_close (dev);
  1649. sc = dev->priv;
  1650.         if (sc != NULL)
  1651.             lmc_proto_detach(sc);
  1652.         /* Remove the device from the linked list */
  1653.         unregister_netdev (dev);
  1654.         /* Let go of the io region */;
  1655.         release_region (dev->base_addr, LMC_REG_RANGE);
  1656.         /* free our allocated structures. */
  1657.         kfree (dev->priv);
  1658.         dev->priv = NULL;
  1659.         kfree ((struct ppp_device *) dev);
  1660.         dev = NULL;
  1661.     }
  1662.     Lmc_root_dev = NULL;
  1663.     printk ("lmc module unloadedn");
  1664. }
  1665. #endif
  1666. unsigned lmc_mii_readreg (lmc_softc_t * const sc, unsigned devaddr, unsigned regno) /*fold00*/
  1667. {
  1668.     int i;
  1669.     int command = (0xf6 << 10) | (devaddr << 5) | regno;
  1670.     int retval = 0;
  1671.     lmc_trace(sc->lmc_device, "lmc_mii_readreg in");
  1672.     LMC_MII_SYNC (sc);
  1673.     lmc_trace(sc->lmc_device, "lmc_mii_readreg: done sync");
  1674.     for (i = 15; i >= 0; i--)
  1675.     {
  1676.         int dataval = (command & (1 << i)) ? 0x20000 : 0;
  1677.         LMC_CSR_WRITE (sc, csr_9, dataval);
  1678.         lmc_delay ();
  1679.         /* __SLOW_DOWN_IO; */
  1680.         LMC_CSR_WRITE (sc, csr_9, dataval | 0x10000);
  1681.         lmc_delay ();
  1682.         /* __SLOW_DOWN_IO; */
  1683.     }
  1684.     lmc_trace(sc->lmc_device, "lmc_mii_readreg: done1");
  1685.     for (i = 19; i > 0; i--)
  1686.     {
  1687.         LMC_CSR_WRITE (sc, csr_9, 0x40000);
  1688.         lmc_delay ();
  1689.         /* __SLOW_DOWN_IO; */
  1690.         retval = (retval << 1) | ((LMC_CSR_READ (sc, csr_9) & 0x80000) ? 1 : 0);
  1691.         LMC_CSR_WRITE (sc, csr_9, 0x40000 | 0x10000);
  1692.         lmc_delay ();
  1693.         /* __SLOW_DOWN_IO; */
  1694.     }
  1695.     lmc_trace(sc->lmc_device, "lmc_mii_readreg out");
  1696.     return (retval >> 1) & 0xffff;
  1697. }
  1698. void lmc_mii_writereg (lmc_softc_t * const sc, unsigned devaddr, unsigned regno, unsigned data) /*fold00*/
  1699. {
  1700.     int i = 32;
  1701.     int command = (0x5002 << 16) | (devaddr << 23) | (regno << 18) | data;
  1702.     lmc_trace(sc->lmc_device, "lmc_mii_writereg in");
  1703.     LMC_MII_SYNC (sc);
  1704.     i = 31;
  1705.     while (i >= 0)
  1706.     {
  1707.         int datav;
  1708.         if (command & (1 << i))
  1709.             datav = 0x20000;
  1710.         else
  1711.             datav = 0x00000;
  1712.         LMC_CSR_WRITE (sc, csr_9, datav);
  1713.         lmc_delay ();
  1714.         /* __SLOW_DOWN_IO; */
  1715.         LMC_CSR_WRITE (sc, csr_9, (datav | 0x10000));
  1716.         lmc_delay ();
  1717.         /* __SLOW_DOWN_IO; */
  1718.         i--;
  1719.     }
  1720.     i = 2;
  1721.     while (i > 0)
  1722.     {
  1723.         LMC_CSR_WRITE (sc, csr_9, 0x40000);
  1724.         lmc_delay ();
  1725.         /* __SLOW_DOWN_IO; */
  1726.         LMC_CSR_WRITE (sc, csr_9, 0x50000);
  1727.         lmc_delay ();
  1728.         /* __SLOW_DOWN_IO; */
  1729.         i--;
  1730.     }
  1731.     lmc_trace(sc->lmc_device, "lmc_mii_writereg out");
  1732. }
  1733. static void lmc_softreset (lmc_softc_t * const sc) /*fold00*/
  1734. {
  1735.     int i;
  1736.     lmc_trace(sc->lmc_device, "lmc_softreset in");
  1737.     /* Initialize the receive rings and buffers. */
  1738.     sc->lmc_txfull = 0;
  1739.     sc->lmc_next_rx = 0;
  1740.     sc->lmc_next_tx = 0;
  1741.     sc->lmc_taint_rx = 0;
  1742.     sc->lmc_taint_tx = 0;
  1743.     /*
  1744.      * Setup each one of the receiver buffers
  1745.      * allocate an skbuff for each one, setup the descriptor table
  1746.      * and point each buffer at the next one
  1747.      */
  1748.     for (i = 0; i < LMC_RXDESCS; i++)
  1749.     {
  1750.         struct sk_buff *skb;
  1751.         if (sc->lmc_rxq[i] == NULL)
  1752.         {
  1753.             skb = dev_alloc_skb (LMC_PKT_BUF_SZ + 2);
  1754.             if(skb == NULL){
  1755.                 printk(KERN_WARNING "%s: Failed to allocate receiver ring, will try againn", sc->name);
  1756.                 sc->failed_ring = 1;
  1757.                 break;
  1758.             }
  1759.             else{
  1760.                 sc->lmc_rxq[i] = skb;
  1761.             }
  1762.         }
  1763.         else
  1764.         {
  1765.             skb = sc->lmc_rxq[i];
  1766.         }
  1767.         skb->dev = sc->lmc_device;
  1768.         LMC_SKB_FREE(skb, 1);
  1769.         /* owned by 21140 */
  1770.         sc->lmc_rxring[i].status = 0x80000000;
  1771.         /* used to be PKT_BUF_SZ now uses skb since we loose some to head room */
  1772.         sc->lmc_rxring[i].length = skb->end - skb->data;
  1773.         /* use to be tail which is dumb since you're thinking why write
  1774.          * to the end of the packj,et but since there's nothing there tail == data
  1775.          */
  1776.         sc->lmc_rxring[i].buffer1 = virt_to_bus (skb->data);
  1777.         /* This is fair since the structure is static and we have the next address */
  1778.         sc->lmc_rxring[i].buffer2 = virt_to_bus (&sc->lmc_rxring[i + 1]);
  1779.     }
  1780.     /*
  1781.      * Sets end of ring
  1782.      */
  1783.     sc->lmc_rxring[i - 1].length |= 0x02000000; /* Set end of buffers flag */
  1784.     sc->lmc_rxring[i - 1].buffer2 = virt_to_bus (&sc->lmc_rxring[0]); /* Point back to the start */
  1785.     LMC_CSR_WRITE (sc, csr_rxlist, virt_to_bus (sc->lmc_rxring)); /* write base address */
  1786.     /* Initialize the transmit rings and buffers */
  1787.     for (i = 0; i < LMC_TXDESCS; i++)
  1788.     {
  1789.         if (sc->lmc_txq[i] != NULL){ /* have buffer */
  1790.             dev_kfree_skb(sc->lmc_txq[i]); /* free it */
  1791.             sc->stats.tx_dropped++;      /* We just dropped a packet */
  1792.         }
  1793.         sc->lmc_txq[i] = 0;
  1794.         sc->lmc_txring[i].status = 0x00000000;
  1795.         sc->lmc_txring[i].buffer2 = virt_to_bus (&sc->lmc_txring[i + 1]);
  1796.     }
  1797.     sc->lmc_txring[i - 1].buffer2 = virt_to_bus (&sc->lmc_txring[0]);
  1798.     LMC_CSR_WRITE (sc, csr_txlist, virt_to_bus (sc->lmc_txring));
  1799.     lmc_trace(sc->lmc_device, "lmc_softreset out");
  1800. }
  1801. static int lmc_set_config(struct net_device *dev, struct ifmap *map) /*fold00*/
  1802. {
  1803.     lmc_trace(dev, "lmc_set_config in");
  1804.     lmc_trace(dev, "lmc_set_config out");
  1805.     return -EOPNOTSUPP;
  1806. }
  1807. void lmc_gpio_mkinput(lmc_softc_t * const sc, u_int32_t bits) /*fold00*/
  1808. {
  1809.     lmc_trace(sc->lmc_device, "lmc_gpio_mkinput in");
  1810.     sc->lmc_gpio_io &= ~bits;
  1811.     LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io));
  1812.     lmc_trace(sc->lmc_device, "lmc_gpio_mkinput out");
  1813. }
  1814. void lmc_gpio_mkoutput(lmc_softc_t * const sc, u_int32_t bits) /*fold00*/
  1815. {
  1816.     lmc_trace(sc->lmc_device, "lmc_gpio_mkoutput in");
  1817.     sc->lmc_gpio_io |= bits;
  1818.     LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io));
  1819.     lmc_trace(sc->lmc_device, "lmc_gpio_mkoutput out");
  1820. }
  1821. void lmc_led_on(lmc_softc_t * const sc, u_int32_t led) /*fold00*/
  1822. {
  1823.     lmc_trace(sc->lmc_device, "lmc_led_on in");
  1824.     if((~sc->lmc_miireg16) & led){ /* Already on! */
  1825.         lmc_trace(sc->lmc_device, "lmc_led_on aon out");
  1826.         return;
  1827.     }
  1828.     
  1829.     sc->lmc_miireg16 &= ~led;
  1830.     lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
  1831.     lmc_trace(sc->lmc_device, "lmc_led_on out");
  1832. }
  1833. void lmc_led_off(lmc_softc_t * const sc, u_int32_t led) /*fold00*/
  1834. {
  1835.     lmc_trace(sc->lmc_device, "lmc_led_off in");
  1836.     if(sc->lmc_miireg16 & led){ /* Already set don't do anything */
  1837.         lmc_trace(sc->lmc_device, "lmc_led_off aoff out");
  1838.         return;
  1839.     }
  1840.     
  1841.     sc->lmc_miireg16 |= led;
  1842.     lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
  1843.     lmc_trace(sc->lmc_device, "lmc_led_off out");
  1844. }
  1845. static void lmc_reset(lmc_softc_t * const sc) /*fold00*/
  1846. {
  1847.     lmc_trace(sc->lmc_device, "lmc_reset in");
  1848.     sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET;
  1849.     lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
  1850.     sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET;
  1851.     lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
  1852.     /*
  1853.      * make some of the GPIO pins be outputs
  1854.      */
  1855.     lmc_gpio_mkoutput(sc, LMC_GEP_RESET);
  1856.     /*
  1857.      * RESET low to force state reset.  This also forces
  1858.      * the transmitter clock to be internal, but we expect to reset
  1859.      * that later anyway.
  1860.      */
  1861.     sc->lmc_gpio &= ~(LMC_GEP_RESET);
  1862.     LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
  1863.     /*
  1864.      * hold for more than 10 microseconds
  1865.      */
  1866.     udelay(50);
  1867.     /*
  1868.      * stop driving Xilinx-related signals
  1869.      */
  1870.     lmc_gpio_mkinput(sc, LMC_GEP_RESET);
  1871.     /*
  1872.      * Call media specific init routine
  1873.      */
  1874.     sc->lmc_media->init(sc);
  1875.     sc->stats.resetCount++;
  1876.     lmc_trace(sc->lmc_device, "lmc_reset out");
  1877. }
  1878. static void lmc_dec_reset(lmc_softc_t * const sc) /*fold00*/
  1879. {
  1880.     u_int32_t val;
  1881.     lmc_trace(sc->lmc_device, "lmc_dec_reset in");
  1882.     /*
  1883.      * disable all interrupts
  1884.      */
  1885.     sc->lmc_intrmask = 0;
  1886.     LMC_CSR_WRITE(sc, csr_intr, sc->lmc_intrmask);
  1887.     /*
  1888.      * Reset the chip with a software reset command.
  1889.      * Wait 10 microseconds (actually 50 PCI cycles but at
  1890.      * 33MHz that comes to two microseconds but wait a
  1891.      * bit longer anyways)
  1892.      */
  1893.     LMC_CSR_WRITE(sc, csr_busmode, TULIP_BUSMODE_SWRESET);
  1894.     udelay(25);
  1895. #ifdef __sparc__
  1896.     sc->lmc_busmode = LMC_CSR_READ(sc, csr_busmode);
  1897.     sc->lmc_busmode = 0x00100000;
  1898.     sc->lmc_busmode &= ~TULIP_BUSMODE_SWRESET;
  1899.     LMC_CSR_WRITE(sc, csr_busmode, sc->lmc_busmode);
  1900. #endif
  1901.     sc->lmc_cmdmode = LMC_CSR_READ(sc, csr_command);
  1902.     /*
  1903.      * We want:
  1904.      *   no ethernet address in frames we write
  1905.      *   disable padding (txdesc, padding disable)
  1906.      *   ignore runt frames (rdes0 bit 15)
  1907.      *   no receiver watchdog or transmitter jabber timer
  1908.      *       (csr15 bit 0,14 == 1)
  1909.      *   if using 16-bit CRC, turn off CRC (trans desc, crc disable)
  1910.      */
  1911.     sc->lmc_cmdmode |= ( TULIP_CMD_PROMISCUOUS
  1912.                          | TULIP_CMD_FULLDUPLEX
  1913.                          | TULIP_CMD_PASSBADPKT
  1914.                          | TULIP_CMD_NOHEARTBEAT
  1915.                          | TULIP_CMD_PORTSELECT
  1916.                          | TULIP_CMD_RECEIVEALL
  1917.                          | TULIP_CMD_MUSTBEONE
  1918.                        );
  1919.     sc->lmc_cmdmode &= ~( TULIP_CMD_OPERMODE
  1920.                           | TULIP_CMD_THRESHOLDCTL
  1921.                           | TULIP_CMD_STOREFWD
  1922.                           | TULIP_CMD_TXTHRSHLDCTL
  1923.                         );
  1924.     LMC_CSR_WRITE(sc, csr_command, sc->lmc_cmdmode);
  1925.     /*
  1926.      * disable receiver watchdog and transmit jabber
  1927.      */
  1928.     val = LMC_CSR_READ(sc, csr_sia_general);
  1929.     val |= (TULIP_WATCHDOG_TXDISABLE | TULIP_WATCHDOG_RXDISABLE);
  1930.     LMC_CSR_WRITE(sc, csr_sia_general, val);
  1931.     lmc_trace(sc->lmc_device, "lmc_dec_reset out");
  1932. }
  1933. static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, /*fold00*/
  1934.                          size_t csr_size)
  1935. {
  1936.     lmc_trace(sc->lmc_device, "lmc_initcsrs in");
  1937.     sc->lmc_csrs.csr_busmode         = csr_base +  0 * csr_size;
  1938.     sc->lmc_csrs.csr_txpoll = csr_base +  1 * csr_size;
  1939.     sc->lmc_csrs.csr_rxpoll = csr_base +  2 * csr_size;
  1940.     sc->lmc_csrs.csr_rxlist = csr_base +  3 * csr_size;
  1941.     sc->lmc_csrs.csr_txlist = csr_base +  4 * csr_size;
  1942.     sc->lmc_csrs.csr_status = csr_base +  5 * csr_size;
  1943.     sc->lmc_csrs.csr_command         = csr_base +  6 * csr_size;
  1944.     sc->lmc_csrs.csr_intr = csr_base +  7 * csr_size;
  1945.     sc->lmc_csrs.csr_missed_frames = csr_base +  8 * csr_size;
  1946.     sc->lmc_csrs.csr_9         = csr_base +  9 * csr_size;
  1947.     sc->lmc_csrs.csr_10         = csr_base + 10 * csr_size;
  1948.     sc->lmc_csrs.csr_11         = csr_base + 11 * csr_size;
  1949.     sc->lmc_csrs.csr_12         = csr_base + 12 * csr_size;
  1950.     sc->lmc_csrs.csr_13         = csr_base + 13 * csr_size;
  1951.     sc->lmc_csrs.csr_14         = csr_base + 14 * csr_size;
  1952.     sc->lmc_csrs.csr_15         = csr_base + 15 * csr_size;
  1953.     lmc_trace(sc->lmc_device, "lmc_initcsrs out");
  1954. }
  1955. #if LINUX_VERSION_CODE >= 0x20363
  1956. static void lmc_driver_timeout(struct net_device *dev) { /*fold00*/
  1957.     lmc_softc_t *sc;
  1958.     u32 csr6;
  1959.     LMC_SPIN_FLAGS;
  1960.     lmc_trace(dev, "lmc_driver_timeout in");
  1961.     sc = dev->priv;
  1962.     spin_lock_irqsave(&sc->lmc_lock, flags);
  1963.     printk("%s: Xmitter busy|n", dev->name);
  1964.     sc->stats.tx_tbusy_calls++ ;
  1965.     if (jiffies - dev->trans_start < TX_TIMEOUT) {
  1966.         goto bug_out;
  1967.     }
  1968.     /*
  1969.      * Chip seems to have locked up
  1970.      * Reset it
  1971.      * This whips out all our decriptor
  1972.      * table and starts from scartch
  1973.      */
  1974.     LMC_EVENT_LOG(LMC_EVENT_XMTPRCTMO,
  1975.                   LMC_CSR_READ (sc, csr_status),
  1976.                   sc->stats.tx_ProcTimeout);
  1977.     lmc_running_reset (dev);
  1978.     LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0);
  1979.     LMC_EVENT_LOG(LMC_EVENT_RESET2,
  1980.                   lmc_mii_readreg (sc, 0, 16),
  1981.                   lmc_mii_readreg (sc, 0, 17));
  1982.     /* restart the tx processes */
  1983.     csr6 = LMC_CSR_READ (sc, csr_command);
  1984.     LMC_CSR_WRITE (sc, csr_command, csr6 | 0x0002);
  1985.     LMC_CSR_WRITE (sc, csr_command, csr6 | 0x2002);
  1986.     /* immediate transmit */
  1987.     LMC_CSR_WRITE (sc, csr_txpoll, 0);
  1988.     sc->stats.tx_errors++;
  1989.     sc->stats.tx_ProcTimeout++; /* -baz */
  1990.     dev->trans_start = jiffies;
  1991. bug_out:
  1992.     spin_unlock_irqrestore(&sc->lmc_lock, flags);
  1993.     lmc_trace(dev, "lmc_driver_timout out");
  1994. }
  1995. int lmc_setup(void) { /*FOLD00*/
  1996.    return lmc_probe(NULL);
  1997. }
  1998. #endif