Lines Matching +full:link +full:- +full:signal +full:- +full:sources
1 // SPDX-License-Identifier: GPL-2.0-only
6 * Sources:
29 * 5/29/96: override option 'tpe-link-test?', if it is 'false', as
93 #include <linux/dma-mapping.h>
104 #include <asm/auxio.h> /* For tpe-link-test? setting */
130 #define LE_C0_CERR 0x2000 /* SQE: Signal quality error */
177 #define TX_RING_MOD_MASK (TX_RING_SIZE - 1)
182 #define RX_RING_MOD_MASK (RX_RING_SIZE - 1)
211 u16 mode; /* Pre-set mode (reg. 15) */
221 /* The Tx and Rx ring entries must aligned on 8-byte boundaries. */
231 ((__u32)(((unsigned long)(&(((struct lance_init_block *)0)->rt[elem])))))
234 ((__u32)(((unsigned long)(&(((struct lance_init_block *)0)->rt[elem][0])))))
248 char tpe; /* cable-selection is TPE */
249 char auto_select; /* cable-selection by carrier */
267 #define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\
268 lp->tx_old+TX_RING_MOD_MASK-lp->tx_new:\
269 lp->tx_old - lp->tx_new-1)
277 do { void __iomem *__base = (__lp)->lregs; \
289 * zero on the lebuffer PIO area. -DaveM
299 if (lp->pio_buffer) in load_csrs()
302 leptr = LANCE_ADDR(lp->init_block_dvma); in load_csrs()
304 sbus_writew(LE_CSR1, lp->lregs + RAP); in load_csrs()
305 sbus_writew(leptr & 0xffff, lp->lregs + RDP); in load_csrs()
306 sbus_writew(LE_CSR2, lp->lregs + RAP); in load_csrs()
307 sbus_writew(leptr >> 16, lp->lregs + RDP); in load_csrs()
308 sbus_writew(LE_CSR3, lp->lregs + RAP); in load_csrs()
309 sbus_writew(lp->busmaster_regval, lp->lregs + RDP); in load_csrs()
312 sbus_writew(LE_CSR0, lp->lregs + RAP); in load_csrs()
319 struct lance_init_block *ib = lp->init_block_mem; in lance_init_ring_dvma()
320 dma_addr_t aib = lp->init_block_dvma; in lance_init_ring_dvma()
326 lp->rx_new = lp->tx_new = 0; in lance_init_ring_dvma()
327 lp->rx_old = lp->tx_old = 0; in lance_init_ring_dvma()
332 ib->phys_addr [0] = dev->dev_addr [1]; in lance_init_ring_dvma()
333 ib->phys_addr [1] = dev->dev_addr [0]; in lance_init_ring_dvma()
334 ib->phys_addr [2] = dev->dev_addr [3]; in lance_init_ring_dvma()
335 ib->phys_addr [3] = dev->dev_addr [2]; in lance_init_ring_dvma()
336 ib->phys_addr [4] = dev->dev_addr [5]; in lance_init_ring_dvma()
337 ib->phys_addr [5] = dev->dev_addr [4]; in lance_init_ring_dvma()
342 ib->btx_ring [i].tmd0 = leptr; in lance_init_ring_dvma()
343 ib->btx_ring [i].tmd1_hadr = leptr >> 16; in lance_init_ring_dvma()
344 ib->btx_ring [i].tmd1_bits = 0; in lance_init_ring_dvma()
345 ib->btx_ring [i].length = 0xf000; /* The ones required by tmd2 */ in lance_init_ring_dvma()
346 ib->btx_ring [i].misc = 0; in lance_init_ring_dvma()
353 ib->brx_ring [i].rmd0 = leptr; in lance_init_ring_dvma()
354 ib->brx_ring [i].rmd1_hadr = leptr >> 16; in lance_init_ring_dvma()
355 ib->brx_ring [i].rmd1_bits = LE_R1_OWN; in lance_init_ring_dvma()
356 ib->brx_ring [i].length = -RX_BUFF_SIZE | 0xf000; in lance_init_ring_dvma()
357 ib->brx_ring [i].mblength = 0; in lance_init_ring_dvma()
364 ib->rx_len = (LANCE_LOG_RX_BUFFERS << 13) | (leptr >> 16); in lance_init_ring_dvma()
365 ib->rx_ptr = leptr; in lance_init_ring_dvma()
369 ib->tx_len = (LANCE_LOG_TX_BUFFERS << 13) | (leptr >> 16); in lance_init_ring_dvma()
370 ib->tx_ptr = leptr; in lance_init_ring_dvma()
376 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_init_ring_pio()
382 lp->rx_new = lp->tx_new = 0; in lance_init_ring_pio()
383 lp->rx_old = lp->tx_old = 0; in lance_init_ring_pio()
388 sbus_writeb(dev->dev_addr[1], &ib->phys_addr[0]); in lance_init_ring_pio()
389 sbus_writeb(dev->dev_addr[0], &ib->phys_addr[1]); in lance_init_ring_pio()
390 sbus_writeb(dev->dev_addr[3], &ib->phys_addr[2]); in lance_init_ring_pio()
391 sbus_writeb(dev->dev_addr[2], &ib->phys_addr[3]); in lance_init_ring_pio()
392 sbus_writeb(dev->dev_addr[5], &ib->phys_addr[4]); in lance_init_ring_pio()
393 sbus_writeb(dev->dev_addr[4], &ib->phys_addr[5]); in lance_init_ring_pio()
398 sbus_writew(leptr, &ib->btx_ring [i].tmd0); in lance_init_ring_pio()
399 sbus_writeb(leptr >> 16,&ib->btx_ring [i].tmd1_hadr); in lance_init_ring_pio()
400 sbus_writeb(0, &ib->btx_ring [i].tmd1_bits); in lance_init_ring_pio()
403 sbus_writew(0xf000, &ib->btx_ring [i].length); in lance_init_ring_pio()
404 sbus_writew(0, &ib->btx_ring [i].misc); in lance_init_ring_pio()
411 sbus_writew(leptr, &ib->brx_ring [i].rmd0); in lance_init_ring_pio()
412 sbus_writeb(leptr >> 16,&ib->brx_ring [i].rmd1_hadr); in lance_init_ring_pio()
413 sbus_writeb(LE_R1_OWN, &ib->brx_ring [i].rmd1_bits); in lance_init_ring_pio()
414 sbus_writew(-RX_BUFF_SIZE|0xf000, in lance_init_ring_pio()
415 &ib->brx_ring [i].length); in lance_init_ring_pio()
416 sbus_writew(0, &ib->brx_ring [i].mblength); in lance_init_ring_pio()
424 &ib->rx_len); in lance_init_ring_pio()
425 sbus_writew(leptr, &ib->rx_ptr); in lance_init_ring_pio()
430 &ib->tx_len); in lance_init_ring_pio()
431 sbus_writew(leptr, &ib->tx_ptr); in lance_init_ring_pio()
436 u32 csr = sbus_readl(lp->dregs + DMA_CSR); in init_restart_ledma()
439 /* E-Cache draining */ in init_restart_ledma()
440 while (sbus_readl(lp->dregs + DMA_CSR) & DMA_FIFO_ISDRAIN) in init_restart_ledma()
444 csr = sbus_readl(lp->dregs + DMA_CSR); in init_restart_ledma()
446 if (lp->burst_sizes & DMA_BURST32) in init_restart_ledma()
453 if (lp->tpe) in init_restart_ledma()
458 sbus_writel(csr, lp->dregs + DMA_CSR); in init_restart_ledma()
467 if (lp->dregs) in init_restart_lance()
470 sbus_writew(LE_CSR0, lp->lregs + RAP); in init_restart_lance()
471 sbus_writew(LE_C0_INIT, lp->lregs + RDP); in init_restart_lance()
475 regval = sbus_readw(lp->lregs + RDP); in init_restart_lance()
484 if (lp->dregs) in init_restart_lance()
485 printk("dcsr=%8.8x\n", sbus_readl(lp->dregs + DMA_CSR)); in init_restart_lance()
486 return -1; in init_restart_lance()
490 sbus_writew(LE_C0_IDON, lp->lregs + RDP); in init_restart_lance()
491 sbus_writew(LE_C0_INEA | LE_C0_STRT, lp->lregs + RDP); in init_restart_lance()
493 if (lp->dregs) { in init_restart_lance()
494 u32 csr = sbus_readl(lp->dregs + DMA_CSR); in init_restart_lance()
497 sbus_writel(csr, lp->dregs + DMA_CSR); in init_restart_lance()
506 struct lance_init_block *ib = lp->init_block_mem; in lance_rx_dvma()
509 int len, entry = lp->rx_new; in lance_rx_dvma()
512 for (rd = &ib->brx_ring [entry]; in lance_rx_dvma()
513 !((bits = rd->rmd1_bits) & LE_R1_OWN); in lance_rx_dvma()
514 rd = &ib->brx_ring [entry]) { in lance_rx_dvma()
518 dev->stats.rx_over_errors++; in lance_rx_dvma()
519 dev->stats.rx_errors++; in lance_rx_dvma()
524 if (bits & LE_R1_BUF) dev->stats.rx_fifo_errors++; in lance_rx_dvma()
525 if (bits & LE_R1_CRC) dev->stats.rx_crc_errors++; in lance_rx_dvma()
526 if (bits & LE_R1_OFL) dev->stats.rx_over_errors++; in lance_rx_dvma()
527 if (bits & LE_R1_FRA) dev->stats.rx_frame_errors++; in lance_rx_dvma()
528 if (bits & LE_R1_EOP) dev->stats.rx_errors++; in lance_rx_dvma()
530 len = (rd->mblength & 0xfff) - 4; in lance_rx_dvma()
534 dev->stats.rx_dropped++; in lance_rx_dvma()
535 rd->mblength = 0; in lance_rx_dvma()
536 rd->rmd1_bits = LE_R1_OWN; in lance_rx_dvma()
537 lp->rx_new = RX_NEXT(entry); in lance_rx_dvma()
541 dev->stats.rx_bytes += len; in lance_rx_dvma()
546 (unsigned char *)&(ib->rx_buf [entry][0]), in lance_rx_dvma()
548 skb->protocol = eth_type_trans(skb, dev); in lance_rx_dvma()
550 dev->stats.rx_packets++; in lance_rx_dvma()
554 rd->mblength = 0; in lance_rx_dvma()
555 rd->rmd1_bits = LE_R1_OWN; in lance_rx_dvma()
559 lp->rx_new = entry; in lance_rx_dvma()
565 struct lance_init_block *ib = lp->init_block_mem; in lance_tx_dvma()
568 spin_lock(&lp->lock); in lance_tx_dvma()
570 j = lp->tx_old; in lance_tx_dvma()
571 for (i = j; i != lp->tx_new; i = j) { in lance_tx_dvma()
572 struct lance_tx_desc *td = &ib->btx_ring [i]; in lance_tx_dvma()
573 u8 bits = td->tmd1_bits; in lance_tx_dvma()
580 u16 status = td->misc; in lance_tx_dvma()
582 dev->stats.tx_errors++; in lance_tx_dvma()
583 if (status & LE_T3_RTY) dev->stats.tx_aborted_errors++; in lance_tx_dvma()
584 if (status & LE_T3_LCOL) dev->stats.tx_window_errors++; in lance_tx_dvma()
587 dev->stats.tx_carrier_errors++; in lance_tx_dvma()
588 if (lp->auto_select) { in lance_tx_dvma()
589 lp->tpe = 1 - lp->tpe; in lance_tx_dvma()
591 dev->name, lp->tpe?"TPE":"AUI"); in lance_tx_dvma()
593 lp->init_ring(dev); in lance_tx_dvma()
604 dev->stats.tx_fifo_errors++; in lance_tx_dvma()
607 dev->name); in lance_tx_dvma()
609 lp->init_ring(dev); in lance_tx_dvma()
618 td->tmd1_bits = bits & ~(LE_T1_POK); in lance_tx_dvma()
622 dev->stats.collisions++; in lance_tx_dvma()
626 dev->stats.collisions += 2; in lance_tx_dvma()
628 dev->stats.tx_packets++; in lance_tx_dvma()
633 lp->tx_old = j; in lance_tx_dvma()
639 spin_unlock(&lp->lock); in lance_tx_dvma()
644 u16 *p16 = (u16 *) skb->data; in lance_piocopy_to_skb()
653 len -= 2; in lance_piocopy_to_skb()
658 len -= 4; in lance_piocopy_to_skb()
665 len -= 2; in lance_piocopy_to_skb()
675 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_rx_pio()
681 entry = lp->rx_new; in lance_rx_pio()
682 for (rd = &ib->brx_ring [entry]; in lance_rx_pio()
683 !((bits = sbus_readb(&rd->rmd1_bits)) & LE_R1_OWN); in lance_rx_pio()
684 rd = &ib->brx_ring [entry]) { in lance_rx_pio()
688 dev->stats.rx_over_errors++; in lance_rx_pio()
689 dev->stats.rx_errors++; in lance_rx_pio()
694 if (bits & LE_R1_BUF) dev->stats.rx_fifo_errors++; in lance_rx_pio()
695 if (bits & LE_R1_CRC) dev->stats.rx_crc_errors++; in lance_rx_pio()
696 if (bits & LE_R1_OFL) dev->stats.rx_over_errors++; in lance_rx_pio()
697 if (bits & LE_R1_FRA) dev->stats.rx_frame_errors++; in lance_rx_pio()
698 if (bits & LE_R1_EOP) dev->stats.rx_errors++; in lance_rx_pio()
700 len = (sbus_readw(&rd->mblength) & 0xfff) - 4; in lance_rx_pio()
704 dev->stats.rx_dropped++; in lance_rx_pio()
705 sbus_writew(0, &rd->mblength); in lance_rx_pio()
706 sbus_writeb(LE_R1_OWN, &rd->rmd1_bits); in lance_rx_pio()
707 lp->rx_new = RX_NEXT(entry); in lance_rx_pio()
711 dev->stats.rx_bytes += len; in lance_rx_pio()
715 lance_piocopy_to_skb(skb, &(ib->rx_buf[entry][0]), len); in lance_rx_pio()
716 skb->protocol = eth_type_trans(skb, dev); in lance_rx_pio()
718 dev->stats.rx_packets++; in lance_rx_pio()
722 sbus_writew(0, &rd->mblength); in lance_rx_pio()
723 sbus_writeb(LE_R1_OWN, &rd->rmd1_bits); in lance_rx_pio()
727 lp->rx_new = entry; in lance_rx_pio()
733 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_tx_pio()
736 spin_lock(&lp->lock); in lance_tx_pio()
738 j = lp->tx_old; in lance_tx_pio()
739 for (i = j; i != lp->tx_new; i = j) { in lance_tx_pio()
740 struct lance_tx_desc __iomem *td = &ib->btx_ring [i]; in lance_tx_pio()
741 u8 bits = sbus_readb(&td->tmd1_bits); in lance_tx_pio()
748 u16 status = sbus_readw(&td->misc); in lance_tx_pio()
750 dev->stats.tx_errors++; in lance_tx_pio()
751 if (status & LE_T3_RTY) dev->stats.tx_aborted_errors++; in lance_tx_pio()
752 if (status & LE_T3_LCOL) dev->stats.tx_window_errors++; in lance_tx_pio()
755 dev->stats.tx_carrier_errors++; in lance_tx_pio()
756 if (lp->auto_select) { in lance_tx_pio()
757 lp->tpe = 1 - lp->tpe; in lance_tx_pio()
759 dev->name, lp->tpe?"TPE":"AUI"); in lance_tx_pio()
761 lp->init_ring(dev); in lance_tx_pio()
772 dev->stats.tx_fifo_errors++; in lance_tx_pio()
775 dev->name); in lance_tx_pio()
777 lp->init_ring(dev); in lance_tx_pio()
786 sbus_writeb(bits & ~(LE_T1_POK), &td->tmd1_bits); in lance_tx_pio()
790 dev->stats.collisions++; in lance_tx_pio()
794 dev->stats.collisions += 2; in lance_tx_pio()
796 dev->stats.tx_packets++; in lance_tx_pio()
801 lp->tx_old = j; in lance_tx_pio()
807 spin_unlock(&lp->lock); in lance_tx_pio()
816 sbus_writew(LE_CSR0, lp->lregs + RAP); in lance_interrupt()
817 csr0 = sbus_readw(lp->lregs + RDP); in lance_interrupt()
819 /* Acknowledge all the interrupt sources ASAP */ in lance_interrupt()
821 lp->lregs + RDP); in lance_interrupt()
827 lp->lregs + RDP); in lance_interrupt()
831 lp->rx(dev); in lance_interrupt()
834 lp->tx(dev); in lance_interrupt()
837 dev->stats.tx_errors++; in lance_interrupt()
840 dev->stats.rx_errors++; in lance_interrupt()
843 if (lp->dregs) { in lance_interrupt()
844 u32 addr = sbus_readl(lp->dregs + DMA_ADDR); in lance_interrupt()
847 dev->name, csr0, addr & 0xffffff); in lance_interrupt()
850 dev->name, csr0); in lance_interrupt()
853 sbus_writew(LE_C0_STOP, lp->lregs + RDP); in lance_interrupt()
855 if (lp->dregs) { in lance_interrupt()
856 u32 dma_csr = sbus_readl(lp->dregs + DMA_CSR); in lance_interrupt()
859 sbus_writel(dma_csr, lp->dregs + DMA_CSR); in lance_interrupt()
862 lp->init_ring(dev); in lance_interrupt()
868 sbus_writew(LE_C0_INEA, lp->lregs + RDP); in lance_interrupt()
876 struct net_device *dev = lp->dev; in build_fake_packet()
879 entry = lp->tx_new & TX_RING_MOD_MASK; in build_fake_packet()
880 if (lp->pio_buffer) { in build_fake_packet()
881 struct lance_init_block __iomem *ib = lp->init_block_iomem; in build_fake_packet()
882 u16 __iomem *packet = (u16 __iomem *) &(ib->tx_buf[entry][0]); in build_fake_packet()
887 sbus_writeb(dev->dev_addr[i], ð->h_dest[i]); in build_fake_packet()
888 sbus_writeb(dev->dev_addr[i], ð->h_source[i]); in build_fake_packet()
890 sbus_writew((-ETH_ZLEN) | 0xf000, &ib->btx_ring[entry].length); in build_fake_packet()
891 sbus_writew(0, &ib->btx_ring[entry].misc); in build_fake_packet()
892 sbus_writeb(LE_T1_POK|LE_T1_OWN, &ib->btx_ring[entry].tmd1_bits); in build_fake_packet()
894 struct lance_init_block *ib = lp->init_block_mem; in build_fake_packet()
895 u16 *packet = (u16 *) &(ib->tx_buf[entry][0]); in build_fake_packet()
899 eth->h_dest[i] = dev->dev_addr[i]; in build_fake_packet()
900 eth->h_source[i] = dev->dev_addr[i]; in build_fake_packet()
902 ib->btx_ring[entry].length = (-ETH_ZLEN) | 0xf000; in build_fake_packet()
903 ib->btx_ring[entry].misc = 0; in build_fake_packet()
904 ib->btx_ring[entry].tmd1_bits = (LE_T1_POK|LE_T1_OWN); in build_fake_packet()
906 lp->tx_new = TX_NEXT(entry); in build_fake_packet()
916 if (request_irq(dev->irq, lance_interrupt, IRQF_SHARED, in lance_open()
918 printk(KERN_ERR "Lance: Can't get irq %d\n", dev->irq); in lance_open()
919 return -EAGAIN; in lance_open()
923 if (lp->dregs) { in lance_open()
924 u32 regval = lp->init_block_dvma & 0xff000000; in lance_open()
926 sbus_writel(regval, lp->dregs + DMA_TEST); in lance_open()
933 * BTW it is common bug in all lance drivers! --ANK in lance_open()
935 if (lp->pio_buffer) { in lance_open()
936 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_open()
937 sbus_writew(0, &ib->mode); in lance_open()
938 sbus_writel(0, &ib->filter[0]); in lance_open()
939 sbus_writel(0, &ib->filter[1]); in lance_open()
941 struct lance_init_block *ib = lp->init_block_mem; in lance_open()
942 ib->mode = 0; in lance_open()
943 ib->filter [0] = 0; in lance_open()
944 ib->filter [1] = 0; in lance_open()
947 lp->init_ring(dev); in lance_open()
953 if (!status && lp->auto_select) { in lance_open()
955 sbus_writew(LE_C0_INEA | LE_C0_TDMD, lp->lregs + RDP); in lance_open()
966 timer_delete_sync(&lp->multicast_timer); in lance_close()
970 free_irq(dev->irq, (void *) dev); in lance_close()
982 if (lp->dregs) { in lance_reset()
986 csr = sbus_readl(lp->dregs + DMA_CSR); in lance_reset()
987 sbus_writel(csr | DMA_RST_ENET, lp->dregs + DMA_CSR); in lance_reset()
989 sbus_writel(csr & ~DMA_RST_ENET, lp->dregs + DMA_CSR); in lance_reset()
991 addr = lp->init_block_dvma & 0xff000000; in lance_reset()
992 sbus_writel(addr, lp->dregs + DMA_TEST); in lance_reset()
994 lp->init_ring(dev); in lance_reset()
1015 len -= 4; in lance_piocopy_from_skb()
1032 len -= 4; in lance_piocopy_from_skb()
1043 len -= 4; in lance_piocopy_from_skb()
1053 len -= 2; in lance_piocopy_from_skb()
1066 len -= 1; in lance_piozero()
1077 len -= 2; in lance_piozero()
1084 len -= 4; in lance_piozero()
1089 len -= 2; in lance_piozero()
1100 dev->name, sbus_readw(lp->lregs + RDP)); in lance_tx_timeout()
1110 skblen = skb->len; in lance_start_xmit()
1114 spin_lock_irq(&lp->lock); in lance_start_xmit()
1116 dev->stats.tx_bytes += len; in lance_start_xmit()
1118 entry = lp->tx_new & TX_RING_MOD_MASK; in lance_start_xmit()
1119 if (lp->pio_buffer) { in lance_start_xmit()
1120 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_start_xmit()
1121 sbus_writew((-len) | 0xf000, &ib->btx_ring[entry].length); in lance_start_xmit()
1122 sbus_writew(0, &ib->btx_ring[entry].misc); in lance_start_xmit()
1123 lance_piocopy_from_skb(&ib->tx_buf[entry][0], skb->data, skblen); in lance_start_xmit()
1125 lance_piozero(&ib->tx_buf[entry][skblen], len - skblen); in lance_start_xmit()
1126 sbus_writeb(LE_T1_POK | LE_T1_OWN, &ib->btx_ring[entry].tmd1_bits); in lance_start_xmit()
1128 struct lance_init_block *ib = lp->init_block_mem; in lance_start_xmit()
1129 ib->btx_ring [entry].length = (-len) | 0xf000; in lance_start_xmit()
1130 ib->btx_ring [entry].misc = 0; in lance_start_xmit()
1131 skb_copy_from_linear_data(skb, &ib->tx_buf [entry][0], skblen); in lance_start_xmit()
1133 memset((char *) &ib->tx_buf [entry][skblen], 0, len - skblen); in lance_start_xmit()
1134 ib->btx_ring [entry].tmd1_bits = (LE_T1_POK | LE_T1_OWN); in lance_start_xmit()
1137 lp->tx_new = TX_NEXT(entry); in lance_start_xmit()
1143 sbus_writew(LE_C0_INEA | LE_C0_TDMD, lp->lregs + RDP); in lance_start_xmit()
1145 /* Read back CSR to invalidate the E-Cache. in lance_start_xmit()
1148 if (lp->dregs) in lance_start_xmit()
1149 sbus_readw(lp->lregs + RDP); in lance_start_xmit()
1151 spin_unlock_irq(&lp->lock); in lance_start_xmit()
1167 if (dev->flags & IFF_ALLMULTI) in lance_load_multicast()
1172 if (lp->pio_buffer) { in lance_load_multicast()
1173 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_load_multicast()
1174 sbus_writel(val, &ib->filter[0]); in lance_load_multicast()
1175 sbus_writel(val, &ib->filter[1]); in lance_load_multicast()
1177 struct lance_init_block *ib = lp->init_block_mem; in lance_load_multicast()
1178 ib->filter [0] = val; in lance_load_multicast()
1179 ib->filter [1] = val; in lance_load_multicast()
1182 if (dev->flags & IFF_ALLMULTI) in lance_load_multicast()
1187 crc = ether_crc_le(6, ha->addr); in lance_load_multicast()
1189 if (lp->pio_buffer) { in lance_load_multicast()
1190 struct lance_init_block __iomem *ib = lp->init_block_iomem; in lance_load_multicast()
1191 u16 __iomem *mcast_table = (u16 __iomem *) &ib->filter; in lance_load_multicast()
1196 struct lance_init_block *ib = lp->init_block_mem; in lance_load_multicast()
1197 u16 *mcast_table = (u16 *) &ib->filter; in lance_load_multicast()
1206 struct lance_init_block *ib_mem = lp->init_block_mem; in lance_set_multicast()
1207 struct lance_init_block __iomem *ib_iomem = lp->init_block_iomem; in lance_set_multicast()
1213 if (lp->tx_old != lp->tx_new) { in lance_set_multicast()
1214 mod_timer(&lp->multicast_timer, jiffies + 4); in lance_set_multicast()
1222 lp->init_ring(dev); in lance_set_multicast()
1224 if (lp->pio_buffer) in lance_set_multicast()
1225 mode = sbus_readw(&ib_iomem->mode); in lance_set_multicast()
1227 mode = ib_mem->mode; in lance_set_multicast()
1228 if (dev->flags & IFF_PROMISC) { in lance_set_multicast()
1230 if (lp->pio_buffer) in lance_set_multicast()
1231 sbus_writew(mode, &ib_iomem->mode); in lance_set_multicast()
1233 ib_mem->mode = mode; in lance_set_multicast()
1236 if (lp->pio_buffer) in lance_set_multicast()
1237 sbus_writew(mode, &ib_iomem->mode); in lance_set_multicast()
1239 ib_mem->mode = mode; in lance_set_multicast()
1250 struct net_device *dev = lp->dev; in lance_set_multicast_retry()
1257 if (lp->lregs) in lance_free_hwresources()
1258 of_iounmap(&lp->op->resource[0], lp->lregs, LANCE_REG_SIZE); in lance_free_hwresources()
1259 if (lp->dregs) { in lance_free_hwresources()
1260 struct platform_device *ledma = lp->ledma; in lance_free_hwresources()
1262 of_iounmap(&ledma->resource[0], lp->dregs, in lance_free_hwresources()
1263 resource_size(&ledma->resource[0])); in lance_free_hwresources()
1265 if (lp->init_block_iomem) { in lance_free_hwresources()
1266 of_iounmap(&lp->lebuffer->resource[0], lp->init_block_iomem, in lance_free_hwresources()
1268 } else if (lp->init_block_mem) { in lance_free_hwresources()
1269 dma_free_coherent(&lp->op->dev, in lance_free_hwresources()
1271 lp->init_block_mem, in lance_free_hwresources()
1272 lp->init_block_dvma); in lance_free_hwresources()
1279 strscpy(info->driver, "sunlance", sizeof(info->driver)); in sparc_lance_get_drvinfo()
1301 struct device_node *dp = op->dev.of_node; in sparc_lance_probe_one()
1307 return -ENOMEM; in sparc_lance_probe_one()
1311 spin_lock_init(&lp->lock); in sparc_lance_probe_one()
1317 eth_hw_addr_set(dev, idprom->id_ethaddr); in sparc_lance_probe_one()
1320 lp->lregs = of_ioremap(&op->resource[0], 0, in sparc_lance_probe_one()
1322 if (!lp->lregs) { in sparc_lance_probe_one()
1327 lp->ledma = ledma; in sparc_lance_probe_one()
1328 if (lp->ledma) { in sparc_lance_probe_one()
1329 lp->dregs = of_ioremap(&ledma->resource[0], 0, in sparc_lance_probe_one()
1330 resource_size(&ledma->resource[0]), in sparc_lance_probe_one()
1332 if (!lp->dregs) { in sparc_lance_probe_one()
1339 lp->op = op; in sparc_lance_probe_one()
1340 lp->lebuffer = lebuffer; in sparc_lance_probe_one()
1343 if (lebuffer->resource[0].start & 7) { in sparc_lance_probe_one()
1347 lp->init_block_iomem = in sparc_lance_probe_one()
1348 of_ioremap(&lebuffer->resource[0], 0, in sparc_lance_probe_one()
1350 if (!lp->init_block_iomem) { in sparc_lance_probe_one()
1354 lp->init_block_dvma = 0; in sparc_lance_probe_one()
1355 lp->pio_buffer = 1; in sparc_lance_probe_one()
1356 lp->init_ring = lance_init_ring_pio; in sparc_lance_probe_one()
1357 lp->rx = lance_rx_pio; in sparc_lance_probe_one()
1358 lp->tx = lance_tx_pio; in sparc_lance_probe_one()
1360 lp->init_block_mem = in sparc_lance_probe_one()
1361 dma_alloc_coherent(&op->dev, in sparc_lance_probe_one()
1363 &lp->init_block_dvma, GFP_ATOMIC); in sparc_lance_probe_one()
1364 if (!lp->init_block_mem) in sparc_lance_probe_one()
1367 lp->pio_buffer = 0; in sparc_lance_probe_one()
1368 lp->init_ring = lance_init_ring_dvma; in sparc_lance_probe_one()
1369 lp->rx = lance_rx_dvma; in sparc_lance_probe_one()
1370 lp->tx = lance_tx_dvma; in sparc_lance_probe_one()
1372 lp->busmaster_regval = of_getintprop_default(dp, "busmaster-regval", in sparc_lance_probe_one()
1377 lp->name = lancestr; in sparc_lance_probe_one()
1379 lp->burst_sizes = 0; in sparc_lance_probe_one()
1380 if (lp->ledma) { in sparc_lance_probe_one()
1381 struct device_node *ledma_dp = ledma->dev.of_node; in sparc_lance_probe_one()
1387 /* Find burst-size property for ledma */ in sparc_lance_probe_one()
1388 lp->burst_sizes = of_getintprop_default(ledma_dp, in sparc_lance_probe_one()
1389 "burst-sizes", 0); in sparc_lance_probe_one()
1392 sbus_dp = ledma_dp->parent; in sparc_lance_probe_one()
1393 sbmask = of_getintprop_default(sbus_dp, "burst-sizes", in sparc_lance_probe_one()
1395 lp->burst_sizes &= sbmask; in sparc_lance_probe_one()
1397 /* Get the cable-selection property */ in sparc_lance_probe_one()
1398 prop = of_get_property(ledma_dp, "cable-selection", NULL); in sparc_lance_probe_one()
1403 "auto-carrier-detection.\n"); in sparc_lance_probe_one()
1409 prop = of_get_property(nd, "tpe-link-test?", NULL); in sparc_lance_probe_one()
1415 "'tpe-link-test?'\n"); in sparc_lance_probe_one()
1423 lp->auto_select = 1; in sparc_lance_probe_one()
1424 lp->tpe = 0; in sparc_lance_probe_one()
1426 lp->auto_select = 0; in sparc_lance_probe_one()
1427 lp->tpe = 0; in sparc_lance_probe_one()
1429 lp->auto_select = 0; in sparc_lance_probe_one()
1430 lp->tpe = 1; in sparc_lance_probe_one()
1434 csr = sbus_readl(lp->dregs + DMA_CSR); in sparc_lance_probe_one()
1435 sbus_writel(csr | DMA_RST_ENET, lp->dregs + DMA_CSR); in sparc_lance_probe_one()
1437 sbus_writel(csr & ~DMA_RST_ENET, lp->dregs + DMA_CSR); in sparc_lance_probe_one()
1439 lp->dregs = NULL; in sparc_lance_probe_one()
1441 lp->dev = dev; in sparc_lance_probe_one()
1442 SET_NETDEV_DEV(dev, &op->dev); in sparc_lance_probe_one()
1443 dev->watchdog_timeo = 5*HZ; in sparc_lance_probe_one()
1444 dev->ethtool_ops = &sparc_lance_ethtool_ops; in sparc_lance_probe_one()
1445 dev->netdev_ops = &sparc_lance_ops; in sparc_lance_probe_one()
1447 dev->irq = op->archdata.irqs[0]; in sparc_lance_probe_one()
1452 * use a timer to try again later when necessary. -DaveM in sparc_lance_probe_one()
1454 timer_setup(&lp->multicast_timer, lance_set_multicast_retry, 0); in sparc_lance_probe_one()
1464 dev->name, dev->dev_addr); in sparc_lance_probe_one()
1471 return -ENODEV; in sparc_lance_probe_one()
1476 struct platform_device *parent = to_platform_device(op->dev.parent); in sunlance_sbus_probe()
1477 struct device_node *parent_dp = parent->dev.of_node; in sunlance_sbus_probe()
1493 struct net_device *net_dev = lp->dev; in sunlance_sbus_remove()