Lines Matching full: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);
110 lmc_softc_t *sc = dev_to_sc(dev); in lmc_ioctl() local
127 if (copy_to_user(ifr->ifr_data, &sc->ictl, sizeof(lmc_ctl_t))) in lmc_ioctl()
149 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
150 sc->lmc_media->set_status (sc, &ctl); in lmc_ioctl()
152 if(ctl.crc_length != sc->ictl.crc_length) { in lmc_ioctl()
153 sc->lmc_media->set_crc_length(sc, ctl.crc_length); in lmc_ioctl()
154 if (sc->ictl.crc_length == LMC_CTL_CRC_LENGTH_16) in lmc_ioctl()
155 sc->TxDescriptControlInit |= LMC_TDES_ADD_CRC_DISABLE; in lmc_ioctl()
157 sc->TxDescriptControlInit &= ~LMC_TDES_ADD_CRC_DISABLE; in lmc_ioctl()
159 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
166 u16 old_type = sc->if_type; in lmc_ioctl()
186 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
187 lmc_proto_close(sc); in lmc_ioctl()
189 sc->if_type = new_type; in lmc_ioctl()
190 lmc_proto_attach(sc); in lmc_ioctl()
191 ret = lmc_proto_open(sc); in lmc_ioctl()
192 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
197 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
198 sc->lmc_xinfo.Magic0 = 0xBEEFCAFE; in lmc_ioctl()
200 sc->lmc_xinfo.PciCardType = sc->lmc_cardtype; in lmc_ioctl()
201 sc->lmc_xinfo.PciSlotNumber = 0; in lmc_ioctl()
202 sc->lmc_xinfo.DriverMajorVersion = DRIVER_MAJOR_VERSION; in lmc_ioctl()
203 sc->lmc_xinfo.DriverMinorVersion = DRIVER_MINOR_VERSION; in lmc_ioctl()
204 sc->lmc_xinfo.DriverSubVersion = DRIVER_SUB_VERSION; in lmc_ioctl()
205 sc->lmc_xinfo.XilinxRevisionNumber = in lmc_ioctl()
206 lmc_mii_readreg (sc, 0, 3) & 0xf; in lmc_ioctl()
207 sc->lmc_xinfo.MaxFrameSize = LMC_PKT_BUF_SZ; in lmc_ioctl()
208 sc->lmc_xinfo.link_status = sc->lmc_media->get_link_status (sc); in lmc_ioctl()
209 sc->lmc_xinfo.mii_reg16 = lmc_mii_readreg (sc, 0, 16); in lmc_ioctl()
210 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
212 sc->lmc_xinfo.Magic1 = 0xDEADBEEF; in lmc_ioctl()
214 if (copy_to_user(ifr->ifr_data, &sc->lmc_xinfo, in lmc_ioctl()
223 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
224 if (sc->lmc_cardtype == LMC_CARDTYPE_T1) { in lmc_ioctl()
225 lmc_mii_writereg(sc, 0, 17, T1FRAMER_FERR_LSB); in lmc_ioctl()
226 sc->extra_stats.framingBitErrorCount += in lmc_ioctl()
227 lmc_mii_readreg(sc, 0, 18) & 0xff; in lmc_ioctl()
228 lmc_mii_writereg(sc, 0, 17, T1FRAMER_FERR_MSB); in lmc_ioctl()
229 sc->extra_stats.framingBitErrorCount += in lmc_ioctl()
230 (lmc_mii_readreg(sc, 0, 18) & 0xff) << 8; in lmc_ioctl()
231 lmc_mii_writereg(sc, 0, 17, T1FRAMER_LCV_LSB); in lmc_ioctl()
232 sc->extra_stats.lineCodeViolationCount += in lmc_ioctl()
233 lmc_mii_readreg(sc, 0, 18) & 0xff; in lmc_ioctl()
234 lmc_mii_writereg(sc, 0, 17, T1FRAMER_LCV_MSB); in lmc_ioctl()
235 sc->extra_stats.lineCodeViolationCount += in lmc_ioctl()
236 (lmc_mii_readreg(sc, 0, 18) & 0xff) << 8; in lmc_ioctl()
237 lmc_mii_writereg(sc, 0, 17, T1FRAMER_AERR); in lmc_ioctl()
238 regVal = lmc_mii_readreg(sc, 0, 18) & 0xff; in lmc_ioctl()
240 sc->extra_stats.lossOfFrameCount += in lmc_ioctl()
242 sc->extra_stats.changeOfFrameAlignmentCount += in lmc_ioctl()
244 sc->extra_stats.severelyErroredFrameCount += in lmc_ioctl()
247 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
248 if (copy_to_user(ifr->ifr_data, &sc->lmc_device->stats, in lmc_ioctl()
249 sizeof(sc->lmc_device->stats)) || in lmc_ioctl()
250 copy_to_user(ifr->ifr_data + sizeof(sc->lmc_device->stats), in lmc_ioctl()
251 &sc->extra_stats, sizeof(sc->extra_stats))) in lmc_ioctl()
263 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
264 memset(&sc->lmc_device->stats, 0, sizeof(sc->lmc_device->stats)); in lmc_ioctl()
265 memset(&sc->extra_stats, 0, sizeof(sc->extra_stats)); in lmc_ioctl()
266 sc->extra_stats.check = STATCHECK; in lmc_ioctl()
267 sc->extra_stats.version_size = (DRIVER_VERSION << 16) + in lmc_ioctl()
268 sizeof(sc->lmc_device->stats) + sizeof(sc->extra_stats); in lmc_ioctl()
269 sc->extra_stats.lmc_cardtype = sc->lmc_cardtype; in lmc_ioctl()
270 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
289 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
290 sc->lmc_media->set_circuit_type(sc, ctl.circuit_type); in lmc_ioctl()
291 sc->ictl.circuit_type = ctl.circuit_type; in lmc_ioctl()
292 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
303 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
305 printk (" REG16 before reset +%04x\n", lmc_mii_readreg (sc, 0, 16)); in lmc_ioctl()
307 printk (" REG16 after reset +%04x\n", lmc_mii_readreg (sc, 0, 16)); in lmc_ioctl()
309 … LMC_EVENT_LOG(LMC_EVENT_FORCEDRESET, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16)); in lmc_ioctl()
310 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
330 if (sc->lmc_cardtype != LMC_CARDTYPE_T1){ in lmc_ioctl()
357 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
358 mii = lmc_mii_readreg (sc, 0, 16); in lmc_ioctl()
363 lmc_gpio_mkinput(sc, 0xff); in lmc_ioctl()
368 lmc_gpio_mkoutput(sc, LMC_GEP_RESET); in lmc_ioctl()
376 sc->lmc_gpio &= ~LMC_GEP_RESET; in lmc_ioctl()
377 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_ioctl()
385 sc->lmc_gpio |= LMC_GEP_RESET; in lmc_ioctl()
386 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_ioctl()
392 lmc_gpio_mkinput(sc, 0xff); in lmc_ioctl()
395 sc->lmc_media->set_link_status (sc, 1); in lmc_ioctl()
396 sc->lmc_media->set_status (sc, NULL); in lmc_ioctl()
397 // lmc_softreset(sc); in lmc_ioctl()
402 lmc_led_on(sc, LMC_DS3_LED0); in lmc_ioctl()
404 lmc_led_off(sc, LMC_DS3_LED0); in lmc_ioctl()
405 lmc_led_on(sc, LMC_DS3_LED1); in lmc_ioctl()
407 lmc_led_off(sc, LMC_DS3_LED1); in lmc_ioctl()
408 lmc_led_on(sc, LMC_DS3_LED3); in lmc_ioctl()
410 lmc_led_off(sc, LMC_DS3_LED3); in lmc_ioctl()
411 lmc_led_on(sc, LMC_DS3_LED2); in lmc_ioctl()
413 lmc_led_off(sc, LMC_DS3_LED2); in lmc_ioctl()
416 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
429 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
430 mii = lmc_mii_readreg (sc, 0, 16); in lmc_ioctl()
435 lmc_gpio_mkinput(sc, 0xff); in lmc_ioctl()
440 lmc_gpio_mkoutput(sc, LMC_GEP_DP | LMC_GEP_RESET); in lmc_ioctl()
448 sc->lmc_gpio &= ~(LMC_GEP_RESET | LMC_GEP_DP); in lmc_ioctl()
449 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_ioctl()
457 sc->lmc_gpio |= LMC_GEP_DP | LMC_GEP_RESET; in lmc_ioctl()
458 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_ioctl()
463 while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 && in lmc_ioctl()
471 lmc_gpio_mkinput(sc, 0xff); in lmc_ioctl()
472 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
500 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_ioctl()
501 lmc_gpio_mkinput(sc, 0xff); in lmc_ioctl()
514 sc->lmc_gpio = 0x00; in lmc_ioctl()
515 sc->lmc_gpio &= ~LMC_GEP_DP; in lmc_ioctl()
516 sc->lmc_gpio &= ~LMC_GEP_RESET; in lmc_ioctl()
517 sc->lmc_gpio |= LMC_GEP_MODE; in lmc_ioctl()
518 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_ioctl()
520 lmc_gpio_mkoutput(sc, LMC_GEP_MODE | LMC_GEP_DP | LMC_GEP_RESET); in lmc_ioctl()
535 lmc_gpio_mkinput(sc, LMC_GEP_DP | LMC_GEP_RESET); in lmc_ioctl()
540 sc->lmc_gpio = 0x00; in lmc_ioctl()
541 sc->lmc_gpio |= LMC_GEP_MODE; in lmc_ioctl()
542 sc->lmc_gpio |= LMC_GEP_DATA; in lmc_ioctl()
543 sc->lmc_gpio |= LMC_GEP_CLK; in lmc_ioctl()
544 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_ioctl()
546 lmc_gpio_mkoutput(sc, LMC_GEP_DATA | LMC_GEP_CLK | LMC_GEP_MODE ); in lmc_ioctl()
551 while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 && in lmc_ioctl()
560 sc->lmc_gpio &= ~LMC_GEP_DATA; /* Data is 0 */ in lmc_ioctl()
563 sc->lmc_gpio |= LMC_GEP_DATA; /* Data is 1 */ in lmc_ioctl()
567 sc->lmc_gpio |= LMC_GEP_DATA; /* Assume it's 1 */ in lmc_ioctl()
569 sc->lmc_gpio &= ~LMC_GEP_CLK; /* Clock to zero */ in lmc_ioctl()
570 sc->lmc_gpio |= LMC_GEP_MODE; in lmc_ioctl()
571 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_ioctl()
574 sc->lmc_gpio |= LMC_GEP_CLK; /* Put the clack back to one */ in lmc_ioctl()
575 sc->lmc_gpio |= LMC_GEP_MODE; in lmc_ioctl()
576 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_ioctl()
579 if((LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0){ in lmc_ioctl()
582 else if((LMC_CSR_READ(sc, csr_gp) & LMC_GEP_DP) == 0){ in lmc_ioctl()
589 lmc_gpio_mkinput(sc, 0xff); in lmc_ioctl()
591 sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET; in lmc_ioctl()
592 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_ioctl()
594 sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET; in lmc_ioctl()
595 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_ioctl()
596 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_ioctl()
610 sc->lmc_txfull = 0; in lmc_ioctl()
616 ret = lmc_proto_ioctl (sc, ifr, cmd); in lmc_ioctl()
627 lmc_softc_t *sc = from_timer(sc, t, timer); in lmc_watchdog() local
628 struct net_device *dev = sc->lmc_device; in lmc_watchdog()
633 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_watchdog()
635 if(sc->check != 0xBEAFCAFE){ in lmc_watchdog()
637 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_watchdog()
646 LMC_CSR_WRITE (sc, csr_15, 0x00000011); in lmc_watchdog()
647 sc->lmc_cmdmode |= TULIP_CMD_TXRUN | TULIP_CMD_RXRUN; in lmc_watchdog()
648 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode); in lmc_watchdog()
650 if (sc->lmc_ok == 0) in lmc_watchdog()
653 LMC_EVENT_LOG(LMC_EVENT_WATCHDOG, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16)); in lmc_watchdog()
658 if (sc->lmc_taint_tx == sc->lastlmc_taint_tx && in lmc_watchdog()
659 sc->lmc_device->stats.tx_packets > sc->lasttx_packets && in lmc_watchdog()
660 sc->tx_TimeoutInd == 0) in lmc_watchdog()
664 sc->tx_TimeoutInd = 1; in lmc_watchdog()
666 else if (sc->lmc_taint_tx == sc->lastlmc_taint_tx && in lmc_watchdog()
667 sc->lmc_device->stats.tx_packets > sc->lasttx_packets && in lmc_watchdog()
668 sc->tx_TimeoutInd) in lmc_watchdog()
671 LMC_EVENT_LOG(LMC_EVENT_XMTINTTMO, LMC_CSR_READ (sc, csr_status), 0); in lmc_watchdog()
673 sc->tx_TimeoutDisplay = 1; in lmc_watchdog()
674 sc->extra_stats.tx_TimeoutCnt++; in lmc_watchdog()
681 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0); in lmc_watchdog()
689 LMC_EVENT_LOG(LMC_EVENT_RESET2, lmc_mii_readreg (sc, 0, 16), lmc_mii_readreg (sc, 0, 17)); 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()
696 sc->tx_TimeoutInd = 0; in lmc_watchdog()
697 sc->lastlmc_taint_tx = sc->lmc_taint_tx; in lmc_watchdog()
698 sc->lasttx_packets = sc->lmc_device->stats.tx_packets; in lmc_watchdog()
704 link_status = sc->lmc_media->get_link_status (sc); in lmc_watchdog()
710 if ((link_status == 0) && (sc->last_link_status != 0)) { in lmc_watchdog()
712 sc->last_link_status = 0; in lmc_watchdog()
713 /* lmc_reset (sc); Why reset??? The link can go down ok */ in lmc_watchdog()
723 if (link_status != 0 && sc->last_link_status == 0) { in lmc_watchdog()
725 sc->last_link_status = 1; in lmc_watchdog()
726 /* lmc_reset (sc); Again why reset??? */ in lmc_watchdog()
732 sc->lmc_media->watchdog(sc); in lmc_watchdog()
738 LMC_CSR_WRITE(sc, csr_rxpoll, 0); in lmc_watchdog()
744 if(sc->failed_ring == 1){ in lmc_watchdog()
749 sc->failed_ring = 0; in lmc_watchdog()
750 lmc_softreset(sc); in lmc_watchdog()
752 if(sc->failed_recv_alloc == 1){ in lmc_watchdog()
758 sc->failed_recv_alloc = 0; in lmc_watchdog()
759 lmc_softreset(sc); in lmc_watchdog()
768 ticks = LMC_CSR_READ (sc, csr_gp_timer); in lmc_watchdog()
769 LMC_CSR_WRITE (sc, csr_gp_timer, 0xffffffffUL); in lmc_watchdog()
770 sc->ictl.ticks = 0x0000ffff - (ticks & 0x0000ffff); in lmc_watchdog()
775 sc->timer.expires = jiffies + (HZ); in lmc_watchdog()
776 add_timer (&sc->timer); in lmc_watchdog()
778 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_watchdog()
800 lmc_softc_t *sc; in lmc_init_one() local
822 sc = devm_kzalloc(&pdev->dev, sizeof(lmc_softc_t), GFP_KERNEL); in lmc_init_one()
823 if (!sc) in lmc_init_one()
826 dev = alloc_hdlcdev(sc); in lmc_init_one()
839 sc->lmc_device = dev; in lmc_init_one()
840 sc->name = dev->name; in lmc_init_one()
841 sc->if_type = LMC_PPP; in lmc_init_one()
842 sc->check = 0xBEAFCAFE; in lmc_init_one()
850 * Must have a valid sc and dev structure in lmc_init_one()
852 lmc_proto_attach(sc); in lmc_init_one()
856 spin_lock_init(&sc->lmc_lock); in lmc_init_one()
869 sc->lmc_cardtype = LMC_CARDTYPE_UNKNOWN; in lmc_init_one()
870 sc->lmc_timing = LMC_CTL_CLOCK_SOURCE_EXT; in lmc_init_one()
884 sc->lmc_cardtype = LMC_CARDTYPE_HSSI; in lmc_init_one()
885 sc->lmc_media = &lmc_hssi_media; in lmc_init_one()
889 sc->lmc_cardtype = LMC_CARDTYPE_DS3; in lmc_init_one()
890 sc->lmc_media = &lmc_ds3_media; in lmc_init_one()
894 sc->lmc_cardtype = LMC_CARDTYPE_SSI; in lmc_init_one()
895 sc->lmc_media = &lmc_ssi_media; in lmc_init_one()
899 sc->lmc_cardtype = LMC_CARDTYPE_T1; in lmc_init_one()
900 sc->lmc_media = &lmc_t1_media; in lmc_init_one()
909 lmc_initcsrs (sc, dev->base_addr, 8); in lmc_init_one()
911 lmc_gpio_mkinput (sc, 0xff); in lmc_init_one()
912 sc->lmc_gpio = 0; /* drive no signals yet */ in lmc_init_one()
914 sc->lmc_media->defaults (sc); in lmc_init_one()
916 sc->lmc_media->set_link_status (sc, LMC_LINK_UP); in lmc_init_one()
921 AdapModelNum = (lmc_mii_readreg (sc, 0, 3) & 0x3f0) >> 4; in lmc_init_one()
938 LMC_CSR_WRITE (sc, csr_gp_timer, 0xFFFFFFFFUL); in lmc_init_one()
940 sc->board_idx = cards_found++; in lmc_init_one()
941 sc->extra_stats.check = STATCHECK; in lmc_init_one()
942 sc->extra_stats.version_size = (DRIVER_VERSION << 16) + in lmc_init_one()
943 sizeof(sc->lmc_device->stats) + sizeof(sc->extra_stats); in lmc_init_one()
944 sc->extra_stats.lmc_cardtype = sc->lmc_cardtype; in lmc_init_one()
946 sc->lmc_ok = 0; in lmc_init_one()
947 sc->last_link_status = 0; in lmc_init_one()
971 lmc_softc_t *sc = dev_to_sc(dev); in lmc_open() local
974 lmc_led_on(sc, LMC_DS3_LED0); in lmc_open()
976 lmc_dec_reset(sc); in lmc_open()
977 lmc_reset(sc); in lmc_open()
979 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ(sc, csr_status), 0); in lmc_open()
980 LMC_EVENT_LOG(LMC_EVENT_RESET2, lmc_mii_readreg(sc, 0, 16), in lmc_open()
981 lmc_mii_readreg(sc, 0, 17)); in lmc_open()
983 if (sc->lmc_ok) in lmc_open()
986 lmc_softreset (sc); in lmc_open()
993 sc->got_irq = 1; in lmc_open()
996 sc->lmc_miireg16 |= LMC_MII16_LED_ALL; in lmc_open()
997 sc->lmc_media->set_link_status (sc, LMC_LINK_UP); in lmc_open()
1002 sc->lmc_media->set_status (sc, NULL); in lmc_open()
1006 sc->TxDescriptControlInit = ( in lmc_open()
1014 if (sc->ictl.crc_length == LMC_CTL_CRC_LENGTH_16) { in lmc_open()
1016 sc->TxDescriptControlInit |= LMC_TDES_ADD_CRC_DISABLE; in lmc_open()
1018 sc->lmc_media->set_crc_length(sc, sc->ictl.crc_length); in lmc_open()
1023 if ((err = lmc_proto_open(sc)) != 0) in lmc_open()
1027 sc->extra_stats.tx_tbusy0++; in lmc_open()
1032 sc->lmc_intrmask = 0; in lmc_open()
1034 sc->lmc_intrmask |= (TULIP_STS_NORMALINTR in lmc_open()
1044 LMC_CSR_WRITE (sc, csr_intr, sc->lmc_intrmask); in lmc_open()
1046 sc->lmc_cmdmode |= TULIP_CMD_TXRUN; in lmc_open()
1047 sc->lmc_cmdmode |= TULIP_CMD_RXRUN; in lmc_open()
1048 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode); in lmc_open()
1050 sc->lmc_ok = 1; /* Run watchdog */ in lmc_open()
1056 sc->last_link_status = 1; in lmc_open()
1062 timer_setup(&sc->timer, lmc_watchdog, 0); in lmc_open()
1063 sc->timer.expires = jiffies + HZ; in lmc_open()
1064 add_timer (&sc->timer); in lmc_open()
1075 lmc_softc_t *sc = dev_to_sc(dev); in lmc_running_reset() local
1079 LMC_CSR_WRITE (sc, csr_intr, 0x00000000); in lmc_running_reset()
1081 lmc_dec_reset (sc); in lmc_running_reset()
1082 lmc_reset (sc); in lmc_running_reset()
1083 lmc_softreset (sc); in lmc_running_reset()
1084 /* sc->lmc_miireg16 |= LMC_MII16_LED_ALL; */ in lmc_running_reset()
1085 sc->lmc_media->set_link_status (sc, 1); in lmc_running_reset()
1086 sc->lmc_media->set_status (sc, NULL); in lmc_running_reset()
1090 sc->lmc_txfull = 0; in lmc_running_reset()
1091 sc->extra_stats.tx_tbusy0++; in lmc_running_reset()
1093 sc->lmc_intrmask = TULIP_DEFAULT_INTR_MASK; in lmc_running_reset()
1094 LMC_CSR_WRITE (sc, csr_intr, sc->lmc_intrmask); in lmc_running_reset()
1096 sc->lmc_cmdmode |= (TULIP_CMD_TXRUN | TULIP_CMD_RXRUN); in lmc_running_reset()
1097 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode); in lmc_running_reset()
1108 lmc_softc_t *sc = dev_to_sc(dev); in lmc_close() local
1110 sc->lmc_ok = 0; in lmc_close()
1111 sc->lmc_media->set_link_status (sc, 0); in lmc_close()
1112 del_timer (&sc->timer); in lmc_close()
1113 lmc_proto_close(sc); in lmc_close()
1123 lmc_softc_t *sc = dev_to_sc(dev); in lmc_ifdown() local
1130 sc->extra_stats.tx_tbusy1++; in lmc_ifdown()
1134 LMC_CSR_WRITE (sc, csr_intr, 0x00000000); in lmc_ifdown()
1137 csr6 = LMC_CSR_READ (sc, csr_command); in lmc_ifdown()
1140 LMC_CSR_WRITE (sc, csr_command, csr6); in lmc_ifdown()
1142 sc->lmc_device->stats.rx_missed_errors += in lmc_ifdown()
1143 LMC_CSR_READ(sc, csr_missed_frames) & 0xffff; in lmc_ifdown()
1146 if(sc->got_irq == 1){ in lmc_ifdown()
1148 sc->got_irq = 0; in lmc_ifdown()
1154 struct sk_buff *skb = sc->lmc_rxq[i]; in lmc_ifdown()
1155 sc->lmc_rxq[i] = NULL; in lmc_ifdown()
1156 sc->lmc_rxring[i].status = 0; in lmc_ifdown()
1157 sc->lmc_rxring[i].length = 0; in lmc_ifdown()
1158 sc->lmc_rxring[i].buffer1 = 0xDEADBEEF; in lmc_ifdown()
1161 sc->lmc_rxq[i] = NULL; in lmc_ifdown()
1166 if (sc->lmc_txq[i] != NULL) in lmc_ifdown()
1167 dev_kfree_skb(sc->lmc_txq[i]); in lmc_ifdown()
1168 sc->lmc_txq[i] = NULL; in lmc_ifdown()
1171 lmc_led_off (sc, LMC_MII16_LED_ALL); in lmc_ifdown()
1174 sc->extra_stats.tx_tbusy0++; in lmc_ifdown()
1185 lmc_softc_t *sc = dev_to_sc(dev); in lmc_interrupt() local
1194 spin_lock(&sc->lmc_lock); in lmc_interrupt()
1199 csr = LMC_CSR_READ (sc, csr_status); in lmc_interrupt()
1204 if ( ! (csr & sc->lmc_intrmask)) { in lmc_interrupt()
1211 while (csr & sc->lmc_intrmask) { in lmc_interrupt()
1217 LMC_CSR_WRITE (sc, csr_status, csr); in lmc_interrupt()
1244 sc->extra_stats.tx_NoCompleteCnt = 0; in lmc_interrupt()
1246 badtx = sc->lmc_taint_tx; in lmc_interrupt()
1249 while ((badtx < sc->lmc_next_tx)) { in lmc_interrupt()
1250 stat = sc->lmc_txring[i].status; in lmc_interrupt()
1253 sc->lmc_txring[i].length); in lmc_interrupt()
1265 if (sc->lmc_txq[i] == NULL) in lmc_interrupt()
1272 sc->lmc_device->stats.tx_errors++; in lmc_interrupt()
1274 sc->lmc_device->stats.tx_aborted_errors++; in lmc_interrupt()
1276 sc->lmc_device->stats.tx_carrier_errors++; in lmc_interrupt()
1278 sc->lmc_device->stats.tx_window_errors++; in lmc_interrupt()
1280 sc->lmc_device->stats.tx_fifo_errors++; in lmc_interrupt()
1282 sc->lmc_device->stats.tx_bytes += sc->lmc_txring[i].length & 0x7ff; in lmc_interrupt()
1284 sc->lmc_device->stats.tx_packets++; in lmc_interrupt()
1287 dev_consume_skb_irq(sc->lmc_txq[i]); in lmc_interrupt()
1288 sc->lmc_txq[i] = NULL; in lmc_interrupt()
1294 if (sc->lmc_next_tx - badtx > LMC_TXDESCS) in lmc_interrupt()
1300 sc->lmc_txfull = 0; in lmc_interrupt()
1302 sc->extra_stats.tx_tbusy0++; in lmc_interrupt()
1306 sc->extra_stats.dirtyTx = badtx; in lmc_interrupt()
1307 sc->extra_stats.lmc_next_tx = sc->lmc_next_tx; in lmc_interrupt()
1308 sc->extra_stats.lmc_txfull = sc->lmc_txfull; in lmc_interrupt()
1310 sc->lmc_taint_tx = badtx; in lmc_interrupt()
1334 lmc_dec_reset (sc); in lmc_interrupt()
1335 lmc_reset (sc); in lmc_interrupt()
1336 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0); in lmc_interrupt()
1338 lmc_mii_readreg (sc, 0, 16), in lmc_interrupt()
1339 lmc_mii_readreg (sc, 0, 17)); in lmc_interrupt()
1351 csr = LMC_CSR_READ (sc, csr_status); in lmc_interrupt()
1357 spin_unlock(&sc->lmc_lock); in lmc_interrupt()
1365 lmc_softc_t *sc = dev_to_sc(dev); in lmc_start_xmit() local
1370 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_start_xmit()
1374 entry = sc->lmc_next_tx % LMC_TXDESCS; in lmc_start_xmit()
1376 sc->lmc_txq[entry] = skb; in lmc_start_xmit()
1377 sc->lmc_txring[entry].buffer1 = virt_to_bus (skb->data); in lmc_start_xmit()
1383 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 / 2) in lmc_start_xmit()
1395 else if (sc->lmc_next_tx - sc->lmc_taint_tx < LMC_TXDESCS - 1) in lmc_start_xmit()
1405 sc->lmc_txfull = 1; in lmc_start_xmit()
1411 if (sc->lmc_next_tx - sc->lmc_taint_tx >= LMC_TXDESCS - 1) in lmc_start_xmit()
1413 sc->lmc_txfull = 1; in lmc_start_xmit()
1415 sc->extra_stats.tx_tbusy1++; in lmc_start_xmit()
1425 flag = sc->lmc_txring[entry].length = (skb->len) | flag | in lmc_start_xmit()
1426 sc->TxDescriptControlInit; in lmc_start_xmit()
1432 sc->extra_stats.tx_NoCompleteCnt++; in lmc_start_xmit()
1433 sc->lmc_next_tx++; in lmc_start_xmit()
1437 sc->lmc_txring[entry].status = 0x80000000; in lmc_start_xmit()
1440 LMC_CSR_WRITE (sc, csr_txpoll, 0); in lmc_start_xmit()
1442 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_start_xmit()
1450 lmc_softc_t *sc = dev_to_sc(dev); in lmc_rx() local
1459 lmc_led_on(sc, LMC_DS3_LED3); in lmc_rx()
1463 i = sc->lmc_next_rx % LMC_RXDESCS; in lmc_rx()
1465 while (((stat = sc->lmc_rxring[i].status) & LMC_RDES_OWN_BIT) != DESC_OWNED_BY_DC21X4) in lmc_rx()
1472 sc->lmc_device->stats.rx_length_errors++; in lmc_rx()
1478 sc->lmc_device->stats.rx_errors++; in lmc_rx()
1479 sc->lmc_device->stats.rx_frame_errors++; in lmc_rx()
1485 sc->lmc_device->stats.rx_errors++; in lmc_rx()
1486 sc->lmc_device->stats.rx_crc_errors++; in lmc_rx()
1491 sc->lmc_device->stats.rx_length_errors++; in lmc_rx()
1496 if (len < sc->lmc_crcSize + 2) { in lmc_rx()
1497 sc->lmc_device->stats.rx_length_errors++; in lmc_rx()
1498 sc->extra_stats.rx_SmallPktCnt++; in lmc_rx()
1507 len -= sc->lmc_crcSize; in lmc_rx()
1509 skb = sc->lmc_rxq[i]; in lmc_rx()
1519 sc->lmc_rxq[i] = nsb; in lmc_rx()
1521 sc->lmc_rxring[i].buffer1 = virt_to_bus(skb_tail_pointer(nsb)); in lmc_rx()
1523 sc->failed_recv_alloc = 1; in lmc_rx()
1527 sc->lmc_device->stats.rx_packets++; in lmc_rx()
1528 sc->lmc_device->stats.rx_bytes += len; in lmc_rx()
1545 sc->lmc_rxq[i] = NULL; in lmc_rx()
1546 sc->lmc_rxring[i].buffer1 = 0x0; in lmc_rx()
1549 skb->protocol = lmc_proto_type(sc, skb); in lmc_rx()
1553 lmc_proto_netif(sc, skb); in lmc_rx()
1560 sc->lmc_rxq[i] = nsb; in lmc_rx()
1562 sc->lmc_rxring[i].buffer1 = virt_to_bus(skb_tail_pointer(nsb)); in lmc_rx()
1574 sc->extra_stats.rx_BuffAllocErr++; in lmc_rx()
1576 sc->failed_recv_alloc = 1; in lmc_rx()
1587 nsb->protocol = lmc_proto_type(sc, nsb); in lmc_rx()
1591 lmc_proto_netif(sc, nsb); in lmc_rx()
1596 sc->lmc_rxring[i].status = DESC_OWNED_BY_DC21X4; in lmc_rx()
1598 sc->lmc_next_rx++; in lmc_rx()
1599 i = sc->lmc_next_rx % LMC_RXDESCS; in lmc_rx()
1609 sc->extra_stats.rx_BadPktSurgeCnt++; in lmc_rx()
1611 sc->extra_stats.rx_BadPktSurgeCnt); in lmc_rx()
1615 if (rxIntLoopCnt > sc->extra_stats.rxIntLoopCnt) in lmc_rx()
1616 sc->extra_stats.rxIntLoopCnt = rxIntLoopCnt; /* debug -baz */ in lmc_rx()
1623 if ((sc->lmc_rxring[i].status & LMC_RDES_OWN_BIT) in lmc_rx()
1634 lmc_led_off(sc, LMC_DS3_LED3); in lmc_rx()
1642 lmc_softc_t *sc = dev_to_sc(dev); in lmc_get_stats() local
1645 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_get_stats()
1647 sc->lmc_device->stats.rx_missed_errors += LMC_CSR_READ(sc, csr_missed_frames) & 0xffff; in lmc_get_stats()
1649 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_get_stats()
1651 return &sc->lmc_device->stats; in lmc_get_stats()
1663 unsigned lmc_mii_readreg (lmc_softc_t * const sc, unsigned devaddr, unsigned regno) /*fold00*/ in lmc_mii_readreg() argument
1669 LMC_MII_SYNC (sc); in lmc_mii_readreg()
1675 LMC_CSR_WRITE (sc, csr_9, dataval); in lmc_mii_readreg()
1678 LMC_CSR_WRITE (sc, csr_9, dataval | 0x10000); in lmc_mii_readreg()
1685 LMC_CSR_WRITE (sc, csr_9, 0x40000); in lmc_mii_readreg()
1688 retval = (retval << 1) | ((LMC_CSR_READ (sc, csr_9) & 0x80000) ? 1 : 0); in lmc_mii_readreg()
1689 LMC_CSR_WRITE (sc, csr_9, 0x40000 | 0x10000); in lmc_mii_readreg()
1697 void lmc_mii_writereg (lmc_softc_t * const sc, unsigned devaddr, unsigned regno, unsigned data) /*f… in lmc_mii_writereg() argument
1702 LMC_MII_SYNC (sc); in lmc_mii_writereg()
1714 LMC_CSR_WRITE (sc, csr_9, datav); in lmc_mii_writereg()
1717 LMC_CSR_WRITE (sc, csr_9, (datav | 0x10000)); in lmc_mii_writereg()
1726 LMC_CSR_WRITE (sc, csr_9, 0x40000); in lmc_mii_writereg()
1729 LMC_CSR_WRITE (sc, csr_9, 0x50000); in lmc_mii_writereg()
1736 static void lmc_softreset (lmc_softc_t * const sc) /*fold00*/ in lmc_softreset() argument
1741 sc->lmc_txfull = 0; in lmc_softreset()
1742 sc->lmc_next_rx = 0; in lmc_softreset()
1743 sc->lmc_next_tx = 0; in lmc_softreset()
1744 sc->lmc_taint_rx = 0; in lmc_softreset()
1745 sc->lmc_taint_tx = 0; in lmc_softreset()
1757 if (sc->lmc_rxq[i] == NULL) in lmc_softreset()
1761 … printk(KERN_WARNING "%s: Failed to allocate receiver ring, will try again\n", sc->name); in lmc_softreset()
1762 sc->failed_ring = 1; in lmc_softreset()
1766 sc->lmc_rxq[i] = skb; in lmc_softreset()
1771 skb = sc->lmc_rxq[i]; in lmc_softreset()
1774 skb->dev = sc->lmc_device; in lmc_softreset()
1777 sc->lmc_rxring[i].status = 0x80000000; in lmc_softreset()
1780 sc->lmc_rxring[i].length = skb_tailroom(skb); in lmc_softreset()
1785 sc->lmc_rxring[i].buffer1 = virt_to_bus (skb->data); in lmc_softreset()
1788 sc->lmc_rxring[i].buffer2 = virt_to_bus (&sc->lmc_rxring[i + 1]); in lmc_softreset()
1796 sc->lmc_rxring[i - 1].length |= 0x02000000; /* Set end of buffers flag */ in lmc_softreset()
1797 … sc->lmc_rxring[i - 1].buffer2 = virt_to_bus(&sc->lmc_rxring[0]); /* Point back to the start */ in lmc_softreset()
1799 LMC_CSR_WRITE (sc, csr_rxlist, virt_to_bus (sc->lmc_rxring)); /* write base address */ in lmc_softreset()
1804 if (sc->lmc_txq[i] != NULL){ /* have buffer */ in lmc_softreset()
1805 dev_kfree_skb(sc->lmc_txq[i]); /* free it */ in lmc_softreset()
1806 sc->lmc_device->stats.tx_dropped++; /* We just dropped a packet */ in lmc_softreset()
1808 sc->lmc_txq[i] = NULL; in lmc_softreset()
1809 sc->lmc_txring[i].status = 0x00000000; in lmc_softreset()
1810 sc->lmc_txring[i].buffer2 = virt_to_bus (&sc->lmc_txring[i + 1]); in lmc_softreset()
1812 sc->lmc_txring[i - 1].buffer2 = virt_to_bus (&sc->lmc_txring[0]); in lmc_softreset()
1813 LMC_CSR_WRITE (sc, csr_txlist, virt_to_bus (sc->lmc_txring)); in lmc_softreset()
1816 void lmc_gpio_mkinput(lmc_softc_t * const sc, u32 bits) /*fold00*/ in lmc_gpio_mkinput() argument
1818 sc->lmc_gpio_io &= ~bits; in lmc_gpio_mkinput()
1819 LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io)); in lmc_gpio_mkinput()
1822 void lmc_gpio_mkoutput(lmc_softc_t * const sc, u32 bits) /*fold00*/ in lmc_gpio_mkoutput() argument
1824 sc->lmc_gpio_io |= bits; in lmc_gpio_mkoutput()
1825 LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io)); in lmc_gpio_mkoutput()
1828 void lmc_led_on(lmc_softc_t * const sc, u32 led) /*fold00*/ in lmc_led_on() argument
1830 if ((~sc->lmc_miireg16) & led) /* Already on! */ in lmc_led_on()
1833 sc->lmc_miireg16 &= ~led; in lmc_led_on()
1834 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_led_on()
1837 void lmc_led_off(lmc_softc_t * const sc, u32 led) /*fold00*/ in lmc_led_off() argument
1839 if (sc->lmc_miireg16 & led) /* Already set don't do anything */ in lmc_led_off()
1842 sc->lmc_miireg16 |= led; in lmc_led_off()
1843 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_led_off()
1846 static void lmc_reset(lmc_softc_t * const sc) /*fold00*/ in lmc_reset() argument
1848 sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET; in lmc_reset()
1849 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_reset()
1851 sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET; in lmc_reset()
1852 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16); in lmc_reset()
1857 lmc_gpio_mkoutput(sc, LMC_GEP_RESET); in lmc_reset()
1864 sc->lmc_gpio &= ~(LMC_GEP_RESET); in lmc_reset()
1865 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio); in lmc_reset()
1875 lmc_gpio_mkinput(sc, LMC_GEP_RESET); in lmc_reset()
1880 sc->lmc_media->init(sc); in lmc_reset()
1882 sc->extra_stats.resetCount++; in lmc_reset()
1885 static void lmc_dec_reset(lmc_softc_t * const sc) /*fold00*/ in lmc_dec_reset() argument
1892 sc->lmc_intrmask = 0; in lmc_dec_reset()
1893 LMC_CSR_WRITE(sc, csr_intr, sc->lmc_intrmask); in lmc_dec_reset()
1901 LMC_CSR_WRITE(sc, csr_busmode, TULIP_BUSMODE_SWRESET); in lmc_dec_reset()
1904 sc->lmc_busmode = LMC_CSR_READ(sc, csr_busmode); in lmc_dec_reset()
1905 sc->lmc_busmode = 0x00100000; in lmc_dec_reset()
1906 sc->lmc_busmode &= ~TULIP_BUSMODE_SWRESET; in lmc_dec_reset()
1907 LMC_CSR_WRITE(sc, csr_busmode, sc->lmc_busmode); in lmc_dec_reset()
1909 sc->lmc_cmdmode = LMC_CSR_READ(sc, csr_command); in lmc_dec_reset()
1921 sc->lmc_cmdmode |= ( TULIP_CMD_PROMISCUOUS in lmc_dec_reset()
1929 sc->lmc_cmdmode &= ~( TULIP_CMD_OPERMODE in lmc_dec_reset()
1935 LMC_CSR_WRITE(sc, csr_command, sc->lmc_cmdmode); in lmc_dec_reset()
1940 val = LMC_CSR_READ(sc, csr_sia_general); in lmc_dec_reset()
1942 LMC_CSR_WRITE(sc, csr_sia_general, val); in lmc_dec_reset()
1945 static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, /*fold00*/ in lmc_initcsrs() argument
1948 sc->lmc_csrs.csr_busmode = csr_base + 0 * csr_size; in lmc_initcsrs()
1949 sc->lmc_csrs.csr_txpoll = csr_base + 1 * csr_size; in lmc_initcsrs()
1950 sc->lmc_csrs.csr_rxpoll = csr_base + 2 * csr_size; in lmc_initcsrs()
1951 sc->lmc_csrs.csr_rxlist = csr_base + 3 * csr_size; in lmc_initcsrs()
1952 sc->lmc_csrs.csr_txlist = csr_base + 4 * csr_size; in lmc_initcsrs()
1953 sc->lmc_csrs.csr_status = csr_base + 5 * csr_size; in lmc_initcsrs()
1954 sc->lmc_csrs.csr_command = csr_base + 6 * csr_size; in lmc_initcsrs()
1955 sc->lmc_csrs.csr_intr = csr_base + 7 * csr_size; in lmc_initcsrs()
1956 sc->lmc_csrs.csr_missed_frames = csr_base + 8 * csr_size; in lmc_initcsrs()
1957 sc->lmc_csrs.csr_9 = csr_base + 9 * csr_size; in lmc_initcsrs()
1958 sc->lmc_csrs.csr_10 = csr_base + 10 * csr_size; in lmc_initcsrs()
1959 sc->lmc_csrs.csr_11 = csr_base + 11 * csr_size; in lmc_initcsrs()
1960 sc->lmc_csrs.csr_12 = csr_base + 12 * csr_size; in lmc_initcsrs()
1961 sc->lmc_csrs.csr_13 = csr_base + 13 * csr_size; in lmc_initcsrs()
1962 sc->lmc_csrs.csr_14 = csr_base + 14 * csr_size; in lmc_initcsrs()
1963 sc->lmc_csrs.csr_15 = csr_base + 15 * csr_size; in lmc_initcsrs()
1968 lmc_softc_t *sc = dev_to_sc(dev); in lmc_driver_timeout() local
1972 spin_lock_irqsave(&sc->lmc_lock, flags); in lmc_driver_timeout()
1976 sc->extra_stats.tx_tbusy_calls++; in lmc_driver_timeout()
1988 LMC_CSR_READ (sc, csr_status), in lmc_driver_timeout()
1989 sc->extra_stats.tx_ProcTimeout); in lmc_driver_timeout()
1993 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0); in lmc_driver_timeout()
1995 lmc_mii_readreg (sc, 0, 16), in lmc_driver_timeout()
1996 lmc_mii_readreg (sc, 0, 17)); in lmc_driver_timeout()
1999 csr6 = LMC_CSR_READ (sc, csr_command); in lmc_driver_timeout()
2000 LMC_CSR_WRITE (sc, csr_command, csr6 | 0x0002); in lmc_driver_timeout()
2001 LMC_CSR_WRITE (sc, csr_command, csr6 | 0x2002); in lmc_driver_timeout()
2004 LMC_CSR_WRITE (sc, csr_txpoll, 0); in lmc_driver_timeout()
2006 sc->lmc_device->stats.tx_errors++; in lmc_driver_timeout()
2007 sc->extra_stats.tx_ProcTimeout++; /* -baz */ in lmc_driver_timeout()
2013 spin_unlock_irqrestore(&sc->lmc_lock, flags); in lmc_driver_timeout()