1 // SPDX-License-Identifier: GPL-1.0+
2 /* lasi_82596.c -- driver for the intel 82596 ethernet controller, as
3 munged into HPPA boxen .
5 This driver is based upon 82596.c, original credits are below...
6 but there were too many hoops which HP wants jumped through to
7 keep this code in there in a sane manner.
9 3 primary sources of the mess --
10 1) hppa needs *lots* of cacheline flushing to keep this kind of
13 2) The 82596 needs to see all of its pointers as their physical
14 address. Thus virt_to_bus/bus_to_virt are *everywhere*.
16 3) The implementation HP is using seems to be significantly pickier
17 about when and how the command and RX units are started. some
18 command ordering was changed.
20 Examination of the mach driver leads one to believe that there
21 might be a saner way to pull this off... anyone who feels like a
22 full rewrite can be my guest.
27 03/02/2000 changes for better/correct(?) cache-flushing (deller)
30 /* 82596.c: A generic 82596 ethernet driver for linux. */
33 Written 1994 by Mark Evans.
34 This driver is for the Apricot 82596 bus-master interface
36 Modularised 12/94 Mark Evans
39 Modified to support the 82596 ethernet chips on 680x0 VME boards.
43 980825: Changed to receive directly in to sk_buffs which are
44 allocated at open() time. Eliminates copy on incoming frames
45 (small ones are still copied). Shared data now held in a
46 non-cached page, so we can run on 68060 in copyback mode.
49 * look at deferring rx frames rather than discarding (as per tulip)
50 * handle tx ring full as per tulip
51 * performance test to tune rx_copybreak
53 Most of my modifications relate to the braindead big-endian
54 implementation by Intel. When the i596 is operating in
55 'big-endian' mode, it thinks a 32 bit value of 0x12345678
56 should be stored as 0x56781234. This is a real pain, when
57 you have linked lists which are shared by the 680x0 and the
61 Written 1993 by Donald Becker.
62 Copyright 1993 United States Government as represented by the Director,
63 National Security Agency.
66 Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403
70 #include <linux/module.h>
71 #include <linux/kernel.h>
72 #include <linux/string.h>
73 #include <linux/errno.h>
74 #include <linux/ioport.h>
75 #include <linux/interrupt.h>
76 #include <linux/delay.h>
77 #include <linux/netdevice.h>
78 #include <linux/etherdevice.h>
79 #include <linux/skbuff.h>
80 #include <linux/types.h>
81 #include <linux/bitops.h>
82 #include <linux/dma-mapping.h>
84 #include <linux/irq.h>
85 #include <linux/gfp.h>
90 #define DEB_INIT 0x0001
91 #define DEB_PROBE 0x0002
92 #define DEB_SERIOUS 0x0004
93 #define DEB_ERRORS 0x0008
94 #define DEB_MULTI 0x0010
95 #define DEB_TDR 0x0020
96 #define DEB_OPEN 0x0040
97 #define DEB_RESET 0x0080
98 #define DEB_ADDCMD 0x0100
99 #define DEB_STATUS 0x0200
100 #define DEB_STARTTX 0x0400
101 #define DEB_RXADDR 0x0800
102 #define DEB_TXADDR 0x1000
103 #define DEB_RXFRAME 0x2000
104 #define DEB_INTS 0x4000
105 #define DEB_STRUCT 0x8000
106 #define DEB_ANY 0xffff
109 #define DEB(x, y) if (i596_debug & (x)) { y; }
113 * The MPU_PORT command allows direct access to the 82596. With PORT access
114 * the following commands are available (p5-18). The 32-bit port command
115 * must be word-swapped with the most significant word written first.
116 * This only applies to VME boards.
118 #define PORT_RESET 0x00 /* reset 82596 */
119 #define PORT_SELFTEST 0x01 /* selftest */
120 #define PORT_ALTSCP 0x02 /* alternate SCB address */
121 #define PORT_ALTDUMP 0x03 /* Alternate DUMP address */
123 static int i596_debug = (DEB_SERIOUS|DEB_PROBE);
125 /* Copy frames shorter than rx_copybreak, otherwise pass on up in
126 * a full sized sk_buff. Value of 100 stolen from tulip.c (!alpha).
128 static int rx_copybreak = 100;
130 #define PKT_BUF_SZ 1536
131 #define MAX_MC_CNT 64
133 #define ISCP_BUSY 0x0001
135 #define I596_NULL ((u32)0xffffffff)
137 #define CMD_EOL 0x8000 /* The last command of the list, stop. */
138 #define CMD_SUSP 0x4000 /* Suspend after doing cmd. */
139 #define CMD_INTR 0x2000 /* Interrupt after doing cmd. */
141 #define CMD_FLEX 0x0008 /* Enable flexible memory model */
144 CmdNOp = 0, CmdSASetup = 1, CmdConfigure = 2, CmdMulticastList = 3,
145 CmdTx = 4, CmdTDR = 5, CmdDump = 6, CmdDiagnose = 7
148 #define STAT_C 0x8000 /* Set to 0 after execution */
149 #define STAT_B 0x4000 /* Command being executed */
150 #define STAT_OK 0x2000 /* Command executed ok */
151 #define STAT_A 0x1000 /* Command aborted */
153 #define CUC_START 0x0100
154 #define CUC_RESUME 0x0200
155 #define CUC_SUSPEND 0x0300
156 #define CUC_ABORT 0x0400
157 #define RX_START 0x0010
158 #define RX_RESUME 0x0020
159 #define RX_SUSPEND 0x0030
160 #define RX_ABORT 0x0040
162 #define TX_TIMEOUT (HZ/20)
166 unsigned short porthi;
167 unsigned short portlo;
172 #define SIZE_MASK 0x3fff
179 u32 cache_pad[5]; /* Total 32 bytes... */
182 /* The command structure has two 'next' pointers; v_next is the address of
183 * the next command as seen by the CPU, b_next is the address of the next
184 * command as seen by the 82596. The b_next pointer, as used by the 82596
185 * always references the status field of the next command, rather than the
186 * v_next field, because the 82596 is unaware of v_next. It may seem more
187 * logical to put v_next at the end of the structure, but we cannot do that
188 * because the 82596 expects other fields to be there, depending on command
193 struct i596_cmd *v_next; /* Address from CPUs viewpoint */
194 unsigned short status;
195 unsigned short command;
196 u32 b_next; /* Address from i596 viewpoint */
204 struct sk_buff *skb; /* So we can free it after tx */
207 u32 cache_pad[6]; /* Total 64 bytes... */
209 u32 cache_pad[1]; /* Total 32 bytes... */
215 unsigned short status;
222 char mc_addrs[MAX_MC_CNT*6];
232 char i596_config[16];
238 u32 b_next; /* Address from i596 viewpoint */
240 unsigned short count;
242 struct i596_rfd *v_next; /* Address from CPUs viewpoint */
243 struct i596_rfd *v_prev;
245 u32 cache_pad[2]; /* Total 32 bytes... */
251 unsigned short count;
252 unsigned short zero1;
254 u32 b_data; /* Address from i596 viewpoint */
256 unsigned short zero2;
259 struct i596_rbd *v_next;
260 u32 b_addr; /* This rbd addr from i596 view */
261 unsigned char *v_data; /* Address from CPUs viewpoint */
262 /* Total 32 bytes... */
268 /* These values as chosen so struct i596_dma fits in one page... */
270 #define TX_RING_SIZE 32
271 #define RX_RING_SIZE 16
274 unsigned short status;
275 unsigned short command;
285 unsigned short t_off;
300 struct i596_scp scp __attribute__((aligned(32)));
301 volatile struct i596_iscp iscp __attribute__((aligned(32)));
302 volatile struct i596_scb scb __attribute__((aligned(32)));
303 struct sa_cmd sa_cmd __attribute__((aligned(32)));
304 struct cf_cmd cf_cmd __attribute__((aligned(32)));
305 struct tdr_cmd tdr_cmd __attribute__((aligned(32)));
306 struct mc_cmd mc_cmd __attribute__((aligned(32)));
307 struct i596_rfd rfds[RX_RING_SIZE] __attribute__((aligned(32)));
308 struct i596_rbd rbds[RX_RING_SIZE] __attribute__((aligned(32)));
309 struct tx_cmd tx_cmds[TX_RING_SIZE] __attribute__((aligned(32)));
310 struct i596_tbd tbds[TX_RING_SIZE] __attribute__((aligned(32)));
313 struct i596_private {
314 struct i596_dma *dma;
317 struct i596_rfd *rfd_head;
318 struct i596_rbd *rbd_head;
319 struct i596_cmd *cmd_tail;
320 struct i596_cmd *cmd_head;
325 spinlock_t lock; /* serialize access to chip */
327 void __iomem *mpu_port;
331 static const char init_setup[] =
333 0x8E, /* length, prefetch on */
334 0xC8, /* fifo to 8, monitor off */
335 0x80, /* don't save bad frames */
336 0x2E, /* No source address insertion, 8 byte preamble */
337 0x00, /* priority and backoff defaults */
338 0x60, /* interframe spacing */
339 0x00, /* slot time LSB */
340 0xf2, /* slot time and retries */
341 0x00, /* promiscuous mode */
342 0x00, /* collision detect */
343 0x40, /* minimum frame length */
346 0x7f /* *multi IA */ };
348 static int i596_open(struct net_device *dev);
349 static netdev_tx_t i596_start_xmit(struct sk_buff *skb, struct net_device *dev);
350 static irqreturn_t i596_interrupt(int irq, void *dev_id);
351 static int i596_close(struct net_device *dev);
352 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd);
353 static void i596_tx_timeout (struct net_device *dev, unsigned int txqueue);
354 static void print_eth(unsigned char *buf, char *str);
355 static void set_multicast_list(struct net_device *dev);
356 static inline void ca(struct net_device *dev);
357 static void mpu_port(struct net_device *dev, int c, dma_addr_t x);
359 static int rx_ring_size = RX_RING_SIZE;
360 static int ticks_limit = 100;
361 static int max_cmd_backlog = TX_RING_SIZE-1;
363 #ifdef CONFIG_NET_POLL_CONTROLLER
364 static void i596_poll_controller(struct net_device *dev);
367 static inline dma_addr_t virt_to_dma(struct i596_private *lp, volatile void *v)
369 return lp->dma_addr + ((unsigned long)v - (unsigned long)lp->dma);
372 #ifdef NONCOHERENT_DMA
373 static inline void dma_sync_dev(struct net_device *ndev, volatile void *addr,
376 dma_sync_single_for_device(ndev->dev.parent,
377 virt_to_dma(netdev_priv(ndev), addr), len,
381 static inline void dma_sync_cpu(struct net_device *ndev, volatile void *addr,
384 dma_sync_single_for_cpu(ndev->dev.parent,
385 virt_to_dma(netdev_priv(ndev), addr), len,
389 static inline void dma_sync_dev(struct net_device *ndev, volatile void *addr,
393 static inline void dma_sync_cpu(struct net_device *ndev, volatile void *addr,
397 #endif /* NONCOHERENT_DMA */
399 static inline int wait_istat(struct net_device *dev, struct i596_dma *dma, int delcnt, char *str)
401 dma_sync_cpu(dev, &(dma->iscp), sizeof(struct i596_iscp));
402 while (--delcnt && dma->iscp.stat) {
404 dma_sync_cpu(dev, &(dma->iscp), sizeof(struct i596_iscp));
407 printk(KERN_ERR "%s: %s, iscp.stat %04x, didn't clear\n",
408 dev->name, str, SWAP16(dma->iscp.stat));
415 static inline int wait_cmd(struct net_device *dev, struct i596_dma *dma, int delcnt, char *str)
417 dma_sync_cpu(dev, &(dma->scb), sizeof(struct i596_scb));
418 while (--delcnt && dma->scb.command) {
420 dma_sync_cpu(dev, &(dma->scb), sizeof(struct i596_scb));
423 printk(KERN_ERR "%s: %s, status %4.4x, cmd %4.4x.\n",
425 SWAP16(dma->scb.status),
426 SWAP16(dma->scb.command));
433 static void i596_display_data(struct net_device *dev)
435 struct i596_private *lp = netdev_priv(dev);
436 struct i596_dma *dma = lp->dma;
437 struct i596_cmd *cmd;
438 struct i596_rfd *rfd;
439 struct i596_rbd *rbd;
441 printk(KERN_DEBUG "lp and scp at %p, .sysbus = %08x, .iscp = %08x\n",
442 &dma->scp, dma->scp.sysbus, SWAP32(dma->scp.iscp));
443 printk(KERN_DEBUG "iscp at %p, iscp.stat = %08x, .scb = %08x\n",
444 &dma->iscp, SWAP32(dma->iscp.stat), SWAP32(dma->iscp.scb));
445 printk(KERN_DEBUG "scb at %p, scb.status = %04x, .command = %04x,"
446 " .cmd = %08x, .rfd = %08x\n",
447 &dma->scb, SWAP16(dma->scb.status), SWAP16(dma->scb.command),
448 SWAP16(dma->scb.cmd), SWAP32(dma->scb.rfd));
449 printk(KERN_DEBUG " errors: crc %x, align %x, resource %x,"
450 " over %x, rcvdt %x, short %x\n",
451 SWAP32(dma->scb.crc_err), SWAP32(dma->scb.align_err),
452 SWAP32(dma->scb.resource_err), SWAP32(dma->scb.over_err),
453 SWAP32(dma->scb.rcvdt_err), SWAP32(dma->scb.short_err));
455 while (cmd != NULL) {
457 "cmd at %p, .status = %04x, .command = %04x,"
459 cmd, SWAP16(cmd->status), SWAP16(cmd->command),
460 SWAP32(cmd->b_next));
464 printk(KERN_DEBUG "rfd_head = %p\n", rfd);
467 " %p .stat %04x, .cmd %04x, b_next %08x, rbd %08x,"
469 rfd, SWAP16(rfd->stat), SWAP16(rfd->cmd),
470 SWAP32(rfd->b_next), SWAP32(rfd->rbd),
473 } while (rfd != lp->rfd_head);
475 printk(KERN_DEBUG "rbd_head = %p\n", rbd);
478 " %p .count %04x, b_next %08x, b_data %08x,"
480 rbd, SWAP16(rbd->count), SWAP32(rbd->b_next),
481 SWAP32(rbd->b_data), SWAP16(rbd->size));
483 } while (rbd != lp->rbd_head);
484 dma_sync_cpu(dev, dma, sizeof(struct i596_dma));
487 static inline int init_rx_bufs(struct net_device *dev)
489 struct i596_private *lp = netdev_priv(dev);
490 struct i596_dma *dma = lp->dma;
492 struct i596_rfd *rfd;
493 struct i596_rbd *rbd;
495 /* First build the Receive Buffer Descriptor List */
497 for (i = 0, rbd = dma->rbds; i < rx_ring_size; i++, rbd++) {
501 skb = netdev_alloc_skb_ip_align(dev, PKT_BUF_SZ);
504 dma_addr = dma_map_single(dev->dev.parent, skb->data,
505 PKT_BUF_SZ, DMA_FROM_DEVICE);
507 rbd->b_next = SWAP32(virt_to_dma(lp, rbd+1));
508 rbd->b_addr = SWAP32(virt_to_dma(lp, rbd));
510 rbd->v_data = skb->data;
511 rbd->b_data = SWAP32(dma_addr);
512 rbd->size = SWAP16(PKT_BUF_SZ);
514 lp->rbd_head = dma->rbds;
515 rbd = dma->rbds + rx_ring_size - 1;
516 rbd->v_next = dma->rbds;
517 rbd->b_next = SWAP32(virt_to_dma(lp, dma->rbds));
519 /* Now build the Receive Frame Descriptor List */
521 for (i = 0, rfd = dma->rfds; i < rx_ring_size; i++, rfd++) {
522 rfd->rbd = I596_NULL;
525 rfd->b_next = SWAP32(virt_to_dma(lp, rfd+1));
526 rfd->cmd = SWAP16(CMD_FLEX);
528 lp->rfd_head = dma->rfds;
529 dma->scb.rfd = SWAP32(virt_to_dma(lp, dma->rfds));
531 rfd->rbd = SWAP32(virt_to_dma(lp, lp->rbd_head));
532 rfd->v_prev = dma->rfds + rx_ring_size - 1;
533 rfd = dma->rfds + rx_ring_size - 1;
534 rfd->v_next = dma->rfds;
535 rfd->b_next = SWAP32(virt_to_dma(lp, dma->rfds));
536 rfd->cmd = SWAP16(CMD_EOL|CMD_FLEX);
538 dma_sync_dev(dev, dma, sizeof(struct i596_dma));
542 static inline void remove_rx_bufs(struct net_device *dev)
544 struct i596_private *lp = netdev_priv(dev);
545 struct i596_rbd *rbd;
548 for (i = 0, rbd = lp->dma->rbds; i < rx_ring_size; i++, rbd++) {
549 if (rbd->skb == NULL)
551 dma_unmap_single(dev->dev.parent,
552 (dma_addr_t)SWAP32(rbd->b_data),
553 PKT_BUF_SZ, DMA_FROM_DEVICE);
554 dev_kfree_skb(rbd->skb);
559 static void rebuild_rx_bufs(struct net_device *dev)
561 struct i596_private *lp = netdev_priv(dev);
562 struct i596_dma *dma = lp->dma;
565 /* Ensure rx frame/buffer descriptors are tidy */
567 for (i = 0; i < rx_ring_size; i++) {
568 dma->rfds[i].rbd = I596_NULL;
569 dma->rfds[i].cmd = SWAP16(CMD_FLEX);
571 dma->rfds[rx_ring_size-1].cmd = SWAP16(CMD_EOL|CMD_FLEX);
572 lp->rfd_head = dma->rfds;
573 dma->scb.rfd = SWAP32(virt_to_dma(lp, dma->rfds));
574 lp->rbd_head = dma->rbds;
575 dma->rfds[0].rbd = SWAP32(virt_to_dma(lp, dma->rbds));
577 dma_sync_dev(dev, dma, sizeof(struct i596_dma));
581 static int init_i596_mem(struct net_device *dev)
583 struct i596_private *lp = netdev_priv(dev);
584 struct i596_dma *dma = lp->dma;
587 mpu_port(dev, PORT_RESET, 0);
588 udelay(100); /* Wait 100us - seems to help */
590 /* change the scp address */
592 lp->last_cmd = jiffies;
594 dma->scp.sysbus = SYSBUS;
595 dma->scp.iscp = SWAP32(virt_to_dma(lp, &(dma->iscp)));
596 dma->iscp.scb = SWAP32(virt_to_dma(lp, &(dma->scb)));
597 dma->iscp.stat = SWAP32(ISCP_BUSY);
601 dma->scb.cmd = I596_NULL;
603 DEB(DEB_INIT, printk(KERN_DEBUG "%s: starting i82596.\n", dev->name));
605 dma_sync_dev(dev, &(dma->scp), sizeof(struct i596_scp));
606 dma_sync_dev(dev, &(dma->iscp), sizeof(struct i596_iscp));
607 dma_sync_dev(dev, &(dma->scb), sizeof(struct i596_scb));
609 mpu_port(dev, PORT_ALTSCP, virt_to_dma(lp, &dma->scp));
611 if (wait_istat(dev, dma, 1000, "initialization timed out"))
613 DEB(DEB_INIT, printk(KERN_DEBUG
614 "%s: i82596 initialization successful\n",
617 if (request_irq(dev->irq, i596_interrupt, 0, "i82596", dev)) {
618 printk(KERN_ERR "%s: IRQ %d not free\n", dev->name, dev->irq);
622 /* Ensure rx frame/buffer descriptors are tidy */
623 rebuild_rx_bufs(dev);
625 dma->scb.command = 0;
626 dma_sync_dev(dev, &(dma->scb), sizeof(struct i596_scb));
628 DEB(DEB_INIT, printk(KERN_DEBUG
629 "%s: queuing CmdConfigure\n", dev->name));
630 memcpy(dma->cf_cmd.i596_config, init_setup, 14);
631 dma->cf_cmd.cmd.command = SWAP16(CmdConfigure);
632 dma_sync_dev(dev, &(dma->cf_cmd), sizeof(struct cf_cmd));
633 i596_add_cmd(dev, &dma->cf_cmd.cmd);
635 DEB(DEB_INIT, printk(KERN_DEBUG "%s: queuing CmdSASetup\n", dev->name));
636 memcpy(dma->sa_cmd.eth_addr, dev->dev_addr, ETH_ALEN);
637 dma->sa_cmd.cmd.command = SWAP16(CmdSASetup);
638 dma_sync_dev(dev, &(dma->sa_cmd), sizeof(struct sa_cmd));
639 i596_add_cmd(dev, &dma->sa_cmd.cmd);
641 DEB(DEB_INIT, printk(KERN_DEBUG "%s: queuing CmdTDR\n", dev->name));
642 dma->tdr_cmd.cmd.command = SWAP16(CmdTDR);
643 dma_sync_dev(dev, &(dma->tdr_cmd), sizeof(struct tdr_cmd));
644 i596_add_cmd(dev, &dma->tdr_cmd.cmd);
646 spin_lock_irqsave (&lp->lock, flags);
648 if (wait_cmd(dev, dma, 1000, "timed out waiting to issue RX_START")) {
649 spin_unlock_irqrestore (&lp->lock, flags);
650 goto failed_free_irq;
652 DEB(DEB_INIT, printk(KERN_DEBUG "%s: Issuing RX_START\n", dev->name));
653 dma->scb.command = SWAP16(RX_START);
654 dma->scb.rfd = SWAP32(virt_to_dma(lp, dma->rfds));
655 dma_sync_dev(dev, &(dma->scb), sizeof(struct i596_scb));
659 spin_unlock_irqrestore (&lp->lock, flags);
660 if (wait_cmd(dev, dma, 1000, "RX_START not processed"))
661 goto failed_free_irq;
662 DEB(DEB_INIT, printk(KERN_DEBUG
663 "%s: Receive unit started OK\n", dev->name));
667 free_irq(dev->irq, dev);
669 printk(KERN_ERR "%s: Failed to initialise 82596\n", dev->name);
670 mpu_port(dev, PORT_RESET, 0);
675 static inline int i596_rx(struct net_device *dev)
677 struct i596_private *lp = netdev_priv(dev);
678 struct i596_rfd *rfd;
679 struct i596_rbd *rbd;
682 DEB(DEB_RXFRAME, printk(KERN_DEBUG
683 "i596_rx(), rfd_head %p, rbd_head %p\n",
684 lp->rfd_head, lp->rbd_head));
687 rfd = lp->rfd_head; /* Ref next frame to check */
689 dma_sync_cpu(dev, rfd, sizeof(struct i596_rfd));
690 while (rfd->stat & SWAP16(STAT_C)) { /* Loop while complete frames */
691 if (rfd->rbd == I596_NULL)
693 else if (rfd->rbd == lp->rbd_head->b_addr) {
695 dma_sync_cpu(dev, rbd, sizeof(struct i596_rbd));
697 printk(KERN_ERR "%s: rbd chain broken!\n", dev->name);
701 DEB(DEB_RXFRAME, printk(KERN_DEBUG
702 " rfd %p, rfd.rbd %08x, rfd.stat %04x\n",
703 rfd, rfd->rbd, rfd->stat));
705 if (rbd != NULL && (rfd->stat & SWAP16(STAT_OK))) {
707 int pkt_len = SWAP16(rbd->count) & 0x3fff;
708 struct sk_buff *skb = rbd->skb;
711 DEB(DEB_RXADDR, print_eth(rbd->v_data, "received"));
714 /* Check if the packet is long enough to just accept
715 * without copying to a properly sized skbuff.
718 if (pkt_len > rx_copybreak) {
719 struct sk_buff *newskb;
722 dma_unmap_single(dev->dev.parent,
723 (dma_addr_t)SWAP32(rbd->b_data),
724 PKT_BUF_SZ, DMA_FROM_DEVICE);
725 /* Get fresh skbuff to replace filled one. */
726 newskb = netdev_alloc_skb_ip_align(dev,
728 if (newskb == NULL) {
729 skb = NULL; /* drop pkt */
733 /* Pass up the skb already on the Rx ring. */
734 skb_put(skb, pkt_len);
737 dma_addr = dma_map_single(dev->dev.parent,
741 rbd->v_data = newskb->data;
742 rbd->b_data = SWAP32(dma_addr);
743 dma_sync_dev(dev, rbd, sizeof(struct i596_rbd));
745 skb = netdev_alloc_skb_ip_align(dev, pkt_len);
749 /* XXX tulip.c can defer packets here!! */
750 dev->stats.rx_dropped++;
753 /* 16 byte align the data fields */
754 dma_sync_single_for_cpu(dev->dev.parent,
755 (dma_addr_t)SWAP32(rbd->b_data),
756 PKT_BUF_SZ, DMA_FROM_DEVICE);
757 skb_put_data(skb, rbd->v_data,
759 dma_sync_single_for_device(dev->dev.parent,
760 (dma_addr_t)SWAP32(rbd->b_data),
761 PKT_BUF_SZ, DMA_FROM_DEVICE);
764 skb->protocol = eth_type_trans(skb, dev);
766 dev->stats.rx_packets++;
767 dev->stats.rx_bytes += pkt_len;
770 DEB(DEB_ERRORS, printk(KERN_DEBUG
771 "%s: Error, rfd.stat = 0x%04x\n",
772 dev->name, rfd->stat));
773 dev->stats.rx_errors++;
774 if (rfd->stat & SWAP16(0x0100))
775 dev->stats.collisions++;
776 if (rfd->stat & SWAP16(0x8000))
777 dev->stats.rx_length_errors++;
778 if (rfd->stat & SWAP16(0x0001))
779 dev->stats.rx_over_errors++;
780 if (rfd->stat & SWAP16(0x0002))
781 dev->stats.rx_fifo_errors++;
782 if (rfd->stat & SWAP16(0x0004))
783 dev->stats.rx_frame_errors++;
784 if (rfd->stat & SWAP16(0x0008))
785 dev->stats.rx_crc_errors++;
786 if (rfd->stat & SWAP16(0x0010))
787 dev->stats.rx_length_errors++;
790 /* Clear the buffer descriptor count and EOF + F flags */
792 if (rbd != NULL && (rbd->count & SWAP16(0x4000))) {
794 lp->rbd_head = rbd->v_next;
795 dma_sync_dev(dev, rbd, sizeof(struct i596_rbd));
798 /* Tidy the frame descriptor, marking it as end of list */
800 rfd->rbd = I596_NULL;
802 rfd->cmd = SWAP16(CMD_EOL|CMD_FLEX);
805 /* Update record of next frame descriptor to process */
807 lp->dma->scb.rfd = rfd->b_next;
808 lp->rfd_head = rfd->v_next;
809 dma_sync_dev(dev, rfd, sizeof(struct i596_rfd));
811 /* Remove end-of-list from old end descriptor */
813 rfd->v_prev->cmd = SWAP16(CMD_FLEX);
814 dma_sync_dev(dev, rfd->v_prev, sizeof(struct i596_rfd));
816 dma_sync_cpu(dev, rfd, sizeof(struct i596_rfd));
819 DEB(DEB_RXFRAME, printk(KERN_DEBUG "frames %d\n", frames));
825 static inline void i596_cleanup_cmd(struct net_device *dev, struct i596_private *lp)
827 struct i596_cmd *ptr;
829 while (lp->cmd_head != NULL) {
831 lp->cmd_head = ptr->v_next;
834 switch (SWAP16(ptr->command) & 0x7) {
837 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
838 struct sk_buff *skb = tx_cmd->skb;
839 dma_unmap_single(dev->dev.parent,
841 skb->len, DMA_TO_DEVICE);
845 dev->stats.tx_errors++;
846 dev->stats.tx_aborted_errors++;
849 ptr->b_next = I596_NULL;
850 tx_cmd->cmd.command = 0; /* Mark as free */
855 ptr->b_next = I596_NULL;
857 dma_sync_dev(dev, ptr, sizeof(struct i596_cmd));
860 wait_cmd(dev, lp->dma, 100, "i596_cleanup_cmd timed out");
861 lp->dma->scb.cmd = I596_NULL;
862 dma_sync_dev(dev, &(lp->dma->scb), sizeof(struct i596_scb));
866 static inline void i596_reset(struct net_device *dev, struct i596_private *lp)
870 DEB(DEB_RESET, printk(KERN_DEBUG "i596_reset\n"));
872 spin_lock_irqsave (&lp->lock, flags);
874 wait_cmd(dev, lp->dma, 100, "i596_reset timed out");
876 netif_stop_queue(dev);
878 /* FIXME: this command might cause an lpmc */
879 lp->dma->scb.command = SWAP16(CUC_ABORT | RX_ABORT);
880 dma_sync_dev(dev, &(lp->dma->scb), sizeof(struct i596_scb));
883 /* wait for shutdown */
884 wait_cmd(dev, lp->dma, 1000, "i596_reset 2 timed out");
885 spin_unlock_irqrestore (&lp->lock, flags);
887 i596_cleanup_cmd(dev, lp);
890 netif_start_queue(dev);
895 static void i596_add_cmd(struct net_device *dev, struct i596_cmd *cmd)
897 struct i596_private *lp = netdev_priv(dev);
898 struct i596_dma *dma = lp->dma;
901 DEB(DEB_ADDCMD, printk(KERN_DEBUG "i596_add_cmd cmd_head %p\n",
905 cmd->command |= SWAP16(CMD_EOL | CMD_INTR);
907 cmd->b_next = I596_NULL;
908 dma_sync_dev(dev, cmd, sizeof(struct i596_cmd));
910 spin_lock_irqsave (&lp->lock, flags);
912 if (lp->cmd_head != NULL) {
913 lp->cmd_tail->v_next = cmd;
914 lp->cmd_tail->b_next = SWAP32(virt_to_dma(lp, &cmd->status));
915 dma_sync_dev(dev, lp->cmd_tail, sizeof(struct i596_cmd));
918 wait_cmd(dev, dma, 100, "i596_add_cmd timed out");
919 dma->scb.cmd = SWAP32(virt_to_dma(lp, &cmd->status));
920 dma->scb.command = SWAP16(CUC_START);
921 dma_sync_dev(dev, &(dma->scb), sizeof(struct i596_scb));
927 spin_unlock_irqrestore (&lp->lock, flags);
929 if (lp->cmd_backlog > max_cmd_backlog) {
930 unsigned long tickssofar = jiffies - lp->last_cmd;
932 if (tickssofar < ticks_limit)
936 "%s: command unit timed out, status resetting.\n",
944 static int i596_open(struct net_device *dev)
946 DEB(DEB_OPEN, printk(KERN_DEBUG
947 "%s: i596_open() irq %d.\n", dev->name, dev->irq));
949 if (init_rx_bufs(dev)) {
950 printk(KERN_ERR "%s: Failed to init rx bufs\n", dev->name);
953 if (init_i596_mem(dev)) {
954 printk(KERN_ERR "%s: Failed to init memory\n", dev->name);
955 goto out_remove_rx_bufs;
957 netif_start_queue(dev);
966 static void i596_tx_timeout (struct net_device *dev, unsigned int txqueue)
968 struct i596_private *lp = netdev_priv(dev);
970 /* Transmitter timeout, serious problems. */
971 DEB(DEB_ERRORS, printk(KERN_DEBUG
972 "%s: transmit timed out, status resetting.\n",
975 dev->stats.tx_errors++;
977 /* Try to restart the adaptor */
978 if (lp->last_restart == dev->stats.tx_packets) {
979 DEB(DEB_ERRORS, printk(KERN_DEBUG "Resetting board.\n"));
980 /* Shutdown and restart */
981 i596_reset (dev, lp);
983 /* Issue a channel attention signal */
984 DEB(DEB_ERRORS, printk(KERN_DEBUG "Kicking board.\n"));
985 lp->dma->scb.command = SWAP16(CUC_START | RX_START);
986 dma_sync_dev(dev, &(lp->dma->scb), sizeof(struct i596_scb));
988 lp->last_restart = dev->stats.tx_packets;
991 netif_trans_update(dev); /* prevent tx timeout */
992 netif_wake_queue (dev);
996 static netdev_tx_t i596_start_xmit(struct sk_buff *skb, struct net_device *dev)
998 struct i596_private *lp = netdev_priv(dev);
999 struct tx_cmd *tx_cmd;
1000 struct i596_tbd *tbd;
1001 short length = skb->len;
1003 DEB(DEB_STARTTX, printk(KERN_DEBUG
1004 "%s: i596_start_xmit(%x,%p) called\n",
1005 dev->name, skb->len, skb->data));
1007 if (length < ETH_ZLEN) {
1008 if (skb_padto(skb, ETH_ZLEN))
1009 return NETDEV_TX_OK;
1013 netif_stop_queue(dev);
1015 tx_cmd = lp->dma->tx_cmds + lp->next_tx_cmd;
1016 tbd = lp->dma->tbds + lp->next_tx_cmd;
1018 if (tx_cmd->cmd.command) {
1019 DEB(DEB_ERRORS, printk(KERN_DEBUG
1020 "%s: xmit ring full, dropping packet.\n",
1022 dev->stats.tx_dropped++;
1024 dev_kfree_skb_any(skb);
1026 if (++lp->next_tx_cmd == TX_RING_SIZE)
1027 lp->next_tx_cmd = 0;
1028 tx_cmd->tbd = SWAP32(virt_to_dma(lp, tbd));
1029 tbd->next = I596_NULL;
1031 tx_cmd->cmd.command = SWAP16(CMD_FLEX | CmdTx);
1037 tbd->size = SWAP16(EOF | length);
1039 tx_cmd->dma_addr = dma_map_single(dev->dev.parent, skb->data,
1040 skb->len, DMA_TO_DEVICE);
1041 tbd->data = SWAP32(tx_cmd->dma_addr);
1043 DEB(DEB_TXADDR, print_eth(skb->data, "tx-queued"));
1044 dma_sync_dev(dev, tx_cmd, sizeof(struct tx_cmd));
1045 dma_sync_dev(dev, tbd, sizeof(struct i596_tbd));
1046 i596_add_cmd(dev, &tx_cmd->cmd);
1048 dev->stats.tx_packets++;
1049 dev->stats.tx_bytes += length;
1052 netif_start_queue(dev);
1054 return NETDEV_TX_OK;
1057 static void print_eth(unsigned char *add, char *str)
1059 printk(KERN_DEBUG "i596 0x%p, %pM --> %pM %02X%02X, %s\n",
1060 add, add + 6, add, add[12], add[13], str);
1062 static const struct net_device_ops i596_netdev_ops = {
1063 .ndo_open = i596_open,
1064 .ndo_stop = i596_close,
1065 .ndo_start_xmit = i596_start_xmit,
1066 .ndo_set_rx_mode = set_multicast_list,
1067 .ndo_tx_timeout = i596_tx_timeout,
1068 .ndo_validate_addr = eth_validate_addr,
1069 .ndo_set_mac_address = eth_mac_addr,
1070 #ifdef CONFIG_NET_POLL_CONTROLLER
1071 .ndo_poll_controller = i596_poll_controller,
1075 static int i82596_probe(struct net_device *dev)
1077 struct i596_private *lp = netdev_priv(dev);
1080 /* This lot is ensure things have been cache line aligned. */
1081 BUILD_BUG_ON(sizeof(struct i596_rfd) != 32);
1082 BUILD_BUG_ON(sizeof(struct i596_rbd) & 31);
1083 BUILD_BUG_ON(sizeof(struct tx_cmd) & 31);
1084 BUILD_BUG_ON(sizeof(struct i596_tbd) != 32);
1086 BUILD_BUG_ON(sizeof(struct i596_dma) > 4096);
1089 if (!dev->base_addr || !dev->irq)
1092 dev->netdev_ops = &i596_netdev_ops;
1093 dev->watchdog_timeo = TX_TIMEOUT;
1095 memset(lp->dma, 0, sizeof(struct i596_dma));
1096 lp->dma->scb.command = 0;
1097 lp->dma->scb.cmd = I596_NULL;
1098 lp->dma->scb.rfd = I596_NULL;
1099 spin_lock_init(&lp->lock);
1101 dma_sync_dev(dev, lp->dma, sizeof(struct i596_dma));
1103 ret = register_netdev(dev);
1107 DEB(DEB_PROBE, printk(KERN_INFO "%s: 82596 at %#3lx, %pM IRQ %d.\n",
1108 dev->name, dev->base_addr, dev->dev_addr,
1110 DEB(DEB_INIT, printk(KERN_INFO
1111 "%s: dma at 0x%p (%d bytes), lp->scb at 0x%p\n",
1112 dev->name, lp->dma, (int)sizeof(struct i596_dma),
1118 #ifdef CONFIG_NET_POLL_CONTROLLER
1119 static void i596_poll_controller(struct net_device *dev)
1121 disable_irq(dev->irq);
1122 i596_interrupt(dev->irq, dev);
1123 enable_irq(dev->irq);
1127 static irqreturn_t i596_interrupt(int irq, void *dev_id)
1129 struct net_device *dev = dev_id;
1130 struct i596_private *lp;
1131 struct i596_dma *dma;
1132 unsigned short status, ack_cmd = 0;
1134 lp = netdev_priv(dev);
1137 spin_lock (&lp->lock);
1139 wait_cmd(dev, dma, 100, "i596 interrupt, timeout");
1140 status = SWAP16(dma->scb.status);
1142 DEB(DEB_INTS, printk(KERN_DEBUG
1143 "%s: i596 interrupt, IRQ %d, status %4.4x.\n",
1144 dev->name, dev->irq, status));
1146 ack_cmd = status & 0xf000;
1149 DEB(DEB_ERRORS, printk(KERN_DEBUG
1150 "%s: interrupt with no events\n",
1152 spin_unlock (&lp->lock);
1156 if ((status & 0x8000) || (status & 0x2000)) {
1157 struct i596_cmd *ptr;
1159 if ((status & 0x8000))
1162 "%s: i596 interrupt completed command.\n",
1164 if ((status & 0x2000))
1167 "%s: i596 interrupt command unit inactive %x.\n",
1168 dev->name, status & 0x0700));
1170 while (lp->cmd_head != NULL) {
1171 dma_sync_cpu(dev, lp->cmd_head, sizeof(struct i596_cmd));
1172 if (!(lp->cmd_head->status & SWAP16(STAT_C)))
1179 "cmd_head->status = %04x, ->command = %04x\n",
1180 SWAP16(lp->cmd_head->status),
1181 SWAP16(lp->cmd_head->command)));
1182 lp->cmd_head = ptr->v_next;
1185 switch (SWAP16(ptr->command) & 0x7) {
1188 struct tx_cmd *tx_cmd = (struct tx_cmd *) ptr;
1189 struct sk_buff *skb = tx_cmd->skb;
1191 if (ptr->status & SWAP16(STAT_OK)) {
1193 print_eth(skb->data, "tx-done"));
1195 dev->stats.tx_errors++;
1196 if (ptr->status & SWAP16(0x0020))
1197 dev->stats.collisions++;
1198 if (!(ptr->status & SWAP16(0x0040)))
1199 dev->stats.tx_heartbeat_errors++;
1200 if (ptr->status & SWAP16(0x0400))
1201 dev->stats.tx_carrier_errors++;
1202 if (ptr->status & SWAP16(0x0800))
1203 dev->stats.collisions++;
1204 if (ptr->status & SWAP16(0x1000))
1205 dev->stats.tx_aborted_errors++;
1207 dma_unmap_single(dev->dev.parent,
1209 skb->len, DMA_TO_DEVICE);
1210 dev_consume_skb_irq(skb);
1212 tx_cmd->cmd.command = 0; /* Mark free */
1217 unsigned short status = SWAP16(((struct tdr_cmd *)ptr)->status);
1219 if (status & 0x8000) {
1221 printk(KERN_DEBUG "%s: link ok.\n",
1224 if (status & 0x4000)
1226 "%s: Transceiver problem.\n",
1228 if (status & 0x2000)
1230 "%s: Termination problem.\n",
1232 if (status & 0x1000)
1234 "%s: Short circuit.\n",
1238 printk(KERN_DEBUG "%s: Time %d.\n",
1239 dev->name, status & 0x07ff));
1245 * Zap command so set_multicast_list() know
1252 ptr->b_next = I596_NULL;
1253 dma_sync_dev(dev, ptr, sizeof(struct i596_cmd));
1254 lp->last_cmd = jiffies;
1257 /* This mess is arranging that only the last of any outstanding
1258 * commands has the interrupt bit set. Should probably really
1259 * only add to the cmd queue when the CU is stopped.
1262 while ((ptr != NULL) && (ptr != lp->cmd_tail)) {
1263 struct i596_cmd *prev = ptr;
1265 ptr->command &= SWAP16(0x1fff);
1267 dma_sync_dev(dev, prev, sizeof(struct i596_cmd));
1270 if (lp->cmd_head != NULL)
1271 ack_cmd |= CUC_START;
1272 dma->scb.cmd = SWAP32(virt_to_dma(lp, &lp->cmd_head->status));
1273 dma_sync_dev(dev, &dma->scb, sizeof(struct i596_scb));
1275 if ((status & 0x1000) || (status & 0x4000)) {
1276 if ((status & 0x4000))
1279 "%s: i596 interrupt received a frame.\n",
1282 /* Only RX_START if stopped - RGH 07-07-96 */
1283 if (status & 0x1000) {
1284 if (netif_running(dev)) {
1287 "%s: i596 interrupt receive unit inactive, status 0x%x\n",
1288 dev->name, status));
1289 ack_cmd |= RX_START;
1290 dev->stats.rx_errors++;
1291 dev->stats.rx_fifo_errors++;
1292 rebuild_rx_bufs(dev);
1296 wait_cmd(dev, dma, 100, "i596 interrupt, timeout");
1297 dma->scb.command = SWAP16(ack_cmd);
1298 dma_sync_dev(dev, &dma->scb, sizeof(struct i596_scb));
1300 /* DANGER: I suspect that some kind of interrupt
1301 acknowledgement aside from acking the 82596 might be needed
1302 here... but it's running acceptably without */
1306 wait_cmd(dev, dma, 100, "i596 interrupt, exit timeout");
1307 DEB(DEB_INTS, printk(KERN_DEBUG "%s: exiting interrupt.\n", dev->name));
1309 spin_unlock (&lp->lock);
1313 static int i596_close(struct net_device *dev)
1315 struct i596_private *lp = netdev_priv(dev);
1316 unsigned long flags;
1318 netif_stop_queue(dev);
1322 "%s: Shutting down ethercard, status was %4.4x.\n",
1323 dev->name, SWAP16(lp->dma->scb.status)));
1325 spin_lock_irqsave(&lp->lock, flags);
1327 wait_cmd(dev, lp->dma, 100, "close1 timed out");
1328 lp->dma->scb.command = SWAP16(CUC_ABORT | RX_ABORT);
1329 dma_sync_dev(dev, &lp->dma->scb, sizeof(struct i596_scb));
1333 wait_cmd(dev, lp->dma, 100, "close2 timed out");
1334 spin_unlock_irqrestore(&lp->lock, flags);
1335 DEB(DEB_STRUCT, i596_display_data(dev));
1336 i596_cleanup_cmd(dev, lp);
1338 free_irq(dev->irq, dev);
1339 remove_rx_bufs(dev);
1345 * Set or clear the multicast filter for this adaptor.
1348 static void set_multicast_list(struct net_device *dev)
1350 struct i596_private *lp = netdev_priv(dev);
1351 struct i596_dma *dma = lp->dma;
1352 int config = 0, cnt;
1356 "%s: set multicast list, %d entries, promisc %s, allmulti %s\n",
1357 dev->name, netdev_mc_count(dev),
1358 dev->flags & IFF_PROMISC ? "ON" : "OFF",
1359 dev->flags & IFF_ALLMULTI ? "ON" : "OFF"));
1361 if ((dev->flags & IFF_PROMISC) &&
1362 !(dma->cf_cmd.i596_config[8] & 0x01)) {
1363 dma->cf_cmd.i596_config[8] |= 0x01;
1366 if (!(dev->flags & IFF_PROMISC) &&
1367 (dma->cf_cmd.i596_config[8] & 0x01)) {
1368 dma->cf_cmd.i596_config[8] &= ~0x01;
1371 if ((dev->flags & IFF_ALLMULTI) &&
1372 (dma->cf_cmd.i596_config[11] & 0x20)) {
1373 dma->cf_cmd.i596_config[11] &= ~0x20;
1376 if (!(dev->flags & IFF_ALLMULTI) &&
1377 !(dma->cf_cmd.i596_config[11] & 0x20)) {
1378 dma->cf_cmd.i596_config[11] |= 0x20;
1382 if (dma->cf_cmd.cmd.command)
1384 "%s: config change request already queued\n",
1387 dma->cf_cmd.cmd.command = SWAP16(CmdConfigure);
1388 dma_sync_dev(dev, &dma->cf_cmd, sizeof(struct cf_cmd));
1389 i596_add_cmd(dev, &dma->cf_cmd.cmd);
1393 cnt = netdev_mc_count(dev);
1394 if (cnt > MAX_MC_CNT) {
1396 printk(KERN_NOTICE "%s: Only %d multicast addresses supported",
1400 if (!netdev_mc_empty(dev)) {
1401 struct netdev_hw_addr *ha;
1406 cmd->cmd.command = SWAP16(CmdMulticastList);
1407 cmd->mc_cnt = SWAP16(netdev_mc_count(dev) * 6);
1409 netdev_for_each_mc_addr(ha, dev) {
1412 memcpy(cp, ha->addr, ETH_ALEN);
1416 "%s: Adding address %pM\n",
1420 dma_sync_dev(dev, &dma->mc_cmd, sizeof(struct mc_cmd));
1421 i596_add_cmd(dev, &cmd->cmd);