• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/drivers/net/wan/lmc/

Lines Matching refs:sc

99 static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, size_t csr_size);
104 static void lmc_reset(lmc_softc_t * const sc);
105 static void lmc_dec_reset(lmc_softc_t * const sc);
114 lmc_softc_t *sc = dev_to_sc(dev);
133 if (copy_to_user(ifr->ifr_data, &sc->ictl, sizeof(lmc_ctl_t)))
155 spin_lock_irqsave(&sc->lmc_lock, flags);
156 sc->lmc_media->set_status (sc, &ctl);
158 if(ctl.crc_length != sc->ictl.crc_length) {
159 sc->lmc_media->set_crc_length(sc, ctl.crc_length);
160 if (sc->ictl.crc_length == LMC_CTL_CRC_LENGTH_16)
161 sc->TxDescriptControlInit |= LMC_TDES_ADD_CRC_DISABLE;
163 sc->TxDescriptControlInit &= ~LMC_TDES_ADD_CRC_DISABLE;
165 spin_unlock_irqrestore(&sc->lmc_lock, flags);
172 u16 old_type = sc->if_type;
192 spin_lock_irqsave(&sc->lmc_lock, flags);
193 lmc_proto_close(sc);
195 sc->if_type = new_type;
196 lmc_proto_attach(sc);
197 ret = lmc_proto_open(sc);
198 spin_unlock_irqrestore(&sc->lmc_lock, flags);
203 spin_lock_irqsave(&sc->lmc_lock, flags);
204 sc->lmc_xinfo.Magic0 = 0xBEEFCAFE;
206 sc->lmc_xinfo.PciCardType = sc->lmc_cardtype;
207 sc->lmc_xinfo.PciSlotNumber = 0;
208 sc->lmc_xinfo.DriverMajorVersion = DRIVER_MAJOR_VERSION;
209 sc->lmc_xinfo.DriverMinorVersion = DRIVER_MINOR_VERSION;
210 sc->lmc_xinfo.DriverSubVersion = DRIVER_SUB_VERSION;
211 sc->lmc_xinfo.XilinxRevisionNumber =
212 lmc_mii_readreg (sc, 0, 3) & 0xf;
213 sc->lmc_xinfo.MaxFrameSize = LMC_PKT_BUF_SZ;
214 sc->lmc_xinfo.link_status = sc->lmc_media->get_link_status (sc);
215 sc->lmc_xinfo.mii_reg16 = lmc_mii_readreg (sc, 0, 16);
216 spin_unlock_irqrestore(&sc->lmc_lock, flags);
218 sc->lmc_xinfo.Magic1 = 0xDEADBEEF;
220 if (copy_to_user(ifr->ifr_data, &sc->lmc_xinfo,
229 spin_lock_irqsave(&sc->lmc_lock, flags);
230 if (sc->lmc_cardtype == LMC_CARDTYPE_T1) {
231 lmc_mii_writereg(sc, 0, 17, T1FRAMER_FERR_LSB);
232 sc->extra_stats.framingBitErrorCount +=
233 lmc_mii_readreg(sc, 0, 18) & 0xff;
234 lmc_mii_writereg(sc, 0, 17, T1FRAMER_FERR_MSB);
235 sc->extra_stats.framingBitErrorCount +=
236 (lmc_mii_readreg(sc, 0, 18) & 0xff) << 8;
237 lmc_mii_writereg(sc, 0, 17, T1FRAMER_LCV_LSB);
238 sc->extra_stats.lineCodeViolationCount +=
239 lmc_mii_readreg(sc, 0, 18) & 0xff;
240 lmc_mii_writereg(sc, 0, 17, T1FRAMER_LCV_MSB);
241 sc->extra_stats.lineCodeViolationCount +=
242 (lmc_mii_readreg(sc, 0, 18) & 0xff) << 8;
243 lmc_mii_writereg(sc, 0, 17, T1FRAMER_AERR);
244 regVal = lmc_mii_readreg(sc, 0, 18) & 0xff;
246 sc->extra_stats.lossOfFrameCount +=
248 sc->extra_stats.changeOfFrameAlignmentCount +=
250 sc->extra_stats.severelyErroredFrameCount +=
253 spin_unlock_irqrestore(&sc->lmc_lock, flags);
254 if (copy_to_user(ifr->ifr_data, &sc->lmc_device->stats,
255 sizeof(sc->lmc_device->stats)) ||
256 copy_to_user(ifr->ifr_data + sizeof(sc->lmc_device->stats),
257 &sc->extra_stats, sizeof(sc->extra_stats)))
269 spin_lock_irqsave(&sc->lmc_lock, flags);
270 memset(&sc->lmc_device->stats, 0, sizeof(sc->lmc_device->stats));
271 memset(&sc->extra_stats, 0, sizeof(sc->extra_stats));
272 sc->extra_stats.check = STATCHECK;
273 sc->extra_stats.version_size = (DRIVER_VERSION << 16) +
274 sizeof(sc->lmc_device->stats) + sizeof(sc->extra_stats);
275 sc->extra_stats.lmc_cardtype = sc->lmc_cardtype;
276 spin_unlock_irqrestore(&sc->lmc_lock, flags);
295 spin_lock_irqsave(&sc->lmc_lock, flags);
296 sc->lmc_media->set_circuit_type(sc, ctl.circuit_type);
297 sc->ictl.circuit_type = ctl.circuit_type;
298 spin_unlock_irqrestore(&sc->lmc_lock, flags);
309 spin_lock_irqsave(&sc->lmc_lock, flags);
311 printk (" REG16 before reset +%04x\n", lmc_mii_readreg (sc, 0, 16));
313 printk (" REG16 after reset +%04x\n", lmc_mii_readreg (sc, 0, 16));
315 LMC_EVENT_LOG(LMC_EVENT_FORCEDRESET, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16));
316 spin_unlock_irqrestore(&sc->lmc_lock, flags);
336 if (sc->lmc_cardtype != LMC_CARDTYPE_T1){
363 spin_lock_irqsave(&sc->lmc_lock, flags);
364 mii = lmc_mii_readreg (sc, 0, 16);
369 lmc_gpio_mkinput(sc, 0xff);
374 lmc_gpio_mkoutput(sc, LMC_GEP_RESET);
382 sc->lmc_gpio &= ~LMC_GEP_RESET;
383 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
391 sc->lmc_gpio |= LMC_GEP_RESET;
392 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
398 lmc_gpio_mkinput(sc, 0xff);
401 sc->lmc_media->set_link_status (sc, 1);
402 sc->lmc_media->set_status (sc, NULL);
403 // lmc_softreset(sc);
408 lmc_led_on(sc, LMC_DS3_LED0);
410 lmc_led_off(sc, LMC_DS3_LED0);
411 lmc_led_on(sc, LMC_DS3_LED1);
413 lmc_led_off(sc, LMC_DS3_LED1);
414 lmc_led_on(sc, LMC_DS3_LED3);
416 lmc_led_off(sc, LMC_DS3_LED3);
417 lmc_led_on(sc, LMC_DS3_LED2);
419 lmc_led_off(sc, LMC_DS3_LED2);
422 spin_unlock_irqrestore(&sc->lmc_lock, flags);
435 spin_lock_irqsave(&sc->lmc_lock, flags);
436 mii = lmc_mii_readreg (sc, 0, 16);
441 lmc_gpio_mkinput(sc, 0xff);
446 lmc_gpio_mkoutput(sc, LMC_GEP_DP | LMC_GEP_RESET);
454 sc->lmc_gpio &= ~(LMC_GEP_RESET | LMC_GEP_DP);
455 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
463 sc->lmc_gpio |= LMC_GEP_DP | LMC_GEP_RESET;
464 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
469 while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 &&
477 lmc_gpio_mkinput(sc, 0xff);
478 spin_unlock_irqrestore(&sc->lmc_lock, flags);
514 spin_lock_irqsave(&sc->lmc_lock, flags);
515 lmc_gpio_mkinput(sc, 0xff);
528 sc->lmc_gpio = 0x00;
529 sc->lmc_gpio &= ~LMC_GEP_DP;
530 sc->lmc_gpio &= ~LMC_GEP_RESET;
531 sc->lmc_gpio |= LMC_GEP_MODE;
532 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
534 lmc_gpio_mkoutput(sc, LMC_GEP_MODE | LMC_GEP_DP | LMC_GEP_RESET);
549 lmc_gpio_mkinput(sc, LMC_GEP_DP | LMC_GEP_RESET);
554 sc->lmc_gpio = 0x00;
555 sc->lmc_gpio |= LMC_GEP_MODE;
556 sc->lmc_gpio |= LMC_GEP_DATA;
557 sc->lmc_gpio |= LMC_GEP_CLK;
558 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
560 lmc_gpio_mkoutput(sc, LMC_GEP_DATA | LMC_GEP_CLK | LMC_GEP_MODE );
565 while( (LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0 &&
574 sc->lmc_gpio &= ~LMC_GEP_DATA; /* Data is 0 */
577 sc->lmc_gpio |= LMC_GEP_DATA; /* Data is 1 */
581 sc->lmc_gpio |= LMC_GEP_DATA; /* Assume it's 1 */
583 sc->lmc_gpio &= ~LMC_GEP_CLK; /* Clock to zero */
584 sc->lmc_gpio |= LMC_GEP_MODE;
585 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
588 sc->lmc_gpio |= LMC_GEP_CLK; /* Put the clack back to one */
589 sc->lmc_gpio |= LMC_GEP_MODE;
590 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
593 if((LMC_CSR_READ(sc, csr_gp) & LMC_GEP_INIT) == 0){
596 else if((LMC_CSR_READ(sc, csr_gp) & LMC_GEP_DP) == 0){
603 lmc_gpio_mkinput(sc, 0xff);
605 sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET;
606 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
608 sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET;
609 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
610 spin_unlock_irqrestore(&sc->lmc_lock, flags);
624 sc->lmc_txfull = 0;
630 ret = lmc_proto_ioctl (sc, ifr, cmd);
644 lmc_softc_t *sc = dev_to_sc(dev);
651 spin_lock_irqsave(&sc->lmc_lock, flags);
653 if(sc->check != 0xBEAFCAFE){
655 spin_unlock_irqrestore(&sc->lmc_lock, flags);
664 LMC_CSR_WRITE (sc, csr_15, 0x00000011);
665 sc->lmc_cmdmode |= TULIP_CMD_TXRUN | TULIP_CMD_RXRUN;
666 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode);
668 if (sc->lmc_ok == 0)
671 LMC_EVENT_LOG(LMC_EVENT_WATCHDOG, LMC_CSR_READ (sc, csr_status), lmc_mii_readreg (sc, 0, 16));
676 if (sc->lmc_taint_tx == sc->lastlmc_taint_tx &&
677 sc->lmc_device->stats.tx_packets > sc->lasttx_packets &&
678 sc->tx_TimeoutInd == 0)
682 sc->tx_TimeoutInd = 1;
684 else if (sc->lmc_taint_tx == sc->lastlmc_taint_tx &&
685 sc->lmc_device->stats.tx_packets > sc->lasttx_packets &&
686 sc->tx_TimeoutInd)
689 LMC_EVENT_LOG(LMC_EVENT_XMTINTTMO, LMC_CSR_READ (sc, csr_status), 0);
691 sc->tx_TimeoutDisplay = 1;
692 sc->extra_stats.tx_TimeoutCnt++;
699 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0);
707 LMC_EVENT_LOG(LMC_EVENT_RESET2, lmc_mii_readreg (sc, 0, 16), lmc_mii_readreg (sc, 0, 17));
710 sc->tx_TimeoutInd = 0;
711 sc->lastlmc_taint_tx = sc->lmc_taint_tx;
712 sc->lasttx_packets = sc->lmc_device->stats.tx_packets;
714 sc->tx_TimeoutInd = 0;
715 sc->lastlmc_taint_tx = sc->lmc_taint_tx;
716 sc->lasttx_packets = sc->lmc_device->stats.tx_packets;
722 link_status = sc->lmc_media->get_link_status (sc);
728 if ((link_status == 0) && (sc->last_link_status != 0)) {
730 sc->last_link_status = 0;
731 /* lmc_reset (sc); Why reset??? The link can go down ok */
741 if (link_status != 0 && sc->last_link_status == 0) {
743 sc->last_link_status = 1;
744 /* lmc_reset (sc); Again why reset??? */
750 sc->lmc_media->watchdog(sc);
756 LMC_CSR_WRITE(sc, csr_rxpoll, 0);
762 if(sc->failed_ring == 1){
767 sc->failed_ring = 0;
768 lmc_softreset(sc);
770 if(sc->failed_recv_alloc == 1){
776 sc->failed_recv_alloc = 0;
777 lmc_softreset(sc);
786 ticks = LMC_CSR_READ (sc, csr_gp_timer);
787 LMC_CSR_WRITE (sc, csr_gp_timer, 0xffffffffUL);
788 sc->ictl.ticks = 0x0000ffff - (ticks & 0x0000ffff);
793 sc->timer.expires = jiffies + (HZ);
794 add_timer (&sc->timer);
796 spin_unlock_irqrestore(&sc->lmc_lock, flags);
823 lmc_softc_t *sc;
847 sc = kzalloc(sizeof(lmc_softc_t), GFP_KERNEL);
848 if (!sc) {
853 dev = alloc_hdlcdev(sc);
866 sc->lmc_device = dev;
867 sc->name = dev->name;
868 sc->if_type = LMC_PPP;
869 sc->check = 0xBEAFCAFE;
877 * Must have a valid sc and dev structure
879 lmc_proto_attach(sc);
883 spin_lock_init(&sc->lmc_lock);
896 sc->lmc_cardtype = LMC_CARDTYPE_UNKNOWN;
897 sc->lmc_timing = LMC_CTL_CLOCK_SOURCE_EXT;
911 sc->lmc_cardtype = LMC_CARDTYPE_HSSI;
912 sc->lmc_media = &lmc_hssi_media;
916 sc->lmc_cardtype = LMC_CARDTYPE_DS3;
917 sc->lmc_media = &lmc_ds3_media;
921 sc->lmc_cardtype = LMC_CARDTYPE_SSI;
922 sc->lmc_media = &lmc_ssi_media;
926 sc->lmc_cardtype = LMC_CARDTYPE_T1;
927 sc->lmc_media = &lmc_t1_media;
934 lmc_initcsrs (sc, dev->base_addr, 8);
936 lmc_gpio_mkinput (sc, 0xff);
937 sc->lmc_gpio = 0; /* drive no signals yet */
939 sc->lmc_media->defaults (sc);
941 sc->lmc_media->set_link_status (sc, LMC_LINK_UP);
946 AdapModelNum = (lmc_mii_readreg (sc, 0, 3) & 0x3f0) >> 4;
963 LMC_CSR_WRITE (sc, csr_gp_timer, 0xFFFFFFFFUL);
965 sc->board_idx = cards_found++;
966 sc->extra_stats.check = STATCHECK;
967 sc->extra_stats.version_size = (DRIVER_VERSION << 16) +
968 sizeof(sc->lmc_device->stats) + sizeof(sc->extra_stats);
969 sc->extra_stats.lmc_cardtype = sc->lmc_cardtype;
971 sc->lmc_ok = 0;
972 sc->last_link_status = 0;
979 kfree(sc);
1009 lmc_softc_t *sc = dev_to_sc(dev);
1014 lmc_led_on(sc, LMC_DS3_LED0);
1016 lmc_dec_reset(sc);
1017 lmc_reset(sc);
1019 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ(sc, csr_status), 0);
1020 LMC_EVENT_LOG(LMC_EVENT_RESET2, lmc_mii_readreg(sc, 0, 16),
1021 lmc_mii_readreg(sc, 0, 17));
1023 if (sc->lmc_ok){
1028 lmc_softreset (sc);
1036 sc->got_irq = 1;
1039 sc->lmc_miireg16 |= LMC_MII16_LED_ALL;
1040 sc->lmc_media->set_link_status (sc, LMC_LINK_UP);
1045 sc->lmc_media->set_status (sc, NULL);
1049 sc->TxDescriptControlInit = (
1057 if (sc->ictl.crc_length == LMC_CTL_CRC_LENGTH_16) {
1059 sc->TxDescriptControlInit |= LMC_TDES_ADD_CRC_DISABLE;
1061 sc->lmc_media->set_crc_length(sc, sc->ictl.crc_length);
1066 if ((err = lmc_proto_open(sc)) != 0)
1070 sc->extra_stats.tx_tbusy0++;
1075 sc->lmc_intrmask = 0;
1077 sc->lmc_intrmask |= (TULIP_STS_NORMALINTR
1087 LMC_CSR_WRITE (sc, csr_intr, sc->lmc_intrmask);
1089 sc->lmc_cmdmode |= TULIP_CMD_TXRUN;
1090 sc->lmc_cmdmode |= TULIP_CMD_RXRUN;
1091 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode);
1093 sc->lmc_ok = 1; /* Run watchdog */
1099 sc->last_link_status = 1;
1105 init_timer (&sc->timer);
1106 sc->timer.expires = jiffies + HZ;
1107 sc->timer.data = (unsigned long) dev;
1108 sc->timer.function = &lmc_watchdog;
1109 add_timer (&sc->timer);
1122 lmc_softc_t *sc = dev_to_sc(dev);
1128 LMC_CSR_WRITE (sc, csr_intr, 0x00000000);
1130 lmc_dec_reset (sc);
1131 lmc_reset (sc);
1132 lmc_softreset (sc);
1133 /* sc->lmc_miireg16 |= LMC_MII16_LED_ALL; */
1134 sc->lmc_media->set_link_status (sc, 1);
1135 sc->lmc_media->set_status (sc, NULL);
1139 sc->lmc_txfull = 0;
1140 sc->extra_stats.tx_tbusy0++;
1142 sc->lmc_intrmask = TULIP_DEFAULT_INTR_MASK;
1143 LMC_CSR_WRITE (sc, csr_intr, sc->lmc_intrmask);
1145 sc->lmc_cmdmode |= (TULIP_CMD_TXRUN | TULIP_CMD_RXRUN);
1146 LMC_CSR_WRITE (sc, csr_command, sc->lmc_cmdmode);
1159 lmc_softc_t *sc = dev_to_sc(dev);
1163 sc->lmc_ok = 0;
1164 sc->lmc_media->set_link_status (sc, 0);
1165 del_timer (&sc->timer);
1166 lmc_proto_close(sc);
1178 lmc_softc_t *sc = dev_to_sc(dev);
1187 sc->extra_stats.tx_tbusy1++;
1191 LMC_CSR_WRITE (sc, csr_intr, 0x00000000);
1194 csr6 = LMC_CSR_READ (sc, csr_command);
1197 LMC_CSR_WRITE (sc, csr_command, csr6);
1199 sc->lmc_device->stats.rx_missed_errors +=
1200 LMC_CSR_READ(sc, csr_missed_frames) & 0xffff;
1203 if(sc->got_irq == 1){
1205 sc->got_irq = 0;
1211 struct sk_buff *skb = sc->lmc_rxq[i];
1212 sc->lmc_rxq[i] = NULL;
1213 sc->lmc_rxring[i].status = 0;
1214 sc->lmc_rxring[i].length = 0;
1215 sc->lmc_rxring[i].buffer1 = 0xDEADBEEF;
1218 sc->lmc_rxq[i] = NULL;
1223 if (sc->lmc_txq[i] != NULL)
1224 dev_kfree_skb(sc->lmc_txq[i]);
1225 sc->lmc_txq[i] = NULL;
1228 lmc_led_off (sc, LMC_MII16_LED_ALL);
1231 sc->extra_stats.tx_tbusy0++;
1244 lmc_softc_t *sc = dev_to_sc(dev);
1255 spin_lock(&sc->lmc_lock);
1260 csr = LMC_CSR_READ (sc, csr_status);
1265 if ( ! (csr & sc->lmc_intrmask)) {
1272 while (csr & sc->lmc_intrmask) {
1278 LMC_CSR_WRITE (sc, csr_status, csr);
1307 sc->extra_stats.tx_NoCompleteCnt = 0;
1309 badtx = sc->lmc_taint_tx;
1312 while ((badtx < sc->lmc_next_tx)) {
1313 stat = sc->lmc_txring[i].status;
1316 sc->lmc_txring[i].length);
1328 if (sc->lmc_txq[i] == NULL)
1335 sc->lmc_device->stats.tx_errors++;
1337 sc->lmc_device->stats.tx_aborted_errors++;
1339 sc->lmc_device->stats.tx_carrier_errors++;
1341 sc->lmc_device->stats.tx_window_errors++;
1343 sc->lmc_device->stats.tx_fifo_errors++;
1345 sc->lmc_device->stats.tx_bytes += sc->lmc_txring[i].length & 0x7ff;
1347 sc->lmc_device->stats.tx_packets++;
1350 // dev_kfree_skb(sc->lmc_txq[i]);
1351 dev_kfree_skb_irq(sc->lmc_txq[i]);
1352 sc->lmc_txq[i] = NULL;
1358 if (sc->lmc_next_tx - badtx > LMC_TXDESCS)
1364 sc->lmc_txfull = 0;
1366 sc->extra_stats.tx_tbusy0++;
1370 sc->extra_stats.dirtyTx = badtx;
1371 sc->extra_stats.lmc_next_tx = sc->lmc_next_tx;
1372 sc->extra_stats.lmc_txfull = sc->lmc_txfull;
1374 sc->lmc_taint_tx = badtx;
1398 lmc_dec_reset (sc);
1399 lmc_reset (sc);
1400 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0);
1402 lmc_mii_readreg (sc, 0, 16),
1403 lmc_mii_readreg (sc, 0, 17));
1415 csr = LMC_CSR_READ (sc, csr_status);
1421 spin_unlock(&sc->lmc_lock);
1430 lmc_softc_t *sc = dev_to_sc(dev);
1437 spin_lock_irqsave(&sc->lmc_lock, flags);
1441 entry = sc->lmc_next_tx % LMC_TXDESCS;
1443 sc->lmc_txq[entry] = skb;
1444 sc->lmc_txring[entry].buffer1 = virt_to_bus (skb->data);
1450 if (sc->lmc_next_tx - sc->lmc_taint_tx < LMC_TXDESCS / 2)
1456 else if (sc->lmc_next_tx - sc->lmc_taint_tx == LMC_TXDESCS / 2)
1462 else if (sc->lmc_next_tx - sc->lmc_taint_tx < LMC_TXDESCS - 1)
1472 sc->lmc_txfull = 1;
1478 if (sc->lmc_next_tx - sc->lmc_taint_tx >= LMC_TXDESCS - 1)
1480 sc->lmc_txfull = 1;
1482 sc->extra_stats.tx_tbusy1++;
1492 flag = sc->lmc_txring[entry].length = (skb->len) | flag |
1493 sc->TxDescriptControlInit;
1499 sc->extra_stats.tx_NoCompleteCnt++;
1500 sc->lmc_next_tx++;
1504 sc->lmc_txring[entry].status = 0x80000000;
1507 LMC_CSR_WRITE (sc, csr_txpoll, 0);
1509 spin_unlock_irqrestore(&sc->lmc_lock, flags);
1518 lmc_softc_t *sc = dev_to_sc(dev);
1530 lmc_led_on(sc, LMC_DS3_LED3);
1534 i = sc->lmc_next_rx % LMC_RXDESCS;
1535 next_rx = sc->lmc_next_rx;
1537 while (((stat = sc->lmc_rxring[i].status) & LMC_RDES_OWN_BIT) != DESC_OWNED_BY_DC21X4)
1544 sc->lmc_device->stats.rx_length_errors++;
1550 sc->lmc_device->stats.rx_errors++;
1551 sc->lmc_device->stats.rx_frame_errors++;
1557 sc->lmc_device->stats.rx_errors++;
1558 sc->lmc_device->stats.rx_crc_errors++;
1563 sc->lmc_device->stats.rx_length_errors++;
1568 if (len < sc->lmc_crcSize + 2) {
1569 sc->lmc_device->stats.rx_length_errors++;
1570 sc->extra_stats.rx_SmallPktCnt++;
1579 len -= sc->lmc_crcSize;
1581 skb = sc->lmc_rxq[i];
1591 sc->lmc_rxq[i] = nsb;
1593 sc->lmc_rxring[i].buffer1 = virt_to_bus(skb_tail_pointer(nsb));
1595 sc->failed_recv_alloc = 1;
1599 sc->lmc_device->stats.rx_packets++;
1600 sc->lmc_device->stats.rx_bytes += len;
1617 sc->lmc_rxq[i] = NULL;
1618 sc->lmc_rxring[i].buffer1 = 0x0;
1621 skb->protocol = lmc_proto_type(sc, skb);
1625 lmc_proto_netif(sc, skb);
1632 sc->lmc_rxq[i] = nsb;
1634 sc->lmc_rxring[i].buffer1 = virt_to_bus(skb_tail_pointer(nsb));
1646 sc->extra_stats.rx_BuffAllocErr++;
1648 sc->failed_recv_alloc = 1;
1659 nsb->protocol = lmc_proto_type(sc, nsb);
1663 lmc_proto_netif(sc, nsb);
1668 sc->lmc_rxring[i].status = DESC_OWNED_BY_DC21X4;
1670 sc->lmc_next_rx++;
1671 i = sc->lmc_next_rx % LMC_RXDESCS;
1681 sc->extra_stats.rx_BadPktSurgeCnt++;
1683 sc->extra_stats.rx_BadPktSurgeCnt);
1687 if (rxIntLoopCnt > sc->extra_stats.rxIntLoopCnt)
1688 sc->extra_stats.rxIntLoopCnt = rxIntLoopCnt; /* debug -baz */
1695 if ((sc->lmc_rxring[i].status & LMC_RDES_OWN_BIT)
1706 lmc_led_off(sc, LMC_DS3_LED3);
1717 lmc_softc_t *sc = dev_to_sc(dev);
1722 spin_lock_irqsave(&sc->lmc_lock, flags);
1724 sc->lmc_device->stats.rx_missed_errors += LMC_CSR_READ(sc, csr_missed_frames) & 0xffff;
1726 spin_unlock_irqrestore(&sc->lmc_lock, flags);
1730 return &sc->lmc_device->stats;
1753 unsigned lmc_mii_readreg (lmc_softc_t * const sc, unsigned devaddr, unsigned regno) /*fold00*/
1759 lmc_trace(sc->lmc_device, "lmc_mii_readreg in");
1761 LMC_MII_SYNC (sc);
1763 lmc_trace(sc->lmc_device, "lmc_mii_readreg: done sync");
1769 LMC_CSR_WRITE (sc, csr_9, dataval);
1772 LMC_CSR_WRITE (sc, csr_9, dataval | 0x10000);
1777 lmc_trace(sc->lmc_device, "lmc_mii_readreg: done1");
1781 LMC_CSR_WRITE (sc, csr_9, 0x40000);
1784 retval = (retval << 1) | ((LMC_CSR_READ (sc, csr_9) & 0x80000) ? 1 : 0);
1785 LMC_CSR_WRITE (sc, csr_9, 0x40000 | 0x10000);
1790 lmc_trace(sc->lmc_device, "lmc_mii_readreg out");
1795 void lmc_mii_writereg (lmc_softc_t * const sc, unsigned devaddr, unsigned regno, unsigned data) /*fold00*/
1800 lmc_trace(sc->lmc_device, "lmc_mii_writereg in");
1802 LMC_MII_SYNC (sc);
1814 LMC_CSR_WRITE (sc, csr_9, datav);
1817 LMC_CSR_WRITE (sc, csr_9, (datav | 0x10000));
1826 LMC_CSR_WRITE (sc, csr_9, 0x40000);
1829 LMC_CSR_WRITE (sc, csr_9, 0x50000);
1835 lmc_trace(sc->lmc_device, "lmc_mii_writereg out");
1838 static void lmc_softreset (lmc_softc_t * const sc) /*fold00*/
1842 lmc_trace(sc->lmc_device, "lmc_softreset in");
1845 sc->lmc_txfull = 0;
1846 sc->lmc_next_rx = 0;
1847 sc->lmc_next_tx = 0;
1848 sc->lmc_taint_rx = 0;
1849 sc->lmc_taint_tx = 0;
1861 if (sc->lmc_rxq[i] == NULL)
1865 printk(KERN_WARNING "%s: Failed to allocate receiver ring, will try again\n", sc->name);
1866 sc->failed_ring = 1;
1870 sc->lmc_rxq[i] = skb;
1875 skb = sc->lmc_rxq[i];
1878 skb->dev = sc->lmc_device;
1881 sc->lmc_rxring[i].status = 0x80000000;
1884 sc->lmc_rxring[i].length = skb_tailroom(skb);
1889 sc->lmc_rxring[i].buffer1 = virt_to_bus (skb->data);
1892 sc->lmc_rxring[i].buffer2 = virt_to_bus (&sc->lmc_rxring[i + 1]);
1900 sc->lmc_rxring[i - 1].length |= 0x02000000; /* Set end of buffers flag */
1901 sc->lmc_rxring[i - 1].buffer2 = virt_to_bus(&sc->lmc_rxring[0]); /* Point back to the start */
1903 LMC_CSR_WRITE (sc, csr_rxlist, virt_to_bus (sc->lmc_rxring)); /* write base address */
1908 if (sc->lmc_txq[i] != NULL){ /* have buffer */
1909 dev_kfree_skb(sc->lmc_txq[i]); /* free it */
1910 sc->lmc_device->stats.tx_dropped++; /* We just dropped a packet */
1912 sc->lmc_txq[i] = NULL;
1913 sc->lmc_txring[i].status = 0x00000000;
1914 sc->lmc_txring[i].buffer2 = virt_to_bus (&sc->lmc_txring[i + 1]);
1916 sc->lmc_txring[i - 1].buffer2 = virt_to_bus (&sc->lmc_txring[0]);
1917 LMC_CSR_WRITE (sc, csr_txlist, virt_to_bus (sc->lmc_txring));
1919 lmc_trace(sc->lmc_device, "lmc_softreset out");
1922 void lmc_gpio_mkinput(lmc_softc_t * const sc, u32 bits) /*fold00*/
1924 lmc_trace(sc->lmc_device, "lmc_gpio_mkinput in");
1925 sc->lmc_gpio_io &= ~bits;
1926 LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io));
1927 lmc_trace(sc->lmc_device, "lmc_gpio_mkinput out");
1930 void lmc_gpio_mkoutput(lmc_softc_t * const sc, u32 bits) /*fold00*/
1932 lmc_trace(sc->lmc_device, "lmc_gpio_mkoutput in");
1933 sc->lmc_gpio_io |= bits;
1934 LMC_CSR_WRITE(sc, csr_gp, TULIP_GP_PINSET | (sc->lmc_gpio_io));
1935 lmc_trace(sc->lmc_device, "lmc_gpio_mkoutput out");
1938 void lmc_led_on(lmc_softc_t * const sc, u32 led) /*fold00*/
1940 lmc_trace(sc->lmc_device, "lmc_led_on in");
1941 if((~sc->lmc_miireg16) & led){ /* Already on! */
1942 lmc_trace(sc->lmc_device, "lmc_led_on aon out");
1946 sc->lmc_miireg16 &= ~led;
1947 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
1948 lmc_trace(sc->lmc_device, "lmc_led_on out");
1951 void lmc_led_off(lmc_softc_t * const sc, u32 led) /*fold00*/
1953 lmc_trace(sc->lmc_device, "lmc_led_off in");
1954 if(sc->lmc_miireg16 & led){ /* Already set don't do anything */
1955 lmc_trace(sc->lmc_device, "lmc_led_off aoff out");
1959 sc->lmc_miireg16 |= led;
1960 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
1961 lmc_trace(sc->lmc_device, "lmc_led_off out");
1964 static void lmc_reset(lmc_softc_t * const sc) /*fold00*/
1966 lmc_trace(sc->lmc_device, "lmc_reset in");
1967 sc->lmc_miireg16 |= LMC_MII16_FIFO_RESET;
1968 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
1970 sc->lmc_miireg16 &= ~LMC_MII16_FIFO_RESET;
1971 lmc_mii_writereg(sc, 0, 16, sc->lmc_miireg16);
1976 lmc_gpio_mkoutput(sc, LMC_GEP_RESET);
1983 sc->lmc_gpio &= ~(LMC_GEP_RESET);
1984 LMC_CSR_WRITE(sc, csr_gp, sc->lmc_gpio);
1994 lmc_gpio_mkinput(sc, LMC_GEP_RESET);
1999 sc->lmc_media->init(sc);
2001 sc->extra_stats.resetCount++;
2002 lmc_trace(sc->lmc_device, "lmc_reset out");
2005 static void lmc_dec_reset(lmc_softc_t * const sc) /*fold00*/
2008 lmc_trace(sc->lmc_device, "lmc_dec_reset in");
2013 sc->lmc_intrmask = 0;
2014 LMC_CSR_WRITE(sc, csr_intr, sc->lmc_intrmask);
2022 LMC_CSR_WRITE(sc, csr_busmode, TULIP_BUSMODE_SWRESET);
2025 sc->lmc_busmode = LMC_CSR_READ(sc, csr_busmode);
2026 sc->lmc_busmode = 0x00100000;
2027 sc->lmc_busmode &= ~TULIP_BUSMODE_SWRESET;
2028 LMC_CSR_WRITE(sc, csr_busmode, sc->lmc_busmode);
2030 sc->lmc_cmdmode = LMC_CSR_READ(sc, csr_command);
2042 sc->lmc_cmdmode |= ( TULIP_CMD_PROMISCUOUS
2050 sc->lmc_cmdmode &= ~( TULIP_CMD_OPERMODE
2056 LMC_CSR_WRITE(sc, csr_command, sc->lmc_cmdmode);
2061 val = LMC_CSR_READ(sc, csr_sia_general);
2063 LMC_CSR_WRITE(sc, csr_sia_general, val);
2065 lmc_trace(sc->lmc_device, "lmc_dec_reset out");
2068 static void lmc_initcsrs(lmc_softc_t * const sc, lmc_csrptr_t csr_base, /*fold00*/
2071 lmc_trace(sc->lmc_device, "lmc_initcsrs in");
2072 sc->lmc_csrs.csr_busmode = csr_base + 0 * csr_size;
2073 sc->lmc_csrs.csr_txpoll = csr_base + 1 * csr_size;
2074 sc->lmc_csrs.csr_rxpoll = csr_base + 2 * csr_size;
2075 sc->lmc_csrs.csr_rxlist = csr_base + 3 * csr_size;
2076 sc->lmc_csrs.csr_txlist = csr_base + 4 * csr_size;
2077 sc->lmc_csrs.csr_status = csr_base + 5 * csr_size;
2078 sc->lmc_csrs.csr_command = csr_base + 6 * csr_size;
2079 sc->lmc_csrs.csr_intr = csr_base + 7 * csr_size;
2080 sc->lmc_csrs.csr_missed_frames = csr_base + 8 * csr_size;
2081 sc->lmc_csrs.csr_9 = csr_base + 9 * csr_size;
2082 sc->lmc_csrs.csr_10 = csr_base + 10 * csr_size;
2083 sc->lmc_csrs.csr_11 = csr_base + 11 * csr_size;
2084 sc->lmc_csrs.csr_12 = csr_base + 12 * csr_size;
2085 sc->lmc_csrs.csr_13 = csr_base + 13 * csr_size;
2086 sc->lmc_csrs.csr_14 = csr_base + 14 * csr_size;
2087 sc->lmc_csrs.csr_15 = csr_base + 15 * csr_size;
2088 lmc_trace(sc->lmc_device, "lmc_initcsrs out");
2093 lmc_softc_t *sc = dev_to_sc(dev);
2099 spin_lock_irqsave(&sc->lmc_lock, flags);
2103 sc->extra_stats.tx_tbusy_calls++;
2115 LMC_CSR_READ (sc, csr_status),
2116 sc->extra_stats.tx_ProcTimeout);
2120 LMC_EVENT_LOG(LMC_EVENT_RESET1, LMC_CSR_READ (sc, csr_status), 0);
2122 lmc_mii_readreg (sc, 0, 16),
2123 lmc_mii_readreg (sc, 0, 17));
2126 csr6 = LMC_CSR_READ (sc, csr_command);
2127 LMC_CSR_WRITE (sc, csr_command, csr6 | 0x0002);
2128 LMC_CSR_WRITE (sc, csr_command, csr6 | 0x2002);
2131 LMC_CSR_WRITE (sc, csr_txpoll, 0);
2133 sc->lmc_device->stats.tx_errors++;
2134 sc->extra_stats.tx_ProcTimeout++; /* -baz */
2140 spin_unlock_irqrestore(&sc->lmc_lock, flags);