2 * acenic.c: Linux driver for the Alteon AceNIC Gigabit Ethernet card
3 * and other Tigon based cards.
5 * Copyright 1998-2002 by Jes Sorensen, <jes@trained-monkey.org>.
7 * Thanks to Alteon and 3Com for providing hardware and documentation
8 * enabling me to write this driver.
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.
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.
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
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
50 * Grant Grundler <grundler@cup.hp.com>: PCI write posting fixes.
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/delay.h>
66 #include <linux/highmem.h>
67 #include <linux/sockios.h>
68 #include <linux/firmware.h>
69 #include <linux/slab.h>
70 #include <linux/prefetch.h>
71 #include <linux/if_vlan.h>
74 #include <linux/ethtool.h>
82 #include <asm/byteorder.h>
83 #include <linux/uaccess.h>
86 #define DRV_NAME "acenic"
90 #ifdef CONFIG_ACENIC_OMIT_TIGON_I
91 #define ACE_IS_TIGON_I(ap) 0
92 #define ACE_TX_RING_ENTRIES(ap) MAX_TX_RING_ENTRIES
94 #define ACE_IS_TIGON_I(ap) (ap->version == 1)
95 #define ACE_TX_RING_ENTRIES(ap) ap->tx_ring_entries
98 #ifndef PCI_VENDOR_ID_ALTEON
99 #define PCI_VENDOR_ID_ALTEON 0x12ae
101 #ifndef PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE
102 #define PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE 0x0001
103 #define PCI_DEVICE_ID_ALTEON_ACENIC_COPPER 0x0002
105 #ifndef PCI_DEVICE_ID_3COM_3C985
106 #define PCI_DEVICE_ID_3COM_3C985 0x0001
108 #ifndef PCI_VENDOR_ID_NETGEAR
109 #define PCI_VENDOR_ID_NETGEAR 0x1385
110 #define PCI_DEVICE_ID_NETGEAR_GA620 0x620a
112 #ifndef PCI_DEVICE_ID_NETGEAR_GA620T
113 #define PCI_DEVICE_ID_NETGEAR_GA620T 0x630a
118 * Farallon used the DEC vendor ID by mistake and they seem not
121 #ifndef PCI_DEVICE_ID_FARALLON_PN9000SX
122 #define PCI_DEVICE_ID_FARALLON_PN9000SX 0x1a
124 #ifndef PCI_DEVICE_ID_FARALLON_PN9100T
125 #define PCI_DEVICE_ID_FARALLON_PN9100T 0xfa
127 #ifndef PCI_VENDOR_ID_SGI
128 #define PCI_VENDOR_ID_SGI 0x10a9
130 #ifndef PCI_DEVICE_ID_SGI_ACENIC
131 #define PCI_DEVICE_ID_SGI_ACENIC 0x0009
134 static const struct pci_device_id acenic_pci_tbl
[] = {
135 { PCI_VENDOR_ID_ALTEON
, PCI_DEVICE_ID_ALTEON_ACENIC_FIBRE
,
136 PCI_ANY_ID
, PCI_ANY_ID
, PCI_CLASS_NETWORK_ETHERNET
<< 8, 0xffff00, },
137 { PCI_VENDOR_ID_ALTEON
, PCI_DEVICE_ID_ALTEON_ACENIC_COPPER
,
138 PCI_ANY_ID
, PCI_ANY_ID
, PCI_CLASS_NETWORK_ETHERNET
<< 8, 0xffff00, },
139 { PCI_VENDOR_ID_3COM
, PCI_DEVICE_ID_3COM_3C985
,
140 PCI_ANY_ID
, PCI_ANY_ID
, PCI_CLASS_NETWORK_ETHERNET
<< 8, 0xffff00, },
141 { PCI_VENDOR_ID_NETGEAR
, PCI_DEVICE_ID_NETGEAR_GA620
,
142 PCI_ANY_ID
, PCI_ANY_ID
, PCI_CLASS_NETWORK_ETHERNET
<< 8, 0xffff00, },
143 { PCI_VENDOR_ID_NETGEAR
, PCI_DEVICE_ID_NETGEAR_GA620T
,
144 PCI_ANY_ID
, PCI_ANY_ID
, PCI_CLASS_NETWORK_ETHERNET
<< 8, 0xffff00, },
146 * Farallon used the DEC vendor ID on their cards incorrectly,
147 * then later Alteon's ID.
149 { PCI_VENDOR_ID_DEC
, PCI_DEVICE_ID_FARALLON_PN9000SX
,
150 PCI_ANY_ID
, PCI_ANY_ID
, PCI_CLASS_NETWORK_ETHERNET
<< 8, 0xffff00, },
151 { PCI_VENDOR_ID_ALTEON
, PCI_DEVICE_ID_FARALLON_PN9100T
,
152 PCI_ANY_ID
, PCI_ANY_ID
, PCI_CLASS_NETWORK_ETHERNET
<< 8, 0xffff00, },
153 { PCI_VENDOR_ID_SGI
, PCI_DEVICE_ID_SGI_ACENIC
,
154 PCI_ANY_ID
, PCI_ANY_ID
, PCI_CLASS_NETWORK_ETHERNET
<< 8, 0xffff00, },
157 MODULE_DEVICE_TABLE(pci
, acenic_pci_tbl
);
159 #define ace_sync_irq(irq) synchronize_irq(irq)
161 #ifndef offset_in_page
162 #define offset_in_page(ptr) ((unsigned long)(ptr) & ~PAGE_MASK)
165 #define ACE_MAX_MOD_PARMS 8
166 #define BOARD_IDX_STATIC 0
167 #define BOARD_IDX_OVERFLOW -1
172 * These must be defined before the firmware is included.
174 #define MAX_TEXT_LEN 96*1024
175 #define MAX_RODATA_LEN 8*1024
176 #define MAX_DATA_LEN 2*1024
178 #ifndef tigon2FwReleaseLocal
179 #define tigon2FwReleaseLocal 0
183 * This driver currently supports Tigon I and Tigon II based cards
184 * including the Alteon AceNIC, the 3Com 3C985[B] and NetGear
185 * GA620. The driver should also work on the SGI, DEC and Farallon
186 * versions of the card, however I have not been able to test that
189 * This card is really neat, it supports receive hardware checksumming
190 * and jumbo frames (up to 9000 bytes) and does a lot of work in the
191 * firmware. Also the programming interface is quite neat, except for
192 * the parts dealing with the i2c eeprom on the card ;-)
194 * Using jumbo frames:
196 * To enable jumbo frames, simply specify an mtu between 1500 and 9000
197 * bytes to ifconfig. Jumbo frames can be enabled or disabled at any time
198 * by running `ifconfig eth<X> mtu <MTU>' with <X> being the Ethernet
199 * interface number and <MTU> being the MTU value.
203 * When compiled as a loadable module, the driver allows for a number
204 * of module parameters to be specified. The driver supports the
205 * following module parameters:
207 * trace=<val> - Firmware trace level. This requires special traced
208 * firmware to replace the firmware supplied with
209 * the driver - for debugging purposes only.
211 * link=<val> - Link state. Normally you want to use the default link
212 * parameters set by the driver. This can be used to
213 * override these in case your switch doesn't negotiate
214 * the link properly. Valid values are:
215 * 0x0001 - Force half duplex link.
216 * 0x0002 - Do not negotiate line speed with the other end.
217 * 0x0010 - 10Mbit/sec link.
218 * 0x0020 - 100Mbit/sec link.
219 * 0x0040 - 1000Mbit/sec link.
220 * 0x0100 - Do not negotiate flow control.
221 * 0x0200 - Enable RX flow control Y
222 * 0x0400 - Enable TX flow control Y (Tigon II NICs only).
223 * Default value is 0x0270, ie. enable link+flow
224 * control negotiation. Negotiating the highest
225 * possible link speed with RX flow control enabled.
227 * When disabling link speed negotiation, only one link
228 * speed is allowed to be specified!
230 * tx_coal_tick=<val> - number of coalescing clock ticks (us) allowed
231 * to wait for more packets to arive before
232 * interrupting the host, from the time the first
235 * rx_coal_tick=<val> - number of coalescing clock ticks (us) allowed
236 * to wait for more packets to arive in the transmit ring,
237 * before interrupting the host, after transmitting the
238 * first packet in the ring.
240 * max_tx_desc=<val> - maximum number of transmit descriptors
241 * (packets) transmitted before interrupting the host.
243 * max_rx_desc=<val> - maximum number of receive descriptors
244 * (packets) received before interrupting the host.
246 * tx_ratio=<val> - 7 bit value (0 - 63) specifying the split in 64th
247 * increments of the NIC's on board memory to be used for
248 * transmit and receive buffers. For the 1MB NIC app. 800KB
249 * is available, on the 1/2MB NIC app. 300KB is available.
250 * 68KB will always be available as a minimum for both
251 * directions. The default value is a 50/50 split.
252 * dis_pci_mem_inval=<val> - disable PCI memory write and invalidate
253 * operations, default (1) is to always disable this as
254 * that is what Alteon does on NT. I have not been able
255 * to measure any real performance differences with
256 * this on my systems. Set <val>=0 if you want to
257 * enable these operations.
259 * If you use more than one NIC, specify the parameters for the
260 * individual NICs with a comma, ie. trace=0,0x00001fff,0 you want to
261 * run tracing on NIC #2 but not on NIC #1 and #3.
265 * - Proper multicast support.
266 * - NIC dump support.
267 * - More tuning parameters.
269 * The mini ring is not used under Linux and I am not sure it makes sense
270 * to actually use it.
272 * New interrupt handler strategy:
274 * The old interrupt handler worked using the traditional method of
275 * replacing an skbuff with a new one when a packet arrives. However
276 * the rx rings do not need to contain a static number of buffer
277 * descriptors, thus it makes sense to move the memory allocation out
278 * of the main interrupt handler and do it in a bottom half handler
279 * and only allocate new buffers when the number of buffers in the
280 * ring is below a certain threshold. In order to avoid starving the
281 * NIC under heavy load it is however necessary to force allocation
282 * when hitting a minimum threshold. The strategy for alloction is as
285 * RX_LOW_BUF_THRES - allocate buffers in the bottom half
286 * RX_PANIC_LOW_THRES - we are very low on buffers, allocate
287 * the buffers in the interrupt handler
288 * RX_RING_THRES - maximum number of buffers in the rx ring
289 * RX_MINI_THRES - maximum number of buffers in the mini ring
290 * RX_JUMBO_THRES - maximum number of buffers in the jumbo ring
292 * One advantagous side effect of this allocation approach is that the
293 * entire rx processing can be done without holding any spin lock
294 * since the rx rings and registers are totally independent of the tx
295 * ring and its registers. This of course includes the kmalloc's of
296 * new skb's. Thus start_xmit can run in parallel with rx processing
297 * and the memory allocation on SMP systems.
299 * Note that running the skb reallocation in a bottom half opens up
300 * another can of races which needs to be handled properly. In
301 * particular it can happen that the interrupt handler tries to run
302 * the reallocation while the bottom half is either running on another
303 * CPU or was interrupted on the same CPU. To get around this the
304 * driver uses bitops to prevent the reallocation routines from being
307 * TX handling can also be done without holding any spin lock, wheee
308 * this is fun! since tx_ret_csm is only written to by the interrupt
309 * handler. The case to be aware of is when shutting down the device
310 * and cleaning up where it is necessary to make sure that
311 * start_xmit() is not running while this is happening. Well DaveM
312 * informs me that this case is already protected against ... bye bye
313 * Mr. Spin Lock, it was nice to know you.
315 * TX interrupts are now partly disabled so the NIC will only generate
316 * TX interrupts for the number of coal ticks, not for the number of
317 * TX packets in the queue. This should reduce the number of TX only,
318 * ie. when no RX processing is done, interrupts seen.
322 * Threshold values for RX buffer allocation - the low water marks for
323 * when to start refilling the rings are set to 75% of the ring
324 * sizes. It seems to make sense to refill the rings entirely from the
325 * intrrupt handler once it gets below the panic threshold, that way
326 * we don't risk that the refilling is moved to another CPU when the
327 * one running the interrupt handler just got the slab code hot in its
330 #define RX_RING_SIZE 72
331 #define RX_MINI_SIZE 64
332 #define RX_JUMBO_SIZE 48
334 #define RX_PANIC_STD_THRES 16
335 #define RX_PANIC_STD_REFILL (3*RX_PANIC_STD_THRES)/2
336 #define RX_LOW_STD_THRES (3*RX_RING_SIZE)/4
337 #define RX_PANIC_MINI_THRES 12
338 #define RX_PANIC_MINI_REFILL (3*RX_PANIC_MINI_THRES)/2
339 #define RX_LOW_MINI_THRES (3*RX_MINI_SIZE)/4
340 #define RX_PANIC_JUMBO_THRES 6
341 #define RX_PANIC_JUMBO_REFILL (3*RX_PANIC_JUMBO_THRES)/2
342 #define RX_LOW_JUMBO_THRES (3*RX_JUMBO_SIZE)/4
346 * Size of the mini ring entries, basically these just should be big
347 * enough to take TCP ACKs
349 #define ACE_MINI_SIZE 100
351 #define ACE_MINI_BUFSIZE ACE_MINI_SIZE
352 #define ACE_STD_BUFSIZE (ACE_STD_MTU + ETH_HLEN + 4)
353 #define ACE_JUMBO_BUFSIZE (ACE_JUMBO_MTU + ETH_HLEN + 4)
356 * There seems to be a magic difference in the effect between 995 and 996
357 * but little difference between 900 and 995 ... no idea why.
359 * There is now a default set of tuning parameters which is set, depending
360 * on whether or not the user enables Jumbo frames. It's assumed that if
361 * Jumbo frames are enabled, the user wants optimal tuning for that case.
363 #define DEF_TX_COAL 400 /* 996 */
364 #define DEF_TX_MAX_DESC 60 /* was 40 */
365 #define DEF_RX_COAL 120 /* 1000 */
366 #define DEF_RX_MAX_DESC 25
367 #define DEF_TX_RATIO 21 /* 24 */
369 #define DEF_JUMBO_TX_COAL 20
370 #define DEF_JUMBO_TX_MAX_DESC 60
371 #define DEF_JUMBO_RX_COAL 30
372 #define DEF_JUMBO_RX_MAX_DESC 6
373 #define DEF_JUMBO_TX_RATIO 21
375 #if tigon2FwReleaseLocal < 20001118
377 * Standard firmware and early modifications duplicate
378 * IRQ load without this flag (coal timer is never reset).
379 * Note that with this flag tx_coal should be less than
380 * time to xmit full tx ring.
381 * 400usec is not so bad for tx ring size of 128.
383 #define TX_COAL_INTS_ONLY 1 /* worth it */
386 * With modified firmware, this is not necessary, but still useful.
388 #define TX_COAL_INTS_ONLY 1
392 #define DEF_STAT (2 * TICKS_PER_SEC)
395 static int link_state
[ACE_MAX_MOD_PARMS
];
396 static int trace
[ACE_MAX_MOD_PARMS
];
397 static int tx_coal_tick
[ACE_MAX_MOD_PARMS
];
398 static int rx_coal_tick
[ACE_MAX_MOD_PARMS
];
399 static int max_tx_desc
[ACE_MAX_MOD_PARMS
];
400 static int max_rx_desc
[ACE_MAX_MOD_PARMS
];
401 static int tx_ratio
[ACE_MAX_MOD_PARMS
];
402 static int dis_pci_mem_inval
[ACE_MAX_MOD_PARMS
] = {1, 1, 1, 1, 1, 1, 1, 1};
404 MODULE_AUTHOR("Jes Sorensen <jes@trained-monkey.org>");
405 MODULE_LICENSE("GPL");
406 MODULE_DESCRIPTION("AceNIC/3C985/GA620 Gigabit Ethernet driver");
407 #ifndef CONFIG_ACENIC_OMIT_TIGON_I
408 MODULE_FIRMWARE("acenic/tg1.bin");
410 MODULE_FIRMWARE("acenic/tg2.bin");
412 module_param_array_named(link
, link_state
, int, NULL
, 0);
413 module_param_array(trace
, int, NULL
, 0);
414 module_param_array(tx_coal_tick
, int, NULL
, 0);
415 module_param_array(max_tx_desc
, int, NULL
, 0);
416 module_param_array(rx_coal_tick
, int, NULL
, 0);
417 module_param_array(max_rx_desc
, int, NULL
, 0);
418 module_param_array(tx_ratio
, int, NULL
, 0);
419 MODULE_PARM_DESC(link
, "AceNIC/3C985/NetGear link state");
420 MODULE_PARM_DESC(trace
, "AceNIC/3C985/NetGear firmware trace level");
421 MODULE_PARM_DESC(tx_coal_tick
, "AceNIC/3C985/GA620 max clock ticks to wait from first tx descriptor arrives");
422 MODULE_PARM_DESC(max_tx_desc
, "AceNIC/3C985/GA620 max number of transmit descriptors to wait");
423 MODULE_PARM_DESC(rx_coal_tick
, "AceNIC/3C985/GA620 max clock ticks to wait from first rx descriptor arrives");
424 MODULE_PARM_DESC(max_rx_desc
, "AceNIC/3C985/GA620 max number of receive descriptors to wait");
425 MODULE_PARM_DESC(tx_ratio
, "AceNIC/3C985/GA620 ratio of NIC memory used for TX/RX descriptors (range 0-63)");
428 static const char version
[] =
429 "acenic.c: v0.92 08/05/2002 Jes Sorensen, linux-acenic@SunSITE.dk\n"
430 " http://home.cern.ch/~jes/gige/acenic.html\n";
432 static int ace_get_link_ksettings(struct net_device
*,
433 struct ethtool_link_ksettings
*);
434 static int ace_set_link_ksettings(struct net_device
*,
435 const struct ethtool_link_ksettings
*);
436 static void ace_get_drvinfo(struct net_device
*, struct ethtool_drvinfo
*);
438 static const struct ethtool_ops ace_ethtool_ops
= {
439 .get_drvinfo
= ace_get_drvinfo
,
440 .get_link_ksettings
= ace_get_link_ksettings
,
441 .set_link_ksettings
= ace_set_link_ksettings
,
444 static void ace_watchdog(struct net_device
*dev
);
446 static const struct net_device_ops ace_netdev_ops
= {
447 .ndo_open
= ace_open
,
448 .ndo_stop
= ace_close
,
449 .ndo_tx_timeout
= ace_watchdog
,
450 .ndo_get_stats
= ace_get_stats
,
451 .ndo_start_xmit
= ace_start_xmit
,
452 .ndo_set_rx_mode
= ace_set_multicast_list
,
453 .ndo_validate_addr
= eth_validate_addr
,
454 .ndo_set_mac_address
= ace_set_mac_addr
,
455 .ndo_change_mtu
= ace_change_mtu
,
458 static int acenic_probe_one(struct pci_dev
*pdev
,
459 const struct pci_device_id
*id
)
461 struct net_device
*dev
;
462 struct ace_private
*ap
;
463 static int boards_found
;
465 dev
= alloc_etherdev(sizeof(struct ace_private
));
469 SET_NETDEV_DEV(dev
, &pdev
->dev
);
471 ap
= netdev_priv(dev
);
473 ap
->name
= pci_name(pdev
);
475 dev
->features
|= NETIF_F_SG
| NETIF_F_IP_CSUM
;
476 dev
->features
|= NETIF_F_HW_VLAN_CTAG_TX
| NETIF_F_HW_VLAN_CTAG_RX
;
478 dev
->watchdog_timeo
= 5*HZ
;
480 dev
->max_mtu
= ACE_JUMBO_MTU
;
482 dev
->netdev_ops
= &ace_netdev_ops
;
483 dev
->ethtool_ops
= &ace_ethtool_ops
;
485 /* we only display this string ONCE */
489 if (pci_enable_device(pdev
))
490 goto fail_free_netdev
;
493 * Enable master mode before we start playing with the
494 * pci_command word since pci_set_master() will modify
497 pci_set_master(pdev
);
499 pci_read_config_word(pdev
, PCI_COMMAND
, &ap
->pci_command
);
501 /* OpenFirmware on Mac's does not set this - DOH.. */
502 if (!(ap
->pci_command
& PCI_COMMAND_MEMORY
)) {
503 printk(KERN_INFO
"%s: Enabling PCI Memory Mapped "
504 "access - was not enabled by BIOS/Firmware\n",
506 ap
->pci_command
= ap
->pci_command
| PCI_COMMAND_MEMORY
;
507 pci_write_config_word(ap
->pdev
, PCI_COMMAND
,
512 pci_read_config_byte(pdev
, PCI_LATENCY_TIMER
, &ap
->pci_latency
);
513 if (ap
->pci_latency
<= 0x40) {
514 ap
->pci_latency
= 0x40;
515 pci_write_config_byte(pdev
, PCI_LATENCY_TIMER
, ap
->pci_latency
);
519 * Remap the regs into kernel space - this is abuse of
520 * dev->base_addr since it was means for I/O port
521 * addresses but who gives a damn.
523 dev
->base_addr
= pci_resource_start(pdev
, 0);
524 ap
->regs
= ioremap(dev
->base_addr
, 0x4000);
526 printk(KERN_ERR
"%s: Unable to map I/O register, "
527 "AceNIC %i will be disabled.\n",
528 ap
->name
, boards_found
);
529 goto fail_free_netdev
;
532 switch(pdev
->vendor
) {
533 case PCI_VENDOR_ID_ALTEON
:
534 if (pdev
->device
== PCI_DEVICE_ID_FARALLON_PN9100T
) {
535 printk(KERN_INFO
"%s: Farallon PN9100-T ",
538 printk(KERN_INFO
"%s: Alteon AceNIC ",
542 case PCI_VENDOR_ID_3COM
:
543 printk(KERN_INFO
"%s: 3Com 3C985 ", ap
->name
);
545 case PCI_VENDOR_ID_NETGEAR
:
546 printk(KERN_INFO
"%s: NetGear GA620 ", ap
->name
);
548 case PCI_VENDOR_ID_DEC
:
549 if (pdev
->device
== PCI_DEVICE_ID_FARALLON_PN9000SX
) {
550 printk(KERN_INFO
"%s: Farallon PN9000-SX ",
555 case PCI_VENDOR_ID_SGI
:
556 printk(KERN_INFO
"%s: SGI AceNIC ", ap
->name
);
559 printk(KERN_INFO
"%s: Unknown AceNIC ", ap
->name
);
563 printk("Gigabit Ethernet at 0x%08lx, ", dev
->base_addr
);
564 printk("irq %d\n", pdev
->irq
);
566 #ifdef CONFIG_ACENIC_OMIT_TIGON_I
567 if ((readl(&ap
->regs
->HostCtrl
) >> 28) == 4) {
568 printk(KERN_ERR
"%s: Driver compiled without Tigon I"
569 " support - NIC disabled\n", dev
->name
);
574 if (ace_allocate_descriptors(dev
))
575 goto fail_free_netdev
;
578 if (boards_found
>= ACE_MAX_MOD_PARMS
)
579 ap
->board_idx
= BOARD_IDX_OVERFLOW
;
581 ap
->board_idx
= boards_found
;
583 ap
->board_idx
= BOARD_IDX_STATIC
;
587 goto fail_free_netdev
;
589 if (register_netdev(dev
)) {
590 printk(KERN_ERR
"acenic: device registration failed\n");
593 ap
->name
= dev
->name
;
595 if (ap
->pci_using_dac
)
596 dev
->features
|= NETIF_F_HIGHDMA
;
598 pci_set_drvdata(pdev
, dev
);
604 ace_init_cleanup(dev
);
610 static void acenic_remove_one(struct pci_dev
*pdev
)
612 struct net_device
*dev
= pci_get_drvdata(pdev
);
613 struct ace_private
*ap
= netdev_priv(dev
);
614 struct ace_regs __iomem
*regs
= ap
->regs
;
617 unregister_netdev(dev
);
619 writel(readl(®s
->CpuCtrl
) | CPU_HALT
, ®s
->CpuCtrl
);
620 if (ap
->version
>= 2)
621 writel(readl(®s
->CpuBCtrl
) | CPU_HALT
, ®s
->CpuBCtrl
);
624 * This clears any pending interrupts
626 writel(1, ®s
->Mb0Lo
);
627 readl(®s
->CpuCtrl
); /* flush */
630 * Make sure no other CPUs are processing interrupts
631 * on the card before the buffers are being released.
632 * Otherwise one might experience some `interesting'
635 * Then release the RX buffers - jumbo buffers were
636 * already released in ace_close().
638 ace_sync_irq(dev
->irq
);
640 for (i
= 0; i
< RX_STD_RING_ENTRIES
; i
++) {
641 struct sk_buff
*skb
= ap
->skb
->rx_std_skbuff
[i
].skb
;
644 struct ring_info
*ringp
;
647 ringp
= &ap
->skb
->rx_std_skbuff
[i
];
648 mapping
= dma_unmap_addr(ringp
, mapping
);
649 pci_unmap_page(ap
->pdev
, mapping
,
653 ap
->rx_std_ring
[i
].size
= 0;
654 ap
->skb
->rx_std_skbuff
[i
].skb
= NULL
;
659 if (ap
->version
>= 2) {
660 for (i
= 0; i
< RX_MINI_RING_ENTRIES
; i
++) {
661 struct sk_buff
*skb
= ap
->skb
->rx_mini_skbuff
[i
].skb
;
664 struct ring_info
*ringp
;
667 ringp
= &ap
->skb
->rx_mini_skbuff
[i
];
668 mapping
= dma_unmap_addr(ringp
,mapping
);
669 pci_unmap_page(ap
->pdev
, mapping
,
673 ap
->rx_mini_ring
[i
].size
= 0;
674 ap
->skb
->rx_mini_skbuff
[i
].skb
= NULL
;
680 for (i
= 0; i
< RX_JUMBO_RING_ENTRIES
; i
++) {
681 struct sk_buff
*skb
= ap
->skb
->rx_jumbo_skbuff
[i
].skb
;
683 struct ring_info
*ringp
;
686 ringp
= &ap
->skb
->rx_jumbo_skbuff
[i
];
687 mapping
= dma_unmap_addr(ringp
, mapping
);
688 pci_unmap_page(ap
->pdev
, mapping
,
692 ap
->rx_jumbo_ring
[i
].size
= 0;
693 ap
->skb
->rx_jumbo_skbuff
[i
].skb
= NULL
;
698 ace_init_cleanup(dev
);
702 static struct pci_driver acenic_pci_driver
= {
704 .id_table
= acenic_pci_tbl
,
705 .probe
= acenic_probe_one
,
706 .remove
= acenic_remove_one
,
709 static void ace_free_descriptors(struct net_device
*dev
)
711 struct ace_private
*ap
= netdev_priv(dev
);
714 if (ap
->rx_std_ring
!= NULL
) {
715 size
= (sizeof(struct rx_desc
) *
716 (RX_STD_RING_ENTRIES
+
717 RX_JUMBO_RING_ENTRIES
+
718 RX_MINI_RING_ENTRIES
+
719 RX_RETURN_RING_ENTRIES
));
720 pci_free_consistent(ap
->pdev
, size
, ap
->rx_std_ring
,
721 ap
->rx_ring_base_dma
);
722 ap
->rx_std_ring
= NULL
;
723 ap
->rx_jumbo_ring
= NULL
;
724 ap
->rx_mini_ring
= NULL
;
725 ap
->rx_return_ring
= NULL
;
727 if (ap
->evt_ring
!= NULL
) {
728 size
= (sizeof(struct event
) * EVT_RING_ENTRIES
);
729 pci_free_consistent(ap
->pdev
, size
, ap
->evt_ring
,
733 if (ap
->tx_ring
!= NULL
&& !ACE_IS_TIGON_I(ap
)) {
734 size
= (sizeof(struct tx_desc
) * MAX_TX_RING_ENTRIES
);
735 pci_free_consistent(ap
->pdev
, size
, ap
->tx_ring
,
740 if (ap
->evt_prd
!= NULL
) {
741 pci_free_consistent(ap
->pdev
, sizeof(u32
),
742 (void *)ap
->evt_prd
, ap
->evt_prd_dma
);
745 if (ap
->rx_ret_prd
!= NULL
) {
746 pci_free_consistent(ap
->pdev
, sizeof(u32
),
747 (void *)ap
->rx_ret_prd
,
749 ap
->rx_ret_prd
= NULL
;
751 if (ap
->tx_csm
!= NULL
) {
752 pci_free_consistent(ap
->pdev
, sizeof(u32
),
753 (void *)ap
->tx_csm
, ap
->tx_csm_dma
);
759 static int ace_allocate_descriptors(struct net_device
*dev
)
761 struct ace_private
*ap
= netdev_priv(dev
);
764 size
= (sizeof(struct rx_desc
) *
765 (RX_STD_RING_ENTRIES
+
766 RX_JUMBO_RING_ENTRIES
+
767 RX_MINI_RING_ENTRIES
+
768 RX_RETURN_RING_ENTRIES
));
770 ap
->rx_std_ring
= pci_alloc_consistent(ap
->pdev
, size
,
771 &ap
->rx_ring_base_dma
);
772 if (ap
->rx_std_ring
== NULL
)
775 ap
->rx_jumbo_ring
= ap
->rx_std_ring
+ RX_STD_RING_ENTRIES
;
776 ap
->rx_mini_ring
= ap
->rx_jumbo_ring
+ RX_JUMBO_RING_ENTRIES
;
777 ap
->rx_return_ring
= ap
->rx_mini_ring
+ RX_MINI_RING_ENTRIES
;
779 size
= (sizeof(struct event
) * EVT_RING_ENTRIES
);
781 ap
->evt_ring
= pci_alloc_consistent(ap
->pdev
, size
, &ap
->evt_ring_dma
);
783 if (ap
->evt_ring
== NULL
)
787 * Only allocate a host TX ring for the Tigon II, the Tigon I
788 * has to use PCI registers for this ;-(
790 if (!ACE_IS_TIGON_I(ap
)) {
791 size
= (sizeof(struct tx_desc
) * MAX_TX_RING_ENTRIES
);
793 ap
->tx_ring
= pci_alloc_consistent(ap
->pdev
, size
,
796 if (ap
->tx_ring
== NULL
)
800 ap
->evt_prd
= pci_alloc_consistent(ap
->pdev
, sizeof(u32
),
802 if (ap
->evt_prd
== NULL
)
805 ap
->rx_ret_prd
= pci_alloc_consistent(ap
->pdev
, sizeof(u32
),
806 &ap
->rx_ret_prd_dma
);
807 if (ap
->rx_ret_prd
== NULL
)
810 ap
->tx_csm
= pci_alloc_consistent(ap
->pdev
, sizeof(u32
),
812 if (ap
->tx_csm
== NULL
)
819 ace_init_cleanup(dev
);
825 * Generic cleanup handling data allocated during init. Used when the
826 * module is unloaded or if an error occurs during initialization
828 static void ace_init_cleanup(struct net_device
*dev
)
830 struct ace_private
*ap
;
832 ap
= netdev_priv(dev
);
834 ace_free_descriptors(dev
);
837 pci_free_consistent(ap
->pdev
, sizeof(struct ace_info
),
838 ap
->info
, ap
->info_dma
);
840 kfree(ap
->trace_buf
);
843 free_irq(dev
->irq
, dev
);
850 * Commands are considered to be slow.
852 static inline void ace_issue_cmd(struct ace_regs __iomem
*regs
, struct cmd
*cmd
)
856 idx
= readl(®s
->CmdPrd
);
858 writel(*(u32
*)(cmd
), ®s
->CmdRng
[idx
]);
859 idx
= (idx
+ 1) % CMD_RING_ENTRIES
;
861 writel(idx
, ®s
->CmdPrd
);
865 static int ace_init(struct net_device
*dev
)
867 struct ace_private
*ap
;
868 struct ace_regs __iomem
*regs
;
869 struct ace_info
*info
= NULL
;
870 struct pci_dev
*pdev
;
873 u32 tig_ver
, mac1
, mac2
, tmp
, pci_state
;
874 int board_idx
, ecode
= 0;
876 unsigned char cache_size
;
878 ap
= netdev_priv(dev
);
881 board_idx
= ap
->board_idx
;
884 * aman@sgi.com - its useful to do a NIC reset here to
885 * address the `Firmware not running' problem subsequent
886 * to any crashes involving the NIC
888 writel(HW_RESET
| (HW_RESET
<< 24), ®s
->HostCtrl
);
889 readl(®s
->HostCtrl
); /* PCI write posting */
893 * Don't access any other registers before this point!
897 * This will most likely need BYTE_SWAP once we switch
898 * to using __raw_writel()
900 writel((WORD_SWAP
| CLR_INT
| ((WORD_SWAP
| CLR_INT
) << 24)),
903 writel((CLR_INT
| WORD_SWAP
| ((CLR_INT
| WORD_SWAP
) << 24)),
906 readl(®s
->HostCtrl
); /* PCI write posting */
909 * Stop the NIC CPU and clear pending interrupts
911 writel(readl(®s
->CpuCtrl
) | CPU_HALT
, ®s
->CpuCtrl
);
912 readl(®s
->CpuCtrl
); /* PCI write posting */
913 writel(0, ®s
->Mb0Lo
);
915 tig_ver
= readl(®s
->HostCtrl
) >> 28;
918 #ifndef CONFIG_ACENIC_OMIT_TIGON_I
921 printk(KERN_INFO
" Tigon I (Rev. %i), Firmware: %i.%i.%i, ",
922 tig_ver
, ap
->firmware_major
, ap
->firmware_minor
,
924 writel(0, ®s
->LocalCtrl
);
926 ap
->tx_ring_entries
= TIGON_I_TX_RING_ENTRIES
;
930 printk(KERN_INFO
" Tigon II (Rev. %i), Firmware: %i.%i.%i, ",
931 tig_ver
, ap
->firmware_major
, ap
->firmware_minor
,
933 writel(readl(®s
->CpuBCtrl
) | CPU_HALT
, ®s
->CpuBCtrl
);
934 readl(®s
->CpuBCtrl
); /* PCI write posting */
936 * The SRAM bank size does _not_ indicate the amount
937 * of memory on the card, it controls the _bank_ size!
938 * Ie. a 1MB AceNIC will have two banks of 512KB.
940 writel(SRAM_BANK_512K
, ®s
->LocalCtrl
);
941 writel(SYNC_SRAM_TIMING
, ®s
->MiscCfg
);
943 ap
->tx_ring_entries
= MAX_TX_RING_ENTRIES
;
946 printk(KERN_WARNING
" Unsupported Tigon version detected "
953 * ModeStat _must_ be set after the SRAM settings as this change
954 * seems to corrupt the ModeStat and possible other registers.
955 * The SRAM settings survive resets and setting it to the same
956 * value a second time works as well. This is what caused the
957 * `Firmware not running' problem on the Tigon II.
960 writel(ACE_BYTE_SWAP_DMA
| ACE_WARN
| ACE_FATAL
| ACE_BYTE_SWAP_BD
|
961 ACE_WORD_SWAP_BD
| ACE_NO_JUMBO_FRAG
, ®s
->ModeStat
);
963 writel(ACE_BYTE_SWAP_DMA
| ACE_WARN
| ACE_FATAL
|
964 ACE_WORD_SWAP_BD
| ACE_NO_JUMBO_FRAG
, ®s
->ModeStat
);
966 readl(®s
->ModeStat
); /* PCI write posting */
969 for(i
= 0; i
< 4; i
++) {
973 t
= read_eeprom_byte(dev
, 0x8c+i
);
981 for(i
= 4; i
< 8; i
++) {
985 t
= read_eeprom_byte(dev
, 0x8c+i
);
993 writel(mac1
, ®s
->MacAddrHi
);
994 writel(mac2
, ®s
->MacAddrLo
);
996 dev
->dev_addr
[0] = (mac1
>> 8) & 0xff;
997 dev
->dev_addr
[1] = mac1
& 0xff;
998 dev
->dev_addr
[2] = (mac2
>> 24) & 0xff;
999 dev
->dev_addr
[3] = (mac2
>> 16) & 0xff;
1000 dev
->dev_addr
[4] = (mac2
>> 8) & 0xff;
1001 dev
->dev_addr
[5] = mac2
& 0xff;
1003 printk("MAC: %pM\n", dev
->dev_addr
);
1006 * Looks like this is necessary to deal with on all architectures,
1007 * even this %$#%$# N440BX Intel based thing doesn't get it right.
1008 * Ie. having two NICs in the machine, one will have the cache
1009 * line set at boot time, the other will not.
1012 pci_read_config_byte(pdev
, PCI_CACHE_LINE_SIZE
, &cache_size
);
1014 if (cache_size
!= SMP_CACHE_BYTES
) {
1015 printk(KERN_INFO
" PCI cache line size set incorrectly "
1016 "(%i bytes) by BIOS/FW, ", cache_size
);
1017 if (cache_size
> SMP_CACHE_BYTES
)
1018 printk("expecting %i\n", SMP_CACHE_BYTES
);
1020 printk("correcting to %i\n", SMP_CACHE_BYTES
);
1021 pci_write_config_byte(pdev
, PCI_CACHE_LINE_SIZE
,
1022 SMP_CACHE_BYTES
>> 2);
1026 pci_state
= readl(®s
->PciState
);
1027 printk(KERN_INFO
" PCI bus width: %i bits, speed: %iMHz, "
1028 "latency: %i clks\n",
1029 (pci_state
& PCI_32BIT
) ? 32 : 64,
1030 (pci_state
& PCI_66MHZ
) ? 66 : 33,
1034 * Set the max DMA transfer size. Seems that for most systems
1035 * the performance is better when no MAX parameter is
1036 * set. However for systems enabling PCI write and invalidate,
1037 * DMA writes must be set to the L1 cache line size to get
1038 * optimal performance.
1040 * The default is now to turn the PCI write and invalidate off
1041 * - that is what Alteon does for NT.
1043 tmp
= READ_CMD_MEM
| WRITE_CMD_MEM
;
1044 if (ap
->version
>= 2) {
1045 tmp
|= (MEM_READ_MULTIPLE
| (pci_state
& PCI_66MHZ
));
1047 * Tuning parameters only supported for 8 cards
1049 if (board_idx
== BOARD_IDX_OVERFLOW
||
1050 dis_pci_mem_inval
[board_idx
]) {
1051 if (ap
->pci_command
& PCI_COMMAND_INVALIDATE
) {
1052 ap
->pci_command
&= ~PCI_COMMAND_INVALIDATE
;
1053 pci_write_config_word(pdev
, PCI_COMMAND
,
1055 printk(KERN_INFO
" Disabling PCI memory "
1056 "write and invalidate\n");
1058 } else if (ap
->pci_command
& PCI_COMMAND_INVALIDATE
) {
1059 printk(KERN_INFO
" PCI memory write & invalidate "
1060 "enabled by BIOS, enabling counter measures\n");
1062 switch(SMP_CACHE_BYTES
) {
1064 tmp
|= DMA_WRITE_MAX_16
;
1067 tmp
|= DMA_WRITE_MAX_32
;
1070 tmp
|= DMA_WRITE_MAX_64
;
1073 tmp
|= DMA_WRITE_MAX_128
;
1076 printk(KERN_INFO
" Cache line size %i not "
1077 "supported, PCI write and invalidate "
1078 "disabled\n", SMP_CACHE_BYTES
);
1079 ap
->pci_command
&= ~PCI_COMMAND_INVALIDATE
;
1080 pci_write_config_word(pdev
, PCI_COMMAND
,
1088 * On this platform, we know what the best dma settings
1089 * are. We use 64-byte maximum bursts, because if we
1090 * burst larger than the cache line size (or even cross
1091 * a 64byte boundary in a single burst) the UltraSparc
1092 * PCI controller will disconnect at 64-byte multiples.
1094 * Read-multiple will be properly enabled above, and when
1095 * set will give the PCI controller proper hints about
1098 tmp
&= ~DMA_READ_WRITE_MASK
;
1099 tmp
|= DMA_READ_MAX_64
;
1100 tmp
|= DMA_WRITE_MAX_64
;
1103 tmp
&= ~DMA_READ_WRITE_MASK
;
1104 tmp
|= DMA_READ_MAX_128
;
1106 * All the docs say MUST NOT. Well, I did.
1107 * Nothing terrible happens, if we load wrong size.
1108 * Bit w&i still works better!
1110 tmp
|= DMA_WRITE_MAX_128
;
1112 writel(tmp
, ®s
->PciState
);
1116 * The Host PCI bus controller driver has to set FBB.
1117 * If all devices on that PCI bus support FBB, then the controller
1118 * can enable FBB support in the Host PCI Bus controller (or on
1119 * the PCI-PCI bridge if that applies).
1123 * I have received reports from people having problems when this
1126 if (!(ap
->pci_command
& PCI_COMMAND_FAST_BACK
)) {
1127 printk(KERN_INFO
" Enabling PCI Fast Back to Back\n");
1128 ap
->pci_command
|= PCI_COMMAND_FAST_BACK
;
1129 pci_write_config_word(pdev
, PCI_COMMAND
, ap
->pci_command
);
1134 * Configure DMA attributes.
1136 if (!pci_set_dma_mask(pdev
, DMA_BIT_MASK(64))) {
1137 ap
->pci_using_dac
= 1;
1138 } else if (!pci_set_dma_mask(pdev
, DMA_BIT_MASK(32))) {
1139 ap
->pci_using_dac
= 0;
1146 * Initialize the generic info block and the command+event rings
1147 * and the control blocks for the transmit and receive rings
1148 * as they need to be setup once and for all.
1150 if (!(info
= pci_alloc_consistent(ap
->pdev
, sizeof(struct ace_info
),
1158 * Get the memory for the skb rings.
1160 if (!(ap
->skb
= kmalloc(sizeof(struct ace_skb
), GFP_KERNEL
))) {
1165 ecode
= request_irq(pdev
->irq
, ace_interrupt
, IRQF_SHARED
,
1168 printk(KERN_WARNING
"%s: Requested IRQ %d is busy\n",
1169 DRV_NAME
, pdev
->irq
);
1172 dev
->irq
= pdev
->irq
;
1175 spin_lock_init(&ap
->debug_lock
);
1176 ap
->last_tx
= ACE_TX_RING_ENTRIES(ap
) - 1;
1177 ap
->last_std_rx
= 0;
1178 ap
->last_mini_rx
= 0;
1181 memset(ap
->info
, 0, sizeof(struct ace_info
));
1182 memset(ap
->skb
, 0, sizeof(struct ace_skb
));
1184 ecode
= ace_load_firmware(dev
);
1190 tmp_ptr
= ap
->info_dma
;
1191 writel(tmp_ptr
>> 32, ®s
->InfoPtrHi
);
1192 writel(tmp_ptr
& 0xffffffff, ®s
->InfoPtrLo
);
1194 memset(ap
->evt_ring
, 0, EVT_RING_ENTRIES
* sizeof(struct event
));
1196 set_aceaddr(&info
->evt_ctrl
.rngptr
, ap
->evt_ring_dma
);
1197 info
->evt_ctrl
.flags
= 0;
1201 set_aceaddr(&info
->evt_prd_ptr
, ap
->evt_prd_dma
);
1202 writel(0, ®s
->EvtCsm
);
1204 set_aceaddr(&info
->cmd_ctrl
.rngptr
, 0x100);
1205 info
->cmd_ctrl
.flags
= 0;
1206 info
->cmd_ctrl
.max_len
= 0;
1208 for (i
= 0; i
< CMD_RING_ENTRIES
; i
++)
1209 writel(0, ®s
->CmdRng
[i
]);
1211 writel(0, ®s
->CmdPrd
);
1212 writel(0, ®s
->CmdCsm
);
1214 tmp_ptr
= ap
->info_dma
;
1215 tmp_ptr
+= (unsigned long) &(((struct ace_info
*)0)->s
.stats
);
1216 set_aceaddr(&info
->stats2_ptr
, (dma_addr_t
) tmp_ptr
);
1218 set_aceaddr(&info
->rx_std_ctrl
.rngptr
, ap
->rx_ring_base_dma
);
1219 info
->rx_std_ctrl
.max_len
= ACE_STD_BUFSIZE
;
1220 info
->rx_std_ctrl
.flags
=
1221 RCB_FLG_TCP_UDP_SUM
| RCB_FLG_NO_PSEUDO_HDR
| RCB_FLG_VLAN_ASSIST
;
1223 memset(ap
->rx_std_ring
, 0,
1224 RX_STD_RING_ENTRIES
* sizeof(struct rx_desc
));
1226 for (i
= 0; i
< RX_STD_RING_ENTRIES
; i
++)
1227 ap
->rx_std_ring
[i
].flags
= BD_FLG_TCP_UDP_SUM
;
1229 ap
->rx_std_skbprd
= 0;
1230 atomic_set(&ap
->cur_rx_bufs
, 0);
1232 set_aceaddr(&info
->rx_jumbo_ctrl
.rngptr
,
1233 (ap
->rx_ring_base_dma
+
1234 (sizeof(struct rx_desc
) * RX_STD_RING_ENTRIES
)));
1235 info
->rx_jumbo_ctrl
.max_len
= 0;
1236 info
->rx_jumbo_ctrl
.flags
=
1237 RCB_FLG_TCP_UDP_SUM
| RCB_FLG_NO_PSEUDO_HDR
| RCB_FLG_VLAN_ASSIST
;
1239 memset(ap
->rx_jumbo_ring
, 0,
1240 RX_JUMBO_RING_ENTRIES
* sizeof(struct rx_desc
));
1242 for (i
= 0; i
< RX_JUMBO_RING_ENTRIES
; i
++)
1243 ap
->rx_jumbo_ring
[i
].flags
= BD_FLG_TCP_UDP_SUM
| BD_FLG_JUMBO
;
1245 ap
->rx_jumbo_skbprd
= 0;
1246 atomic_set(&ap
->cur_jumbo_bufs
, 0);
1248 memset(ap
->rx_mini_ring
, 0,
1249 RX_MINI_RING_ENTRIES
* sizeof(struct rx_desc
));
1251 if (ap
->version
>= 2) {
1252 set_aceaddr(&info
->rx_mini_ctrl
.rngptr
,
1253 (ap
->rx_ring_base_dma
+
1254 (sizeof(struct rx_desc
) *
1255 (RX_STD_RING_ENTRIES
+
1256 RX_JUMBO_RING_ENTRIES
))));
1257 info
->rx_mini_ctrl
.max_len
= ACE_MINI_SIZE
;
1258 info
->rx_mini_ctrl
.flags
=
1259 RCB_FLG_TCP_UDP_SUM
|RCB_FLG_NO_PSEUDO_HDR
|RCB_FLG_VLAN_ASSIST
;
1261 for (i
= 0; i
< RX_MINI_RING_ENTRIES
; i
++)
1262 ap
->rx_mini_ring
[i
].flags
=
1263 BD_FLG_TCP_UDP_SUM
| BD_FLG_MINI
;
1265 set_aceaddr(&info
->rx_mini_ctrl
.rngptr
, 0);
1266 info
->rx_mini_ctrl
.flags
= RCB_FLG_RNG_DISABLE
;
1267 info
->rx_mini_ctrl
.max_len
= 0;
1270 ap
->rx_mini_skbprd
= 0;
1271 atomic_set(&ap
->cur_mini_bufs
, 0);
1273 set_aceaddr(&info
->rx_return_ctrl
.rngptr
,
1274 (ap
->rx_ring_base_dma
+
1275 (sizeof(struct rx_desc
) *
1276 (RX_STD_RING_ENTRIES
+
1277 RX_JUMBO_RING_ENTRIES
+
1278 RX_MINI_RING_ENTRIES
))));
1279 info
->rx_return_ctrl
.flags
= 0;
1280 info
->rx_return_ctrl
.max_len
= RX_RETURN_RING_ENTRIES
;
1282 memset(ap
->rx_return_ring
, 0,
1283 RX_RETURN_RING_ENTRIES
* sizeof(struct rx_desc
));
1285 set_aceaddr(&info
->rx_ret_prd_ptr
, ap
->rx_ret_prd_dma
);
1286 *(ap
->rx_ret_prd
) = 0;
1288 writel(TX_RING_BASE
, ®s
->WinBase
);
1290 if (ACE_IS_TIGON_I(ap
)) {
1291 ap
->tx_ring
= (__force
struct tx_desc
*) regs
->Window
;
1292 for (i
= 0; i
< (TIGON_I_TX_RING_ENTRIES
1293 * sizeof(struct tx_desc
)) / sizeof(u32
); i
++)
1294 writel(0, (__force
void __iomem
*)ap
->tx_ring
+ i
* 4);
1296 set_aceaddr(&info
->tx_ctrl
.rngptr
, TX_RING_BASE
);
1298 memset(ap
->tx_ring
, 0,
1299 MAX_TX_RING_ENTRIES
* sizeof(struct tx_desc
));
1301 set_aceaddr(&info
->tx_ctrl
.rngptr
, ap
->tx_ring_dma
);
1304 info
->tx_ctrl
.max_len
= ACE_TX_RING_ENTRIES(ap
);
1305 tmp
= RCB_FLG_TCP_UDP_SUM
| RCB_FLG_NO_PSEUDO_HDR
| RCB_FLG_VLAN_ASSIST
;
1308 * The Tigon I does not like having the TX ring in host memory ;-(
1310 if (!ACE_IS_TIGON_I(ap
))
1311 tmp
|= RCB_FLG_TX_HOST_RING
;
1312 #if TX_COAL_INTS_ONLY
1313 tmp
|= RCB_FLG_COAL_INT_ONLY
;
1315 info
->tx_ctrl
.flags
= tmp
;
1317 set_aceaddr(&info
->tx_csm_ptr
, ap
->tx_csm_dma
);
1320 * Potential item for tuning parameter
1323 writel(DMA_THRESH_16W
, ®s
->DmaReadCfg
);
1324 writel(DMA_THRESH_16W
, ®s
->DmaWriteCfg
);
1326 writel(DMA_THRESH_8W
, ®s
->DmaReadCfg
);
1327 writel(DMA_THRESH_8W
, ®s
->DmaWriteCfg
);
1330 writel(0, ®s
->MaskInt
);
1331 writel(1, ®s
->IfIdx
);
1334 * McKinley boxes do not like us fiddling with AssistState
1337 writel(1, ®s
->AssistState
);
1340 writel(DEF_STAT
, ®s
->TuneStatTicks
);
1341 writel(DEF_TRACE
, ®s
->TuneTrace
);
1343 ace_set_rxtx_parms(dev
, 0);
1345 if (board_idx
== BOARD_IDX_OVERFLOW
) {
1346 printk(KERN_WARNING
"%s: more than %i NICs detected, "
1347 "ignoring module parameters!\n",
1348 ap
->name
, ACE_MAX_MOD_PARMS
);
1349 } else if (board_idx
>= 0) {
1350 if (tx_coal_tick
[board_idx
])
1351 writel(tx_coal_tick
[board_idx
],
1352 ®s
->TuneTxCoalTicks
);
1353 if (max_tx_desc
[board_idx
])
1354 writel(max_tx_desc
[board_idx
], ®s
->TuneMaxTxDesc
);
1356 if (rx_coal_tick
[board_idx
])
1357 writel(rx_coal_tick
[board_idx
],
1358 ®s
->TuneRxCoalTicks
);
1359 if (max_rx_desc
[board_idx
])
1360 writel(max_rx_desc
[board_idx
], ®s
->TuneMaxRxDesc
);
1362 if (trace
[board_idx
])
1363 writel(trace
[board_idx
], ®s
->TuneTrace
);
1365 if ((tx_ratio
[board_idx
] > 0) && (tx_ratio
[board_idx
] < 64))
1366 writel(tx_ratio
[board_idx
], ®s
->TxBufRat
);
1370 * Default link parameters
1372 tmp
= LNK_ENABLE
| LNK_FULL_DUPLEX
| LNK_1000MB
| LNK_100MB
|
1373 LNK_10MB
| LNK_RX_FLOW_CTL_Y
| LNK_NEG_FCTL
| LNK_NEGOTIATE
;
1374 if(ap
->version
>= 2)
1375 tmp
|= LNK_TX_FLOW_CTL_Y
;
1378 * Override link default parameters
1380 if ((board_idx
>= 0) && link_state
[board_idx
]) {
1381 int option
= link_state
[board_idx
];
1385 if (option
& 0x01) {
1386 printk(KERN_INFO
"%s: Setting half duplex link\n",
1388 tmp
&= ~LNK_FULL_DUPLEX
;
1391 tmp
&= ~LNK_NEGOTIATE
;
1398 if ((option
& 0x70) == 0) {
1399 printk(KERN_WARNING
"%s: No media speed specified, "
1400 "forcing auto negotiation\n", ap
->name
);
1401 tmp
|= LNK_NEGOTIATE
| LNK_1000MB
|
1402 LNK_100MB
| LNK_10MB
;
1404 if ((option
& 0x100) == 0)
1405 tmp
|= LNK_NEG_FCTL
;
1407 printk(KERN_INFO
"%s: Disabling flow control "
1408 "negotiation\n", ap
->name
);
1410 tmp
|= LNK_RX_FLOW_CTL_Y
;
1411 if ((option
& 0x400) && (ap
->version
>= 2)) {
1412 printk(KERN_INFO
"%s: Enabling TX flow control\n",
1414 tmp
|= LNK_TX_FLOW_CTL_Y
;
1419 writel(tmp
, ®s
->TuneLink
);
1420 if (ap
->version
>= 2)
1421 writel(tmp
, ®s
->TuneFastLink
);
1423 writel(ap
->firmware_start
, ®s
->Pc
);
1425 writel(0, ®s
->Mb0Lo
);
1428 * Set tx_csm before we start receiving interrupts, otherwise
1429 * the interrupt handler might think it is supposed to process
1430 * tx ints before we are up and running, which may cause a null
1431 * pointer access in the int handler.
1434 ap
->tx_prd
= *(ap
->tx_csm
) = ap
->tx_ret_csm
= 0;
1437 ace_set_txprd(regs
, ap
, 0);
1438 writel(0, ®s
->RxRetCsm
);
1441 * Enable DMA engine now.
1442 * If we do this sooner, Mckinley box pukes.
1443 * I assume it's because Tigon II DMA engine wants to check
1444 * *something* even before the CPU is started.
1446 writel(1, ®s
->AssistState
); /* enable DMA */
1451 writel(readl(®s
->CpuCtrl
) & ~(CPU_HALT
|CPU_TRACE
), ®s
->CpuCtrl
);
1452 readl(®s
->CpuCtrl
);
1455 * Wait for the firmware to spin up - max 3 seconds.
1457 myjif
= jiffies
+ 3 * HZ
;
1458 while (time_before(jiffies
, myjif
) && !ap
->fw_running
)
1461 if (!ap
->fw_running
) {
1462 printk(KERN_ERR
"%s: Firmware NOT running!\n", ap
->name
);
1465 writel(readl(®s
->CpuCtrl
) | CPU_HALT
, ®s
->CpuCtrl
);
1466 readl(®s
->CpuCtrl
);
1468 /* aman@sgi.com - account for badly behaving firmware/NIC:
1469 * - have observed that the NIC may continue to generate
1470 * interrupts for some reason; attempt to stop it - halt
1471 * second CPU for Tigon II cards, and also clear Mb0
1472 * - if we're a module, we'll fail to load if this was
1473 * the only GbE card in the system => if the kernel does
1474 * see an interrupt from the NIC, code to handle it is
1475 * gone and OOps! - so free_irq also
1477 if (ap
->version
>= 2)
1478 writel(readl(®s
->CpuBCtrl
) | CPU_HALT
,
1480 writel(0, ®s
->Mb0Lo
);
1481 readl(®s
->Mb0Lo
);
1488 * We load the ring here as there seem to be no way to tell the
1489 * firmware to wipe the ring without re-initializing it.
1491 if (!test_and_set_bit(0, &ap
->std_refill_busy
))
1492 ace_load_std_rx_ring(dev
, RX_RING_SIZE
);
1494 printk(KERN_ERR
"%s: Someone is busy refilling the RX ring\n",
1496 if (ap
->version
>= 2) {
1497 if (!test_and_set_bit(0, &ap
->mini_refill_busy
))
1498 ace_load_mini_rx_ring(dev
, RX_MINI_SIZE
);
1500 printk(KERN_ERR
"%s: Someone is busy refilling "
1501 "the RX mini ring\n", ap
->name
);
1506 ace_init_cleanup(dev
);
1511 static void ace_set_rxtx_parms(struct net_device
*dev
, int jumbo
)
1513 struct ace_private
*ap
= netdev_priv(dev
);
1514 struct ace_regs __iomem
*regs
= ap
->regs
;
1515 int board_idx
= ap
->board_idx
;
1517 if (board_idx
>= 0) {
1519 if (!tx_coal_tick
[board_idx
])
1520 writel(DEF_TX_COAL
, ®s
->TuneTxCoalTicks
);
1521 if (!max_tx_desc
[board_idx
])
1522 writel(DEF_TX_MAX_DESC
, ®s
->TuneMaxTxDesc
);
1523 if (!rx_coal_tick
[board_idx
])
1524 writel(DEF_RX_COAL
, ®s
->TuneRxCoalTicks
);
1525 if (!max_rx_desc
[board_idx
])
1526 writel(DEF_RX_MAX_DESC
, ®s
->TuneMaxRxDesc
);
1527 if (!tx_ratio
[board_idx
])
1528 writel(DEF_TX_RATIO
, ®s
->TxBufRat
);
1530 if (!tx_coal_tick
[board_idx
])
1531 writel(DEF_JUMBO_TX_COAL
,
1532 ®s
->TuneTxCoalTicks
);
1533 if (!max_tx_desc
[board_idx
])
1534 writel(DEF_JUMBO_TX_MAX_DESC
,
1535 ®s
->TuneMaxTxDesc
);
1536 if (!rx_coal_tick
[board_idx
])
1537 writel(DEF_JUMBO_RX_COAL
,
1538 ®s
->TuneRxCoalTicks
);
1539 if (!max_rx_desc
[board_idx
])
1540 writel(DEF_JUMBO_RX_MAX_DESC
,
1541 ®s
->TuneMaxRxDesc
);
1542 if (!tx_ratio
[board_idx
])
1543 writel(DEF_JUMBO_TX_RATIO
, ®s
->TxBufRat
);
1549 static void ace_watchdog(struct net_device
*data
)
1551 struct net_device
*dev
= data
;
1552 struct ace_private
*ap
= netdev_priv(dev
);
1553 struct ace_regs __iomem
*regs
= ap
->regs
;
1556 * We haven't received a stats update event for more than 2.5
1557 * seconds and there is data in the transmit queue, thus we
1558 * assume the card is stuck.
1560 if (*ap
->tx_csm
!= ap
->tx_ret_csm
) {
1561 printk(KERN_WARNING
"%s: Transmitter is stuck, %08x\n",
1562 dev
->name
, (unsigned int)readl(®s
->HostCtrl
));
1563 /* This can happen due to ieee flow control. */
1565 printk(KERN_DEBUG
"%s: BUG... transmitter died. Kicking it.\n",
1568 netif_wake_queue(dev
);
1574 static void ace_tasklet(unsigned long arg
)
1576 struct net_device
*dev
= (struct net_device
*) arg
;
1577 struct ace_private
*ap
= netdev_priv(dev
);
1580 cur_size
= atomic_read(&ap
->cur_rx_bufs
);
1581 if ((cur_size
< RX_LOW_STD_THRES
) &&
1582 !test_and_set_bit(0, &ap
->std_refill_busy
)) {
1584 printk("refilling buffers (current %i)\n", cur_size
);
1586 ace_load_std_rx_ring(dev
, RX_RING_SIZE
- cur_size
);
1589 if (ap
->version
>= 2) {
1590 cur_size
= atomic_read(&ap
->cur_mini_bufs
);
1591 if ((cur_size
< RX_LOW_MINI_THRES
) &&
1592 !test_and_set_bit(0, &ap
->mini_refill_busy
)) {
1594 printk("refilling mini buffers (current %i)\n",
1597 ace_load_mini_rx_ring(dev
, RX_MINI_SIZE
- cur_size
);
1601 cur_size
= atomic_read(&ap
->cur_jumbo_bufs
);
1602 if (ap
->jumbo
&& (cur_size
< RX_LOW_JUMBO_THRES
) &&
1603 !test_and_set_bit(0, &ap
->jumbo_refill_busy
)) {
1605 printk("refilling jumbo buffers (current %i)\n", cur_size
);
1607 ace_load_jumbo_rx_ring(dev
, RX_JUMBO_SIZE
- cur_size
);
1609 ap
->tasklet_pending
= 0;
1614 * Copy the contents of the NIC's trace buffer to kernel memory.
1616 static void ace_dump_trace(struct ace_private
*ap
)
1620 if (!(ap
->trace_buf
= kmalloc(ACE_TRACE_SIZE
, GFP_KERNEL
)))
1627 * Load the standard rx ring.
1629 * Loading rings is safe without holding the spin lock since this is
1630 * done only before the device is enabled, thus no interrupts are
1631 * generated and by the interrupt handler/tasklet handler.
1633 static void ace_load_std_rx_ring(struct net_device
*dev
, int nr_bufs
)
1635 struct ace_private
*ap
= netdev_priv(dev
);
1636 struct ace_regs __iomem
*regs
= ap
->regs
;
1640 prefetchw(&ap
->cur_rx_bufs
);
1642 idx
= ap
->rx_std_skbprd
;
1644 for (i
= 0; i
< nr_bufs
; i
++) {
1645 struct sk_buff
*skb
;
1649 skb
= netdev_alloc_skb_ip_align(dev
, ACE_STD_BUFSIZE
);
1653 mapping
= pci_map_page(ap
->pdev
, virt_to_page(skb
->data
),
1654 offset_in_page(skb
->data
),
1656 PCI_DMA_FROMDEVICE
);
1657 ap
->skb
->rx_std_skbuff
[idx
].skb
= skb
;
1658 dma_unmap_addr_set(&ap
->skb
->rx_std_skbuff
[idx
],
1661 rd
= &ap
->rx_std_ring
[idx
];
1662 set_aceaddr(&rd
->addr
, mapping
);
1663 rd
->size
= ACE_STD_BUFSIZE
;
1665 idx
= (idx
+ 1) % RX_STD_RING_ENTRIES
;
1671 atomic_add(i
, &ap
->cur_rx_bufs
);
1672 ap
->rx_std_skbprd
= idx
;
1674 if (ACE_IS_TIGON_I(ap
)) {
1676 cmd
.evt
= C_SET_RX_PRD_IDX
;
1678 cmd
.idx
= ap
->rx_std_skbprd
;
1679 ace_issue_cmd(regs
, &cmd
);
1681 writel(idx
, ®s
->RxStdPrd
);
1686 clear_bit(0, &ap
->std_refill_busy
);
1690 printk(KERN_INFO
"Out of memory when allocating "
1691 "standard receive buffers\n");
1696 static void ace_load_mini_rx_ring(struct net_device
*dev
, int nr_bufs
)
1698 struct ace_private
*ap
= netdev_priv(dev
);
1699 struct ace_regs __iomem
*regs
= ap
->regs
;
1702 prefetchw(&ap
->cur_mini_bufs
);
1704 idx
= ap
->rx_mini_skbprd
;
1705 for (i
= 0; i
< nr_bufs
; i
++) {
1706 struct sk_buff
*skb
;
1710 skb
= netdev_alloc_skb_ip_align(dev
, ACE_MINI_BUFSIZE
);
1714 mapping
= pci_map_page(ap
->pdev
, virt_to_page(skb
->data
),
1715 offset_in_page(skb
->data
),
1717 PCI_DMA_FROMDEVICE
);
1718 ap
->skb
->rx_mini_skbuff
[idx
].skb
= skb
;
1719 dma_unmap_addr_set(&ap
->skb
->rx_mini_skbuff
[idx
],
1722 rd
= &ap
->rx_mini_ring
[idx
];
1723 set_aceaddr(&rd
->addr
, mapping
);
1724 rd
->size
= ACE_MINI_BUFSIZE
;
1726 idx
= (idx
+ 1) % RX_MINI_RING_ENTRIES
;
1732 atomic_add(i
, &ap
->cur_mini_bufs
);
1734 ap
->rx_mini_skbprd
= idx
;
1736 writel(idx
, ®s
->RxMiniPrd
);
1740 clear_bit(0, &ap
->mini_refill_busy
);
1743 printk(KERN_INFO
"Out of memory when allocating "
1744 "mini receive buffers\n");
1750 * Load the jumbo rx ring, this may happen at any time if the MTU
1751 * is changed to a value > 1500.
1753 static void ace_load_jumbo_rx_ring(struct net_device
*dev
, int nr_bufs
)
1755 struct ace_private
*ap
= netdev_priv(dev
);
1756 struct ace_regs __iomem
*regs
= ap
->regs
;
1759 idx
= ap
->rx_jumbo_skbprd
;
1761 for (i
= 0; i
< nr_bufs
; i
++) {
1762 struct sk_buff
*skb
;
1766 skb
= netdev_alloc_skb_ip_align(dev
, ACE_JUMBO_BUFSIZE
);
1770 mapping
= pci_map_page(ap
->pdev
, virt_to_page(skb
->data
),
1771 offset_in_page(skb
->data
),
1773 PCI_DMA_FROMDEVICE
);
1774 ap
->skb
->rx_jumbo_skbuff
[idx
].skb
= skb
;
1775 dma_unmap_addr_set(&ap
->skb
->rx_jumbo_skbuff
[idx
],
1778 rd
= &ap
->rx_jumbo_ring
[idx
];
1779 set_aceaddr(&rd
->addr
, mapping
);
1780 rd
->size
= ACE_JUMBO_BUFSIZE
;
1782 idx
= (idx
+ 1) % RX_JUMBO_RING_ENTRIES
;
1788 atomic_add(i
, &ap
->cur_jumbo_bufs
);
1789 ap
->rx_jumbo_skbprd
= idx
;
1791 if (ACE_IS_TIGON_I(ap
)) {
1793 cmd
.evt
= C_SET_RX_JUMBO_PRD_IDX
;
1795 cmd
.idx
= ap
->rx_jumbo_skbprd
;
1796 ace_issue_cmd(regs
, &cmd
);
1798 writel(idx
, ®s
->RxJumboPrd
);
1803 clear_bit(0, &ap
->jumbo_refill_busy
);
1806 if (net_ratelimit())
1807 printk(KERN_INFO
"Out of memory when allocating "
1808 "jumbo receive buffers\n");
1814 * All events are considered to be slow (RX/TX ints do not generate
1815 * events) and are handled here, outside the main interrupt handler,
1816 * to reduce the size of the handler.
1818 static u32
ace_handle_event(struct net_device
*dev
, u32 evtcsm
, u32 evtprd
)
1820 struct ace_private
*ap
;
1822 ap
= netdev_priv(dev
);
1824 while (evtcsm
!= evtprd
) {
1825 switch (ap
->evt_ring
[evtcsm
].evt
) {
1827 printk(KERN_INFO
"%s: Firmware up and running\n",
1832 case E_STATS_UPDATED
:
1836 u16 code
= ap
->evt_ring
[evtcsm
].code
;
1840 u32 state
= readl(&ap
->regs
->GigLnkState
);
1841 printk(KERN_WARNING
"%s: Optical link UP "
1842 "(%s Duplex, Flow Control: %s%s)\n",
1844 state
& LNK_FULL_DUPLEX
? "Full":"Half",
1845 state
& LNK_TX_FLOW_CTL_Y
? "TX " : "",
1846 state
& LNK_RX_FLOW_CTL_Y
? "RX" : "");
1850 printk(KERN_WARNING
"%s: Optical link DOWN\n",
1853 case E_C_LINK_10_100
:
1854 printk(KERN_WARNING
"%s: 10/100BaseT link "
1858 printk(KERN_ERR
"%s: Unknown optical link "
1859 "state %02x\n", ap
->name
, code
);
1864 switch(ap
->evt_ring
[evtcsm
].code
) {
1865 case E_C_ERR_INVAL_CMD
:
1866 printk(KERN_ERR
"%s: invalid command error\n",
1869 case E_C_ERR_UNIMP_CMD
:
1870 printk(KERN_ERR
"%s: unimplemented command "
1871 "error\n", ap
->name
);
1873 case E_C_ERR_BAD_CFG
:
1874 printk(KERN_ERR
"%s: bad config error\n",
1878 printk(KERN_ERR
"%s: unknown error %02x\n",
1879 ap
->name
, ap
->evt_ring
[evtcsm
].code
);
1882 case E_RESET_JUMBO_RNG
:
1885 for (i
= 0; i
< RX_JUMBO_RING_ENTRIES
; i
++) {
1886 if (ap
->skb
->rx_jumbo_skbuff
[i
].skb
) {
1887 ap
->rx_jumbo_ring
[i
].size
= 0;
1888 set_aceaddr(&ap
->rx_jumbo_ring
[i
].addr
, 0);
1889 dev_kfree_skb(ap
->skb
->rx_jumbo_skbuff
[i
].skb
);
1890 ap
->skb
->rx_jumbo_skbuff
[i
].skb
= NULL
;
1894 if (ACE_IS_TIGON_I(ap
)) {
1896 cmd
.evt
= C_SET_RX_JUMBO_PRD_IDX
;
1899 ace_issue_cmd(ap
->regs
, &cmd
);
1901 writel(0, &((ap
->regs
)->RxJumboPrd
));
1906 ap
->rx_jumbo_skbprd
= 0;
1907 printk(KERN_INFO
"%s: Jumbo ring flushed\n",
1909 clear_bit(0, &ap
->jumbo_refill_busy
);
1913 printk(KERN_ERR
"%s: Unhandled event 0x%02x\n",
1914 ap
->name
, ap
->evt_ring
[evtcsm
].evt
);
1916 evtcsm
= (evtcsm
+ 1) % EVT_RING_ENTRIES
;
1923 static void ace_rx_int(struct net_device
*dev
, u32 rxretprd
, u32 rxretcsm
)
1925 struct ace_private
*ap
= netdev_priv(dev
);
1927 int mini_count
= 0, std_count
= 0;
1931 prefetchw(&ap
->cur_rx_bufs
);
1932 prefetchw(&ap
->cur_mini_bufs
);
1934 while (idx
!= rxretprd
) {
1935 struct ring_info
*rip
;
1936 struct sk_buff
*skb
;
1937 struct rx_desc
*retdesc
;
1939 int bd_flags
, desc_type
, mapsize
;
1943 /* make sure the rx descriptor isn't read before rxretprd */
1944 if (idx
== rxretcsm
)
1947 retdesc
= &ap
->rx_return_ring
[idx
];
1948 skbidx
= retdesc
->idx
;
1949 bd_flags
= retdesc
->flags
;
1950 desc_type
= bd_flags
& (BD_FLG_JUMBO
| BD_FLG_MINI
);
1954 * Normal frames do not have any flags set
1956 * Mini and normal frames arrive frequently,
1957 * so use a local counter to avoid doing
1958 * atomic operations for each packet arriving.
1961 rip
= &ap
->skb
->rx_std_skbuff
[skbidx
];
1962 mapsize
= ACE_STD_BUFSIZE
;
1966 rip
= &ap
->skb
->rx_jumbo_skbuff
[skbidx
];
1967 mapsize
= ACE_JUMBO_BUFSIZE
;
1968 atomic_dec(&ap
->cur_jumbo_bufs
);
1971 rip
= &ap
->skb
->rx_mini_skbuff
[skbidx
];
1972 mapsize
= ACE_MINI_BUFSIZE
;
1976 printk(KERN_INFO
"%s: unknown frame type (0x%02x) "
1977 "returned by NIC\n", dev
->name
,
1984 pci_unmap_page(ap
->pdev
,
1985 dma_unmap_addr(rip
, mapping
),
1987 PCI_DMA_FROMDEVICE
);
1988 skb_put(skb
, retdesc
->size
);
1993 csum
= retdesc
->tcp_udp_csum
;
1995 skb
->protocol
= eth_type_trans(skb
, dev
);
1998 * Instead of forcing the poor tigon mips cpu to calculate
1999 * pseudo hdr checksum, we do this ourselves.
2001 if (bd_flags
& BD_FLG_TCP_UDP_SUM
) {
2002 skb
->csum
= htons(csum
);
2003 skb
->ip_summed
= CHECKSUM_COMPLETE
;
2005 skb_checksum_none_assert(skb
);
2009 if ((bd_flags
& BD_FLG_VLAN_TAG
))
2010 __vlan_hwaccel_put_tag(skb
, htons(ETH_P_8021Q
), retdesc
->vlan
);
2013 dev
->stats
.rx_packets
++;
2014 dev
->stats
.rx_bytes
+= retdesc
->size
;
2016 idx
= (idx
+ 1) % RX_RETURN_RING_ENTRIES
;
2019 atomic_sub(std_count
, &ap
->cur_rx_bufs
);
2020 if (!ACE_IS_TIGON_I(ap
))
2021 atomic_sub(mini_count
, &ap
->cur_mini_bufs
);
2025 * According to the documentation RxRetCsm is obsolete with
2026 * the 12.3.x Firmware - my Tigon I NICs seem to disagree!
2028 if (ACE_IS_TIGON_I(ap
)) {
2029 writel(idx
, &ap
->regs
->RxRetCsm
);
2040 static inline void ace_tx_int(struct net_device
*dev
,
2043 struct ace_private
*ap
= netdev_priv(dev
);
2046 struct sk_buff
*skb
;
2047 struct tx_ring_info
*info
;
2049 info
= ap
->skb
->tx_skbuff
+ idx
;
2052 if (dma_unmap_len(info
, maplen
)) {
2053 pci_unmap_page(ap
->pdev
, dma_unmap_addr(info
, mapping
),
2054 dma_unmap_len(info
, maplen
),
2056 dma_unmap_len_set(info
, maplen
, 0);
2060 dev
->stats
.tx_packets
++;
2061 dev
->stats
.tx_bytes
+= skb
->len
;
2062 dev_kfree_skb_irq(skb
);
2066 idx
= (idx
+ 1) % ACE_TX_RING_ENTRIES(ap
);
2067 } while (idx
!= txcsm
);
2069 if (netif_queue_stopped(dev
))
2070 netif_wake_queue(dev
);
2073 ap
->tx_ret_csm
= txcsm
;
2075 /* So... tx_ret_csm is advanced _after_ check for device wakeup.
2077 * We could try to make it before. In this case we would get
2078 * the following race condition: hard_start_xmit on other cpu
2079 * enters after we advanced tx_ret_csm and fills space,
2080 * which we have just freed, so that we make illegal device wakeup.
2081 * There is no good way to workaround this (at entry
2082 * to ace_start_xmit detects this condition and prevents
2083 * ring corruption, but it is not a good workaround.)
2085 * When tx_ret_csm is advanced after, we wake up device _only_
2086 * if we really have some space in ring (though the core doing
2087 * hard_start_xmit can see full ring for some period and has to
2088 * synchronize.) Superb.
2089 * BUT! We get another subtle race condition. hard_start_xmit
2090 * may think that ring is full between wakeup and advancing
2091 * tx_ret_csm and will stop device instantly! It is not so bad.
2092 * We are guaranteed that there is something in ring, so that
2093 * the next irq will resume transmission. To speedup this we could
2094 * mark descriptor, which closes ring with BD_FLG_COAL_NOW
2095 * (see ace_start_xmit).
2097 * Well, this dilemma exists in all lock-free devices.
2098 * We, following scheme used in drivers by Donald Becker,
2099 * select the least dangerous.
2105 static irqreturn_t
ace_interrupt(int irq
, void *dev_id
)
2107 struct net_device
*dev
= (struct net_device
*)dev_id
;
2108 struct ace_private
*ap
= netdev_priv(dev
);
2109 struct ace_regs __iomem
*regs
= ap
->regs
;
2111 u32 txcsm
, rxretcsm
, rxretprd
;
2115 * In case of PCI shared interrupts or spurious interrupts,
2116 * we want to make sure it is actually our interrupt before
2117 * spending any time in here.
2119 if (!(readl(®s
->HostCtrl
) & IN_INT
))
2123 * ACK intr now. Otherwise we will lose updates to rx_ret_prd,
2124 * which happened _after_ rxretprd = *ap->rx_ret_prd; but before
2125 * writel(0, ®s->Mb0Lo).
2127 * "IRQ avoidance" recommended in docs applies to IRQs served
2128 * threads and it is wrong even for that case.
2130 writel(0, ®s
->Mb0Lo
);
2131 readl(®s
->Mb0Lo
);
2134 * There is no conflict between transmit handling in
2135 * start_xmit and receive processing, thus there is no reason
2136 * to take a spin lock for RX handling. Wait until we start
2137 * working on the other stuff - hey we don't need a spin lock
2140 rxretprd
= *ap
->rx_ret_prd
;
2141 rxretcsm
= ap
->cur_rx
;
2143 if (rxretprd
!= rxretcsm
)
2144 ace_rx_int(dev
, rxretprd
, rxretcsm
);
2146 txcsm
= *ap
->tx_csm
;
2147 idx
= ap
->tx_ret_csm
;
2151 * If each skb takes only one descriptor this check degenerates
2152 * to identity, because new space has just been opened.
2153 * But if skbs are fragmented we must check that this index
2154 * update releases enough of space, otherwise we just
2155 * wait for device to make more work.
2157 if (!tx_ring_full(ap
, txcsm
, ap
->tx_prd
))
2158 ace_tx_int(dev
, txcsm
, idx
);
2161 evtcsm
= readl(®s
->EvtCsm
);
2162 evtprd
= *ap
->evt_prd
;
2164 if (evtcsm
!= evtprd
) {
2165 evtcsm
= ace_handle_event(dev
, evtcsm
, evtprd
);
2166 writel(evtcsm
, ®s
->EvtCsm
);
2170 * This has to go last in the interrupt handler and run with
2171 * the spin lock released ... what lock?
2173 if (netif_running(dev
)) {
2175 int run_tasklet
= 0;
2177 cur_size
= atomic_read(&ap
->cur_rx_bufs
);
2178 if (cur_size
< RX_LOW_STD_THRES
) {
2179 if ((cur_size
< RX_PANIC_STD_THRES
) &&
2180 !test_and_set_bit(0, &ap
->std_refill_busy
)) {
2182 printk("low on std buffers %i\n", cur_size
);
2184 ace_load_std_rx_ring(dev
,
2185 RX_RING_SIZE
- cur_size
);
2190 if (!ACE_IS_TIGON_I(ap
)) {
2191 cur_size
= atomic_read(&ap
->cur_mini_bufs
);
2192 if (cur_size
< RX_LOW_MINI_THRES
) {
2193 if ((cur_size
< RX_PANIC_MINI_THRES
) &&
2194 !test_and_set_bit(0,
2195 &ap
->mini_refill_busy
)) {
2197 printk("low on mini buffers %i\n",
2200 ace_load_mini_rx_ring(dev
,
2201 RX_MINI_SIZE
- cur_size
);
2208 cur_size
= atomic_read(&ap
->cur_jumbo_bufs
);
2209 if (cur_size
< RX_LOW_JUMBO_THRES
) {
2210 if ((cur_size
< RX_PANIC_JUMBO_THRES
) &&
2211 !test_and_set_bit(0,
2212 &ap
->jumbo_refill_busy
)){
2214 printk("low on jumbo buffers %i\n",
2217 ace_load_jumbo_rx_ring(dev
,
2218 RX_JUMBO_SIZE
- cur_size
);
2223 if (run_tasklet
&& !ap
->tasklet_pending
) {
2224 ap
->tasklet_pending
= 1;
2225 tasklet_schedule(&ap
->ace_tasklet
);
2232 static int ace_open(struct net_device
*dev
)
2234 struct ace_private
*ap
= netdev_priv(dev
);
2235 struct ace_regs __iomem
*regs
= ap
->regs
;
2238 if (!(ap
->fw_running
)) {
2239 printk(KERN_WARNING
"%s: Firmware not running!\n", dev
->name
);
2243 writel(dev
->mtu
+ ETH_HLEN
+ 4, ®s
->IfMtu
);
2245 cmd
.evt
= C_CLEAR_STATS
;
2248 ace_issue_cmd(regs
, &cmd
);
2250 cmd
.evt
= C_HOST_STATE
;
2251 cmd
.code
= C_C_STACK_UP
;
2253 ace_issue_cmd(regs
, &cmd
);
2256 !test_and_set_bit(0, &ap
->jumbo_refill_busy
))
2257 ace_load_jumbo_rx_ring(dev
, RX_JUMBO_SIZE
);
2259 if (dev
->flags
& IFF_PROMISC
) {
2260 cmd
.evt
= C_SET_PROMISC_MODE
;
2261 cmd
.code
= C_C_PROMISC_ENABLE
;
2263 ace_issue_cmd(regs
, &cmd
);
2271 cmd
.evt
= C_LNK_NEGOTIATION
;
2274 ace_issue_cmd(regs
, &cmd
);
2277 netif_start_queue(dev
);
2280 * Setup the bottom half rx ring refill handler
2282 tasklet_init(&ap
->ace_tasklet
, ace_tasklet
, (unsigned long)dev
);
2287 static int ace_close(struct net_device
*dev
)
2289 struct ace_private
*ap
= netdev_priv(dev
);
2290 struct ace_regs __iomem
*regs
= ap
->regs
;
2292 unsigned long flags
;
2296 * Without (or before) releasing irq and stopping hardware, this
2297 * is an absolute non-sense, by the way. It will be reset instantly
2300 netif_stop_queue(dev
);
2304 cmd
.evt
= C_SET_PROMISC_MODE
;
2305 cmd
.code
= C_C_PROMISC_DISABLE
;
2307 ace_issue_cmd(regs
, &cmd
);
2311 cmd
.evt
= C_HOST_STATE
;
2312 cmd
.code
= C_C_STACK_DOWN
;
2314 ace_issue_cmd(regs
, &cmd
);
2316 tasklet_kill(&ap
->ace_tasklet
);
2319 * Make sure one CPU is not processing packets while
2320 * buffers are being released by another.
2323 local_irq_save(flags
);
2326 for (i
= 0; i
< ACE_TX_RING_ENTRIES(ap
); i
++) {
2327 struct sk_buff
*skb
;
2328 struct tx_ring_info
*info
;
2330 info
= ap
->skb
->tx_skbuff
+ i
;
2333 if (dma_unmap_len(info
, maplen
)) {
2334 if (ACE_IS_TIGON_I(ap
)) {
2335 /* NB: TIGON_1 is special, tx_ring is in io space */
2336 struct tx_desc __iomem
*tx
;
2337 tx
= (__force
struct tx_desc __iomem
*) &ap
->tx_ring
[i
];
2338 writel(0, &tx
->addr
.addrhi
);
2339 writel(0, &tx
->addr
.addrlo
);
2340 writel(0, &tx
->flagsize
);
2342 memset(ap
->tx_ring
+ i
, 0,
2343 sizeof(struct tx_desc
));
2344 pci_unmap_page(ap
->pdev
, dma_unmap_addr(info
, mapping
),
2345 dma_unmap_len(info
, maplen
),
2347 dma_unmap_len_set(info
, maplen
, 0);
2356 cmd
.evt
= C_RESET_JUMBO_RNG
;
2359 ace_issue_cmd(regs
, &cmd
);
2362 ace_unmask_irq(dev
);
2363 local_irq_restore(flags
);
2369 static inline dma_addr_t
2370 ace_map_tx_skb(struct ace_private
*ap
, struct sk_buff
*skb
,
2371 struct sk_buff
*tail
, u32 idx
)
2374 struct tx_ring_info
*info
;
2376 mapping
= pci_map_page(ap
->pdev
, virt_to_page(skb
->data
),
2377 offset_in_page(skb
->data
),
2378 skb
->len
, PCI_DMA_TODEVICE
);
2380 info
= ap
->skb
->tx_skbuff
+ idx
;
2382 dma_unmap_addr_set(info
, mapping
, mapping
);
2383 dma_unmap_len_set(info
, maplen
, skb
->len
);
2389 ace_load_tx_bd(struct ace_private
*ap
, struct tx_desc
*desc
, u64 addr
,
2390 u32 flagsize
, u32 vlan_tag
)
2392 #if !USE_TX_COAL_NOW
2393 flagsize
&= ~BD_FLG_COAL_NOW
;
2396 if (ACE_IS_TIGON_I(ap
)) {
2397 struct tx_desc __iomem
*io
= (__force
struct tx_desc __iomem
*) desc
;
2398 writel(addr
>> 32, &io
->addr
.addrhi
);
2399 writel(addr
& 0xffffffff, &io
->addr
.addrlo
);
2400 writel(flagsize
, &io
->flagsize
);
2401 writel(vlan_tag
, &io
->vlanres
);
2403 desc
->addr
.addrhi
= addr
>> 32;
2404 desc
->addr
.addrlo
= addr
;
2405 desc
->flagsize
= flagsize
;
2406 desc
->vlanres
= vlan_tag
;
2411 static netdev_tx_t
ace_start_xmit(struct sk_buff
*skb
,
2412 struct net_device
*dev
)
2414 struct ace_private
*ap
= netdev_priv(dev
);
2415 struct ace_regs __iomem
*regs
= ap
->regs
;
2416 struct tx_desc
*desc
;
2418 unsigned long maxjiff
= jiffies
+ 3*HZ
;
2423 if (tx_ring_full(ap
, ap
->tx_ret_csm
, idx
))
2426 if (!skb_shinfo(skb
)->nr_frags
) {
2430 mapping
= ace_map_tx_skb(ap
, skb
, skb
, idx
);
2431 flagsize
= (skb
->len
<< 16) | (BD_FLG_END
);
2432 if (skb
->ip_summed
== CHECKSUM_PARTIAL
)
2433 flagsize
|= BD_FLG_TCP_UDP_SUM
;
2434 if (skb_vlan_tag_present(skb
)) {
2435 flagsize
|= BD_FLG_VLAN_TAG
;
2436 vlan_tag
= skb_vlan_tag_get(skb
);
2438 desc
= ap
->tx_ring
+ idx
;
2439 idx
= (idx
+ 1) % ACE_TX_RING_ENTRIES(ap
);
2441 /* Look at ace_tx_int for explanations. */
2442 if (tx_ring_full(ap
, ap
->tx_ret_csm
, idx
))
2443 flagsize
|= BD_FLG_COAL_NOW
;
2445 ace_load_tx_bd(ap
, desc
, mapping
, flagsize
, vlan_tag
);
2451 mapping
= ace_map_tx_skb(ap
, skb
, NULL
, idx
);
2452 flagsize
= (skb_headlen(skb
) << 16);
2453 if (skb
->ip_summed
== CHECKSUM_PARTIAL
)
2454 flagsize
|= BD_FLG_TCP_UDP_SUM
;
2455 if (skb_vlan_tag_present(skb
)) {
2456 flagsize
|= BD_FLG_VLAN_TAG
;
2457 vlan_tag
= skb_vlan_tag_get(skb
);
2460 ace_load_tx_bd(ap
, ap
->tx_ring
+ idx
, mapping
, flagsize
, vlan_tag
);
2462 idx
= (idx
+ 1) % ACE_TX_RING_ENTRIES(ap
);
2464 for (i
= 0; i
< skb_shinfo(skb
)->nr_frags
; i
++) {
2465 const skb_frag_t
*frag
= &skb_shinfo(skb
)->frags
[i
];
2466 struct tx_ring_info
*info
;
2468 len
+= skb_frag_size(frag
);
2469 info
= ap
->skb
->tx_skbuff
+ idx
;
2470 desc
= ap
->tx_ring
+ idx
;
2472 mapping
= skb_frag_dma_map(&ap
->pdev
->dev
, frag
, 0,
2473 skb_frag_size(frag
),
2476 flagsize
= skb_frag_size(frag
) << 16;
2477 if (skb
->ip_summed
== CHECKSUM_PARTIAL
)
2478 flagsize
|= BD_FLG_TCP_UDP_SUM
;
2479 idx
= (idx
+ 1) % ACE_TX_RING_ENTRIES(ap
);
2481 if (i
== skb_shinfo(skb
)->nr_frags
- 1) {
2482 flagsize
|= BD_FLG_END
;
2483 if (tx_ring_full(ap
, ap
->tx_ret_csm
, idx
))
2484 flagsize
|= BD_FLG_COAL_NOW
;
2487 * Only the last fragment frees
2494 dma_unmap_addr_set(info
, mapping
, mapping
);
2495 dma_unmap_len_set(info
, maplen
, skb_frag_size(frag
));
2496 ace_load_tx_bd(ap
, desc
, mapping
, flagsize
, vlan_tag
);
2502 ace_set_txprd(regs
, ap
, idx
);
2504 if (flagsize
& BD_FLG_COAL_NOW
) {
2505 netif_stop_queue(dev
);
2508 * A TX-descriptor producer (an IRQ) might have gotten
2509 * between, making the ring free again. Since xmit is
2510 * serialized, this is the only situation we have to
2513 if (!tx_ring_full(ap
, ap
->tx_ret_csm
, idx
))
2514 netif_wake_queue(dev
);
2517 return NETDEV_TX_OK
;
2521 * This race condition is unavoidable with lock-free drivers.
2522 * We wake up the queue _before_ tx_prd is advanced, so that we can
2523 * enter hard_start_xmit too early, while tx ring still looks closed.
2524 * This happens ~1-4 times per 100000 packets, so that we can allow
2525 * to loop syncing to other CPU. Probably, we need an additional
2526 * wmb() in ace_tx_intr as well.
2528 * Note that this race is relieved by reserving one more entry
2529 * in tx ring than it is necessary (see original non-SG driver).
2530 * However, with SG we need to reserve 2*MAX_SKB_FRAGS+1, which
2531 * is already overkill.
2533 * Alternative is to return with 1 not throttling queue. In this
2534 * case loop becomes longer, no more useful effects.
2536 if (time_before(jiffies
, maxjiff
)) {
2542 /* The ring is stuck full. */
2543 printk(KERN_WARNING
"%s: Transmit ring stuck full\n", dev
->name
);
2544 return NETDEV_TX_BUSY
;
2548 static int ace_change_mtu(struct net_device
*dev
, int new_mtu
)
2550 struct ace_private
*ap
= netdev_priv(dev
);
2551 struct ace_regs __iomem
*regs
= ap
->regs
;
2553 writel(new_mtu
+ ETH_HLEN
+ 4, ®s
->IfMtu
);
2556 if (new_mtu
> ACE_STD_MTU
) {
2558 printk(KERN_INFO
"%s: Enabling Jumbo frame "
2559 "support\n", dev
->name
);
2561 if (!test_and_set_bit(0, &ap
->jumbo_refill_busy
))
2562 ace_load_jumbo_rx_ring(dev
, RX_JUMBO_SIZE
);
2563 ace_set_rxtx_parms(dev
, 1);
2566 while (test_and_set_bit(0, &ap
->jumbo_refill_busy
));
2567 ace_sync_irq(dev
->irq
);
2568 ace_set_rxtx_parms(dev
, 0);
2572 cmd
.evt
= C_RESET_JUMBO_RNG
;
2575 ace_issue_cmd(regs
, &cmd
);
2582 static int ace_get_link_ksettings(struct net_device
*dev
,
2583 struct ethtool_link_ksettings
*cmd
)
2585 struct ace_private
*ap
= netdev_priv(dev
);
2586 struct ace_regs __iomem
*regs
= ap
->regs
;
2590 memset(cmd
, 0, sizeof(struct ethtool_link_ksettings
));
2592 supported
= (SUPPORTED_10baseT_Half
| SUPPORTED_10baseT_Full
|
2593 SUPPORTED_100baseT_Half
| SUPPORTED_100baseT_Full
|
2594 SUPPORTED_1000baseT_Half
| SUPPORTED_1000baseT_Full
|
2595 SUPPORTED_Autoneg
| SUPPORTED_FIBRE
);
2597 cmd
->base
.port
= PORT_FIBRE
;
2599 link
= readl(®s
->GigLnkState
);
2600 if (link
& LNK_1000MB
) {
2601 cmd
->base
.speed
= SPEED_1000
;
2603 link
= readl(®s
->FastLnkState
);
2604 if (link
& LNK_100MB
)
2605 cmd
->base
.speed
= SPEED_100
;
2606 else if (link
& LNK_10MB
)
2607 cmd
->base
.speed
= SPEED_10
;
2609 cmd
->base
.speed
= 0;
2611 if (link
& LNK_FULL_DUPLEX
)
2612 cmd
->base
.duplex
= DUPLEX_FULL
;
2614 cmd
->base
.duplex
= DUPLEX_HALF
;
2616 if (link
& LNK_NEGOTIATE
)
2617 cmd
->base
.autoneg
= AUTONEG_ENABLE
;
2619 cmd
->base
.autoneg
= AUTONEG_DISABLE
;
2623 * Current struct ethtool_cmd is insufficient
2625 ecmd
->trace
= readl(®s
->TuneTrace
);
2627 ecmd
->txcoal
= readl(®s
->TuneTxCoalTicks
);
2628 ecmd
->rxcoal
= readl(®s
->TuneRxCoalTicks
);
2631 ethtool_convert_legacy_u32_to_link_mode(cmd
->link_modes
.supported
,
2637 static int ace_set_link_ksettings(struct net_device
*dev
,
2638 const struct ethtool_link_ksettings
*cmd
)
2640 struct ace_private
*ap
= netdev_priv(dev
);
2641 struct ace_regs __iomem
*regs
= ap
->regs
;
2644 link
= readl(®s
->GigLnkState
);
2645 if (link
& LNK_1000MB
)
2648 link
= readl(®s
->FastLnkState
);
2649 if (link
& LNK_100MB
)
2651 else if (link
& LNK_10MB
)
2657 link
= LNK_ENABLE
| LNK_1000MB
| LNK_100MB
| LNK_10MB
|
2658 LNK_RX_FLOW_CTL_Y
| LNK_NEG_FCTL
;
2659 if (!ACE_IS_TIGON_I(ap
))
2660 link
|= LNK_TX_FLOW_CTL_Y
;
2661 if (cmd
->base
.autoneg
== AUTONEG_ENABLE
)
2662 link
|= LNK_NEGOTIATE
;
2663 if (cmd
->base
.speed
!= speed
) {
2664 link
&= ~(LNK_1000MB
| LNK_100MB
| LNK_10MB
);
2665 switch (cmd
->base
.speed
) {
2678 if (cmd
->base
.duplex
== DUPLEX_FULL
)
2679 link
|= LNK_FULL_DUPLEX
;
2681 if (link
!= ap
->link
) {
2683 printk(KERN_INFO
"%s: Renegotiating link state\n",
2687 writel(link
, ®s
->TuneLink
);
2688 if (!ACE_IS_TIGON_I(ap
))
2689 writel(link
, ®s
->TuneFastLink
);
2692 cmd
.evt
= C_LNK_NEGOTIATION
;
2695 ace_issue_cmd(regs
, &cmd
);
2700 static void ace_get_drvinfo(struct net_device
*dev
,
2701 struct ethtool_drvinfo
*info
)
2703 struct ace_private
*ap
= netdev_priv(dev
);
2705 strlcpy(info
->driver
, "acenic", sizeof(info
->driver
));
2706 snprintf(info
->version
, sizeof(info
->version
), "%i.%i.%i",
2707 ap
->firmware_major
, ap
->firmware_minor
,
2711 strlcpy(info
->bus_info
, pci_name(ap
->pdev
),
2712 sizeof(info
->bus_info
));
2717 * Set the hardware MAC address.
2719 static int ace_set_mac_addr(struct net_device
*dev
, void *p
)
2721 struct ace_private
*ap
= netdev_priv(dev
);
2722 struct ace_regs __iomem
*regs
= ap
->regs
;
2723 struct sockaddr
*addr
=p
;
2727 if(netif_running(dev
))
2730 memcpy(dev
->dev_addr
, addr
->sa_data
,dev
->addr_len
);
2732 da
= (u8
*)dev
->dev_addr
;
2734 writel(da
[0] << 8 | da
[1], ®s
->MacAddrHi
);
2735 writel((da
[2] << 24) | (da
[3] << 16) | (da
[4] << 8) | da
[5],
2738 cmd
.evt
= C_SET_MAC_ADDR
;
2741 ace_issue_cmd(regs
, &cmd
);
2747 static void ace_set_multicast_list(struct net_device
*dev
)
2749 struct ace_private
*ap
= netdev_priv(dev
);
2750 struct ace_regs __iomem
*regs
= ap
->regs
;
2753 if ((dev
->flags
& IFF_ALLMULTI
) && !(ap
->mcast_all
)) {
2754 cmd
.evt
= C_SET_MULTICAST_MODE
;
2755 cmd
.code
= C_C_MCAST_ENABLE
;
2757 ace_issue_cmd(regs
, &cmd
);
2759 } else if (ap
->mcast_all
) {
2760 cmd
.evt
= C_SET_MULTICAST_MODE
;
2761 cmd
.code
= C_C_MCAST_DISABLE
;
2763 ace_issue_cmd(regs
, &cmd
);
2767 if ((dev
->flags
& IFF_PROMISC
) && !(ap
->promisc
)) {
2768 cmd
.evt
= C_SET_PROMISC_MODE
;
2769 cmd
.code
= C_C_PROMISC_ENABLE
;
2771 ace_issue_cmd(regs
, &cmd
);
2773 }else if (!(dev
->flags
& IFF_PROMISC
) && (ap
->promisc
)) {
2774 cmd
.evt
= C_SET_PROMISC_MODE
;
2775 cmd
.code
= C_C_PROMISC_DISABLE
;
2777 ace_issue_cmd(regs
, &cmd
);
2782 * For the time being multicast relies on the upper layers
2783 * filtering it properly. The Firmware does not allow one to
2784 * set the entire multicast list at a time and keeping track of
2785 * it here is going to be messy.
2787 if (!netdev_mc_empty(dev
) && !ap
->mcast_all
) {
2788 cmd
.evt
= C_SET_MULTICAST_MODE
;
2789 cmd
.code
= C_C_MCAST_ENABLE
;
2791 ace_issue_cmd(regs
, &cmd
);
2792 }else if (!ap
->mcast_all
) {
2793 cmd
.evt
= C_SET_MULTICAST_MODE
;
2794 cmd
.code
= C_C_MCAST_DISABLE
;
2796 ace_issue_cmd(regs
, &cmd
);
2801 static struct net_device_stats
*ace_get_stats(struct net_device
*dev
)
2803 struct ace_private
*ap
= netdev_priv(dev
);
2804 struct ace_mac_stats __iomem
*mac_stats
=
2805 (struct ace_mac_stats __iomem
*)ap
->regs
->Stats
;
2807 dev
->stats
.rx_missed_errors
= readl(&mac_stats
->drop_space
);
2808 dev
->stats
.multicast
= readl(&mac_stats
->kept_mc
);
2809 dev
->stats
.collisions
= readl(&mac_stats
->coll
);
2815 static void ace_copy(struct ace_regs __iomem
*regs
, const __be32
*src
,
2818 void __iomem
*tdest
;
2825 tsize
= min_t(u32
, ((~dest
& (ACE_WINDOW_SIZE
- 1)) + 1),
2826 min_t(u32
, size
, ACE_WINDOW_SIZE
));
2827 tdest
= (void __iomem
*) ®s
->Window
+
2828 (dest
& (ACE_WINDOW_SIZE
- 1));
2829 writel(dest
& ~(ACE_WINDOW_SIZE
- 1), ®s
->WinBase
);
2830 for (i
= 0; i
< (tsize
/ 4); i
++) {
2831 /* Firmware is big-endian */
2832 writel(be32_to_cpup(src
), tdest
);
2842 static void ace_clear(struct ace_regs __iomem
*regs
, u32 dest
, int size
)
2844 void __iomem
*tdest
;
2851 tsize
= min_t(u32
, ((~dest
& (ACE_WINDOW_SIZE
- 1)) + 1),
2852 min_t(u32
, size
, ACE_WINDOW_SIZE
));
2853 tdest
= (void __iomem
*) ®s
->Window
+
2854 (dest
& (ACE_WINDOW_SIZE
- 1));
2855 writel(dest
& ~(ACE_WINDOW_SIZE
- 1), ®s
->WinBase
);
2857 for (i
= 0; i
< (tsize
/ 4); i
++) {
2858 writel(0, tdest
+ i
*4);
2868 * Download the firmware into the SRAM on the NIC
2870 * This operation requires the NIC to be halted and is performed with
2871 * interrupts disabled and with the spinlock hold.
2873 static int ace_load_firmware(struct net_device
*dev
)
2875 const struct firmware
*fw
;
2876 const char *fw_name
= "acenic/tg2.bin";
2877 struct ace_private
*ap
= netdev_priv(dev
);
2878 struct ace_regs __iomem
*regs
= ap
->regs
;
2879 const __be32
*fw_data
;
2883 if (!(readl(®s
->CpuCtrl
) & CPU_HALTED
)) {
2884 printk(KERN_ERR
"%s: trying to download firmware while the "
2885 "CPU is running!\n", ap
->name
);
2889 if (ACE_IS_TIGON_I(ap
))
2890 fw_name
= "acenic/tg1.bin";
2892 ret
= request_firmware(&fw
, fw_name
, &ap
->pdev
->dev
);
2894 printk(KERN_ERR
"%s: Failed to load firmware \"%s\"\n",
2899 fw_data
= (void *)fw
->data
;
2901 /* Firmware blob starts with version numbers, followed by
2902 load and start address. Remainder is the blob to be loaded
2903 contiguously from load address. We don't bother to represent
2904 the BSS/SBSS sections any more, since we were clearing the
2905 whole thing anyway. */
2906 ap
->firmware_major
= fw
->data
[0];
2907 ap
->firmware_minor
= fw
->data
[1];
2908 ap
->firmware_fix
= fw
->data
[2];
2910 ap
->firmware_start
= be32_to_cpu(fw_data
[1]);
2911 if (ap
->firmware_start
< 0x4000 || ap
->firmware_start
>= 0x80000) {
2912 printk(KERN_ERR
"%s: bogus load address %08x in \"%s\"\n",
2913 ap
->name
, ap
->firmware_start
, fw_name
);
2918 load_addr
= be32_to_cpu(fw_data
[2]);
2919 if (load_addr
< 0x4000 || load_addr
>= 0x80000) {
2920 printk(KERN_ERR
"%s: bogus load address %08x in \"%s\"\n",
2921 ap
->name
, load_addr
, fw_name
);
2927 * Do not try to clear more than 512KiB or we end up seeing
2928 * funny things on NICs with only 512KiB SRAM
2930 ace_clear(regs
, 0x2000, 0x80000-0x2000);
2931 ace_copy(regs
, &fw_data
[3], load_addr
, fw
->size
-12);
2933 release_firmware(fw
);
2939 * The eeprom on the AceNIC is an Atmel i2c EEPROM.
2941 * Accessing the EEPROM is `interesting' to say the least - don't read
2942 * this code right after dinner.
2944 * This is all about black magic and bit-banging the device .... I
2945 * wonder in what hospital they have put the guy who designed the i2c
2948 * Oh yes, this is only the beginning!
2950 * Thanks to Stevarino Webinski for helping tracking down the bugs in the
2951 * code i2c readout code by beta testing all my hacks.
2953 static void eeprom_start(struct ace_regs __iomem
*regs
)
2957 readl(®s
->LocalCtrl
);
2958 udelay(ACE_SHORT_DELAY
);
2959 local
= readl(®s
->LocalCtrl
);
2960 local
|= EEPROM_DATA_OUT
| EEPROM_WRITE_ENABLE
;
2961 writel(local
, ®s
->LocalCtrl
);
2962 readl(®s
->LocalCtrl
);
2964 udelay(ACE_SHORT_DELAY
);
2965 local
|= EEPROM_CLK_OUT
;
2966 writel(local
, ®s
->LocalCtrl
);
2967 readl(®s
->LocalCtrl
);
2969 udelay(ACE_SHORT_DELAY
);
2970 local
&= ~EEPROM_DATA_OUT
;
2971 writel(local
, ®s
->LocalCtrl
);
2972 readl(®s
->LocalCtrl
);
2974 udelay(ACE_SHORT_DELAY
);
2975 local
&= ~EEPROM_CLK_OUT
;
2976 writel(local
, ®s
->LocalCtrl
);
2977 readl(®s
->LocalCtrl
);
2982 static void eeprom_prep(struct ace_regs __iomem
*regs
, u8 magic
)
2987 udelay(ACE_SHORT_DELAY
);
2988 local
= readl(®s
->LocalCtrl
);
2989 local
&= ~EEPROM_DATA_OUT
;
2990 local
|= EEPROM_WRITE_ENABLE
;
2991 writel(local
, ®s
->LocalCtrl
);
2992 readl(®s
->LocalCtrl
);
2995 for (i
= 0; i
< 8; i
++, magic
<<= 1) {
2996 udelay(ACE_SHORT_DELAY
);
2998 local
|= EEPROM_DATA_OUT
;
3000 local
&= ~EEPROM_DATA_OUT
;
3001 writel(local
, ®s
->LocalCtrl
);
3002 readl(®s
->LocalCtrl
);
3005 udelay(ACE_SHORT_DELAY
);
3006 local
|= EEPROM_CLK_OUT
;
3007 writel(local
, ®s
->LocalCtrl
);
3008 readl(®s
->LocalCtrl
);
3010 udelay(ACE_SHORT_DELAY
);
3011 local
&= ~(EEPROM_CLK_OUT
| EEPROM_DATA_OUT
);
3012 writel(local
, ®s
->LocalCtrl
);
3013 readl(®s
->LocalCtrl
);
3019 static int eeprom_check_ack(struct ace_regs __iomem
*regs
)
3024 local
= readl(®s
->LocalCtrl
);
3025 local
&= ~EEPROM_WRITE_ENABLE
;
3026 writel(local
, ®s
->LocalCtrl
);
3027 readl(®s
->LocalCtrl
);
3029 udelay(ACE_LONG_DELAY
);
3030 local
|= EEPROM_CLK_OUT
;
3031 writel(local
, ®s
->LocalCtrl
);
3032 readl(®s
->LocalCtrl
);
3034 udelay(ACE_SHORT_DELAY
);
3035 /* sample data in middle of high clk */
3036 state
= (readl(®s
->LocalCtrl
) & EEPROM_DATA_IN
) != 0;
3037 udelay(ACE_SHORT_DELAY
);
3039 writel(readl(®s
->LocalCtrl
) & ~EEPROM_CLK_OUT
, ®s
->LocalCtrl
);
3040 readl(®s
->LocalCtrl
);
3047 static void eeprom_stop(struct ace_regs __iomem
*regs
)
3051 udelay(ACE_SHORT_DELAY
);
3052 local
= readl(®s
->LocalCtrl
);
3053 local
|= EEPROM_WRITE_ENABLE
;
3054 writel(local
, ®s
->LocalCtrl
);
3055 readl(®s
->LocalCtrl
);
3057 udelay(ACE_SHORT_DELAY
);
3058 local
&= ~EEPROM_DATA_OUT
;
3059 writel(local
, ®s
->LocalCtrl
);
3060 readl(®s
->LocalCtrl
);
3062 udelay(ACE_SHORT_DELAY
);
3063 local
|= EEPROM_CLK_OUT
;
3064 writel(local
, ®s
->LocalCtrl
);
3065 readl(®s
->LocalCtrl
);
3067 udelay(ACE_SHORT_DELAY
);
3068 local
|= EEPROM_DATA_OUT
;
3069 writel(local
, ®s
->LocalCtrl
);
3070 readl(®s
->LocalCtrl
);
3072 udelay(ACE_LONG_DELAY
);
3073 local
&= ~EEPROM_CLK_OUT
;
3074 writel(local
, ®s
->LocalCtrl
);
3080 * Read a whole byte from the EEPROM.
3082 static int read_eeprom_byte(struct net_device
*dev
, unsigned long offset
)
3084 struct ace_private
*ap
= netdev_priv(dev
);
3085 struct ace_regs __iomem
*regs
= ap
->regs
;
3086 unsigned long flags
;
3092 * Don't take interrupts on this CPU will bit banging
3093 * the %#%#@$ I2C device
3095 local_irq_save(flags
);
3099 eeprom_prep(regs
, EEPROM_WRITE_SELECT
);
3100 if (eeprom_check_ack(regs
)) {
3101 local_irq_restore(flags
);
3102 printk(KERN_ERR
"%s: Unable to sync eeprom\n", ap
->name
);
3104 goto eeprom_read_error
;
3107 eeprom_prep(regs
, (offset
>> 8) & 0xff);
3108 if (eeprom_check_ack(regs
)) {
3109 local_irq_restore(flags
);
3110 printk(KERN_ERR
"%s: Unable to set address byte 0\n",
3113 goto eeprom_read_error
;
3116 eeprom_prep(regs
, offset
& 0xff);
3117 if (eeprom_check_ack(regs
)) {
3118 local_irq_restore(flags
);
3119 printk(KERN_ERR
"%s: Unable to set address byte 1\n",
3122 goto eeprom_read_error
;
3126 eeprom_prep(regs
, EEPROM_READ_SELECT
);
3127 if (eeprom_check_ack(regs
)) {
3128 local_irq_restore(flags
);
3129 printk(KERN_ERR
"%s: Unable to set READ_SELECT\n",
3132 goto eeprom_read_error
;
3135 for (i
= 0; i
< 8; i
++) {
3136 local
= readl(®s
->LocalCtrl
);
3137 local
&= ~EEPROM_WRITE_ENABLE
;
3138 writel(local
, ®s
->LocalCtrl
);
3139 readl(®s
->LocalCtrl
);
3140 udelay(ACE_LONG_DELAY
);
3142 local
|= EEPROM_CLK_OUT
;
3143 writel(local
, ®s
->LocalCtrl
);
3144 readl(®s
->LocalCtrl
);
3146 udelay(ACE_SHORT_DELAY
);
3147 /* sample data mid high clk */
3148 result
= (result
<< 1) |
3149 ((readl(®s
->LocalCtrl
) & EEPROM_DATA_IN
) != 0);
3150 udelay(ACE_SHORT_DELAY
);
3152 local
= readl(®s
->LocalCtrl
);
3153 local
&= ~EEPROM_CLK_OUT
;
3154 writel(local
, ®s
->LocalCtrl
);
3155 readl(®s
->LocalCtrl
);
3156 udelay(ACE_SHORT_DELAY
);
3159 local
|= EEPROM_WRITE_ENABLE
;
3160 writel(local
, ®s
->LocalCtrl
);
3161 readl(®s
->LocalCtrl
);
3163 udelay(ACE_SHORT_DELAY
);
3167 local
|= EEPROM_DATA_OUT
;
3168 writel(local
, ®s
->LocalCtrl
);
3169 readl(®s
->LocalCtrl
);
3171 udelay(ACE_SHORT_DELAY
);
3172 writel(readl(®s
->LocalCtrl
) | EEPROM_CLK_OUT
, ®s
->LocalCtrl
);
3173 readl(®s
->LocalCtrl
);
3174 udelay(ACE_LONG_DELAY
);
3175 writel(readl(®s
->LocalCtrl
) & ~EEPROM_CLK_OUT
, ®s
->LocalCtrl
);
3176 readl(®s
->LocalCtrl
);
3178 udelay(ACE_SHORT_DELAY
);
3181 local_irq_restore(flags
);
3186 printk(KERN_ERR
"%s: Unable to read eeprom byte 0x%02lx\n",
3191 module_pci_driver(acenic_pci_driver
);