• Home
  • Raw
  • Download

Lines Matching refs:sc

95 static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, size_t csr_size);
100 static void lmc_reset(lmc_softc_t * const sc);
101 static void lmc_dec_reset(lmc_softc_t * const sc);
111 lmc_softc_t *sc = dev_to_sc(dev); in lmc_siocdevprivate() local
128 if (copy_to_user(data, &sc->ictl, sizeof(lmc_ctl_t))) in lmc_siocdevprivate()
150 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
151 sc->lmc_media->set_status (sc, &ctl); in lmc_siocdevprivate()
153 if(ctl.crc_length != sc->ictl.crc_length) { in lmc_siocdevprivate()
154 sc->lmc_media->set_crc_length(sc, ctl.crc_length); in lmc_siocdevprivate()
155 if (sc->ictl.crc_length == LMC_CTL_CRC_LENGTH_16) in lmc_siocdevprivate()
156 sc->TxDescriptControlInit |= LMC_TDES_ADD_CRC_DISABLE; in lmc_siocdevprivate()
158 sc->TxDescriptControlInit &= ~LMC_TDES_ADD_CRC_DISABLE; in lmc_siocdevprivate()
160 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
167 u16 old_type = sc->if_type; in lmc_siocdevprivate()
187 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
188 lmc_proto_close(sc); in lmc_siocdevprivate()
190 sc->if_type = new_type; in lmc_siocdevprivate()
191 lmc_proto_attach(sc); in lmc_siocdevprivate()
192 ret = lmc_proto_open(sc); in lmc_siocdevprivate()
193 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
198 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
199 sc->lmc_xinfo.Magic0 = 0xBEEFCAFE; in lmc_siocdevprivate()
201 sc->lmc_xinfo.PciCardType = sc->lmc_cardtype; in lmc_siocdevprivate()
202 sc->lmc_xinfo.PciSlotNumber = 0; in lmc_siocdevprivate()
203 sc->lmc_xinfo.DriverMajorVersion = DRIVER_MAJOR_VERSION; in lmc_siocdevprivate()
204 sc->lmc_xinfo.DriverMinorVersion = DRIVER_MINOR_VERSION; in lmc_siocdevprivate()
205 sc->lmc_xinfo.DriverSubVersion = DRIVER_SUB_VERSION; in lmc_siocdevprivate()
206 sc->lmc_xinfo.XilinxRevisionNumber = in lmc_siocdevprivate()
207 lmc_mii_readreg (sc, 0, 3) & 0xf; in lmc_siocdevprivate()
208 sc->lmc_xinfo.MaxFrameSize = LMC_PKT_BUF_SZ; in lmc_siocdevprivate()
209 sc->lmc_xinfo.link_status = sc->lmc_media->get_link_status (sc); in lmc_siocdevprivate()
210 sc->lmc_xinfo.mii_reg16 = lmc_mii_readreg (sc, 0, 16); in lmc_siocdevprivate()
211 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
213 sc->lmc_xinfo.Magic1 = 0xDEADBEEF; in lmc_siocdevprivate()
215 if (copy_to_user(data, &sc->lmc_xinfo, sizeof(struct lmc_xinfo))) in lmc_siocdevprivate()
223 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
224 if (sc->lmc_cardtype == LMC_CARDTYPE_T1) { in lmc_siocdevprivate()
225 lmc_mii_writereg(sc, 0, 17, T1FRAMER_FERR_LSB); in lmc_siocdevprivate()
226 sc->extra_stats.framingBitErrorCount += in lmc_siocdevprivate()
227 lmc_mii_readreg(sc, 0, 18) & 0xff; in lmc_siocdevprivate()
228 lmc_mii_writereg(sc, 0, 17, T1FRAMER_FERR_MSB); in lmc_siocdevprivate()
229 sc->extra_stats.framingBitErrorCount += in lmc_siocdevprivate()
230 (lmc_mii_readreg(sc, 0, 18) & 0xff) << 8; in lmc_siocdevprivate()
231 lmc_mii_writereg(sc, 0, 17, T1FRAMER_LCV_LSB); in lmc_siocdevprivate()
232 sc->extra_stats.lineCodeViolationCount += in lmc_siocdevprivate()
233 lmc_mii_readreg(sc, 0, 18) & 0xff; in lmc_siocdevprivate()
234 lmc_mii_writereg(sc, 0, 17, T1FRAMER_LCV_MSB); in lmc_siocdevprivate()
235 sc->extra_stats.lineCodeViolationCount += in lmc_siocdevprivate()
236 (lmc_mii_readreg(sc, 0, 18) & 0xff) << 8; in lmc_siocdevprivate()
237 lmc_mii_writereg(sc, 0, 17, T1FRAMER_AERR); in lmc_siocdevprivate()
238 regVal = lmc_mii_readreg(sc, 0, 18) & 0xff; in lmc_siocdevprivate()
240 sc->extra_stats.lossOfFrameCount += in lmc_siocdevprivate()
242 sc->extra_stats.changeOfFrameAlignmentCount += in lmc_siocdevprivate()
244 sc->extra_stats.severelyErroredFrameCount += in lmc_siocdevprivate()
247 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
248 if (copy_to_user(data, &sc->lmc_device->stats, in lmc_siocdevprivate()
249 sizeof(sc->lmc_device->stats)) || in lmc_siocdevprivate()
250 copy_to_user(data + sizeof(sc->lmc_device->stats), in lmc_siocdevprivate()
251 &sc->extra_stats, sizeof(sc->extra_stats))) in lmc_siocdevprivate()
263 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
264 memset(&sc->lmc_device->stats, 0, sizeof(sc->lmc_device->stats)); in lmc_siocdevprivate()
265 memset(&sc->extra_stats, 0, sizeof(sc->extra_stats)); in lmc_siocdevprivate()
266 sc->extra_stats.check = STATCHECK; in lmc_siocdevprivate()
267 sc->extra_stats.version_size = (DRIVER_VERSION << 16) + in lmc_siocdevprivate()
268 sizeof(sc->lmc_device->stats) + sizeof(sc->extra_stats); in lmc_siocdevprivate()
269 sc->extra_stats.lmc_cardtype = sc->lmc_cardtype; in lmc_siocdevprivate()
270 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
289 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
290 sc->lmc_media->set_circuit_type(sc, ctl.circuit_type); in lmc_siocdevprivate()
291 sc->ictl.circuit_type = ctl.circuit_type; in lmc_siocdevprivate()
292 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
303 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
305 printk (" REG16 before reset +%04x\n", lmc_mii_readreg (sc, 0, 16)); in lmc_siocdevprivate()
307 printk (" REG16 after reset +%04x\n", lmc_mii_readreg (sc, 0, 16)); in lmc_siocdevprivate()
309 … LMC_EVENT_LOG(LMC_EVENT_FORCEDRESET, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16)); in lmc_siocdevprivate()
310 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
330 if (sc->lmc_cardtype != LMC_CARDTYPE_T1){ in lmc_siocdevprivate()
356 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
357 lmc_mii_readreg (sc, 0, 16); in lmc_siocdevprivate()
362 lmc_gpio_mkinput(sc, 0xff); in lmc_siocdevprivate()
367 lmc_gpio_mkoutput(sc, LMC_GEP_RESET); in lmc_siocdevprivate()
375 sc->lmc_gpio &= ~LMC_GEP_RESET; in lmc_siocdevprivate()
376 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_siocdevprivate()
384 sc->lmc_gpio |= LMC_GEP_RESET; in lmc_siocdevprivate()
385 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_siocdevprivate()
391 lmc_gpio_mkinput(sc, 0xff); in lmc_siocdevprivate()
394 sc->lmc_media->set_link_status (sc, 1); in lmc_siocdevprivate()
395 sc->lmc_media->set_status (sc, NULL); in lmc_siocdevprivate()
401 lmc_led_on(sc, LMC_DS3_LED0); in lmc_siocdevprivate()
403 lmc_led_off(sc, LMC_DS3_LED0); in lmc_siocdevprivate()
404 lmc_led_on(sc, LMC_DS3_LED1); in lmc_siocdevprivate()
406 lmc_led_off(sc, LMC_DS3_LED1); in lmc_siocdevprivate()
407 lmc_led_on(sc, LMC_DS3_LED3); in lmc_siocdevprivate()
409 lmc_led_off(sc, LMC_DS3_LED3); in lmc_siocdevprivate()
410 lmc_led_on(sc, LMC_DS3_LED2); in lmc_siocdevprivate()
412 lmc_led_off(sc, LMC_DS3_LED2); in lmc_siocdevprivate()
415 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
427 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
428 lmc_mii_readreg (sc, 0, 16); in lmc_siocdevprivate()
433 lmc_gpio_mkinput(sc, 0xff); in lmc_siocdevprivate()
438 lmc_gpio_mkoutput(sc, LMC_GEP_DP | LMC_GEP_RESET); in lmc_siocdevprivate()
446 sc->lmc_gpio &= ~(LMC_GEP_RESET | LMC_GEP_DP); in lmc_siocdevprivate()
447 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_siocdevprivate()
455 sc->lmc_gpio |= LMC_GEP_DP | LMC_GEP_RESET; in lmc_siocdevprivate()
456 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_siocdevprivate()
461 while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 && in lmc_siocdevprivate()
469 lmc_gpio_mkinput(sc, 0xff); in lmc_siocdevprivate()
470 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
498 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_siocdevprivate()
499 lmc_gpio_mkinput(sc, 0xff); in lmc_siocdevprivate()
512 sc->lmc_gpio = 0x00; in lmc_siocdevprivate()
513 sc->lmc_gpio &= ~LMC_GEP_DP; in lmc_siocdevprivate()
514 sc->lmc_gpio &= ~LMC_GEP_RESET; in lmc_siocdevprivate()
515 sc->lmc_gpio |= LMC_GEP_MODE; in lmc_siocdevprivate()
516 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_siocdevprivate()
518 lmc_gpio_mkoutput(sc, LMC_GEP_MODE | LMC_GEP_DP | LMC_GEP_RESET); in lmc_siocdevprivate()
533 lmc_gpio_mkinput(sc, LMC_GEP_DP | LMC_GEP_RESET); in lmc_siocdevprivate()
538 sc->lmc_gpio = 0x00; in lmc_siocdevprivate()
539 sc->lmc_gpio |= LMC_GEP_MODE; in lmc_siocdevprivate()
540 sc->lmc_gpio |= LMC_GEP_DATA; in lmc_siocdevprivate()
541 sc->lmc_gpio |= LMC_GEP_CLK; in lmc_siocdevprivate()
542 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_siocdevprivate()
544 lmc_gpio_mkoutput(sc, LMC_GEP_DATA | LMC_GEP_CLK | LMC_GEP_MODE ); in lmc_siocdevprivate()
549 while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 && in lmc_siocdevprivate()
558 sc->lmc_gpio &= ~LMC_GEP_DATA; /* Data is 0 */ in lmc_siocdevprivate()
561 sc->lmc_gpio |= LMC_GEP_DATA; /* Data is 1 */ in lmc_siocdevprivate()
565 sc->lmc_gpio |= LMC_GEP_DATA; /* Assume it's 1 */ in lmc_siocdevprivate()
567 sc->lmc_gpio &= ~LMC_GEP_CLK; /* Clock to zero */ in lmc_siocdevprivate()
568 sc->lmc_gpio |= LMC_GEP_MODE; in lmc_siocdevprivate()
569 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_siocdevprivate()
572 sc->lmc_gpio |= LMC_GEP_CLK; /* Put the clack back to one */ in lmc_siocdevprivate()
573 sc->lmc_gpio |= LMC_GEP_MODE; in lmc_siocdevprivate()
574 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_siocdevprivate()
577 if((LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0){ in lmc_siocdevprivate()
580 else if((LMC_CSR_READ(sc, csr_gp) & LMC_GEP_DP) == 0){ in lmc_siocdevprivate()
587 lmc_gpio_mkinput(sc, 0xff); in lmc_siocdevprivate()
589 sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET; in lmc_siocdevprivate()
590 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_siocdevprivate()
592 sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET; in lmc_siocdevprivate()
593 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_siocdevprivate()
594 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_siocdevprivate()
608 sc->lmc_txfull = 0; in lmc_siocdevprivate()
623 lmc_softc_t *sc = from_timer(sc, t, timer); in lmc_watchdog() local
624 struct net_device *dev = sc->lmc_device; in lmc_watchdog()
629 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_watchdog()
631 if(sc->check != 0xBEAFCAFE){ in lmc_watchdog()
633 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_watchdog()
642 LMC_CSR_WRITE (sc, csr_15, 0x00000011); in lmc_watchdog()
643 sc->lmc_cmdmode |= TULIP_CMD_TXRUN | TULIP_CMD_RXRUN; in lmc_watchdog()
644 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode); in lmc_watchdog()
646 if (sc->lmc_ok == 0) in lmc_watchdog()
649 LMC_EVENT_LOG(LMC_EVENT_WATCHDOG, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16)); in lmc_watchdog()
654 if (sc->lmc_taint_tx == sc->lastlmc_taint_tx && in lmc_watchdog()
655 sc->lmc_device->stats.tx_packets > sc->lasttx_packets && in lmc_watchdog()
656 sc->tx_TimeoutInd == 0) in lmc_watchdog()
660 sc->tx_TimeoutInd = 1; in lmc_watchdog()
662 else if (sc->lmc_taint_tx == sc->lastlmc_taint_tx && in lmc_watchdog()
663 sc->lmc_device->stats.tx_packets > sc->lasttx_packets && in lmc_watchdog()
664 sc->tx_TimeoutInd) in lmc_watchdog()
667 LMC_EVENT_LOG(LMC_EVENT_XMTINTTMO, LMC_CSR_READ (sc, csr_status), 0); in lmc_watchdog()
669 sc->tx_TimeoutDisplay = 1; in lmc_watchdog()
670 sc->extra_stats.tx_TimeoutCnt++; in lmc_watchdog()
677 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0); in lmc_watchdog()
685 LMC_EVENT_LOG(LMC_EVENT_RESET2, lmc_mii_readreg (sc, 0, 16), lmc_mii_readreg (sc, 0, 17)); in lmc_watchdog()
688 sc->tx_TimeoutInd = 0; in lmc_watchdog()
689 sc->lastlmc_taint_tx = sc->lmc_taint_tx; in lmc_watchdog()
690 sc->lasttx_packets = sc->lmc_device->stats.tx_packets; in lmc_watchdog()
692 sc->tx_TimeoutInd = 0; in lmc_watchdog()
693 sc->lastlmc_taint_tx = sc->lmc_taint_tx; in lmc_watchdog()
694 sc->lasttx_packets = sc->lmc_device->stats.tx_packets; in lmc_watchdog()
700 link_status = sc->lmc_media->get_link_status (sc); in lmc_watchdog()
706 if ((link_status == 0) && (sc->last_link_status != 0)) { in lmc_watchdog()
708 sc->last_link_status = 0; in lmc_watchdog()
719 if (link_status != 0 && sc->last_link_status == 0) { in lmc_watchdog()
721 sc->last_link_status = 1; in lmc_watchdog()
728 sc->lmc_media->watchdog(sc); in lmc_watchdog()
734 LMC_CSR_WRITE(sc, csr_rxpoll, 0); in lmc_watchdog()
740 if(sc->failed_ring == 1){ in lmc_watchdog()
745 sc->failed_ring = 0; in lmc_watchdog()
746 lmc_softreset(sc); in lmc_watchdog()
748 if(sc->failed_recv_alloc == 1){ in lmc_watchdog()
754 sc->failed_recv_alloc = 0; in lmc_watchdog()
755 lmc_softreset(sc); in lmc_watchdog()
764 ticks = LMC_CSR_READ (sc, csr_gp_timer); in lmc_watchdog()
765 LMC_CSR_WRITE (sc, csr_gp_timer, 0xffffffffUL); in lmc_watchdog()
766 sc->ictl.ticks = 0x0000ffff - (ticks & 0x0000ffff); in lmc_watchdog()
771 sc->timer.expires = jiffies + (HZ); in lmc_watchdog()
772 add_timer (&sc->timer); in lmc_watchdog()
774 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_watchdog()
797 lmc_softc_t *sc; in lmc_init_one() local
819 sc = devm_kzalloc(&pdev->dev, sizeof(lmc_softc_t), GFP_KERNEL); in lmc_init_one()
820 if (!sc) in lmc_init_one()
823 dev = alloc_hdlcdev(sc); in lmc_init_one()
836 sc->lmc_device = dev; in lmc_init_one()
837 sc->name = dev->name; in lmc_init_one()
838 sc->if_type = LMC_PPP; in lmc_init_one()
839 sc->check = 0xBEAFCAFE; in lmc_init_one()
849 lmc_proto_attach(sc); in lmc_init_one()
853 spin_lock_init(&sc->lmc_lock); in lmc_init_one()
866 sc->lmc_cardtype = LMC_CARDTYPE_UNKNOWN; in lmc_init_one()
867 sc->lmc_timing = LMC_CTL_CLOCK_SOURCE_EXT; in lmc_init_one()
881 sc->lmc_cardtype = LMC_CARDTYPE_HSSI; in lmc_init_one()
882 sc->lmc_media = &lmc_hssi_media; in lmc_init_one()
886 sc->lmc_cardtype = LMC_CARDTYPE_DS3; in lmc_init_one()
887 sc->lmc_media = &lmc_ds3_media; in lmc_init_one()
891 sc->lmc_cardtype = LMC_CARDTYPE_SSI; in lmc_init_one()
892 sc->lmc_media = &lmc_ssi_media; in lmc_init_one()
896 sc->lmc_cardtype = LMC_CARDTYPE_T1; in lmc_init_one()
897 sc->lmc_media = &lmc_t1_media; in lmc_init_one()
906 lmc_initcsrs (sc, dev->base_addr, 8); in lmc_init_one()
908 lmc_gpio_mkinput (sc, 0xff); in lmc_init_one()
909 sc->lmc_gpio = 0; /* drive no signals yet */ in lmc_init_one()
911 sc->lmc_media->defaults (sc); in lmc_init_one()
913 sc->lmc_media->set_link_status (sc, LMC_LINK_UP); in lmc_init_one()
918 AdapModelNum = (lmc_mii_readreg (sc, 0, 3) & 0x3f0) >> 4; in lmc_init_one()
935 LMC_CSR_WRITE (sc, csr_gp_timer, 0xFFFFFFFFUL); in lmc_init_one()
937 sc->board_idx = cards_found++; in lmc_init_one()
938 sc->extra_stats.check = STATCHECK; in lmc_init_one()
939 sc->extra_stats.version_size = (DRIVER_VERSION << 16) + in lmc_init_one()
940 sizeof(sc->lmc_device->stats) + sizeof(sc->extra_stats); in lmc_init_one()
941 sc->extra_stats.lmc_cardtype = sc->lmc_cardtype; in lmc_init_one()
943 sc->lmc_ok = 0; in lmc_init_one()
944 sc->last_link_status = 0; in lmc_init_one()
968 lmc_softc_t *sc = dev_to_sc(dev); in lmc_open() local
971 lmc_led_on(sc, LMC_DS3_LED0); in lmc_open()
973 lmc_dec_reset(sc); in lmc_open()
974 lmc_reset(sc); in lmc_open()
976 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ(sc, csr_status), 0); in lmc_open()
977 LMC_EVENT_LOG(LMC_EVENT_RESET2, lmc_mii_readreg(sc, 0, 16), in lmc_open()
978 lmc_mii_readreg(sc, 0, 17)); in lmc_open()
980 if (sc->lmc_ok) in lmc_open()
983 lmc_softreset (sc); in lmc_open()
990 sc->got_irq = 1; in lmc_open()
993 sc->lmc_miireg16 |= LMC_MII16_LED_ALL; in lmc_open()
994 sc->lmc_media->set_link_status (sc, LMC_LINK_UP); in lmc_open()
999 sc->lmc_media->set_status (sc, NULL); in lmc_open()
1003 sc->TxDescriptControlInit = ( in lmc_open()
1011 if (sc->ictl.crc_length == LMC_CTL_CRC_LENGTH_16) { in lmc_open()
1013 sc->TxDescriptControlInit |= LMC_TDES_ADD_CRC_DISABLE; in lmc_open()
1015 sc->lmc_media->set_crc_length(sc, sc->ictl.crc_length); in lmc_open()
1020 if ((err = lmc_proto_open(sc)) != 0) in lmc_open()
1024 sc->extra_stats.tx_tbusy0++; in lmc_open()
1029 sc->lmc_intrmask = 0; in lmc_open()
1031 sc->lmc_intrmask |= (TULIP_STS_NORMALINTR in lmc_open()
1041 LMC_CSR_WRITE (sc, csr_intr, sc->lmc_intrmask); in lmc_open()
1043 sc->lmc_cmdmode |= TULIP_CMD_TXRUN; in lmc_open()
1044 sc->lmc_cmdmode |= TULIP_CMD_RXRUN; in lmc_open()
1045 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode); in lmc_open()
1047 sc->lmc_ok = 1; /* Run watchdog */ in lmc_open()
1053 sc->last_link_status = 1; in lmc_open()
1059 timer_setup(&sc->timer, lmc_watchdog, 0); in lmc_open()
1060 sc->timer.expires = jiffies + HZ; in lmc_open()
1061 add_timer (&sc->timer); in lmc_open()
1072 lmc_softc_t *sc = dev_to_sc(dev); in lmc_running_reset() local
1076 LMC_CSR_WRITE (sc, csr_intr, 0x00000000); in lmc_running_reset()
1078 lmc_dec_reset (sc); in lmc_running_reset()
1079 lmc_reset (sc); in lmc_running_reset()
1080 lmc_softreset (sc); in lmc_running_reset()
1082 sc->lmc_media->set_link_status (sc, 1); in lmc_running_reset()
1083 sc->lmc_media->set_status (sc, NULL); in lmc_running_reset()
1087 sc->lmc_txfull = 0; in lmc_running_reset()
1088 sc->extra_stats.tx_tbusy0++; in lmc_running_reset()
1090 sc->lmc_intrmask = TULIP_DEFAULT_INTR_MASK; in lmc_running_reset()
1091 LMC_CSR_WRITE (sc, csr_intr, sc->lmc_intrmask); in lmc_running_reset()
1093 sc->lmc_cmdmode |= (TULIP_CMD_TXRUN | TULIP_CMD_RXRUN); in lmc_running_reset()
1094 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode); in lmc_running_reset()
1105 lmc_softc_t *sc = dev_to_sc(dev); in lmc_close() local
1107 sc->lmc_ok = 0; in lmc_close()
1108 sc->lmc_media->set_link_status (sc, 0); in lmc_close()
1109 del_timer (&sc->timer); in lmc_close()
1110 lmc_proto_close(sc); in lmc_close()
1120 lmc_softc_t *sc = dev_to_sc(dev); in lmc_ifdown() local
1127 sc->extra_stats.tx_tbusy1++; in lmc_ifdown()
1131 LMC_CSR_WRITE (sc, csr_intr, 0x00000000); in lmc_ifdown()
1134 csr6 = LMC_CSR_READ (sc, csr_command); in lmc_ifdown()
1137 LMC_CSR_WRITE (sc, csr_command, csr6); in lmc_ifdown()
1139 sc->lmc_device->stats.rx_missed_errors += in lmc_ifdown()
1140 LMC_CSR_READ(sc, csr_missed_frames) & 0xffff; in lmc_ifdown()
1143 if(sc->got_irq == 1){ in lmc_ifdown()
1145 sc->got_irq = 0; in lmc_ifdown()
1151 struct sk_buff *skb = sc->lmc_rxq[i]; in lmc_ifdown()
1152 sc->lmc_rxq[i] = NULL; in lmc_ifdown()
1153 sc->lmc_rxring[i].status = 0; in lmc_ifdown()
1154 sc->lmc_rxring[i].length = 0; in lmc_ifdown()
1155 sc->lmc_rxring[i].buffer1 = 0xDEADBEEF; in lmc_ifdown()
1158 sc->lmc_rxq[i] = NULL; in lmc_ifdown()
1163 if (sc->lmc_txq[i] != NULL) in lmc_ifdown()
1164 dev_kfree_skb(sc->lmc_txq[i]); in lmc_ifdown()
1165 sc->lmc_txq[i] = NULL; in lmc_ifdown()
1168 lmc_led_off (sc, LMC_MII16_LED_ALL); in lmc_ifdown()
1171 sc->extra_stats.tx_tbusy0++; in lmc_ifdown()
1182 lmc_softc_t *sc = dev_to_sc(dev); in lmc_interrupt() local
1190 spin_lock(&sc->lmc_lock); in lmc_interrupt()
1195 csr = LMC_CSR_READ (sc, csr_status); in lmc_interrupt()
1200 if ( ! (csr & sc->lmc_intrmask)) { in lmc_interrupt()
1205 while (csr & sc->lmc_intrmask) { in lmc_interrupt()
1211 LMC_CSR_WRITE (sc, csr_status, csr); in lmc_interrupt()
1238 sc->extra_stats.tx_NoCompleteCnt = 0; in lmc_interrupt()
1240 badtx = sc->lmc_taint_tx; in lmc_interrupt()
1243 while ((badtx < sc->lmc_next_tx)) { in lmc_interrupt()
1244 stat = sc->lmc_txring[i].status; in lmc_interrupt()
1247 sc->lmc_txring[i].length); in lmc_interrupt()
1259 if (sc->lmc_txq[i] == NULL) in lmc_interrupt()
1266 sc->lmc_device->stats.tx_errors++; in lmc_interrupt()
1268 sc->lmc_device->stats.tx_aborted_errors++; in lmc_interrupt()
1270 sc->lmc_device->stats.tx_carrier_errors++; in lmc_interrupt()
1272 sc->lmc_device->stats.tx_window_errors++; in lmc_interrupt()
1274 sc->lmc_device->stats.tx_fifo_errors++; in lmc_interrupt()
1276 sc->lmc_device->stats.tx_bytes += sc->lmc_txring[i].length & 0x7ff; in lmc_interrupt()
1278 sc->lmc_device->stats.tx_packets++; in lmc_interrupt()
1281 dev_consume_skb_irq(sc->lmc_txq[i]); in lmc_interrupt()
1282 sc->lmc_txq[i] = NULL; in lmc_interrupt()
1288 if (sc->lmc_next_tx - badtx > LMC_TXDESCS) in lmc_interrupt()
1294 sc->lmc_txfull = 0; in lmc_interrupt()
1296 sc->extra_stats.tx_tbusy0++; in lmc_interrupt()
1300 sc->extra_stats.dirtyTx = badtx; in lmc_interrupt()
1301 sc->extra_stats.lmc_next_tx = sc->lmc_next_tx; in lmc_interrupt()
1302 sc->extra_stats.lmc_txfull = sc->lmc_txfull; in lmc_interrupt()
1304 sc->lmc_taint_tx = badtx; in lmc_interrupt()
1328 lmc_dec_reset (sc); in lmc_interrupt()
1329 lmc_reset (sc); in lmc_interrupt()
1330 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0); in lmc_interrupt()
1332 lmc_mii_readreg (sc, 0, 16), in lmc_interrupt()
1333 lmc_mii_readreg (sc, 0, 17)); in lmc_interrupt()
1345 csr = LMC_CSR_READ (sc, csr_status); in lmc_interrupt()
1351 spin_unlock(&sc->lmc_lock); in lmc_interrupt()
1359 lmc_softc_t *sc = dev_to_sc(dev); in lmc_start_xmit() local
1364 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_start_xmit()
1368 entry = sc->lmc_next_tx % LMC_TXDESCS; in lmc_start_xmit()
1370 sc->lmc_txq[entry] = skb; in lmc_start_xmit()
1371 sc->lmc_txring[entry].buffer1 = virt_to_bus (skb->data); in lmc_start_xmit()
1377 if (sc->lmc_next_tx - sc->lmc_taint_tx < LMC_TXDESCS / 2) in lmc_start_xmit()
1383 else if (sc->lmc_next_tx - sc->lmc_taint_tx == LMC_TXDESCS / 2) in lmc_start_xmit()
1389 else if (sc->lmc_next_tx - sc->lmc_taint_tx < LMC_TXDESCS - 1) in lmc_start_xmit()
1399 sc->lmc_txfull = 1; in lmc_start_xmit()
1405 if (sc->lmc_next_tx - sc->lmc_taint_tx >= LMC_TXDESCS - 1) in lmc_start_xmit()
1407 sc->lmc_txfull = 1; in lmc_start_xmit()
1409 sc->extra_stats.tx_tbusy1++; in lmc_start_xmit()
1419 flag = sc->lmc_txring[entry].length = (skb->len) | flag | in lmc_start_xmit()
1420 sc->TxDescriptControlInit; in lmc_start_xmit()
1426 sc->extra_stats.tx_NoCompleteCnt++; in lmc_start_xmit()
1427 sc->lmc_next_tx++; in lmc_start_xmit()
1431 sc->lmc_txring[entry].status = 0x80000000; in lmc_start_xmit()
1434 LMC_CSR_WRITE (sc, csr_txpoll, 0); in lmc_start_xmit()
1436 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_start_xmit()
1444 lmc_softc_t *sc = dev_to_sc(dev); in lmc_rx() local
1453 lmc_led_on(sc, LMC_DS3_LED3); in lmc_rx()
1457 i = sc->lmc_next_rx % LMC_RXDESCS; in lmc_rx()
1459 while (((stat = sc->lmc_rxring[i].status) & LMC_RDES_OWN_BIT) != DESC_OWNED_BY_DC21X4) in lmc_rx()
1466 sc->lmc_device->stats.rx_length_errors++; in lmc_rx()
1472 sc->lmc_device->stats.rx_errors++; in lmc_rx()
1473 sc->lmc_device->stats.rx_frame_errors++; in lmc_rx()
1479 sc->lmc_device->stats.rx_errors++; in lmc_rx()
1480 sc->lmc_device->stats.rx_crc_errors++; in lmc_rx()
1485 sc->lmc_device->stats.rx_length_errors++; in lmc_rx()
1490 if (len < sc->lmc_crcSize + 2) { in lmc_rx()
1491 sc->lmc_device->stats.rx_length_errors++; in lmc_rx()
1492 sc->extra_stats.rx_SmallPktCnt++; in lmc_rx()
1501 len -= sc->lmc_crcSize; in lmc_rx()
1503 skb = sc->lmc_rxq[i]; in lmc_rx()
1513 sc->lmc_rxq[i] = nsb; in lmc_rx()
1515 sc->lmc_rxring[i].buffer1 = virt_to_bus(skb_tail_pointer(nsb)); in lmc_rx()
1517 sc->failed_recv_alloc = 1; in lmc_rx()
1521 sc->lmc_device->stats.rx_packets++; in lmc_rx()
1522 sc->lmc_device->stats.rx_bytes += len; in lmc_rx()
1539 sc->lmc_rxq[i] = NULL; in lmc_rx()
1540 sc->lmc_rxring[i].buffer1 = 0x0; in lmc_rx()
1543 skb->protocol = lmc_proto_type(sc, skb); in lmc_rx()
1547 lmc_proto_netif(sc, skb); in lmc_rx()
1554 sc->lmc_rxq[i] = nsb; in lmc_rx()
1556 sc->lmc_rxring[i].buffer1 = virt_to_bus(skb_tail_pointer(nsb)); in lmc_rx()
1568 sc->extra_stats.rx_BuffAllocErr++; in lmc_rx()
1570 sc->failed_recv_alloc = 1; in lmc_rx()
1581 nsb->protocol = lmc_proto_type(sc, nsb); in lmc_rx()
1585 lmc_proto_netif(sc, nsb); in lmc_rx()
1590 sc->lmc_rxring[i].status = DESC_OWNED_BY_DC21X4; in lmc_rx()
1592 sc->lmc_next_rx++; in lmc_rx()
1593 i = sc->lmc_next_rx % LMC_RXDESCS; in lmc_rx()
1609 if (rxIntLoopCnt > sc->extra_stats.rxIntLoopCnt) in lmc_rx()
1610 sc->extra_stats.rxIntLoopCnt = rxIntLoopCnt; /* debug -baz */ in lmc_rx()
1617 if ((sc->lmc_rxring[i].status & LMC_RDES_OWN_BIT) in lmc_rx()
1628 lmc_led_off(sc, LMC_DS3_LED3); in lmc_rx()
1636 lmc_softc_t *sc = dev_to_sc(dev); in lmc_get_stats() local
1639 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_get_stats()
1641 sc->lmc_device->stats.rx_missed_errors += LMC_CSR_READ(sc, csr_missed_frames) & 0xffff; in lmc_get_stats()
1643 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_get_stats()
1645 return &sc->lmc_device->stats; in lmc_get_stats()
1657 unsigned lmc_mii_readreg (lmc_softc_t * const sc, unsigned devaddr, unsigned regno) /*fold00*/ in lmc_mii_readreg() argument
1663 LMC_MII_SYNC (sc); in lmc_mii_readreg()
1669 LMC_CSR_WRITE (sc, csr_9, dataval); in lmc_mii_readreg()
1672 LMC_CSR_WRITE (sc, csr_9, dataval | 0x10000); in lmc_mii_readreg()
1679 LMC_CSR_WRITE (sc, csr_9, 0x40000); in lmc_mii_readreg()
1682 retval = (retval << 1) | ((LMC_CSR_READ (sc, csr_9) & 0x80000) ? 1 : 0); in lmc_mii_readreg()
1683 LMC_CSR_WRITE (sc, csr_9, 0x40000 | 0x10000); in lmc_mii_readreg()
1691 void lmc_mii_writereg (lmc_softc_t * const sc, unsigned devaddr, unsigned regno, unsigned data) /*f… in lmc_mii_writereg() argument
1696 LMC_MII_SYNC (sc); in lmc_mii_writereg()
1708 LMC_CSR_WRITE (sc, csr_9, datav); in lmc_mii_writereg()
1711 LMC_CSR_WRITE (sc, csr_9, (datav | 0x10000)); in lmc_mii_writereg()
1720 LMC_CSR_WRITE (sc, csr_9, 0x40000); in lmc_mii_writereg()
1723 LMC_CSR_WRITE (sc, csr_9, 0x50000); in lmc_mii_writereg()
1730 static void lmc_softreset (lmc_softc_t * const sc) /*fold00*/ in lmc_softreset() argument
1735 sc->lmc_txfull = 0; in lmc_softreset()
1736 sc->lmc_next_rx = 0; in lmc_softreset()
1737 sc->lmc_next_tx = 0; in lmc_softreset()
1738 sc->lmc_taint_rx = 0; in lmc_softreset()
1739 sc->lmc_taint_tx = 0; in lmc_softreset()
1751 if (sc->lmc_rxq[i] == NULL) in lmc_softreset()
1755 … printk(KERN_WARNING "%s: Failed to allocate receiver ring, will try again\n", sc->name); in lmc_softreset()
1756 sc->failed_ring = 1; in lmc_softreset()
1760 sc->lmc_rxq[i] = skb; in lmc_softreset()
1765 skb = sc->lmc_rxq[i]; in lmc_softreset()
1768 skb->dev = sc->lmc_device; in lmc_softreset()
1771 sc->lmc_rxring[i].status = 0x80000000; in lmc_softreset()
1774 sc->lmc_rxring[i].length = skb_tailroom(skb); in lmc_softreset()
1779 sc->lmc_rxring[i].buffer1 = virt_to_bus (skb->data); in lmc_softreset()
1782 sc->lmc_rxring[i].buffer2 = virt_to_bus (&sc->lmc_rxring[i + 1]); in lmc_softreset()
1790 sc->lmc_rxring[i - 1].length |= 0x02000000; /* Set end of buffers flag */ in lmc_softreset()
1791sc->lmc_rxring[i - 1].buffer2 = virt_to_bus(&sc->lmc_rxring[0]); /* Point back to the start */ in lmc_softreset()
1793 LMC_CSR_WRITE (sc, csr_rxlist, virt_to_bus (sc->lmc_rxring)); /* write base address */ in lmc_softreset()
1798 if (sc->lmc_txq[i] != NULL){ /* have buffer */ in lmc_softreset()
1799 dev_kfree_skb(sc->lmc_txq[i]); /* free it */ in lmc_softreset()
1800 sc->lmc_device->stats.tx_dropped++; /* We just dropped a packet */ in lmc_softreset()
1802 sc->lmc_txq[i] = NULL; in lmc_softreset()
1803 sc->lmc_txring[i].status = 0x00000000; in lmc_softreset()
1804 sc->lmc_txring[i].buffer2 = virt_to_bus (&sc->lmc_txring[i + 1]); in lmc_softreset()
1806 sc->lmc_txring[i - 1].buffer2 = virt_to_bus (&sc->lmc_txring[0]); in lmc_softreset()
1807 LMC_CSR_WRITE (sc, csr_txlist, virt_to_bus (sc->lmc_txring)); in lmc_softreset()
1810 void lmc_gpio_mkinput(lmc_softc_t * const sc, u32 bits) /*fold00*/ in lmc_gpio_mkinput() argument
1812 sc->lmc_gpio_io &= ~bits; in lmc_gpio_mkinput()
1813 LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io)); in lmc_gpio_mkinput()
1816 void lmc_gpio_mkoutput(lmc_softc_t * const sc, u32 bits) /*fold00*/ in lmc_gpio_mkoutput() argument
1818 sc->lmc_gpio_io |= bits; in lmc_gpio_mkoutput()
1819 LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io)); in lmc_gpio_mkoutput()
1822 void lmc_led_on(lmc_softc_t * const sc, u32 led) /*fold00*/ in lmc_led_on() argument
1824 if ((~sc->lmc_miireg16) & led) /* Already on! */ in lmc_led_on()
1827 sc->lmc_miireg16 &= ~led; in lmc_led_on()
1828 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_led_on()
1831 void lmc_led_off(lmc_softc_t * const sc, u32 led) /*fold00*/ in lmc_led_off() argument
1833 if (sc->lmc_miireg16 & led) /* Already set don't do anything */ in lmc_led_off()
1836 sc->lmc_miireg16 |= led; in lmc_led_off()
1837 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_led_off()
1840 static void lmc_reset(lmc_softc_t * const sc) /*fold00*/ in lmc_reset() argument
1842 sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET; in lmc_reset()
1843 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_reset()
1845 sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET; in lmc_reset()
1846 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_reset()
1851 lmc_gpio_mkoutput(sc, LMC_GEP_RESET); in lmc_reset()
1858 sc->lmc_gpio &= ~(LMC_GEP_RESET); in lmc_reset()
1859 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_reset()
1869 lmc_gpio_mkinput(sc, LMC_GEP_RESET); in lmc_reset()
1874 sc->lmc_media->init(sc); in lmc_reset()
1876 sc->extra_stats.resetCount++; in lmc_reset()
1879 static void lmc_dec_reset(lmc_softc_t * const sc) /*fold00*/ in lmc_dec_reset() argument
1886 sc->lmc_intrmask = 0; in lmc_dec_reset()
1887 LMC_CSR_WRITE(sc, csr_intr, sc->lmc_intrmask); in lmc_dec_reset()
1895 LMC_CSR_WRITE(sc, csr_busmode, TULIP_BUSMODE_SWRESET); in lmc_dec_reset()
1898 sc->lmc_busmode = LMC_CSR_READ(sc, csr_busmode); in lmc_dec_reset()
1899 sc->lmc_busmode = 0x00100000; in lmc_dec_reset()
1900 sc->lmc_busmode &= ~TULIP_BUSMODE_SWRESET; in lmc_dec_reset()
1901 LMC_CSR_WRITE(sc, csr_busmode, sc->lmc_busmode); in lmc_dec_reset()
1903 sc->lmc_cmdmode = LMC_CSR_READ(sc, csr_command); in lmc_dec_reset()
1915 sc->lmc_cmdmode |= ( TULIP_CMD_PROMISCUOUS in lmc_dec_reset()
1923 sc->lmc_cmdmode &= ~( TULIP_CMD_OPERMODE in lmc_dec_reset()
1929 LMC_CSR_WRITE(sc, csr_command, sc->lmc_cmdmode); in lmc_dec_reset()
1934 val = LMC_CSR_READ(sc, csr_sia_general); in lmc_dec_reset()
1936 LMC_CSR_WRITE(sc, csr_sia_general, val); in lmc_dec_reset()
1939 static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, /*fold00*/ in lmc_initcsrs() argument
1942 sc->lmc_csrs.csr_busmode = csr_base + 0 * csr_size; in lmc_initcsrs()
1943 sc->lmc_csrs.csr_txpoll = csr_base + 1 * csr_size; in lmc_initcsrs()
1944 sc->lmc_csrs.csr_rxpoll = csr_base + 2 * csr_size; in lmc_initcsrs()
1945 sc->lmc_csrs.csr_rxlist = csr_base + 3 * csr_size; in lmc_initcsrs()
1946 sc->lmc_csrs.csr_txlist = csr_base + 4 * csr_size; in lmc_initcsrs()
1947 sc->lmc_csrs.csr_status = csr_base + 5 * csr_size; in lmc_initcsrs()
1948 sc->lmc_csrs.csr_command = csr_base + 6 * csr_size; in lmc_initcsrs()
1949 sc->lmc_csrs.csr_intr = csr_base + 7 * csr_size; in lmc_initcsrs()
1950 sc->lmc_csrs.csr_missed_frames = csr_base + 8 * csr_size; in lmc_initcsrs()
1951 sc->lmc_csrs.csr_9 = csr_base + 9 * csr_size; in lmc_initcsrs()
1952 sc->lmc_csrs.csr_10 = csr_base + 10 * csr_size; in lmc_initcsrs()
1953 sc->lmc_csrs.csr_11 = csr_base + 11 * csr_size; in lmc_initcsrs()
1954 sc->lmc_csrs.csr_12 = csr_base + 12 * csr_size; in lmc_initcsrs()
1955 sc->lmc_csrs.csr_13 = csr_base + 13 * csr_size; in lmc_initcsrs()
1956 sc->lmc_csrs.csr_14 = csr_base + 14 * csr_size; in lmc_initcsrs()
1957 sc->lmc_csrs.csr_15 = csr_base + 15 * csr_size; in lmc_initcsrs()
1962 lmc_softc_t *sc = dev_to_sc(dev); in lmc_driver_timeout() local
1966 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_driver_timeout()
1970 sc->extra_stats.tx_tbusy_calls++; in lmc_driver_timeout()
1982 LMC_CSR_READ (sc, csr_status), in lmc_driver_timeout()
1983 sc->extra_stats.tx_ProcTimeout); in lmc_driver_timeout()
1987 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0); in lmc_driver_timeout()
1989 lmc_mii_readreg (sc, 0, 16), in lmc_driver_timeout()
1990 lmc_mii_readreg (sc, 0, 17)); in lmc_driver_timeout()
1993 csr6 = LMC_CSR_READ (sc, csr_command); in lmc_driver_timeout()
1994 LMC_CSR_WRITE (sc, csr_command, csr6 | 0x0002); in lmc_driver_timeout()
1995 LMC_CSR_WRITE (sc, csr_command, csr6 | 0x2002); in lmc_driver_timeout()
1998 LMC_CSR_WRITE (sc, csr_txpoll, 0); in lmc_driver_timeout()
2000 sc->lmc_device->stats.tx_errors++; in lmc_driver_timeout()
2001 sc->extra_stats.tx_ProcTimeout++; /* -baz */ in lmc_driver_timeout()
2007 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_driver_timeout()