Lines Matching +full:short +full:- +full:descriptor

1 // SPDX-License-Identifier: GPL-2.0-only
12 * - PMAD-AA TURBOchannel Ethernet Module Functional Specification,
24 * v0.004: lance-regs is pointing at the right addresses, added prom
27 * v0.005: started to play around with LANCE-DMA. This driver will not
34 * access the init block. This looks like one (short) word at a
36 * (long) word. So we have a 2-2 padding here. Changed
37 * lance_init_block accordingly. The 16-16 padding for the buffers
80 MODULE_DESCRIPTION("DEC LANCE (DECstation onboard, PMAD-xx) driver");
121 /* Receive message descriptor 1 */
132 /* Transmit message descriptor 1 */
157 #define TX_RING_MOD_MASK (TX_RING_SIZE - 1)
160 #define RX_RING_MOD_MASK (RX_RING_SIZE - 1)
171 * accesses only. Each halfword of the buffer is word-aligned in the
174 * The PMAD-AA has a 128 kB buffer on-board.
182 * takes place in bursts of eight 16-bit words which are packed into
183 * four 32-bit words by the IOASIC. This leads to a strange padding:
184 * 16 bytes of valid data followed by a 16 byte gap :-(.
188 unsigned short rmd0; /* low address of packet */
189 unsigned short rmd1; /* high address of packet
190 and descriptor bits */
191 short length; /* 2s complement (negative!)
193 unsigned short mblength; /* actual number of bytes received */
197 unsigned short tmd0; /* low address of packet */
198 unsigned short tmd1; /* high address of packet
199 and descriptor bits */
200 short length; /* 2s complement (negative!)
202 unsigned short misc;
208 unsigned short mode; /* pre-set mode (reg. 15) */
210 unsigned short phys_addr[3]; /* physical ethernet address */
211 unsigned short filter[4]; /* multicast filter */
214 unsigned short rx_ptr; /* receive descriptor addr */
215 unsigned short rx_len; /* receive len and high addr */
216 unsigned short tx_ptr; /* transmit descriptor addr */
217 unsigned short tx_len; /* transmit len and high addr */
219 short gap[4];
261 unsigned short busmaster_regval;
275 #define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\
276 lp->tx_old+TX_RING_MOD_MASK-lp->tx_new:\
277 lp->tx_old - lp->tx_new-1)
279 /* The lance control ports are at an absolute address, machine and tc-slot
281 * DECstations do only 32-bit access and the LANCE uses 16 bit addresses,
286 volatile unsigned short rdp; /* register data port */
287 unsigned short pad;
288 volatile unsigned short rap; /* register address port */
296 static inline void writereg(volatile unsigned short *regptr, short value) in writereg()
305 volatile struct lance_regs *ll = lp->ll; in load_csrs()
313 writereg(&ll->rap, LE_CSR1); in load_csrs()
314 writereg(&ll->rdp, (leptr & 0xFFFF)); in load_csrs()
315 writereg(&ll->rap, LE_CSR2); in load_csrs()
316 writereg(&ll->rdp, leptr >> 16); in load_csrs()
317 writereg(&ll->rap, LE_CSR3); in load_csrs()
318 writereg(&ll->rdp, lp->busmaster_regval); in load_csrs()
321 writereg(&ll->rap, LE_CSR0); in load_csrs()
330 unsigned short *tp; in cp_to_buf()
331 const unsigned short *fp; in cp_to_buf()
332 unsigned short clen; in cp_to_buf()
343 while (clen--) { in cp_to_buf()
351 while (clen--) { in cp_to_buf()
361 while (clen--) { in cp_to_buf()
379 while (clen--) { in cp_to_buf()
389 unsigned short *tp; in cp_from_buf()
390 const unsigned short *fp; in cp_from_buf()
391 unsigned short clen; in cp_from_buf()
401 while (clen--) { in cp_from_buf()
411 while (clen--) { in cp_from_buf()
422 while (clen--) { in cp_from_buf()
440 while (clen--) { in cp_from_buf()
453 volatile u16 *ib = (volatile u16 *)dev->mem_start; in lance_init_ring()
459 lp->rx_new = lp->tx_new = 0; in lance_init_ring()
460 lp->rx_old = lp->tx_old = 0; in lance_init_ring()
465 *lib_ptr(ib, phys_addr[0], lp->type) = (dev->dev_addr[1] << 8) | in lance_init_ring()
466 dev->dev_addr[0]; in lance_init_ring()
467 *lib_ptr(ib, phys_addr[1], lp->type) = (dev->dev_addr[3] << 8) | in lance_init_ring()
468 dev->dev_addr[2]; in lance_init_ring()
469 *lib_ptr(ib, phys_addr[2], lp->type) = (dev->dev_addr[5] << 8) | in lance_init_ring()
470 dev->dev_addr[4]; in lance_init_ring()
473 /* Setup rx descriptor pointer */ in lance_init_ring()
475 *lib_ptr(ib, rx_len, lp->type) = (LANCE_LOG_RX_BUFFERS << 13) | in lance_init_ring()
477 *lib_ptr(ib, rx_ptr, lp->type) = leptr; in lance_init_ring()
480 leptr, (uint)lib_off(brx_ring, lp->type)); in lance_init_ring()
482 /* Setup tx descriptor pointer */ in lance_init_ring()
484 *lib_ptr(ib, tx_len, lp->type) = (LANCE_LOG_TX_BUFFERS << 13) | in lance_init_ring()
486 *lib_ptr(ib, tx_ptr, lp->type) = leptr; in lance_init_ring()
489 leptr, (uint)lib_off(btx_ring, lp->type)); in lance_init_ring()
496 leptr = lp->tx_buf_ptr_lnc[i]; in lance_init_ring()
497 *lib_ptr(ib, btx_ring[i].tmd0, lp->type) = leptr; in lance_init_ring()
498 *lib_ptr(ib, btx_ring[i].tmd1, lp->type) = (leptr >> 16) & in lance_init_ring()
500 *lib_ptr(ib, btx_ring[i].length, lp->type) = 0xf000; in lance_init_ring()
502 *lib_ptr(ib, btx_ring[i].misc, lp->type) = 0; in lance_init_ring()
505 i, leptr, lp->tx_buf_ptr_cpu[i]); in lance_init_ring()
512 leptr = lp->rx_buf_ptr_lnc[i]; in lance_init_ring()
513 *lib_ptr(ib, brx_ring[i].rmd0, lp->type) = leptr; in lance_init_ring()
514 *lib_ptr(ib, brx_ring[i].rmd1, lp->type) = ((leptr >> 16) & in lance_init_ring()
517 *lib_ptr(ib, brx_ring[i].length, lp->type) = -RX_BUFF_SIZE | in lance_init_ring()
519 *lib_ptr(ib, brx_ring[i].mblength, lp->type) = 0; in lance_init_ring()
522 i, leptr, lp->rx_buf_ptr_cpu[i]); in lance_init_ring()
529 volatile struct lance_regs *ll = lp->ll; in init_restart_lance()
532 writereg(&ll->rap, LE_CSR0); in init_restart_lance()
533 writereg(&ll->rdp, LE_C0_INIT); in init_restart_lance()
536 for (i = 0; (i < 100) && !(ll->rdp & LE_C0_IDON); i++) { in init_restart_lance()
539 if ((i == 100) || (ll->rdp & LE_C0_ERR)) { in init_restart_lance()
541 i, ll->rdp); in init_restart_lance()
542 return -1; in init_restart_lance()
544 if ((ll->rdp & LE_C0_ERR)) { in init_restart_lance()
546 i, ll->rdp); in init_restart_lance()
547 return -1; in init_restart_lance()
549 writereg(&ll->rdp, LE_C0_IDON); in init_restart_lance()
550 writereg(&ll->rdp, LE_C0_STRT); in init_restart_lance()
551 writereg(&ll->rdp, LE_C0_INEA); in init_restart_lance()
559 volatile u16 *ib = (volatile u16 *)dev->mem_start; in lance_rx()
561 unsigned short bits; in lance_rx()
571 if (i == lp->rx_new) in lance_rx()
573 lp->type) & in lance_rx()
577 lp->type) & in lance_rx()
584 for (rd = lib_ptr(ib, brx_ring[lp->rx_new], lp->type); in lance_rx()
585 !((bits = *rds_ptr(rd, rmd1, lp->type)) & LE_R1_OWN); in lance_rx()
586 rd = lib_ptr(ib, brx_ring[lp->rx_new], lp->type)) { in lance_rx()
587 entry = lp->rx_new; in lance_rx()
591 dev->stats.rx_over_errors++; in lance_rx()
592 dev->stats.rx_errors++; in lance_rx()
598 dev->stats.rx_fifo_errors++; in lance_rx()
600 dev->stats.rx_crc_errors++; in lance_rx()
602 dev->stats.rx_over_errors++; in lance_rx()
604 dev->stats.rx_frame_errors++; in lance_rx()
606 dev->stats.rx_errors++; in lance_rx()
608 len = (*rds_ptr(rd, mblength, lp->type) & 0xfff) - 4; in lance_rx()
612 dev->stats.rx_dropped++; in lance_rx()
613 *rds_ptr(rd, mblength, lp->type) = 0; in lance_rx()
614 *rds_ptr(rd, rmd1, lp->type) = in lance_rx()
615 ((lp->rx_buf_ptr_lnc[entry] >> 16) & in lance_rx()
617 lp->rx_new = (entry + 1) & RX_RING_MOD_MASK; in lance_rx()
620 dev->stats.rx_bytes += len; in lance_rx()
625 cp_from_buf(lp->type, skb->data, in lance_rx()
626 lp->rx_buf_ptr_cpu[entry], len); in lance_rx()
628 skb->protocol = eth_type_trans(skb, dev); in lance_rx()
630 dev->stats.rx_packets++; in lance_rx()
634 *rds_ptr(rd, mblength, lp->type) = 0; in lance_rx()
635 *rds_ptr(rd, length, lp->type) = -RX_BUFF_SIZE | 0xf000; in lance_rx()
636 *rds_ptr(rd, rmd1, lp->type) = in lance_rx()
637 ((lp->rx_buf_ptr_lnc[entry] >> 16) & 0xff) | LE_R1_OWN; in lance_rx()
638 lp->rx_new = (entry + 1) & RX_RING_MOD_MASK; in lance_rx()
646 volatile u16 *ib = (volatile u16 *)dev->mem_start; in lance_tx()
647 volatile struct lance_regs *ll = lp->ll; in lance_tx()
652 j = lp->tx_old; in lance_tx()
654 spin_lock(&lp->lock); in lance_tx()
656 for (i = j; i != lp->tx_new; i = j) { in lance_tx()
657 td = lib_ptr(ib, btx_ring[i], lp->type); in lance_tx()
659 if (*tds_ptr(td, tmd1, lp->type) & LE_T1_OWN) in lance_tx()
662 if (*tds_ptr(td, tmd1, lp->type) & LE_T1_ERR) { in lance_tx()
663 status = *tds_ptr(td, misc, lp->type); in lance_tx()
665 dev->stats.tx_errors++; in lance_tx()
667 dev->stats.tx_aborted_errors++; in lance_tx()
669 dev->stats.tx_window_errors++; in lance_tx()
672 dev->stats.tx_carrier_errors++; in lance_tx()
673 printk("%s: Carrier Lost\n", dev->name); in lance_tx()
675 writereg(&ll->rap, LE_CSR0); in lance_tx()
676 writereg(&ll->rdp, LE_C0_STOP); in lance_tx()
686 dev->stats.tx_fifo_errors++; in lance_tx()
689 dev->name); in lance_tx()
691 writereg(&ll->rap, LE_CSR0); in lance_tx()
692 writereg(&ll->rdp, LE_C0_STOP); in lance_tx()
698 } else if ((*tds_ptr(td, tmd1, lp->type) & LE_T1_POK) == in lance_tx()
703 *tds_ptr(td, tmd1, lp->type) &= ~(LE_T1_POK); in lance_tx()
706 if (*tds_ptr(td, tmd1, lp->type) & LE_T1_EONE) in lance_tx()
707 dev->stats.collisions++; in lance_tx()
710 if (*tds_ptr(td, tmd1, lp->type) & LE_T1_EMORE) in lance_tx()
711 dev->stats.collisions += 2; in lance_tx()
713 dev->stats.tx_packets++; in lance_tx()
717 lp->tx_old = j; in lance_tx()
723 spin_unlock(&lp->lock); in lance_tx()
730 printk(KERN_ERR "%s: DMA error\n", dev->name); in lance_dma_merr_int()
738 volatile struct lance_regs *ll = lp->ll; in lance_interrupt()
741 writereg(&ll->rap, LE_CSR0); in lance_interrupt()
742 csr0 = ll->rdp; in lance_interrupt()
745 writereg(&ll->rdp, csr0 & (LE_C0_INTR | LE_C0_TINT | LE_C0_RINT)); in lance_interrupt()
749 writereg(&ll->rdp, LE_C0_BABL | LE_C0_ERR | LE_C0_MISS | in lance_interrupt()
759 dev->stats.tx_errors++; in lance_interrupt()
762 dev->stats.rx_errors++; in lance_interrupt()
765 printk("%s: Memory error, status %04x\n", dev->name, csr0); in lance_interrupt()
767 writereg(&ll->rdp, LE_C0_STOP); in lance_interrupt()
775 writereg(&ll->rdp, LE_C0_INEA); in lance_interrupt()
776 writereg(&ll->rdp, LE_C0_INEA); in lance_interrupt()
782 volatile u16 *ib = (volatile u16 *)dev->mem_start; in lance_open()
784 volatile struct lance_regs *ll = lp->ll; in lance_open()
788 writereg(&ll->rap, LE_CSR0); in lance_open()
789 writereg(&ll->rdp, LE_C0_STOP); in lance_open()
795 * BTW it is common bug in all lance drivers! --ANK in lance_open()
797 *lib_ptr(ib, mode, lp->type) = 0; in lance_open()
798 *lib_ptr(ib, filter[0], lp->type) = 0; in lance_open()
799 *lib_ptr(ib, filter[1], lp->type) = 0; in lance_open()
800 *lib_ptr(ib, filter[2], lp->type) = 0; in lance_open()
801 *lib_ptr(ib, filter[3], lp->type) = 0; in lance_open()
809 if (request_irq(dev->irq, lance_interrupt, 0, "lance", dev)) { in lance_open()
810 printk("%s: Can't get IRQ %d\n", dev->name, dev->irq); in lance_open()
811 return -EAGAIN; in lance_open()
813 if (lp->dma_irq >= 0) { in lance_open()
816 if (request_irq(lp->dma_irq, lance_dma_merr_int, IRQF_ONESHOT, in lance_open()
818 free_irq(dev->irq, dev); in lance_open()
819 printk("%s: Can't get DMA IRQ %d\n", dev->name, in lance_open()
820 lp->dma_irq); in lance_open()
821 return -EAGAIN; in lance_open()
842 volatile struct lance_regs *ll = lp->ll; in lance_close()
845 del_timer_sync(&lp->multicast_timer); in lance_close()
848 writereg(&ll->rap, LE_CSR0); in lance_close()
849 writereg(&ll->rdp, LE_C0_STOP); in lance_close()
851 if (lp->dma_irq >= 0) { in lance_close()
864 free_irq(lp->dma_irq, dev); in lance_close()
866 free_irq(dev->irq, dev); in lance_close()
873 volatile struct lance_regs *ll = lp->ll; in lance_reset()
877 writereg(&ll->rap, LE_CSR0); in lance_reset()
878 writereg(&ll->rdp, LE_C0_STOP); in lance_reset()
890 volatile struct lance_regs *ll = lp->ll; in lance_tx_timeout()
893 dev->name, ll->rdp); in lance_tx_timeout()
901 volatile struct lance_regs *ll = lp->ll; in lance_start_xmit()
902 volatile u16 *ib = (volatile u16 *)dev->mem_start; in lance_start_xmit()
906 len = skb->len; in lance_start_xmit()
914 dev->stats.tx_bytes += len; in lance_start_xmit()
916 spin_lock_irqsave(&lp->lock, flags); in lance_start_xmit()
918 entry = lp->tx_new; in lance_start_xmit()
919 *lib_ptr(ib, btx_ring[entry].length, lp->type) = (-len); in lance_start_xmit()
920 *lib_ptr(ib, btx_ring[entry].misc, lp->type) = 0; in lance_start_xmit()
922 cp_to_buf(lp->type, lp->tx_buf_ptr_cpu[entry], skb->data, len); in lance_start_xmit()
925 *lib_ptr(ib, btx_ring[entry].tmd1, lp->type) = in lance_start_xmit()
926 ((lp->tx_buf_ptr_lnc[entry] >> 16) & 0xff) | in lance_start_xmit()
928 lp->tx_new = (entry + 1) & TX_RING_MOD_MASK; in lance_start_xmit()
934 writereg(&ll->rdp, LE_C0_INEA | LE_C0_TDMD); in lance_start_xmit()
936 spin_unlock_irqrestore(&lp->lock, flags); in lance_start_xmit()
946 volatile u16 *ib = (volatile u16 *)dev->mem_start; in lance_load_multicast()
951 if (dev->flags & IFF_ALLMULTI) { in lance_load_multicast()
952 *lib_ptr(ib, filter[0], lp->type) = 0xffff; in lance_load_multicast()
953 *lib_ptr(ib, filter[1], lp->type) = 0xffff; in lance_load_multicast()
954 *lib_ptr(ib, filter[2], lp->type) = 0xffff; in lance_load_multicast()
955 *lib_ptr(ib, filter[3], lp->type) = 0xffff; in lance_load_multicast()
959 *lib_ptr(ib, filter[0], lp->type) = 0; in lance_load_multicast()
960 *lib_ptr(ib, filter[1], lp->type) = 0; in lance_load_multicast()
961 *lib_ptr(ib, filter[2], lp->type) = 0; in lance_load_multicast()
962 *lib_ptr(ib, filter[3], lp->type) = 0; in lance_load_multicast()
966 crc = ether_crc_le(ETH_ALEN, ha->addr); in lance_load_multicast()
968 *lib_ptr(ib, filter[crc >> 4], lp->type) |= 1 << (crc & 0xf); in lance_load_multicast()
975 volatile u16 *ib = (volatile u16 *)dev->mem_start; in lance_set_multicast()
976 volatile struct lance_regs *ll = lp->ll; in lance_set_multicast()
981 if (lp->tx_old != lp->tx_new) { in lance_set_multicast()
982 mod_timer(&lp->multicast_timer, jiffies + 4 * HZ/100); in lance_set_multicast()
989 writereg(&ll->rap, LE_CSR0); in lance_set_multicast()
990 writereg(&ll->rdp, LE_C0_STOP); in lance_set_multicast()
994 if (dev->flags & IFF_PROMISC) { in lance_set_multicast()
995 *lib_ptr(ib, mode, lp->type) |= LE_MO_PROM; in lance_set_multicast()
997 *lib_ptr(ib, mode, lp->type) &= ~LE_MO_PROM; in lance_set_multicast()
1008 struct net_device *dev = lp->dev; in lance_set_multicast_retry()
1049 dev = lp->next; in dec_lance_probe()
1056 ret = -ENOMEM; in dec_lance_probe()
1065 spin_lock_init(&lp->lock); in dec_lance_probe()
1067 lp->type = type; in dec_lance_probe()
1070 dev->base_addr = CKSEG1ADDR(dec_kn_slot_base + IOASIC_LANCE); in dec_lance_probe()
1072 /* buffer space for the on-board LANCE shared memory */ in dec_lance_probe()
1076 dev->mem_start = CKSEG1ADDR(0x00020000); in dec_lance_probe()
1077 dev->mem_end = dev->mem_start + 0x00020000; in dec_lance_probe()
1078 dev->irq = dec_interrupt[DEC_IRQ_LANCE]; in dec_lance_probe()
1082 memset((void *)dev->mem_start, 0, in dec_lance_probe()
1083 dev->mem_end - dev->mem_start); in dec_lance_probe()
1086 * setup the pointer arrays, this sucks [tm] :-( in dec_lance_probe()
1089 lp->rx_buf_ptr_cpu[i] = in dec_lance_probe()
1090 (char *)(dev->mem_start + 2 * BUF_OFFSET_CPU + in dec_lance_probe()
1092 lp->rx_buf_ptr_lnc[i] = in dec_lance_probe()
1096 lp->tx_buf_ptr_cpu[i] = in dec_lance_probe()
1097 (char *)(dev->mem_start + 2 * BUF_OFFSET_CPU + in dec_lance_probe()
1100 lp->tx_buf_ptr_lnc[i] = in dec_lance_probe()
1107 lp->dma_irq = dec_interrupt[DEC_IRQ_LANCE_MERR]; in dec_lance_probe()
1109 CPHYSADDR(dev->mem_start) << 3); in dec_lance_probe()
1116 start = to_tc_dev(bdev)->resource.start; in dec_lance_probe()
1117 len = to_tc_dev(bdev)->resource.end - start + 1; in dec_lance_probe()
1122 ret = -EBUSY; in dec_lance_probe()
1126 dev->mem_start = CKSEG1ADDR(start); in dec_lance_probe()
1127 dev->mem_end = dev->mem_start + 0x100000; in dec_lance_probe()
1128 dev->base_addr = dev->mem_start + 0x100000; in dec_lance_probe()
1129 dev->irq = to_tc_dev(bdev)->interrupt; in dec_lance_probe()
1130 esar_base = dev->mem_start + 0x1c0002; in dec_lance_probe()
1131 lp->dma_irq = -1; in dec_lance_probe()
1134 lp->rx_buf_ptr_cpu[i] = in dec_lance_probe()
1135 (char *)(dev->mem_start + BUF_OFFSET_CPU + in dec_lance_probe()
1137 lp->rx_buf_ptr_lnc[i] = in dec_lance_probe()
1141 lp->tx_buf_ptr_cpu[i] = in dec_lance_probe()
1142 (char *)(dev->mem_start + BUF_OFFSET_CPU + in dec_lance_probe()
1145 lp->tx_buf_ptr_lnc[i] = in dec_lance_probe()
1154 dev->irq = dec_interrupt[DEC_IRQ_LANCE]; in dec_lance_probe()
1155 dev->base_addr = CKSEG1ADDR(KN01_SLOT_BASE + KN01_LANCE); in dec_lance_probe()
1156 dev->mem_start = CKSEG1ADDR(KN01_SLOT_BASE + KN01_LANCE_MEM); in dec_lance_probe()
1157 dev->mem_end = dev->mem_start + KN01_SLOT_SIZE; in dec_lance_probe()
1159 lp->dma_irq = -1; in dec_lance_probe()
1162 * setup the pointer arrays, this sucks [tm] :-( in dec_lance_probe()
1165 lp->rx_buf_ptr_cpu[i] = in dec_lance_probe()
1166 (char *)(dev->mem_start + 2 * BUF_OFFSET_CPU + in dec_lance_probe()
1168 lp->rx_buf_ptr_lnc[i] = in dec_lance_probe()
1172 lp->tx_buf_ptr_cpu[i] = in dec_lance_probe()
1173 (char *)(dev->mem_start + 2 * BUF_OFFSET_CPU + in dec_lance_probe()
1176 lp->tx_buf_ptr_lnc[i] = in dec_lance_probe()
1187 ret = -ENODEV; in dec_lance_probe()
1191 ll = (struct lance_regs *) dev->base_addr; in dec_lance_probe()
1201 ret = -ENODEV; in dec_lance_probe()
1206 if (esar[i * 4] != esar[0x3c - i * 4] && in dec_lance_probe()
1208 esar[0x3c - i * 4] != esar[0x40 + i * 4]) { in dec_lance_probe()
1211 ret = -ENODEV; in dec_lance_probe()
1225 desc = "PMAD-AA"; in dec_lance_probe()
1236 name, desc, dev->dev_addr, dev->irq); in dec_lance_probe()
1238 dev->netdev_ops = &lance_netdev_ops; in dec_lance_probe()
1239 dev->watchdog_timeo = 5*HZ; in dec_lance_probe()
1241 /* lp->ll is the location of the registers for lance card */ in dec_lance_probe()
1242 lp->ll = ll; in dec_lance_probe()
1244 /* busmaster_regval (CSR3) should be zero according to the PMAD-AA in dec_lance_probe()
1247 lp->busmaster_regval = 0; in dec_lance_probe()
1249 dev->dma = 0; in dec_lance_probe()
1254 * use a timer to try again later when necessary. -DaveM in dec_lance_probe()
1256 lp->dev = dev; in dec_lance_probe()
1257 timer_setup(&lp->multicast_timer, lance_set_multicast_retry, 0); in dec_lance_probe()
1268 lp->next = root_lance_dev; in dec_lance_probe()
1272 printk("%s: registered as %s.\n", name, dev->name); in dec_lance_probe()
1301 return (count > 0) ? 0 : -ENODEV; in dec_lance_platform_probe()
1311 root_lance_dev = lp->next; in dec_lance_platform_remove()
1321 { "DEC ", "PMAD-AA " },
1350 start = to_tc_dev(bdev)->resource.start; in dec_lance_remove()
1351 len = to_tc_dev(bdev)->resource.end - start + 1; in dec_lance_remove()