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