Lines Matching refs:dev

76 static void	ether3_setmulticastlist(struct net_device *dev);
77 static int ether3_rx(struct net_device *dev, unsigned int maxcnt);
78 static void ether3_tx(struct net_device *dev);
79 static int ether3_open (struct net_device *dev);
80 static int ether3_sendpacket (struct sk_buff *skb, struct net_device *dev);
82 static int ether3_close (struct net_device *dev);
83 static void ether3_setmulticastlist (struct net_device *dev);
84 static void ether3_timeout(struct net_device *dev);
117 ether3_setbuffer(struct net_device *dev, buffer_rw_t read, int start) in ether3_setbuffer() argument
121 ether3_outw(priv(dev)->regs.config1 | CFG1_LOCBUFMEM, REG_CONFIG1); in ether3_setbuffer()
122 ether3_outw(priv(dev)->regs.command | CMD_FIFOWRITE, REG_COMMAND); in ether3_setbuffer()
126 printk("%s: setbuffer broken\n", dev->name); in ether3_setbuffer()
127 priv(dev)->broken = 1; in ether3_setbuffer()
135 ether3_outw(priv(dev)->regs.command | CMD_FIFOREAD, REG_COMMAND); in ether3_setbuffer()
137 ether3_outw(priv(dev)->regs.command | CMD_FIFOWRITE, REG_COMMAND); in ether3_setbuffer()
146 #define ether3_writebuffer(dev,data,length) \ argument
149 #define ether3_writeword(dev,data) \ argument
152 #define ether3_writelong(dev,data) { \ argument
161 #define ether3_readbuffer(dev,data,length) \ argument
164 #define ether3_readword(dev) \ argument
167 #define ether3_readlong(dev) \ argument
175 struct net_device *dev = (struct net_device *)data; in ether3_ledoff() local
176 ether3_outw(priv(dev)->regs.config2 |= CFG2_CTRLO, REG_CONFIG2); in ether3_ledoff()
182 static inline void ether3_ledon(struct net_device *dev) in ether3_ledon() argument
184 del_timer(&priv(dev)->timer); in ether3_ledon()
185 priv(dev)->timer.expires = jiffies + HZ / 50; /* leave on for 1/50th second */ in ether3_ledon()
186 priv(dev)->timer.data = (unsigned long)dev; in ether3_ledon()
187 priv(dev)->timer.function = ether3_ledoff; in ether3_ledon()
188 add_timer(&priv(dev)->timer); in ether3_ledon()
189 if (priv(dev)->regs.config2 & CFG2_CTRLO) in ether3_ledon()
190 ether3_outw(priv(dev)->regs.config2 &= ~CFG2_CTRLO, REG_CONFIG2); in ether3_ledon()
223 ether3_ramtest(struct net_device *dev, unsigned char byte) in ether3_ramtest() argument
234 ether3_setbuffer(dev, buffer_write, 0); in ether3_ramtest()
235 ether3_writebuffer(dev, buffer, TX_END); in ether3_ramtest()
236 ether3_setbuffer(dev, buffer_write, RX_START); in ether3_ramtest()
237 ether3_writebuffer(dev, buffer + RX_START, RX_LEN); in ether3_ramtest()
239 ether3_setbuffer(dev, buffer_read, 0); in ether3_ramtest()
240 ether3_readbuffer(dev, buffer, TX_END); in ether3_ramtest()
241 ether3_setbuffer(dev, buffer_read, RX_START); in ether3_ramtest()
242 ether3_readbuffer(dev, buffer + RX_START, RX_LEN); in ether3_ramtest()
248 dev->name, buffer[i], byte, i); in ether3_ramtest()
271 static int ether3_init_2(struct net_device *dev) in ether3_init_2() argument
275 priv(dev)->regs.config1 = CFG1_RECVCOMPSTAT0|CFG1_DMABURST8; in ether3_init_2()
276 priv(dev)->regs.config2 = CFG2_CTRLO|CFG2_RECVCRC|CFG2_ERRENCRC; in ether3_init_2()
277 priv(dev)->regs.command = 0; in ether3_init_2()
282 ether3_outw(priv(dev)->regs.config1 | CFG1_BUFSELSTAT0, REG_CONFIG1); in ether3_init_2()
284 ether3_outb(dev->dev_addr[i], REG_BUFWIN); in ether3_init_2()
286 if (dev->flags & IFF_PROMISC) in ether3_init_2()
287 priv(dev)->regs.config1 |= CFG1_RECVPROMISC; in ether3_init_2()
288 else if (dev->flags & IFF_MULTICAST) in ether3_init_2()
289 priv(dev)->regs.config1 |= CFG1_RECVSPECBRMULTI; in ether3_init_2()
291 priv(dev)->regs.config1 |= CFG1_RECVSPECBROAD; in ether3_init_2()
298 ether3_outw(priv(dev)->regs.config1 | CFG1_TRANSEND, REG_CONFIG1); in ether3_init_2()
300 ether3_outw(priv(dev)->rx_head, REG_RECVPTR); in ether3_init_2()
302 ether3_outw(priv(dev)->rx_head >> 8, REG_RECVEND); in ether3_init_2()
303 ether3_outw(priv(dev)->regs.config2, REG_CONFIG2); in ether3_init_2()
304 ether3_outw(priv(dev)->regs.config1 | CFG1_LOCBUFMEM, REG_CONFIG1); in ether3_init_2()
305 ether3_outw(priv(dev)->regs.command, REG_COMMAND); in ether3_init_2()
307 i = ether3_ramtest(dev, 0x5A); in ether3_init_2()
310 i = ether3_ramtest(dev, 0x1E); in ether3_init_2()
314 ether3_setbuffer(dev, buffer_write, 0); in ether3_init_2()
315 ether3_writelong(dev, 0); in ether3_init_2()
320 ether3_init_for_open(struct net_device *dev) in ether3_init_for_open() argument
328 priv(dev)->regs.command = 0; in ether3_init_for_open()
333 ether3_outw(priv(dev)->regs.config1 | CFG1_BUFSELSTAT0, REG_CONFIG1); in ether3_init_for_open()
335 ether3_outb(dev->dev_addr[i], REG_BUFWIN); in ether3_init_for_open()
337 priv(dev)->tx_head = 0; in ether3_init_for_open()
338 priv(dev)->tx_tail = 0; in ether3_init_for_open()
339 priv(dev)->regs.config2 |= CFG2_CTRLO; in ether3_init_for_open()
340 priv(dev)->rx_head = RX_START; in ether3_init_for_open()
342 ether3_outw(priv(dev)->regs.config1 | CFG1_TRANSEND, REG_CONFIG1); in ether3_init_for_open()
344 ether3_outw(priv(dev)->rx_head, REG_RECVPTR); in ether3_init_for_open()
345 ether3_outw(priv(dev)->rx_head >> 8, REG_RECVEND); in ether3_init_for_open()
347 ether3_outw(priv(dev)->regs.config2, REG_CONFIG2); in ether3_init_for_open()
348 ether3_outw(priv(dev)->regs.config1 | CFG1_LOCBUFMEM, REG_CONFIG1); in ether3_init_for_open()
350 ether3_setbuffer(dev, buffer_write, 0); in ether3_init_for_open()
351 ether3_writelong(dev, 0); in ether3_init_for_open()
353 priv(dev)->regs.command = CMD_ENINTRX | CMD_ENINTTX; in ether3_init_for_open()
354 ether3_outw(priv(dev)->regs.command | CMD_RXON, REG_COMMAND); in ether3_init_for_open()
358 ether3_probe_bus_8(struct net_device *dev, int val) in ether3_probe_bus_8() argument
379 ether3_probe_bus_16(struct net_device *dev, int val) in ether3_probe_bus_16() argument
400 ether3_open(struct net_device *dev) in ether3_open() argument
402 if (request_irq(dev->irq, ether3_interrupt, 0, "ether3", dev)) in ether3_open()
405 ether3_init_for_open(dev); in ether3_open()
407 netif_start_queue(dev); in ether3_open()
416 ether3_close(struct net_device *dev) in ether3_close() argument
418 netif_stop_queue(dev); in ether3_close()
420 disable_irq(dev->irq); in ether3_close()
423 priv(dev)->regs.command = 0; in ether3_close()
429 free_irq(dev->irq, dev); in ether3_close()
440 static void ether3_setmulticastlist(struct net_device *dev) in ether3_setmulticastlist() argument
442 priv(dev)->regs.config1 &= ~CFG1_RECVPROMISC; in ether3_setmulticastlist()
444 if (dev->flags & IFF_PROMISC) { in ether3_setmulticastlist()
446 priv(dev)->regs.config1 |= CFG1_RECVPROMISC; in ether3_setmulticastlist()
447 } else if (dev->flags & IFF_ALLMULTI || !netdev_mc_empty(dev)) { in ether3_setmulticastlist()
448 priv(dev)->regs.config1 |= CFG1_RECVSPECBRMULTI; in ether3_setmulticastlist()
450 priv(dev)->regs.config1 |= CFG1_RECVSPECBROAD; in ether3_setmulticastlist()
452 ether3_outw(priv(dev)->regs.config1 | CFG1_LOCBUFMEM, REG_CONFIG1); in ether3_setmulticastlist()
455 static void ether3_timeout(struct net_device *dev) in ether3_timeout() argument
459 del_timer(&priv(dev)->timer); in ether3_timeout()
462 printk(KERN_ERR "%s: transmit timed out, network cable problem?\n", dev->name); in ether3_timeout()
463 printk(KERN_ERR "%s: state: { status=%04X cfg1=%04X cfg2=%04X }\n", dev->name, in ether3_timeout()
465 printk(KERN_ERR "%s: { rpr=%04X rea=%04X tpr=%04X }\n", dev->name, in ether3_timeout()
467 printk(KERN_ERR "%s: tx head=%X tx tail=%X\n", dev->name, in ether3_timeout()
468 priv(dev)->tx_head, priv(dev)->tx_tail); in ether3_timeout()
469 ether3_setbuffer(dev, buffer_read, priv(dev)->tx_tail); in ether3_timeout()
470 printk(KERN_ERR "%s: packet status = %08X\n", dev->name, ether3_readlong(dev)); in ether3_timeout()
473 priv(dev)->regs.config2 |= CFG2_CTRLO; in ether3_timeout()
474 dev->stats.tx_errors += 1; in ether3_timeout()
475 ether3_outw(priv(dev)->regs.config2, REG_CONFIG2); in ether3_timeout()
476 priv(dev)->tx_head = priv(dev)->tx_tail = 0; in ether3_timeout()
478 netif_wake_queue(dev); in ether3_timeout()
485 ether3_sendpacket(struct sk_buff *skb, struct net_device *dev) in ether3_sendpacket() argument
491 if (priv(dev)->broken) { in ether3_sendpacket()
493 dev->stats.tx_dropped++; in ether3_sendpacket()
494 netif_start_queue(dev); in ether3_sendpacket()
504 next_ptr = (priv(dev)->tx_head + 1) & 15; in ether3_sendpacket()
508 if (priv(dev)->tx_tail == next_ptr) { in ether3_sendpacket()
513 ptr = 0x600 * priv(dev)->tx_head; in ether3_sendpacket()
514 priv(dev)->tx_head = next_ptr; in ether3_sendpacket()
519 ether3_setbuffer(dev, buffer_write, next_ptr); in ether3_sendpacket()
520 ether3_writelong(dev, 0); in ether3_sendpacket()
521 ether3_setbuffer(dev, buffer_write, ptr); in ether3_sendpacket()
522 ether3_writelong(dev, 0); in ether3_sendpacket()
523 ether3_writebuffer(dev, skb->data, length); in ether3_sendpacket()
524 ether3_writeword(dev, htons(next_ptr)); in ether3_sendpacket()
525 ether3_writeword(dev, TXHDR_CHAINCONTINUE >> 16); in ether3_sendpacket()
526 ether3_setbuffer(dev, buffer_write, ptr); in ether3_sendpacket()
527 ether3_writeword(dev, htons((ptr + length + 4))); in ether3_sendpacket()
528 ether3_writeword(dev, TXHDR_FLAGS >> 16); in ether3_sendpacket()
529 ether3_ledon(dev); in ether3_sendpacket()
533 ether3_outw(priv(dev)->regs.command | CMD_TXON, REG_COMMAND); in ether3_sendpacket()
536 next_ptr = (priv(dev)->tx_head + 1) & 15; in ether3_sendpacket()
541 if (priv(dev)->tx_tail == next_ptr) in ether3_sendpacket()
542 netif_stop_queue(dev); in ether3_sendpacket()
551 struct net_device *dev = (struct net_device *)dev_id; in ether3_interrupt() local
562 ether3_outw(CMD_ACKINTRX | priv(dev)->regs.command, REG_COMMAND); in ether3_interrupt()
563 ether3_rx(dev, 12); in ether3_interrupt()
568 ether3_outw(CMD_ACKINTTX | priv(dev)->regs.command, REG_COMMAND); in ether3_interrupt()
569 ether3_tx(dev); in ether3_interrupt()
583 static int ether3_rx(struct net_device *dev, unsigned int maxcnt) in ether3_rx() argument
585 unsigned int next_ptr = priv(dev)->rx_head, received = 0; in ether3_rx()
587 ether3_ledon(dev); in ether3_rx()
601 ether3_setbuffer(dev, buffer_read, next_ptr); in ether3_rx()
602 temp_ptr = ether3_readword(dev); in ether3_rx()
603 status = ether3_readword(dev); in ether3_rx()
611 ether3_setbuffer(dev, buffer_read, this_ptr); in ether3_rx()
612 ether3_readbuffer(dev, addrs+2, 12); in ether3_rx()
616 printk("%s: bad next pointer @%04X: ", dev->name, priv(dev)->rx_head); in ether3_rx()
621 next_ptr = priv(dev)->rx_head; in ether3_rx()
627 if (!(*(unsigned long *)&dev->dev_addr[0] ^ *(unsigned long *)&addrs[2+6]) && in ether3_rx()
628 !(*(unsigned short *)&dev->dev_addr[4] ^ *(unsigned short *)&addrs[2+10])) { in ether3_rx()
639 skb = netdev_alloc_skb(dev, length + 2); in ether3_rx()
645 ether3_readbuffer(dev, buf + 12, length - 12); in ether3_rx()
651 skb->protocol = eth_type_trans(skb, dev); in ether3_rx()
656 dev->stats.rx_dropped++; in ether3_rx()
660 struct net_device_stats *stats = &dev->stats; in ether3_rx()
672 dev->stats.rx_packets += received; in ether3_rx()
673 priv(dev)->rx_head = next_ptr; in ether3_rx()
679 dev->stats.rx_dropped++; in ether3_rx()
681 ether3_outw(priv(dev)->regs.command | CMD_RXON, REG_COMMAND); in ether3_rx()
690 static void ether3_tx(struct net_device *dev) in ether3_tx() argument
692 unsigned int tx_tail = priv(dev)->tx_tail; in ether3_tx()
701 ether3_setbuffer(dev, buffer_read, tx_tail * 0x600); in ether3_tx()
702 status = ether3_readlong(dev); in ether3_tx()
715 dev->stats.tx_packets++; in ether3_tx()
717 dev->stats.tx_errors++; in ether3_tx()
719 dev->stats.collisions += 16; in ether3_tx()
721 dev->stats.tx_fifo_errors++; in ether3_tx()
727 if (priv(dev)->tx_tail != tx_tail) { in ether3_tx()
728 priv(dev)->tx_tail = tx_tail; in ether3_tx()
729 netif_wake_queue(dev); in ether3_tx()
756 struct net_device *dev; in ether3_probe() local
765 dev = alloc_etherdev(sizeof(struct dev_priv)); in ether3_probe()
766 if (!dev) { in ether3_probe()
771 SET_NETDEV_DEV(dev, &ec->dev); in ether3_probe()
773 priv(dev)->base = ecardm_iomap(ec, ECARD_RES_MEMC, 0, 0); in ether3_probe()
774 if (!priv(dev)->base) { in ether3_probe()
779 ec->irqaddr = priv(dev)->base + data->base_offset; in ether3_probe()
782 priv(dev)->seeq = priv(dev)->base + data->base_offset; in ether3_probe()
783 dev->irq = ec->irq; in ether3_probe()
785 ether3_addr(dev->dev_addr, ec); in ether3_probe()
787 init_timer(&priv(dev)->timer); in ether3_probe()
798 if (ether3_probe_bus_8(dev, 0x100) && in ether3_probe()
799 ether3_probe_bus_8(dev, 0x201)) in ether3_probe()
803 ether3_probe_bus_16(dev, 0x101) && in ether3_probe()
804 ether3_probe_bus_16(dev, 0x201)) in ether3_probe()
809 printk(KERN_ERR "%s: unable to identify bus width\n", dev->name); in ether3_probe()
815 "8-bit card\n", dev->name, data->name); in ether3_probe()
823 if (ether3_init_2(dev)) { in ether3_probe()
828 dev->netdev_ops = &ether3_netdev_ops; in ether3_probe()
829 dev->watchdog_timeo = 5 * HZ / 100; in ether3_probe()
831 ret = register_netdev(dev); in ether3_probe()
836 dev->name, data->name, ec->slot_no, dev->dev_addr); in ether3_probe()
838 ecard_set_drvdata(ec, dev); in ether3_probe()
842 free_netdev(dev); in ether3_probe()
851 struct net_device *dev = ecard_get_drvdata(ec); in ether3_remove() local
855 unregister_netdev(dev); in ether3_remove()
856 free_netdev(dev); in ether3_remove()