More meth updates.
[linux-2.6/linux-mips.git] / drivers / net / 3c527.c
blob1200c5e4b27e2ed318d4b0641f9833963542935f
1 /* 3c527.c: 3Com Etherlink/MC32 driver for Linux 2.4
3 * (c) Copyright 1998 Red Hat Software Inc
4 * Written by Alan Cox.
5 * Further debugging by Carl Drougge.
6 * Modified by Richard Procter (rnp@netlink.co.nz)
8 * Based on skeleton.c written 1993-94 by Donald Becker and ne2.c
9 * (for the MCA stuff) written by Wim Dumon.
11 * Thanks to 3Com for making this possible by providing me with the
12 * documentation.
14 * This software may be used and distributed according to the terms
15 * of the GNU General Public License, incorporated herein by reference.
19 #define DRV_NAME "3c527"
20 #define DRV_VERSION "0.6a"
21 #define DRV_RELDATE "2001/11/17"
23 static const char *version =
24 DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Richard Proctor (rnp@netlink.co.nz)\n";
26 /**
27 * DOC: Traps for the unwary
29 * The diagram (Figure 1-1) and the POS summary disagree with the
30 * "Interrupt Level" section in the manual.
32 * The manual contradicts itself when describing the minimum number
33 * buffers in the 'configure lists' command.
34 * My card accepts a buffer config of 4/4.
36 * Setting the SAV BP bit does not save bad packets, but
37 * only enables RX on-card stats collection.
39 * The documentation in places seems to miss things. In actual fact
40 * I've always eventually found everything is documented, it just
41 * requires careful study.
43 * DOC: Theory Of Operation
45 * The 3com 3c527 is a 32bit MCA bus mastering adapter with a large
46 * amount of on board intelligence that housekeeps a somewhat dumber
47 * Intel NIC. For performance we want to keep the transmit queue deep
48 * as the card can transmit packets while fetching others from main
49 * memory by bus master DMA. Transmission and reception are driven by
50 * circular buffer queues.
52 * The mailboxes can be used for controlling how the card traverses
53 * its buffer rings, but are used only for inital setup in this
54 * implementation. The exec mailbox allows a variety of commands to
55 * be executed. Each command must complete before the next is
56 * executed. Primarily we use the exec mailbox for controlling the
57 * multicast lists. We have to do a certain amount of interesting
58 * hoop jumping as the multicast list changes can occur in interrupt
59 * state when the card has an exec command pending. We defer such
60 * events until the command completion interrupt.
62 * A copy break scheme (taken from 3c59x.c) is employed whereby
63 * received frames exceeding a configurable length are passed
64 * directly to the higher networking layers without incuring a copy,
65 * in what amounts to a time/space trade-off.
67 * The card also keeps a large amount of statistical information
68 * on-board. In a perfect world, these could be used safely at no
69 * cost. However, lacking information to the contrary, processing
70 * them without races would involve so much extra complexity as to
71 * make it unworthwhile to do so. In the end, a hybrid SW/HW
72 * implementation was made necessary --- see mc32_update_stats().
74 * DOC: Notes
76 * It should be possible to use two or more cards, but at this stage
77 * only by loading two copies of the same module.
79 * The on-board 82586 NIC has trouble receiving multiple
80 * back-to-back frames and so is likely to drop packets from fast
81 * senders.
82 **/
84 #include <linux/module.h>
86 #include <linux/errno.h>
87 #include <linux/netdevice.h>
88 #include <linux/etherdevice.h>
89 #include <linux/if_ether.h>
90 #include <linux/init.h>
91 #include <linux/kernel.h>
92 #include <linux/types.h>
93 #include <linux/fcntl.h>
94 #include <linux/interrupt.h>
95 #include <linux/mca.h>
96 #include <linux/ioport.h>
97 #include <linux/in.h>
98 #include <linux/skbuff.h>
99 #include <linux/slab.h>
100 #include <linux/string.h>
101 #include <linux/wait.h>
102 #include <linux/ethtool.h>
104 #include <asm/uaccess.h>
105 #include <asm/system.h>
106 #include <asm/bitops.h>
107 #include <asm/io.h>
108 #include <asm/dma.h>
110 #include "3c527.h"
113 * The name of the card. Is used for messages and in the requests for
114 * io regions, irqs and dma channels
116 static const char* cardname = DRV_NAME;
118 /* use 0 for production, 1 for verification, >2 for debug */
119 #ifndef NET_DEBUG
120 #define NET_DEBUG 2
121 #endif
123 #undef DEBUG_IRQ
125 static unsigned int mc32_debug = NET_DEBUG;
127 /* The number of low I/O ports used by the ethercard. */
128 #define MC32_IO_EXTENT 8
130 /* As implemented, values must be a power-of-2 -- 4/8/16/32 */
131 #define TX_RING_LEN 32 /* Typically the card supports 37 */
132 #define RX_RING_LEN 8 /* " " " */
134 /* Copy break point, see above for details.
135 * Setting to > 1512 effectively disables this feature. */
136 #define RX_COPYBREAK 200 /* Value from 3c59x.c */
138 /* Issue the 82586 workaround command - this is for "busy lans", but
139 * basically means for all lans now days - has a performance (latency)
140 * cost, but best set. */
141 static const int WORKAROUND_82586=1;
143 /* Pointers to buffers and their on-card records */
145 struct mc32_ring_desc
147 volatile struct skb_header *p;
148 struct sk_buff *skb;
152 /* Information that needs to be kept for each board. */
153 struct mc32_local
155 struct net_device_stats net_stats;
156 int slot;
157 volatile struct mc32_mailbox *rx_box;
158 volatile struct mc32_mailbox *tx_box;
159 volatile struct mc32_mailbox *exec_box;
160 volatile struct mc32_stats *stats; /* Start of on-card statistics */
161 u16 tx_chain; /* Transmit list start offset */
162 u16 rx_chain; /* Receive list start offset */
163 u16 tx_len; /* Transmit list count */
164 u16 rx_len; /* Receive list count */
166 u32 base;
167 u16 exec_pending;
168 u16 mc_reload_wait; /* a multicast load request is pending */
169 u32 mc_list_valid; /* True when the mclist is set */
170 u16 xceiver_state; /* Current transceiver state. bitmapped */
171 u16 desired_state; /* The state we want the transceiver to be in */
172 atomic_t tx_count; /* buffers left */
173 wait_queue_head_t event;
175 struct mc32_ring_desc tx_ring[TX_RING_LEN]; /* Host Transmit ring */
176 struct mc32_ring_desc rx_ring[RX_RING_LEN]; /* Host Receive ring */
178 u16 tx_ring_tail; /* index to tx de-queue end */
179 u16 tx_ring_head; /* index to tx en-queue end */
181 u16 rx_ring_tail; /* index to rx de-queue end */
184 /* The station (ethernet) address prefix, used for a sanity check. */
185 #define SA_ADDR0 0x02
186 #define SA_ADDR1 0x60
187 #define SA_ADDR2 0xAC
189 struct mca_adapters_t {
190 unsigned int id;
191 char *name;
194 const struct mca_adapters_t mc32_adapters[] = {
195 { 0x0041, "3COM EtherLink MC/32" },
196 { 0x8EF5, "IBM High Performance Lan Adapter" },
197 { 0x0000, NULL }
201 /* Macros for ring index manipulations */
202 static inline u16 next_rx(u16 rx) { return (rx+1)&(RX_RING_LEN-1); };
203 static inline u16 prev_rx(u16 rx) { return (rx-1)&(RX_RING_LEN-1); };
205 static inline u16 next_tx(u16 tx) { return (tx+1)&(TX_RING_LEN-1); };
208 /* Index to functions, as function prototypes. */
209 extern int mc32_probe(struct net_device *dev);
211 static int mc32_probe1(struct net_device *dev, int ioaddr);
212 static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len);
213 static int mc32_open(struct net_device *dev);
214 static void mc32_timeout(struct net_device *dev);
215 static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev);
216 static irqreturn_t mc32_interrupt(int irq, void *dev_id, struct pt_regs *regs);
217 static int mc32_close(struct net_device *dev);
218 static struct net_device_stats *mc32_get_stats(struct net_device *dev);
219 static void mc32_set_multicast_list(struct net_device *dev);
220 static void mc32_reset_multicast_list(struct net_device *dev);
221 static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd);
224 * mc32_probe - Search for supported boards
225 * @dev: device to probe
227 * Because MCA bus is a real bus and we can scan for cards we could do a
228 * single scan for all boards here. Right now we use the passed in device
229 * structure and scan for only one board. This needs fixing for modules
230 * in particular.
233 int __init mc32_probe(struct net_device *dev)
235 static int current_mca_slot = -1;
236 int i;
237 int adapter_found = 0;
239 SET_MODULE_OWNER(dev);
241 /* Do not check any supplied i/o locations.
242 POS registers usually don't fail :) */
244 /* MCA cards have POS registers.
245 Autodetecting MCA cards is extremely simple.
246 Just search for the card. */
248 for(i = 0; (mc32_adapters[i].name != NULL) && !adapter_found; i++) {
249 current_mca_slot =
250 mca_find_unused_adapter(mc32_adapters[i].id, 0);
252 if((current_mca_slot != MCA_NOTFOUND) && !adapter_found) {
253 if(!mc32_probe1(dev, current_mca_slot))
255 mca_set_adapter_name(current_mca_slot,
256 mc32_adapters[i].name);
257 mca_mark_as_used(current_mca_slot);
258 return 0;
263 return -ENODEV;
267 * mc32_probe1 - Check a given slot for a board and test the card
268 * @dev: Device structure to fill in
269 * @slot: The MCA bus slot being used by this card
271 * Decode the slot data and configure the card structures. Having done this we
272 * can reset the card and configure it. The card does a full self test cycle
273 * in firmware so we have to wait for it to return and post us either a
274 * failure case or some addresses we use to find the board internals.
277 static int __init mc32_probe1(struct net_device *dev, int slot)
279 static unsigned version_printed;
280 int i, err;
281 u8 POS;
282 u32 base;
283 struct mc32_local *lp;
284 static u16 mca_io_bases[]={
285 0x7280,0x7290,
286 0x7680,0x7690,
287 0x7A80,0x7A90,
288 0x7E80,0x7E90
290 static u32 mca_mem_bases[]={
291 0x00C0000,
292 0x00C4000,
293 0x00C8000,
294 0x00CC000,
295 0x00D0000,
296 0x00D4000,
297 0x00D8000,
298 0x00DC000
300 static char *failures[]={
301 "Processor instruction",
302 "Processor data bus",
303 "Processor data bus",
304 "Processor data bus",
305 "Adapter bus",
306 "ROM checksum",
307 "Base RAM",
308 "Extended RAM",
309 "82586 internal loopback",
310 "82586 initialisation failure",
311 "Adapter list configuration error"
314 /* Time to play MCA games */
316 if (mc32_debug && version_printed++ == 0)
317 printk(KERN_DEBUG "%s", version);
319 printk(KERN_INFO "%s: %s found in slot %d:", dev->name, cardname, slot);
321 POS = mca_read_stored_pos(slot, 2);
323 if(!(POS&1))
325 printk(" disabled.\n");
326 return -ENODEV;
329 /* Fill in the 'dev' fields. */
330 dev->base_addr = mca_io_bases[(POS>>1)&7];
331 dev->mem_start = mca_mem_bases[(POS>>4)&7];
333 POS = mca_read_stored_pos(slot, 4);
334 if(!(POS&1))
336 printk("memory window disabled.\n");
337 return -ENODEV;
340 POS = mca_read_stored_pos(slot, 5);
342 i=(POS>>4)&3;
343 if(i==3)
345 printk("invalid memory window.\n");
346 return -ENODEV;
349 i*=16384;
350 i+=16384;
352 dev->mem_end=dev->mem_start + i;
354 dev->irq = ((POS>>2)&3)+9;
356 if(!request_region(dev->base_addr, MC32_IO_EXTENT, cardname))
358 printk("io 0x%3lX, which is busy.\n", dev->base_addr);
359 return -EBUSY;
362 printk("io 0x%3lX irq %d mem 0x%lX (%dK)\n",
363 dev->base_addr, dev->irq, dev->mem_start, i/1024);
366 /* We ought to set the cache line size here.. */
370 * Go PROM browsing
373 printk("%s: Address ", dev->name);
375 /* Retrieve and print the ethernet address. */
376 for (i = 0; i < 6; i++)
378 mca_write_pos(slot, 6, i+12);
379 mca_write_pos(slot, 7, 0);
381 printk(" %2.2x", dev->dev_addr[i] = mca_read_pos(slot,3));
384 mca_write_pos(slot, 6, 0);
385 mca_write_pos(slot, 7, 0);
387 POS = mca_read_stored_pos(slot, 4);
389 if(POS&2)
390 printk(" : BNC port selected.\n");
391 else
392 printk(" : AUI port selected.\n");
394 POS=inb(dev->base_addr+HOST_CTRL);
395 POS|=HOST_CTRL_ATTN|HOST_CTRL_RESET;
396 POS&=~HOST_CTRL_INTE;
397 outb(POS, dev->base_addr+HOST_CTRL);
398 /* Reset adapter */
399 udelay(100);
400 /* Reset off */
401 POS&=~(HOST_CTRL_ATTN|HOST_CTRL_RESET);
402 outb(POS, dev->base_addr+HOST_CTRL);
404 udelay(300);
407 * Grab the IRQ
410 i = request_irq(dev->irq, &mc32_interrupt, SA_SHIRQ, dev->name, dev);
411 if (i) {
412 release_region(dev->base_addr, MC32_IO_EXTENT);
413 printk(KERN_ERR "%s: unable to get IRQ %d.\n", dev->name, dev->irq);
414 return i;
418 /* Initialize the device structure. */
419 dev->priv = kmalloc(sizeof(struct mc32_local), GFP_KERNEL);
420 if (dev->priv == NULL)
422 err = -ENOMEM;
423 goto err_exit_irq;
426 memset(dev->priv, 0, sizeof(struct mc32_local));
427 lp = dev->priv;
428 lp->slot = slot;
430 i=0;
432 base = inb(dev->base_addr);
434 while(base == 0xFF)
436 i++;
437 if(i == 1000)
439 printk(KERN_ERR "%s: failed to boot adapter.\n", dev->name);
440 err = -ENODEV;
441 goto err_exit_free;
443 udelay(1000);
444 if(inb(dev->base_addr+2)&(1<<5))
445 base = inb(dev->base_addr);
448 if(base>0)
450 if(base < 0x0C)
451 printk(KERN_ERR "%s: %s%s.\n", dev->name, failures[base-1],
452 base<0x0A?" test failure":"");
453 else
454 printk(KERN_ERR "%s: unknown failure %d.\n", dev->name, base);
455 err = -ENODEV;
456 goto err_exit_free;
459 base=0;
460 for(i=0;i<4;i++)
462 int n=0;
464 while(!(inb(dev->base_addr+2)&(1<<5)))
466 n++;
467 udelay(50);
468 if(n>100)
470 printk(KERN_ERR "%s: mailbox read fail (%d).\n", dev->name, i);
471 err = -ENODEV;
472 goto err_exit_free;
476 base|=(inb(dev->base_addr)<<(8*i));
479 lp->exec_box=isa_bus_to_virt(dev->mem_start+base);
481 base=lp->exec_box->data[1]<<16|lp->exec_box->data[0];
483 lp->base = dev->mem_start+base;
485 lp->rx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[2]);
486 lp->tx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[3]);
488 lp->stats = isa_bus_to_virt(lp->base + lp->exec_box->data[5]);
491 * Descriptor chains (card relative)
494 lp->tx_chain = lp->exec_box->data[8]; /* Transmit list start offset */
495 lp->rx_chain = lp->exec_box->data[10]; /* Receive list start offset */
496 lp->tx_len = lp->exec_box->data[9]; /* Transmit list count */
497 lp->rx_len = lp->exec_box->data[11]; /* Receive list count */
499 init_waitqueue_head(&lp->event);
501 printk("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.\n",
502 dev->name, lp->exec_box->data[12], lp->rx_len, lp->tx_len, lp->base);
504 dev->open = mc32_open;
505 dev->stop = mc32_close;
506 dev->hard_start_xmit = mc32_send_packet;
507 dev->get_stats = mc32_get_stats;
508 dev->set_multicast_list = mc32_set_multicast_list;
509 dev->tx_timeout = mc32_timeout;
510 dev->watchdog_timeo = HZ*5; /* Board does all the work */
511 dev->do_ioctl = netdev_ioctl;
513 lp->xceiver_state = HALTED;
515 lp->tx_ring_tail=lp->tx_ring_head=0;
517 /* Fill in the fields of the device structure with ethernet values. */
518 ether_setup(dev);
520 return 0;
522 err_exit_free:
523 kfree(dev->priv);
524 err_exit_irq:
525 free_irq(dev->irq, dev);
526 release_region(dev->base_addr, MC32_IO_EXTENT);
527 return err;
532 * mc32_ready_poll - wait until we can feed it a command
533 * @dev: The device to wait for
535 * Wait until the card becomes ready to accept a command via the
536 * command register. This tells us nothing about the completion
537 * status of any pending commands and takes very little time at all.
540 static void mc32_ready_poll(struct net_device *dev)
542 int ioaddr = dev->base_addr;
543 while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
548 * mc32_command_nowait - send a command non blocking
549 * @dev: The 3c527 to issue the command to
550 * @cmd: The command word to write to the mailbox
551 * @data: A data block if the command expects one
552 * @len: Length of the data block
554 * Send a command from interrupt state. If there is a command
555 * currently being executed then we return an error of -1. It simply
556 * isn't viable to wait around as commands may be slow. Providing we
557 * get in, we busy wait for the board to become ready to accept the
558 * command and issue it. We do not wait for the command to complete
559 * --- the card will interrupt us when it's done.
562 static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len)
564 struct mc32_local *lp = (struct mc32_local *)dev->priv;
565 int ioaddr = dev->base_addr;
567 if(lp->exec_pending)
568 return -1;
570 lp->exec_pending=3;
571 lp->exec_box->mbox=0;
572 lp->exec_box->mbox=cmd;
573 memcpy((void *)lp->exec_box->data, data, len);
574 barrier(); /* the memcpy forgot the volatile so be sure */
576 /* Send the command */
577 while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
578 outb(1<<6, ioaddr+HOST_CMD);
579 return 0;
584 * mc32_command - send a command and sleep until completion
585 * @dev: The 3c527 card to issue the command to
586 * @cmd: The command word to write to the mailbox
587 * @data: A data block if the command expects one
588 * @len: Length of the data block
590 * Sends exec commands in a user context. This permits us to wait around
591 * for the replies and also to wait for the command buffer to complete
592 * from a previous command before we execute our command. After our
593 * command completes we will complete any pending multicast reload
594 * we blocked off by hogging the exec buffer.
596 * You feed the card a command, you wait, it interrupts you get a
597 * reply. All well and good. The complication arises because you use
598 * commands for filter list changes which come in at bh level from things
599 * like IPV6 group stuff.
601 * We have a simple state machine
603 * 0 - nothing issued
605 * 1 - command issued, wait reply
607 * 2 - reply waiting - reader then goes to state 0
609 * 3 - command issued, trash reply. In which case the irq
610 * takes it back to state 0
614 static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len)
616 struct mc32_local *lp = (struct mc32_local *)dev->priv;
617 int ioaddr = dev->base_addr;
618 unsigned long flags;
619 int ret = 0;
622 * Wait for a command
625 save_flags(flags);
626 cli();
628 while(lp->exec_pending)
629 sleep_on(&lp->event);
632 * Issue mine
635 lp->exec_pending=1;
637 restore_flags(flags);
639 lp->exec_box->mbox=0;
640 lp->exec_box->mbox=cmd;
641 memcpy((void *)lp->exec_box->data, data, len);
642 barrier(); /* the memcpy forgot the volatile so be sure */
644 /* Send the command */
645 while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
646 outb(1<<6, ioaddr+HOST_CMD);
648 save_flags(flags);
649 cli();
651 while(lp->exec_pending!=2)
652 sleep_on(&lp->event);
653 lp->exec_pending=0;
654 restore_flags(flags);
656 if(lp->exec_box->mbox&(1<<13))
657 ret = -1;
660 * A multicast set got blocked - do it now
663 if(lp->mc_reload_wait)
665 mc32_reset_multicast_list(dev);
668 return ret;
673 * mc32_start_transceiver - tell board to restart tx/rx
674 * @dev: The 3c527 card to issue the command to
676 * This may be called from the interrupt state, where it is used
677 * to restart the rx ring if the card runs out of rx buffers.
679 * First, we check if it's ok to start the transceiver. We then show
680 * the card where to start in the rx ring and issue the
681 * commands to start reception and transmission. We don't wait
682 * around for these to complete.
685 static void mc32_start_transceiver(struct net_device *dev) {
687 struct mc32_local *lp = (struct mc32_local *)dev->priv;
688 int ioaddr = dev->base_addr;
690 /* Ignore RX overflow on device closure */
691 if (lp->desired_state==HALTED)
692 return;
694 mc32_ready_poll(dev);
696 lp->tx_box->mbox=0;
697 lp->rx_box->mbox=0;
699 /* Give the card the offset to the post-EOL-bit RX descriptor */
700 lp->rx_box->data[0]=lp->rx_ring[prev_rx(lp->rx_ring_tail)].p->next;
702 outb(HOST_CMD_START_RX, ioaddr+HOST_CMD);
704 mc32_ready_poll(dev);
705 outb(HOST_CMD_RESTRT_TX, ioaddr+HOST_CMD); /* card ignores this on RX restart */
707 /* We are not interrupted on start completion */
708 lp->xceiver_state=RUNNING;
713 * mc32_halt_transceiver - tell board to stop tx/rx
714 * @dev: The 3c527 card to issue the command to
716 * We issue the commands to halt the card's transceiver. In fact,
717 * after some experimenting we now simply tell the card to
718 * suspend. When issuing aborts occasionally odd things happened.
720 * We then sleep until the card has notified us that both rx and
721 * tx have been suspended.
724 static void mc32_halt_transceiver(struct net_device *dev)
726 struct mc32_local *lp = (struct mc32_local *)dev->priv;
727 int ioaddr = dev->base_addr;
728 unsigned long flags;
730 mc32_ready_poll(dev);
732 lp->tx_box->mbox=0;
733 lp->rx_box->mbox=0;
735 outb(HOST_CMD_SUSPND_RX, ioaddr+HOST_CMD);
736 mc32_ready_poll(dev);
737 outb(HOST_CMD_SUSPND_TX, ioaddr+HOST_CMD);
739 save_flags(flags);
740 cli();
742 while(lp->xceiver_state!=HALTED)
743 sleep_on(&lp->event);
745 restore_flags(flags);
750 * mc32_load_rx_ring - load the ring of receive buffers
751 * @dev: 3c527 to build the ring for
753 * This initalises the on-card and driver datastructures to
754 * the point where mc32_start_transceiver() can be called.
756 * The card sets up the receive ring for us. We are required to use the
757 * ring it provides although we can change the size of the ring.
759 * We allocate an sk_buff for each ring entry in turn and
760 * initalise its house-keeping info. At the same time, we read
761 * each 'next' pointer in our rx_ring array. This reduces slow
762 * shared-memory reads and makes it easy to access predecessor
763 * descriptors.
765 * We then set the end-of-list bit for the last entry so that the
766 * card will know when it has run out of buffers.
769 static int mc32_load_rx_ring(struct net_device *dev)
771 struct mc32_local *lp = (struct mc32_local *)dev->priv;
772 int i;
773 u16 rx_base;
774 volatile struct skb_header *p;
776 rx_base=lp->rx_chain;
778 for(i=0;i<RX_RING_LEN;i++)
780 lp->rx_ring[i].skb=alloc_skb(1532, GFP_KERNEL);
781 skb_reserve(lp->rx_ring[i].skb, 18);
783 if(lp->rx_ring[i].skb==NULL)
785 for(;i>=0;i--)
786 kfree_skb(lp->rx_ring[i].skb);
787 return -ENOBUFS;
790 p=isa_bus_to_virt(lp->base+rx_base);
792 p->control=0;
793 p->data=isa_virt_to_bus(lp->rx_ring[i].skb->data);
794 p->status=0;
795 p->length=1532;
797 lp->rx_ring[i].p=p;
798 rx_base=p->next;
801 lp->rx_ring[i-1].p->control |= CONTROL_EOL;
803 lp->rx_ring_tail=0;
805 return 0;
810 * mc32_flush_rx_ring - free the ring of receive buffers
811 * @lp: Local data of 3c527 to flush the rx ring of
813 * Free the buffer for each ring slot. This may be called
814 * before mc32_load_rx_ring(), eg. on error in mc32_open().
817 static void mc32_flush_rx_ring(struct net_device *dev)
819 struct mc32_local *lp = (struct mc32_local *)dev->priv;
821 struct sk_buff *skb;
822 int i;
824 for(i=0; i < RX_RING_LEN; i++)
826 skb = lp->rx_ring[i].skb;
827 if (skb!=NULL) {
828 kfree_skb(skb);
829 skb=NULL;
831 lp->rx_ring[i].p=NULL;
837 * mc32_load_tx_ring - load transmit ring
838 * @dev: The 3c527 card to issue the command to
840 * This sets up the host transmit data-structures.
842 * First, we obtain from the card it's current postion in the tx
843 * ring, so that we will know where to begin transmitting
844 * packets.
846 * Then, we read the 'next' pointers from the on-card tx ring into
847 * our tx_ring array to reduce slow shared-mem reads. Finally, we
848 * intitalise the tx house keeping variables.
852 static void mc32_load_tx_ring(struct net_device *dev)
854 struct mc32_local *lp = (struct mc32_local *)dev->priv;
855 volatile struct skb_header *p;
856 int i;
857 u16 tx_base;
859 tx_base=lp->tx_box->data[0];
861 for(i=0;i<lp->tx_len;i++)
863 p=isa_bus_to_virt(lp->base+tx_base);
864 lp->tx_ring[i].p=p;
865 lp->tx_ring[i].skb=NULL;
867 tx_base=p->next;
870 /* -1 so that tx_ring_head cannot "lap" tx_ring_tail, */
871 /* which would be bad news for mc32_tx_ring as cur. implemented */
873 atomic_set(&lp->tx_count, TX_RING_LEN-1);
874 lp->tx_ring_head=lp->tx_ring_tail=0;
879 * mc32_flush_tx_ring - free transmit ring
880 * @lp: Local data of 3c527 to flush the tx ring of
882 * We have to consider two cases here. We want to free the pending
883 * buffers only. If the ring buffer head is past the start then the
884 * ring segment we wish to free wraps through zero. The tx ring
885 * house-keeping variables are then reset.
888 static void mc32_flush_tx_ring(struct net_device *dev)
890 struct mc32_local *lp = (struct mc32_local *)dev->priv;
892 if(lp->tx_ring_tail!=lp->tx_ring_head)
894 int i;
895 if(lp->tx_ring_tail < lp->tx_ring_head)
897 for(i=lp->tx_ring_tail;i<lp->tx_ring_head;i++)
899 dev_kfree_skb(lp->tx_ring[i].skb);
900 lp->tx_ring[i].skb=NULL;
901 lp->tx_ring[i].p=NULL;
904 else
906 for(i=lp->tx_ring_tail; i<TX_RING_LEN; i++)
908 dev_kfree_skb(lp->tx_ring[i].skb);
909 lp->tx_ring[i].skb=NULL;
910 lp->tx_ring[i].p=NULL;
912 for(i=0; i<lp->tx_ring_head; i++)
914 dev_kfree_skb(lp->tx_ring[i].skb);
915 lp->tx_ring[i].skb=NULL;
916 lp->tx_ring[i].p=NULL;
921 atomic_set(&lp->tx_count, 0);
922 lp->tx_ring_tail=lp->tx_ring_head=0;
927 * mc32_open - handle 'up' of card
928 * @dev: device to open
930 * The user is trying to bring the card into ready state. This requires
931 * a brief dialogue with the card. Firstly we enable interrupts and then
932 * 'indications'. Without these enabled the card doesn't bother telling
933 * us what it has done. This had me puzzled for a week.
935 * We configure the number of card descriptors, then load the network
936 * address and multicast filters. Turn on the workaround mode. This
937 * works around a bug in the 82586 - it asks the firmware to do
938 * so. It has a performance (latency) hit but is needed on busy
939 * [read most] lans. We load the ring with buffers then we kick it
940 * all off.
943 static int mc32_open(struct net_device *dev)
945 int ioaddr = dev->base_addr;
946 struct mc32_local *lp = (struct mc32_local *)dev->priv;
947 u8 one=1;
948 u8 regs;
949 u16 descnumbuffs[2] = {TX_RING_LEN, RX_RING_LEN};
952 * Interrupts enabled
955 regs=inb(ioaddr+HOST_CTRL);
956 regs|=HOST_CTRL_INTE;
957 outb(regs, ioaddr+HOST_CTRL);
961 * Send the indications on command
964 mc32_command(dev, 4, &one, 2);
967 * Poke it to make sure it's really dead.
970 mc32_halt_transceiver(dev);
971 mc32_flush_tx_ring(dev);
974 * Ask card to set up on-card descriptors to our spec
977 if(mc32_command(dev, 8, descnumbuffs, 4)) {
978 printk("%s: %s rejected our buffer configuration!\n",
979 dev->name, cardname);
980 mc32_close(dev);
981 return -ENOBUFS;
984 /* Report new configuration */
985 mc32_command(dev, 6, NULL, 0);
987 lp->tx_chain = lp->exec_box->data[8]; /* Transmit list start offset */
988 lp->rx_chain = lp->exec_box->data[10]; /* Receive list start offset */
989 lp->tx_len = lp->exec_box->data[9]; /* Transmit list count */
990 lp->rx_len = lp->exec_box->data[11]; /* Receive list count */
992 /* Set Network Address */
993 mc32_command(dev, 1, dev->dev_addr, 6);
995 /* Set the filters */
996 mc32_set_multicast_list(dev);
998 if (WORKAROUND_82586) {
999 u16 zero_word=0;
1000 mc32_command(dev, 0x0D, &zero_word, 2); /* 82586 bug workaround on */
1003 mc32_load_tx_ring(dev);
1005 if(mc32_load_rx_ring(dev))
1007 mc32_close(dev);
1008 return -ENOBUFS;
1011 lp->desired_state = RUNNING;
1013 /* And finally, set the ball rolling... */
1014 mc32_start_transceiver(dev);
1016 netif_start_queue(dev);
1018 return 0;
1023 * mc32_timeout - handle a timeout from the network layer
1024 * @dev: 3c527 that timed out
1026 * Handle a timeout on transmit from the 3c527. This normally means
1027 * bad things as the hardware handles cable timeouts and mess for
1028 * us.
1032 static void mc32_timeout(struct net_device *dev)
1034 printk(KERN_WARNING "%s: transmit timed out?\n", dev->name);
1035 /* Try to restart the adaptor. */
1036 netif_wake_queue(dev);
1041 * mc32_send_packet - queue a frame for transmit
1042 * @skb: buffer to transmit
1043 * @dev: 3c527 to send it out of
1045 * Transmit a buffer. This normally means throwing the buffer onto
1046 * the transmit queue as the queue is quite large. If the queue is
1047 * full then we set tx_busy and return. Once the interrupt handler
1048 * gets messages telling it to reclaim transmit queue entries we will
1049 * clear tx_busy and the kernel will start calling this again.
1051 * We use cli rather than spinlocks. Since I have no access to an SMP
1052 * MCA machine I don't plan to change it. It is probably the top
1053 * performance hit for this driver on SMP however.
1056 static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
1058 struct mc32_local *lp = (struct mc32_local *)dev->priv;
1059 unsigned long flags;
1061 volatile struct skb_header *p, *np;
1063 netif_stop_queue(dev);
1065 save_flags(flags);
1066 cli();
1068 if(atomic_read(&lp->tx_count)==0)
1070 restore_flags(flags);
1071 return 1;
1074 atomic_dec(&lp->tx_count);
1076 /* P is the last sending/sent buffer as a pointer */
1077 p=lp->tx_ring[lp->tx_ring_head].p;
1079 lp->tx_ring_head=next_tx(lp->tx_ring_head);
1081 /* NP is the buffer we will be loading */
1082 np=lp->tx_ring[lp->tx_ring_head].p;
1084 /* We will need this to flush the buffer out */
1085 lp->tx_ring[lp->tx_ring_head].skb=skb;
1087 if (skb->len < ETH_ZLEN) {
1088 skb = skb_padto(skb, ETH_ZLEN);
1089 if (skb == NULL)
1090 goto out;
1092 np->length = (skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len;
1094 np->data = isa_virt_to_bus(skb->data);
1095 np->status = 0;
1096 np->control = CONTROL_EOP | CONTROL_EOL;
1097 wmb();
1099 p->control &= ~CONTROL_EOL; /* Clear EOL on p */
1100 out:
1101 restore_flags(flags);
1103 netif_wake_queue(dev);
1104 return 0;
1109 * mc32_update_stats - pull off the on board statistics
1110 * @dev: 3c527 to service
1113 * Query and reset the on-card stats. There's the small possibility
1114 * of a race here, which would result in an underestimation of
1115 * actual errors. As such, we'd prefer to keep all our stats
1116 * collection in software. As a rule, we do. However it can't be
1117 * used for rx errors and collisions as, by default, the card discards
1118 * bad rx packets.
1120 * Setting the SAV BP in the rx filter command supposedly
1121 * stops this behaviour. However, testing shows that it only seems to
1122 * enable the collation of on-card rx statistics --- the driver
1123 * never sees an RX descriptor with an error status set.
1127 static void mc32_update_stats(struct net_device *dev)
1129 struct mc32_local *lp = (struct mc32_local *)dev->priv;
1130 volatile struct mc32_stats *st = lp->stats;
1132 u32 rx_errors=0;
1134 rx_errors+=lp->net_stats.rx_crc_errors +=st->rx_crc_errors;
1135 st->rx_crc_errors=0;
1136 rx_errors+=lp->net_stats.rx_fifo_errors +=st->rx_overrun_errors;
1137 st->rx_overrun_errors=0;
1138 rx_errors+=lp->net_stats.rx_frame_errors +=st->rx_alignment_errors;
1139 st->rx_alignment_errors=0;
1140 rx_errors+=lp->net_stats.rx_length_errors+=st->rx_tooshort_errors;
1141 st->rx_tooshort_errors=0;
1142 rx_errors+=lp->net_stats.rx_missed_errors+=st->rx_outofresource_errors;
1143 st->rx_outofresource_errors=0;
1144 lp->net_stats.rx_errors=rx_errors;
1146 /* Number of packets which saw one collision */
1147 lp->net_stats.collisions+=st->dataC[10];
1148 st->dataC[10]=0;
1150 /* Number of packets which saw 2--15 collisions */
1151 lp->net_stats.collisions+=st->dataC[11];
1152 st->dataC[11]=0;
1157 * mc32_rx_ring - process the receive ring
1158 * @dev: 3c527 that needs its receive ring processing
1161 * We have received one or more indications from the card that a
1162 * receive has completed. The buffer ring thus contains dirty
1163 * entries. We walk the ring by iterating over the circular rx_ring
1164 * array, starting at the next dirty buffer (which happens to be the
1165 * one we finished up at last time around).
1167 * For each completed packet, we will either copy it and pass it up
1168 * the stack or, if the packet is near MTU sized, we allocate
1169 * another buffer and flip the old one up the stack.
1171 * We must succeed in keeping a buffer on the ring. If necessary we
1172 * will toss a received packet rather than lose a ring entry. Once
1173 * the first uncompleted descriptor is found, we move the
1174 * End-Of-List bit to include the buffers just processed.
1178 static void mc32_rx_ring(struct net_device *dev)
1180 struct mc32_local *lp=dev->priv;
1181 volatile struct skb_header *p;
1182 u16 rx_ring_tail = lp->rx_ring_tail;
1183 u16 rx_old_tail = rx_ring_tail;
1185 int x=0;
1189 p=lp->rx_ring[rx_ring_tail].p;
1191 if(!(p->status & (1<<7))) { /* Not COMPLETED */
1192 break;
1194 if(p->status & (1<<6)) /* COMPLETED_OK */
1197 u16 length=p->length;
1198 struct sk_buff *skb;
1199 struct sk_buff *newskb;
1201 /* Try to save time by avoiding a copy on big frames */
1203 if ((length > RX_COPYBREAK)
1204 && ((newskb=dev_alloc_skb(1532)) != NULL))
1206 skb=lp->rx_ring[rx_ring_tail].skb;
1207 skb_put(skb, length);
1209 skb_reserve(newskb,18);
1210 lp->rx_ring[rx_ring_tail].skb=newskb;
1211 p->data=isa_virt_to_bus(newskb->data);
1213 else
1215 skb=dev_alloc_skb(length+2);
1217 if(skb==NULL) {
1218 lp->net_stats.rx_dropped++;
1219 goto dropped;
1222 skb_reserve(skb,2);
1223 memcpy(skb_put(skb, length),
1224 lp->rx_ring[rx_ring_tail].skb->data, length);
1227 skb->protocol=eth_type_trans(skb,dev);
1228 skb->dev=dev;
1229 dev->last_rx = jiffies;
1230 lp->net_stats.rx_packets++;
1231 lp->net_stats.rx_bytes += length;
1232 netif_rx(skb);
1235 dropped:
1236 p->length = 1532;
1237 p->status = 0;
1239 rx_ring_tail=next_rx(rx_ring_tail);
1241 while(x++<48);
1243 /* If there was actually a frame to be processed, place the EOL bit */
1244 /* at the descriptor prior to the one to be filled next */
1246 if (rx_ring_tail != rx_old_tail)
1248 lp->rx_ring[prev_rx(rx_ring_tail)].p->control |= CONTROL_EOL;
1249 lp->rx_ring[prev_rx(rx_old_tail)].p->control &= ~CONTROL_EOL;
1251 lp->rx_ring_tail=rx_ring_tail;
1257 * mc32_tx_ring - process completed transmits
1258 * @dev: 3c527 that needs its transmit ring processing
1261 * This operates in a similar fashion to mc32_rx_ring. We iterate
1262 * over the transmit ring. For each descriptor which has been
1263 * processed by the card, we free its associated buffer and note
1264 * any errors. This continues until the transmit ring is emptied
1265 * or we reach a descriptor that hasn't yet been processed by the
1266 * card.
1270 static void mc32_tx_ring(struct net_device *dev)
1272 struct mc32_local *lp=(struct mc32_local *)dev->priv;
1273 volatile struct skb_header *np;
1275 /* NB: lp->tx_count=TX_RING_LEN-1 so that tx_ring_head cannot "lap" tail here */
1277 while (lp->tx_ring_tail != lp->tx_ring_head)
1279 u16 t;
1281 t=next_tx(lp->tx_ring_tail);
1282 np=lp->tx_ring[t].p;
1284 if(!(np->status & (1<<7)))
1286 /* Not COMPLETED */
1287 break;
1289 lp->net_stats.tx_packets++;
1290 if(!(np->status & (1<<6))) /* Not COMPLETED_OK */
1292 lp->net_stats.tx_errors++;
1294 switch(np->status&0x0F)
1296 case 1:
1297 lp->net_stats.tx_aborted_errors++;
1298 break; /* Max collisions */
1299 case 2:
1300 lp->net_stats.tx_fifo_errors++;
1301 break;
1302 case 3:
1303 lp->net_stats.tx_carrier_errors++;
1304 break;
1305 case 4:
1306 lp->net_stats.tx_window_errors++;
1307 break; /* CTS Lost */
1308 case 5:
1309 lp->net_stats.tx_aborted_errors++;
1310 break; /* Transmit timeout */
1313 /* Packets are sent in order - this is
1314 basically a FIFO queue of buffers matching
1315 the card ring */
1316 lp->net_stats.tx_bytes+=lp->tx_ring[t].skb->len;
1317 dev_kfree_skb_irq(lp->tx_ring[t].skb);
1318 lp->tx_ring[t].skb=NULL;
1319 atomic_inc(&lp->tx_count);
1320 netif_wake_queue(dev);
1322 lp->tx_ring_tail=t;
1329 * mc32_interrupt - handle an interrupt from a 3c527
1330 * @irq: Interrupt number
1331 * @dev_id: 3c527 that requires servicing
1332 * @regs: Registers (unused)
1335 * An interrupt is raised whenever the 3c527 writes to the command
1336 * register. This register contains the message it wishes to send us
1337 * packed into a single byte field. We keep reading status entries
1338 * until we have processed all the control items, but simply count
1339 * transmit and receive reports. When all reports are in we empty the
1340 * transceiver rings as appropriate. This saves the overhead of
1341 * multiple command requests.
1343 * Because MCA is level-triggered, we shouldn't miss indications.
1344 * Therefore, we needn't ask the card to suspend interrupts within
1345 * this handler. The card receives an implicit acknowledgment of the
1346 * current interrupt when we read the command register.
1350 static irqreturn_t mc32_interrupt(int irq, void *dev_id, struct pt_regs * regs)
1352 struct net_device *dev = dev_id;
1353 struct mc32_local *lp;
1354 int ioaddr, status, boguscount = 0;
1355 int rx_event = 0;
1356 int tx_event = 0;
1358 if (dev == NULL) {
1359 printk(KERN_WARNING "%s: irq %d for unknown device.\n", cardname, irq);
1360 return IRQ_NONE;
1363 ioaddr = dev->base_addr;
1364 lp = (struct mc32_local *)dev->priv;
1366 /* See whats cooking */
1368 while((inb(ioaddr+HOST_STATUS)&HOST_STATUS_CWR) && boguscount++<2000)
1370 status=inb(ioaddr+HOST_CMD);
1372 #ifdef DEBUG_IRQ
1373 printk("Status TX%d RX%d EX%d OV%d BC%d\n",
1374 (status&7), (status>>3)&7, (status>>6)&1,
1375 (status>>7)&1, boguscount);
1376 #endif
1378 switch(status&7)
1380 case 0:
1381 break;
1382 case 6: /* TX fail */
1383 case 2: /* TX ok */
1384 tx_event = 1;
1385 break;
1386 case 3: /* Halt */
1387 case 4: /* Abort */
1388 lp->xceiver_state |= TX_HALTED;
1389 wake_up(&lp->event);
1390 break;
1391 default:
1392 printk("%s: strange tx ack %d\n", dev->name, status&7);
1394 status>>=3;
1395 switch(status&7)
1397 case 0:
1398 break;
1399 case 2: /* RX */
1400 rx_event=1;
1401 break;
1402 case 3: /* Halt */
1403 case 4: /* Abort */
1404 lp->xceiver_state |= RX_HALTED;
1405 wake_up(&lp->event);
1406 break;
1407 case 6:
1408 /* Out of RX buffers stat */
1409 /* Must restart rx */
1410 lp->net_stats.rx_dropped++;
1411 mc32_rx_ring(dev);
1412 mc32_start_transceiver(dev);
1413 break;
1414 default:
1415 printk("%s: strange rx ack %d\n",
1416 dev->name, status&7);
1418 status>>=3;
1419 if(status&1)
1422 /* 0=no 1=yes 2=replied, get cmd, 3 = wait reply & dump it */
1424 if(lp->exec_pending!=3) {
1425 lp->exec_pending=2;
1426 wake_up(&lp->event);
1428 else
1430 lp->exec_pending=0;
1432 /* A new multicast set may have been
1433 blocked while the old one was
1434 running. If so, do it now. */
1436 if (lp->mc_reload_wait)
1437 mc32_reset_multicast_list(dev);
1438 else
1439 wake_up(&lp->event);
1442 if(status&2)
1445 * We get interrupted once per
1446 * counter that is about to overflow.
1449 mc32_update_stats(dev);
1455 * Process the transmit and receive rings
1458 if(tx_event)
1459 mc32_tx_ring(dev);
1461 if(rx_event)
1462 mc32_rx_ring(dev);
1464 return IRQ_HANDLED;
1469 * mc32_close - user configuring the 3c527 down
1470 * @dev: 3c527 card to shut down
1472 * The 3c527 is a bus mastering device. We must be careful how we
1473 * shut it down. It may also be running shared interrupt so we have
1474 * to be sure to silence it properly
1476 * We indicate that the card is closing to the rest of the
1477 * driver. Otherwise, it is possible that the card may run out
1478 * of receive buffers and restart the transceiver while we're
1479 * trying to close it.
1481 * We abort any receive and transmits going on and then wait until
1482 * any pending exec commands have completed in other code threads.
1483 * In theory we can't get here while that is true, in practice I am
1484 * paranoid
1486 * We turn off the interrupt enable for the board to be sure it can't
1487 * intefere with other devices.
1490 static int mc32_close(struct net_device *dev)
1492 struct mc32_local *lp = (struct mc32_local *)dev->priv;
1494 int ioaddr = dev->base_addr;
1495 u8 regs;
1496 u16 one=1;
1498 lp->desired_state = HALTED;
1499 netif_stop_queue(dev);
1502 * Send the indications on command (handy debug check)
1505 mc32_command(dev, 4, &one, 2);
1507 /* Shut down the transceiver */
1509 mc32_halt_transceiver(dev);
1511 /* Catch any waiting commands */
1513 while(lp->exec_pending==1)
1514 sleep_on(&lp->event);
1516 /* Ok the card is now stopping */
1518 regs=inb(ioaddr+HOST_CTRL);
1519 regs&=~HOST_CTRL_INTE;
1520 outb(regs, ioaddr+HOST_CTRL);
1522 mc32_flush_rx_ring(dev);
1523 mc32_flush_tx_ring(dev);
1525 mc32_update_stats(dev);
1527 return 0;
1532 * mc32_get_stats - hand back stats to network layer
1533 * @dev: The 3c527 card to handle
1535 * We've collected all the stats we can in software already. Now
1536 * it's time to update those kept on-card and return the lot.
1540 static struct net_device_stats *mc32_get_stats(struct net_device *dev)
1542 struct mc32_local *lp;
1544 mc32_update_stats(dev);
1546 lp = (struct mc32_local *)dev->priv;
1548 return &lp->net_stats;
1553 * do_mc32_set_multicast_list - attempt to update multicasts
1554 * @dev: 3c527 device to load the list on
1555 * @retry: indicates this is not the first call.
1558 * Actually set or clear the multicast filter for this adaptor. The
1559 * locking issues are handled by this routine. We have to track
1560 * state as it may take multiple calls to get the command sequence
1561 * completed. We just keep trying to schedule the loads until we
1562 * manage to process them all.
1564 * num_addrs == -1 Promiscuous mode, receive all packets
1566 * num_addrs == 0 Normal mode, clear multicast list
1568 * num_addrs > 0 Multicast mode, receive normal and MC packets,
1569 * and do best-effort filtering.
1571 * See mc32_update_stats() regards setting the SAV BP bit.
1575 static void do_mc32_set_multicast_list(struct net_device *dev, int retry)
1577 struct mc32_local *lp = (struct mc32_local *)dev->priv;
1578 u16 filt = (1<<2); /* Save Bad Packets, for stats purposes */
1580 if (dev->flags&IFF_PROMISC)
1581 /* Enable promiscuous mode */
1582 filt |= 1;
1583 else if((dev->flags&IFF_ALLMULTI) || dev->mc_count > 10)
1585 dev->flags|=IFF_PROMISC;
1586 filt |= 1;
1588 else if(dev->mc_count)
1590 unsigned char block[62];
1591 unsigned char *bp;
1592 struct dev_mc_list *dmc=dev->mc_list;
1594 int i;
1596 if(retry==0)
1597 lp->mc_list_valid = 0;
1598 if(!lp->mc_list_valid)
1600 block[1]=0;
1601 block[0]=dev->mc_count;
1602 bp=block+2;
1604 for(i=0;i<dev->mc_count;i++)
1606 memcpy(bp, dmc->dmi_addr, 6);
1607 bp+=6;
1608 dmc=dmc->next;
1610 if(mc32_command_nowait(dev, 2, block, 2+6*dev->mc_count)==-1)
1612 lp->mc_reload_wait = 1;
1613 return;
1615 lp->mc_list_valid=1;
1619 if(mc32_command_nowait(dev, 0, &filt, 2)==-1)
1621 lp->mc_reload_wait = 1;
1623 else {
1624 lp->mc_reload_wait = 0;
1630 * mc32_set_multicast_list - queue multicast list update
1631 * @dev: The 3c527 to use
1633 * Commence loading the multicast list. This is called when the kernel
1634 * changes the lists. It will override any pending list we are trying to
1635 * load.
1638 static void mc32_set_multicast_list(struct net_device *dev)
1640 do_mc32_set_multicast_list(dev,0);
1645 * mc32_reset_multicast_list - reset multicast list
1646 * @dev: The 3c527 to use
1648 * Attempt the next step in loading the multicast lists. If this attempt
1649 * fails to complete then it will be scheduled and this function called
1650 * again later from elsewhere.
1653 static void mc32_reset_multicast_list(struct net_device *dev)
1655 do_mc32_set_multicast_list(dev,1);
1659 * netdev_ethtool_ioctl: Handle network interface SIOCETHTOOL ioctls
1660 * @dev: network interface on which out-of-band action is to be performed
1661 * @useraddr: userspace address to which data is to be read and returned
1663 * Process the various commands of the SIOCETHTOOL interface.
1666 static int netdev_ethtool_ioctl (struct net_device *dev, void *useraddr)
1668 u32 ethcmd;
1670 /* dev_ioctl() in ../../net/core/dev.c has already checked
1671 capable(CAP_NET_ADMIN), so don't bother with that here. */
1673 if (get_user(ethcmd, (u32 *)useraddr))
1674 return -EFAULT;
1676 switch (ethcmd) {
1678 case ETHTOOL_GDRVINFO: {
1679 struct ethtool_drvinfo info = { ETHTOOL_GDRVINFO };
1680 strcpy (info.driver, DRV_NAME);
1681 strcpy (info.version, DRV_VERSION);
1682 sprintf(info.bus_info, "MCA 0x%lx", dev->base_addr);
1683 if (copy_to_user (useraddr, &info, sizeof (info)))
1684 return -EFAULT;
1685 return 0;
1688 /* get message-level */
1689 case ETHTOOL_GMSGLVL: {
1690 struct ethtool_value edata = {ETHTOOL_GMSGLVL};
1691 edata.data = mc32_debug;
1692 if (copy_to_user(useraddr, &edata, sizeof(edata)))
1693 return -EFAULT;
1694 return 0;
1696 /* set message-level */
1697 case ETHTOOL_SMSGLVL: {
1698 struct ethtool_value edata;
1699 if (copy_from_user(&edata, useraddr, sizeof(edata)))
1700 return -EFAULT;
1701 mc32_debug = edata.data;
1702 return 0;
1705 default:
1706 break;
1709 return -EOPNOTSUPP;
1713 * netdev_ioctl: Handle network interface ioctls
1714 * @dev: network interface on which out-of-band action is to be performed
1715 * @rq: user request data
1716 * @cmd: command issued by user
1718 * Process the various out-of-band ioctls passed to this driver.
1721 static int netdev_ioctl (struct net_device *dev, struct ifreq *rq, int cmd)
1723 int rc = 0;
1725 switch (cmd) {
1726 case SIOCETHTOOL:
1727 rc = netdev_ethtool_ioctl(dev, (void *) rq->ifr_data);
1728 break;
1730 default:
1731 rc = -EOPNOTSUPP;
1732 break;
1735 return rc;
1738 #ifdef MODULE
1740 static struct net_device this_device;
1743 * init_module - entry point
1745 * Probe and locate a 3c527 card. This really should probe and locate
1746 * all the 3c527 cards in the machine not just one of them. Yes you can
1747 * insmod multiple modules for now but it's a hack.
1750 int init_module(void)
1752 int result;
1754 this_device.init = mc32_probe;
1755 if ((result = register_netdev(&this_device)) != 0)
1756 return result;
1758 return 0;
1762 * cleanup_module - free resources for an unload
1764 * Unloading time. We release the MCA bus resources and the interrupt
1765 * at which point everything is ready to unload. The card must be stopped
1766 * at this point or we would not have been called. When we unload we
1767 * leave the card stopped but not totally shut down. When the card is
1768 * initialized it must be rebooted or the rings reloaded before any
1769 * transmit operations are allowed to start scribbling into memory.
1772 void cleanup_module(void)
1774 int slot;
1776 unregister_netdev(&this_device);
1779 * If we don't do this, we can't re-insmod it later.
1782 if (this_device.priv)
1784 struct mc32_local *lp=this_device.priv;
1785 slot = lp->slot;
1786 mca_mark_as_unused(slot);
1787 mca_set_adapter_name(slot, NULL);
1788 kfree(this_device.priv);
1790 free_irq(this_device.irq, &this_device);
1791 release_region(this_device.base_addr, MC32_IO_EXTENT);
1794 #endif /* MODULE */