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