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