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