1 /* typhoon.c: A Linux Ethernet device driver for 3Com 3CR990 family of NICs */
2 /*
3 	Written 2002-2004 by David Dillow <dave@thedillows.org>
4 	Based on code written 1998-2000 by Donald Becker <becker@scyld.com> and
5 	Linux 2.2.x driver by David P. McLean <davidpmclean@yahoo.com>.
6 
7 	This software may be used and distributed according to the terms of
8 	the GNU General Public License (GPL), incorporated herein by reference.
9 	Drivers based on or derived from this code fall under the GPL and must
10 	retain the authorship, copyright and license notice.  This file is not
11 	a complete program and may only be used when the entire operating
12 	system is licensed under the GPL.
13 
14 	This software is available on a public web site. It may enable
15 	cryptographic capabilities of the 3Com hardware, and may be
16 	exported from the United States under License Exception "TSU"
17 	pursuant to 15 C.F.R. Section 740.13(e).
18 
19 	This work was funded by the National Library of Medicine under
20 	the Department of Energy project number 0274DD06D1 and NLM project
21 	number Y1-LM-2015-01.
22 
23 	This driver is designed for the 3Com 3CR990 Family of cards with the
24 	3XP Processor. It has been tested on x86 and sparc64.
25 
26 	KNOWN ISSUES:
27 	*) Cannot DMA Rx packets to a 2 byte aligned address. Also firmware
28 		issue. Hopefully 3Com will fix it.
29 	*) Waiting for a command response takes 8ms due to non-preemptable
30 		polling. Only significant for getting stats and creating
31 		SAs, but an ugly wart never the less.
32 
33 	TODO:
34 	*) Doesn't do IPSEC offloading. Yet. Keep yer pants on, it's coming.
35 	*) Add more support for ethtool (especially for NIC stats)
36 	*) Allow disabling of RX checksum offloading
37 	*) Fix MAC changing to work while the interface is up
38 		(Need to put commands on the TX ring, which changes
39 		the locking)
40 	*) Add in FCS to {rx,tx}_bytes, since the hardware doesn't. See
41 		http://oss.sgi.com/cgi-bin/mesg.cgi?a=netdev&i=20031215152211.7003fe8e.rddunlap%40osdl.org
42 */
43 
44 /* Set the copy breakpoint for the copy-only-tiny-frames scheme.
45  * Setting to > 1518 effectively disables this feature.
46  */
47 static int rx_copybreak = 200;
48 
49 /* Should we use MMIO or Port IO?
50  * 0: Port IO
51  * 1: MMIO
52  * 2: Try MMIO, fallback to Port IO
53  */
54 static unsigned int use_mmio = 2;
55 
56 /* end user-configurable values */
57 
58 /* Maximum number of multicast addresses to filter (vs. rx-all-multicast).
59  */
60 static const int multicast_filter_limit = 32;
61 
62 /* Operational parameters that are set at compile time. */
63 
64 /* Keep the ring sizes a power of two for compile efficiency.
65  * The compiler will convert <unsigned>'%'<2^N> into a bit mask.
66  * Making the Tx ring too large decreases the effectiveness of channel
67  * bonding and packet priority.
68  * There are no ill effects from too-large receive rings.
69  *
70  * We don't currently use the Hi Tx ring so, don't make it very big.
71  *
72  * Beware that if we start using the Hi Tx ring, we will need to change
73  * typhoon_num_free_tx() and typhoon_tx_complete() to account for that.
74  */
75 #define TXHI_ENTRIES		2
76 #define TXLO_ENTRIES		128
77 #define RX_ENTRIES		32
78 #define COMMAND_ENTRIES		16
79 #define RESPONSE_ENTRIES	32
80 
81 #define COMMAND_RING_SIZE	(COMMAND_ENTRIES * sizeof(struct cmd_desc))
82 #define RESPONSE_RING_SIZE	(RESPONSE_ENTRIES * sizeof(struct resp_desc))
83 
84 /* The 3XP will preload and remove 64 entries from the free buffer
85  * list, and we need one entry to keep the ring from wrapping, so
86  * to keep this a power of two, we use 128 entries.
87  */
88 #define RXFREE_ENTRIES		128
89 #define RXENT_ENTRIES		(RXFREE_ENTRIES - 1)
90 
91 /* Operational parameters that usually are not changed. */
92 
93 /* Time in jiffies before concluding the transmitter is hung. */
94 #define TX_TIMEOUT  (2*HZ)
95 
96 #define PKT_BUF_SZ		1536
97 #define FIRMWARE_NAME		"3com/typhoon.bin"
98 
99 #define pr_fmt(fmt)		KBUILD_MODNAME " " fmt
100 
101 #include <linux/module.h>
102 #include <linux/kernel.h>
103 #include <linux/sched.h>
104 #include <linux/string.h>
105 #include <linux/timer.h>
106 #include <linux/errno.h>
107 #include <linux/ioport.h>
108 #include <linux/interrupt.h>
109 #include <linux/pci.h>
110 #include <linux/netdevice.h>
111 #include <linux/etherdevice.h>
112 #include <linux/skbuff.h>
113 #include <linux/mm.h>
114 #include <linux/init.h>
115 #include <linux/delay.h>
116 #include <linux/ethtool.h>
117 #include <linux/if_vlan.h>
118 #include <linux/crc32.h>
119 #include <linux/bitops.h>
120 #include <asm/processor.h>
121 #include <asm/io.h>
122 #include <linux/uaccess.h>
123 #include <linux/in6.h>
124 #include <linux/dma-mapping.h>
125 #include <linux/firmware.h>
126 
127 #include "typhoon.h"
128 
129 MODULE_AUTHOR("David Dillow <dave@thedillows.org>");
130 MODULE_VERSION("1.0");
131 MODULE_LICENSE("GPL");
132 MODULE_FIRMWARE(FIRMWARE_NAME);
133 MODULE_DESCRIPTION("3Com Typhoon Family (3C990, 3CR990, and variants)");
134 MODULE_PARM_DESC(rx_copybreak, "Packets smaller than this are copied and "
135 			       "the buffer given back to the NIC. Default "
136 			       "is 200.");
137 MODULE_PARM_DESC(use_mmio, "Use MMIO (1) or PIO(0) to access the NIC. "
138 			   "Default is to try MMIO and fallback to PIO.");
139 module_param(rx_copybreak, int, 0);
140 module_param(use_mmio, int, 0);
141 
142 #if defined(NETIF_F_TSO) && MAX_SKB_FRAGS > 32
143 #warning Typhoon only supports 32 entries in its SG list for TSO, disabling TSO
144 #undef NETIF_F_TSO
145 #endif
146 
147 #if TXLO_ENTRIES <= (2 * MAX_SKB_FRAGS)
148 #error TX ring too small!
149 #endif
150 
151 struct typhoon_card_info {
152 	const char *name;
153 	const int capabilities;
154 };
155 
156 #define TYPHOON_CRYPTO_NONE		0x00
157 #define TYPHOON_CRYPTO_DES		0x01
158 #define TYPHOON_CRYPTO_3DES		0x02
159 #define	TYPHOON_CRYPTO_VARIABLE		0x04
160 #define TYPHOON_FIBER			0x08
161 #define TYPHOON_WAKEUP_NEEDS_RESET	0x10
162 
163 enum typhoon_cards {
164 	TYPHOON_TX = 0, TYPHOON_TX95, TYPHOON_TX97, TYPHOON_SVR,
165 	TYPHOON_SVR95, TYPHOON_SVR97, TYPHOON_TXM, TYPHOON_BSVR,
166 	TYPHOON_FX95, TYPHOON_FX97, TYPHOON_FX95SVR, TYPHOON_FX97SVR,
167 	TYPHOON_FXM,
168 };
169 
170 /* directly indexed by enum typhoon_cards, above */
171 static struct typhoon_card_info typhoon_card_info[] = {
172 	{ "3Com Typhoon (3C990-TX)",
173 		TYPHOON_CRYPTO_NONE},
174 	{ "3Com Typhoon (3CR990-TX-95)",
175 		TYPHOON_CRYPTO_DES},
176 	{ "3Com Typhoon (3CR990-TX-97)",
177 	 	TYPHOON_CRYPTO_DES | TYPHOON_CRYPTO_3DES},
178 	{ "3Com Typhoon (3C990SVR)",
179 		TYPHOON_CRYPTO_NONE},
180 	{ "3Com Typhoon (3CR990SVR95)",
181 		TYPHOON_CRYPTO_DES},
182 	{ "3Com Typhoon (3CR990SVR97)",
183 	 	TYPHOON_CRYPTO_DES | TYPHOON_CRYPTO_3DES},
184 	{ "3Com Typhoon2 (3C990B-TX-M)",
185 		TYPHOON_CRYPTO_VARIABLE},
186 	{ "3Com Typhoon2 (3C990BSVR)",
187 		TYPHOON_CRYPTO_VARIABLE},
188 	{ "3Com Typhoon (3CR990-FX-95)",
189 		TYPHOON_CRYPTO_DES | TYPHOON_FIBER},
190 	{ "3Com Typhoon (3CR990-FX-97)",
191 	 	TYPHOON_CRYPTO_DES | TYPHOON_CRYPTO_3DES | TYPHOON_FIBER},
192 	{ "3Com Typhoon (3CR990-FX-95 Server)",
193 	 	TYPHOON_CRYPTO_DES | TYPHOON_FIBER},
194 	{ "3Com Typhoon (3CR990-FX-97 Server)",
195 	 	TYPHOON_CRYPTO_DES | TYPHOON_CRYPTO_3DES | TYPHOON_FIBER},
196 	{ "3Com Typhoon2 (3C990B-FX-97)",
197 		TYPHOON_CRYPTO_VARIABLE | TYPHOON_FIBER},
198 };
199 
200 /* Notes on the new subsystem numbering scheme:
201  * bits 0-1 indicate crypto capabilities: (0) variable, (1) DES, or (2) 3DES
202  * bit 4 indicates if this card has secured firmware (we don't support it)
203  * bit 8 indicates if this is a (0) copper or (1) fiber card
204  * bits 12-16 indicate card type: (0) client and (1) server
205  */
206 static const struct pci_device_id typhoon_pci_tbl[] = {
207 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990,
208 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0,TYPHOON_TX },
209 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990_TX_95,
210 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPHOON_TX95 },
211 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990_TX_97,
212 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPHOON_TX97 },
213 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990B,
214 	  PCI_ANY_ID, 0x1000, 0, 0, TYPHOON_TXM },
215 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990B,
216 	  PCI_ANY_ID, 0x1102, 0, 0, TYPHOON_FXM },
217 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990B,
218 	  PCI_ANY_ID, 0x2000, 0, 0, TYPHOON_BSVR },
219 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990_FX,
220 	  PCI_ANY_ID, 0x1101, 0, 0, TYPHOON_FX95 },
221 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990_FX,
222 	  PCI_ANY_ID, 0x1102, 0, 0, TYPHOON_FX97 },
223 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990_FX,
224 	  PCI_ANY_ID, 0x2101, 0, 0, TYPHOON_FX95SVR },
225 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990_FX,
226 	  PCI_ANY_ID, 0x2102, 0, 0, TYPHOON_FX97SVR },
227 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990SVR95,
228 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPHOON_SVR95 },
229 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990SVR97,
230 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPHOON_SVR97 },
231 	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3CR990SVR,
232 	  PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPHOON_SVR },
233 	{ 0, }
234 };
235 MODULE_DEVICE_TABLE(pci, typhoon_pci_tbl);
236 
237 /* Define the shared memory area
238  * Align everything the 3XP will normally be using.
239  * We'll need to move/align txHi if we start using that ring.
240  */
241 #define __3xp_aligned	____cacheline_aligned
242 struct typhoon_shared {
243 	struct typhoon_interface	iface;
244 	struct typhoon_indexes		indexes			__3xp_aligned;
245 	struct tx_desc			txLo[TXLO_ENTRIES] 	__3xp_aligned;
246 	struct rx_desc			rxLo[RX_ENTRIES]	__3xp_aligned;
247 	struct rx_desc			rxHi[RX_ENTRIES]	__3xp_aligned;
248 	struct cmd_desc			cmd[COMMAND_ENTRIES]	__3xp_aligned;
249 	struct resp_desc		resp[RESPONSE_ENTRIES]	__3xp_aligned;
250 	struct rx_free			rxBuff[RXFREE_ENTRIES]	__3xp_aligned;
251 	u32				zeroWord;
252 	struct tx_desc			txHi[TXHI_ENTRIES];
253 } __packed;
254 
255 struct rxbuff_ent {
256 	struct sk_buff *skb;
257 	dma_addr_t	dma_addr;
258 };
259 
260 struct typhoon {
261 	/* Tx cache line section */
262 	struct transmit_ring 	txLoRing	____cacheline_aligned;
263 	struct pci_dev *	tx_pdev;
264 	void __iomem		*tx_ioaddr;
265 	u32			txlo_dma_addr;
266 
267 	/* Irq/Rx cache line section */
268 	void __iomem		*ioaddr		____cacheline_aligned;
269 	struct typhoon_indexes *indexes;
270 	u8			awaiting_resp;
271 	u8			duplex;
272 	u8			speed;
273 	u8			card_state;
274 	struct basic_ring	rxLoRing;
275 	struct pci_dev *	pdev;
276 	struct net_device *	dev;
277 	struct napi_struct	napi;
278 	struct basic_ring	rxHiRing;
279 	struct basic_ring	rxBuffRing;
280 	struct rxbuff_ent	rxbuffers[RXENT_ENTRIES];
281 
282 	/* general section */
283 	spinlock_t		command_lock	____cacheline_aligned;
284 	struct basic_ring	cmdRing;
285 	struct basic_ring	respRing;
286 	struct net_device_stats	stats_saved;
287 	struct typhoon_shared *	shared;
288 	dma_addr_t		shared_dma;
289 	__le16			xcvr_select;
290 	__le16			wol_events;
291 	__le32			offload;
292 
293 	/* unused stuff (future use) */
294 	int			capabilities;
295 	struct transmit_ring 	txHiRing;
296 };
297 
298 enum completion_wait_values {
299 	NoWait = 0, WaitNoSleep, WaitSleep,
300 };
301 
302 /* These are the values for the typhoon.card_state variable.
303  * These determine where the statistics will come from in get_stats().
304  * The sleep image does not support the statistics we need.
305  */
306 enum state_values {
307 	Sleeping = 0, Running,
308 };
309 
310 /* PCI writes are not guaranteed to be posted in order, but outstanding writes
311  * cannot pass a read, so this forces current writes to post.
312  */
313 #define typhoon_post_pci_writes(x) \
314 	do { if(likely(use_mmio)) ioread32(x+TYPHOON_REG_HEARTBEAT); } while(0)
315 
316 /* We'll wait up to six seconds for a reset, and half a second normally.
317  */
318 #define TYPHOON_UDELAY			50
319 #define TYPHOON_RESET_TIMEOUT_SLEEP	(6 * HZ)
320 #define TYPHOON_RESET_TIMEOUT_NOSLEEP	((6 * 1000000) / TYPHOON_UDELAY)
321 #define TYPHOON_WAIT_TIMEOUT		((1000000 / 2) / TYPHOON_UDELAY)
322 
323 #if defined(NETIF_F_TSO)
324 #define skb_tso_size(x)		(skb_shinfo(x)->gso_size)
325 #define TSO_NUM_DESCRIPTORS	2
326 #define TSO_OFFLOAD_ON		TYPHOON_OFFLOAD_TCP_SEGMENT
327 #else
328 #define NETIF_F_TSO 		0
329 #define skb_tso_size(x) 	0
330 #define TSO_NUM_DESCRIPTORS	0
331 #define TSO_OFFLOAD_ON		0
332 #endif
333 
334 static inline void
335 typhoon_inc_index(u32 *index, const int count, const int num_entries)
336 {
337 	/* Increment a ring index -- we can use this for all rings execept
338 	 * the Rx rings, as they use different size descriptors
339 	 * otherwise, everything is the same size as a cmd_desc
340 	 */
341 	*index += count * sizeof(struct cmd_desc);
342 	*index %= num_entries * sizeof(struct cmd_desc);
343 }
344 
345 static inline void
346 typhoon_inc_cmd_index(u32 *index, const int count)
347 {
348 	typhoon_inc_index(index, count, COMMAND_ENTRIES);
349 }
350 
351 static inline void
352 typhoon_inc_resp_index(u32 *index, const int count)
353 {
354 	typhoon_inc_index(index, count, RESPONSE_ENTRIES);
355 }
356 
357 static inline void
358 typhoon_inc_rxfree_index(u32 *index, const int count)
359 {
360 	typhoon_inc_index(index, count, RXFREE_ENTRIES);
361 }
362 
363 static inline void
364 typhoon_inc_tx_index(u32 *index, const int count)
365 {
366 	/* if we start using the Hi Tx ring, this needs updating */
367 	typhoon_inc_index(index, count, TXLO_ENTRIES);
368 }
369 
370 static inline void
371 typhoon_inc_rx_index(u32 *index, const int count)
372 {
373 	/* sizeof(struct rx_desc) != sizeof(struct cmd_desc) */
374 	*index += count * sizeof(struct rx_desc);
375 	*index %= RX_ENTRIES * sizeof(struct rx_desc);
376 }
377 
378 static int
379 typhoon_reset(void __iomem *ioaddr, int wait_type)
380 {
381 	int i, err = 0;
382 	int timeout;
383 
384 	if(wait_type == WaitNoSleep)
385 		timeout = TYPHOON_RESET_TIMEOUT_NOSLEEP;
386 	else
387 		timeout = TYPHOON_RESET_TIMEOUT_SLEEP;
388 
389 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_MASK);
390 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_STATUS);
391 
392 	iowrite32(TYPHOON_RESET_ALL, ioaddr + TYPHOON_REG_SOFT_RESET);
393 	typhoon_post_pci_writes(ioaddr);
394 	udelay(1);
395 	iowrite32(TYPHOON_RESET_NONE, ioaddr + TYPHOON_REG_SOFT_RESET);
396 
397 	if(wait_type != NoWait) {
398 		for(i = 0; i < timeout; i++) {
399 			if(ioread32(ioaddr + TYPHOON_REG_STATUS) ==
400 			   TYPHOON_STATUS_WAITING_FOR_HOST)
401 				goto out;
402 
403 			if(wait_type == WaitSleep)
404 				schedule_timeout_uninterruptible(1);
405 			else
406 				udelay(TYPHOON_UDELAY);
407 		}
408 
409 		err = -ETIMEDOUT;
410 	}
411 
412 out:
413 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_MASK);
414 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_STATUS);
415 
416 	/* The 3XP seems to need a little extra time to complete the load
417 	 * of the sleep image before we can reliably boot it. Failure to
418 	 * do this occasionally results in a hung adapter after boot in
419 	 * typhoon_init_one() while trying to read the MAC address or
420 	 * putting the card to sleep. 3Com's driver waits 5ms, but
421 	 * that seems to be overkill. However, if we can sleep, we might
422 	 * as well give it that much time. Otherwise, we'll give it 500us,
423 	 * which should be enough (I've see it work well at 100us, but still
424 	 * saw occasional problems.)
425 	 */
426 	if(wait_type == WaitSleep)
427 		msleep(5);
428 	else
429 		udelay(500);
430 	return err;
431 }
432 
433 static int
434 typhoon_wait_status(void __iomem *ioaddr, u32 wait_value)
435 {
436 	int i, err = 0;
437 
438 	for(i = 0; i < TYPHOON_WAIT_TIMEOUT; i++) {
439 		if(ioread32(ioaddr + TYPHOON_REG_STATUS) == wait_value)
440 			goto out;
441 		udelay(TYPHOON_UDELAY);
442 	}
443 
444 	err = -ETIMEDOUT;
445 
446 out:
447 	return err;
448 }
449 
450 static inline void
451 typhoon_media_status(struct net_device *dev, struct resp_desc *resp)
452 {
453 	if(resp->parm1 & TYPHOON_MEDIA_STAT_NO_LINK)
454 		netif_carrier_off(dev);
455 	else
456 		netif_carrier_on(dev);
457 }
458 
459 static inline void
460 typhoon_hello(struct typhoon *tp)
461 {
462 	struct basic_ring *ring = &tp->cmdRing;
463 	struct cmd_desc *cmd;
464 
465 	/* We only get a hello request if we've not sent anything to the
466 	 * card in a long while. If the lock is held, then we're in the
467 	 * process of issuing a command, so we don't need to respond.
468 	 */
469 	if(spin_trylock(&tp->command_lock)) {
470 		cmd = (struct cmd_desc *)(ring->ringBase + ring->lastWrite);
471 		typhoon_inc_cmd_index(&ring->lastWrite, 1);
472 
473 		INIT_COMMAND_NO_RESPONSE(cmd, TYPHOON_CMD_HELLO_RESP);
474 		wmb();
475 		iowrite32(ring->lastWrite, tp->ioaddr + TYPHOON_REG_CMD_READY);
476 		spin_unlock(&tp->command_lock);
477 	}
478 }
479 
480 static int
481 typhoon_process_response(struct typhoon *tp, int resp_size,
482 				struct resp_desc *resp_save)
483 {
484 	struct typhoon_indexes *indexes = tp->indexes;
485 	struct resp_desc *resp;
486 	u8 *base = tp->respRing.ringBase;
487 	int count, len, wrap_len;
488 	u32 cleared;
489 	u32 ready;
490 
491 	cleared = le32_to_cpu(indexes->respCleared);
492 	ready = le32_to_cpu(indexes->respReady);
493 	while(cleared != ready) {
494 		resp = (struct resp_desc *)(base + cleared);
495 		count = resp->numDesc + 1;
496 		if(resp_save && resp->seqNo) {
497 			if(count > resp_size) {
498 				resp_save->flags = TYPHOON_RESP_ERROR;
499 				goto cleanup;
500 			}
501 
502 			wrap_len = 0;
503 			len = count * sizeof(*resp);
504 			if(unlikely(cleared + len > RESPONSE_RING_SIZE)) {
505 				wrap_len = cleared + len - RESPONSE_RING_SIZE;
506 				len = RESPONSE_RING_SIZE - cleared;
507 			}
508 
509 			memcpy(resp_save, resp, len);
510 			if(unlikely(wrap_len)) {
511 				resp_save += len / sizeof(*resp);
512 				memcpy(resp_save, base, wrap_len);
513 			}
514 
515 			resp_save = NULL;
516 		} else if(resp->cmd == TYPHOON_CMD_READ_MEDIA_STATUS) {
517 			typhoon_media_status(tp->dev, resp);
518 		} else if(resp->cmd == TYPHOON_CMD_HELLO_RESP) {
519 			typhoon_hello(tp);
520 		} else {
521 			netdev_err(tp->dev,
522 				   "dumping unexpected response 0x%04x:%d:0x%02x:0x%04x:%08x:%08x\n",
523 				   le16_to_cpu(resp->cmd),
524 				   resp->numDesc, resp->flags,
525 				   le16_to_cpu(resp->parm1),
526 				   le32_to_cpu(resp->parm2),
527 				   le32_to_cpu(resp->parm3));
528 		}
529 
530 cleanup:
531 		typhoon_inc_resp_index(&cleared, count);
532 	}
533 
534 	indexes->respCleared = cpu_to_le32(cleared);
535 	wmb();
536 	return resp_save == NULL;
537 }
538 
539 static inline int
540 typhoon_num_free(int lastWrite, int lastRead, int ringSize)
541 {
542 	/* this works for all descriptors but rx_desc, as they are a
543 	 * different size than the cmd_desc -- everyone else is the same
544 	 */
545 	lastWrite /= sizeof(struct cmd_desc);
546 	lastRead /= sizeof(struct cmd_desc);
547 	return (ringSize + lastRead - lastWrite - 1) % ringSize;
548 }
549 
550 static inline int
551 typhoon_num_free_cmd(struct typhoon *tp)
552 {
553 	int lastWrite = tp->cmdRing.lastWrite;
554 	int cmdCleared = le32_to_cpu(tp->indexes->cmdCleared);
555 
556 	return typhoon_num_free(lastWrite, cmdCleared, COMMAND_ENTRIES);
557 }
558 
559 static inline int
560 typhoon_num_free_resp(struct typhoon *tp)
561 {
562 	int respReady = le32_to_cpu(tp->indexes->respReady);
563 	int respCleared = le32_to_cpu(tp->indexes->respCleared);
564 
565 	return typhoon_num_free(respReady, respCleared, RESPONSE_ENTRIES);
566 }
567 
568 static inline int
569 typhoon_num_free_tx(struct transmit_ring *ring)
570 {
571 	/* if we start using the Hi Tx ring, this needs updating */
572 	return typhoon_num_free(ring->lastWrite, ring->lastRead, TXLO_ENTRIES);
573 }
574 
575 static int
576 typhoon_issue_command(struct typhoon *tp, int num_cmd, struct cmd_desc *cmd,
577 		      int num_resp, struct resp_desc *resp)
578 {
579 	struct typhoon_indexes *indexes = tp->indexes;
580 	struct basic_ring *ring = &tp->cmdRing;
581 	struct resp_desc local_resp;
582 	int i, err = 0;
583 	int got_resp;
584 	int freeCmd, freeResp;
585 	int len, wrap_len;
586 
587 	spin_lock(&tp->command_lock);
588 
589 	freeCmd = typhoon_num_free_cmd(tp);
590 	freeResp = typhoon_num_free_resp(tp);
591 
592 	if(freeCmd < num_cmd || freeResp < num_resp) {
593 		netdev_err(tp->dev, "no descs for cmd, had (needed) %d (%d) cmd, %d (%d) resp\n",
594 			   freeCmd, num_cmd, freeResp, num_resp);
595 		err = -ENOMEM;
596 		goto out;
597 	}
598 
599 	if(cmd->flags & TYPHOON_CMD_RESPOND) {
600 		/* If we're expecting a response, but the caller hasn't given
601 		 * us a place to put it, we'll provide one.
602 		 */
603 		tp->awaiting_resp = 1;
604 		if(resp == NULL) {
605 			resp = &local_resp;
606 			num_resp = 1;
607 		}
608 	}
609 
610 	wrap_len = 0;
611 	len = num_cmd * sizeof(*cmd);
612 	if(unlikely(ring->lastWrite + len > COMMAND_RING_SIZE)) {
613 		wrap_len = ring->lastWrite + len - COMMAND_RING_SIZE;
614 		len = COMMAND_RING_SIZE - ring->lastWrite;
615 	}
616 
617 	memcpy(ring->ringBase + ring->lastWrite, cmd, len);
618 	if(unlikely(wrap_len)) {
619 		struct cmd_desc *wrap_ptr = cmd;
620 		wrap_ptr += len / sizeof(*cmd);
621 		memcpy(ring->ringBase, wrap_ptr, wrap_len);
622 	}
623 
624 	typhoon_inc_cmd_index(&ring->lastWrite, num_cmd);
625 
626 	/* "I feel a presence... another warrior is on the mesa."
627 	 */
628 	wmb();
629 	iowrite32(ring->lastWrite, tp->ioaddr + TYPHOON_REG_CMD_READY);
630 	typhoon_post_pci_writes(tp->ioaddr);
631 
632 	if((cmd->flags & TYPHOON_CMD_RESPOND) == 0)
633 		goto out;
634 
635 	/* Ugh. We'll be here about 8ms, spinning our thumbs, unable to
636 	 * preempt or do anything other than take interrupts. So, don't
637 	 * wait for a response unless you have to.
638 	 *
639 	 * I've thought about trying to sleep here, but we're called
640 	 * from many contexts that don't allow that. Also, given the way
641 	 * 3Com has implemented irq coalescing, we would likely timeout --
642 	 * this has been observed in real life!
643 	 *
644 	 * The big killer is we have to wait to get stats from the card,
645 	 * though we could go to a periodic refresh of those if we don't
646 	 * mind them getting somewhat stale. The rest of the waiting
647 	 * commands occur during open/close/suspend/resume, so they aren't
648 	 * time critical. Creating SAs in the future will also have to
649 	 * wait here.
650 	 */
651 	got_resp = 0;
652 	for(i = 0; i < TYPHOON_WAIT_TIMEOUT && !got_resp; i++) {
653 		if(indexes->respCleared != indexes->respReady)
654 			got_resp = typhoon_process_response(tp, num_resp,
655 								resp);
656 		udelay(TYPHOON_UDELAY);
657 	}
658 
659 	if(!got_resp) {
660 		err = -ETIMEDOUT;
661 		goto out;
662 	}
663 
664 	/* Collect the error response even if we don't care about the
665 	 * rest of the response
666 	 */
667 	if(resp->flags & TYPHOON_RESP_ERROR)
668 		err = -EIO;
669 
670 out:
671 	if(tp->awaiting_resp) {
672 		tp->awaiting_resp = 0;
673 		smp_wmb();
674 
675 		/* Ugh. If a response was added to the ring between
676 		 * the call to typhoon_process_response() and the clearing
677 		 * of tp->awaiting_resp, we could have missed the interrupt
678 		 * and it could hang in the ring an indeterminate amount of
679 		 * time. So, check for it, and interrupt ourselves if this
680 		 * is the case.
681 		 */
682 		if(indexes->respCleared != indexes->respReady)
683 			iowrite32(1, tp->ioaddr + TYPHOON_REG_SELF_INTERRUPT);
684 	}
685 
686 	spin_unlock(&tp->command_lock);
687 	return err;
688 }
689 
690 static inline void
691 typhoon_tso_fill(struct sk_buff *skb, struct transmit_ring *txRing,
692 			u32 ring_dma)
693 {
694 	struct tcpopt_desc *tcpd;
695 	u32 tcpd_offset = ring_dma;
696 
697 	tcpd = (struct tcpopt_desc *) (txRing->ringBase + txRing->lastWrite);
698 	tcpd_offset += txRing->lastWrite;
699 	tcpd_offset += offsetof(struct tcpopt_desc, bytesTx);
700 	typhoon_inc_tx_index(&txRing->lastWrite, 1);
701 
702 	tcpd->flags = TYPHOON_OPT_DESC | TYPHOON_OPT_TCP_SEG;
703 	tcpd->numDesc = 1;
704 	tcpd->mss_flags = cpu_to_le16(skb_tso_size(skb));
705 	tcpd->mss_flags |= TYPHOON_TSO_FIRST | TYPHOON_TSO_LAST;
706 	tcpd->respAddrLo = cpu_to_le32(tcpd_offset);
707 	tcpd->bytesTx = cpu_to_le32(skb->len);
708 	tcpd->status = 0;
709 }
710 
711 static netdev_tx_t
712 typhoon_start_tx(struct sk_buff *skb, struct net_device *dev)
713 {
714 	struct typhoon *tp = netdev_priv(dev);
715 	struct transmit_ring *txRing;
716 	struct tx_desc *txd, *first_txd;
717 	dma_addr_t skb_dma;
718 	int numDesc;
719 
720 	/* we have two rings to choose from, but we only use txLo for now
721 	 * If we start using the Hi ring as well, we'll need to update
722 	 * typhoon_stop_runtime(), typhoon_interrupt(), typhoon_num_free_tx(),
723 	 * and TXHI_ENTRIES to match, as well as update the TSO code below
724 	 * to get the right DMA address
725 	 */
726 	txRing = &tp->txLoRing;
727 
728 	/* We need one descriptor for each fragment of the sk_buff, plus the
729 	 * one for the ->data area of it.
730 	 *
731 	 * The docs say a maximum of 16 fragment descriptors per TCP option
732 	 * descriptor, then make a new packet descriptor and option descriptor
733 	 * for the next 16 fragments. The engineers say just an option
734 	 * descriptor is needed. I've tested up to 26 fragments with a single
735 	 * packet descriptor/option descriptor combo, so I use that for now.
736 	 *
737 	 * If problems develop with TSO, check this first.
738 	 */
739 	numDesc = skb_shinfo(skb)->nr_frags + 1;
740 	if (skb_is_gso(skb))
741 		numDesc++;
742 
743 	/* When checking for free space in the ring, we need to also
744 	 * account for the initial Tx descriptor, and we always must leave
745 	 * at least one descriptor unused in the ring so that it doesn't
746 	 * wrap and look empty.
747 	 *
748 	 * The only time we should loop here is when we hit the race
749 	 * between marking the queue awake and updating the cleared index.
750 	 * Just loop and it will appear. This comes from the acenic driver.
751 	 */
752 	while(unlikely(typhoon_num_free_tx(txRing) < (numDesc + 2)))
753 		smp_rmb();
754 
755 	first_txd = (struct tx_desc *) (txRing->ringBase + txRing->lastWrite);
756 	typhoon_inc_tx_index(&txRing->lastWrite, 1);
757 
758 	first_txd->flags = TYPHOON_TX_DESC | TYPHOON_DESC_VALID;
759 	first_txd->numDesc = 0;
760 	first_txd->len = 0;
761 	first_txd->tx_addr = (u64)((unsigned long) skb);
762 	first_txd->processFlags = 0;
763 
764 	if(skb->ip_summed == CHECKSUM_PARTIAL) {
765 		/* The 3XP will figure out if this is UDP/TCP */
766 		first_txd->processFlags |= TYPHOON_TX_PF_TCP_CHKSUM;
767 		first_txd->processFlags |= TYPHOON_TX_PF_UDP_CHKSUM;
768 		first_txd->processFlags |= TYPHOON_TX_PF_IP_CHKSUM;
769 	}
770 
771 	if (skb_vlan_tag_present(skb)) {
772 		first_txd->processFlags |=
773 		    TYPHOON_TX_PF_INSERT_VLAN | TYPHOON_TX_PF_VLAN_PRIORITY;
774 		first_txd->processFlags |=
775 		    cpu_to_le32(htons(skb_vlan_tag_get(skb)) <<
776 				TYPHOON_TX_PF_VLAN_TAG_SHIFT);
777 	}
778 
779 	if (skb_is_gso(skb)) {
780 		first_txd->processFlags |= TYPHOON_TX_PF_TCP_SEGMENT;
781 		first_txd->numDesc++;
782 
783 		typhoon_tso_fill(skb, txRing, tp->txlo_dma_addr);
784 	}
785 
786 	txd = (struct tx_desc *) (txRing->ringBase + txRing->lastWrite);
787 	typhoon_inc_tx_index(&txRing->lastWrite, 1);
788 
789 	/* No need to worry about padding packet -- the firmware pads
790 	 * it with zeros to ETH_ZLEN for us.
791 	 */
792 	if(skb_shinfo(skb)->nr_frags == 0) {
793 		skb_dma = pci_map_single(tp->tx_pdev, skb->data, skb->len,
794 				       PCI_DMA_TODEVICE);
795 		txd->flags = TYPHOON_FRAG_DESC | TYPHOON_DESC_VALID;
796 		txd->len = cpu_to_le16(skb->len);
797 		txd->frag.addr = cpu_to_le32(skb_dma);
798 		txd->frag.addrHi = 0;
799 		first_txd->numDesc++;
800 	} else {
801 		int i, len;
802 
803 		len = skb_headlen(skb);
804 		skb_dma = pci_map_single(tp->tx_pdev, skb->data, len,
805 				         PCI_DMA_TODEVICE);
806 		txd->flags = TYPHOON_FRAG_DESC | TYPHOON_DESC_VALID;
807 		txd->len = cpu_to_le16(len);
808 		txd->frag.addr = cpu_to_le32(skb_dma);
809 		txd->frag.addrHi = 0;
810 		first_txd->numDesc++;
811 
812 		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
813 			const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
814 			void *frag_addr;
815 
816 			txd = (struct tx_desc *) (txRing->ringBase +
817 						txRing->lastWrite);
818 			typhoon_inc_tx_index(&txRing->lastWrite, 1);
819 
820 			len = skb_frag_size(frag);
821 			frag_addr = skb_frag_address(frag);
822 			skb_dma = pci_map_single(tp->tx_pdev, frag_addr, len,
823 					 PCI_DMA_TODEVICE);
824 			txd->flags = TYPHOON_FRAG_DESC | TYPHOON_DESC_VALID;
825 			txd->len = cpu_to_le16(len);
826 			txd->frag.addr = cpu_to_le32(skb_dma);
827 			txd->frag.addrHi = 0;
828 			first_txd->numDesc++;
829 		}
830 	}
831 
832 	/* Kick the 3XP
833 	 */
834 	wmb();
835 	iowrite32(txRing->lastWrite, tp->tx_ioaddr + txRing->writeRegister);
836 
837 	/* If we don't have room to put the worst case packet on the
838 	 * queue, then we must stop the queue. We need 2 extra
839 	 * descriptors -- one to prevent ring wrap, and one for the
840 	 * Tx header.
841 	 */
842 	numDesc = MAX_SKB_FRAGS + TSO_NUM_DESCRIPTORS + 1;
843 
844 	if(typhoon_num_free_tx(txRing) < (numDesc + 2)) {
845 		netif_stop_queue(dev);
846 
847 		/* A Tx complete IRQ could have gotten between, making
848 		 * the ring free again. Only need to recheck here, since
849 		 * Tx is serialized.
850 		 */
851 		if(typhoon_num_free_tx(txRing) >= (numDesc + 2))
852 			netif_wake_queue(dev);
853 	}
854 
855 	return NETDEV_TX_OK;
856 }
857 
858 static void
859 typhoon_set_rx_mode(struct net_device *dev)
860 {
861 	struct typhoon *tp = netdev_priv(dev);
862 	struct cmd_desc xp_cmd;
863 	u32 mc_filter[2];
864 	__le16 filter;
865 
866 	filter = TYPHOON_RX_FILTER_DIRECTED | TYPHOON_RX_FILTER_BROADCAST;
867 	if(dev->flags & IFF_PROMISC) {
868 		filter |= TYPHOON_RX_FILTER_PROMISCOUS;
869 	} else if ((netdev_mc_count(dev) > multicast_filter_limit) ||
870 		  (dev->flags & IFF_ALLMULTI)) {
871 		/* Too many to match, or accept all multicasts. */
872 		filter |= TYPHOON_RX_FILTER_ALL_MCAST;
873 	} else if (!netdev_mc_empty(dev)) {
874 		struct netdev_hw_addr *ha;
875 
876 		memset(mc_filter, 0, sizeof(mc_filter));
877 		netdev_for_each_mc_addr(ha, dev) {
878 			int bit = ether_crc(ETH_ALEN, ha->addr) & 0x3f;
879 			mc_filter[bit >> 5] |= 1 << (bit & 0x1f);
880 		}
881 
882 		INIT_COMMAND_NO_RESPONSE(&xp_cmd,
883 					 TYPHOON_CMD_SET_MULTICAST_HASH);
884 		xp_cmd.parm1 = TYPHOON_MCAST_HASH_SET;
885 		xp_cmd.parm2 = cpu_to_le32(mc_filter[0]);
886 		xp_cmd.parm3 = cpu_to_le32(mc_filter[1]);
887 		typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
888 
889 		filter |= TYPHOON_RX_FILTER_MCAST_HASH;
890 	}
891 
892 	INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_SET_RX_FILTER);
893 	xp_cmd.parm1 = filter;
894 	typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
895 }
896 
897 static int
898 typhoon_do_get_stats(struct typhoon *tp)
899 {
900 	struct net_device_stats *stats = &tp->dev->stats;
901 	struct net_device_stats *saved = &tp->stats_saved;
902 	struct cmd_desc xp_cmd;
903 	struct resp_desc xp_resp[7];
904 	struct stats_resp *s = (struct stats_resp *) xp_resp;
905 	int err;
906 
907 	INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_READ_STATS);
908 	err = typhoon_issue_command(tp, 1, &xp_cmd, 7, xp_resp);
909 	if(err < 0)
910 		return err;
911 
912 	/* 3Com's Linux driver uses txMultipleCollisions as it's
913 	 * collisions value, but there is some other collision info as well...
914 	 *
915 	 * The extra status reported would be a good candidate for
916 	 * ethtool_ops->get_{strings,stats}()
917 	 */
918 	stats->tx_packets = le32_to_cpu(s->txPackets) +
919 			saved->tx_packets;
920 	stats->tx_bytes = le64_to_cpu(s->txBytes) +
921 			saved->tx_bytes;
922 	stats->tx_errors = le32_to_cpu(s->txCarrierLost) +
923 			saved->tx_errors;
924 	stats->tx_carrier_errors = le32_to_cpu(s->txCarrierLost) +
925 			saved->tx_carrier_errors;
926 	stats->collisions = le32_to_cpu(s->txMultipleCollisions) +
927 			saved->collisions;
928 	stats->rx_packets = le32_to_cpu(s->rxPacketsGood) +
929 			saved->rx_packets;
930 	stats->rx_bytes = le64_to_cpu(s->rxBytesGood) +
931 			saved->rx_bytes;
932 	stats->rx_fifo_errors = le32_to_cpu(s->rxFifoOverruns) +
933 			saved->rx_fifo_errors;
934 	stats->rx_errors = le32_to_cpu(s->rxFifoOverruns) +
935 			le32_to_cpu(s->BadSSD) + le32_to_cpu(s->rxCrcErrors) +
936 			saved->rx_errors;
937 	stats->rx_crc_errors = le32_to_cpu(s->rxCrcErrors) +
938 			saved->rx_crc_errors;
939 	stats->rx_length_errors = le32_to_cpu(s->rxOversized) +
940 			saved->rx_length_errors;
941 	tp->speed = (s->linkStatus & TYPHOON_LINK_100MBPS) ?
942 			SPEED_100 : SPEED_10;
943 	tp->duplex = (s->linkStatus & TYPHOON_LINK_FULL_DUPLEX) ?
944 			DUPLEX_FULL : DUPLEX_HALF;
945 
946 	return 0;
947 }
948 
949 static struct net_device_stats *
950 typhoon_get_stats(struct net_device *dev)
951 {
952 	struct typhoon *tp = netdev_priv(dev);
953 	struct net_device_stats *stats = &tp->dev->stats;
954 	struct net_device_stats *saved = &tp->stats_saved;
955 
956 	smp_rmb();
957 	if(tp->card_state == Sleeping)
958 		return saved;
959 
960 	if(typhoon_do_get_stats(tp) < 0) {
961 		netdev_err(dev, "error getting stats\n");
962 		return saved;
963 	}
964 
965 	return stats;
966 }
967 
968 static void
969 typhoon_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
970 {
971 	struct typhoon *tp = netdev_priv(dev);
972 	struct pci_dev *pci_dev = tp->pdev;
973 	struct cmd_desc xp_cmd;
974 	struct resp_desc xp_resp[3];
975 
976 	smp_rmb();
977 	if(tp->card_state == Sleeping) {
978 		strlcpy(info->fw_version, "Sleep image",
979 			sizeof(info->fw_version));
980 	} else {
981 		INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_READ_VERSIONS);
982 		if(typhoon_issue_command(tp, 1, &xp_cmd, 3, xp_resp) < 0) {
983 			strlcpy(info->fw_version, "Unknown runtime",
984 				sizeof(info->fw_version));
985 		} else {
986 			u32 sleep_ver = le32_to_cpu(xp_resp[0].parm2);
987 			snprintf(info->fw_version, sizeof(info->fw_version),
988 				"%02x.%03x.%03x", sleep_ver >> 24,
989 				(sleep_ver >> 12) & 0xfff, sleep_ver & 0xfff);
990 		}
991 	}
992 
993 	strlcpy(info->driver, KBUILD_MODNAME, sizeof(info->driver));
994 	strlcpy(info->bus_info, pci_name(pci_dev), sizeof(info->bus_info));
995 }
996 
997 static int
998 typhoon_get_link_ksettings(struct net_device *dev,
999 			   struct ethtool_link_ksettings *cmd)
1000 {
1001 	struct typhoon *tp = netdev_priv(dev);
1002 	u32 supported, advertising = 0;
1003 
1004 	supported = SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full |
1005 				SUPPORTED_Autoneg;
1006 
1007 	switch (tp->xcvr_select) {
1008 	case TYPHOON_XCVR_10HALF:
1009 		advertising = ADVERTISED_10baseT_Half;
1010 		break;
1011 	case TYPHOON_XCVR_10FULL:
1012 		advertising = ADVERTISED_10baseT_Full;
1013 		break;
1014 	case TYPHOON_XCVR_100HALF:
1015 		advertising = ADVERTISED_100baseT_Half;
1016 		break;
1017 	case TYPHOON_XCVR_100FULL:
1018 		advertising = ADVERTISED_100baseT_Full;
1019 		break;
1020 	case TYPHOON_XCVR_AUTONEG:
1021 		advertising = ADVERTISED_10baseT_Half |
1022 					    ADVERTISED_10baseT_Full |
1023 					    ADVERTISED_100baseT_Half |
1024 					    ADVERTISED_100baseT_Full |
1025 					    ADVERTISED_Autoneg;
1026 		break;
1027 	}
1028 
1029 	if(tp->capabilities & TYPHOON_FIBER) {
1030 		supported |= SUPPORTED_FIBRE;
1031 		advertising |= ADVERTISED_FIBRE;
1032 		cmd->base.port = PORT_FIBRE;
1033 	} else {
1034 		supported |= SUPPORTED_10baseT_Half |
1035 		    			SUPPORTED_10baseT_Full |
1036 					SUPPORTED_TP;
1037 		advertising |= ADVERTISED_TP;
1038 		cmd->base.port = PORT_TP;
1039 	}
1040 
1041 	/* need to get stats to make these link speed/duplex valid */
1042 	typhoon_do_get_stats(tp);
1043 	cmd->base.speed = tp->speed;
1044 	cmd->base.duplex = tp->duplex;
1045 	cmd->base.phy_address = 0;
1046 	if(tp->xcvr_select == TYPHOON_XCVR_AUTONEG)
1047 		cmd->base.autoneg = AUTONEG_ENABLE;
1048 	else
1049 		cmd->base.autoneg = AUTONEG_DISABLE;
1050 
1051 	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
1052 						supported);
1053 	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.advertising,
1054 						advertising);
1055 
1056 	return 0;
1057 }
1058 
1059 static int
1060 typhoon_set_link_ksettings(struct net_device *dev,
1061 			   const struct ethtool_link_ksettings *cmd)
1062 {
1063 	struct typhoon *tp = netdev_priv(dev);
1064 	u32 speed = cmd->base.speed;
1065 	struct cmd_desc xp_cmd;
1066 	__le16 xcvr;
1067 	int err;
1068 
1069 	err = -EINVAL;
1070 	if (cmd->base.autoneg == AUTONEG_ENABLE) {
1071 		xcvr = TYPHOON_XCVR_AUTONEG;
1072 	} else {
1073 		if (cmd->base.duplex == DUPLEX_HALF) {
1074 			if (speed == SPEED_10)
1075 				xcvr = TYPHOON_XCVR_10HALF;
1076 			else if (speed == SPEED_100)
1077 				xcvr = TYPHOON_XCVR_100HALF;
1078 			else
1079 				goto out;
1080 		} else if (cmd->base.duplex == DUPLEX_FULL) {
1081 			if (speed == SPEED_10)
1082 				xcvr = TYPHOON_XCVR_10FULL;
1083 			else if (speed == SPEED_100)
1084 				xcvr = TYPHOON_XCVR_100FULL;
1085 			else
1086 				goto out;
1087 		} else
1088 			goto out;
1089 	}
1090 
1091 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_XCVR_SELECT);
1092 	xp_cmd.parm1 = xcvr;
1093 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1094 	if(err < 0)
1095 		goto out;
1096 
1097 	tp->xcvr_select = xcvr;
1098 	if (cmd->base.autoneg == AUTONEG_ENABLE) {
1099 		tp->speed = 0xff;	/* invalid */
1100 		tp->duplex = 0xff;	/* invalid */
1101 	} else {
1102 		tp->speed = speed;
1103 		tp->duplex = cmd->base.duplex;
1104 	}
1105 
1106 out:
1107 	return err;
1108 }
1109 
1110 static void
1111 typhoon_get_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1112 {
1113 	struct typhoon *tp = netdev_priv(dev);
1114 
1115 	wol->supported = WAKE_PHY | WAKE_MAGIC;
1116 	wol->wolopts = 0;
1117 	if(tp->wol_events & TYPHOON_WAKE_LINK_EVENT)
1118 		wol->wolopts |= WAKE_PHY;
1119 	if(tp->wol_events & TYPHOON_WAKE_MAGIC_PKT)
1120 		wol->wolopts |= WAKE_MAGIC;
1121 	memset(&wol->sopass, 0, sizeof(wol->sopass));
1122 }
1123 
1124 static int
1125 typhoon_set_wol(struct net_device *dev, struct ethtool_wolinfo *wol)
1126 {
1127 	struct typhoon *tp = netdev_priv(dev);
1128 
1129 	if(wol->wolopts & ~(WAKE_PHY | WAKE_MAGIC))
1130 		return -EINVAL;
1131 
1132 	tp->wol_events = 0;
1133 	if(wol->wolopts & WAKE_PHY)
1134 		tp->wol_events |= TYPHOON_WAKE_LINK_EVENT;
1135 	if(wol->wolopts & WAKE_MAGIC)
1136 		tp->wol_events |= TYPHOON_WAKE_MAGIC_PKT;
1137 
1138 	return 0;
1139 }
1140 
1141 static void
1142 typhoon_get_ringparam(struct net_device *dev, struct ethtool_ringparam *ering)
1143 {
1144 	ering->rx_max_pending = RXENT_ENTRIES;
1145 	ering->tx_max_pending = TXLO_ENTRIES - 1;
1146 
1147 	ering->rx_pending = RXENT_ENTRIES;
1148 	ering->tx_pending = TXLO_ENTRIES - 1;
1149 }
1150 
1151 static const struct ethtool_ops typhoon_ethtool_ops = {
1152 	.get_drvinfo		= typhoon_get_drvinfo,
1153 	.get_wol		= typhoon_get_wol,
1154 	.set_wol		= typhoon_set_wol,
1155 	.get_link		= ethtool_op_get_link,
1156 	.get_ringparam		= typhoon_get_ringparam,
1157 	.get_link_ksettings	= typhoon_get_link_ksettings,
1158 	.set_link_ksettings	= typhoon_set_link_ksettings,
1159 };
1160 
1161 static int
1162 typhoon_wait_interrupt(void __iomem *ioaddr)
1163 {
1164 	int i, err = 0;
1165 
1166 	for(i = 0; i < TYPHOON_WAIT_TIMEOUT; i++) {
1167 		if(ioread32(ioaddr + TYPHOON_REG_INTR_STATUS) &
1168 		   TYPHOON_INTR_BOOTCMD)
1169 			goto out;
1170 		udelay(TYPHOON_UDELAY);
1171 	}
1172 
1173 	err = -ETIMEDOUT;
1174 
1175 out:
1176 	iowrite32(TYPHOON_INTR_BOOTCMD, ioaddr + TYPHOON_REG_INTR_STATUS);
1177 	return err;
1178 }
1179 
1180 #define shared_offset(x)	offsetof(struct typhoon_shared, x)
1181 
1182 static void
1183 typhoon_init_interface(struct typhoon *tp)
1184 {
1185 	struct typhoon_interface *iface = &tp->shared->iface;
1186 	dma_addr_t shared_dma;
1187 
1188 	memset(tp->shared, 0, sizeof(struct typhoon_shared));
1189 
1190 	/* The *Hi members of iface are all init'd to zero by the memset().
1191 	 */
1192 	shared_dma = tp->shared_dma + shared_offset(indexes);
1193 	iface->ringIndex = cpu_to_le32(shared_dma);
1194 
1195 	shared_dma = tp->shared_dma + shared_offset(txLo);
1196 	iface->txLoAddr = cpu_to_le32(shared_dma);
1197 	iface->txLoSize = cpu_to_le32(TXLO_ENTRIES * sizeof(struct tx_desc));
1198 
1199 	shared_dma = tp->shared_dma + shared_offset(txHi);
1200 	iface->txHiAddr = cpu_to_le32(shared_dma);
1201 	iface->txHiSize = cpu_to_le32(TXHI_ENTRIES * sizeof(struct tx_desc));
1202 
1203 	shared_dma = tp->shared_dma + shared_offset(rxBuff);
1204 	iface->rxBuffAddr = cpu_to_le32(shared_dma);
1205 	iface->rxBuffSize = cpu_to_le32(RXFREE_ENTRIES *
1206 					sizeof(struct rx_free));
1207 
1208 	shared_dma = tp->shared_dma + shared_offset(rxLo);
1209 	iface->rxLoAddr = cpu_to_le32(shared_dma);
1210 	iface->rxLoSize = cpu_to_le32(RX_ENTRIES * sizeof(struct rx_desc));
1211 
1212 	shared_dma = tp->shared_dma + shared_offset(rxHi);
1213 	iface->rxHiAddr = cpu_to_le32(shared_dma);
1214 	iface->rxHiSize = cpu_to_le32(RX_ENTRIES * sizeof(struct rx_desc));
1215 
1216 	shared_dma = tp->shared_dma + shared_offset(cmd);
1217 	iface->cmdAddr = cpu_to_le32(shared_dma);
1218 	iface->cmdSize = cpu_to_le32(COMMAND_RING_SIZE);
1219 
1220 	shared_dma = tp->shared_dma + shared_offset(resp);
1221 	iface->respAddr = cpu_to_le32(shared_dma);
1222 	iface->respSize = cpu_to_le32(RESPONSE_RING_SIZE);
1223 
1224 	shared_dma = tp->shared_dma + shared_offset(zeroWord);
1225 	iface->zeroAddr = cpu_to_le32(shared_dma);
1226 
1227 	tp->indexes = &tp->shared->indexes;
1228 	tp->txLoRing.ringBase = (u8 *) tp->shared->txLo;
1229 	tp->txHiRing.ringBase = (u8 *) tp->shared->txHi;
1230 	tp->rxLoRing.ringBase = (u8 *) tp->shared->rxLo;
1231 	tp->rxHiRing.ringBase = (u8 *) tp->shared->rxHi;
1232 	tp->rxBuffRing.ringBase = (u8 *) tp->shared->rxBuff;
1233 	tp->cmdRing.ringBase = (u8 *) tp->shared->cmd;
1234 	tp->respRing.ringBase = (u8 *) tp->shared->resp;
1235 
1236 	tp->txLoRing.writeRegister = TYPHOON_REG_TX_LO_READY;
1237 	tp->txHiRing.writeRegister = TYPHOON_REG_TX_HI_READY;
1238 
1239 	tp->txlo_dma_addr = le32_to_cpu(iface->txLoAddr);
1240 	tp->card_state = Sleeping;
1241 
1242 	tp->offload = TYPHOON_OFFLOAD_IP_CHKSUM | TYPHOON_OFFLOAD_TCP_CHKSUM;
1243 	tp->offload |= TYPHOON_OFFLOAD_UDP_CHKSUM | TSO_OFFLOAD_ON;
1244 	tp->offload |= TYPHOON_OFFLOAD_VLAN;
1245 
1246 	spin_lock_init(&tp->command_lock);
1247 
1248 	/* Force the writes to the shared memory area out before continuing. */
1249 	wmb();
1250 }
1251 
1252 static void
1253 typhoon_init_rings(struct typhoon *tp)
1254 {
1255 	memset(tp->indexes, 0, sizeof(struct typhoon_indexes));
1256 
1257 	tp->txLoRing.lastWrite = 0;
1258 	tp->txHiRing.lastWrite = 0;
1259 	tp->rxLoRing.lastWrite = 0;
1260 	tp->rxHiRing.lastWrite = 0;
1261 	tp->rxBuffRing.lastWrite = 0;
1262 	tp->cmdRing.lastWrite = 0;
1263 	tp->respRing.lastWrite = 0;
1264 
1265 	tp->txLoRing.lastRead = 0;
1266 	tp->txHiRing.lastRead = 0;
1267 }
1268 
1269 static const struct firmware *typhoon_fw;
1270 
1271 static int
1272 typhoon_request_firmware(struct typhoon *tp)
1273 {
1274 	const struct typhoon_file_header *fHdr;
1275 	const struct typhoon_section_header *sHdr;
1276 	const u8 *image_data;
1277 	u32 numSections;
1278 	u32 section_len;
1279 	u32 remaining;
1280 	int err;
1281 
1282 	if (typhoon_fw)
1283 		return 0;
1284 
1285 	err = request_firmware(&typhoon_fw, FIRMWARE_NAME, &tp->pdev->dev);
1286 	if (err) {
1287 		netdev_err(tp->dev, "Failed to load firmware \"%s\"\n",
1288 			   FIRMWARE_NAME);
1289 		return err;
1290 	}
1291 
1292 	image_data = typhoon_fw->data;
1293 	remaining = typhoon_fw->size;
1294 	if (remaining < sizeof(struct typhoon_file_header))
1295 		goto invalid_fw;
1296 
1297 	fHdr = (struct typhoon_file_header *) image_data;
1298 	if (memcmp(fHdr->tag, "TYPHOON", 8))
1299 		goto invalid_fw;
1300 
1301 	numSections = le32_to_cpu(fHdr->numSections);
1302 	image_data += sizeof(struct typhoon_file_header);
1303 	remaining -= sizeof(struct typhoon_file_header);
1304 
1305 	while (numSections--) {
1306 		if (remaining < sizeof(struct typhoon_section_header))
1307 			goto invalid_fw;
1308 
1309 		sHdr = (struct typhoon_section_header *) image_data;
1310 		image_data += sizeof(struct typhoon_section_header);
1311 		section_len = le32_to_cpu(sHdr->len);
1312 
1313 		if (remaining < section_len)
1314 			goto invalid_fw;
1315 
1316 		image_data += section_len;
1317 		remaining -= section_len;
1318 	}
1319 
1320 	return 0;
1321 
1322 invalid_fw:
1323 	netdev_err(tp->dev, "Invalid firmware image\n");
1324 	release_firmware(typhoon_fw);
1325 	typhoon_fw = NULL;
1326 	return -EINVAL;
1327 }
1328 
1329 static int
1330 typhoon_download_firmware(struct typhoon *tp)
1331 {
1332 	void __iomem *ioaddr = tp->ioaddr;
1333 	struct pci_dev *pdev = tp->pdev;
1334 	const struct typhoon_file_header *fHdr;
1335 	const struct typhoon_section_header *sHdr;
1336 	const u8 *image_data;
1337 	void *dpage;
1338 	dma_addr_t dpage_dma;
1339 	__sum16 csum;
1340 	u32 irqEnabled;
1341 	u32 irqMasked;
1342 	u32 numSections;
1343 	u32 section_len;
1344 	u32 len;
1345 	u32 load_addr;
1346 	u32 hmac;
1347 	int i;
1348 	int err;
1349 
1350 	image_data = typhoon_fw->data;
1351 	fHdr = (struct typhoon_file_header *) image_data;
1352 
1353 	/* Cannot just map the firmware image using pci_map_single() as
1354 	 * the firmware is vmalloc()'d and may not be physically contiguous,
1355 	 * so we allocate some consistent memory to copy the sections into.
1356 	 */
1357 	err = -ENOMEM;
1358 	dpage = pci_alloc_consistent(pdev, PAGE_SIZE, &dpage_dma);
1359 	if(!dpage) {
1360 		netdev_err(tp->dev, "no DMA mem for firmware\n");
1361 		goto err_out;
1362 	}
1363 
1364 	irqEnabled = ioread32(ioaddr + TYPHOON_REG_INTR_ENABLE);
1365 	iowrite32(irqEnabled | TYPHOON_INTR_BOOTCMD,
1366 	       ioaddr + TYPHOON_REG_INTR_ENABLE);
1367 	irqMasked = ioread32(ioaddr + TYPHOON_REG_INTR_MASK);
1368 	iowrite32(irqMasked | TYPHOON_INTR_BOOTCMD,
1369 	       ioaddr + TYPHOON_REG_INTR_MASK);
1370 
1371 	err = -ETIMEDOUT;
1372 	if(typhoon_wait_status(ioaddr, TYPHOON_STATUS_WAITING_FOR_HOST) < 0) {
1373 		netdev_err(tp->dev, "card ready timeout\n");
1374 		goto err_out_irq;
1375 	}
1376 
1377 	numSections = le32_to_cpu(fHdr->numSections);
1378 	load_addr = le32_to_cpu(fHdr->startAddr);
1379 
1380 	iowrite32(TYPHOON_INTR_BOOTCMD, ioaddr + TYPHOON_REG_INTR_STATUS);
1381 	iowrite32(load_addr, ioaddr + TYPHOON_REG_DOWNLOAD_BOOT_ADDR);
1382 	hmac = le32_to_cpu(fHdr->hmacDigest[0]);
1383 	iowrite32(hmac, ioaddr + TYPHOON_REG_DOWNLOAD_HMAC_0);
1384 	hmac = le32_to_cpu(fHdr->hmacDigest[1]);
1385 	iowrite32(hmac, ioaddr + TYPHOON_REG_DOWNLOAD_HMAC_1);
1386 	hmac = le32_to_cpu(fHdr->hmacDigest[2]);
1387 	iowrite32(hmac, ioaddr + TYPHOON_REG_DOWNLOAD_HMAC_2);
1388 	hmac = le32_to_cpu(fHdr->hmacDigest[3]);
1389 	iowrite32(hmac, ioaddr + TYPHOON_REG_DOWNLOAD_HMAC_3);
1390 	hmac = le32_to_cpu(fHdr->hmacDigest[4]);
1391 	iowrite32(hmac, ioaddr + TYPHOON_REG_DOWNLOAD_HMAC_4);
1392 	typhoon_post_pci_writes(ioaddr);
1393 	iowrite32(TYPHOON_BOOTCMD_RUNTIME_IMAGE, ioaddr + TYPHOON_REG_COMMAND);
1394 
1395 	image_data += sizeof(struct typhoon_file_header);
1396 
1397 	/* The ioread32() in typhoon_wait_interrupt() will force the
1398 	 * last write to the command register to post, so
1399 	 * we don't need a typhoon_post_pci_writes() after it.
1400 	 */
1401 	for(i = 0; i < numSections; i++) {
1402 		sHdr = (struct typhoon_section_header *) image_data;
1403 		image_data += sizeof(struct typhoon_section_header);
1404 		load_addr = le32_to_cpu(sHdr->startAddr);
1405 		section_len = le32_to_cpu(sHdr->len);
1406 
1407 		while(section_len) {
1408 			len = min_t(u32, section_len, PAGE_SIZE);
1409 
1410 			if(typhoon_wait_interrupt(ioaddr) < 0 ||
1411 			   ioread32(ioaddr + TYPHOON_REG_STATUS) !=
1412 			   TYPHOON_STATUS_WAITING_FOR_SEGMENT) {
1413 				netdev_err(tp->dev, "segment ready timeout\n");
1414 				goto err_out_irq;
1415 			}
1416 
1417 			/* Do an pseudo IPv4 checksum on the data -- first
1418 			 * need to convert each u16 to cpu order before
1419 			 * summing. Fortunately, due to the properties of
1420 			 * the checksum, we can do this once, at the end.
1421 			 */
1422 			csum = csum_fold(csum_partial_copy_nocheck(image_data,
1423 								   dpage, len,
1424 								   0));
1425 
1426 			iowrite32(len, ioaddr + TYPHOON_REG_BOOT_LENGTH);
1427 			iowrite32(le16_to_cpu((__force __le16)csum),
1428 					ioaddr + TYPHOON_REG_BOOT_CHECKSUM);
1429 			iowrite32(load_addr,
1430 					ioaddr + TYPHOON_REG_BOOT_DEST_ADDR);
1431 			iowrite32(0, ioaddr + TYPHOON_REG_BOOT_DATA_HI);
1432 			iowrite32(dpage_dma, ioaddr + TYPHOON_REG_BOOT_DATA_LO);
1433 			typhoon_post_pci_writes(ioaddr);
1434 			iowrite32(TYPHOON_BOOTCMD_SEG_AVAILABLE,
1435 					ioaddr + TYPHOON_REG_COMMAND);
1436 
1437 			image_data += len;
1438 			load_addr += len;
1439 			section_len -= len;
1440 		}
1441 	}
1442 
1443 	if(typhoon_wait_interrupt(ioaddr) < 0 ||
1444 	   ioread32(ioaddr + TYPHOON_REG_STATUS) !=
1445 	   TYPHOON_STATUS_WAITING_FOR_SEGMENT) {
1446 		netdev_err(tp->dev, "final segment ready timeout\n");
1447 		goto err_out_irq;
1448 	}
1449 
1450 	iowrite32(TYPHOON_BOOTCMD_DNLD_COMPLETE, ioaddr + TYPHOON_REG_COMMAND);
1451 
1452 	if(typhoon_wait_status(ioaddr, TYPHOON_STATUS_WAITING_FOR_BOOT) < 0) {
1453 		netdev_err(tp->dev, "boot ready timeout, status 0x%0x\n",
1454 			   ioread32(ioaddr + TYPHOON_REG_STATUS));
1455 		goto err_out_irq;
1456 	}
1457 
1458 	err = 0;
1459 
1460 err_out_irq:
1461 	iowrite32(irqMasked, ioaddr + TYPHOON_REG_INTR_MASK);
1462 	iowrite32(irqEnabled, ioaddr + TYPHOON_REG_INTR_ENABLE);
1463 
1464 	pci_free_consistent(pdev, PAGE_SIZE, dpage, dpage_dma);
1465 
1466 err_out:
1467 	return err;
1468 }
1469 
1470 static int
1471 typhoon_boot_3XP(struct typhoon *tp, u32 initial_status)
1472 {
1473 	void __iomem *ioaddr = tp->ioaddr;
1474 
1475 	if(typhoon_wait_status(ioaddr, initial_status) < 0) {
1476 		netdev_err(tp->dev, "boot ready timeout\n");
1477 		goto out_timeout;
1478 	}
1479 
1480 	iowrite32(0, ioaddr + TYPHOON_REG_BOOT_RECORD_ADDR_HI);
1481 	iowrite32(tp->shared_dma, ioaddr + TYPHOON_REG_BOOT_RECORD_ADDR_LO);
1482 	typhoon_post_pci_writes(ioaddr);
1483 	iowrite32(TYPHOON_BOOTCMD_REG_BOOT_RECORD,
1484 				ioaddr + TYPHOON_REG_COMMAND);
1485 
1486 	if(typhoon_wait_status(ioaddr, TYPHOON_STATUS_RUNNING) < 0) {
1487 		netdev_err(tp->dev, "boot finish timeout (status 0x%x)\n",
1488 			   ioread32(ioaddr + TYPHOON_REG_STATUS));
1489 		goto out_timeout;
1490 	}
1491 
1492 	/* Clear the Transmit and Command ready registers
1493 	 */
1494 	iowrite32(0, ioaddr + TYPHOON_REG_TX_HI_READY);
1495 	iowrite32(0, ioaddr + TYPHOON_REG_CMD_READY);
1496 	iowrite32(0, ioaddr + TYPHOON_REG_TX_LO_READY);
1497 	typhoon_post_pci_writes(ioaddr);
1498 	iowrite32(TYPHOON_BOOTCMD_BOOT, ioaddr + TYPHOON_REG_COMMAND);
1499 
1500 	return 0;
1501 
1502 out_timeout:
1503 	return -ETIMEDOUT;
1504 }
1505 
1506 static u32
1507 typhoon_clean_tx(struct typhoon *tp, struct transmit_ring *txRing,
1508 			volatile __le32 * index)
1509 {
1510 	u32 lastRead = txRing->lastRead;
1511 	struct tx_desc *tx;
1512 	dma_addr_t skb_dma;
1513 	int dma_len;
1514 	int type;
1515 
1516 	while(lastRead != le32_to_cpu(*index)) {
1517 		tx = (struct tx_desc *) (txRing->ringBase + lastRead);
1518 		type = tx->flags & TYPHOON_TYPE_MASK;
1519 
1520 		if(type == TYPHOON_TX_DESC) {
1521 			/* This tx_desc describes a packet.
1522 			 */
1523 			unsigned long ptr = tx->tx_addr;
1524 			struct sk_buff *skb = (struct sk_buff *) ptr;
1525 			dev_kfree_skb_irq(skb);
1526 		} else if(type == TYPHOON_FRAG_DESC) {
1527 			/* This tx_desc describes a memory mapping. Free it.
1528 			 */
1529 			skb_dma = (dma_addr_t) le32_to_cpu(tx->frag.addr);
1530 			dma_len = le16_to_cpu(tx->len);
1531 			pci_unmap_single(tp->pdev, skb_dma, dma_len,
1532 				       PCI_DMA_TODEVICE);
1533 		}
1534 
1535 		tx->flags = 0;
1536 		typhoon_inc_tx_index(&lastRead, 1);
1537 	}
1538 
1539 	return lastRead;
1540 }
1541 
1542 static void
1543 typhoon_tx_complete(struct typhoon *tp, struct transmit_ring *txRing,
1544 			volatile __le32 * index)
1545 {
1546 	u32 lastRead;
1547 	int numDesc = MAX_SKB_FRAGS + 1;
1548 
1549 	/* This will need changing if we start to use the Hi Tx ring. */
1550 	lastRead = typhoon_clean_tx(tp, txRing, index);
1551 	if(netif_queue_stopped(tp->dev) && typhoon_num_free(txRing->lastWrite,
1552 				lastRead, TXLO_ENTRIES) > (numDesc + 2))
1553 		netif_wake_queue(tp->dev);
1554 
1555 	txRing->lastRead = lastRead;
1556 	smp_wmb();
1557 }
1558 
1559 static void
1560 typhoon_recycle_rx_skb(struct typhoon *tp, u32 idx)
1561 {
1562 	struct typhoon_indexes *indexes = tp->indexes;
1563 	struct rxbuff_ent *rxb = &tp->rxbuffers[idx];
1564 	struct basic_ring *ring = &tp->rxBuffRing;
1565 	struct rx_free *r;
1566 
1567 	if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) ==
1568 				le32_to_cpu(indexes->rxBuffCleared)) {
1569 		/* no room in ring, just drop the skb
1570 		 */
1571 		dev_kfree_skb_any(rxb->skb);
1572 		rxb->skb = NULL;
1573 		return;
1574 	}
1575 
1576 	r = (struct rx_free *) (ring->ringBase + ring->lastWrite);
1577 	typhoon_inc_rxfree_index(&ring->lastWrite, 1);
1578 	r->virtAddr = idx;
1579 	r->physAddr = cpu_to_le32(rxb->dma_addr);
1580 
1581 	/* Tell the card about it */
1582 	wmb();
1583 	indexes->rxBuffReady = cpu_to_le32(ring->lastWrite);
1584 }
1585 
1586 static int
1587 typhoon_alloc_rx_skb(struct typhoon *tp, u32 idx)
1588 {
1589 	struct typhoon_indexes *indexes = tp->indexes;
1590 	struct rxbuff_ent *rxb = &tp->rxbuffers[idx];
1591 	struct basic_ring *ring = &tp->rxBuffRing;
1592 	struct rx_free *r;
1593 	struct sk_buff *skb;
1594 	dma_addr_t dma_addr;
1595 
1596 	rxb->skb = NULL;
1597 
1598 	if((ring->lastWrite + sizeof(*r)) % (RXFREE_ENTRIES * sizeof(*r)) ==
1599 				le32_to_cpu(indexes->rxBuffCleared))
1600 		return -ENOMEM;
1601 
1602 	skb = netdev_alloc_skb(tp->dev, PKT_BUF_SZ);
1603 	if(!skb)
1604 		return -ENOMEM;
1605 
1606 #if 0
1607 	/* Please, 3com, fix the firmware to allow DMA to a unaligned
1608 	 * address! Pretty please?
1609 	 */
1610 	skb_reserve(skb, 2);
1611 #endif
1612 
1613 	dma_addr = pci_map_single(tp->pdev, skb->data,
1614 				  PKT_BUF_SZ, PCI_DMA_FROMDEVICE);
1615 
1616 	/* Since no card does 64 bit DAC, the high bits will never
1617 	 * change from zero.
1618 	 */
1619 	r = (struct rx_free *) (ring->ringBase + ring->lastWrite);
1620 	typhoon_inc_rxfree_index(&ring->lastWrite, 1);
1621 	r->virtAddr = idx;
1622 	r->physAddr = cpu_to_le32(dma_addr);
1623 	rxb->skb = skb;
1624 	rxb->dma_addr = dma_addr;
1625 
1626 	/* Tell the card about it */
1627 	wmb();
1628 	indexes->rxBuffReady = cpu_to_le32(ring->lastWrite);
1629 	return 0;
1630 }
1631 
1632 static int
1633 typhoon_rx(struct typhoon *tp, struct basic_ring *rxRing, volatile __le32 * ready,
1634 	   volatile __le32 * cleared, int budget)
1635 {
1636 	struct rx_desc *rx;
1637 	struct sk_buff *skb, *new_skb;
1638 	struct rxbuff_ent *rxb;
1639 	dma_addr_t dma_addr;
1640 	u32 local_ready;
1641 	u32 rxaddr;
1642 	int pkt_len;
1643 	u32 idx;
1644 	__le32 csum_bits;
1645 	int received;
1646 
1647 	received = 0;
1648 	local_ready = le32_to_cpu(*ready);
1649 	rxaddr = le32_to_cpu(*cleared);
1650 	while(rxaddr != local_ready && budget > 0) {
1651 		rx = (struct rx_desc *) (rxRing->ringBase + rxaddr);
1652 		idx = rx->addr;
1653 		rxb = &tp->rxbuffers[idx];
1654 		skb = rxb->skb;
1655 		dma_addr = rxb->dma_addr;
1656 
1657 		typhoon_inc_rx_index(&rxaddr, 1);
1658 
1659 		if(rx->flags & TYPHOON_RX_ERROR) {
1660 			typhoon_recycle_rx_skb(tp, idx);
1661 			continue;
1662 		}
1663 
1664 		pkt_len = le16_to_cpu(rx->frameLen);
1665 
1666 		if(pkt_len < rx_copybreak &&
1667 		   (new_skb = netdev_alloc_skb(tp->dev, pkt_len + 2)) != NULL) {
1668 			skb_reserve(new_skb, 2);
1669 			pci_dma_sync_single_for_cpu(tp->pdev, dma_addr,
1670 						    PKT_BUF_SZ,
1671 						    PCI_DMA_FROMDEVICE);
1672 			skb_copy_to_linear_data(new_skb, skb->data, pkt_len);
1673 			pci_dma_sync_single_for_device(tp->pdev, dma_addr,
1674 						       PKT_BUF_SZ,
1675 						       PCI_DMA_FROMDEVICE);
1676 			skb_put(new_skb, pkt_len);
1677 			typhoon_recycle_rx_skb(tp, idx);
1678 		} else {
1679 			new_skb = skb;
1680 			skb_put(new_skb, pkt_len);
1681 			pci_unmap_single(tp->pdev, dma_addr, PKT_BUF_SZ,
1682 				       PCI_DMA_FROMDEVICE);
1683 			typhoon_alloc_rx_skb(tp, idx);
1684 		}
1685 		new_skb->protocol = eth_type_trans(new_skb, tp->dev);
1686 		csum_bits = rx->rxStatus & (TYPHOON_RX_IP_CHK_GOOD |
1687 			TYPHOON_RX_UDP_CHK_GOOD | TYPHOON_RX_TCP_CHK_GOOD);
1688 		if(csum_bits ==
1689 		   (TYPHOON_RX_IP_CHK_GOOD | TYPHOON_RX_TCP_CHK_GOOD) ||
1690 		   csum_bits ==
1691 		   (TYPHOON_RX_IP_CHK_GOOD | TYPHOON_RX_UDP_CHK_GOOD)) {
1692 			new_skb->ip_summed = CHECKSUM_UNNECESSARY;
1693 		} else
1694 			skb_checksum_none_assert(new_skb);
1695 
1696 		if (rx->rxStatus & TYPHOON_RX_VLAN)
1697 			__vlan_hwaccel_put_tag(new_skb, htons(ETH_P_8021Q),
1698 					       ntohl(rx->vlanTag) & 0xffff);
1699 		netif_receive_skb(new_skb);
1700 
1701 		received++;
1702 		budget--;
1703 	}
1704 	*cleared = cpu_to_le32(rxaddr);
1705 
1706 	return received;
1707 }
1708 
1709 static void
1710 typhoon_fill_free_ring(struct typhoon *tp)
1711 {
1712 	u32 i;
1713 
1714 	for(i = 0; i < RXENT_ENTRIES; i++) {
1715 		struct rxbuff_ent *rxb = &tp->rxbuffers[i];
1716 		if(rxb->skb)
1717 			continue;
1718 		if(typhoon_alloc_rx_skb(tp, i) < 0)
1719 			break;
1720 	}
1721 }
1722 
1723 static int
1724 typhoon_poll(struct napi_struct *napi, int budget)
1725 {
1726 	struct typhoon *tp = container_of(napi, struct typhoon, napi);
1727 	struct typhoon_indexes *indexes = tp->indexes;
1728 	int work_done;
1729 
1730 	rmb();
1731 	if(!tp->awaiting_resp && indexes->respReady != indexes->respCleared)
1732 			typhoon_process_response(tp, 0, NULL);
1733 
1734 	if(le32_to_cpu(indexes->txLoCleared) != tp->txLoRing.lastRead)
1735 		typhoon_tx_complete(tp, &tp->txLoRing, &indexes->txLoCleared);
1736 
1737 	work_done = 0;
1738 
1739 	if(indexes->rxHiCleared != indexes->rxHiReady) {
1740 		work_done += typhoon_rx(tp, &tp->rxHiRing, &indexes->rxHiReady,
1741 			   		&indexes->rxHiCleared, budget);
1742 	}
1743 
1744 	if(indexes->rxLoCleared != indexes->rxLoReady) {
1745 		work_done += typhoon_rx(tp, &tp->rxLoRing, &indexes->rxLoReady,
1746 					&indexes->rxLoCleared, budget - work_done);
1747 	}
1748 
1749 	if(le32_to_cpu(indexes->rxBuffCleared) == tp->rxBuffRing.lastWrite) {
1750 		/* rxBuff ring is empty, try to fill it. */
1751 		typhoon_fill_free_ring(tp);
1752 	}
1753 
1754 	if (work_done < budget) {
1755 		napi_complete_done(napi, work_done);
1756 		iowrite32(TYPHOON_INTR_NONE,
1757 				tp->ioaddr + TYPHOON_REG_INTR_MASK);
1758 		typhoon_post_pci_writes(tp->ioaddr);
1759 	}
1760 
1761 	return work_done;
1762 }
1763 
1764 static irqreturn_t
1765 typhoon_interrupt(int irq, void *dev_instance)
1766 {
1767 	struct net_device *dev = dev_instance;
1768 	struct typhoon *tp = netdev_priv(dev);
1769 	void __iomem *ioaddr = tp->ioaddr;
1770 	u32 intr_status;
1771 
1772 	intr_status = ioread32(ioaddr + TYPHOON_REG_INTR_STATUS);
1773 	if(!(intr_status & TYPHOON_INTR_HOST_INT))
1774 		return IRQ_NONE;
1775 
1776 	iowrite32(intr_status, ioaddr + TYPHOON_REG_INTR_STATUS);
1777 
1778 	if (napi_schedule_prep(&tp->napi)) {
1779 		iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_MASK);
1780 		typhoon_post_pci_writes(ioaddr);
1781 		__napi_schedule(&tp->napi);
1782 	} else {
1783 		netdev_err(dev, "Error, poll already scheduled\n");
1784 	}
1785 	return IRQ_HANDLED;
1786 }
1787 
1788 static void
1789 typhoon_free_rx_rings(struct typhoon *tp)
1790 {
1791 	u32 i;
1792 
1793 	for(i = 0; i < RXENT_ENTRIES; i++) {
1794 		struct rxbuff_ent *rxb = &tp->rxbuffers[i];
1795 		if(rxb->skb) {
1796 			pci_unmap_single(tp->pdev, rxb->dma_addr, PKT_BUF_SZ,
1797 				       PCI_DMA_FROMDEVICE);
1798 			dev_kfree_skb(rxb->skb);
1799 			rxb->skb = NULL;
1800 		}
1801 	}
1802 }
1803 
1804 static int
1805 typhoon_sleep(struct typhoon *tp, pci_power_t state, __le16 events)
1806 {
1807 	struct pci_dev *pdev = tp->pdev;
1808 	void __iomem *ioaddr = tp->ioaddr;
1809 	struct cmd_desc xp_cmd;
1810 	int err;
1811 
1812 	INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_ENABLE_WAKE_EVENTS);
1813 	xp_cmd.parm1 = events;
1814 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1815 	if(err < 0) {
1816 		netdev_err(tp->dev, "typhoon_sleep(): wake events cmd err %d\n",
1817 			   err);
1818 		return err;
1819 	}
1820 
1821 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_GOTO_SLEEP);
1822 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1823 	if(err < 0) {
1824 		netdev_err(tp->dev, "typhoon_sleep(): sleep cmd err %d\n", err);
1825 		return err;
1826 	}
1827 
1828 	if(typhoon_wait_status(ioaddr, TYPHOON_STATUS_SLEEPING) < 0)
1829 		return -ETIMEDOUT;
1830 
1831 	/* Since we cannot monitor the status of the link while sleeping,
1832 	 * tell the world it went away.
1833 	 */
1834 	netif_carrier_off(tp->dev);
1835 
1836 	pci_enable_wake(tp->pdev, state, 1);
1837 	pci_disable_device(pdev);
1838 	return pci_set_power_state(pdev, state);
1839 }
1840 
1841 static int
1842 typhoon_wakeup(struct typhoon *tp, int wait_type)
1843 {
1844 	struct pci_dev *pdev = tp->pdev;
1845 	void __iomem *ioaddr = tp->ioaddr;
1846 
1847 	pci_set_power_state(pdev, PCI_D0);
1848 	pci_restore_state(pdev);
1849 
1850 	/* Post 2.x.x versions of the Sleep Image require a reset before
1851 	 * we can download the Runtime Image. But let's not make users of
1852 	 * the old firmware pay for the reset.
1853 	 */
1854 	iowrite32(TYPHOON_BOOTCMD_WAKEUP, ioaddr + TYPHOON_REG_COMMAND);
1855 	if(typhoon_wait_status(ioaddr, TYPHOON_STATUS_WAITING_FOR_HOST) < 0 ||
1856 			(tp->capabilities & TYPHOON_WAKEUP_NEEDS_RESET))
1857 		return typhoon_reset(ioaddr, wait_type);
1858 
1859 	return 0;
1860 }
1861 
1862 static int
1863 typhoon_start_runtime(struct typhoon *tp)
1864 {
1865 	struct net_device *dev = tp->dev;
1866 	void __iomem *ioaddr = tp->ioaddr;
1867 	struct cmd_desc xp_cmd;
1868 	int err;
1869 
1870 	typhoon_init_rings(tp);
1871 	typhoon_fill_free_ring(tp);
1872 
1873 	err = typhoon_download_firmware(tp);
1874 	if(err < 0) {
1875 		netdev_err(tp->dev, "cannot load runtime on 3XP\n");
1876 		goto error_out;
1877 	}
1878 
1879 	if(typhoon_boot_3XP(tp, TYPHOON_STATUS_WAITING_FOR_BOOT) < 0) {
1880 		netdev_err(tp->dev, "cannot boot 3XP\n");
1881 		err = -EIO;
1882 		goto error_out;
1883 	}
1884 
1885 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_SET_MAX_PKT_SIZE);
1886 	xp_cmd.parm1 = cpu_to_le16(PKT_BUF_SZ);
1887 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1888 	if(err < 0)
1889 		goto error_out;
1890 
1891 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_SET_MAC_ADDRESS);
1892 	xp_cmd.parm1 = cpu_to_le16(ntohs(*(__be16 *)&dev->dev_addr[0]));
1893 	xp_cmd.parm2 = cpu_to_le32(ntohl(*(__be32 *)&dev->dev_addr[2]));
1894 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1895 	if(err < 0)
1896 		goto error_out;
1897 
1898 	/* Disable IRQ coalescing -- we can reenable it when 3Com gives
1899 	 * us some more information on how to control it.
1900 	 */
1901 	INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_IRQ_COALESCE_CTRL);
1902 	xp_cmd.parm1 = 0;
1903 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1904 	if(err < 0)
1905 		goto error_out;
1906 
1907 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_XCVR_SELECT);
1908 	xp_cmd.parm1 = tp->xcvr_select;
1909 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1910 	if(err < 0)
1911 		goto error_out;
1912 
1913 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_VLAN_TYPE_WRITE);
1914 	xp_cmd.parm1 = cpu_to_le16(ETH_P_8021Q);
1915 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1916 	if(err < 0)
1917 		goto error_out;
1918 
1919 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_SET_OFFLOAD_TASKS);
1920 	xp_cmd.parm2 = tp->offload;
1921 	xp_cmd.parm3 = tp->offload;
1922 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1923 	if(err < 0)
1924 		goto error_out;
1925 
1926 	typhoon_set_rx_mode(dev);
1927 
1928 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_TX_ENABLE);
1929 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1930 	if(err < 0)
1931 		goto error_out;
1932 
1933 	INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_RX_ENABLE);
1934 	err = typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1935 	if(err < 0)
1936 		goto error_out;
1937 
1938 	tp->card_state = Running;
1939 	smp_wmb();
1940 
1941 	iowrite32(TYPHOON_INTR_ENABLE_ALL, ioaddr + TYPHOON_REG_INTR_ENABLE);
1942 	iowrite32(TYPHOON_INTR_NONE, ioaddr + TYPHOON_REG_INTR_MASK);
1943 	typhoon_post_pci_writes(ioaddr);
1944 
1945 	return 0;
1946 
1947 error_out:
1948 	typhoon_reset(ioaddr, WaitNoSleep);
1949 	typhoon_free_rx_rings(tp);
1950 	typhoon_init_rings(tp);
1951 	return err;
1952 }
1953 
1954 static int
1955 typhoon_stop_runtime(struct typhoon *tp, int wait_type)
1956 {
1957 	struct typhoon_indexes *indexes = tp->indexes;
1958 	struct transmit_ring *txLo = &tp->txLoRing;
1959 	void __iomem *ioaddr = tp->ioaddr;
1960 	struct cmd_desc xp_cmd;
1961 	int i;
1962 
1963 	/* Disable interrupts early, since we can't schedule a poll
1964 	 * when called with !netif_running(). This will be posted
1965 	 * when we force the posting of the command.
1966 	 */
1967 	iowrite32(TYPHOON_INTR_NONE, ioaddr + TYPHOON_REG_INTR_ENABLE);
1968 
1969 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_RX_DISABLE);
1970 	typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1971 
1972 	/* Wait 1/2 sec for any outstanding transmits to occur
1973 	 * We'll cleanup after the reset if this times out.
1974 	 */
1975 	for(i = 0; i < TYPHOON_WAIT_TIMEOUT; i++) {
1976 		if(indexes->txLoCleared == cpu_to_le32(txLo->lastWrite))
1977 			break;
1978 		udelay(TYPHOON_UDELAY);
1979 	}
1980 
1981 	if(i == TYPHOON_WAIT_TIMEOUT)
1982 		netdev_err(tp->dev, "halt timed out waiting for Tx to complete\n");
1983 
1984 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_TX_DISABLE);
1985 	typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1986 
1987 	/* save the statistics so when we bring the interface up again,
1988 	 * the values reported to userspace are correct.
1989 	 */
1990 	tp->card_state = Sleeping;
1991 	smp_wmb();
1992 	typhoon_do_get_stats(tp);
1993 	memcpy(&tp->stats_saved, &tp->dev->stats, sizeof(struct net_device_stats));
1994 
1995 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_HALT);
1996 	typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL);
1997 
1998 	if(typhoon_wait_status(ioaddr, TYPHOON_STATUS_HALTED) < 0)
1999 		netdev_err(tp->dev, "timed out waiting for 3XP to halt\n");
2000 
2001 	if(typhoon_reset(ioaddr, wait_type) < 0) {
2002 		netdev_err(tp->dev, "unable to reset 3XP\n");
2003 		return -ETIMEDOUT;
2004 	}
2005 
2006 	/* cleanup any outstanding Tx packets */
2007 	if(indexes->txLoCleared != cpu_to_le32(txLo->lastWrite)) {
2008 		indexes->txLoCleared = cpu_to_le32(txLo->lastWrite);
2009 		typhoon_clean_tx(tp, &tp->txLoRing, &indexes->txLoCleared);
2010 	}
2011 
2012 	return 0;
2013 }
2014 
2015 static void
2016 typhoon_tx_timeout(struct net_device *dev, unsigned int txqueue)
2017 {
2018 	struct typhoon *tp = netdev_priv(dev);
2019 
2020 	if(typhoon_reset(tp->ioaddr, WaitNoSleep) < 0) {
2021 		netdev_warn(dev, "could not reset in tx timeout\n");
2022 		goto truly_dead;
2023 	}
2024 
2025 	/* If we ever start using the Hi ring, it will need cleaning too */
2026 	typhoon_clean_tx(tp, &tp->txLoRing, &tp->indexes->txLoCleared);
2027 	typhoon_free_rx_rings(tp);
2028 
2029 	if(typhoon_start_runtime(tp) < 0) {
2030 		netdev_err(dev, "could not start runtime in tx timeout\n");
2031 		goto truly_dead;
2032         }
2033 
2034 	netif_wake_queue(dev);
2035 	return;
2036 
2037 truly_dead:
2038 	/* Reset the hardware, and turn off carrier to avoid more timeouts */
2039 	typhoon_reset(tp->ioaddr, NoWait);
2040 	netif_carrier_off(dev);
2041 }
2042 
2043 static int
2044 typhoon_open(struct net_device *dev)
2045 {
2046 	struct typhoon *tp = netdev_priv(dev);
2047 	int err;
2048 
2049 	err = typhoon_request_firmware(tp);
2050 	if (err)
2051 		goto out;
2052 
2053 	err = typhoon_wakeup(tp, WaitSleep);
2054 	if(err < 0) {
2055 		netdev_err(dev, "unable to wakeup device\n");
2056 		goto out_sleep;
2057 	}
2058 
2059 	err = request_irq(dev->irq, typhoon_interrupt, IRQF_SHARED,
2060 				dev->name, dev);
2061 	if(err < 0)
2062 		goto out_sleep;
2063 
2064 	napi_enable(&tp->napi);
2065 
2066 	err = typhoon_start_runtime(tp);
2067 	if(err < 0) {
2068 		napi_disable(&tp->napi);
2069 		goto out_irq;
2070 	}
2071 
2072 	netif_start_queue(dev);
2073 	return 0;
2074 
2075 out_irq:
2076 	free_irq(dev->irq, dev);
2077 
2078 out_sleep:
2079 	if(typhoon_boot_3XP(tp, TYPHOON_STATUS_WAITING_FOR_HOST) < 0) {
2080 		netdev_err(dev, "unable to reboot into sleep img\n");
2081 		typhoon_reset(tp->ioaddr, NoWait);
2082 		goto out;
2083 	}
2084 
2085 	if(typhoon_sleep(tp, PCI_D3hot, 0) < 0)
2086 		netdev_err(dev, "unable to go back to sleep\n");
2087 
2088 out:
2089 	return err;
2090 }
2091 
2092 static int
2093 typhoon_close(struct net_device *dev)
2094 {
2095 	struct typhoon *tp = netdev_priv(dev);
2096 
2097 	netif_stop_queue(dev);
2098 	napi_disable(&tp->napi);
2099 
2100 	if(typhoon_stop_runtime(tp, WaitSleep) < 0)
2101 		netdev_err(dev, "unable to stop runtime\n");
2102 
2103 	/* Make sure there is no irq handler running on a different CPU. */
2104 	free_irq(dev->irq, dev);
2105 
2106 	typhoon_free_rx_rings(tp);
2107 	typhoon_init_rings(tp);
2108 
2109 	if(typhoon_boot_3XP(tp, TYPHOON_STATUS_WAITING_FOR_HOST) < 0)
2110 		netdev_err(dev, "unable to boot sleep image\n");
2111 
2112 	if(typhoon_sleep(tp, PCI_D3hot, 0) < 0)
2113 		netdev_err(dev, "unable to put card to sleep\n");
2114 
2115 	return 0;
2116 }
2117 
2118 #ifdef CONFIG_PM
2119 static int
2120 typhoon_resume(struct pci_dev *pdev)
2121 {
2122 	struct net_device *dev = pci_get_drvdata(pdev);
2123 	struct typhoon *tp = netdev_priv(dev);
2124 
2125 	/* If we're down, resume when we are upped.
2126 	 */
2127 	if(!netif_running(dev))
2128 		return 0;
2129 
2130 	if(typhoon_wakeup(tp, WaitNoSleep) < 0) {
2131 		netdev_err(dev, "critical: could not wake up in resume\n");
2132 		goto reset;
2133 	}
2134 
2135 	if(typhoon_start_runtime(tp) < 0) {
2136 		netdev_err(dev, "critical: could not start runtime in resume\n");
2137 		goto reset;
2138 	}
2139 
2140 	netif_device_attach(dev);
2141 	return 0;
2142 
2143 reset:
2144 	typhoon_reset(tp->ioaddr, NoWait);
2145 	return -EBUSY;
2146 }
2147 
2148 static int
2149 typhoon_suspend(struct pci_dev *pdev, pm_message_t state)
2150 {
2151 	struct net_device *dev = pci_get_drvdata(pdev);
2152 	struct typhoon *tp = netdev_priv(dev);
2153 	struct cmd_desc xp_cmd;
2154 
2155 	/* If we're down, we're already suspended.
2156 	 */
2157 	if(!netif_running(dev))
2158 		return 0;
2159 
2160 	/* TYPHOON_OFFLOAD_VLAN is always on now, so this doesn't work */
2161 	if(tp->wol_events & TYPHOON_WAKE_MAGIC_PKT)
2162 		netdev_warn(dev, "cannot do WAKE_MAGIC with VLAN offloading\n");
2163 
2164 	netif_device_detach(dev);
2165 
2166 	if(typhoon_stop_runtime(tp, WaitNoSleep) < 0) {
2167 		netdev_err(dev, "unable to stop runtime\n");
2168 		goto need_resume;
2169 	}
2170 
2171 	typhoon_free_rx_rings(tp);
2172 	typhoon_init_rings(tp);
2173 
2174 	if(typhoon_boot_3XP(tp, TYPHOON_STATUS_WAITING_FOR_HOST) < 0) {
2175 		netdev_err(dev, "unable to boot sleep image\n");
2176 		goto need_resume;
2177 	}
2178 
2179 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_SET_MAC_ADDRESS);
2180 	xp_cmd.parm1 = cpu_to_le16(ntohs(*(__be16 *)&dev->dev_addr[0]));
2181 	xp_cmd.parm2 = cpu_to_le32(ntohl(*(__be32 *)&dev->dev_addr[2]));
2182 	if(typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL) < 0) {
2183 		netdev_err(dev, "unable to set mac address in suspend\n");
2184 		goto need_resume;
2185 	}
2186 
2187 	INIT_COMMAND_NO_RESPONSE(&xp_cmd, TYPHOON_CMD_SET_RX_FILTER);
2188 	xp_cmd.parm1 = TYPHOON_RX_FILTER_DIRECTED | TYPHOON_RX_FILTER_BROADCAST;
2189 	if(typhoon_issue_command(tp, 1, &xp_cmd, 0, NULL) < 0) {
2190 		netdev_err(dev, "unable to set rx filter in suspend\n");
2191 		goto need_resume;
2192 	}
2193 
2194 	if(typhoon_sleep(tp, pci_choose_state(pdev, state), tp->wol_events) < 0) {
2195 		netdev_err(dev, "unable to put card to sleep\n");
2196 		goto need_resume;
2197 	}
2198 
2199 	return 0;
2200 
2201 need_resume:
2202 	typhoon_resume(pdev);
2203 	return -EBUSY;
2204 }
2205 #endif
2206 
2207 static int
2208 typhoon_test_mmio(struct pci_dev *pdev)
2209 {
2210 	void __iomem *ioaddr = pci_iomap(pdev, 1, 128);
2211 	int mode = 0;
2212 	u32 val;
2213 
2214 	if(!ioaddr)
2215 		goto out;
2216 
2217 	if(ioread32(ioaddr + TYPHOON_REG_STATUS) !=
2218 				TYPHOON_STATUS_WAITING_FOR_HOST)
2219 		goto out_unmap;
2220 
2221 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_MASK);
2222 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_STATUS);
2223 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_ENABLE);
2224 
2225 	/* Ok, see if we can change our interrupt status register by
2226 	 * sending ourselves an interrupt. If so, then MMIO works.
2227 	 * The 50usec delay is arbitrary -- it could probably be smaller.
2228 	 */
2229 	val = ioread32(ioaddr + TYPHOON_REG_INTR_STATUS);
2230 	if((val & TYPHOON_INTR_SELF) == 0) {
2231 		iowrite32(1, ioaddr + TYPHOON_REG_SELF_INTERRUPT);
2232 		ioread32(ioaddr + TYPHOON_REG_INTR_STATUS);
2233 		udelay(50);
2234 		val = ioread32(ioaddr + TYPHOON_REG_INTR_STATUS);
2235 		if(val & TYPHOON_INTR_SELF)
2236 			mode = 1;
2237 	}
2238 
2239 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_MASK);
2240 	iowrite32(TYPHOON_INTR_ALL, ioaddr + TYPHOON_REG_INTR_STATUS);
2241 	iowrite32(TYPHOON_INTR_NONE, ioaddr + TYPHOON_REG_INTR_ENABLE);
2242 	ioread32(ioaddr + TYPHOON_REG_INTR_STATUS);
2243 
2244 out_unmap:
2245 	pci_iounmap(pdev, ioaddr);
2246 
2247 out:
2248 	if(!mode)
2249 		pr_info("%s: falling back to port IO\n", pci_name(pdev));
2250 	return mode;
2251 }
2252 
2253 static const struct net_device_ops typhoon_netdev_ops = {
2254 	.ndo_open		= typhoon_open,
2255 	.ndo_stop		= typhoon_close,
2256 	.ndo_start_xmit		= typhoon_start_tx,
2257 	.ndo_set_rx_mode	= typhoon_set_rx_mode,
2258 	.ndo_tx_timeout		= typhoon_tx_timeout,
2259 	.ndo_get_stats		= typhoon_get_stats,
2260 	.ndo_validate_addr	= eth_validate_addr,
2261 	.ndo_set_mac_address	= eth_mac_addr,
2262 };
2263 
2264 static int
2265 typhoon_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
2266 {
2267 	struct net_device *dev;
2268 	struct typhoon *tp;
2269 	int card_id = (int) ent->driver_data;
2270 	void __iomem *ioaddr;
2271 	void *shared;
2272 	dma_addr_t shared_dma;
2273 	struct cmd_desc xp_cmd;
2274 	struct resp_desc xp_resp[3];
2275 	int err = 0;
2276 	const char *err_msg;
2277 
2278 	dev = alloc_etherdev(sizeof(*tp));
2279 	if(dev == NULL) {
2280 		err_msg = "unable to alloc new net device";
2281 		err = -ENOMEM;
2282 		goto error_out;
2283 	}
2284 	SET_NETDEV_DEV(dev, &pdev->dev);
2285 
2286 	err = pci_enable_device(pdev);
2287 	if(err < 0) {
2288 		err_msg = "unable to enable device";
2289 		goto error_out_dev;
2290 	}
2291 
2292 	err = pci_set_mwi(pdev);
2293 	if(err < 0) {
2294 		err_msg = "unable to set MWI";
2295 		goto error_out_disable;
2296 	}
2297 
2298 	err = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
2299 	if(err < 0) {
2300 		err_msg = "No usable DMA configuration";
2301 		goto error_out_mwi;
2302 	}
2303 
2304 	/* sanity checks on IO and MMIO BARs
2305 	 */
2306 	if(!(pci_resource_flags(pdev, 0) & IORESOURCE_IO)) {
2307 		err_msg = "region #1 not a PCI IO resource, aborting";
2308 		err = -ENODEV;
2309 		goto error_out_mwi;
2310 	}
2311 	if(pci_resource_len(pdev, 0) < 128) {
2312 		err_msg = "Invalid PCI IO region size, aborting";
2313 		err = -ENODEV;
2314 		goto error_out_mwi;
2315 	}
2316 	if(!(pci_resource_flags(pdev, 1) & IORESOURCE_MEM)) {
2317 		err_msg = "region #1 not a PCI MMIO resource, aborting";
2318 		err = -ENODEV;
2319 		goto error_out_mwi;
2320 	}
2321 	if(pci_resource_len(pdev, 1) < 128) {
2322 		err_msg = "Invalid PCI MMIO region size, aborting";
2323 		err = -ENODEV;
2324 		goto error_out_mwi;
2325 	}
2326 
2327 	err = pci_request_regions(pdev, KBUILD_MODNAME);
2328 	if(err < 0) {
2329 		err_msg = "could not request regions";
2330 		goto error_out_mwi;
2331 	}
2332 
2333 	/* map our registers
2334 	 */
2335 	if(use_mmio != 0 && use_mmio != 1)
2336 		use_mmio = typhoon_test_mmio(pdev);
2337 
2338 	ioaddr = pci_iomap(pdev, use_mmio, 128);
2339 	if (!ioaddr) {
2340 		err_msg = "cannot remap registers, aborting";
2341 		err = -EIO;
2342 		goto error_out_regions;
2343 	}
2344 
2345 	/* allocate pci dma space for rx and tx descriptor rings
2346 	 */
2347 	shared = pci_alloc_consistent(pdev, sizeof(struct typhoon_shared),
2348 				      &shared_dma);
2349 	if(!shared) {
2350 		err_msg = "could not allocate DMA memory";
2351 		err = -ENOMEM;
2352 		goto error_out_remap;
2353 	}
2354 
2355 	dev->irq = pdev->irq;
2356 	tp = netdev_priv(dev);
2357 	tp->shared = shared;
2358 	tp->shared_dma = shared_dma;
2359 	tp->pdev = pdev;
2360 	tp->tx_pdev = pdev;
2361 	tp->ioaddr = ioaddr;
2362 	tp->tx_ioaddr = ioaddr;
2363 	tp->dev = dev;
2364 
2365 	/* Init sequence:
2366 	 * 1) Reset the adapter to clear any bad juju
2367 	 * 2) Reload the sleep image
2368 	 * 3) Boot the sleep image
2369 	 * 4) Get the hardware address.
2370 	 * 5) Put the card to sleep.
2371 	 */
2372 	err = typhoon_reset(ioaddr, WaitSleep);
2373 	if (err < 0) {
2374 		err_msg = "could not reset 3XP";
2375 		goto error_out_dma;
2376 	}
2377 
2378 	/* Now that we've reset the 3XP and are sure it's not going to
2379 	 * write all over memory, enable bus mastering, and save our
2380 	 * state for resuming after a suspend.
2381 	 */
2382 	pci_set_master(pdev);
2383 	pci_save_state(pdev);
2384 
2385 	typhoon_init_interface(tp);
2386 	typhoon_init_rings(tp);
2387 
2388 	err = typhoon_boot_3XP(tp, TYPHOON_STATUS_WAITING_FOR_HOST);
2389 	if (err < 0) {
2390 		err_msg = "cannot boot 3XP sleep image";
2391 		goto error_out_reset;
2392 	}
2393 
2394 	INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_READ_MAC_ADDRESS);
2395 	err = typhoon_issue_command(tp, 1, &xp_cmd, 1, xp_resp);
2396 	if (err < 0) {
2397 		err_msg = "cannot read MAC address";
2398 		goto error_out_reset;
2399 	}
2400 
2401 	*(__be16 *)&dev->dev_addr[0] = htons(le16_to_cpu(xp_resp[0].parm1));
2402 	*(__be32 *)&dev->dev_addr[2] = htonl(le32_to_cpu(xp_resp[0].parm2));
2403 
2404 	if (!is_valid_ether_addr(dev->dev_addr)) {
2405 		err_msg = "Could not obtain valid ethernet address, aborting";
2406 		err = -EIO;
2407 		goto error_out_reset;
2408 	}
2409 
2410 	/* Read the Sleep Image version last, so the response is valid
2411 	 * later when we print out the version reported.
2412 	 */
2413 	INIT_COMMAND_WITH_RESPONSE(&xp_cmd, TYPHOON_CMD_READ_VERSIONS);
2414 	err = typhoon_issue_command(tp, 1, &xp_cmd, 3, xp_resp);
2415 	if (err < 0) {
2416 		err_msg = "Could not get Sleep Image version";
2417 		goto error_out_reset;
2418 	}
2419 
2420 	tp->capabilities = typhoon_card_info[card_id].capabilities;
2421 	tp->xcvr_select = TYPHOON_XCVR_AUTONEG;
2422 
2423 	/* Typhoon 1.0 Sleep Images return one response descriptor to the
2424 	 * READ_VERSIONS command. Those versions are OK after waking up
2425 	 * from sleep without needing a reset. Typhoon 1.1+ Sleep Images
2426 	 * seem to need a little extra help to get started. Since we don't
2427 	 * know how to nudge it along, just kick it.
2428 	 */
2429 	if(xp_resp[0].numDesc != 0)
2430 		tp->capabilities |= TYPHOON_WAKEUP_NEEDS_RESET;
2431 
2432 	err = typhoon_sleep(tp, PCI_D3hot, 0);
2433 	if (err < 0) {
2434 		err_msg = "cannot put adapter to sleep";
2435 		goto error_out_reset;
2436 	}
2437 
2438 	/* The chip-specific entries in the device structure. */
2439 	dev->netdev_ops		= &typhoon_netdev_ops;
2440 	netif_napi_add(dev, &tp->napi, typhoon_poll, 16);
2441 	dev->watchdog_timeo	= TX_TIMEOUT;
2442 
2443 	dev->ethtool_ops = &typhoon_ethtool_ops;
2444 
2445 	/* We can handle scatter gather, up to 16 entries, and
2446 	 * we can do IP checksumming (only version 4, doh...)
2447 	 *
2448 	 * There's no way to turn off the RX VLAN offloading and stripping
2449 	 * on the current 3XP firmware -- it does not respect the offload
2450 	 * settings -- so we only allow the user to toggle the TX processing.
2451 	 */
2452 	dev->hw_features = NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_TSO |
2453 		NETIF_F_HW_VLAN_CTAG_TX;
2454 	dev->features = dev->hw_features |
2455 		NETIF_F_HW_VLAN_CTAG_RX | NETIF_F_RXCSUM;
2456 
2457 	err = register_netdev(dev);
2458 	if (err < 0) {
2459 		err_msg = "unable to register netdev";
2460 		goto error_out_reset;
2461 	}
2462 
2463 	pci_set_drvdata(pdev, dev);
2464 
2465 	netdev_info(dev, "%s at %s 0x%llx, %pM\n",
2466 		    typhoon_card_info[card_id].name,
2467 		    use_mmio ? "MMIO" : "IO",
2468 		    (unsigned long long)pci_resource_start(pdev, use_mmio),
2469 		    dev->dev_addr);
2470 
2471 	/* xp_resp still contains the response to the READ_VERSIONS command.
2472 	 * For debugging, let the user know what version he has.
2473 	 */
2474 	if(xp_resp[0].numDesc == 0) {
2475 		/* This is the Typhoon 1.0 type Sleep Image, last 16 bits
2476 		 * of version is Month/Day of build.
2477 		 */
2478 		u16 monthday = le32_to_cpu(xp_resp[0].parm2) & 0xffff;
2479 		netdev_info(dev, "Typhoon 1.0 Sleep Image built %02u/%02u/2000\n",
2480 			    monthday >> 8, monthday & 0xff);
2481 	} else if(xp_resp[0].numDesc == 2) {
2482 		/* This is the Typhoon 1.1+ type Sleep Image
2483 		 */
2484 		u32 sleep_ver = le32_to_cpu(xp_resp[0].parm2);
2485 		u8 *ver_string = (u8 *) &xp_resp[1];
2486 		ver_string[25] = 0;
2487 		netdev_info(dev, "Typhoon 1.1+ Sleep Image version %02x.%03x.%03x %s\n",
2488 			    sleep_ver >> 24, (sleep_ver >> 12) & 0xfff,
2489 			    sleep_ver & 0xfff, ver_string);
2490 	} else {
2491 		netdev_warn(dev, "Unknown Sleep Image version (%u:%04x)\n",
2492 			    xp_resp[0].numDesc, le32_to_cpu(xp_resp[0].parm2));
2493 	}
2494 
2495 	return 0;
2496 
2497 error_out_reset:
2498 	typhoon_reset(ioaddr, NoWait);
2499 
2500 error_out_dma:
2501 	pci_free_consistent(pdev, sizeof(struct typhoon_shared),
2502 			    shared, shared_dma);
2503 error_out_remap:
2504 	pci_iounmap(pdev, ioaddr);
2505 error_out_regions:
2506 	pci_release_regions(pdev);
2507 error_out_mwi:
2508 	pci_clear_mwi(pdev);
2509 error_out_disable:
2510 	pci_disable_device(pdev);
2511 error_out_dev:
2512 	free_netdev(dev);
2513 error_out:
2514 	pr_err("%s: %s\n", pci_name(pdev), err_msg);
2515 	return err;
2516 }
2517 
2518 static void
2519 typhoon_remove_one(struct pci_dev *pdev)
2520 {
2521 	struct net_device *dev = pci_get_drvdata(pdev);
2522 	struct typhoon *tp = netdev_priv(dev);
2523 
2524 	unregister_netdev(dev);
2525 	pci_set_power_state(pdev, PCI_D0);
2526 	pci_restore_state(pdev);
2527 	typhoon_reset(tp->ioaddr, NoWait);
2528 	pci_iounmap(pdev, tp->ioaddr);
2529 	pci_free_consistent(pdev, sizeof(struct typhoon_shared),
2530 			    tp->shared, tp->shared_dma);
2531 	pci_release_regions(pdev);
2532 	pci_clear_mwi(pdev);
2533 	pci_disable_device(pdev);
2534 	free_netdev(dev);
2535 }
2536 
2537 static struct pci_driver typhoon_driver = {
2538 	.name		= KBUILD_MODNAME,
2539 	.id_table	= typhoon_pci_tbl,
2540 	.probe		= typhoon_init_one,
2541 	.remove		= typhoon_remove_one,
2542 #ifdef CONFIG_PM
2543 	.suspend	= typhoon_suspend,
2544 	.resume		= typhoon_resume,
2545 #endif
2546 };
2547 
2548 static int __init
2549 typhoon_init(void)
2550 {
2551 	return pci_register_driver(&typhoon_driver);
2552 }
2553 
2554 static void __exit
2555 typhoon_cleanup(void)
2556 {
2557 	release_firmware(typhoon_fw);
2558 	pci_unregister_driver(&typhoon_driver);
2559 }
2560 
2561 module_init(typhoon_init);
2562 module_exit(typhoon_cleanup);
2563