Lines Matching refs:lp

272 #define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\
273 lp->tx_old+TX_RING_MOD_MASK-lp->tx_new:\
274 lp->tx_old - lp->tx_new-1)
300 static void load_csrs(struct lance_private *lp) in load_csrs() argument
304 if (lp->pio_buffer) in load_csrs()
307 leptr = LANCE_ADDR(lp->init_block_dvma); in load_csrs()
309 sbus_writew(LE_CSR1, lp->lregs + RAP); in load_csrs()
310 sbus_writew(leptr & 0xffff, lp->lregs + RDP); in load_csrs()
311 sbus_writew(LE_CSR2, lp->lregs + RAP); in load_csrs()
312 sbus_writew(leptr >> 16, lp->lregs + RDP); in load_csrs()
313 sbus_writew(LE_CSR3, lp->lregs + RAP); in load_csrs()
314 sbus_writew(lp->busmaster_regval, lp->lregs + RDP); in load_csrs()
317 sbus_writew(LE_CSR0, lp->lregs + RAP); in load_csrs()
323 struct lance_private *lp = netdev_priv(dev); in lance_init_ring_dvma() local
324 struct lance_init_block *ib = lp->init_block_mem; in lance_init_ring_dvma()
325 dma_addr_t aib = lp->init_block_dvma; in lance_init_ring_dvma()
331 lp->rx_new = lp->tx_new = 0; in lance_init_ring_dvma()
332 lp->rx_old = lp->tx_old = 0; in lance_init_ring_dvma()
380 struct lance_private *lp = netdev_priv(dev); in lance_init_ring_pio() local
381 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_init_ring_pio()
387 lp->rx_new = lp->tx_new = 0; in lance_init_ring_pio()
388 lp->rx_old = lp->tx_old = 0; in lance_init_ring_pio()
439 static void init_restart_ledma(struct lance_private *lp) in init_restart_ledma() argument
441 u32 csr = sbus_readl(lp->dregs + DMA_CSR); in init_restart_ledma()
445 while (sbus_readl(lp->dregs + DMA_CSR) & DMA_FIFO_ISDRAIN) in init_restart_ledma()
449 csr = sbus_readl(lp->dregs + DMA_CSR); in init_restart_ledma()
451 if (lp->burst_sizes & DMA_BURST32) in init_restart_ledma()
458 if (lp->tpe) in init_restart_ledma()
463 sbus_writel(csr, lp->dregs + DMA_CSR); in init_restart_ledma()
467 static int init_restart_lance(struct lance_private *lp) in init_restart_lance() argument
472 if (lp->dregs) in init_restart_lance()
473 init_restart_ledma(lp); in init_restart_lance()
475 sbus_writew(LE_CSR0, lp->lregs + RAP); in init_restart_lance()
476 sbus_writew(LE_C0_INIT, lp->lregs + RDP); in init_restart_lance()
480 regval = sbus_readw(lp->lregs + RDP); in init_restart_lance()
489 if (lp->dregs) in init_restart_lance()
490 printk("dcsr=%8.8x\n", sbus_readl(lp->dregs + DMA_CSR)); in init_restart_lance()
495 sbus_writew(LE_C0_IDON, lp->lregs + RDP); in init_restart_lance()
496 sbus_writew(LE_C0_INEA | LE_C0_STRT, lp->lregs + RDP); in init_restart_lance()
498 if (lp->dregs) { in init_restart_lance()
499 u32 csr = sbus_readl(lp->dregs + DMA_CSR); in init_restart_lance()
502 sbus_writel(csr, lp->dregs + DMA_CSR); in init_restart_lance()
510 struct lance_private *lp = netdev_priv(dev); in lance_rx_dvma() local
511 struct lance_init_block *ib = lp->init_block_mem; in lance_rx_dvma()
514 int len, entry = lp->rx_new; in lance_rx_dvma()
542 lp->rx_new = RX_NEXT(entry); in lance_rx_dvma()
564 lp->rx_new = entry; in lance_rx_dvma()
569 struct lance_private *lp = netdev_priv(dev); in lance_tx_dvma() local
570 struct lance_init_block *ib = lp->init_block_mem; in lance_tx_dvma()
573 spin_lock(&lp->lock); in lance_tx_dvma()
575 j = lp->tx_old; in lance_tx_dvma()
576 for (i = j; i != lp->tx_new; i = j) { in lance_tx_dvma()
593 if (lp->auto_select) { in lance_tx_dvma()
594 lp->tpe = 1 - lp->tpe; in lance_tx_dvma()
596 dev->name, lp->tpe?"TPE":"AUI"); in lance_tx_dvma()
597 STOP_LANCE(lp); in lance_tx_dvma()
598 lp->init_ring(dev); in lance_tx_dvma()
599 load_csrs(lp); in lance_tx_dvma()
600 init_restart_lance(lp); in lance_tx_dvma()
613 STOP_LANCE(lp); in lance_tx_dvma()
614 lp->init_ring(dev); in lance_tx_dvma()
615 load_csrs(lp); in lance_tx_dvma()
616 init_restart_lance(lp); in lance_tx_dvma()
638 lp->tx_old = j; in lance_tx_dvma()
644 spin_unlock(&lp->lock); in lance_tx_dvma()
679 struct lance_private *lp = netdev_priv(dev); in lance_rx_pio() local
680 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_rx_pio()
686 entry = lp->rx_new; in lance_rx_pio()
712 lp->rx_new = RX_NEXT(entry); in lance_rx_pio()
732 lp->rx_new = entry; in lance_rx_pio()
737 struct lance_private *lp = netdev_priv(dev); in lance_tx_pio() local
738 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_tx_pio()
741 spin_lock(&lp->lock); in lance_tx_pio()
743 j = lp->tx_old; in lance_tx_pio()
744 for (i = j; i != lp->tx_new; i = j) { in lance_tx_pio()
761 if (lp->auto_select) { in lance_tx_pio()
762 lp->tpe = 1 - lp->tpe; in lance_tx_pio()
764 dev->name, lp->tpe?"TPE":"AUI"); in lance_tx_pio()
765 STOP_LANCE(lp); in lance_tx_pio()
766 lp->init_ring(dev); in lance_tx_pio()
767 load_csrs(lp); in lance_tx_pio()
768 init_restart_lance(lp); in lance_tx_pio()
781 STOP_LANCE(lp); in lance_tx_pio()
782 lp->init_ring(dev); in lance_tx_pio()
783 load_csrs(lp); in lance_tx_pio()
784 init_restart_lance(lp); in lance_tx_pio()
806 lp->tx_old = j; in lance_tx_pio()
812 spin_unlock(&lp->lock); in lance_tx_pio()
818 struct lance_private *lp = netdev_priv(dev); in lance_interrupt() local
821 sbus_writew(LE_CSR0, lp->lregs + RAP); in lance_interrupt()
822 csr0 = sbus_readw(lp->lregs + RDP); in lance_interrupt()
826 lp->lregs + RDP); in lance_interrupt()
832 lp->lregs + RDP); in lance_interrupt()
836 lp->rx(dev); in lance_interrupt()
839 lp->tx(dev); in lance_interrupt()
848 if (lp->dregs) { in lance_interrupt()
849 u32 addr = sbus_readl(lp->dregs + DMA_ADDR); in lance_interrupt()
858 sbus_writew(LE_C0_STOP, lp->lregs + RDP); in lance_interrupt()
860 if (lp->dregs) { in lance_interrupt()
861 u32 dma_csr = sbus_readl(lp->dregs + DMA_CSR); in lance_interrupt()
864 sbus_writel(dma_csr, lp->dregs + DMA_CSR); in lance_interrupt()
867 lp->init_ring(dev); in lance_interrupt()
868 load_csrs(lp); in lance_interrupt()
869 init_restart_lance(lp); in lance_interrupt()
873 sbus_writew(LE_C0_INEA, lp->lregs + RDP); in lance_interrupt()
879 static void build_fake_packet(struct lance_private *lp) in build_fake_packet() argument
881 struct net_device *dev = lp->dev; in build_fake_packet()
884 entry = lp->tx_new & TX_RING_MOD_MASK; in build_fake_packet()
885 if (lp->pio_buffer) { in build_fake_packet()
886 struct lance_init_block __iomem *ib = lp->init_block_iomem; in build_fake_packet()
899 struct lance_init_block *ib = lp->init_block_mem; in build_fake_packet()
911 lp->tx_new = TX_NEXT(entry); in build_fake_packet()
916 struct lance_private *lp = netdev_priv(dev); in lance_open() local
919 STOP_LANCE(lp); in lance_open()
928 if (lp->dregs) { in lance_open()
929 u32 regval = lp->init_block_dvma & 0xff000000; in lance_open()
931 sbus_writel(regval, lp->dregs + DMA_TEST); in lance_open()
940 if (lp->pio_buffer) { in lance_open()
941 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_open()
946 struct lance_init_block *ib = lp->init_block_mem; in lance_open()
952 lp->init_ring(dev); in lance_open()
953 load_csrs(lp); in lance_open()
957 status = init_restart_lance(lp); in lance_open()
958 if (!status && lp->auto_select) { in lance_open()
959 build_fake_packet(lp); in lance_open()
960 sbus_writew(LE_C0_INEA | LE_C0_TDMD, lp->lregs + RDP); in lance_open()
968 struct lance_private *lp = netdev_priv(dev); in lance_close() local
971 del_timer_sync(&lp->multicast_timer); in lance_close()
973 STOP_LANCE(lp); in lance_close()
981 struct lance_private *lp = netdev_priv(dev); in lance_reset() local
984 STOP_LANCE(lp); in lance_reset()
987 if (lp->dregs) { in lance_reset()
991 csr = sbus_readl(lp->dregs + DMA_CSR); in lance_reset()
992 sbus_writel(csr | DMA_RST_ENET, lp->dregs + DMA_CSR); in lance_reset()
994 sbus_writel(csr & ~DMA_RST_ENET, lp->dregs + DMA_CSR); in lance_reset()
996 addr = lp->init_block_dvma & 0xff000000; in lance_reset()
997 sbus_writel(addr, lp->dregs + DMA_TEST); in lance_reset()
999 lp->init_ring(dev); in lance_reset()
1000 load_csrs(lp); in lance_reset()
1002 status = init_restart_lance(lp); in lance_reset()
1102 struct lance_private *lp = netdev_priv(dev); in lance_tx_timeout() local
1105 dev->name, sbus_readw(lp->lregs + RDP)); in lance_tx_timeout()
1112 struct lance_private *lp = netdev_priv(dev); in lance_start_xmit() local
1119 spin_lock_irq(&lp->lock); in lance_start_xmit()
1123 entry = lp->tx_new & TX_RING_MOD_MASK; in lance_start_xmit()
1124 if (lp->pio_buffer) { in lance_start_xmit()
1125 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_start_xmit()
1133 struct lance_init_block *ib = lp->init_block_mem; in lance_start_xmit()
1142 lp->tx_new = TX_NEXT(entry); in lance_start_xmit()
1148 sbus_writew(LE_C0_INEA | LE_C0_TDMD, lp->lregs + RDP); in lance_start_xmit()
1153 if (lp->dregs) in lance_start_xmit()
1154 sbus_readw(lp->lregs + RDP); in lance_start_xmit()
1156 spin_unlock_irq(&lp->lock); in lance_start_xmit()
1166 struct lance_private *lp = netdev_priv(dev); in lance_load_multicast() local
1177 if (lp->pio_buffer) { in lance_load_multicast()
1178 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_load_multicast()
1182 struct lance_init_block *ib = lp->init_block_mem; in lance_load_multicast()
1194 if (lp->pio_buffer) { in lance_load_multicast()
1195 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_load_multicast()
1201 struct lance_init_block *ib = lp->init_block_mem; in lance_load_multicast()
1210 struct lance_private *lp = netdev_priv(dev); in lance_set_multicast() local
1211 struct lance_init_block *ib_mem = lp->init_block_mem; in lance_set_multicast()
1212 struct lance_init_block __iomem *ib_iomem = lp->init_block_iomem; in lance_set_multicast()
1218 if (lp->tx_old != lp->tx_new) { in lance_set_multicast()
1219 mod_timer(&lp->multicast_timer, jiffies + 4); in lance_set_multicast()
1226 STOP_LANCE(lp); in lance_set_multicast()
1227 lp->init_ring(dev); in lance_set_multicast()
1229 if (lp->pio_buffer) in lance_set_multicast()
1235 if (lp->pio_buffer) in lance_set_multicast()
1241 if (lp->pio_buffer) in lance_set_multicast()
1247 load_csrs(lp); in lance_set_multicast()
1248 init_restart_lance(lp); in lance_set_multicast()
1254 struct lance_private *lp = from_timer(lp, t, multicast_timer); in lance_set_multicast_retry() local
1255 struct net_device *dev = lp->dev; in lance_set_multicast_retry()
1260 static void lance_free_hwresources(struct lance_private *lp) in lance_free_hwresources() argument
1262 if (lp->lregs) in lance_free_hwresources()
1263 of_iounmap(&lp->op->resource[0], lp->lregs, LANCE_REG_SIZE); in lance_free_hwresources()
1264 if (lp->dregs) { in lance_free_hwresources()
1265 struct platform_device *ledma = lp->ledma; in lance_free_hwresources()
1267 of_iounmap(&ledma->resource[0], lp->dregs, in lance_free_hwresources()
1270 if (lp->init_block_iomem) { in lance_free_hwresources()
1271 of_iounmap(&lp->lebuffer->resource[0], lp->init_block_iomem, in lance_free_hwresources()
1273 } else if (lp->init_block_mem) { in lance_free_hwresources()
1274 dma_free_coherent(&lp->op->dev, in lance_free_hwresources()
1276 lp->init_block_mem, in lance_free_hwresources()
1277 lp->init_block_dvma); in lance_free_hwresources()
1309 struct lance_private *lp; in sparc_lance_probe_one() local
1317 lp = netdev_priv(dev); in sparc_lance_probe_one()
1322 spin_lock_init(&lp->lock); in sparc_lance_probe_one()
1332 lp->lregs = of_ioremap(&op->resource[0], 0, in sparc_lance_probe_one()
1334 if (!lp->lregs) { in sparc_lance_probe_one()
1339 lp->ledma = ledma; in sparc_lance_probe_one()
1340 if (lp->ledma) { in sparc_lance_probe_one()
1341 lp->dregs = of_ioremap(&ledma->resource[0], 0, in sparc_lance_probe_one()
1344 if (!lp->dregs) { in sparc_lance_probe_one()
1351 lp->op = op; in sparc_lance_probe_one()
1352 lp->lebuffer = lebuffer; in sparc_lance_probe_one()
1359 lp->init_block_iomem = in sparc_lance_probe_one()
1362 if (!lp->init_block_iomem) { in sparc_lance_probe_one()
1366 lp->init_block_dvma = 0; in sparc_lance_probe_one()
1367 lp->pio_buffer = 1; in sparc_lance_probe_one()
1368 lp->init_ring = lance_init_ring_pio; in sparc_lance_probe_one()
1369 lp->rx = lance_rx_pio; in sparc_lance_probe_one()
1370 lp->tx = lance_tx_pio; in sparc_lance_probe_one()
1372 lp->init_block_mem = in sparc_lance_probe_one()
1375 &lp->init_block_dvma, GFP_ATOMIC); in sparc_lance_probe_one()
1376 if (!lp->init_block_mem) in sparc_lance_probe_one()
1379 lp->pio_buffer = 0; in sparc_lance_probe_one()
1380 lp->init_ring = lance_init_ring_dvma; in sparc_lance_probe_one()
1381 lp->rx = lance_rx_dvma; in sparc_lance_probe_one()
1382 lp->tx = lance_tx_dvma; in sparc_lance_probe_one()
1384 lp->busmaster_regval = of_getintprop_default(dp, "busmaster-regval", in sparc_lance_probe_one()
1389 lp->name = lancestr; in sparc_lance_probe_one()
1391 lp->burst_sizes = 0; in sparc_lance_probe_one()
1392 if (lp->ledma) { in sparc_lance_probe_one()
1400 lp->burst_sizes = of_getintprop_default(ledma_dp, in sparc_lance_probe_one()
1407 lp->burst_sizes &= sbmask; in sparc_lance_probe_one()
1435 lp->auto_select = 1; in sparc_lance_probe_one()
1436 lp->tpe = 0; in sparc_lance_probe_one()
1438 lp->auto_select = 0; in sparc_lance_probe_one()
1439 lp->tpe = 0; in sparc_lance_probe_one()
1441 lp->auto_select = 0; in sparc_lance_probe_one()
1442 lp->tpe = 1; in sparc_lance_probe_one()
1446 csr = sbus_readl(lp->dregs + DMA_CSR); in sparc_lance_probe_one()
1447 sbus_writel(csr | DMA_RST_ENET, lp->dregs + DMA_CSR); in sparc_lance_probe_one()
1449 sbus_writel(csr & ~DMA_RST_ENET, lp->dregs + DMA_CSR); in sparc_lance_probe_one()
1451 lp->dregs = NULL; in sparc_lance_probe_one()
1453 lp->dev = dev; in sparc_lance_probe_one()
1466 timer_setup(&lp->multicast_timer, lance_set_multicast_retry, 0); in sparc_lance_probe_one()
1473 platform_set_drvdata(op, lp); in sparc_lance_probe_one()
1481 lance_free_hwresources(lp); in sparc_lance_probe_one()
1504 struct lance_private *lp = platform_get_drvdata(op); in sunlance_sbus_remove() local
1505 struct net_device *net_dev = lp->dev; in sunlance_sbus_remove()
1509 lance_free_hwresources(lp); in sunlance_sbus_remove()