1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * acenic.c: Linux driver for the Alteon AceNIC Gigabit Ethernet card
4 *           and other Tigon based cards.
5 *
6 * Copyright 1998-2002 by Jes Sorensen, <jes@trained-monkey.org>.
7 *
8 * Thanks to Alteon and 3Com for providing hardware and documentation
9 * enabling me to write this driver.
10 *
11 * A mailing list for discussing the use of this driver has been
12 * setup, please subscribe to the lists if you have any questions
13 * about the driver. Send mail to linux-acenic-help@sunsite.auc.dk to
14 * see how to subscribe.
15 *
16 * Additional credits:
17 *   Pete Wyckoff <wyckoff@ca.sandia.gov>: Initial Linux/Alpha and trace
18 *       dump support. The trace dump support has not been
19 *       integrated yet however.
20 *   Troy Benjegerdes: Big Endian (PPC) patches.
21 *   Nate Stahl: Better out of memory handling and stats support.
22 *   Aman Singla: Nasty race between interrupt handler and tx code dealing
23 *                with 'testing the tx_ret_csm and setting tx_full'
24 *   David S. Miller <davem@redhat.com>: conversion to new PCI dma mapping
25 *                                       infrastructure and Sparc support
26 *   Pierrick Pinasseau (CERN): For lending me an Ultra 5 to test the
27 *                              driver under Linux/Sparc64
28 *   Matt Domsch <Matt_Domsch@dell.com>: Detect Alteon 1000baseT cards
29 *                                       ETHTOOL_GDRVINFO support
30 *   Chip Salzenberg <chip@valinux.com>: Fix race condition between tx
31 *                                       handler and close() cleanup.
32 *   Ken Aaker <kdaaker@rchland.vnet.ibm.com>: Correct check for whether
33 *                                       memory mapped IO is enabled to
34 *                                       make the driver work on RS/6000.
35 *   Takayoshi Kouchi <kouchi@hpc.bs1.fc.nec.co.jp>: Identifying problem
36 *                                       where the driver would disable
37 *                                       bus master mode if it had to disable
38 *                                       write and invalidate.
39 *   Stephen Hack <stephen_hack@hp.com>: Fixed ace_set_mac_addr for little
40 *                                       endian systems.
41 *   Val Henson <vhenson@esscom.com>:    Reset Jumbo skb producer and
42 *                                       rx producer index when
43 *                                       flushing the Jumbo ring.
44 *   Hans Grobler <grobh@sun.ac.za>:     Memory leak fixes in the
45 *                                       driver init path.
46 *   Grant Grundler <grundler@cup.hp.com>: PCI write posting fixes.
47 */
48
49#include <linux/module.h>
50#include <linux/moduleparam.h>
51#include <linux/types.h>
52#include <linux/errno.h>
53#include <linux/ioport.h>
54#include <linux/pci.h>
55#include <linux/dma-mapping.h>
56#include <linux/kernel.h>
57#include <linux/netdevice.h>
58#include <linux/etherdevice.h>
59#include <linux/skbuff.h>
60#include <linux/delay.h>
61#include <linux/mm.h>
62#include <linux/highmem.h>
63#include <linux/sockios.h>
64#include <linux/firmware.h>
65#include <linux/slab.h>
66#include <linux/prefetch.h>
67#include <linux/if_vlan.h>
68
69#ifdef SIOCETHTOOL
70#include <linux/ethtool.h>
71#endif
72
73#include <net/sock.h>
74#include <net/ip.h>
75
76#include <asm/io.h>
77#include <asm/irq.h>
78#include <asm/byteorder.h>
79#include <linux/uaccess.h>
80
81
82#define DRV_NAME "acenic"
83
84#undef INDEX_DEBUG
85
86#ifdef CONFIG_ACENIC_OMIT_TIGON_I
87#define ACE_IS_TIGON_I(ap)	0
88#define ACE_TX_RING_ENTRIES(ap)	MAX_TX_RING_ENTRIES
89#else
90#define ACE_IS_TIGON_I(ap)	(ap->version == 1)
91#define ACE_TX_RING_ENTRIES(ap)	ap->tx_ring_entries
92#endif
93
94#ifndef PCI_VENDOR_ID_ALTEON
95#define PCI_VENDOR_ID_ALTEON		0x12ae
96#endif
97#ifndef PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE
98#define PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE  0x0001
99#define PCI_DEVICE_ID_ALTEON_ACENIC_COPPER 0x0002
100#endif
101#ifndef PCI_DEVICE_ID_3COM_3C985
102#define PCI_DEVICE_ID_3COM_3C985	0x0001
103#endif
104#ifndef PCI_VENDOR_ID_NETGEAR
105#define PCI_VENDOR_ID_NETGEAR		0x1385
106#define PCI_DEVICE_ID_NETGEAR_GA620	0x620a
107#endif
108#ifndef PCI_DEVICE_ID_NETGEAR_GA620T
109#define PCI_DEVICE_ID_NETGEAR_GA620T	0x630a
110#endif
111
112
113/*
114 * Farallon used the DEC vendor ID by mistake and they seem not
115 * to care - stinky!
116 */
117#ifndef PCI_DEVICE_ID_FARALLON_PN9000SX
118#define PCI_DEVICE_ID_FARALLON_PN9000SX	0x1a
119#endif
120#ifndef PCI_DEVICE_ID_FARALLON_PN9100T
121#define PCI_DEVICE_ID_FARALLON_PN9100T  0xfa
122#endif
123#ifndef PCI_VENDOR_ID_SGI
124#define PCI_VENDOR_ID_SGI		0x10a9
125#endif
126#ifndef PCI_DEVICE_ID_SGI_ACENIC
127#define PCI_DEVICE_ID_SGI_ACENIC	0x0009
128#endif
129
130static const struct pci_device_id acenic_pci_tbl[] = {
131	{ PCI_VENDOR_ID_ALTEON, PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE,
132	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
133	{ PCI_VENDOR_ID_ALTEON, PCI_DEVICE_ID_ALTEON_ACENIC_COPPER,
134	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
135	{ PCI_VENDOR_ID_3COM, PCI_DEVICE_ID_3COM_3C985,
136	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
137	{ PCI_VENDOR_ID_NETGEAR, PCI_DEVICE_ID_NETGEAR_GA620,
138	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
139	{ PCI_VENDOR_ID_NETGEAR, PCI_DEVICE_ID_NETGEAR_GA620T,
140	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
141	/*
142	 * Farallon used the DEC vendor ID on their cards incorrectly,
143	 * then later Alteon's ID.
144	 */
145	{ PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_FARALLON_PN9000SX,
146	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
147	{ PCI_VENDOR_ID_ALTEON, PCI_DEVICE_ID_FARALLON_PN9100T,
148	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
149	{ PCI_VENDOR_ID_SGI, PCI_DEVICE_ID_SGI_ACENIC,
150	  PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_NETWORK_ETHERNET << 8, 0xffff00, },
151	{ }
152};
153MODULE_DEVICE_TABLE(pci, acenic_pci_tbl);
154
155#define ace_sync_irq(irq)	synchronize_irq(irq)
156
157#ifndef offset_in_page
158#define offset_in_page(ptr)	((unsigned long)(ptr) & ~PAGE_MASK)
159#endif
160
161#define ACE_MAX_MOD_PARMS	8
162#define BOARD_IDX_STATIC	0
163#define BOARD_IDX_OVERFLOW	-1
164
165#include "acenic.h"
166
167/*
168 * These must be defined before the firmware is included.
169 */
170#define MAX_TEXT_LEN	96*1024
171#define MAX_RODATA_LEN	8*1024
172#define MAX_DATA_LEN	2*1024
173
174#ifndef tigon2FwReleaseLocal
175#define tigon2FwReleaseLocal 0
176#endif
177
178/*
179 * This driver currently supports Tigon I and Tigon II based cards
180 * including the Alteon AceNIC, the 3Com 3C985[B] and NetGear
181 * GA620. The driver should also work on the SGI, DEC and Farallon
182 * versions of the card, however I have not been able to test that
183 * myself.
184 *
185 * This card is really neat, it supports receive hardware checksumming
186 * and jumbo frames (up to 9000 bytes) and does a lot of work in the
187 * firmware. Also the programming interface is quite neat, except for
188 * the parts dealing with the i2c eeprom on the card ;-)
189 *
190 * Using jumbo frames:
191 *
192 * To enable jumbo frames, simply specify an mtu between 1500 and 9000
193 * bytes to ifconfig. Jumbo frames can be enabled or disabled at any time
194 * by running `ifconfig eth<X> mtu <MTU>' with <X> being the Ethernet
195 * interface number and <MTU> being the MTU value.
196 *
197 * Module parameters:
198 *
199 * When compiled as a loadable module, the driver allows for a number
200 * of module parameters to be specified. The driver supports the
201 * following module parameters:
202 *
203 *  trace=<val> - Firmware trace level. This requires special traced
204 *                firmware to replace the firmware supplied with
205 *                the driver - for debugging purposes only.
206 *
207 *  link=<val>  - Link state. Normally you want to use the default link
208 *                parameters set by the driver. This can be used to
209 *                override these in case your switch doesn't negotiate
210 *                the link properly. Valid values are:
211 *         0x0001 - Force half duplex link.
212 *         0x0002 - Do not negotiate line speed with the other end.
213 *         0x0010 - 10Mbit/sec link.
214 *         0x0020 - 100Mbit/sec link.
215 *         0x0040 - 1000Mbit/sec link.
216 *         0x0100 - Do not negotiate flow control.
217 *         0x0200 - Enable RX flow control Y
218 *         0x0400 - Enable TX flow control Y (Tigon II NICs only).
219 *                Default value is 0x0270, ie. enable link+flow
220 *                control negotiation. Negotiating the highest
221 *                possible link speed with RX flow control enabled.
222 *
223 *                When disabling link speed negotiation, only one link
224 *                speed is allowed to be specified!
225 *
226 *  tx_coal_tick=<val> - number of coalescing clock ticks (us) allowed
227 *                to wait for more packets to arive before
228 *                interrupting the host, from the time the first
229 *                packet arrives.
230 *
231 *  rx_coal_tick=<val> - number of coalescing clock ticks (us) allowed
232 *                to wait for more packets to arive in the transmit ring,
233 *                before interrupting the host, after transmitting the
234 *                first packet in the ring.
235 *
236 *  max_tx_desc=<val> - maximum number of transmit descriptors
237 *                (packets) transmitted before interrupting the host.
238 *
239 *  max_rx_desc=<val> - maximum number of receive descriptors
240 *                (packets) received before interrupting the host.
241 *
242 *  tx_ratio=<val> - 7 bit value (0 - 63) specifying the split in 64th
243 *                increments of the NIC's on board memory to be used for
244 *                transmit and receive buffers. For the 1MB NIC app. 800KB
245 *                is available, on the 1/2MB NIC app. 300KB is available.
246 *                68KB will always be available as a minimum for both
247 *                directions. The default value is a 50/50 split.
248 *  dis_pci_mem_inval=<val> - disable PCI memory write and invalidate
249 *                operations, default (1) is to always disable this as
250 *                that is what Alteon does on NT. I have not been able
251 *                to measure any real performance differences with
252 *                this on my systems. Set <val>=0 if you want to
253 *                enable these operations.
254 *
255 * If you use more than one NIC, specify the parameters for the
256 * individual NICs with a comma, ie. trace=0,0x00001fff,0 you want to
257 * run tracing on NIC #2 but not on NIC #1 and #3.
258 *
259 * TODO:
260 *
261 * - Proper multicast support.
262 * - NIC dump support.
263 * - More tuning parameters.
264 *
265 * The mini ring is not used under Linux and I am not sure it makes sense
266 * to actually use it.
267 *
268 * New interrupt handler strategy:
269 *
270 * The old interrupt handler worked using the traditional method of
271 * replacing an skbuff with a new one when a packet arrives. However
272 * the rx rings do not need to contain a static number of buffer
273 * descriptors, thus it makes sense to move the memory allocation out
274 * of the main interrupt handler and do it in a bottom half handler
275 * and only allocate new buffers when the number of buffers in the
276 * ring is below a certain threshold. In order to avoid starving the
277 * NIC under heavy load it is however necessary to force allocation
278 * when hitting a minimum threshold. The strategy for alloction is as
279 * follows:
280 *
281 *     RX_LOW_BUF_THRES    - allocate buffers in the bottom half
282 *     RX_PANIC_LOW_THRES  - we are very low on buffers, allocate
283 *                           the buffers in the interrupt handler
284 *     RX_RING_THRES       - maximum number of buffers in the rx ring
285 *     RX_MINI_THRES       - maximum number of buffers in the mini ring
286 *     RX_JUMBO_THRES      - maximum number of buffers in the jumbo ring
287 *
288 * One advantagous side effect of this allocation approach is that the
289 * entire rx processing can be done without holding any spin lock
290 * since the rx rings and registers are totally independent of the tx
291 * ring and its registers.  This of course includes the kmalloc's of
292 * new skb's. Thus start_xmit can run in parallel with rx processing
293 * and the memory allocation on SMP systems.
294 *
295 * Note that running the skb reallocation in a bottom half opens up
296 * another can of races which needs to be handled properly. In
297 * particular it can happen that the interrupt handler tries to run
298 * the reallocation while the bottom half is either running on another
299 * CPU or was interrupted on the same CPU. To get around this the
300 * driver uses bitops to prevent the reallocation routines from being
301 * reentered.
302 *
303 * TX handling can also be done without holding any spin lock, wheee
304 * this is fun! since tx_ret_csm is only written to by the interrupt
305 * handler. The case to be aware of is when shutting down the device
306 * and cleaning up where it is necessary to make sure that
307 * start_xmit() is not running while this is happening. Well DaveM
308 * informs me that this case is already protected against ... bye bye
309 * Mr. Spin Lock, it was nice to know you.
310 *
311 * TX interrupts are now partly disabled so the NIC will only generate
312 * TX interrupts for the number of coal ticks, not for the number of
313 * TX packets in the queue. This should reduce the number of TX only,
314 * ie. when no RX processing is done, interrupts seen.
315 */
316
317/*
318 * Threshold values for RX buffer allocation - the low water marks for
319 * when to start refilling the rings are set to 75% of the ring
320 * sizes. It seems to make sense to refill the rings entirely from the
321 * intrrupt handler once it gets below the panic threshold, that way
322 * we don't risk that the refilling is moved to another CPU when the
323 * one running the interrupt handler just got the slab code hot in its
324 * cache.
325 */
326#define RX_RING_SIZE		72
327#define RX_MINI_SIZE		64
328#define RX_JUMBO_SIZE		48
329
330#define RX_PANIC_STD_THRES	16
331#define RX_PANIC_STD_REFILL	(3*RX_PANIC_STD_THRES)/2
332#define RX_LOW_STD_THRES	(3*RX_RING_SIZE)/4
333#define RX_PANIC_MINI_THRES	12
334#define RX_PANIC_MINI_REFILL	(3*RX_PANIC_MINI_THRES)/2
335#define RX_LOW_MINI_THRES	(3*RX_MINI_SIZE)/4
336#define RX_PANIC_JUMBO_THRES	6
337#define RX_PANIC_JUMBO_REFILL	(3*RX_PANIC_JUMBO_THRES)/2
338#define RX_LOW_JUMBO_THRES	(3*RX_JUMBO_SIZE)/4
339
340
341/*
342 * Size of the mini ring entries, basically these just should be big
343 * enough to take TCP ACKs
344 */
345#define ACE_MINI_SIZE		100
346
347#define ACE_MINI_BUFSIZE	ACE_MINI_SIZE
348#define ACE_STD_BUFSIZE		(ACE_STD_MTU + ETH_HLEN + 4)
349#define ACE_JUMBO_BUFSIZE	(ACE_JUMBO_MTU + ETH_HLEN + 4)
350
351/*
352 * There seems to be a magic difference in the effect between 995 and 996
353 * but little difference between 900 and 995 ... no idea why.
354 *
355 * There is now a default set of tuning parameters which is set, depending
356 * on whether or not the user enables Jumbo frames. It's assumed that if
357 * Jumbo frames are enabled, the user wants optimal tuning for that case.
358 */
359#define DEF_TX_COAL		400 /* 996 */
360#define DEF_TX_MAX_DESC		60  /* was 40 */
361#define DEF_RX_COAL		120 /* 1000 */
362#define DEF_RX_MAX_DESC		25
363#define DEF_TX_RATIO		21 /* 24 */
364
365#define DEF_JUMBO_TX_COAL	20
366#define DEF_JUMBO_TX_MAX_DESC	60
367#define DEF_JUMBO_RX_COAL	30
368#define DEF_JUMBO_RX_MAX_DESC	6
369#define DEF_JUMBO_TX_RATIO	21
370
371#if tigon2FwReleaseLocal < 20001118
372/*
373 * Standard firmware and early modifications duplicate
374 * IRQ load without this flag (coal timer is never reset).
375 * Note that with this flag tx_coal should be less than
376 * time to xmit full tx ring.
377 * 400usec is not so bad for tx ring size of 128.
378 */
379#define TX_COAL_INTS_ONLY	1	/* worth it */
380#else
381/*
382 * With modified firmware, this is not necessary, but still useful.
383 */
384#define TX_COAL_INTS_ONLY	1
385#endif
386
387#define DEF_TRACE		0
388#define DEF_STAT		(2 * TICKS_PER_SEC)
389
390
391static int link_state[ACE_MAX_MOD_PARMS];
392static int trace[ACE_MAX_MOD_PARMS];
393static int tx_coal_tick[ACE_MAX_MOD_PARMS];
394static int rx_coal_tick[ACE_MAX_MOD_PARMS];
395static int max_tx_desc[ACE_MAX_MOD_PARMS];
396static int max_rx_desc[ACE_MAX_MOD_PARMS];
397static int tx_ratio[ACE_MAX_MOD_PARMS];
398static int dis_pci_mem_inval[ACE_MAX_MOD_PARMS] = {1, 1, 1, 1, 1, 1, 1, 1};
399
400MODULE_AUTHOR("Jes Sorensen <jes@trained-monkey.org>");
401MODULE_LICENSE("GPL");
402MODULE_DESCRIPTION("AceNIC/3C985/GA620 Gigabit Ethernet driver");
403#ifndef CONFIG_ACENIC_OMIT_TIGON_I
404MODULE_FIRMWARE("acenic/tg1.bin");
405#endif
406MODULE_FIRMWARE("acenic/tg2.bin");
407
408module_param_array_named(link, link_state, int, NULL, 0);
409module_param_array(trace, int, NULL, 0);
410module_param_array(tx_coal_tick, int, NULL, 0);
411module_param_array(max_tx_desc, int, NULL, 0);
412module_param_array(rx_coal_tick, int, NULL, 0);
413module_param_array(max_rx_desc, int, NULL, 0);
414module_param_array(tx_ratio, int, NULL, 0);
415MODULE_PARM_DESC(link, "AceNIC/3C985/NetGear link state");
416MODULE_PARM_DESC(trace, "AceNIC/3C985/NetGear firmware trace level");
417MODULE_PARM_DESC(tx_coal_tick, "AceNIC/3C985/GA620 max clock ticks to wait from first tx descriptor arrives");
418MODULE_PARM_DESC(max_tx_desc, "AceNIC/3C985/GA620 max number of transmit descriptors to wait");
419MODULE_PARM_DESC(rx_coal_tick, "AceNIC/3C985/GA620 max clock ticks to wait from first rx descriptor arrives");
420MODULE_PARM_DESC(max_rx_desc, "AceNIC/3C985/GA620 max number of receive descriptors to wait");
421MODULE_PARM_DESC(tx_ratio, "AceNIC/3C985/GA620 ratio of NIC memory used for TX/RX descriptors (range 0-63)");
422
423
424static const char version[] =
425  "acenic.c: v0.92 08/05/2002  Jes Sorensen, linux-acenic@SunSITE.dk\n"
426  "                            http://home.cern.ch/~jes/gige/acenic.html\n";
427
428static int ace_get_link_ksettings(struct net_device *,
429				  struct ethtool_link_ksettings *);
430static int ace_set_link_ksettings(struct net_device *,
431				  const struct ethtool_link_ksettings *);
432static void ace_get_drvinfo(struct net_device *, struct ethtool_drvinfo *);
433
434static const struct ethtool_ops ace_ethtool_ops = {
435	.get_drvinfo = ace_get_drvinfo,
436	.get_link_ksettings = ace_get_link_ksettings,
437	.set_link_ksettings = ace_set_link_ksettings,
438};
439
440static void ace_watchdog(struct net_device *dev, unsigned int txqueue);
441
442static const struct net_device_ops ace_netdev_ops = {
443	.ndo_open		= ace_open,
444	.ndo_stop		= ace_close,
445	.ndo_tx_timeout		= ace_watchdog,
446	.ndo_get_stats		= ace_get_stats,
447	.ndo_start_xmit		= ace_start_xmit,
448	.ndo_set_rx_mode	= ace_set_multicast_list,
449	.ndo_validate_addr	= eth_validate_addr,
450	.ndo_set_mac_address	= ace_set_mac_addr,
451	.ndo_change_mtu		= ace_change_mtu,
452};
453
454static int acenic_probe_one(struct pci_dev *pdev,
455			    const struct pci_device_id *id)
456{
457	struct net_device *dev;
458	struct ace_private *ap;
459	static int boards_found;
460
461	dev = alloc_etherdev(sizeof(struct ace_private));
462	if (dev == NULL)
463		return -ENOMEM;
464
465	SET_NETDEV_DEV(dev, &pdev->dev);
466
467	ap = netdev_priv(dev);
468	ap->ndev = dev;
469	ap->pdev = pdev;
470	ap->name = pci_name(pdev);
471
472	dev->features |= NETIF_F_SG | NETIF_F_IP_CSUM;
473	dev->features |= NETIF_F_HW_VLAN_CTAG_TX | NETIF_F_HW_VLAN_CTAG_RX;
474
475	dev->watchdog_timeo = 5*HZ;
476	dev->min_mtu = 0;
477	dev->max_mtu = ACE_JUMBO_MTU;
478
479	dev->netdev_ops = &ace_netdev_ops;
480	dev->ethtool_ops = &ace_ethtool_ops;
481
482	/* we only display this string ONCE */
483	if (!boards_found)
484		printk(version);
485
486	if (pci_enable_device(pdev))
487		goto fail_free_netdev;
488
489	/*
490	 * Enable master mode before we start playing with the
491	 * pci_command word since pci_set_master() will modify
492	 * it.
493	 */
494	pci_set_master(pdev);
495
496	pci_read_config_word(pdev, PCI_COMMAND, &ap->pci_command);
497
498	/* OpenFirmware on Mac's does not set this - DOH.. */
499	if (!(ap->pci_command & PCI_COMMAND_MEMORY)) {
500		printk(KERN_INFO "%s: Enabling PCI Memory Mapped "
501		       "access - was not enabled by BIOS/Firmware\n",
502		       ap->name);
503		ap->pci_command = ap->pci_command | PCI_COMMAND_MEMORY;
504		pci_write_config_word(ap->pdev, PCI_COMMAND,
505				      ap->pci_command);
506		wmb();
507	}
508
509	pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &ap->pci_latency);
510	if (ap->pci_latency <= 0x40) {
511		ap->pci_latency = 0x40;
512		pci_write_config_byte(pdev, PCI_LATENCY_TIMER, ap->pci_latency);
513	}
514
515	/*
516	 * Remap the regs into kernel space - this is abuse of
517	 * dev->base_addr since it was means for I/O port
518	 * addresses but who gives a damn.
519	 */
520	dev->base_addr = pci_resource_start(pdev, 0);
521	ap->regs = ioremap(dev->base_addr, 0x4000);
522	if (!ap->regs) {
523		printk(KERN_ERR "%s:  Unable to map I/O register, "
524		       "AceNIC %i will be disabled.\n",
525		       ap->name, boards_found);
526		goto fail_free_netdev;
527	}
528
529	switch(pdev->vendor) {
530	case PCI_VENDOR_ID_ALTEON:
531		if (pdev->device == PCI_DEVICE_ID_FARALLON_PN9100T) {
532			printk(KERN_INFO "%s: Farallon PN9100-T ",
533			       ap->name);
534		} else {
535			printk(KERN_INFO "%s: Alteon AceNIC ",
536			       ap->name);
537		}
538		break;
539	case PCI_VENDOR_ID_3COM:
540		printk(KERN_INFO "%s: 3Com 3C985 ", ap->name);
541		break;
542	case PCI_VENDOR_ID_NETGEAR:
543		printk(KERN_INFO "%s: NetGear GA620 ", ap->name);
544		break;
545	case PCI_VENDOR_ID_DEC:
546		if (pdev->device == PCI_DEVICE_ID_FARALLON_PN9000SX) {
547			printk(KERN_INFO "%s: Farallon PN9000-SX ",
548			       ap->name);
549			break;
550		}
551		fallthrough;
552	case PCI_VENDOR_ID_SGI:
553		printk(KERN_INFO "%s: SGI AceNIC ", ap->name);
554		break;
555	default:
556		printk(KERN_INFO "%s: Unknown AceNIC ", ap->name);
557		break;
558	}
559
560	printk("Gigabit Ethernet at 0x%08lx, ", dev->base_addr);
561	printk("irq %d\n", pdev->irq);
562
563#ifdef CONFIG_ACENIC_OMIT_TIGON_I
564	if ((readl(&ap->regs->HostCtrl) >> 28) == 4) {
565		printk(KERN_ERR "%s: Driver compiled without Tigon I"
566		       " support - NIC disabled\n", dev->name);
567		goto fail_uninit;
568	}
569#endif
570
571	if (ace_allocate_descriptors(dev))
572		goto fail_free_netdev;
573
574#ifdef MODULE
575	if (boards_found >= ACE_MAX_MOD_PARMS)
576		ap->board_idx = BOARD_IDX_OVERFLOW;
577	else
578		ap->board_idx = boards_found;
579#else
580	ap->board_idx = BOARD_IDX_STATIC;
581#endif
582
583	if (ace_init(dev))
584		goto fail_free_netdev;
585
586	if (register_netdev(dev)) {
587		printk(KERN_ERR "acenic: device registration failed\n");
588		goto fail_uninit;
589	}
590	ap->name = dev->name;
591
592	dev->features |= NETIF_F_HIGHDMA;
593
594	pci_set_drvdata(pdev, dev);
595
596	boards_found++;
597	return 0;
598
599 fail_uninit:
600	ace_init_cleanup(dev);
601 fail_free_netdev:
602	free_netdev(dev);
603	return -ENODEV;
604}
605
606static void acenic_remove_one(struct pci_dev *pdev)
607{
608	struct net_device *dev = pci_get_drvdata(pdev);
609	struct ace_private *ap = netdev_priv(dev);
610	struct ace_regs __iomem *regs = ap->regs;
611	short i;
612
613	unregister_netdev(dev);
614
615	writel(readl(&regs->CpuCtrl) | CPU_HALT, &regs->CpuCtrl);
616	if (ap->version >= 2)
617		writel(readl(&regs->CpuBCtrl) | CPU_HALT, &regs->CpuBCtrl);
618
619	/*
620	 * This clears any pending interrupts
621	 */
622	writel(1, &regs->Mb0Lo);
623	readl(&regs->CpuCtrl);	/* flush */
624
625	/*
626	 * Make sure no other CPUs are processing interrupts
627	 * on the card before the buffers are being released.
628	 * Otherwise one might experience some `interesting'
629	 * effects.
630	 *
631	 * Then release the RX buffers - jumbo buffers were
632	 * already released in ace_close().
633	 */
634	ace_sync_irq(dev->irq);
635
636	for (i = 0; i < RX_STD_RING_ENTRIES; i++) {
637		struct sk_buff *skb = ap->skb->rx_std_skbuff[i].skb;
638
639		if (skb) {
640			struct ring_info *ringp;
641			dma_addr_t mapping;
642
643			ringp = &ap->skb->rx_std_skbuff[i];
644			mapping = dma_unmap_addr(ringp, mapping);
645			dma_unmap_page(&ap->pdev->dev, mapping,
646				       ACE_STD_BUFSIZE, DMA_FROM_DEVICE);
647
648			ap->rx_std_ring[i].size = 0;
649			ap->skb->rx_std_skbuff[i].skb = NULL;
650			dev_kfree_skb(skb);
651		}
652	}
653
654	if (ap->version >= 2) {
655		for (i = 0; i < RX_MINI_RING_ENTRIES; i++) {
656			struct sk_buff *skb = ap->skb->rx_mini_skbuff[i].skb;
657
658			if (skb) {
659				struct ring_info *ringp;
660				dma_addr_t mapping;
661
662				ringp = &ap->skb->rx_mini_skbuff[i];
663				mapping = dma_unmap_addr(ringp,mapping);
664				dma_unmap_page(&ap->pdev->dev, mapping,
665					       ACE_MINI_BUFSIZE,
666					       DMA_FROM_DEVICE);
667
668				ap->rx_mini_ring[i].size = 0;
669				ap->skb->rx_mini_skbuff[i].skb = NULL;
670				dev_kfree_skb(skb);
671			}
672		}
673	}
674
675	for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) {
676		struct sk_buff *skb = ap->skb->rx_jumbo_skbuff[i].skb;
677		if (skb) {
678			struct ring_info *ringp;
679			dma_addr_t mapping;
680
681			ringp = &ap->skb->rx_jumbo_skbuff[i];
682			mapping = dma_unmap_addr(ringp, mapping);
683			dma_unmap_page(&ap->pdev->dev, mapping,
684				       ACE_JUMBO_BUFSIZE, DMA_FROM_DEVICE);
685
686			ap->rx_jumbo_ring[i].size = 0;
687			ap->skb->rx_jumbo_skbuff[i].skb = NULL;
688			dev_kfree_skb(skb);
689		}
690	}
691
692	ace_init_cleanup(dev);
693	free_netdev(dev);
694}
695
696static struct pci_driver acenic_pci_driver = {
697	.name		= "acenic",
698	.id_table	= acenic_pci_tbl,
699	.probe		= acenic_probe_one,
700	.remove		= acenic_remove_one,
701};
702
703static void ace_free_descriptors(struct net_device *dev)
704{
705	struct ace_private *ap = netdev_priv(dev);
706	int size;
707
708	if (ap->rx_std_ring != NULL) {
709		size = (sizeof(struct rx_desc) *
710			(RX_STD_RING_ENTRIES +
711			 RX_JUMBO_RING_ENTRIES +
712			 RX_MINI_RING_ENTRIES +
713			 RX_RETURN_RING_ENTRIES));
714		dma_free_coherent(&ap->pdev->dev, size, ap->rx_std_ring,
715				  ap->rx_ring_base_dma);
716		ap->rx_std_ring = NULL;
717		ap->rx_jumbo_ring = NULL;
718		ap->rx_mini_ring = NULL;
719		ap->rx_return_ring = NULL;
720	}
721	if (ap->evt_ring != NULL) {
722		size = (sizeof(struct event) * EVT_RING_ENTRIES);
723		dma_free_coherent(&ap->pdev->dev, size, ap->evt_ring,
724				  ap->evt_ring_dma);
725		ap->evt_ring = NULL;
726	}
727	if (ap->tx_ring != NULL && !ACE_IS_TIGON_I(ap)) {
728		size = (sizeof(struct tx_desc) * MAX_TX_RING_ENTRIES);
729		dma_free_coherent(&ap->pdev->dev, size, ap->tx_ring,
730				  ap->tx_ring_dma);
731	}
732	ap->tx_ring = NULL;
733
734	if (ap->evt_prd != NULL) {
735		dma_free_coherent(&ap->pdev->dev, sizeof(u32),
736				  (void *)ap->evt_prd, ap->evt_prd_dma);
737		ap->evt_prd = NULL;
738	}
739	if (ap->rx_ret_prd != NULL) {
740		dma_free_coherent(&ap->pdev->dev, sizeof(u32),
741				  (void *)ap->rx_ret_prd, ap->rx_ret_prd_dma);
742		ap->rx_ret_prd = NULL;
743	}
744	if (ap->tx_csm != NULL) {
745		dma_free_coherent(&ap->pdev->dev, sizeof(u32),
746				  (void *)ap->tx_csm, ap->tx_csm_dma);
747		ap->tx_csm = NULL;
748	}
749}
750
751
752static int ace_allocate_descriptors(struct net_device *dev)
753{
754	struct ace_private *ap = netdev_priv(dev);
755	int size;
756
757	size = (sizeof(struct rx_desc) *
758		(RX_STD_RING_ENTRIES +
759		 RX_JUMBO_RING_ENTRIES +
760		 RX_MINI_RING_ENTRIES +
761		 RX_RETURN_RING_ENTRIES));
762
763	ap->rx_std_ring = dma_alloc_coherent(&ap->pdev->dev, size,
764					     &ap->rx_ring_base_dma, GFP_KERNEL);
765	if (ap->rx_std_ring == NULL)
766		goto fail;
767
768	ap->rx_jumbo_ring = ap->rx_std_ring + RX_STD_RING_ENTRIES;
769	ap->rx_mini_ring = ap->rx_jumbo_ring + RX_JUMBO_RING_ENTRIES;
770	ap->rx_return_ring = ap->rx_mini_ring + RX_MINI_RING_ENTRIES;
771
772	size = (sizeof(struct event) * EVT_RING_ENTRIES);
773
774	ap->evt_ring = dma_alloc_coherent(&ap->pdev->dev, size,
775					  &ap->evt_ring_dma, GFP_KERNEL);
776
777	if (ap->evt_ring == NULL)
778		goto fail;
779
780	/*
781	 * Only allocate a host TX ring for the Tigon II, the Tigon I
782	 * has to use PCI registers for this ;-(
783	 */
784	if (!ACE_IS_TIGON_I(ap)) {
785		size = (sizeof(struct tx_desc) * MAX_TX_RING_ENTRIES);
786
787		ap->tx_ring = dma_alloc_coherent(&ap->pdev->dev, size,
788						 &ap->tx_ring_dma, GFP_KERNEL);
789
790		if (ap->tx_ring == NULL)
791			goto fail;
792	}
793
794	ap->evt_prd = dma_alloc_coherent(&ap->pdev->dev, sizeof(u32),
795					 &ap->evt_prd_dma, GFP_KERNEL);
796	if (ap->evt_prd == NULL)
797		goto fail;
798
799	ap->rx_ret_prd = dma_alloc_coherent(&ap->pdev->dev, sizeof(u32),
800					    &ap->rx_ret_prd_dma, GFP_KERNEL);
801	if (ap->rx_ret_prd == NULL)
802		goto fail;
803
804	ap->tx_csm = dma_alloc_coherent(&ap->pdev->dev, sizeof(u32),
805					&ap->tx_csm_dma, GFP_KERNEL);
806	if (ap->tx_csm == NULL)
807		goto fail;
808
809	return 0;
810
811fail:
812	/* Clean up. */
813	ace_init_cleanup(dev);
814	return 1;
815}
816
817
818/*
819 * Generic cleanup handling data allocated during init. Used when the
820 * module is unloaded or if an error occurs during initialization
821 */
822static void ace_init_cleanup(struct net_device *dev)
823{
824	struct ace_private *ap;
825
826	ap = netdev_priv(dev);
827
828	ace_free_descriptors(dev);
829
830	if (ap->info)
831		dma_free_coherent(&ap->pdev->dev, sizeof(struct ace_info),
832				  ap->info, ap->info_dma);
833	kfree(ap->skb);
834	kfree(ap->trace_buf);
835
836	if (dev->irq)
837		free_irq(dev->irq, dev);
838
839	iounmap(ap->regs);
840}
841
842
843/*
844 * Commands are considered to be slow.
845 */
846static inline void ace_issue_cmd(struct ace_regs __iomem *regs, struct cmd *cmd)
847{
848	u32 idx;
849
850	idx = readl(&regs->CmdPrd);
851
852	writel(*(u32 *)(cmd), &regs->CmdRng[idx]);
853	idx = (idx + 1) % CMD_RING_ENTRIES;
854
855	writel(idx, &regs->CmdPrd);
856}
857
858
859static int ace_init(struct net_device *dev)
860{
861	struct ace_private *ap;
862	struct ace_regs __iomem *regs;
863	struct ace_info *info = NULL;
864	struct pci_dev *pdev;
865	unsigned long myjif;
866	u64 tmp_ptr;
867	u32 tig_ver, mac1, mac2, tmp, pci_state;
868	int board_idx, ecode = 0;
869	short i;
870	unsigned char cache_size;
871	u8 addr[ETH_ALEN];
872
873	ap = netdev_priv(dev);
874	regs = ap->regs;
875
876	board_idx = ap->board_idx;
877
878	/*
879	 * aman@sgi.com - its useful to do a NIC reset here to
880	 * address the `Firmware not running' problem subsequent
881	 * to any crashes involving the NIC
882	 */
883	writel(HW_RESET | (HW_RESET << 24), &regs->HostCtrl);
884	readl(&regs->HostCtrl);		/* PCI write posting */
885	udelay(5);
886
887	/*
888	 * Don't access any other registers before this point!
889	 */
890#ifdef __BIG_ENDIAN
891	/*
892	 * This will most likely need BYTE_SWAP once we switch
893	 * to using __raw_writel()
894	 */
895	writel((WORD_SWAP | CLR_INT | ((WORD_SWAP | CLR_INT) << 24)),
896	       &regs->HostCtrl);
897#else
898	writel((CLR_INT | WORD_SWAP | ((CLR_INT | WORD_SWAP) << 24)),
899	       &regs->HostCtrl);
900#endif
901	readl(&regs->HostCtrl);		/* PCI write posting */
902
903	/*
904	 * Stop the NIC CPU and clear pending interrupts
905	 */
906	writel(readl(&regs->CpuCtrl) | CPU_HALT, &regs->CpuCtrl);
907	readl(&regs->CpuCtrl);		/* PCI write posting */
908	writel(0, &regs->Mb0Lo);
909
910	tig_ver = readl(&regs->HostCtrl) >> 28;
911
912	switch(tig_ver){
913#ifndef CONFIG_ACENIC_OMIT_TIGON_I
914	case 4:
915	case 5:
916		printk(KERN_INFO "  Tigon I  (Rev. %i), Firmware: %i.%i.%i, ",
917		       tig_ver, ap->firmware_major, ap->firmware_minor,
918		       ap->firmware_fix);
919		writel(0, &regs->LocalCtrl);
920		ap->version = 1;
921		ap->tx_ring_entries = TIGON_I_TX_RING_ENTRIES;
922		break;
923#endif
924	case 6:
925		printk(KERN_INFO "  Tigon II (Rev. %i), Firmware: %i.%i.%i, ",
926		       tig_ver, ap->firmware_major, ap->firmware_minor,
927		       ap->firmware_fix);
928		writel(readl(&regs->CpuBCtrl) | CPU_HALT, &regs->CpuBCtrl);
929		readl(&regs->CpuBCtrl);		/* PCI write posting */
930		/*
931		 * The SRAM bank size does _not_ indicate the amount
932		 * of memory on the card, it controls the _bank_ size!
933		 * Ie. a 1MB AceNIC will have two banks of 512KB.
934		 */
935		writel(SRAM_BANK_512K, &regs->LocalCtrl);
936		writel(SYNC_SRAM_TIMING, &regs->MiscCfg);
937		ap->version = 2;
938		ap->tx_ring_entries = MAX_TX_RING_ENTRIES;
939		break;
940	default:
941		printk(KERN_WARNING "  Unsupported Tigon version detected "
942		       "(%i)\n", tig_ver);
943		ecode = -ENODEV;
944		goto init_error;
945	}
946
947	/*
948	 * ModeStat _must_ be set after the SRAM settings as this change
949	 * seems to corrupt the ModeStat and possible other registers.
950	 * The SRAM settings survive resets and setting it to the same
951	 * value a second time works as well. This is what caused the
952	 * `Firmware not running' problem on the Tigon II.
953	 */
954#ifdef __BIG_ENDIAN
955	writel(ACE_BYTE_SWAP_DMA | ACE_WARN | ACE_FATAL | ACE_BYTE_SWAP_BD |
956	       ACE_WORD_SWAP_BD | ACE_NO_JUMBO_FRAG, &regs->ModeStat);
957#else
958	writel(ACE_BYTE_SWAP_DMA | ACE_WARN | ACE_FATAL |
959	       ACE_WORD_SWAP_BD | ACE_NO_JUMBO_FRAG, &regs->ModeStat);
960#endif
961	readl(&regs->ModeStat);		/* PCI write posting */
962
963	mac1 = 0;
964	for(i = 0; i < 4; i++) {
965		int t;
966
967		mac1 = mac1 << 8;
968		t = read_eeprom_byte(dev, 0x8c+i);
969		if (t < 0) {
970			ecode = -EIO;
971			goto init_error;
972		} else
973			mac1 |= (t & 0xff);
974	}
975	mac2 = 0;
976	for(i = 4; i < 8; i++) {
977		int t;
978
979		mac2 = mac2 << 8;
980		t = read_eeprom_byte(dev, 0x8c+i);
981		if (t < 0) {
982			ecode = -EIO;
983			goto init_error;
984		} else
985			mac2 |= (t & 0xff);
986	}
987
988	writel(mac1, &regs->MacAddrHi);
989	writel(mac2, &regs->MacAddrLo);
990
991	addr[0] = (mac1 >> 8) & 0xff;
992	addr[1] = mac1 & 0xff;
993	addr[2] = (mac2 >> 24) & 0xff;
994	addr[3] = (mac2 >> 16) & 0xff;
995	addr[4] = (mac2 >> 8) & 0xff;
996	addr[5] = mac2 & 0xff;
997	eth_hw_addr_set(dev, addr);
998
999	printk("MAC: %pM\n", dev->dev_addr);
1000
1001	/*
1002	 * Looks like this is necessary to deal with on all architectures,
1003	 * even this %$#%$# N440BX Intel based thing doesn't get it right.
1004	 * Ie. having two NICs in the machine, one will have the cache
1005	 * line set at boot time, the other will not.
1006	 */
1007	pdev = ap->pdev;
1008	pci_read_config_byte(pdev, PCI_CACHE_LINE_SIZE, &cache_size);
1009	cache_size <<= 2;
1010	if (cache_size != SMP_CACHE_BYTES) {
1011		printk(KERN_INFO "  PCI cache line size set incorrectly "
1012		       "(%i bytes) by BIOS/FW, ", cache_size);
1013		if (cache_size > SMP_CACHE_BYTES)
1014			printk("expecting %i\n", SMP_CACHE_BYTES);
1015		else {
1016			printk("correcting to %i\n", SMP_CACHE_BYTES);
1017			pci_write_config_byte(pdev, PCI_CACHE_LINE_SIZE,
1018					      SMP_CACHE_BYTES >> 2);
1019		}
1020	}
1021
1022	pci_state = readl(&regs->PciState);
1023	printk(KERN_INFO "  PCI bus width: %i bits, speed: %iMHz, "
1024	       "latency: %i clks\n",
1025	       	(pci_state & PCI_32BIT) ? 32 : 64,
1026		(pci_state & PCI_66MHZ) ? 66 : 33,
1027		ap->pci_latency);
1028
1029	/*
1030	 * Set the max DMA transfer size. Seems that for most systems
1031	 * the performance is better when no MAX parameter is
1032	 * set. However for systems enabling PCI write and invalidate,
1033	 * DMA writes must be set to the L1 cache line size to get
1034	 * optimal performance.
1035	 *
1036	 * The default is now to turn the PCI write and invalidate off
1037	 * - that is what Alteon does for NT.
1038	 */
1039	tmp = READ_CMD_MEM | WRITE_CMD_MEM;
1040	if (ap->version >= 2) {
1041		tmp |= (MEM_READ_MULTIPLE | (pci_state & PCI_66MHZ));
1042		/*
1043		 * Tuning parameters only supported for 8 cards
1044		 */
1045		if (board_idx == BOARD_IDX_OVERFLOW ||
1046		    dis_pci_mem_inval[board_idx]) {
1047			if (ap->pci_command & PCI_COMMAND_INVALIDATE) {
1048				ap->pci_command &= ~PCI_COMMAND_INVALIDATE;
1049				pci_write_config_word(pdev, PCI_COMMAND,
1050						      ap->pci_command);
1051				printk(KERN_INFO "  Disabling PCI memory "
1052				       "write and invalidate\n");
1053			}
1054		} else if (ap->pci_command & PCI_COMMAND_INVALIDATE) {
1055			printk(KERN_INFO "  PCI memory write & invalidate "
1056			       "enabled by BIOS, enabling counter measures\n");
1057
1058			switch(SMP_CACHE_BYTES) {
1059			case 16:
1060				tmp |= DMA_WRITE_MAX_16;
1061				break;
1062			case 32:
1063				tmp |= DMA_WRITE_MAX_32;
1064				break;
1065			case 64:
1066				tmp |= DMA_WRITE_MAX_64;
1067				break;
1068			case 128:
1069				tmp |= DMA_WRITE_MAX_128;
1070				break;
1071			default:
1072				printk(KERN_INFO "  Cache line size %i not "
1073				       "supported, PCI write and invalidate "
1074				       "disabled\n", SMP_CACHE_BYTES);
1075				ap->pci_command &= ~PCI_COMMAND_INVALIDATE;
1076				pci_write_config_word(pdev, PCI_COMMAND,
1077						      ap->pci_command);
1078			}
1079		}
1080	}
1081
1082#ifdef __sparc__
1083	/*
1084	 * On this platform, we know what the best dma settings
1085	 * are.  We use 64-byte maximum bursts, because if we
1086	 * burst larger than the cache line size (or even cross
1087	 * a 64byte boundary in a single burst) the UltraSparc
1088	 * PCI controller will disconnect at 64-byte multiples.
1089	 *
1090	 * Read-multiple will be properly enabled above, and when
1091	 * set will give the PCI controller proper hints about
1092	 * prefetching.
1093	 */
1094	tmp &= ~DMA_READ_WRITE_MASK;
1095	tmp |= DMA_READ_MAX_64;
1096	tmp |= DMA_WRITE_MAX_64;
1097#endif
1098#ifdef __alpha__
1099	tmp &= ~DMA_READ_WRITE_MASK;
1100	tmp |= DMA_READ_MAX_128;
1101	/*
1102	 * All the docs say MUST NOT. Well, I did.
1103	 * Nothing terrible happens, if we load wrong size.
1104	 * Bit w&i still works better!
1105	 */
1106	tmp |= DMA_WRITE_MAX_128;
1107#endif
1108	writel(tmp, &regs->PciState);
1109
1110#if 0
1111	/*
1112	 * The Host PCI bus controller driver has to set FBB.
1113	 * If all devices on that PCI bus support FBB, then the controller
1114	 * can enable FBB support in the Host PCI Bus controller (or on
1115	 * the PCI-PCI bridge if that applies).
1116	 * -ggg
1117	 */
1118	/*
1119	 * I have received reports from people having problems when this
1120	 * bit is enabled.
1121	 */
1122	if (!(ap->pci_command & PCI_COMMAND_FAST_BACK)) {
1123		printk(KERN_INFO "  Enabling PCI Fast Back to Back\n");
1124		ap->pci_command |= PCI_COMMAND_FAST_BACK;
1125		pci_write_config_word(pdev, PCI_COMMAND, ap->pci_command);
1126	}
1127#endif
1128
1129	/*
1130	 * Configure DMA attributes.
1131	 */
1132	if (dma_set_mask(&pdev->dev, DMA_BIT_MASK(64))) {
1133		ecode = -ENODEV;
1134		goto init_error;
1135	}
1136
1137	/*
1138	 * Initialize the generic info block and the command+event rings
1139	 * and the control blocks for the transmit and receive rings
1140	 * as they need to be setup once and for all.
1141	 */
1142	if (!(info = dma_alloc_coherent(&ap->pdev->dev, sizeof(struct ace_info),
1143					&ap->info_dma, GFP_KERNEL))) {
1144		ecode = -EAGAIN;
1145		goto init_error;
1146	}
1147	ap->info = info;
1148
1149	/*
1150	 * Get the memory for the skb rings.
1151	 */
1152	if (!(ap->skb = kzalloc(sizeof(struct ace_skb), GFP_KERNEL))) {
1153		ecode = -EAGAIN;
1154		goto init_error;
1155	}
1156
1157	ecode = request_irq(pdev->irq, ace_interrupt, IRQF_SHARED,
1158			    DRV_NAME, dev);
1159	if (ecode) {
1160		printk(KERN_WARNING "%s: Requested IRQ %d is busy\n",
1161		       DRV_NAME, pdev->irq);
1162		goto init_error;
1163	} else
1164		dev->irq = pdev->irq;
1165
1166#ifdef INDEX_DEBUG
1167	spin_lock_init(&ap->debug_lock);
1168	ap->last_tx = ACE_TX_RING_ENTRIES(ap) - 1;
1169	ap->last_std_rx = 0;
1170	ap->last_mini_rx = 0;
1171#endif
1172
1173	ecode = ace_load_firmware(dev);
1174	if (ecode)
1175		goto init_error;
1176
1177	ap->fw_running = 0;
1178
1179	tmp_ptr = ap->info_dma;
1180	writel(tmp_ptr >> 32, &regs->InfoPtrHi);
1181	writel(tmp_ptr & 0xffffffff, &regs->InfoPtrLo);
1182
1183	memset(ap->evt_ring, 0, EVT_RING_ENTRIES * sizeof(struct event));
1184
1185	set_aceaddr(&info->evt_ctrl.rngptr, ap->evt_ring_dma);
1186	info->evt_ctrl.flags = 0;
1187
1188	*(ap->evt_prd) = 0;
1189	wmb();
1190	set_aceaddr(&info->evt_prd_ptr, ap->evt_prd_dma);
1191	writel(0, &regs->EvtCsm);
1192
1193	set_aceaddr(&info->cmd_ctrl.rngptr, 0x100);
1194	info->cmd_ctrl.flags = 0;
1195	info->cmd_ctrl.max_len = 0;
1196
1197	for (i = 0; i < CMD_RING_ENTRIES; i++)
1198		writel(0, &regs->CmdRng[i]);
1199
1200	writel(0, &regs->CmdPrd);
1201	writel(0, &regs->CmdCsm);
1202
1203	tmp_ptr = ap->info_dma;
1204	tmp_ptr += (unsigned long) &(((struct ace_info *)0)->s.stats);
1205	set_aceaddr(&info->stats2_ptr, (dma_addr_t) tmp_ptr);
1206
1207	set_aceaddr(&info->rx_std_ctrl.rngptr, ap->rx_ring_base_dma);
1208	info->rx_std_ctrl.max_len = ACE_STD_BUFSIZE;
1209	info->rx_std_ctrl.flags =
1210	  RCB_FLG_TCP_UDP_SUM | RCB_FLG_NO_PSEUDO_HDR | RCB_FLG_VLAN_ASSIST;
1211
1212	memset(ap->rx_std_ring, 0,
1213	       RX_STD_RING_ENTRIES * sizeof(struct rx_desc));
1214
1215	for (i = 0; i < RX_STD_RING_ENTRIES; i++)
1216		ap->rx_std_ring[i].flags = BD_FLG_TCP_UDP_SUM;
1217
1218	ap->rx_std_skbprd = 0;
1219	atomic_set(&ap->cur_rx_bufs, 0);
1220
1221	set_aceaddr(&info->rx_jumbo_ctrl.rngptr,
1222		    (ap->rx_ring_base_dma +
1223		     (sizeof(struct rx_desc) * RX_STD_RING_ENTRIES)));
1224	info->rx_jumbo_ctrl.max_len = 0;
1225	info->rx_jumbo_ctrl.flags =
1226	  RCB_FLG_TCP_UDP_SUM | RCB_FLG_NO_PSEUDO_HDR | RCB_FLG_VLAN_ASSIST;
1227
1228	memset(ap->rx_jumbo_ring, 0,
1229	       RX_JUMBO_RING_ENTRIES * sizeof(struct rx_desc));
1230
1231	for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++)
1232		ap->rx_jumbo_ring[i].flags = BD_FLG_TCP_UDP_SUM | BD_FLG_JUMBO;
1233
1234	ap->rx_jumbo_skbprd = 0;
1235	atomic_set(&ap->cur_jumbo_bufs, 0);
1236
1237	memset(ap->rx_mini_ring, 0,
1238	       RX_MINI_RING_ENTRIES * sizeof(struct rx_desc));
1239
1240	if (ap->version >= 2) {
1241		set_aceaddr(&info->rx_mini_ctrl.rngptr,
1242			    (ap->rx_ring_base_dma +
1243			     (sizeof(struct rx_desc) *
1244			      (RX_STD_RING_ENTRIES +
1245			       RX_JUMBO_RING_ENTRIES))));
1246		info->rx_mini_ctrl.max_len = ACE_MINI_SIZE;
1247		info->rx_mini_ctrl.flags =
1248		  RCB_FLG_TCP_UDP_SUM|RCB_FLG_NO_PSEUDO_HDR|RCB_FLG_VLAN_ASSIST;
1249
1250		for (i = 0; i < RX_MINI_RING_ENTRIES; i++)
1251			ap->rx_mini_ring[i].flags =
1252				BD_FLG_TCP_UDP_SUM | BD_FLG_MINI;
1253	} else {
1254		set_aceaddr(&info->rx_mini_ctrl.rngptr, 0);
1255		info->rx_mini_ctrl.flags = RCB_FLG_RNG_DISABLE;
1256		info->rx_mini_ctrl.max_len = 0;
1257	}
1258
1259	ap->rx_mini_skbprd = 0;
1260	atomic_set(&ap->cur_mini_bufs, 0);
1261
1262	set_aceaddr(&info->rx_return_ctrl.rngptr,
1263		    (ap->rx_ring_base_dma +
1264		     (sizeof(struct rx_desc) *
1265		      (RX_STD_RING_ENTRIES +
1266		       RX_JUMBO_RING_ENTRIES +
1267		       RX_MINI_RING_ENTRIES))));
1268	info->rx_return_ctrl.flags = 0;
1269	info->rx_return_ctrl.max_len = RX_RETURN_RING_ENTRIES;
1270
1271	memset(ap->rx_return_ring, 0,
1272	       RX_RETURN_RING_ENTRIES * sizeof(struct rx_desc));
1273
1274	set_aceaddr(&info->rx_ret_prd_ptr, ap->rx_ret_prd_dma);
1275	*(ap->rx_ret_prd) = 0;
1276
1277	writel(TX_RING_BASE, &regs->WinBase);
1278
1279	if (ACE_IS_TIGON_I(ap)) {
1280		ap->tx_ring = (__force struct tx_desc *) regs->Window;
1281		for (i = 0; i < (TIGON_I_TX_RING_ENTRIES
1282				 * sizeof(struct tx_desc)) / sizeof(u32); i++)
1283			writel(0, (__force void __iomem *)ap->tx_ring  + i * 4);
1284
1285		set_aceaddr(&info->tx_ctrl.rngptr, TX_RING_BASE);
1286	} else {
1287		memset(ap->tx_ring, 0,
1288		       MAX_TX_RING_ENTRIES * sizeof(struct tx_desc));
1289
1290		set_aceaddr(&info->tx_ctrl.rngptr, ap->tx_ring_dma);
1291	}
1292
1293	info->tx_ctrl.max_len = ACE_TX_RING_ENTRIES(ap);
1294	tmp = RCB_FLG_TCP_UDP_SUM | RCB_FLG_NO_PSEUDO_HDR | RCB_FLG_VLAN_ASSIST;
1295
1296	/*
1297	 * The Tigon I does not like having the TX ring in host memory ;-(
1298	 */
1299	if (!ACE_IS_TIGON_I(ap))
1300		tmp |= RCB_FLG_TX_HOST_RING;
1301#if TX_COAL_INTS_ONLY
1302	tmp |= RCB_FLG_COAL_INT_ONLY;
1303#endif
1304	info->tx_ctrl.flags = tmp;
1305
1306	set_aceaddr(&info->tx_csm_ptr, ap->tx_csm_dma);
1307
1308	/*
1309	 * Potential item for tuning parameter
1310	 */
1311#if 0 /* NO */
1312	writel(DMA_THRESH_16W, &regs->DmaReadCfg);
1313	writel(DMA_THRESH_16W, &regs->DmaWriteCfg);
1314#else
1315	writel(DMA_THRESH_8W, &regs->DmaReadCfg);
1316	writel(DMA_THRESH_8W, &regs->DmaWriteCfg);
1317#endif
1318
1319	writel(0, &regs->MaskInt);
1320	writel(1, &regs->IfIdx);
1321#if 0
1322	/*
1323	 * McKinley boxes do not like us fiddling with AssistState
1324	 * this early
1325	 */
1326	writel(1, &regs->AssistState);
1327#endif
1328
1329	writel(DEF_STAT, &regs->TuneStatTicks);
1330	writel(DEF_TRACE, &regs->TuneTrace);
1331
1332	ace_set_rxtx_parms(dev, 0);
1333
1334	if (board_idx == BOARD_IDX_OVERFLOW) {
1335		printk(KERN_WARNING "%s: more than %i NICs detected, "
1336		       "ignoring module parameters!\n",
1337		       ap->name, ACE_MAX_MOD_PARMS);
1338	} else if (board_idx >= 0) {
1339		if (tx_coal_tick[board_idx])
1340			writel(tx_coal_tick[board_idx],
1341			       &regs->TuneTxCoalTicks);
1342		if (max_tx_desc[board_idx])
1343			writel(max_tx_desc[board_idx], &regs->TuneMaxTxDesc);
1344
1345		if (rx_coal_tick[board_idx])
1346			writel(rx_coal_tick[board_idx],
1347			       &regs->TuneRxCoalTicks);
1348		if (max_rx_desc[board_idx])
1349			writel(max_rx_desc[board_idx], &regs->TuneMaxRxDesc);
1350
1351		if (trace[board_idx])
1352			writel(trace[board_idx], &regs->TuneTrace);
1353
1354		if ((tx_ratio[board_idx] > 0) && (tx_ratio[board_idx] < 64))
1355			writel(tx_ratio[board_idx], &regs->TxBufRat);
1356	}
1357
1358	/*
1359	 * Default link parameters
1360	 */
1361	tmp = LNK_ENABLE | LNK_FULL_DUPLEX | LNK_1000MB | LNK_100MB |
1362		LNK_10MB | LNK_RX_FLOW_CTL_Y | LNK_NEG_FCTL | LNK_NEGOTIATE;
1363	if(ap->version >= 2)
1364		tmp |= LNK_TX_FLOW_CTL_Y;
1365
1366	/*
1367	 * Override link default parameters
1368	 */
1369	if ((board_idx >= 0) && link_state[board_idx]) {
1370		int option = link_state[board_idx];
1371
1372		tmp = LNK_ENABLE;
1373
1374		if (option & 0x01) {
1375			printk(KERN_INFO "%s: Setting half duplex link\n",
1376			       ap->name);
1377			tmp &= ~LNK_FULL_DUPLEX;
1378		}
1379		if (option & 0x02)
1380			tmp &= ~LNK_NEGOTIATE;
1381		if (option & 0x10)
1382			tmp |= LNK_10MB;
1383		if (option & 0x20)
1384			tmp |= LNK_100MB;
1385		if (option & 0x40)
1386			tmp |= LNK_1000MB;
1387		if ((option & 0x70) == 0) {
1388			printk(KERN_WARNING "%s: No media speed specified, "
1389			       "forcing auto negotiation\n", ap->name);
1390			tmp |= LNK_NEGOTIATE | LNK_1000MB |
1391				LNK_100MB | LNK_10MB;
1392		}
1393		if ((option & 0x100) == 0)
1394			tmp |= LNK_NEG_FCTL;
1395		else
1396			printk(KERN_INFO "%s: Disabling flow control "
1397			       "negotiation\n", ap->name);
1398		if (option & 0x200)
1399			tmp |= LNK_RX_FLOW_CTL_Y;
1400		if ((option & 0x400) && (ap->version >= 2)) {
1401			printk(KERN_INFO "%s: Enabling TX flow control\n",
1402			       ap->name);
1403			tmp |= LNK_TX_FLOW_CTL_Y;
1404		}
1405	}
1406
1407	ap->link = tmp;
1408	writel(tmp, &regs->TuneLink);
1409	if (ap->version >= 2)
1410		writel(tmp, &regs->TuneFastLink);
1411
1412	writel(ap->firmware_start, &regs->Pc);
1413
1414	writel(0, &regs->Mb0Lo);
1415
1416	/*
1417	 * Set tx_csm before we start receiving interrupts, otherwise
1418	 * the interrupt handler might think it is supposed to process
1419	 * tx ints before we are up and running, which may cause a null
1420	 * pointer access in the int handler.
1421	 */
1422	ap->cur_rx = 0;
1423	ap->tx_prd = *(ap->tx_csm) = ap->tx_ret_csm = 0;
1424
1425	wmb();
1426	ace_set_txprd(regs, ap, 0);
1427	writel(0, &regs->RxRetCsm);
1428
1429	/*
1430	 * Enable DMA engine now.
1431	 * If we do this sooner, Mckinley box pukes.
1432	 * I assume it's because Tigon II DMA engine wants to check
1433	 * *something* even before the CPU is started.
1434	 */
1435	writel(1, &regs->AssistState);  /* enable DMA */
1436
1437	/*
1438	 * Start the NIC CPU
1439	 */
1440	writel(readl(&regs->CpuCtrl) & ~(CPU_HALT|CPU_TRACE), &regs->CpuCtrl);
1441	readl(&regs->CpuCtrl);
1442
1443	/*
1444	 * Wait for the firmware to spin up - max 3 seconds.
1445	 */
1446	myjif = jiffies + 3 * HZ;
1447	while (time_before(jiffies, myjif) && !ap->fw_running)
1448		cpu_relax();
1449
1450	if (!ap->fw_running) {
1451		printk(KERN_ERR "%s: Firmware NOT running!\n", ap->name);
1452
1453		ace_dump_trace(ap);
1454		writel(readl(&regs->CpuCtrl) | CPU_HALT, &regs->CpuCtrl);
1455		readl(&regs->CpuCtrl);
1456
1457		/* aman@sgi.com - account for badly behaving firmware/NIC:
1458		 * - have observed that the NIC may continue to generate
1459		 *   interrupts for some reason; attempt to stop it - halt
1460		 *   second CPU for Tigon II cards, and also clear Mb0
1461		 * - if we're a module, we'll fail to load if this was
1462		 *   the only GbE card in the system => if the kernel does
1463		 *   see an interrupt from the NIC, code to handle it is
1464		 *   gone and OOps! - so free_irq also
1465		 */
1466		if (ap->version >= 2)
1467			writel(readl(&regs->CpuBCtrl) | CPU_HALT,
1468			       &regs->CpuBCtrl);
1469		writel(0, &regs->Mb0Lo);
1470		readl(&regs->Mb0Lo);
1471
1472		ecode = -EBUSY;
1473		goto init_error;
1474	}
1475
1476	/*
1477	 * We load the ring here as there seem to be no way to tell the
1478	 * firmware to wipe the ring without re-initializing it.
1479	 */
1480	if (!test_and_set_bit(0, &ap->std_refill_busy))
1481		ace_load_std_rx_ring(dev, RX_RING_SIZE);
1482	else
1483		printk(KERN_ERR "%s: Someone is busy refilling the RX ring\n",
1484		       ap->name);
1485	if (ap->version >= 2) {
1486		if (!test_and_set_bit(0, &ap->mini_refill_busy))
1487			ace_load_mini_rx_ring(dev, RX_MINI_SIZE);
1488		else
1489			printk(KERN_ERR "%s: Someone is busy refilling "
1490			       "the RX mini ring\n", ap->name);
1491	}
1492	return 0;
1493
1494 init_error:
1495	ace_init_cleanup(dev);
1496	return ecode;
1497}
1498
1499
1500static void ace_set_rxtx_parms(struct net_device *dev, int jumbo)
1501{
1502	struct ace_private *ap = netdev_priv(dev);
1503	struct ace_regs __iomem *regs = ap->regs;
1504	int board_idx = ap->board_idx;
1505
1506	if (board_idx >= 0) {
1507		if (!jumbo) {
1508			if (!tx_coal_tick[board_idx])
1509				writel(DEF_TX_COAL, &regs->TuneTxCoalTicks);
1510			if (!max_tx_desc[board_idx])
1511				writel(DEF_TX_MAX_DESC, &regs->TuneMaxTxDesc);
1512			if (!rx_coal_tick[board_idx])
1513				writel(DEF_RX_COAL, &regs->TuneRxCoalTicks);
1514			if (!max_rx_desc[board_idx])
1515				writel(DEF_RX_MAX_DESC, &regs->TuneMaxRxDesc);
1516			if (!tx_ratio[board_idx])
1517				writel(DEF_TX_RATIO, &regs->TxBufRat);
1518		} else {
1519			if (!tx_coal_tick[board_idx])
1520				writel(DEF_JUMBO_TX_COAL,
1521				       &regs->TuneTxCoalTicks);
1522			if (!max_tx_desc[board_idx])
1523				writel(DEF_JUMBO_TX_MAX_DESC,
1524				       &regs->TuneMaxTxDesc);
1525			if (!rx_coal_tick[board_idx])
1526				writel(DEF_JUMBO_RX_COAL,
1527				       &regs->TuneRxCoalTicks);
1528			if (!max_rx_desc[board_idx])
1529				writel(DEF_JUMBO_RX_MAX_DESC,
1530				       &regs->TuneMaxRxDesc);
1531			if (!tx_ratio[board_idx])
1532				writel(DEF_JUMBO_TX_RATIO, &regs->TxBufRat);
1533		}
1534	}
1535}
1536
1537
1538static void ace_watchdog(struct net_device *data, unsigned int txqueue)
1539{
1540	struct net_device *dev = data;
1541	struct ace_private *ap = netdev_priv(dev);
1542	struct ace_regs __iomem *regs = ap->regs;
1543
1544	/*
1545	 * We haven't received a stats update event for more than 2.5
1546	 * seconds and there is data in the transmit queue, thus we
1547	 * assume the card is stuck.
1548	 */
1549	if (*ap->tx_csm != ap->tx_ret_csm) {
1550		printk(KERN_WARNING "%s: Transmitter is stuck, %08x\n",
1551		       dev->name, (unsigned int)readl(&regs->HostCtrl));
1552		/* This can happen due to ieee flow control. */
1553	} else {
1554		printk(KERN_DEBUG "%s: BUG... transmitter died. Kicking it.\n",
1555		       dev->name);
1556#if 0
1557		netif_wake_queue(dev);
1558#endif
1559	}
1560}
1561
1562
1563static void ace_tasklet(struct tasklet_struct *t)
1564{
1565	struct ace_private *ap = from_tasklet(ap, t, ace_tasklet);
1566	struct net_device *dev = ap->ndev;
1567	int cur_size;
1568
1569	cur_size = atomic_read(&ap->cur_rx_bufs);
1570	if ((cur_size < RX_LOW_STD_THRES) &&
1571	    !test_and_set_bit(0, &ap->std_refill_busy)) {
1572#ifdef DEBUG
1573		printk("refilling buffers (current %i)\n", cur_size);
1574#endif
1575		ace_load_std_rx_ring(dev, RX_RING_SIZE - cur_size);
1576	}
1577
1578	if (ap->version >= 2) {
1579		cur_size = atomic_read(&ap->cur_mini_bufs);
1580		if ((cur_size < RX_LOW_MINI_THRES) &&
1581		    !test_and_set_bit(0, &ap->mini_refill_busy)) {
1582#ifdef DEBUG
1583			printk("refilling mini buffers (current %i)\n",
1584			       cur_size);
1585#endif
1586			ace_load_mini_rx_ring(dev, RX_MINI_SIZE - cur_size);
1587		}
1588	}
1589
1590	cur_size = atomic_read(&ap->cur_jumbo_bufs);
1591	if (ap->jumbo && (cur_size < RX_LOW_JUMBO_THRES) &&
1592	    !test_and_set_bit(0, &ap->jumbo_refill_busy)) {
1593#ifdef DEBUG
1594		printk("refilling jumbo buffers (current %i)\n", cur_size);
1595#endif
1596		ace_load_jumbo_rx_ring(dev, RX_JUMBO_SIZE - cur_size);
1597	}
1598	ap->tasklet_pending = 0;
1599}
1600
1601
1602/*
1603 * Copy the contents of the NIC's trace buffer to kernel memory.
1604 */
1605static void ace_dump_trace(struct ace_private *ap)
1606{
1607#if 0
1608	if (!ap->trace_buf)
1609		if (!(ap->trace_buf = kmalloc(ACE_TRACE_SIZE, GFP_KERNEL)))
1610		    return;
1611#endif
1612}
1613
1614
1615/*
1616 * Load the standard rx ring.
1617 *
1618 * Loading rings is safe without holding the spin lock since this is
1619 * done only before the device is enabled, thus no interrupts are
1620 * generated and by the interrupt handler/tasklet handler.
1621 */
1622static void ace_load_std_rx_ring(struct net_device *dev, int nr_bufs)
1623{
1624	struct ace_private *ap = netdev_priv(dev);
1625	struct ace_regs __iomem *regs = ap->regs;
1626	short i, idx;
1627
1628
1629	prefetchw(&ap->cur_rx_bufs);
1630
1631	idx = ap->rx_std_skbprd;
1632
1633	for (i = 0; i < nr_bufs; i++) {
1634		struct sk_buff *skb;
1635		struct rx_desc *rd;
1636		dma_addr_t mapping;
1637
1638		skb = netdev_alloc_skb_ip_align(dev, ACE_STD_BUFSIZE);
1639		if (!skb)
1640			break;
1641
1642		mapping = dma_map_page(&ap->pdev->dev,
1643				       virt_to_page(skb->data),
1644				       offset_in_page(skb->data),
1645				       ACE_STD_BUFSIZE, DMA_FROM_DEVICE);
1646		ap->skb->rx_std_skbuff[idx].skb = skb;
1647		dma_unmap_addr_set(&ap->skb->rx_std_skbuff[idx],
1648				   mapping, mapping);
1649
1650		rd = &ap->rx_std_ring[idx];
1651		set_aceaddr(&rd->addr, mapping);
1652		rd->size = ACE_STD_BUFSIZE;
1653		rd->idx = idx;
1654		idx = (idx + 1) % RX_STD_RING_ENTRIES;
1655	}
1656
1657	if (!i)
1658		goto error_out;
1659
1660	atomic_add(i, &ap->cur_rx_bufs);
1661	ap->rx_std_skbprd = idx;
1662
1663	if (ACE_IS_TIGON_I(ap)) {
1664		struct cmd cmd;
1665		cmd.evt = C_SET_RX_PRD_IDX;
1666		cmd.code = 0;
1667		cmd.idx = ap->rx_std_skbprd;
1668		ace_issue_cmd(regs, &cmd);
1669	} else {
1670		writel(idx, &regs->RxStdPrd);
1671		wmb();
1672	}
1673
1674 out:
1675	clear_bit(0, &ap->std_refill_busy);
1676	return;
1677
1678 error_out:
1679	printk(KERN_INFO "Out of memory when allocating "
1680	       "standard receive buffers\n");
1681	goto out;
1682}
1683
1684
1685static void ace_load_mini_rx_ring(struct net_device *dev, int nr_bufs)
1686{
1687	struct ace_private *ap = netdev_priv(dev);
1688	struct ace_regs __iomem *regs = ap->regs;
1689	short i, idx;
1690
1691	prefetchw(&ap->cur_mini_bufs);
1692
1693	idx = ap->rx_mini_skbprd;
1694	for (i = 0; i < nr_bufs; i++) {
1695		struct sk_buff *skb;
1696		struct rx_desc *rd;
1697		dma_addr_t mapping;
1698
1699		skb = netdev_alloc_skb_ip_align(dev, ACE_MINI_BUFSIZE);
1700		if (!skb)
1701			break;
1702
1703		mapping = dma_map_page(&ap->pdev->dev,
1704				       virt_to_page(skb->data),
1705				       offset_in_page(skb->data),
1706				       ACE_MINI_BUFSIZE, DMA_FROM_DEVICE);
1707		ap->skb->rx_mini_skbuff[idx].skb = skb;
1708		dma_unmap_addr_set(&ap->skb->rx_mini_skbuff[idx],
1709				   mapping, mapping);
1710
1711		rd = &ap->rx_mini_ring[idx];
1712		set_aceaddr(&rd->addr, mapping);
1713		rd->size = ACE_MINI_BUFSIZE;
1714		rd->idx = idx;
1715		idx = (idx + 1) % RX_MINI_RING_ENTRIES;
1716	}
1717
1718	if (!i)
1719		goto error_out;
1720
1721	atomic_add(i, &ap->cur_mini_bufs);
1722
1723	ap->rx_mini_skbprd = idx;
1724
1725	writel(idx, &regs->RxMiniPrd);
1726	wmb();
1727
1728 out:
1729	clear_bit(0, &ap->mini_refill_busy);
1730	return;
1731 error_out:
1732	printk(KERN_INFO "Out of memory when allocating "
1733	       "mini receive buffers\n");
1734	goto out;
1735}
1736
1737
1738/*
1739 * Load the jumbo rx ring, this may happen at any time if the MTU
1740 * is changed to a value > 1500.
1741 */
1742static void ace_load_jumbo_rx_ring(struct net_device *dev, int nr_bufs)
1743{
1744	struct ace_private *ap = netdev_priv(dev);
1745	struct ace_regs __iomem *regs = ap->regs;
1746	short i, idx;
1747
1748	idx = ap->rx_jumbo_skbprd;
1749
1750	for (i = 0; i < nr_bufs; i++) {
1751		struct sk_buff *skb;
1752		struct rx_desc *rd;
1753		dma_addr_t mapping;
1754
1755		skb = netdev_alloc_skb_ip_align(dev, ACE_JUMBO_BUFSIZE);
1756		if (!skb)
1757			break;
1758
1759		mapping = dma_map_page(&ap->pdev->dev,
1760				       virt_to_page(skb->data),
1761				       offset_in_page(skb->data),
1762				       ACE_JUMBO_BUFSIZE, DMA_FROM_DEVICE);
1763		ap->skb->rx_jumbo_skbuff[idx].skb = skb;
1764		dma_unmap_addr_set(&ap->skb->rx_jumbo_skbuff[idx],
1765				   mapping, mapping);
1766
1767		rd = &ap->rx_jumbo_ring[idx];
1768		set_aceaddr(&rd->addr, mapping);
1769		rd->size = ACE_JUMBO_BUFSIZE;
1770		rd->idx = idx;
1771		idx = (idx + 1) % RX_JUMBO_RING_ENTRIES;
1772	}
1773
1774	if (!i)
1775		goto error_out;
1776
1777	atomic_add(i, &ap->cur_jumbo_bufs);
1778	ap->rx_jumbo_skbprd = idx;
1779
1780	if (ACE_IS_TIGON_I(ap)) {
1781		struct cmd cmd;
1782		cmd.evt = C_SET_RX_JUMBO_PRD_IDX;
1783		cmd.code = 0;
1784		cmd.idx = ap->rx_jumbo_skbprd;
1785		ace_issue_cmd(regs, &cmd);
1786	} else {
1787		writel(idx, &regs->RxJumboPrd);
1788		wmb();
1789	}
1790
1791 out:
1792	clear_bit(0, &ap->jumbo_refill_busy);
1793	return;
1794 error_out:
1795	if (net_ratelimit())
1796		printk(KERN_INFO "Out of memory when allocating "
1797		       "jumbo receive buffers\n");
1798	goto out;
1799}
1800
1801
1802/*
1803 * All events are considered to be slow (RX/TX ints do not generate
1804 * events) and are handled here, outside the main interrupt handler,
1805 * to reduce the size of the handler.
1806 */
1807static u32 ace_handle_event(struct net_device *dev, u32 evtcsm, u32 evtprd)
1808{
1809	struct ace_private *ap;
1810
1811	ap = netdev_priv(dev);
1812
1813	while (evtcsm != evtprd) {
1814		switch (ap->evt_ring[evtcsm].evt) {
1815		case E_FW_RUNNING:
1816			printk(KERN_INFO "%s: Firmware up and running\n",
1817			       ap->name);
1818			ap->fw_running = 1;
1819			wmb();
1820			break;
1821		case E_STATS_UPDATED:
1822			break;
1823		case E_LNK_STATE:
1824		{
1825			u16 code = ap->evt_ring[evtcsm].code;
1826			switch (code) {
1827			case E_C_LINK_UP:
1828			{
1829				u32 state = readl(&ap->regs->GigLnkState);
1830				printk(KERN_WARNING "%s: Optical link UP "
1831				       "(%s Duplex, Flow Control: %s%s)\n",
1832				       ap->name,
1833				       state & LNK_FULL_DUPLEX ? "Full":"Half",
1834				       state & LNK_TX_FLOW_CTL_Y ? "TX " : "",
1835				       state & LNK_RX_FLOW_CTL_Y ? "RX" : "");
1836				break;
1837			}
1838			case E_C_LINK_DOWN:
1839				printk(KERN_WARNING "%s: Optical link DOWN\n",
1840				       ap->name);
1841				break;
1842			case E_C_LINK_10_100:
1843				printk(KERN_WARNING "%s: 10/100BaseT link "
1844				       "UP\n", ap->name);
1845				break;
1846			default:
1847				printk(KERN_ERR "%s: Unknown optical link "
1848				       "state %02x\n", ap->name, code);
1849			}
1850			break;
1851		}
1852		case E_ERROR:
1853			switch(ap->evt_ring[evtcsm].code) {
1854			case E_C_ERR_INVAL_CMD:
1855				printk(KERN_ERR "%s: invalid command error\n",
1856				       ap->name);
1857				break;
1858			case E_C_ERR_UNIMP_CMD:
1859				printk(KERN_ERR "%s: unimplemented command "
1860				       "error\n", ap->name);
1861				break;
1862			case E_C_ERR_BAD_CFG:
1863				printk(KERN_ERR "%s: bad config error\n",
1864				       ap->name);
1865				break;
1866			default:
1867				printk(KERN_ERR "%s: unknown error %02x\n",
1868				       ap->name, ap->evt_ring[evtcsm].code);
1869			}
1870			break;
1871		case E_RESET_JUMBO_RNG:
1872		{
1873			int i;
1874			for (i = 0; i < RX_JUMBO_RING_ENTRIES; i++) {
1875				if (ap->skb->rx_jumbo_skbuff[i].skb) {
1876					ap->rx_jumbo_ring[i].size = 0;
1877					set_aceaddr(&ap->rx_jumbo_ring[i].addr, 0);
1878					dev_kfree_skb(ap->skb->rx_jumbo_skbuff[i].skb);
1879					ap->skb->rx_jumbo_skbuff[i].skb = NULL;
1880				}
1881			}
1882
1883			if (ACE_IS_TIGON_I(ap)) {
1884				struct cmd cmd;
1885				cmd.evt = C_SET_RX_JUMBO_PRD_IDX;
1886				cmd.code = 0;
1887				cmd.idx = 0;
1888				ace_issue_cmd(ap->regs, &cmd);
1889			} else {
1890				writel(0, &((ap->regs)->RxJumboPrd));
1891				wmb();
1892			}
1893
1894			ap->jumbo = 0;
1895			ap->rx_jumbo_skbprd = 0;
1896			printk(KERN_INFO "%s: Jumbo ring flushed\n",
1897			       ap->name);
1898			clear_bit(0, &ap->jumbo_refill_busy);
1899			break;
1900		}
1901		default:
1902			printk(KERN_ERR "%s: Unhandled event 0x%02x\n",
1903			       ap->name, ap->evt_ring[evtcsm].evt);
1904		}
1905		evtcsm = (evtcsm + 1) % EVT_RING_ENTRIES;
1906	}
1907
1908	return evtcsm;
1909}
1910
1911
1912static void ace_rx_int(struct net_device *dev, u32 rxretprd, u32 rxretcsm)
1913{
1914	struct ace_private *ap = netdev_priv(dev);
1915	u32 idx;
1916	int mini_count = 0, std_count = 0;
1917
1918	idx = rxretcsm;
1919
1920	prefetchw(&ap->cur_rx_bufs);
1921	prefetchw(&ap->cur_mini_bufs);
1922
1923	while (idx != rxretprd) {
1924		struct ring_info *rip;
1925		struct sk_buff *skb;
1926		struct rx_desc *retdesc;
1927		u32 skbidx;
1928		int bd_flags, desc_type, mapsize;
1929		u16 csum;
1930
1931
1932		/* make sure the rx descriptor isn't read before rxretprd */
1933		if (idx == rxretcsm)
1934			rmb();
1935
1936		retdesc = &ap->rx_return_ring[idx];
1937		skbidx = retdesc->idx;
1938		bd_flags = retdesc->flags;
1939		desc_type = bd_flags & (BD_FLG_JUMBO | BD_FLG_MINI);
1940
1941		switch(desc_type) {
1942			/*
1943			 * Normal frames do not have any flags set
1944			 *
1945			 * Mini and normal frames arrive frequently,
1946			 * so use a local counter to avoid doing
1947			 * atomic operations for each packet arriving.
1948			 */
1949		case 0:
1950			rip = &ap->skb->rx_std_skbuff[skbidx];
1951			mapsize = ACE_STD_BUFSIZE;
1952			std_count++;
1953			break;
1954		case BD_FLG_JUMBO:
1955			rip = &ap->skb->rx_jumbo_skbuff[skbidx];
1956			mapsize = ACE_JUMBO_BUFSIZE;
1957			atomic_dec(&ap->cur_jumbo_bufs);
1958			break;
1959		case BD_FLG_MINI:
1960			rip = &ap->skb->rx_mini_skbuff[skbidx];
1961			mapsize = ACE_MINI_BUFSIZE;
1962			mini_count++;
1963			break;
1964		default:
1965			printk(KERN_INFO "%s: unknown frame type (0x%02x) "
1966			       "returned by NIC\n", dev->name,
1967			       retdesc->flags);
1968			goto error;
1969		}
1970
1971		skb = rip->skb;
1972		rip->skb = NULL;
1973		dma_unmap_page(&ap->pdev->dev, dma_unmap_addr(rip, mapping),
1974			       mapsize, DMA_FROM_DEVICE);
1975		skb_put(skb, retdesc->size);
1976
1977		/*
1978		 * Fly baby, fly!
1979		 */
1980		csum = retdesc->tcp_udp_csum;
1981
1982		skb->protocol = eth_type_trans(skb, dev);
1983
1984		/*
1985		 * Instead of forcing the poor tigon mips cpu to calculate
1986		 * pseudo hdr checksum, we do this ourselves.
1987		 */
1988		if (bd_flags & BD_FLG_TCP_UDP_SUM) {
1989			skb->csum = htons(csum);
1990			skb->ip_summed = CHECKSUM_COMPLETE;
1991		} else {
1992			skb_checksum_none_assert(skb);
1993		}
1994
1995		/* send it up */
1996		if ((bd_flags & BD_FLG_VLAN_TAG))
1997			__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), retdesc->vlan);
1998		netif_rx(skb);
1999
2000		dev->stats.rx_packets++;
2001		dev->stats.rx_bytes += retdesc->size;
2002
2003		idx = (idx + 1) % RX_RETURN_RING_ENTRIES;
2004	}
2005
2006	atomic_sub(std_count, &ap->cur_rx_bufs);
2007	if (!ACE_IS_TIGON_I(ap))
2008		atomic_sub(mini_count, &ap->cur_mini_bufs);
2009
2010 out:
2011	/*
2012	 * According to the documentation RxRetCsm is obsolete with
2013	 * the 12.3.x Firmware - my Tigon I NICs seem to disagree!
2014	 */
2015	if (ACE_IS_TIGON_I(ap)) {
2016		writel(idx, &ap->regs->RxRetCsm);
2017	}
2018	ap->cur_rx = idx;
2019
2020	return;
2021 error:
2022	idx = rxretprd;
2023	goto out;
2024}
2025
2026
2027static inline void ace_tx_int(struct net_device *dev,
2028			      u32 txcsm, u32 idx)
2029{
2030	struct ace_private *ap = netdev_priv(dev);
2031
2032	do {
2033		struct sk_buff *skb;
2034		struct tx_ring_info *info;
2035
2036		info = ap->skb->tx_skbuff + idx;
2037		skb = info->skb;
2038
2039		if (dma_unmap_len(info, maplen)) {
2040			dma_unmap_page(&ap->pdev->dev,
2041				       dma_unmap_addr(info, mapping),
2042				       dma_unmap_len(info, maplen),
2043				       DMA_TO_DEVICE);
2044			dma_unmap_len_set(info, maplen, 0);
2045		}
2046
2047		if (skb) {
2048			dev->stats.tx_packets++;
2049			dev->stats.tx_bytes += skb->len;
2050			dev_consume_skb_irq(skb);
2051			info->skb = NULL;
2052		}
2053
2054		idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
2055	} while (idx != txcsm);
2056
2057	if (netif_queue_stopped(dev))
2058		netif_wake_queue(dev);
2059
2060	wmb();
2061	ap->tx_ret_csm = txcsm;
2062
2063	/* So... tx_ret_csm is advanced _after_ check for device wakeup.
2064	 *
2065	 * We could try to make it before. In this case we would get
2066	 * the following race condition: hard_start_xmit on other cpu
2067	 * enters after we advanced tx_ret_csm and fills space,
2068	 * which we have just freed, so that we make illegal device wakeup.
2069	 * There is no good way to workaround this (at entry
2070	 * to ace_start_xmit detects this condition and prevents
2071	 * ring corruption, but it is not a good workaround.)
2072	 *
2073	 * When tx_ret_csm is advanced after, we wake up device _only_
2074	 * if we really have some space in ring (though the core doing
2075	 * hard_start_xmit can see full ring for some period and has to
2076	 * synchronize.) Superb.
2077	 * BUT! We get another subtle race condition. hard_start_xmit
2078	 * may think that ring is full between wakeup and advancing
2079	 * tx_ret_csm and will stop device instantly! It is not so bad.
2080	 * We are guaranteed that there is something in ring, so that
2081	 * the next irq will resume transmission. To speedup this we could
2082	 * mark descriptor, which closes ring with BD_FLG_COAL_NOW
2083	 * (see ace_start_xmit).
2084	 *
2085	 * Well, this dilemma exists in all lock-free devices.
2086	 * We, following scheme used in drivers by Donald Becker,
2087	 * select the least dangerous.
2088	 *							--ANK
2089	 */
2090}
2091
2092
2093static irqreturn_t ace_interrupt(int irq, void *dev_id)
2094{
2095	struct net_device *dev = (struct net_device *)dev_id;
2096	struct ace_private *ap = netdev_priv(dev);
2097	struct ace_regs __iomem *regs = ap->regs;
2098	u32 idx;
2099	u32 txcsm, rxretcsm, rxretprd;
2100	u32 evtcsm, evtprd;
2101
2102	/*
2103	 * In case of PCI shared interrupts or spurious interrupts,
2104	 * we want to make sure it is actually our interrupt before
2105	 * spending any time in here.
2106	 */
2107	if (!(readl(&regs->HostCtrl) & IN_INT))
2108		return IRQ_NONE;
2109
2110	/*
2111	 * ACK intr now. Otherwise we will lose updates to rx_ret_prd,
2112	 * which happened _after_ rxretprd = *ap->rx_ret_prd; but before
2113	 * writel(0, &regs->Mb0Lo).
2114	 *
2115	 * "IRQ avoidance" recommended in docs applies to IRQs served
2116	 * threads and it is wrong even for that case.
2117	 */
2118	writel(0, &regs->Mb0Lo);
2119	readl(&regs->Mb0Lo);
2120
2121	/*
2122	 * There is no conflict between transmit handling in
2123	 * start_xmit and receive processing, thus there is no reason
2124	 * to take a spin lock for RX handling. Wait until we start
2125	 * working on the other stuff - hey we don't need a spin lock
2126	 * anymore.
2127	 */
2128	rxretprd = *ap->rx_ret_prd;
2129	rxretcsm = ap->cur_rx;
2130
2131	if (rxretprd != rxretcsm)
2132		ace_rx_int(dev, rxretprd, rxretcsm);
2133
2134	txcsm = *ap->tx_csm;
2135	idx = ap->tx_ret_csm;
2136
2137	if (txcsm != idx) {
2138		/*
2139		 * If each skb takes only one descriptor this check degenerates
2140		 * to identity, because new space has just been opened.
2141		 * But if skbs are fragmented we must check that this index
2142		 * update releases enough of space, otherwise we just
2143		 * wait for device to make more work.
2144		 */
2145		if (!tx_ring_full(ap, txcsm, ap->tx_prd))
2146			ace_tx_int(dev, txcsm, idx);
2147	}
2148
2149	evtcsm = readl(&regs->EvtCsm);
2150	evtprd = *ap->evt_prd;
2151
2152	if (evtcsm != evtprd) {
2153		evtcsm = ace_handle_event(dev, evtcsm, evtprd);
2154		writel(evtcsm, &regs->EvtCsm);
2155	}
2156
2157	/*
2158	 * This has to go last in the interrupt handler and run with
2159	 * the spin lock released ... what lock?
2160	 */
2161	if (netif_running(dev)) {
2162		int cur_size;
2163		int run_tasklet = 0;
2164
2165		cur_size = atomic_read(&ap->cur_rx_bufs);
2166		if (cur_size < RX_LOW_STD_THRES) {
2167			if ((cur_size < RX_PANIC_STD_THRES) &&
2168			    !test_and_set_bit(0, &ap->std_refill_busy)) {
2169#ifdef DEBUG
2170				printk("low on std buffers %i\n", cur_size);
2171#endif
2172				ace_load_std_rx_ring(dev,
2173						     RX_RING_SIZE - cur_size);
2174			} else
2175				run_tasklet = 1;
2176		}
2177
2178		if (!ACE_IS_TIGON_I(ap)) {
2179			cur_size = atomic_read(&ap->cur_mini_bufs);
2180			if (cur_size < RX_LOW_MINI_THRES) {
2181				if ((cur_size < RX_PANIC_MINI_THRES) &&
2182				    !test_and_set_bit(0,
2183						      &ap->mini_refill_busy)) {
2184#ifdef DEBUG
2185					printk("low on mini buffers %i\n",
2186					       cur_size);
2187#endif
2188					ace_load_mini_rx_ring(dev,
2189							      RX_MINI_SIZE - cur_size);
2190				} else
2191					run_tasklet = 1;
2192			}
2193		}
2194
2195		if (ap->jumbo) {
2196			cur_size = atomic_read(&ap->cur_jumbo_bufs);
2197			if (cur_size < RX_LOW_JUMBO_THRES) {
2198				if ((cur_size < RX_PANIC_JUMBO_THRES) &&
2199				    !test_and_set_bit(0,
2200						      &ap->jumbo_refill_busy)){
2201#ifdef DEBUG
2202					printk("low on jumbo buffers %i\n",
2203					       cur_size);
2204#endif
2205					ace_load_jumbo_rx_ring(dev,
2206							       RX_JUMBO_SIZE - cur_size);
2207				} else
2208					run_tasklet = 1;
2209			}
2210		}
2211		if (run_tasklet && !ap->tasklet_pending) {
2212			ap->tasklet_pending = 1;
2213			tasklet_schedule(&ap->ace_tasklet);
2214		}
2215	}
2216
2217	return IRQ_HANDLED;
2218}
2219
2220static int ace_open(struct net_device *dev)
2221{
2222	struct ace_private *ap = netdev_priv(dev);
2223	struct ace_regs __iomem *regs = ap->regs;
2224	struct cmd cmd;
2225
2226	if (!(ap->fw_running)) {
2227		printk(KERN_WARNING "%s: Firmware not running!\n", dev->name);
2228		return -EBUSY;
2229	}
2230
2231	writel(dev->mtu + ETH_HLEN + 4, &regs->IfMtu);
2232
2233	cmd.evt = C_CLEAR_STATS;
2234	cmd.code = 0;
2235	cmd.idx = 0;
2236	ace_issue_cmd(regs, &cmd);
2237
2238	cmd.evt = C_HOST_STATE;
2239	cmd.code = C_C_STACK_UP;
2240	cmd.idx = 0;
2241	ace_issue_cmd(regs, &cmd);
2242
2243	if (ap->jumbo &&
2244	    !test_and_set_bit(0, &ap->jumbo_refill_busy))
2245		ace_load_jumbo_rx_ring(dev, RX_JUMBO_SIZE);
2246
2247	if (dev->flags & IFF_PROMISC) {
2248		cmd.evt = C_SET_PROMISC_MODE;
2249		cmd.code = C_C_PROMISC_ENABLE;
2250		cmd.idx = 0;
2251		ace_issue_cmd(regs, &cmd);
2252
2253		ap->promisc = 1;
2254	}else
2255		ap->promisc = 0;
2256	ap->mcast_all = 0;
2257
2258#if 0
2259	cmd.evt = C_LNK_NEGOTIATION;
2260	cmd.code = 0;
2261	cmd.idx = 0;
2262	ace_issue_cmd(regs, &cmd);
2263#endif
2264
2265	netif_start_queue(dev);
2266
2267	/*
2268	 * Setup the bottom half rx ring refill handler
2269	 */
2270	tasklet_setup(&ap->ace_tasklet, ace_tasklet);
2271	return 0;
2272}
2273
2274
2275static int ace_close(struct net_device *dev)
2276{
2277	struct ace_private *ap = netdev_priv(dev);
2278	struct ace_regs __iomem *regs = ap->regs;
2279	struct cmd cmd;
2280	unsigned long flags;
2281	short i;
2282
2283	/*
2284	 * Without (or before) releasing irq and stopping hardware, this
2285	 * is an absolute non-sense, by the way. It will be reset instantly
2286	 * by the first irq.
2287	 */
2288	netif_stop_queue(dev);
2289
2290
2291	if (ap->promisc) {
2292		cmd.evt = C_SET_PROMISC_MODE;
2293		cmd.code = C_C_PROMISC_DISABLE;
2294		cmd.idx = 0;
2295		ace_issue_cmd(regs, &cmd);
2296		ap->promisc = 0;
2297	}
2298
2299	cmd.evt = C_HOST_STATE;
2300	cmd.code = C_C_STACK_DOWN;
2301	cmd.idx = 0;
2302	ace_issue_cmd(regs, &cmd);
2303
2304	tasklet_kill(&ap->ace_tasklet);
2305
2306	/*
2307	 * Make sure one CPU is not processing packets while
2308	 * buffers are being released by another.
2309	 */
2310
2311	local_irq_save(flags);
2312	ace_mask_irq(dev);
2313
2314	for (i = 0; i < ACE_TX_RING_ENTRIES(ap); i++) {
2315		struct sk_buff *skb;
2316		struct tx_ring_info *info;
2317
2318		info = ap->skb->tx_skbuff + i;
2319		skb = info->skb;
2320
2321		if (dma_unmap_len(info, maplen)) {
2322			if (ACE_IS_TIGON_I(ap)) {
2323				/* NB: TIGON_1 is special, tx_ring is in io space */
2324				struct tx_desc __iomem *tx;
2325				tx = (__force struct tx_desc __iomem *) &ap->tx_ring[i];
2326				writel(0, &tx->addr.addrhi);
2327				writel(0, &tx->addr.addrlo);
2328				writel(0, &tx->flagsize);
2329			} else
2330				memset(ap->tx_ring + i, 0,
2331				       sizeof(struct tx_desc));
2332			dma_unmap_page(&ap->pdev->dev,
2333				       dma_unmap_addr(info, mapping),
2334				       dma_unmap_len(info, maplen),
2335				       DMA_TO_DEVICE);
2336			dma_unmap_len_set(info, maplen, 0);
2337		}
2338		if (skb) {
2339			dev_kfree_skb(skb);
2340			info->skb = NULL;
2341		}
2342	}
2343
2344	if (ap->jumbo) {
2345		cmd.evt = C_RESET_JUMBO_RNG;
2346		cmd.code = 0;
2347		cmd.idx = 0;
2348		ace_issue_cmd(regs, &cmd);
2349	}
2350
2351	ace_unmask_irq(dev);
2352	local_irq_restore(flags);
2353
2354	return 0;
2355}
2356
2357
2358static inline dma_addr_t
2359ace_map_tx_skb(struct ace_private *ap, struct sk_buff *skb,
2360	       struct sk_buff *tail, u32 idx)
2361{
2362	dma_addr_t mapping;
2363	struct tx_ring_info *info;
2364
2365	mapping = dma_map_page(&ap->pdev->dev, virt_to_page(skb->data),
2366			       offset_in_page(skb->data), skb->len,
2367			       DMA_TO_DEVICE);
2368
2369	info = ap->skb->tx_skbuff + idx;
2370	info->skb = tail;
2371	dma_unmap_addr_set(info, mapping, mapping);
2372	dma_unmap_len_set(info, maplen, skb->len);
2373	return mapping;
2374}
2375
2376
2377static inline void
2378ace_load_tx_bd(struct ace_private *ap, struct tx_desc *desc, u64 addr,
2379	       u32 flagsize, u32 vlan_tag)
2380{
2381#if !USE_TX_COAL_NOW
2382	flagsize &= ~BD_FLG_COAL_NOW;
2383#endif
2384
2385	if (ACE_IS_TIGON_I(ap)) {
2386		struct tx_desc __iomem *io = (__force struct tx_desc __iomem *) desc;
2387		writel(addr >> 32, &io->addr.addrhi);
2388		writel(addr & 0xffffffff, &io->addr.addrlo);
2389		writel(flagsize, &io->flagsize);
2390		writel(vlan_tag, &io->vlanres);
2391	} else {
2392		desc->addr.addrhi = addr >> 32;
2393		desc->addr.addrlo = addr;
2394		desc->flagsize = flagsize;
2395		desc->vlanres = vlan_tag;
2396	}
2397}
2398
2399
2400static netdev_tx_t ace_start_xmit(struct sk_buff *skb,
2401				  struct net_device *dev)
2402{
2403	struct ace_private *ap = netdev_priv(dev);
2404	struct ace_regs __iomem *regs = ap->regs;
2405	struct tx_desc *desc;
2406	u32 idx, flagsize;
2407	unsigned long maxjiff = jiffies + 3*HZ;
2408
2409restart:
2410	idx = ap->tx_prd;
2411
2412	if (tx_ring_full(ap, ap->tx_ret_csm, idx))
2413		goto overflow;
2414
2415	if (!skb_shinfo(skb)->nr_frags)	{
2416		dma_addr_t mapping;
2417		u32 vlan_tag = 0;
2418
2419		mapping = ace_map_tx_skb(ap, skb, skb, idx);
2420		flagsize = (skb->len << 16) | (BD_FLG_END);
2421		if (skb->ip_summed == CHECKSUM_PARTIAL)
2422			flagsize |= BD_FLG_TCP_UDP_SUM;
2423		if (skb_vlan_tag_present(skb)) {
2424			flagsize |= BD_FLG_VLAN_TAG;
2425			vlan_tag = skb_vlan_tag_get(skb);
2426		}
2427		desc = ap->tx_ring + idx;
2428		idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
2429
2430		/* Look at ace_tx_int for explanations. */
2431		if (tx_ring_full(ap, ap->tx_ret_csm, idx))
2432			flagsize |= BD_FLG_COAL_NOW;
2433
2434		ace_load_tx_bd(ap, desc, mapping, flagsize, vlan_tag);
2435	} else {
2436		dma_addr_t mapping;
2437		u32 vlan_tag = 0;
2438		int i;
2439
2440		mapping = ace_map_tx_skb(ap, skb, NULL, idx);
2441		flagsize = (skb_headlen(skb) << 16);
2442		if (skb->ip_summed == CHECKSUM_PARTIAL)
2443			flagsize |= BD_FLG_TCP_UDP_SUM;
2444		if (skb_vlan_tag_present(skb)) {
2445			flagsize |= BD_FLG_VLAN_TAG;
2446			vlan_tag = skb_vlan_tag_get(skb);
2447		}
2448
2449		ace_load_tx_bd(ap, ap->tx_ring + idx, mapping, flagsize, vlan_tag);
2450
2451		idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
2452
2453		for (i = 0; i < skb_shinfo(skb)->nr_frags; i++) {
2454			const skb_frag_t *frag = &skb_shinfo(skb)->frags[i];
2455			struct tx_ring_info *info;
2456
2457			info = ap->skb->tx_skbuff + idx;
2458			desc = ap->tx_ring + idx;
2459
2460			mapping = skb_frag_dma_map(&ap->pdev->dev, frag, 0,
2461						   skb_frag_size(frag),
2462						   DMA_TO_DEVICE);
2463
2464			flagsize = skb_frag_size(frag) << 16;
2465			if (skb->ip_summed == CHECKSUM_PARTIAL)
2466				flagsize |= BD_FLG_TCP_UDP_SUM;
2467			idx = (idx + 1) % ACE_TX_RING_ENTRIES(ap);
2468
2469			if (i == skb_shinfo(skb)->nr_frags - 1) {
2470				flagsize |= BD_FLG_END;
2471				if (tx_ring_full(ap, ap->tx_ret_csm, idx))
2472					flagsize |= BD_FLG_COAL_NOW;
2473
2474				/*
2475				 * Only the last fragment frees
2476				 * the skb!
2477				 */
2478				info->skb = skb;
2479			} else {
2480				info->skb = NULL;
2481			}
2482			dma_unmap_addr_set(info, mapping, mapping);
2483			dma_unmap_len_set(info, maplen, skb_frag_size(frag));
2484			ace_load_tx_bd(ap, desc, mapping, flagsize, vlan_tag);
2485		}
2486	}
2487
2488	wmb();
2489	ap->tx_prd = idx;
2490	ace_set_txprd(regs, ap, idx);
2491
2492	if (flagsize & BD_FLG_COAL_NOW) {
2493		netif_stop_queue(dev);
2494
2495		/*
2496		 * A TX-descriptor producer (an IRQ) might have gotten
2497		 * between, making the ring free again. Since xmit is
2498		 * serialized, this is the only situation we have to
2499		 * re-test.
2500		 */
2501		if (!tx_ring_full(ap, ap->tx_ret_csm, idx))
2502			netif_wake_queue(dev);
2503	}
2504
2505	return NETDEV_TX_OK;
2506
2507overflow:
2508	/*
2509	 * This race condition is unavoidable with lock-free drivers.
2510	 * We wake up the queue _before_ tx_prd is advanced, so that we can
2511	 * enter hard_start_xmit too early, while tx ring still looks closed.
2512	 * This happens ~1-4 times per 100000 packets, so that we can allow
2513	 * to loop syncing to other CPU. Probably, we need an additional
2514	 * wmb() in ace_tx_intr as well.
2515	 *
2516	 * Note that this race is relieved by reserving one more entry
2517	 * in tx ring than it is necessary (see original non-SG driver).
2518	 * However, with SG we need to reserve 2*MAX_SKB_FRAGS+1, which
2519	 * is already overkill.
2520	 *
2521	 * Alternative is to return with 1 not throttling queue. In this
2522	 * case loop becomes longer, no more useful effects.
2523	 */
2524	if (time_before(jiffies, maxjiff)) {
2525		barrier();
2526		cpu_relax();
2527		goto restart;
2528	}
2529
2530	/* The ring is stuck full. */
2531	printk(KERN_WARNING "%s: Transmit ring stuck full\n", dev->name);
2532	return NETDEV_TX_BUSY;
2533}
2534
2535
2536static int ace_change_mtu(struct net_device *dev, int new_mtu)
2537{
2538	struct ace_private *ap = netdev_priv(dev);
2539	struct ace_regs __iomem *regs = ap->regs;
2540
2541	writel(new_mtu + ETH_HLEN + 4, &regs->IfMtu);
2542	dev->mtu = new_mtu;
2543
2544	if (new_mtu > ACE_STD_MTU) {
2545		if (!(ap->jumbo)) {
2546			printk(KERN_INFO "%s: Enabling Jumbo frame "
2547			       "support\n", dev->name);
2548			ap->jumbo = 1;
2549			if (!test_and_set_bit(0, &ap->jumbo_refill_busy))
2550				ace_load_jumbo_rx_ring(dev, RX_JUMBO_SIZE);
2551			ace_set_rxtx_parms(dev, 1);
2552		}
2553	} else {
2554		while (test_and_set_bit(0, &ap->jumbo_refill_busy));
2555		ace_sync_irq(dev->irq);
2556		ace_set_rxtx_parms(dev, 0);
2557		if (ap->jumbo) {
2558			struct cmd cmd;
2559
2560			cmd.evt = C_RESET_JUMBO_RNG;
2561			cmd.code = 0;
2562			cmd.idx = 0;
2563			ace_issue_cmd(regs, &cmd);
2564		}
2565	}
2566
2567	return 0;
2568}
2569
2570static int ace_get_link_ksettings(struct net_device *dev,
2571				  struct ethtool_link_ksettings *cmd)
2572{
2573	struct ace_private *ap = netdev_priv(dev);
2574	struct ace_regs __iomem *regs = ap->regs;
2575	u32 link;
2576	u32 supported;
2577
2578	memset(cmd, 0, sizeof(struct ethtool_link_ksettings));
2579
2580	supported = (SUPPORTED_10baseT_Half | SUPPORTED_10baseT_Full |
2581		     SUPPORTED_100baseT_Half | SUPPORTED_100baseT_Full |
2582		     SUPPORTED_1000baseT_Half | SUPPORTED_1000baseT_Full |
2583		     SUPPORTED_Autoneg | SUPPORTED_FIBRE);
2584
2585	cmd->base.port = PORT_FIBRE;
2586
2587	link = readl(&regs->GigLnkState);
2588	if (link & LNK_1000MB) {
2589		cmd->base.speed = SPEED_1000;
2590	} else {
2591		link = readl(&regs->FastLnkState);
2592		if (link & LNK_100MB)
2593			cmd->base.speed = SPEED_100;
2594		else if (link & LNK_10MB)
2595			cmd->base.speed = SPEED_10;
2596		else
2597			cmd->base.speed = 0;
2598	}
2599	if (link & LNK_FULL_DUPLEX)
2600		cmd->base.duplex = DUPLEX_FULL;
2601	else
2602		cmd->base.duplex = DUPLEX_HALF;
2603
2604	if (link & LNK_NEGOTIATE)
2605		cmd->base.autoneg = AUTONEG_ENABLE;
2606	else
2607		cmd->base.autoneg = AUTONEG_DISABLE;
2608
2609#if 0
2610	/*
2611	 * Current struct ethtool_cmd is insufficient
2612	 */
2613	ecmd->trace = readl(&regs->TuneTrace);
2614
2615	ecmd->txcoal = readl(&regs->TuneTxCoalTicks);
2616	ecmd->rxcoal = readl(&regs->TuneRxCoalTicks);
2617#endif
2618
2619	ethtool_convert_legacy_u32_to_link_mode(cmd->link_modes.supported,
2620						supported);
2621
2622	return 0;
2623}
2624
2625static int ace_set_link_ksettings(struct net_device *dev,
2626				  const struct ethtool_link_ksettings *cmd)
2627{
2628	struct ace_private *ap = netdev_priv(dev);
2629	struct ace_regs __iomem *regs = ap->regs;
2630	u32 link, speed;
2631
2632	link = readl(&regs->GigLnkState);
2633	if (link & LNK_1000MB)
2634		speed = SPEED_1000;
2635	else {
2636		link = readl(&regs->FastLnkState);
2637		if (link & LNK_100MB)
2638			speed = SPEED_100;
2639		else if (link & LNK_10MB)
2640			speed = SPEED_10;
2641		else
2642			speed = SPEED_100;
2643	}
2644
2645	link = LNK_ENABLE | LNK_1000MB | LNK_100MB | LNK_10MB |
2646		LNK_RX_FLOW_CTL_Y | LNK_NEG_FCTL;
2647	if (!ACE_IS_TIGON_I(ap))
2648		link |= LNK_TX_FLOW_CTL_Y;
2649	if (cmd->base.autoneg == AUTONEG_ENABLE)
2650		link |= LNK_NEGOTIATE;
2651	if (cmd->base.speed != speed) {
2652		link &= ~(LNK_1000MB | LNK_100MB | LNK_10MB);
2653		switch (cmd->base.speed) {
2654		case SPEED_1000:
2655			link |= LNK_1000MB;
2656			break;
2657		case SPEED_100:
2658			link |= LNK_100MB;
2659			break;
2660		case SPEED_10:
2661			link |= LNK_10MB;
2662			break;
2663		}
2664	}
2665
2666	if (cmd->base.duplex == DUPLEX_FULL)
2667		link |= LNK_FULL_DUPLEX;
2668
2669	if (link != ap->link) {
2670		struct cmd cmd;
2671		printk(KERN_INFO "%s: Renegotiating link state\n",
2672		       dev->name);
2673
2674		ap->link = link;
2675		writel(link, &regs->TuneLink);
2676		if (!ACE_IS_TIGON_I(ap))
2677			writel(link, &regs->TuneFastLink);
2678		wmb();
2679
2680		cmd.evt = C_LNK_NEGOTIATION;
2681		cmd.code = 0;
2682		cmd.idx = 0;
2683		ace_issue_cmd(regs, &cmd);
2684	}
2685	return 0;
2686}
2687
2688static void ace_get_drvinfo(struct net_device *dev,
2689			    struct ethtool_drvinfo *info)
2690{
2691	struct ace_private *ap = netdev_priv(dev);
2692
2693	strscpy(info->driver, "acenic", sizeof(info->driver));
2694	snprintf(info->fw_version, sizeof(info->version), "%i.%i.%i",
2695		 ap->firmware_major, ap->firmware_minor, ap->firmware_fix);
2696
2697	if (ap->pdev)
2698		strscpy(info->bus_info, pci_name(ap->pdev),
2699			sizeof(info->bus_info));
2700
2701}
2702
2703/*
2704 * Set the hardware MAC address.
2705 */
2706static int ace_set_mac_addr(struct net_device *dev, void *p)
2707{
2708	struct ace_private *ap = netdev_priv(dev);
2709	struct ace_regs __iomem *regs = ap->regs;
2710	struct sockaddr *addr=p;
2711	const u8 *da;
2712	struct cmd cmd;
2713
2714	if(netif_running(dev))
2715		return -EBUSY;
2716
2717	eth_hw_addr_set(dev, addr->sa_data);
2718
2719	da = (const u8 *)dev->dev_addr;
2720
2721	writel(da[0] << 8 | da[1], &regs->MacAddrHi);
2722	writel((da[2] << 24) | (da[3] << 16) | (da[4] << 8) | da[5],
2723	       &regs->MacAddrLo);
2724
2725	cmd.evt = C_SET_MAC_ADDR;
2726	cmd.code = 0;
2727	cmd.idx = 0;
2728	ace_issue_cmd(regs, &cmd);
2729
2730	return 0;
2731}
2732
2733
2734static void ace_set_multicast_list(struct net_device *dev)
2735{
2736	struct ace_private *ap = netdev_priv(dev);
2737	struct ace_regs __iomem *regs = ap->regs;
2738	struct cmd cmd;
2739
2740	if ((dev->flags & IFF_ALLMULTI) && !(ap->mcast_all)) {
2741		cmd.evt = C_SET_MULTICAST_MODE;
2742		cmd.code = C_C_MCAST_ENABLE;
2743		cmd.idx = 0;
2744		ace_issue_cmd(regs, &cmd);
2745		ap->mcast_all = 1;
2746	} else if (ap->mcast_all) {
2747		cmd.evt = C_SET_MULTICAST_MODE;
2748		cmd.code = C_C_MCAST_DISABLE;
2749		cmd.idx = 0;
2750		ace_issue_cmd(regs, &cmd);
2751		ap->mcast_all = 0;
2752	}
2753
2754	if ((dev->flags & IFF_PROMISC) && !(ap->promisc)) {
2755		cmd.evt = C_SET_PROMISC_MODE;
2756		cmd.code = C_C_PROMISC_ENABLE;
2757		cmd.idx = 0;
2758		ace_issue_cmd(regs, &cmd);
2759		ap->promisc = 1;
2760	}else if (!(dev->flags & IFF_PROMISC) && (ap->promisc)) {
2761		cmd.evt = C_SET_PROMISC_MODE;
2762		cmd.code = C_C_PROMISC_DISABLE;
2763		cmd.idx = 0;
2764		ace_issue_cmd(regs, &cmd);
2765		ap->promisc = 0;
2766	}
2767
2768	/*
2769	 * For the time being multicast relies on the upper layers
2770	 * filtering it properly. The Firmware does not allow one to
2771	 * set the entire multicast list at a time and keeping track of
2772	 * it here is going to be messy.
2773	 */
2774	if (!netdev_mc_empty(dev) && !ap->mcast_all) {
2775		cmd.evt = C_SET_MULTICAST_MODE;
2776		cmd.code = C_C_MCAST_ENABLE;
2777		cmd.idx = 0;
2778		ace_issue_cmd(regs, &cmd);
2779	}else if (!ap->mcast_all) {
2780		cmd.evt = C_SET_MULTICAST_MODE;
2781		cmd.code = C_C_MCAST_DISABLE;
2782		cmd.idx = 0;
2783		ace_issue_cmd(regs, &cmd);
2784	}
2785}
2786
2787
2788static struct net_device_stats *ace_get_stats(struct net_device *dev)
2789{
2790	struct ace_private *ap = netdev_priv(dev);
2791	struct ace_mac_stats __iomem *mac_stats =
2792		(struct ace_mac_stats __iomem *)ap->regs->Stats;
2793
2794	dev->stats.rx_missed_errors = readl(&mac_stats->drop_space);
2795	dev->stats.multicast = readl(&mac_stats->kept_mc);
2796	dev->stats.collisions = readl(&mac_stats->coll);
2797
2798	return &dev->stats;
2799}
2800
2801
2802static void ace_copy(struct ace_regs __iomem *regs, const __be32 *src,
2803		     u32 dest, int size)
2804{
2805	void __iomem *tdest;
2806	short tsize, i;
2807
2808	if (size <= 0)
2809		return;
2810
2811	while (size > 0) {
2812		tsize = min_t(u32, ((~dest & (ACE_WINDOW_SIZE - 1)) + 1),
2813			    min_t(u32, size, ACE_WINDOW_SIZE));
2814		tdest = (void __iomem *) &regs->Window +
2815			(dest & (ACE_WINDOW_SIZE - 1));
2816		writel(dest & ~(ACE_WINDOW_SIZE - 1), &regs->WinBase);
2817		for (i = 0; i < (tsize / 4); i++) {
2818			/* Firmware is big-endian */
2819			writel(be32_to_cpup(src), tdest);
2820			src++;
2821			tdest += 4;
2822			dest += 4;
2823			size -= 4;
2824		}
2825	}
2826}
2827
2828
2829static void ace_clear(struct ace_regs __iomem *regs, u32 dest, int size)
2830{
2831	void __iomem *tdest;
2832	short tsize = 0, i;
2833
2834	if (size <= 0)
2835		return;
2836
2837	while (size > 0) {
2838		tsize = min_t(u32, ((~dest & (ACE_WINDOW_SIZE - 1)) + 1),
2839				min_t(u32, size, ACE_WINDOW_SIZE));
2840		tdest = (void __iomem *) &regs->Window +
2841			(dest & (ACE_WINDOW_SIZE - 1));
2842		writel(dest & ~(ACE_WINDOW_SIZE - 1), &regs->WinBase);
2843
2844		for (i = 0; i < (tsize / 4); i++) {
2845			writel(0, tdest + i*4);
2846		}
2847
2848		dest += tsize;
2849		size -= tsize;
2850	}
2851}
2852
2853
2854/*
2855 * Download the firmware into the SRAM on the NIC
2856 *
2857 * This operation requires the NIC to be halted and is performed with
2858 * interrupts disabled and with the spinlock hold.
2859 */
2860static int ace_load_firmware(struct net_device *dev)
2861{
2862	const struct firmware *fw;
2863	const char *fw_name = "acenic/tg2.bin";
2864	struct ace_private *ap = netdev_priv(dev);
2865	struct ace_regs __iomem *regs = ap->regs;
2866	const __be32 *fw_data;
2867	u32 load_addr;
2868	int ret;
2869
2870	if (!(readl(&regs->CpuCtrl) & CPU_HALTED)) {
2871		printk(KERN_ERR "%s: trying to download firmware while the "
2872		       "CPU is running!\n", ap->name);
2873		return -EFAULT;
2874	}
2875
2876	if (ACE_IS_TIGON_I(ap))
2877		fw_name = "acenic/tg1.bin";
2878
2879	ret = request_firmware(&fw, fw_name, &ap->pdev->dev);
2880	if (ret) {
2881		printk(KERN_ERR "%s: Failed to load firmware \"%s\"\n",
2882		       ap->name, fw_name);
2883		return ret;
2884	}
2885
2886	fw_data = (void *)fw->data;
2887
2888	/* Firmware blob starts with version numbers, followed by
2889	   load and start address. Remainder is the blob to be loaded
2890	   contiguously from load address. We don't bother to represent
2891	   the BSS/SBSS sections any more, since we were clearing the
2892	   whole thing anyway. */
2893	ap->firmware_major = fw->data[0];
2894	ap->firmware_minor = fw->data[1];
2895	ap->firmware_fix = fw->data[2];
2896
2897	ap->firmware_start = be32_to_cpu(fw_data[1]);
2898	if (ap->firmware_start < 0x4000 || ap->firmware_start >= 0x80000) {
2899		printk(KERN_ERR "%s: bogus load address %08x in \"%s\"\n",
2900		       ap->name, ap->firmware_start, fw_name);
2901		ret = -EINVAL;
2902		goto out;
2903	}
2904
2905	load_addr = be32_to_cpu(fw_data[2]);
2906	if (load_addr < 0x4000 || load_addr >= 0x80000) {
2907		printk(KERN_ERR "%s: bogus load address %08x in \"%s\"\n",
2908		       ap->name, load_addr, fw_name);
2909		ret = -EINVAL;
2910		goto out;
2911	}
2912
2913	/*
2914	 * Do not try to clear more than 512KiB or we end up seeing
2915	 * funny things on NICs with only 512KiB SRAM
2916	 */
2917	ace_clear(regs, 0x2000, 0x80000-0x2000);
2918	ace_copy(regs, &fw_data[3], load_addr, fw->size-12);
2919 out:
2920	release_firmware(fw);
2921	return ret;
2922}
2923
2924
2925/*
2926 * The eeprom on the AceNIC is an Atmel i2c EEPROM.
2927 *
2928 * Accessing the EEPROM is `interesting' to say the least - don't read
2929 * this code right after dinner.
2930 *
2931 * This is all about black magic and bit-banging the device .... I
2932 * wonder in what hospital they have put the guy who designed the i2c
2933 * specs.
2934 *
2935 * Oh yes, this is only the beginning!
2936 *
2937 * Thanks to Stevarino Webinski for helping tracking down the bugs in the
2938 * code i2c readout code by beta testing all my hacks.
2939 */
2940static void eeprom_start(struct ace_regs __iomem *regs)
2941{
2942	u32 local;
2943
2944	readl(&regs->LocalCtrl);
2945	udelay(ACE_SHORT_DELAY);
2946	local = readl(&regs->LocalCtrl);
2947	local |= EEPROM_DATA_OUT | EEPROM_WRITE_ENABLE;
2948	writel(local, &regs->LocalCtrl);
2949	readl(&regs->LocalCtrl);
2950	mb();
2951	udelay(ACE_SHORT_DELAY);
2952	local |= EEPROM_CLK_OUT;
2953	writel(local, &regs->LocalCtrl);
2954	readl(&regs->LocalCtrl);
2955	mb();
2956	udelay(ACE_SHORT_DELAY);
2957	local &= ~EEPROM_DATA_OUT;
2958	writel(local, &regs->LocalCtrl);
2959	readl(&regs->LocalCtrl);
2960	mb();
2961	udelay(ACE_SHORT_DELAY);
2962	local &= ~EEPROM_CLK_OUT;
2963	writel(local, &regs->LocalCtrl);
2964	readl(&regs->LocalCtrl);
2965	mb();
2966}
2967
2968
2969static void eeprom_prep(struct ace_regs __iomem *regs, u8 magic)
2970{
2971	short i;
2972	u32 local;
2973
2974	udelay(ACE_SHORT_DELAY);
2975	local = readl(&regs->LocalCtrl);
2976	local &= ~EEPROM_DATA_OUT;
2977	local |= EEPROM_WRITE_ENABLE;
2978	writel(local, &regs->LocalCtrl);
2979	readl(&regs->LocalCtrl);
2980	mb();
2981
2982	for (i = 0; i < 8; i++, magic <<= 1) {
2983		udelay(ACE_SHORT_DELAY);
2984		if (magic & 0x80)
2985			local |= EEPROM_DATA_OUT;
2986		else
2987			local &= ~EEPROM_DATA_OUT;
2988		writel(local, &regs->LocalCtrl);
2989		readl(&regs->LocalCtrl);
2990		mb();
2991
2992		udelay(ACE_SHORT_DELAY);
2993		local |= EEPROM_CLK_OUT;
2994		writel(local, &regs->LocalCtrl);
2995		readl(&regs->LocalCtrl);
2996		mb();
2997		udelay(ACE_SHORT_DELAY);
2998		local &= ~(EEPROM_CLK_OUT | EEPROM_DATA_OUT);
2999		writel(local, &regs->LocalCtrl);
3000		readl(&regs->LocalCtrl);
3001		mb();
3002	}
3003}
3004
3005
3006static int eeprom_check_ack(struct ace_regs __iomem *regs)
3007{
3008	int state;
3009	u32 local;
3010
3011	local = readl(&regs->LocalCtrl);
3012	local &= ~EEPROM_WRITE_ENABLE;
3013	writel(local, &regs->LocalCtrl);
3014	readl(&regs->LocalCtrl);
3015	mb();
3016	udelay(ACE_LONG_DELAY);
3017	local |= EEPROM_CLK_OUT;
3018	writel(local, &regs->LocalCtrl);
3019	readl(&regs->LocalCtrl);
3020	mb();
3021	udelay(ACE_SHORT_DELAY);
3022	/* sample data in middle of high clk */
3023	state = (readl(&regs->LocalCtrl) & EEPROM_DATA_IN) != 0;
3024	udelay(ACE_SHORT_DELAY);
3025	mb();
3026	writel(readl(&regs->LocalCtrl) & ~EEPROM_CLK_OUT, &regs->LocalCtrl);
3027	readl(&regs->LocalCtrl);
3028	mb();
3029
3030	return state;
3031}
3032
3033
3034static void eeprom_stop(struct ace_regs __iomem *regs)
3035{
3036	u32 local;
3037
3038	udelay(ACE_SHORT_DELAY);
3039	local = readl(&regs->LocalCtrl);
3040	local |= EEPROM_WRITE_ENABLE;
3041	writel(local, &regs->LocalCtrl);
3042	readl(&regs->LocalCtrl);
3043	mb();
3044	udelay(ACE_SHORT_DELAY);
3045	local &= ~EEPROM_DATA_OUT;
3046	writel(local, &regs->LocalCtrl);
3047	readl(&regs->LocalCtrl);
3048	mb();
3049	udelay(ACE_SHORT_DELAY);
3050	local |= EEPROM_CLK_OUT;
3051	writel(local, &regs->LocalCtrl);
3052	readl(&regs->LocalCtrl);
3053	mb();
3054	udelay(ACE_SHORT_DELAY);
3055	local |= EEPROM_DATA_OUT;
3056	writel(local, &regs->LocalCtrl);
3057	readl(&regs->LocalCtrl);
3058	mb();
3059	udelay(ACE_LONG_DELAY);
3060	local &= ~EEPROM_CLK_OUT;
3061	writel(local, &regs->LocalCtrl);
3062	mb();
3063}
3064
3065
3066/*
3067 * Read a whole byte from the EEPROM.
3068 */
3069static int read_eeprom_byte(struct net_device *dev, unsigned long offset)
3070{
3071	struct ace_private *ap = netdev_priv(dev);
3072	struct ace_regs __iomem *regs = ap->regs;
3073	unsigned long flags;
3074	u32 local;
3075	int result = 0;
3076	short i;
3077
3078	/*
3079	 * Don't take interrupts on this CPU will bit banging
3080	 * the %#%#@$ I2C device
3081	 */
3082	local_irq_save(flags);
3083
3084	eeprom_start(regs);
3085
3086	eeprom_prep(regs, EEPROM_WRITE_SELECT);
3087	if (eeprom_check_ack(regs)) {
3088		local_irq_restore(flags);
3089		printk(KERN_ERR "%s: Unable to sync eeprom\n", ap->name);
3090		result = -EIO;
3091		goto eeprom_read_error;
3092	}
3093
3094	eeprom_prep(regs, (offset >> 8) & 0xff);
3095	if (eeprom_check_ack(regs)) {
3096		local_irq_restore(flags);
3097		printk(KERN_ERR "%s: Unable to set address byte 0\n",
3098		       ap->name);
3099		result = -EIO;
3100		goto eeprom_read_error;
3101	}
3102
3103	eeprom_prep(regs, offset & 0xff);
3104	if (eeprom_check_ack(regs)) {
3105		local_irq_restore(flags);
3106		printk(KERN_ERR "%s: Unable to set address byte 1\n",
3107		       ap->name);
3108		result = -EIO;
3109		goto eeprom_read_error;
3110	}
3111
3112	eeprom_start(regs);
3113	eeprom_prep(regs, EEPROM_READ_SELECT);
3114	if (eeprom_check_ack(regs)) {
3115		local_irq_restore(flags);
3116		printk(KERN_ERR "%s: Unable to set READ_SELECT\n",
3117		       ap->name);
3118		result = -EIO;
3119		goto eeprom_read_error;
3120	}
3121
3122	for (i = 0; i < 8; i++) {
3123		local = readl(&regs->LocalCtrl);
3124		local &= ~EEPROM_WRITE_ENABLE;
3125		writel(local, &regs->LocalCtrl);
3126		readl(&regs->LocalCtrl);
3127		udelay(ACE_LONG_DELAY);
3128		mb();
3129		local |= EEPROM_CLK_OUT;
3130		writel(local, &regs->LocalCtrl);
3131		readl(&regs->LocalCtrl);
3132		mb();
3133		udelay(ACE_SHORT_DELAY);
3134		/* sample data mid high clk */
3135		result = (result << 1) |
3136			((readl(&regs->LocalCtrl) & EEPROM_DATA_IN) != 0);
3137		udelay(ACE_SHORT_DELAY);
3138		mb();
3139		local = readl(&regs->LocalCtrl);
3140		local &= ~EEPROM_CLK_OUT;
3141		writel(local, &regs->LocalCtrl);
3142		readl(&regs->LocalCtrl);
3143		udelay(ACE_SHORT_DELAY);
3144		mb();
3145		if (i == 7) {
3146			local |= EEPROM_WRITE_ENABLE;
3147			writel(local, &regs->LocalCtrl);
3148			readl(&regs->LocalCtrl);
3149			mb();
3150			udelay(ACE_SHORT_DELAY);
3151		}
3152	}
3153
3154	local |= EEPROM_DATA_OUT;
3155	writel(local, &regs->LocalCtrl);
3156	readl(&regs->LocalCtrl);
3157	mb();
3158	udelay(ACE_SHORT_DELAY);
3159	writel(readl(&regs->LocalCtrl) | EEPROM_CLK_OUT, &regs->LocalCtrl);
3160	readl(&regs->LocalCtrl);
3161	udelay(ACE_LONG_DELAY);
3162	writel(readl(&regs->LocalCtrl) & ~EEPROM_CLK_OUT, &regs->LocalCtrl);
3163	readl(&regs->LocalCtrl);
3164	mb();
3165	udelay(ACE_SHORT_DELAY);
3166	eeprom_stop(regs);
3167
3168	local_irq_restore(flags);
3169 out:
3170	return result;
3171
3172 eeprom_read_error:
3173	printk(KERN_ERR "%s: Unable to read eeprom byte 0x%02lx\n",
3174	       ap->name, offset);
3175	goto out;
3176}
3177
3178module_pci_driver(acenic_pci_driver);
3179