• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* 3c527.c: 3Com Etherlink/MC32 driver for Linux 2.4 and 2.6.
2  *
3  *	(c) Copyright 1998 Red Hat Software Inc
4  *	Written by Alan Cox.
5  *	Further debugging by Carl Drougge.
6  *      Initial SMP support by Felipe W Damasio <felipewd@terra.com.br>
7  *      Heavily modified by Richard Procter <rnp@paradise.net.nz>
8  *
9  *	Based on skeleton.c written 1993-94 by Donald Becker and ne2.c
10  *	(for the MCA stuff) written by Wim Dumon.
11  *
12  *	Thanks to 3Com for making this possible by providing me with the
13  *	documentation.
14  *
15  *	This software may be used and distributed according to the terms
16  *	of the GNU General Public License, incorporated herein by reference.
17  *
18  */
19 
20 #define DRV_NAME		"3c527"
21 #define DRV_VERSION		"0.7-SMP"
22 #define DRV_RELDATE		"2003/09/21"
23 
24 static const char *version =
25 DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " Richard Procter <rnp@paradise.net.nz>\n";
26 
27 /**
28  * DOC: Traps for the unwary
29  *
30  *	The diagram (Figure 1-1) and the POS summary disagree with the
31  *	"Interrupt Level" section in the manual.
32  *
33  *	The manual contradicts itself when describing the minimum number
34  *	buffers in the 'configure lists' command.
35  *	My card accepts a buffer config of 4/4.
36  *
37  *	Setting the SAV BP bit does not save bad packets, but
38  *	only enables RX on-card stats collection.
39  *
40  *	The documentation in places seems to miss things. In actual fact
41  *	I've always eventually found everything is documented, it just
42  *	requires careful study.
43  *
44  * DOC: Theory Of Operation
45  *
46  *	The 3com 3c527 is a 32bit MCA bus mastering adapter with a large
47  *	amount of on board intelligence that housekeeps a somewhat dumber
48  *	Intel NIC. For performance we want to keep the transmit queue deep
49  *	as the card can transmit packets while fetching others from main
50  *	memory by bus master DMA. Transmission and reception are driven by
51  *	circular buffer queues.
52  *
53  *	The mailboxes can be used for controlling how the card traverses
54  *	its buffer rings, but are used only for inital setup in this
55  *	implementation.  The exec mailbox allows a variety of commands to
56  *	be executed. Each command must complete before the next is
57  *	executed. Primarily we use the exec mailbox for controlling the
58  *	multicast lists.  We have to do a certain amount of interesting
59  *	hoop jumping as the multicast list changes can occur in interrupt
60  *	state when the card has an exec command pending. We defer such
61  *	events until the command completion interrupt.
62  *
63  *	A copy break scheme (taken from 3c59x.c) is employed whereby
64  *	received frames exceeding a configurable length are passed
65  *	directly to the higher networking layers without incuring a copy,
66  *	in what amounts to a time/space trade-off.
67  *
68  *	The card also keeps a large amount of statistical information
69  *	on-board. In a perfect world, these could be used safely at no
70  *	cost. However, lacking information to the contrary, processing
71  *	them without races would involve so much extra complexity as to
72  *	make it unworthwhile to do so. In the end, a hybrid SW/HW
73  *	implementation was made necessary --- see mc32_update_stats().
74  *
75  * DOC: Notes
76  *
77  *	It should be possible to use two or more cards, but at this stage
78  *	only by loading two copies of the same module.
79  *
80  *	The on-board 82586 NIC has trouble receiving multiple
81  *	back-to-back frames and so is likely to drop packets from fast
82  *	senders.
83 **/
84 
85 #include <linux/module.h>
86 
87 #include <linux/errno.h>
88 #include <linux/netdevice.h>
89 #include <linux/etherdevice.h>
90 #include <linux/if_ether.h>
91 #include <linux/init.h>
92 #include <linux/kernel.h>
93 #include <linux/types.h>
94 #include <linux/fcntl.h>
95 #include <linux/interrupt.h>
96 #include <linux/mca-legacy.h>
97 #include <linux/ioport.h>
98 #include <linux/in.h>
99 #include <linux/skbuff.h>
100 #include <linux/slab.h>
101 #include <linux/string.h>
102 #include <linux/wait.h>
103 #include <linux/ethtool.h>
104 #include <linux/completion.h>
105 #include <linux/bitops.h>
106 #include <linux/semaphore.h>
107 
108 #include <asm/uaccess.h>
109 #include <asm/system.h>
110 #include <asm/io.h>
111 #include <asm/dma.h>
112 
113 #include "3c527.h"
114 
115 MODULE_LICENSE("GPL");
116 
117 /*
118  * The name of the card. Is used for messages and in the requests for
119  * io regions, irqs and dma channels
120  */
121 static const char* cardname = DRV_NAME;
122 
123 /* use 0 for production, 1 for verification, >2 for debug */
124 #ifndef NET_DEBUG
125 #define NET_DEBUG 2
126 #endif
127 
128 #undef DEBUG_IRQ
129 
130 static unsigned int mc32_debug = NET_DEBUG;
131 
132 /* The number of low I/O ports used by the ethercard. */
133 #define MC32_IO_EXTENT	8
134 
135 /* As implemented, values must be a power-of-2 -- 4/8/16/32 */
136 #define TX_RING_LEN     32       /* Typically the card supports 37  */
137 #define RX_RING_LEN     8        /*     "       "        "          */
138 
139 /* Copy break point, see above for details.
140  * Setting to > 1512 effectively disables this feature.	*/
141 #define RX_COPYBREAK    200      /* Value from 3c59x.c */
142 
143 /* Issue the 82586 workaround command - this is for "busy lans", but
144  * basically means for all lans now days - has a performance (latency)
145  * cost, but best set. */
146 static const int WORKAROUND_82586=1;
147 
148 /* Pointers to buffers and their on-card records */
149 struct mc32_ring_desc
150 {
151 	volatile struct skb_header *p;
152 	struct sk_buff *skb;
153 };
154 
155 /* Information that needs to be kept for each board. */
156 struct mc32_local
157 {
158 	int slot;
159 
160 	u32 base;
161 	volatile struct mc32_mailbox *rx_box;
162 	volatile struct mc32_mailbox *tx_box;
163 	volatile struct mc32_mailbox *exec_box;
164         volatile struct mc32_stats *stats;    /* Start of on-card statistics */
165         u16 tx_chain;           /* Transmit list start offset */
166 	u16 rx_chain;           /* Receive list start offset */
167         u16 tx_len;             /* Transmit list count */
168         u16 rx_len;             /* Receive list count */
169 
170 	u16 xceiver_desired_state; /* HALTED or RUNNING */
171 	u16 cmd_nonblocking;    /* Thread is uninterested in command result */
172 	u16 mc_reload_wait;	/* A multicast load request is pending */
173 	u32 mc_list_valid;	/* True when the mclist is set */
174 
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 */
177 
178 	atomic_t tx_count;	/* buffers left */
179 	atomic_t tx_ring_head;  /* index to tx en-queue end */
180 	u16 tx_ring_tail;       /* index to tx de-queue end */
181 
182 	u16 rx_ring_tail;       /* index to rx de-queue end */
183 
184 	struct semaphore cmd_mutex;    /* Serialises issuing of execute commands */
185         struct completion execution_cmd; /* Card has completed an execute command */
186 	struct completion xceiver_cmd;   /* Card has completed a tx or rx command */
187 };
188 
189 /* The station (ethernet) address prefix, used for a sanity check. */
190 #define SA_ADDR0 0x02
191 #define SA_ADDR1 0x60
192 #define SA_ADDR2 0xAC
193 
194 struct mca_adapters_t {
195 	unsigned int	id;
196 	char		*name;
197 };
198 
199 static const struct mca_adapters_t mc32_adapters[] = {
200 	{ 0x0041, "3COM EtherLink MC/32" },
201 	{ 0x8EF5, "IBM High Performance Lan Adapter" },
202 	{ 0x0000, NULL }
203 };
204 
205 
206 /* Macros for ring index manipulations */
next_rx(u16 rx)207 static inline u16 next_rx(u16 rx) { return (rx+1)&(RX_RING_LEN-1); };
prev_rx(u16 rx)208 static inline u16 prev_rx(u16 rx) { return (rx-1)&(RX_RING_LEN-1); };
209 
next_tx(u16 tx)210 static inline u16 next_tx(u16 tx) { return (tx+1)&(TX_RING_LEN-1); };
211 
212 
213 /* Index to functions, as function prototypes. */
214 static int	mc32_probe1(struct net_device *dev, int ioaddr);
215 static int      mc32_command(struct net_device *dev, u16 cmd, void *data, int len);
216 static int	mc32_open(struct net_device *dev);
217 static void	mc32_timeout(struct net_device *dev);
218 static int	mc32_send_packet(struct sk_buff *skb, struct net_device *dev);
219 static irqreturn_t mc32_interrupt(int irq, void *dev_id);
220 static int	mc32_close(struct net_device *dev);
221 static struct	net_device_stats *mc32_get_stats(struct net_device *dev);
222 static void	mc32_set_multicast_list(struct net_device *dev);
223 static void	mc32_reset_multicast_list(struct net_device *dev);
224 static const struct ethtool_ops netdev_ethtool_ops;
225 
cleanup_card(struct net_device * dev)226 static void cleanup_card(struct net_device *dev)
227 {
228 	struct mc32_local *lp = netdev_priv(dev);
229 	unsigned slot = lp->slot;
230 	mca_mark_as_unused(slot);
231 	mca_set_adapter_name(slot, NULL);
232 	free_irq(dev->irq, dev);
233 	release_region(dev->base_addr, MC32_IO_EXTENT);
234 }
235 
236 /**
237  * mc32_probe 	-	Search for supported boards
238  * @unit: interface number to use
239  *
240  * Because MCA bus is a real bus and we can scan for cards we could do a
241  * single scan for all boards here. Right now we use the passed in device
242  * structure and scan for only one board. This needs fixing for modules
243  * in particular.
244  */
245 
mc32_probe(int unit)246 struct net_device *__init mc32_probe(int unit)
247 {
248 	struct net_device *dev = alloc_etherdev(sizeof(struct mc32_local));
249 	static int current_mca_slot = -1;
250 	int i;
251 	int err;
252 
253 	if (!dev)
254 		return ERR_PTR(-ENOMEM);
255 
256 	if (unit >= 0)
257 		sprintf(dev->name, "eth%d", unit);
258 
259 	/* Do not check any supplied i/o locations.
260 	   POS registers usually don't fail :) */
261 
262 	/* MCA cards have POS registers.
263 	   Autodetecting MCA cards is extremely simple.
264 	   Just search for the card. */
265 
266 	for(i = 0; (mc32_adapters[i].name != NULL); i++) {
267 		current_mca_slot =
268 			mca_find_unused_adapter(mc32_adapters[i].id, 0);
269 
270 		if(current_mca_slot != MCA_NOTFOUND) {
271 			if(!mc32_probe1(dev, current_mca_slot))
272 			{
273 				mca_set_adapter_name(current_mca_slot,
274 						mc32_adapters[i].name);
275 				mca_mark_as_used(current_mca_slot);
276 				err = register_netdev(dev);
277 				if (err) {
278 					cleanup_card(dev);
279 					free_netdev(dev);
280 					dev = ERR_PTR(err);
281 				}
282 				return dev;
283 			}
284 
285 		}
286 	}
287 	free_netdev(dev);
288 	return ERR_PTR(-ENODEV);
289 }
290 
291 /**
292  * mc32_probe1	-	Check a given slot for a board and test the card
293  * @dev:  Device structure to fill in
294  * @slot: The MCA bus slot being used by this card
295  *
296  * Decode the slot data and configure the card structures. Having done this we
297  * can reset the card and configure it. The card does a full self test cycle
298  * in firmware so we have to wait for it to return and post us either a
299  * failure case or some addresses we use to find the board internals.
300  */
301 
mc32_probe1(struct net_device * dev,int slot)302 static int __init mc32_probe1(struct net_device *dev, int slot)
303 {
304 	static unsigned version_printed;
305 	int i, err;
306 	u8 POS;
307 	u32 base;
308 	struct mc32_local *lp = netdev_priv(dev);
309 	static u16 mca_io_bases[]={
310 		0x7280,0x7290,
311 		0x7680,0x7690,
312 		0x7A80,0x7A90,
313 		0x7E80,0x7E90
314 	};
315 	static u32 mca_mem_bases[]={
316 		0x00C0000,
317 		0x00C4000,
318 		0x00C8000,
319 		0x00CC000,
320 		0x00D0000,
321 		0x00D4000,
322 		0x00D8000,
323 		0x00DC000
324 	};
325 	static char *failures[]={
326 		"Processor instruction",
327 		"Processor data bus",
328 		"Processor data bus",
329 		"Processor data bus",
330 		"Adapter bus",
331 		"ROM checksum",
332 		"Base RAM",
333 		"Extended RAM",
334 		"82586 internal loopback",
335 		"82586 initialisation failure",
336 		"Adapter list configuration error"
337 	};
338 
339 	/* Time to play MCA games */
340 
341 	if (mc32_debug  &&  version_printed++ == 0)
342 		printk(KERN_DEBUG "%s", version);
343 
344 	printk(KERN_INFO "%s: %s found in slot %d:", dev->name, cardname, slot);
345 
346 	POS = mca_read_stored_pos(slot, 2);
347 
348 	if(!(POS&1))
349 	{
350 		printk(" disabled.\n");
351 		return -ENODEV;
352 	}
353 
354 	/* Fill in the 'dev' fields. */
355 	dev->base_addr = mca_io_bases[(POS>>1)&7];
356 	dev->mem_start = mca_mem_bases[(POS>>4)&7];
357 
358 	POS = mca_read_stored_pos(slot, 4);
359 	if(!(POS&1))
360 	{
361 		printk("memory window disabled.\n");
362 		return -ENODEV;
363 	}
364 
365 	POS = mca_read_stored_pos(slot, 5);
366 
367 	i=(POS>>4)&3;
368 	if(i==3)
369 	{
370 		printk("invalid memory window.\n");
371 		return -ENODEV;
372 	}
373 
374 	i*=16384;
375 	i+=16384;
376 
377 	dev->mem_end=dev->mem_start + i;
378 
379 	dev->irq = ((POS>>2)&3)+9;
380 
381 	if(!request_region(dev->base_addr, MC32_IO_EXTENT, cardname))
382 	{
383 		printk("io 0x%3lX, which is busy.\n", dev->base_addr);
384 		return -EBUSY;
385 	}
386 
387 	printk("io 0x%3lX irq %d mem 0x%lX (%dK)\n",
388 		dev->base_addr, dev->irq, dev->mem_start, i/1024);
389 
390 
391 	/* We ought to set the cache line size here.. */
392 
393 
394 	/*
395 	 *	Go PROM browsing
396 	 */
397 
398 	/* Retrieve and print the ethernet address. */
399 	for (i = 0; i < 6; i++)
400 	{
401 		mca_write_pos(slot, 6, i+12);
402 		mca_write_pos(slot, 7, 0);
403 
404 		dev->dev_addr[i] = mca_read_pos(slot,3);
405 	}
406 
407 	printk("%s: Address %pM", dev->name, dev->dev_addr);
408 
409 	mca_write_pos(slot, 6, 0);
410 	mca_write_pos(slot, 7, 0);
411 
412 	POS = mca_read_stored_pos(slot, 4);
413 
414 	if(POS&2)
415 		printk(" : BNC port selected.\n");
416 	else
417 		printk(" : AUI port selected.\n");
418 
419 	POS=inb(dev->base_addr+HOST_CTRL);
420 	POS|=HOST_CTRL_ATTN|HOST_CTRL_RESET;
421 	POS&=~HOST_CTRL_INTE;
422 	outb(POS, dev->base_addr+HOST_CTRL);
423 	/* Reset adapter */
424 	udelay(100);
425 	/* Reset off */
426 	POS&=~(HOST_CTRL_ATTN|HOST_CTRL_RESET);
427 	outb(POS, dev->base_addr+HOST_CTRL);
428 
429 	udelay(300);
430 
431 	/*
432 	 *	Grab the IRQ
433 	 */
434 
435 	err = request_irq(dev->irq, &mc32_interrupt, IRQF_SHARED | IRQF_SAMPLE_RANDOM, DRV_NAME, dev);
436 	if (err) {
437 		release_region(dev->base_addr, MC32_IO_EXTENT);
438 		printk(KERN_ERR "%s: unable to get IRQ %d.\n", DRV_NAME, dev->irq);
439 		goto err_exit_ports;
440 	}
441 
442 	memset(lp, 0, sizeof(struct mc32_local));
443 	lp->slot = slot;
444 
445 	i=0;
446 
447 	base = inb(dev->base_addr);
448 
449 	while(base == 0xFF)
450 	{
451 		i++;
452 		if(i == 1000)
453 		{
454 			printk(KERN_ERR "%s: failed to boot adapter.\n", dev->name);
455 			err = -ENODEV;
456 			goto err_exit_irq;
457 		}
458 		udelay(1000);
459 		if(inb(dev->base_addr+2)&(1<<5))
460 			base = inb(dev->base_addr);
461 	}
462 
463 	if(base>0)
464 	{
465 		if(base < 0x0C)
466 			printk(KERN_ERR "%s: %s%s.\n", dev->name, failures[base-1],
467 				base<0x0A?" test failure":"");
468 		else
469 			printk(KERN_ERR "%s: unknown failure %d.\n", dev->name, base);
470 		err = -ENODEV;
471 		goto err_exit_irq;
472 	}
473 
474 	base=0;
475 	for(i=0;i<4;i++)
476 	{
477 		int n=0;
478 
479 		while(!(inb(dev->base_addr+2)&(1<<5)))
480 		{
481 			n++;
482 			udelay(50);
483 			if(n>100)
484 			{
485 				printk(KERN_ERR "%s: mailbox read fail (%d).\n", dev->name, i);
486 				err = -ENODEV;
487 				goto err_exit_irq;
488 			}
489 		}
490 
491 		base|=(inb(dev->base_addr)<<(8*i));
492 	}
493 
494 	lp->exec_box=isa_bus_to_virt(dev->mem_start+base);
495 
496 	base=lp->exec_box->data[1]<<16|lp->exec_box->data[0];
497 
498 	lp->base = dev->mem_start+base;
499 
500 	lp->rx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[2]);
501 	lp->tx_box=isa_bus_to_virt(lp->base + lp->exec_box->data[3]);
502 
503 	lp->stats = isa_bus_to_virt(lp->base + lp->exec_box->data[5]);
504 
505 	/*
506 	 *	Descriptor chains (card relative)
507 	 */
508 
509 	lp->tx_chain 		= lp->exec_box->data[8];   /* Transmit list start offset */
510 	lp->rx_chain 		= lp->exec_box->data[10];  /* Receive list start offset */
511 	lp->tx_len 		= lp->exec_box->data[9];   /* Transmit list count */
512 	lp->rx_len 		= lp->exec_box->data[11];  /* Receive list count */
513 
514 	init_MUTEX_LOCKED(&lp->cmd_mutex);
515 	init_completion(&lp->execution_cmd);
516 	init_completion(&lp->xceiver_cmd);
517 
518 	printk("%s: Firmware Rev %d. %d RX buffers, %d TX buffers. Base of 0x%08X.\n",
519 		dev->name, lp->exec_box->data[12], lp->rx_len, lp->tx_len, lp->base);
520 
521 	dev->open		= mc32_open;
522 	dev->stop		= mc32_close;
523 	dev->hard_start_xmit	= mc32_send_packet;
524 	dev->get_stats		= mc32_get_stats;
525 	dev->set_multicast_list = mc32_set_multicast_list;
526 	dev->tx_timeout		= mc32_timeout;
527 	dev->watchdog_timeo	= HZ*5;	/* Board does all the work */
528 	dev->ethtool_ops	= &netdev_ethtool_ops;
529 
530 	return 0;
531 
532 err_exit_irq:
533 	free_irq(dev->irq, dev);
534 err_exit_ports:
535 	release_region(dev->base_addr, MC32_IO_EXTENT);
536 	return err;
537 }
538 
539 
540 /**
541  *	mc32_ready_poll		-	wait until we can feed it a command
542  *	@dev:	The device to wait for
543  *
544  *	Wait until the card becomes ready to accept a command via the
545  *	command register. This tells us nothing about the completion
546  *	status of any pending commands and takes very little time at all.
547  */
548 
mc32_ready_poll(struct net_device * dev)549 static inline void mc32_ready_poll(struct net_device *dev)
550 {
551 	int ioaddr = dev->base_addr;
552 	while(!(inb(ioaddr+HOST_STATUS)&HOST_STATUS_CRR));
553 }
554 
555 
556 /**
557  *	mc32_command_nowait	-	send a command non blocking
558  *	@dev: The 3c527 to issue the command to
559  *	@cmd: The command word to write to the mailbox
560  *	@data: A data block if the command expects one
561  *	@len: Length of the data block
562  *
563  *	Send a command from interrupt state. If there is a command
564  *	currently being executed then we return an error of -1. It
565  *	simply isn't viable to wait around as commands may be
566  *	slow. This can theoretically be starved on SMP, but it's hard
567  *	to see a realistic situation.  We do not wait for the command
568  *	to complete --- we rely on the interrupt handler to tidy up
569  *	after us.
570  */
571 
mc32_command_nowait(struct net_device * dev,u16 cmd,void * data,int len)572 static int mc32_command_nowait(struct net_device *dev, u16 cmd, void *data, int len)
573 {
574 	struct mc32_local *lp = netdev_priv(dev);
575 	int ioaddr = dev->base_addr;
576 	int ret = -1;
577 
578 	if (down_trylock(&lp->cmd_mutex) == 0)
579 	{
580 		lp->cmd_nonblocking=1;
581 		lp->exec_box->mbox=0;
582 		lp->exec_box->mbox=cmd;
583 		memcpy((void *)lp->exec_box->data, data, len);
584 		barrier();	/* the memcpy forgot the volatile so be sure */
585 
586 		/* Send the command */
587 		mc32_ready_poll(dev);
588 		outb(1<<6, ioaddr+HOST_CMD);
589 
590 		ret = 0;
591 
592 		/* Interrupt handler will signal mutex on completion */
593 	}
594 
595 	return ret;
596 }
597 
598 
599 /**
600  *	mc32_command	-	send a command and sleep until completion
601  *	@dev: The 3c527 card to issue the command to
602  *	@cmd: The command word to write to the mailbox
603  *	@data: A data block if the command expects one
604  *	@len: Length of the data block
605  *
606  *	Sends exec commands in a user context. This permits us to wait around
607  *	for the replies and also to wait for the command buffer to complete
608  *	from a previous command before we execute our command. After our
609  *	command completes we will attempt any pending multicast reload
610  *	we blocked off by hogging the exec buffer.
611  *
612  *	You feed the card a command, you wait, it interrupts you get a
613  *	reply. All well and good. The complication arises because you use
614  *	commands for filter list changes which come in at bh level from things
615  *	like IPV6 group stuff.
616  */
617 
mc32_command(struct net_device * dev,u16 cmd,void * data,int len)618 static int mc32_command(struct net_device *dev, u16 cmd, void *data, int len)
619 {
620 	struct mc32_local *lp = netdev_priv(dev);
621 	int ioaddr = dev->base_addr;
622 	int ret = 0;
623 
624 	down(&lp->cmd_mutex);
625 
626 	/*
627 	 *     My Turn
628 	 */
629 
630 	lp->cmd_nonblocking=0;
631 	lp->exec_box->mbox=0;
632 	lp->exec_box->mbox=cmd;
633 	memcpy((void *)lp->exec_box->data, data, len);
634 	barrier();	/* the memcpy forgot the volatile so be sure */
635 
636 	mc32_ready_poll(dev);
637 	outb(1<<6, ioaddr+HOST_CMD);
638 
639 	wait_for_completion(&lp->execution_cmd);
640 
641 	if(lp->exec_box->mbox&(1<<13))
642 		ret = -1;
643 
644 	up(&lp->cmd_mutex);
645 
646 	/*
647 	 *	A multicast set got blocked - try it now
648          */
649 
650 	if(lp->mc_reload_wait)
651 	{
652 		mc32_reset_multicast_list(dev);
653 	}
654 
655 	return ret;
656 }
657 
658 
659 /**
660  *	mc32_start_transceiver	-	tell board to restart tx/rx
661  *	@dev: The 3c527 card to issue the command to
662  *
663  *	This may be called from the interrupt state, where it is used
664  *	to restart the rx ring if the card runs out of rx buffers.
665  *
666  * 	We must first check if it's ok to (re)start the transceiver. See
667  *      mc32_close for details.
668  */
669 
mc32_start_transceiver(struct net_device * dev)670 static void mc32_start_transceiver(struct net_device *dev) {
671 
672 	struct mc32_local *lp = netdev_priv(dev);
673 	int ioaddr = dev->base_addr;
674 
675 	/* Ignore RX overflow on device closure */
676 	if (lp->xceiver_desired_state==HALTED)
677 		return;
678 
679 	/* Give the card the offset to the post-EOL-bit RX descriptor */
680 	mc32_ready_poll(dev);
681 	lp->rx_box->mbox=0;
682 	lp->rx_box->data[0]=lp->rx_ring[prev_rx(lp->rx_ring_tail)].p->next;
683 	outb(HOST_CMD_START_RX, ioaddr+HOST_CMD);
684 
685 	mc32_ready_poll(dev);
686 	lp->tx_box->mbox=0;
687 	outb(HOST_CMD_RESTRT_TX, ioaddr+HOST_CMD);   /* card ignores this on RX restart */
688 
689 	/* We are not interrupted on start completion */
690 }
691 
692 
693 /**
694  *	mc32_halt_transceiver	-	tell board to stop tx/rx
695  *	@dev: The 3c527 card to issue the command to
696  *
697  *	We issue the commands to halt the card's transceiver. In fact,
698  *	after some experimenting we now simply tell the card to
699  *	suspend. When issuing aborts occasionally odd things happened.
700  *
701  *	We then sleep until the card has notified us that both rx and
702  *	tx have been suspended.
703  */
704 
mc32_halt_transceiver(struct net_device * dev)705 static void mc32_halt_transceiver(struct net_device *dev)
706 {
707 	struct mc32_local *lp = netdev_priv(dev);
708 	int ioaddr = dev->base_addr;
709 
710 	mc32_ready_poll(dev);
711 	lp->rx_box->mbox=0;
712 	outb(HOST_CMD_SUSPND_RX, ioaddr+HOST_CMD);
713 	wait_for_completion(&lp->xceiver_cmd);
714 
715 	mc32_ready_poll(dev);
716 	lp->tx_box->mbox=0;
717 	outb(HOST_CMD_SUSPND_TX, ioaddr+HOST_CMD);
718 	wait_for_completion(&lp->xceiver_cmd);
719 }
720 
721 
722 /**
723  *	mc32_load_rx_ring	-	load the ring of receive buffers
724  *	@dev: 3c527 to build the ring for
725  *
726  *	This initalises the on-card and driver datastructures to
727  *	the point where mc32_start_transceiver() can be called.
728  *
729  *	The card sets up the receive ring for us. We are required to use the
730  *	ring it provides, although the size of the ring is configurable.
731  *
732  * 	We allocate an sk_buff for each ring entry in turn and
733  * 	initalise its house-keeping info. At the same time, we read
734  * 	each 'next' pointer in our rx_ring array. This reduces slow
735  * 	shared-memory reads and makes it easy to access predecessor
736  * 	descriptors.
737  *
738  *	We then set the end-of-list bit for the last entry so that the
739  * 	card will know when it has run out of buffers.
740  */
741 
mc32_load_rx_ring(struct net_device * dev)742 static int mc32_load_rx_ring(struct net_device *dev)
743 {
744 	struct mc32_local *lp = netdev_priv(dev);
745 	int i;
746 	u16 rx_base;
747 	volatile struct skb_header *p;
748 
749 	rx_base=lp->rx_chain;
750 
751 	for(i=0; i<RX_RING_LEN; i++) {
752 		lp->rx_ring[i].skb=alloc_skb(1532, GFP_KERNEL);
753 		if (lp->rx_ring[i].skb==NULL) {
754 			for (;i>=0;i--)
755 				kfree_skb(lp->rx_ring[i].skb);
756 			return -ENOBUFS;
757 		}
758 		skb_reserve(lp->rx_ring[i].skb, 18);
759 
760 		p=isa_bus_to_virt(lp->base+rx_base);
761 
762 		p->control=0;
763 		p->data=isa_virt_to_bus(lp->rx_ring[i].skb->data);
764 		p->status=0;
765 		p->length=1532;
766 
767 		lp->rx_ring[i].p=p;
768 		rx_base=p->next;
769 	}
770 
771 	lp->rx_ring[i-1].p->control |= CONTROL_EOL;
772 
773 	lp->rx_ring_tail=0;
774 
775 	return 0;
776 }
777 
778 
779 /**
780  *	mc32_flush_rx_ring	-	free the ring of receive buffers
781  *	@lp: Local data of 3c527 to flush the rx ring of
782  *
783  *	Free the buffer for each ring slot. This may be called
784  *      before mc32_load_rx_ring(), eg. on error in mc32_open().
785  *      Requires rx skb pointers to point to a valid skb, or NULL.
786  */
787 
mc32_flush_rx_ring(struct net_device * dev)788 static void mc32_flush_rx_ring(struct net_device *dev)
789 {
790 	struct mc32_local *lp = netdev_priv(dev);
791 	int i;
792 
793 	for(i=0; i < RX_RING_LEN; i++)
794 	{
795 		if (lp->rx_ring[i].skb) {
796 			dev_kfree_skb(lp->rx_ring[i].skb);
797 			lp->rx_ring[i].skb = NULL;
798 		}
799 		lp->rx_ring[i].p=NULL;
800 	}
801 }
802 
803 
804 /**
805  *	mc32_load_tx_ring	-	load transmit ring
806  *	@dev: The 3c527 card to issue the command to
807  *
808  *	This sets up the host transmit data-structures.
809  *
810  *	First, we obtain from the card it's current postion in the tx
811  *	ring, so that we will know where to begin transmitting
812  *	packets.
813  *
814  * 	Then, we read the 'next' pointers from the on-card tx ring into
815  *  	our tx_ring array to reduce slow shared-mem reads. Finally, we
816  * 	intitalise the tx house keeping variables.
817  *
818  */
819 
mc32_load_tx_ring(struct net_device * dev)820 static void mc32_load_tx_ring(struct net_device *dev)
821 {
822 	struct mc32_local *lp = netdev_priv(dev);
823 	volatile struct skb_header *p;
824 	int i;
825 	u16 tx_base;
826 
827 	tx_base=lp->tx_box->data[0];
828 
829 	for(i=0 ; i<TX_RING_LEN ; i++)
830 	{
831 		p=isa_bus_to_virt(lp->base+tx_base);
832 		lp->tx_ring[i].p=p;
833 		lp->tx_ring[i].skb=NULL;
834 
835 		tx_base=p->next;
836 	}
837 
838 	/* -1 so that tx_ring_head cannot "lap" tx_ring_tail */
839 	/* see mc32_tx_ring */
840 
841 	atomic_set(&lp->tx_count, TX_RING_LEN-1);
842 	atomic_set(&lp->tx_ring_head, 0);
843 	lp->tx_ring_tail=0;
844 }
845 
846 
847 /**
848  *	mc32_flush_tx_ring 	-	free transmit ring
849  *	@lp: Local data of 3c527 to flush the tx ring of
850  *
851  *      If the ring is non-empty, zip over the it, freeing any
852  *      allocated skb_buffs.  The tx ring house-keeping variables are
853  *      then reset. Requires rx skb pointers to point to a valid skb,
854  *      or NULL.
855  */
856 
mc32_flush_tx_ring(struct net_device * dev)857 static void mc32_flush_tx_ring(struct net_device *dev)
858 {
859 	struct mc32_local *lp = netdev_priv(dev);
860 	int i;
861 
862 	for (i=0; i < TX_RING_LEN; i++)
863 	{
864 		if (lp->tx_ring[i].skb)
865 		{
866 			dev_kfree_skb(lp->tx_ring[i].skb);
867 			lp->tx_ring[i].skb = NULL;
868 		}
869 	}
870 
871 	atomic_set(&lp->tx_count, 0);
872 	atomic_set(&lp->tx_ring_head, 0);
873 	lp->tx_ring_tail=0;
874 }
875 
876 
877 /**
878  *	mc32_open	-	handle 'up' of card
879  *	@dev: device to open
880  *
881  *	The user is trying to bring the card into ready state. This requires
882  *	a brief dialogue with the card. Firstly we enable interrupts and then
883  *	'indications'. Without these enabled the card doesn't bother telling
884  *	us what it has done. This had me puzzled for a week.
885  *
886  *	We configure the number of card descriptors, then load the network
887  *	address and multicast filters. Turn on the workaround mode. This
888  *	works around a bug in the 82586 - it asks the firmware to do
889  *	so. It has a performance (latency) hit but is needed on busy
890  *	[read most] lans. We load the ring with buffers then we kick it
891  *	all off.
892  */
893 
mc32_open(struct net_device * dev)894 static int mc32_open(struct net_device *dev)
895 {
896 	int ioaddr = dev->base_addr;
897 	struct mc32_local *lp = netdev_priv(dev);
898 	u8 one=1;
899 	u8 regs;
900 	u16 descnumbuffs[2] = {TX_RING_LEN, RX_RING_LEN};
901 
902 	/*
903 	 *	Interrupts enabled
904 	 */
905 
906 	regs=inb(ioaddr+HOST_CTRL);
907 	regs|=HOST_CTRL_INTE;
908 	outb(regs, ioaddr+HOST_CTRL);
909 
910 	/*
911 	 *      Allow ourselves to issue commands
912 	 */
913 
914 	up(&lp->cmd_mutex);
915 
916 
917 	/*
918 	 *	Send the indications on command
919 	 */
920 
921 	mc32_command(dev, 4, &one, 2);
922 
923 	/*
924 	 *	Poke it to make sure it's really dead.
925 	 */
926 
927 	mc32_halt_transceiver(dev);
928 	mc32_flush_tx_ring(dev);
929 
930 	/*
931 	 *	Ask card to set up on-card descriptors to our spec
932 	 */
933 
934 	if(mc32_command(dev, 8, descnumbuffs, 4)) {
935 		printk("%s: %s rejected our buffer configuration!\n",
936 	 	       dev->name, cardname);
937 		mc32_close(dev);
938 		return -ENOBUFS;
939 	}
940 
941 	/* Report new configuration */
942 	mc32_command(dev, 6, NULL, 0);
943 
944 	lp->tx_chain 		= lp->exec_box->data[8];   /* Transmit list start offset */
945 	lp->rx_chain 		= lp->exec_box->data[10];  /* Receive list start offset */
946 	lp->tx_len 		= lp->exec_box->data[9];   /* Transmit list count */
947 	lp->rx_len 		= lp->exec_box->data[11];  /* Receive list count */
948 
949 	/* Set Network Address */
950 	mc32_command(dev, 1, dev->dev_addr, 6);
951 
952 	/* Set the filters */
953 	mc32_set_multicast_list(dev);
954 
955 	if (WORKAROUND_82586) {
956 		u16 zero_word=0;
957 		mc32_command(dev, 0x0D, &zero_word, 2);   /* 82586 bug workaround on  */
958 	}
959 
960 	mc32_load_tx_ring(dev);
961 
962 	if(mc32_load_rx_ring(dev))
963 	{
964 		mc32_close(dev);
965 		return -ENOBUFS;
966 	}
967 
968 	lp->xceiver_desired_state = RUNNING;
969 
970 	/* And finally, set the ball rolling... */
971 	mc32_start_transceiver(dev);
972 
973 	netif_start_queue(dev);
974 
975 	return 0;
976 }
977 
978 
979 /**
980  *	mc32_timeout	-	handle a timeout from the network layer
981  *	@dev: 3c527 that timed out
982  *
983  *	Handle a timeout on transmit from the 3c527. This normally means
984  *	bad things as the hardware handles cable timeouts and mess for
985  *	us.
986  *
987  */
988 
mc32_timeout(struct net_device * dev)989 static void mc32_timeout(struct net_device *dev)
990 {
991 	printk(KERN_WARNING "%s: transmit timed out?\n", dev->name);
992 	/* Try to restart the adaptor. */
993 	netif_wake_queue(dev);
994 }
995 
996 
997 /**
998  *	mc32_send_packet	-	queue a frame for transmit
999  *	@skb: buffer to transmit
1000  *	@dev: 3c527 to send it out of
1001  *
1002  *	Transmit a buffer. This normally means throwing the buffer onto
1003  *	the transmit queue as the queue is quite large. If the queue is
1004  *	full then we set tx_busy and return. Once the interrupt handler
1005  *	gets messages telling it to reclaim transmit queue entries, we will
1006  *	clear tx_busy and the kernel will start calling this again.
1007  *
1008  *      We do not disable interrupts or acquire any locks; this can
1009  *      run concurrently with mc32_tx_ring(), and the function itself
1010  *      is serialised at a higher layer. However, similarly for the
1011  *      card itself, we must ensure that we update tx_ring_head only
1012  *      after we've established a valid packet on the tx ring (and
1013  *      before we let the card "see" it, to prevent it racing with the
1014  *      irq handler).
1015  *
1016  */
1017 
mc32_send_packet(struct sk_buff * skb,struct net_device * dev)1018 static int mc32_send_packet(struct sk_buff *skb, struct net_device *dev)
1019 {
1020 	struct mc32_local *lp = netdev_priv(dev);
1021 	u32 head = atomic_read(&lp->tx_ring_head);
1022 
1023 	volatile struct skb_header *p, *np;
1024 
1025 	netif_stop_queue(dev);
1026 
1027 	if(atomic_read(&lp->tx_count)==0) {
1028 		return 1;
1029 	}
1030 
1031 	if (skb_padto(skb, ETH_ZLEN)) {
1032 		netif_wake_queue(dev);
1033 		return 0;
1034 	}
1035 
1036 	atomic_dec(&lp->tx_count);
1037 
1038 	/* P is the last sending/sent buffer as a pointer */
1039 	p=lp->tx_ring[head].p;
1040 
1041 	head = next_tx(head);
1042 
1043 	/* NP is the buffer we will be loading */
1044 	np=lp->tx_ring[head].p;
1045 
1046 	/* We will need this to flush the buffer out */
1047 	lp->tx_ring[head].skb=skb;
1048 
1049 	np->length      = unlikely(skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len;
1050 	np->data	= isa_virt_to_bus(skb->data);
1051 	np->status	= 0;
1052 	np->control     = CONTROL_EOP | CONTROL_EOL;
1053 	wmb();
1054 
1055 	/*
1056 	 * The new frame has been setup; we can now
1057 	 * let the interrupt handler and card "see" it
1058 	 */
1059 
1060 	atomic_set(&lp->tx_ring_head, head);
1061 	p->control     &= ~CONTROL_EOL;
1062 
1063 	netif_wake_queue(dev);
1064 	return 0;
1065 }
1066 
1067 
1068 /**
1069  *	mc32_update_stats	-	pull off the on board statistics
1070  *	@dev: 3c527 to service
1071  *
1072  *
1073  *	Query and reset the on-card stats. There's the small possibility
1074  *	of a race here, which would result in an underestimation of
1075  *	actual errors. As such, we'd prefer to keep all our stats
1076  *	collection in software. As a rule, we do. However it can't be
1077  *	used for rx errors and collisions as, by default, the card discards
1078  *	bad rx packets.
1079  *
1080  *	Setting the SAV BP in the rx filter command supposedly
1081  *	stops this behaviour. However, testing shows that it only seems to
1082  *	enable the collation of on-card rx statistics --- the driver
1083  *	never sees an RX descriptor with an error status set.
1084  *
1085  */
1086 
mc32_update_stats(struct net_device * dev)1087 static void mc32_update_stats(struct net_device *dev)
1088 {
1089 	struct mc32_local *lp = netdev_priv(dev);
1090 	volatile struct mc32_stats *st = lp->stats;
1091 
1092 	u32 rx_errors=0;
1093 
1094 	rx_errors+=dev->stats.rx_crc_errors   +=st->rx_crc_errors;
1095 	                                           st->rx_crc_errors=0;
1096 	rx_errors+=dev->stats.rx_fifo_errors  +=st->rx_overrun_errors;
1097 	                                           st->rx_overrun_errors=0;
1098 	rx_errors+=dev->stats.rx_frame_errors +=st->rx_alignment_errors;
1099  	                                           st->rx_alignment_errors=0;
1100 	rx_errors+=dev->stats.rx_length_errors+=st->rx_tooshort_errors;
1101 	                                           st->rx_tooshort_errors=0;
1102 	rx_errors+=dev->stats.rx_missed_errors+=st->rx_outofresource_errors;
1103 	                                           st->rx_outofresource_errors=0;
1104         dev->stats.rx_errors=rx_errors;
1105 
1106 	/* Number of packets which saw one collision */
1107 	dev->stats.collisions+=st->dataC[10];
1108 	st->dataC[10]=0;
1109 
1110 	/* Number of packets which saw 2--15 collisions */
1111 	dev->stats.collisions+=st->dataC[11];
1112 	st->dataC[11]=0;
1113 }
1114 
1115 
1116 /**
1117  *	mc32_rx_ring	-	process the receive ring
1118  *	@dev: 3c527 that needs its receive ring processing
1119  *
1120  *
1121  *	We have received one or more indications from the card that a
1122  *	receive has completed. The buffer ring thus contains dirty
1123  *	entries. We walk the ring by iterating over the circular rx_ring
1124  *	array, starting at the next dirty buffer (which happens to be the
1125  *	one we finished up at last time around).
1126  *
1127  *	For each completed packet, we will either copy it and pass it up
1128  * 	the stack or, if the packet is near MTU sized, we allocate
1129  *	another buffer and flip the old one up the stack.
1130  *
1131  *	We must succeed in keeping a buffer on the ring. If necessary we
1132  *	will toss a received packet rather than lose a ring entry. Once
1133  *	the first uncompleted descriptor is found, we move the
1134  *	End-Of-List bit to include the buffers just processed.
1135  *
1136  */
1137 
mc32_rx_ring(struct net_device * dev)1138 static void mc32_rx_ring(struct net_device *dev)
1139 {
1140 	struct mc32_local *lp = netdev_priv(dev);
1141 	volatile struct skb_header *p;
1142 	u16 rx_ring_tail;
1143 	u16 rx_old_tail;
1144 	int x=0;
1145 
1146 	rx_old_tail = rx_ring_tail = lp->rx_ring_tail;
1147 
1148 	do
1149 	{
1150 		p=lp->rx_ring[rx_ring_tail].p;
1151 
1152 		if(!(p->status & (1<<7))) { /* Not COMPLETED */
1153 			break;
1154 		}
1155 		if(p->status & (1<<6)) /* COMPLETED_OK */
1156 		{
1157 
1158 			u16 length=p->length;
1159 			struct sk_buff *skb;
1160 			struct sk_buff *newskb;
1161 
1162 			/* Try to save time by avoiding a copy on big frames */
1163 
1164 			if ((length > RX_COPYBREAK)
1165 			    && ((newskb=dev_alloc_skb(1532)) != NULL))
1166 			{
1167 				skb=lp->rx_ring[rx_ring_tail].skb;
1168 				skb_put(skb, length);
1169 
1170 				skb_reserve(newskb,18);
1171 				lp->rx_ring[rx_ring_tail].skb=newskb;
1172 				p->data=isa_virt_to_bus(newskb->data);
1173 			}
1174 			else
1175 			{
1176 				skb=dev_alloc_skb(length+2);
1177 
1178 				if(skb==NULL) {
1179 					dev->stats.rx_dropped++;
1180 					goto dropped;
1181 				}
1182 
1183 				skb_reserve(skb,2);
1184 				memcpy(skb_put(skb, length),
1185 				       lp->rx_ring[rx_ring_tail].skb->data, length);
1186 			}
1187 
1188 			skb->protocol=eth_type_trans(skb,dev);
1189  			dev->stats.rx_packets++;
1190  			dev->stats.rx_bytes += length;
1191 			netif_rx(skb);
1192 		}
1193 
1194 	dropped:
1195 		p->length = 1532;
1196 		p->status = 0;
1197 
1198 		rx_ring_tail=next_rx(rx_ring_tail);
1199 	}
1200         while(x++<48);
1201 
1202 	/* If there was actually a frame to be processed, place the EOL bit */
1203 	/* at the descriptor prior to the one to be filled next */
1204 
1205 	if (rx_ring_tail != rx_old_tail)
1206 	{
1207 		lp->rx_ring[prev_rx(rx_ring_tail)].p->control |=  CONTROL_EOL;
1208 		lp->rx_ring[prev_rx(rx_old_tail)].p->control  &= ~CONTROL_EOL;
1209 
1210 		lp->rx_ring_tail=rx_ring_tail;
1211 	}
1212 }
1213 
1214 
1215 /**
1216  *	mc32_tx_ring	-	process completed transmits
1217  *	@dev: 3c527 that needs its transmit ring processing
1218  *
1219  *
1220  *	This operates in a similar fashion to mc32_rx_ring. We iterate
1221  *	over the transmit ring. For each descriptor which has been
1222  *	processed by the card, we free its associated buffer and note
1223  *	any errors. This continues until the transmit ring is emptied
1224  *	or we reach a descriptor that hasn't yet been processed by the
1225  *	card.
1226  *
1227  */
1228 
mc32_tx_ring(struct net_device * dev)1229 static void mc32_tx_ring(struct net_device *dev)
1230 {
1231 	struct mc32_local *lp = netdev_priv(dev);
1232 	volatile struct skb_header *np;
1233 
1234 	/*
1235 	 * We rely on head==tail to mean 'queue empty'.
1236 	 * This is why lp->tx_count=TX_RING_LEN-1: in order to prevent
1237 	 * tx_ring_head wrapping to tail and confusing a 'queue empty'
1238 	 * condition with 'queue full'
1239 	 */
1240 
1241 	while (lp->tx_ring_tail != atomic_read(&lp->tx_ring_head))
1242 	{
1243 		u16 t;
1244 
1245 		t=next_tx(lp->tx_ring_tail);
1246 		np=lp->tx_ring[t].p;
1247 
1248 		if(!(np->status & (1<<7)))
1249 		{
1250 			/* Not COMPLETED */
1251 			break;
1252 		}
1253 		dev->stats.tx_packets++;
1254 		if(!(np->status & (1<<6))) /* Not COMPLETED_OK */
1255 		{
1256 			dev->stats.tx_errors++;
1257 
1258 			switch(np->status&0x0F)
1259 			{
1260 				case 1:
1261 					dev->stats.tx_aborted_errors++;
1262 					break; /* Max collisions */
1263 				case 2:
1264 					dev->stats.tx_fifo_errors++;
1265 					break;
1266 				case 3:
1267 					dev->stats.tx_carrier_errors++;
1268 					break;
1269 				case 4:
1270 					dev->stats.tx_window_errors++;
1271 					break;  /* CTS Lost */
1272 				case 5:
1273 					dev->stats.tx_aborted_errors++;
1274 					break; /* Transmit timeout */
1275 			}
1276 		}
1277 		/* Packets are sent in order - this is
1278 		    basically a FIFO queue of buffers matching
1279 		    the card ring */
1280 		dev->stats.tx_bytes+=lp->tx_ring[t].skb->len;
1281 		dev_kfree_skb_irq(lp->tx_ring[t].skb);
1282 		lp->tx_ring[t].skb=NULL;
1283 		atomic_inc(&lp->tx_count);
1284 		netif_wake_queue(dev);
1285 
1286 		lp->tx_ring_tail=t;
1287 	}
1288 
1289 }
1290 
1291 
1292 /**
1293  *	mc32_interrupt		-	handle an interrupt from a 3c527
1294  *	@irq: Interrupt number
1295  *	@dev_id: 3c527 that requires servicing
1296  *	@regs: Registers (unused)
1297  *
1298  *
1299  *	An interrupt is raised whenever the 3c527 writes to the command
1300  *	register. This register contains the message it wishes to send us
1301  *	packed into a single byte field. We keep reading status entries
1302  *	until we have processed all the control items, but simply count
1303  *	transmit and receive reports. When all reports are in we empty the
1304  *	transceiver rings as appropriate. This saves the overhead of
1305  *	multiple command requests.
1306  *
1307  *	Because MCA is level-triggered, we shouldn't miss indications.
1308  *	Therefore, we needn't ask the card to suspend interrupts within
1309  *	this handler. The card receives an implicit acknowledgment of the
1310  *	current interrupt when we read the command register.
1311  *
1312  */
1313 
mc32_interrupt(int irq,void * dev_id)1314 static irqreturn_t mc32_interrupt(int irq, void *dev_id)
1315 {
1316 	struct net_device *dev = dev_id;
1317 	struct mc32_local *lp;
1318 	int ioaddr, status, boguscount = 0;
1319 	int rx_event = 0;
1320 	int tx_event = 0;
1321 
1322 	ioaddr = dev->base_addr;
1323 	lp = netdev_priv(dev);
1324 
1325 	/* See whats cooking */
1326 
1327 	while((inb(ioaddr+HOST_STATUS)&HOST_STATUS_CWR) && boguscount++<2000)
1328 	{
1329 		status=inb(ioaddr+HOST_CMD);
1330 
1331 #ifdef DEBUG_IRQ
1332 		printk("Status TX%d RX%d EX%d OV%d BC%d\n",
1333 			(status&7), (status>>3)&7, (status>>6)&1,
1334 			(status>>7)&1, boguscount);
1335 #endif
1336 
1337 		switch(status&7)
1338 		{
1339 			case 0:
1340 				break;
1341 			case 6: /* TX fail */
1342 			case 2:	/* TX ok */
1343 				tx_event = 1;
1344 				break;
1345 			case 3: /* Halt */
1346 			case 4: /* Abort */
1347 				complete(&lp->xceiver_cmd);
1348 				break;
1349 			default:
1350 				printk("%s: strange tx ack %d\n", dev->name, status&7);
1351 		}
1352 		status>>=3;
1353 		switch(status&7)
1354 		{
1355 			case 0:
1356 				break;
1357 			case 2:	/* RX */
1358 				rx_event=1;
1359 				break;
1360 			case 3: /* Halt */
1361 			case 4: /* Abort */
1362 				complete(&lp->xceiver_cmd);
1363 				break;
1364 			case 6:
1365 				/* Out of RX buffers stat */
1366 				/* Must restart rx */
1367 				dev->stats.rx_dropped++;
1368 				mc32_rx_ring(dev);
1369 				mc32_start_transceiver(dev);
1370 				break;
1371 			default:
1372 				printk("%s: strange rx ack %d\n",
1373 					dev->name, status&7);
1374 		}
1375 		status>>=3;
1376 		if(status&1)
1377 		{
1378 			/*
1379 			 * No thread is waiting: we need to tidy
1380 			 * up ourself.
1381 			 */
1382 
1383 			if (lp->cmd_nonblocking) {
1384 				up(&lp->cmd_mutex);
1385 				if (lp->mc_reload_wait)
1386 					mc32_reset_multicast_list(dev);
1387 			}
1388 			else complete(&lp->execution_cmd);
1389 		}
1390 		if(status&2)
1391 		{
1392 			/*
1393 			 *	We get interrupted once per
1394 			 *	counter that is about to overflow.
1395 			 */
1396 
1397 			mc32_update_stats(dev);
1398 		}
1399 	}
1400 
1401 
1402 	/*
1403 	 *	Process the transmit and receive rings
1404          */
1405 
1406 	if(tx_event)
1407 		mc32_tx_ring(dev);
1408 
1409 	if(rx_event)
1410 		mc32_rx_ring(dev);
1411 
1412 	return IRQ_HANDLED;
1413 }
1414 
1415 
1416 /**
1417  *	mc32_close	-	user configuring the 3c527 down
1418  *	@dev: 3c527 card to shut down
1419  *
1420  *	The 3c527 is a bus mastering device. We must be careful how we
1421  *	shut it down. It may also be running shared interrupt so we have
1422  *	to be sure to silence it properly
1423  *
1424  *	We indicate that the card is closing to the rest of the
1425  *	driver.  Otherwise, it is possible that the card may run out
1426  *	of receive buffers and restart the transceiver while we're
1427  *	trying to close it.
1428  *
1429  *	We abort any receive and transmits going on and then wait until
1430  *	any pending exec commands have completed in other code threads.
1431  *	In theory we can't get here while that is true, in practice I am
1432  *	paranoid
1433  *
1434  *	We turn off the interrupt enable for the board to be sure it can't
1435  *	intefere with other devices.
1436  */
1437 
mc32_close(struct net_device * dev)1438 static int mc32_close(struct net_device *dev)
1439 {
1440 	struct mc32_local *lp = netdev_priv(dev);
1441 	int ioaddr = dev->base_addr;
1442 
1443 	u8 regs;
1444 	u16 one=1;
1445 
1446 	lp->xceiver_desired_state = HALTED;
1447 	netif_stop_queue(dev);
1448 
1449 	/*
1450 	 *	Send the indications on command (handy debug check)
1451 	 */
1452 
1453 	mc32_command(dev, 4, &one, 2);
1454 
1455 	/* Shut down the transceiver */
1456 
1457 	mc32_halt_transceiver(dev);
1458 
1459 	/* Ensure we issue no more commands beyond this point */
1460 
1461 	down(&lp->cmd_mutex);
1462 
1463 	/* Ok the card is now stopping */
1464 
1465 	regs=inb(ioaddr+HOST_CTRL);
1466 	regs&=~HOST_CTRL_INTE;
1467 	outb(regs, ioaddr+HOST_CTRL);
1468 
1469 	mc32_flush_rx_ring(dev);
1470 	mc32_flush_tx_ring(dev);
1471 
1472 	mc32_update_stats(dev);
1473 
1474 	return 0;
1475 }
1476 
1477 
1478 /**
1479  *	mc32_get_stats		-	hand back stats to network layer
1480  *	@dev: The 3c527 card to handle
1481  *
1482  *	We've collected all the stats we can in software already. Now
1483  *	it's time to update those kept on-card and return the lot.
1484  *
1485  */
1486 
mc32_get_stats(struct net_device * dev)1487 static struct net_device_stats *mc32_get_stats(struct net_device *dev)
1488 {
1489 	mc32_update_stats(dev);
1490 	return &dev->stats;
1491 }
1492 
1493 
1494 /**
1495  *	do_mc32_set_multicast_list	-	attempt to update multicasts
1496  *	@dev: 3c527 device to load the list on
1497  *	@retry: indicates this is not the first call.
1498  *
1499  *
1500  * 	Actually set or clear the multicast filter for this adaptor. The
1501  *	locking issues are handled by this routine. We have to track
1502  *	state as it may take multiple calls to get the command sequence
1503  *	completed. We just keep trying to schedule the loads until we
1504  *	manage to process them all.
1505  *
1506  *	num_addrs == -1	Promiscuous mode, receive all packets
1507  *
1508  *	num_addrs == 0	Normal mode, clear multicast list
1509  *
1510  *	num_addrs > 0	Multicast mode, receive normal and MC packets,
1511  *			and do best-effort filtering.
1512  *
1513  *	See mc32_update_stats() regards setting the SAV BP bit.
1514  *
1515  */
1516 
do_mc32_set_multicast_list(struct net_device * dev,int retry)1517 static void do_mc32_set_multicast_list(struct net_device *dev, int retry)
1518 {
1519 	struct mc32_local *lp = netdev_priv(dev);
1520 	u16 filt = (1<<2); /* Save Bad Packets, for stats purposes */
1521 
1522 	if ((dev->flags&IFF_PROMISC) ||
1523 	    (dev->flags&IFF_ALLMULTI) ||
1524 	    dev->mc_count > 10)
1525 		/* Enable promiscuous mode */
1526 		filt |= 1;
1527 	else if(dev->mc_count)
1528 	{
1529 		unsigned char block[62];
1530 		unsigned char *bp;
1531 		struct dev_mc_list *dmc=dev->mc_list;
1532 
1533 		int i;
1534 
1535 		if(retry==0)
1536 			lp->mc_list_valid = 0;
1537 		if(!lp->mc_list_valid)
1538 		{
1539 			block[1]=0;
1540 			block[0]=dev->mc_count;
1541 			bp=block+2;
1542 
1543 			for(i=0;i<dev->mc_count;i++)
1544 			{
1545 				memcpy(bp, dmc->dmi_addr, 6);
1546 				bp+=6;
1547 				dmc=dmc->next;
1548 			}
1549 			if(mc32_command_nowait(dev, 2, block, 2+6*dev->mc_count)==-1)
1550 			{
1551 				lp->mc_reload_wait = 1;
1552 				return;
1553 			}
1554 			lp->mc_list_valid=1;
1555 		}
1556 	}
1557 
1558 	if(mc32_command_nowait(dev, 0, &filt, 2)==-1)
1559 	{
1560 		lp->mc_reload_wait = 1;
1561 	}
1562 	else {
1563 		lp->mc_reload_wait = 0;
1564 	}
1565 }
1566 
1567 
1568 /**
1569  *	mc32_set_multicast_list	-	queue multicast list update
1570  *	@dev: The 3c527 to use
1571  *
1572  *	Commence loading the multicast list. This is called when the kernel
1573  *	changes the lists. It will override any pending list we are trying to
1574  *	load.
1575  */
1576 
mc32_set_multicast_list(struct net_device * dev)1577 static void mc32_set_multicast_list(struct net_device *dev)
1578 {
1579 	do_mc32_set_multicast_list(dev,0);
1580 }
1581 
1582 
1583 /**
1584  *	mc32_reset_multicast_list	-	reset multicast list
1585  *	@dev: The 3c527 to use
1586  *
1587  *	Attempt the next step in loading the multicast lists. If this attempt
1588  *	fails to complete then it will be scheduled and this function called
1589  *	again later from elsewhere.
1590  */
1591 
mc32_reset_multicast_list(struct net_device * dev)1592 static void mc32_reset_multicast_list(struct net_device *dev)
1593 {
1594 	do_mc32_set_multicast_list(dev,1);
1595 }
1596 
netdev_get_drvinfo(struct net_device * dev,struct ethtool_drvinfo * info)1597 static void netdev_get_drvinfo(struct net_device *dev,
1598 			       struct ethtool_drvinfo *info)
1599 {
1600 	strcpy(info->driver, DRV_NAME);
1601 	strcpy(info->version, DRV_VERSION);
1602 	sprintf(info->bus_info, "MCA 0x%lx", dev->base_addr);
1603 }
1604 
netdev_get_msglevel(struct net_device * dev)1605 static u32 netdev_get_msglevel(struct net_device *dev)
1606 {
1607 	return mc32_debug;
1608 }
1609 
netdev_set_msglevel(struct net_device * dev,u32 level)1610 static void netdev_set_msglevel(struct net_device *dev, u32 level)
1611 {
1612 	mc32_debug = level;
1613 }
1614 
1615 static const struct ethtool_ops netdev_ethtool_ops = {
1616 	.get_drvinfo		= netdev_get_drvinfo,
1617 	.get_msglevel		= netdev_get_msglevel,
1618 	.set_msglevel		= netdev_set_msglevel,
1619 };
1620 
1621 #ifdef MODULE
1622 
1623 static struct net_device *this_device;
1624 
1625 /**
1626  *	init_module		-	entry point
1627  *
1628  *	Probe and locate a 3c527 card. This really should probe and locate
1629  *	all the 3c527 cards in the machine not just one of them. Yes you can
1630  *	insmod multiple modules for now but it's a hack.
1631  */
1632 
init_module(void)1633 int __init init_module(void)
1634 {
1635 	this_device = mc32_probe(-1);
1636 	if (IS_ERR(this_device))
1637 		return PTR_ERR(this_device);
1638 	return 0;
1639 }
1640 
1641 /**
1642  *	cleanup_module	-	free resources for an unload
1643  *
1644  *	Unloading time. We release the MCA bus resources and the interrupt
1645  *	at which point everything is ready to unload. The card must be stopped
1646  *	at this point or we would not have been called. When we unload we
1647  *	leave the card stopped but not totally shut down. When the card is
1648  *	initialized it must be rebooted or the rings reloaded before any
1649  *	transmit operations are allowed to start scribbling into memory.
1650  */
1651 
cleanup_module(void)1652 void __exit cleanup_module(void)
1653 {
1654 	unregister_netdev(this_device);
1655 	cleanup_card(this_device);
1656 	free_netdev(this_device);
1657 }
1658 
1659 #endif /* MODULE */
1660