Lines Matching +full:layers +full:- +full:configurable

6 	Written 1993-2000 by Donald Becker.
16 National Security Agency. Copyright 1994-2000 retained by the original
17 author, Donald Becker. The timer-based reset code was supplied in 1995
37 /* The user-configurable values.
58 This file is a device driver for the RealTek (aka AT-Lan-Tec) pocket
59 ethernet adapter. This is a common low-cost OEM pocket ethernet
64 Vincent Bono of AT-Lan-Tec. Ever try to figure out how a complicated
66 description is written based on guesses and writing lots of special-purpose
84 The station address is stored in a standard bit-serial EEPROM which must be
87 using it.) Unlike built-in devices, a pocket adapter can temporarily lose
104 (non-register) transfer modes are provided by the adapter, two in each
115 The data transfer mode is stored in the 'dev->if_port' field. Its default
116 value is '4'. It may be overridden at boot-time using the third parameter
120 register and data access methods. These functions are hand-tuned to
158 MODULE_PARM_DESC(debug, "ATP debug level (0-7)");
214 If dev->base_addr == 0, probe all likely locations.
215 If dev->base_addr == 1, always return failure.
216 If dev->base_addr == 2, allocate space for the device and return success
229 return -ENXIO; in atp_init()
240 return -ENODEV; in atp_init()
297 return -ENODEV; in atp_probe1()
302 return -ENODEV; in atp_probe1()
307 return -ENOMEM; in atp_probe1()
315 dev->irq = irq[0]; in atp_probe1()
317 dev->irq = 7; in atp_probe1()
319 dev->irq = 5; in atp_probe1()
323 dev->base_addr = ioaddr; in atp_probe1()
335 dev->name, dev->base_addr, dev->irq, dev->dev_addr); in atp_probe1()
337 /* Reset the ethernet hardware and activate the printer pass-through. */ in atp_probe1()
341 lp->addr_mode = CMR2h_Normal; in atp_probe1()
342 spin_lock_init(&lp->lock); in atp_probe1()
346 dev->if_port = xcvr[0]; in atp_probe1()
348 dev->if_port = (dev->mem_start & 0xf) ? (dev->mem_start & 0x7) : 4; in atp_probe1()
349 if (dev->mem_end & 0xf) in atp_probe1()
350 net_debug = dev->mem_end & 7; in atp_probe1()
352 dev->netdev_ops = &atp_netdev_ops; in atp_probe1()
353 dev->watchdog_timeo = TX_TIMEOUT; in atp_probe1()
361 lp->next_module = root_atp_dev; in atp_probe1()
367 /* Read the station address PROM, usually a word-wide EEPROM. */
370 long ioaddr = dev->base_addr; in get_node_ID()
407 while (--num_bits >= 0) { in eeprom_op()
425 there is non-reboot way to recover if something goes wrong.
428 probed for at boot-time, and we need to probe for it again.
435 /* The interrupt line is turned off (tri-stated) when the device isn't in in net_open()
438 ret = request_irq(dev->irq, atp_interrupt, 0, dev->name, dev); in net_open()
444 lp->dev = dev; in net_open()
445 timer_setup(&lp->timer, atp_timed_checker, 0); in net_open()
446 lp->timer.expires = jiffies + TIMED_CHECKER; in net_open()
447 add_timer(&lp->timer); in net_open()
458 long ioaddr = dev->base_addr; in hardware_init()
467 write_reg_byte(ioaddr, PAR0 + i, dev->dev_addr[i]); in hardware_init()
469 write_reg_high(ioaddr, CMR2, lp->addr_mode); in hardware_init()
472 printk(KERN_DEBUG "%s: Reset: current Rx mode %d.\n", dev->name, in hardware_init()
486 lp->tx_unit_busy = 0; in hardware_init()
487 lp->pac_cnt_in_tx_buf = 0; in hardware_init()
488 lp->saved_tx_size = 0; in hardware_init()
512 } while (--length > pad_len) ; in write_packet()
515 } while (--length > 0) ; in write_packet()
528 while (--length > pad_len) in write_packet()
530 while (--length > 0) in write_packet()
540 long ioaddr = dev->base_addr; in tx_timeout()
542 printk(KERN_WARNING "%s: Transmit timed out, %s?\n", dev->name, in tx_timeout()
545 dev->stats.tx_errors++; in tx_timeout()
550 dev->stats.tx_errors++; in tx_timeout()
557 long ioaddr = dev->base_addr; in atp_send_packet()
561 length = ETH_ZLEN < skb->len ? skb->len : ETH_ZLEN; in atp_send_packet()
568 spin_lock_irqsave(&lp->lock, flags); in atp_send_packet()
571 spin_unlock_irqrestore(&lp->lock, flags); in atp_send_packet()
573 write_packet(ioaddr, length, skb->data, length-skb->len, dev->if_port); in atp_send_packet()
575 lp->pac_cnt_in_tx_buf++; in atp_send_packet()
576 if (lp->tx_unit_busy == 0) { in atp_send_packet()
578 lp->saved_tx_size = 0; /* Redundant */ in atp_send_packet()
579 lp->re_tx = 0; in atp_send_packet()
580 lp->tx_unit_busy = 1; in atp_send_packet()
582 lp->saved_tx_size = length; in atp_send_packet()
583 /* Re-enable the LPT interrupts. */ in atp_send_packet()
603 ioaddr = dev->base_addr; in atp_interrupt()
606 spin_lock(&lp->lock); in atp_interrupt()
616 printk(KERN_DEBUG "%s: In interrupt ", dev->name); in atp_interrupt()
617 while (--boguscount > 0) { in atp_interrupt()
632 dev->stats.rx_over_errors++; in atp_interrupt()
633 /* Set to no-accept mode long enough to remove a packet. */ in atp_interrupt()
638 write_reg_high(ioaddr, CMR2, lp->addr_mode); in atp_interrupt()
644 } while (--boguscount > 0); in atp_interrupt()
653 dev->stats.collisions++; in atp_interrupt()
654 if (++lp->re_tx > 15) { in atp_interrupt()
655 dev->stats.tx_aborted_errors++; in atp_interrupt()
664 dev->stats.tx_packets++; in atp_interrupt()
665 lp->pac_cnt_in_tx_buf--; in atp_interrupt()
666 if ( lp->saved_tx_size) { in atp_interrupt()
667 trigger_send(ioaddr, lp->saved_tx_size); in atp_interrupt()
668 lp->saved_tx_size = 0; in atp_interrupt()
669 lp->re_tx = 0; in atp_interrupt()
671 lp->tx_unit_busy = 0; in atp_interrupt()
672 netif_wake_queue(dev); /* Inform upper layers. */ in atp_interrupt()
676 time_after(jiffies, lp->last_rx_time + HZ)) { in atp_interrupt()
679 "%ld jiffies status %02x CMR1 %02x.\n", dev->name, in atp_interrupt()
680 num_tx_since_rx, jiffies - lp->last_rx_time, status, in atp_interrupt()
682 dev->stats.rx_missed_errors++; in atp_interrupt()
695 write_reg_byte(ioaddr, PAR0 + i, dev->dev_addr[i]); in atp_interrupt()
697 mod_timer(&lp->timer, jiffies + TIMED_CHECKER); in atp_interrupt()
709 spin_unlock(&lp->lock); in atp_interrupt()
721 struct net_device *dev = lp->dev; in atp_timed_checker()
722 long ioaddr = dev->base_addr; in atp_timed_checker()
723 int tickssofar = jiffies - lp->last_rx_time; in atp_timed_checker()
726 spin_lock(&lp->lock); in atp_timed_checker()
730 write_reg_byte(ioaddr, PAR0 + i, dev->dev_addr[i]); in atp_timed_checker()
731 lp->last_rx_time = jiffies; in atp_timed_checker()
734 if (read_cmd_byte(ioaddr, PAR0 + i) != atp_timed_dev->dev_addr[i]) in atp_timed_checker()
737 write_reg_byte(ioaddr, PAR0 + i, atp_timed_dev->dev_addr[i]); in atp_timed_checker()
739 dev->stats.tx_errors++; in atp_timed_checker()
741 dev->stats.tx_dropped++; in atp_timed_checker()
743 dev->stats.collisions++; in atp_timed_checker()
745 dev->stats.rx_errors++; in atp_timed_checker()
749 spin_unlock(&lp->lock); in atp_timed_checker()
750 lp->timer.expires = jiffies + TIMED_CHECKER; in atp_timed_checker()
751 add_timer(&lp->timer); in atp_timed_checker()
759 long ioaddr = dev->base_addr; in net_rx()
764 read_block(ioaddr, 8, (unsigned char*)&rx_head, dev->if_port); in net_rx()
769 dev->stats.rx_errors++; in net_rx()
770 if (rx_head.rx_status & 0x0004) dev->stats.rx_frame_errors++; in net_rx()
771 else if (rx_head.rx_status & 0x0002) dev->stats.rx_crc_errors++; in net_rx()
774 dev->name, rx_head.rx_status); in net_rx()
776 dev->stats.rx_fifo_errors++; in net_rx()
783 /* Malloc up new buffer. The "-4" omits the FCS (CRC). */ in net_rx()
784 int pkt_len = (rx_head.rx_count & 0x7ff) - 4; in net_rx()
789 dev->stats.rx_dropped++; in net_rx()
794 read_block(ioaddr, pkt_len, skb_put(skb,pkt_len), dev->if_port); in net_rx()
795 skb->protocol = eth_type_trans(skb, dev); in net_rx()
797 dev->stats.rx_packets++; in net_rx()
798 dev->stats.rx_bytes += pkt_len; in net_rx()
802 lp->last_rx_time = jiffies; in net_rx()
812 do { *p++ = read_byte_mode0(ioaddr); } while (--length > 0); in read_block()
814 do { *p++ = read_byte_mode2(ioaddr); } while (--length > 0); in read_block()
817 do { *p++ = read_byte_mode4(ioaddr); } while (--length > 0); in read_block()
819 do { *p++ = read_byte_mode6(ioaddr); } while (--length > 0); in read_block()
831 long ioaddr = dev->base_addr; in net_close()
835 del_timer_sync(&lp->timer); in net_close()
838 lp->addr_mode = CMR2h_OFF; in net_close()
843 free_irq(dev->irq, dev); in net_close()
845 /* Reset the ethernet hardware and activate the printer pass-through. */ in net_close()
857 long ioaddr = dev->base_addr; in set_rx_mode()
859 if (!netdev_mc_empty(dev) || (dev->flags & (IFF_ALLMULTI|IFF_PROMISC))) in set_rx_mode()
860 lp->addr_mode = CMR2h_PROMISC; in set_rx_mode()
862 lp->addr_mode = CMR2h_Normal; in set_rx_mode()
863 write_reg_high(ioaddr, CMR2, lp->addr_mode); in set_rx_mode()
877 next_dev = atp_local->next_module; in atp_cleanup_module()