OpenCores
URL https://opencores.org/ocsvn/test_project/test_project/trunk

Subversion Repositories test_project

[/] [test_project/] [trunk/] [linux_sd_driver/] [drivers/] [net/] [eepro100.c] - Blame information for rev 62

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 62 marcus.erl
/* drivers/net/eepro100.c: An Intel i82557-559 Ethernet driver for Linux. */
2
/*
3
        Written 1996-1999 by Donald Becker.
4
 
5
        The driver also contains updates by different kernel developers
6
        (see incomplete list below).
7
        Current maintainer is Andrey V. Savochkin <saw@saw.sw.com.sg>.
8
        Please use this email address and linux-kernel mailing list for bug reports.
9
 
10
        This software may be used and distributed according to the terms
11
        of the GNU General Public License, incorporated herein by reference.
12
 
13
        This driver is for the Intel EtherExpress Pro100 (Speedo3) design.
14
        It should work with all i82557/558/559 boards.
15
 
16
        Version history:
17
        1998 Apr - 2000 Feb  Andrey V. Savochkin <saw@saw.sw.com.sg>
18
                Serious fixes for multicast filter list setting, TX timeout routine;
19
                RX ring refilling logic;  other stuff
20
        2000 Feb  Jeff Garzik <jgarzik@pobox.com>
21
                Convert to new PCI driver interface
22
        2000 Mar 24  Dragan Stancevic <visitor@valinux.com>
23
                Disabled FC and ER, to avoid lockups when when we get FCP interrupts.
24
        2000 Jul 17 Goutham Rao <goutham.rao@intel.com>
25
                PCI DMA API fixes, adding pci_dma_sync_single calls where neccesary
26
        2000 Aug 31 David Mosberger <davidm@hpl.hp.com>
27
                rx_align support: enables rx DMA without causing unaligned accesses.
28
*/
29
 
30
static const char * const version =
31
"eepro100.c:v1.09j-t 9/29/99 Donald Becker\n"
32
"eepro100.c: $Revision: 1.36 $ 2000/11/17 Modified by Andrey V. Savochkin <saw@saw.sw.com.sg> and others\n";
33
 
34
/* A few user-configurable values that apply to all boards.
35
   First set is undocumented and spelled per Intel recommendations. */
36
 
37
static int congenb /* = 0 */; /* Enable congestion control in the DP83840. */
38
static int txfifo = 8;          /* Tx FIFO threshold in 4 byte units, 0-15 */
39
static int rxfifo = 8;          /* Rx FIFO threshold, default 32 bytes. */
40
/* Tx/Rx DMA burst length, 0-127, 0 == no preemption, tx==128 -> disabled. */
41
static int txdmacount = 128;
42
static int rxdmacount /* = 0 */;
43
 
44
#if defined(__ia64__) || defined(__alpha__) || defined(__sparc__) || defined(__mips__) || \
45
        defined(__arm__)
46
  /* align rx buffers to 2 bytes so that IP header is aligned */
47
# define rx_align(skb)          skb_reserve((skb), 2)
48
# define RxFD_ALIGNMENT         __attribute__ ((aligned (2), packed))
49
#else
50
# define rx_align(skb)
51
# define RxFD_ALIGNMENT
52
#endif
53
 
54
/* Set the copy breakpoint for the copy-only-tiny-buffer Rx method.
55
   Lower values use more memory, but are faster. */
56
static int rx_copybreak = 200;
57
 
58
/* Maximum events (Rx packets, etc.) to handle at each interrupt. */
59
static int max_interrupt_work = 20;
60
 
61
/* Maximum number of multicast addresses to filter (vs. rx-all-multicast) */
62
static int multicast_filter_limit = 64;
63
 
64
/* 'options' is used to pass a transceiver override or full-duplex flag
65
   e.g. "options=16" for FD, "options=32" for 100mbps-only. */
66
static int full_duplex[] = {-1, -1, -1, -1, -1, -1, -1, -1};
67
static int options[] = {-1, -1, -1, -1, -1, -1, -1, -1};
68
 
69
/* A few values that may be tweaked. */
70
/* The ring sizes should be a power of two for efficiency. */
71
#define TX_RING_SIZE    64
72
#define RX_RING_SIZE    64
73
/* How much slots multicast filter setup may take.
74
   Do not descrease without changing set_rx_mode() implementaion. */
75
#define TX_MULTICAST_SIZE   2
76
#define TX_MULTICAST_RESERV (TX_MULTICAST_SIZE*2)
77
/* Actual number of TX packets queued, must be
78
   <= TX_RING_SIZE-TX_MULTICAST_RESERV. */
79
#define TX_QUEUE_LIMIT  (TX_RING_SIZE-TX_MULTICAST_RESERV)
80
/* Hysteresis marking queue as no longer full. */
81
#define TX_QUEUE_UNFULL (TX_QUEUE_LIMIT-4)
82
 
83
/* Operational parameters that usually are not changed. */
84
 
85
/* Time in jiffies before concluding the transmitter is hung. */
86
#define TX_TIMEOUT              (2*HZ)
87
/* Size of an pre-allocated Rx buffer: <Ethernet MTU> + slack.*/
88
#define PKT_BUF_SZ              1536
89
 
90
#include <linux/module.h>
91
 
92
#include <linux/kernel.h>
93
#include <linux/string.h>
94
#include <linux/errno.h>
95
#include <linux/ioport.h>
96
#include <linux/slab.h>
97
#include <linux/interrupt.h>
98
#include <linux/timer.h>
99
#include <linux/pci.h>
100
#include <linux/spinlock.h>
101
#include <linux/init.h>
102
#include <linux/mii.h>
103
#include <linux/delay.h>
104
#include <linux/bitops.h>
105
 
106
#include <asm/io.h>
107
#include <asm/uaccess.h>
108
#include <asm/irq.h>
109
 
110
#include <linux/netdevice.h>
111
#include <linux/etherdevice.h>
112
#include <linux/rtnetlink.h>
113
#include <linux/skbuff.h>
114
#include <linux/ethtool.h>
115
 
116
static int use_io;
117
static int debug = -1;
118
#define DEBUG_DEFAULT           (NETIF_MSG_DRV          | \
119
                                 NETIF_MSG_HW           | \
120
                                 NETIF_MSG_RX_ERR       | \
121
                                 NETIF_MSG_TX_ERR)
122
#define DEBUG                   ((debug >= 0) ? (1<<debug)-1 : DEBUG_DEFAULT)
123
 
124
 
125
MODULE_AUTHOR("Maintainer: Andrey V. Savochkin <saw@saw.sw.com.sg>");
126
MODULE_DESCRIPTION("Intel i82557/i82558/i82559 PCI EtherExpressPro driver");
127
MODULE_LICENSE("GPL");
128
module_param(use_io, int, 0);
129
module_param(debug, int, 0);
130
module_param_array(options, int, NULL, 0);
131
module_param_array(full_duplex, int, NULL, 0);
132
module_param(congenb, int, 0);
133
module_param(txfifo, int, 0);
134
module_param(rxfifo, int, 0);
135
module_param(txdmacount, int, 0);
136
module_param(rxdmacount, int, 0);
137
module_param(rx_copybreak, int, 0);
138
module_param(max_interrupt_work, int, 0);
139
module_param(multicast_filter_limit, int, 0);
140
MODULE_PARM_DESC(debug, "debug level (0-6)");
141
MODULE_PARM_DESC(options, "Bits 0-3: transceiver type, bit 4: full duplex, bit 5: 100Mbps");
142
MODULE_PARM_DESC(full_duplex, "full duplex setting(s) (1)");
143
MODULE_PARM_DESC(congenb, "Enable congestion control (1)");
144
MODULE_PARM_DESC(txfifo, "Tx FIFO threshold in 4 byte units, (0-15)");
145
MODULE_PARM_DESC(rxfifo, "Rx FIFO threshold in 4 byte units, (0-15)");
146
MODULE_PARM_DESC(txdmacount, "Tx DMA burst length; 128 - disable (0-128)");
147
MODULE_PARM_DESC(rxdmacount, "Rx DMA burst length; 128 - disable (0-128)");
148
MODULE_PARM_DESC(rx_copybreak, "copy breakpoint for copy-only-tiny-frames");
149
MODULE_PARM_DESC(max_interrupt_work, "maximum events handled per interrupt");
150
MODULE_PARM_DESC(multicast_filter_limit, "maximum number of filtered multicast addresses");
151
 
152
#define RUN_AT(x) (jiffies + (x))
153
 
154
#define netdevice_start(dev)
155
#define netdevice_stop(dev)
156
#define netif_set_tx_timeout(dev, tf, tm) \
157
                                                                do { \
158
                                                                        (dev)->tx_timeout = (tf); \
159
                                                                        (dev)->watchdog_timeo = (tm); \
160
                                                                } while(0)
161
 
162
 
163
 
164
/*
165
                                Theory of Operation
166
 
167
I. Board Compatibility
168
 
169
This device driver is designed for the Intel i82557 "Speedo3" chip, Intel's
170
single-chip fast Ethernet controller for PCI, as used on the Intel
171
EtherExpress Pro 100 adapter.
172
 
173
II. Board-specific settings
174
 
175
PCI bus devices are configured by the system at boot time, so no jumpers
176
need to be set on the board.  The system BIOS should be set to assign the
177
PCI INTA signal to an otherwise unused system IRQ line.  While it's
178
possible to share PCI interrupt lines, it negatively impacts performance and
179
only recent kernels support it.
180
 
181
III. Driver operation
182
 
183
IIIA. General
184
The Speedo3 is very similar to other Intel network chips, that is to say
185
"apparently designed on a different planet".  This chips retains the complex
186
Rx and Tx descriptors and multiple buffers pointers as previous chips, but
187
also has simplified Tx and Rx buffer modes.  This driver uses the "flexible"
188
Tx mode, but in a simplified lower-overhead manner: it associates only a
189
single buffer descriptor with each frame descriptor.
190
 
191
Despite the extra space overhead in each receive skbuff, the driver must use
192
the simplified Rx buffer mode to assure that only a single data buffer is
193
associated with each RxFD. The driver implements this by reserving space
194
for the Rx descriptor at the head of each Rx skbuff.
195
 
196
The Speedo-3 has receive and command unit base addresses that are added to
197
almost all descriptor pointers.  The driver sets these to zero, so that all
198
pointer fields are absolute addresses.
199
 
200
The System Control Block (SCB) of some previous Intel chips exists on the
201
chip in both PCI I/O and memory space.  This driver uses the I/O space
202
registers, but might switch to memory mapped mode to better support non-x86
203
processors.
204
 
205
IIIB. Transmit structure
206
 
207
The driver must use the complex Tx command+descriptor mode in order to
208
have a indirect pointer to the skbuff data section.  Each Tx command block
209
(TxCB) is associated with two immediately appended Tx Buffer Descriptor
210
(TxBD).  A fixed ring of these TxCB+TxBD pairs are kept as part of the
211
speedo_private data structure for each adapter instance.
212
 
213
The newer i82558 explicitly supports this structure, and can read the two
214
TxBDs in the same PCI burst as the TxCB.
215
 
216
This ring structure is used for all normal transmit packets, but the
217
transmit packet descriptors aren't long enough for most non-Tx commands such
218
as CmdConfigure.  This is complicated by the possibility that the chip has
219
already loaded the link address in the previous descriptor.  So for these
220
commands we convert the next free descriptor on the ring to a NoOp, and point
221
that descriptor's link to the complex command.
222
 
223
An additional complexity of these non-transmit commands are that they may be
224
added asynchronous to the normal transmit queue, so we disable interrupts
225
whenever the Tx descriptor ring is manipulated.
226
 
227
A notable aspect of these special configure commands is that they do
228
work with the normal Tx ring entry scavenge method.  The Tx ring scavenge
229
is done at interrupt time using the 'dirty_tx' index, and checking for the
230
command-complete bit.  While the setup frames may have the NoOp command on the
231
Tx ring marked as complete, but not have completed the setup command, this
232
is not a problem.  The tx_ring entry can be still safely reused, as the
233
tx_skbuff[] entry is always empty for config_cmd and mc_setup frames.
234
 
235
Commands may have bits set e.g. CmdSuspend in the command word to either
236
suspend or stop the transmit/command unit.  This driver always flags the last
237
command with CmdSuspend, erases the CmdSuspend in the previous command, and
238
then issues a CU_RESUME.
239
Note: Watch out for the potential race condition here: imagine
240
        erasing the previous suspend
241
                the chip processes the previous command
242
                the chip processes the final command, and suspends
243
        doing the CU_RESUME
244
                the chip processes the next-yet-valid post-final-command.
245
So blindly sending a CU_RESUME is only safe if we do it immediately after
246
after erasing the previous CmdSuspend, without the possibility of an
247
intervening delay.  Thus the resume command is always within the
248
interrupts-disabled region.  This is a timing dependence, but handling this
249
condition in a timing-independent way would considerably complicate the code.
250
 
251
Note: In previous generation Intel chips, restarting the command unit was a
252
notoriously slow process.  This is presumably no longer true.
253
 
254
IIIC. Receive structure
255
 
256
Because of the bus-master support on the Speedo3 this driver uses the new
257
SKBUFF_RX_COPYBREAK scheme, rather than a fixed intermediate receive buffer.
258
This scheme allocates full-sized skbuffs as receive buffers.  The value
259
SKBUFF_RX_COPYBREAK is used as the copying breakpoint: it is chosen to
260
trade-off the memory wasted by passing the full-sized skbuff to the queue
261
layer for all frames vs. the copying cost of copying a frame to a
262
correctly-sized skbuff.
263
 
264
For small frames the copying cost is negligible (esp. considering that we
265
are pre-loading the cache with immediately useful header information), so we
266
allocate a new, minimally-sized skbuff.  For large frames the copying cost
267
is non-trivial, and the larger copy might flush the cache of useful data, so
268
we pass up the skbuff the packet was received into.
269
 
270
IV. Notes
271
 
272
Thanks to Steve Williams of Intel for arranging the non-disclosure agreement
273
that stated that I could disclose the information.  But I still resent
274
having to sign an Intel NDA when I'm helping Intel sell their own product!
275
 
276
*/
277
 
278
static int speedo_found1(struct pci_dev *pdev, void __iomem *ioaddr, int fnd_cnt, int acpi_idle_state);
279
 
280
/* Offsets to the various registers.
281
   All accesses need not be longword aligned. */
282
enum speedo_offsets {
283
        SCBStatus = 0, SCBCmd = 2,       /* Rx/Command Unit command and status. */
284
        SCBIntmask = 3,
285
        SCBPointer = 4,                         /* General purpose pointer. */
286
        SCBPort = 8,                            /* Misc. commands and operands.  */
287
        SCBflash = 12, SCBeeprom = 14, /* EEPROM and flash memory control. */
288
        SCBCtrlMDI = 16,                        /* MDI interface control. */
289
        SCBEarlyRx = 20,                        /* Early receive byte count. */
290
};
291
/* Commands that can be put in a command list entry. */
292
enum commands {
293
        CmdNOp = 0, CmdIASetup = 0x10000, CmdConfigure = 0x20000,
294
        CmdMulticastList = 0x30000, CmdTx = 0x40000, CmdTDR = 0x50000,
295
        CmdDump = 0x60000, CmdDiagnose = 0x70000,
296
        CmdSuspend = 0x40000000,        /* Suspend after completion. */
297
        CmdIntr = 0x20000000,           /* Interrupt after completion. */
298
        CmdTxFlex = 0x00080000,         /* Use "Flexible mode" for CmdTx command. */
299
};
300
/* Clear CmdSuspend (1<<30) avoiding interference with the card access to the
301
   status bits.  Previous driver versions used separate 16 bit fields for
302
   commands and statuses.  --SAW
303
 */
304
#if defined(__alpha__)
305
# define clear_suspend(cmd)  clear_bit(30, &(cmd)->cmd_status);
306
#else
307
# if defined(__LITTLE_ENDIAN)
308
#  define clear_suspend(cmd)  ((__u16 *)&(cmd)->cmd_status)[1] &= ~0x4000
309
# elif defined(__BIG_ENDIAN)
310
#  define clear_suspend(cmd)  ((__u16 *)&(cmd)->cmd_status)[1] &= ~0x0040
311
# else
312
#  error Unsupported byteorder
313
# endif
314
#endif
315
 
316
enum SCBCmdBits {
317
        SCBMaskCmdDone=0x8000, SCBMaskRxDone=0x4000, SCBMaskCmdIdle=0x2000,
318
        SCBMaskRxSuspend=0x1000, SCBMaskEarlyRx=0x0800, SCBMaskFlowCtl=0x0400,
319
        SCBTriggerIntr=0x0200, SCBMaskAll=0x0100,
320
        /* The rest are Rx and Tx commands. */
321
        CUStart=0x0010, CUResume=0x0020, CUStatsAddr=0x0040, CUShowStats=0x0050,
322
        CUCmdBase=0x0060,       /* CU Base address (set to zero) . */
323
        CUDumpStats=0x0070, /* Dump then reset stats counters. */
324
        RxStart=0x0001, RxResume=0x0002, RxAbort=0x0004, RxAddrLoad=0x0006,
325
        RxResumeNoResources=0x0007,
326
};
327
 
328
enum SCBPort_cmds {
329
        PortReset=0, PortSelfTest=1, PortPartialReset=2, PortDump=3,
330
};
331
 
332
/* The Speedo3 Rx and Tx frame/buffer descriptors. */
333
struct descriptor {                         /* A generic descriptor. */
334
        volatile s32 cmd_status;        /* All command and status fields. */
335
        u32 link;                                   /* struct descriptor *  */
336
        unsigned char params[0];
337
};
338
 
339
/* The Speedo3 Rx and Tx buffer descriptors. */
340
struct RxFD {                                   /* Receive frame descriptor. */
341
        volatile s32 status;
342
        u32 link;                                       /* struct RxFD * */
343
        u32 rx_buf_addr;                        /* void * */
344
        u32 count;
345
} RxFD_ALIGNMENT;
346
 
347
/* Selected elements of the Tx/RxFD.status word. */
348
enum RxFD_bits {
349
        RxComplete=0x8000, RxOK=0x2000,
350
        RxErrCRC=0x0800, RxErrAlign=0x0400, RxErrTooBig=0x0200, RxErrSymbol=0x0010,
351
        RxEth2Type=0x0020, RxNoMatch=0x0004, RxNoIAMatch=0x0002,
352
        TxUnderrun=0x1000,  StatusComplete=0x8000,
353
};
354
 
355
#define CONFIG_DATA_SIZE 22
356
struct TxFD {                                   /* Transmit frame descriptor set. */
357
        s32 status;
358
        u32 link;                                       /* void * */
359
        u32 tx_desc_addr;                       /* Always points to the tx_buf_addr element. */
360
        s32 count;                                      /* # of TBD (=1), Tx start thresh., etc. */
361
        /* This constitutes two "TBD" entries -- we only use one. */
362
#define TX_DESCR_BUF_OFFSET 16
363
        u32 tx_buf_addr0;                       /* void *, frame to be transmitted.  */
364
        s32 tx_buf_size0;                       /* Length of Tx frame. */
365
        u32 tx_buf_addr1;                       /* void *, frame to be transmitted.  */
366
        s32 tx_buf_size1;                       /* Length of Tx frame. */
367
        /* the structure must have space for at least CONFIG_DATA_SIZE starting
368
         * from tx_desc_addr field */
369
};
370
 
371
/* Multicast filter setting block.  --SAW */
372
struct speedo_mc_block {
373
        struct speedo_mc_block *next;
374
        unsigned int tx;
375
        dma_addr_t frame_dma;
376
        unsigned int len;
377
        struct descriptor frame __attribute__ ((__aligned__(16)));
378
};
379
 
380
/* Elements of the dump_statistics block. This block must be lword aligned. */
381
struct speedo_stats {
382
        u32 tx_good_frames;
383
        u32 tx_coll16_errs;
384
        u32 tx_late_colls;
385
        u32 tx_underruns;
386
        u32 tx_lost_carrier;
387
        u32 tx_deferred;
388
        u32 tx_one_colls;
389
        u32 tx_multi_colls;
390
        u32 tx_total_colls;
391
        u32 rx_good_frames;
392
        u32 rx_crc_errs;
393
        u32 rx_align_errs;
394
        u32 rx_resource_errs;
395
        u32 rx_overrun_errs;
396
        u32 rx_colls_errs;
397
        u32 rx_runt_errs;
398
        u32 done_marker;
399
};
400
 
401
enum Rx_ring_state_bits {
402
        RrNoMem=1, RrPostponed=2, RrNoResources=4, RrOOMReported=8,
403
};
404
 
405
/* Do not change the position (alignment) of the first few elements!
406
   The later elements are grouped for cache locality.
407
 
408
   Unfortunately, all the positions have been shifted since there.
409
   A new re-alignment is required.  2000/03/06  SAW */
410
struct speedo_private {
411
    void __iomem *regs;
412
        struct TxFD     *tx_ring;               /* Commands (usually CmdTxPacket). */
413
        struct RxFD *rx_ringp[RX_RING_SIZE];    /* Rx descriptor, used as ring. */
414
        /* The addresses of a Tx/Rx-in-place packets/buffers. */
415
        struct sk_buff *tx_skbuff[TX_RING_SIZE];
416
        struct sk_buff *rx_skbuff[RX_RING_SIZE];
417
        /* Mapped addresses of the rings. */
418
        dma_addr_t tx_ring_dma;
419
#define TX_RING_ELEM_DMA(sp, n) ((sp)->tx_ring_dma + (n)*sizeof(struct TxFD))
420
        dma_addr_t rx_ring_dma[RX_RING_SIZE];
421
        struct descriptor *last_cmd;            /* Last command sent. */
422
        unsigned int cur_tx, dirty_tx;          /* The ring entries to be free()ed. */
423
        spinlock_t lock;                        /* Group with Tx control cache line. */
424
        u32 tx_threshold;                       /* The value for txdesc.count. */
425
        struct RxFD *last_rxf;                  /* Last filled RX buffer. */
426
        dma_addr_t last_rxf_dma;
427
        unsigned int cur_rx, dirty_rx;          /* The next free ring entry */
428
        long last_rx_time;                      /* Last Rx, in jiffies, to handle Rx hang. */
429
        struct net_device_stats stats;
430
        struct speedo_stats *lstats;
431
        dma_addr_t lstats_dma;
432
        int chip_id;
433
        struct pci_dev *pdev;
434
        struct timer_list timer;                /* Media selection timer. */
435
        struct speedo_mc_block *mc_setup_head;  /* Multicast setup frame list head. */
436
        struct speedo_mc_block *mc_setup_tail;  /* Multicast setup frame list tail. */
437
        long in_interrupt;                      /* Word-aligned dev->interrupt */
438
        unsigned char acpi_pwr;
439
        signed char rx_mode;                    /* Current PROMISC/ALLMULTI setting. */
440
        unsigned int tx_full:1;                 /* The Tx queue is full. */
441
        unsigned int flow_ctrl:1;               /* Use 802.3x flow control. */
442
        unsigned int rx_bug:1;                  /* Work around receiver hang errata. */
443
        unsigned char default_port:8;           /* Last dev->if_port value. */
444
        unsigned char rx_ring_state;            /* RX ring status flags. */
445
        unsigned short phy[2];                  /* PHY media interfaces available. */
446
        unsigned short partner;                 /* Link partner caps. */
447
        struct mii_if_info mii_if;              /* MII API hooks, info */
448
        u32 msg_enable;                         /* debug message level */
449
};
450
 
451
/* The parameters for a CmdConfigure operation.
452
   There are so many options that it would be difficult to document each bit.
453
   We mostly use the default or recommended settings. */
454
static const char i82557_config_cmd[CONFIG_DATA_SIZE] = {
455
        22, 0x08, 0, 0,  0, 0, 0x32, 0x03,  1, /* 1=Use MII  0=Use AUI */
456
        0, 0x2E, 0,  0x60, 0,
457
        0xf2, 0x48,   0, 0x40, 0xf2, 0x80,               /* 0x40=Force full-duplex */
458
        0x3f, 0x05, };
459
static const char i82558_config_cmd[CONFIG_DATA_SIZE] = {
460
        22, 0x08, 0, 1,  0, 0, 0x22, 0x03,  1, /* 1=Use MII  0=Use AUI */
461
        0, 0x2E, 0,  0x60, 0x08, 0x88,
462
        0x68, 0, 0x40, 0xf2, 0x84,               /* Disable FC */
463
        0x31, 0x05, };
464
 
465
/* PHY media interface chips. */
466
static const char * const phys[] = {
467
        "None", "i82553-A/B", "i82553-C", "i82503",
468
        "DP83840", "80c240", "80c24", "i82555",
469
        "unknown-8", "unknown-9", "DP83840A", "unknown-11",
470
        "unknown-12", "unknown-13", "unknown-14", "unknown-15", };
471
enum phy_chips { NonSuchPhy=0, I82553AB, I82553C, I82503, DP83840, S80C240,
472
                                         S80C24, I82555, DP83840A=10, };
473
static const char is_mii[] = { 0, 1, 1, 0, 1, 1, 0, 1 };
474
#define EE_READ_CMD             (6)
475
 
476
static int eepro100_init_one(struct pci_dev *pdev,
477
                const struct pci_device_id *ent);
478
 
479
static int do_eeprom_cmd(void __iomem *ioaddr, int cmd, int cmd_len);
480
static int mdio_read(struct net_device *dev, int phy_id, int location);
481
static void mdio_write(struct net_device *dev, int phy_id, int location, int value);
482
static int speedo_open(struct net_device *dev);
483
static void speedo_resume(struct net_device *dev);
484
static void speedo_timer(unsigned long data);
485
static void speedo_init_rx_ring(struct net_device *dev);
486
static void speedo_tx_timeout(struct net_device *dev);
487
static int speedo_start_xmit(struct sk_buff *skb, struct net_device *dev);
488
static void speedo_refill_rx_buffers(struct net_device *dev, int force);
489
static int speedo_rx(struct net_device *dev);
490
static void speedo_tx_buffer_gc(struct net_device *dev);
491
static irqreturn_t speedo_interrupt(int irq, void *dev_instance);
492
static int speedo_close(struct net_device *dev);
493
static struct net_device_stats *speedo_get_stats(struct net_device *dev);
494
static int speedo_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
495
static void set_rx_mode(struct net_device *dev);
496
static void speedo_show_state(struct net_device *dev);
497
static const struct ethtool_ops ethtool_ops;
498
 
499
 
500
 
501
#ifdef honor_default_port
502
/* Optional driver feature to allow forcing the transceiver setting.
503
   Not recommended. */
504
static int mii_ctrl[8] = { 0x3300, 0x3100, 0x0000, 0x0100,
505
                                                   0x2000, 0x2100, 0x0400, 0x3100};
506
#endif
507
 
508
/* How to wait for the command unit to accept a command.
509
   Typically this takes 0 ticks. */
510
static inline unsigned char wait_for_cmd_done(struct net_device *dev,
511
                                                                                                struct speedo_private *sp)
512
{
513
        int wait = 1000;
514
        void __iomem *cmd_ioaddr = sp->regs + SCBCmd;
515
        unsigned char r;
516
 
517
        do  {
518
                udelay(1);
519
                r = ioread8(cmd_ioaddr);
520
        } while(r && --wait >= 0);
521
 
522
        if (wait < 0)
523
                printk(KERN_ALERT "%s: wait_for_cmd_done timeout!\n", dev->name);
524
        return r;
525
}
526
 
527
static int __devinit eepro100_init_one (struct pci_dev *pdev,
528
                const struct pci_device_id *ent)
529
{
530
        void __iomem *ioaddr;
531
        int irq, pci_bar;
532
        int acpi_idle_state = 0, pm;
533
        static int cards_found /* = 0 */;
534
        unsigned long pci_base;
535
 
536
#ifndef MODULE
537
        /* when built-in, we only print version if device is found */
538
        static int did_version;
539
        if (did_version++ == 0)
540
                printk(version);
541
#endif
542
 
543
        /* save power state before pci_enable_device overwrites it */
544
        pm = pci_find_capability(pdev, PCI_CAP_ID_PM);
545
        if (pm) {
546
                u16 pwr_command;
547
                pci_read_config_word(pdev, pm + PCI_PM_CTRL, &pwr_command);
548
                acpi_idle_state = pwr_command & PCI_PM_CTRL_STATE_MASK;
549
        }
550
 
551
        if (pci_enable_device(pdev))
552
                goto err_out_free_mmio_region;
553
 
554
        pci_set_master(pdev);
555
 
556
        if (!request_region(pci_resource_start(pdev, 1),
557
                        pci_resource_len(pdev, 1), "eepro100")) {
558
                dev_err(&pdev->dev, "eepro100: cannot reserve I/O ports\n");
559
                goto err_out_none;
560
        }
561
        if (!request_mem_region(pci_resource_start(pdev, 0),
562
                        pci_resource_len(pdev, 0), "eepro100")) {
563
                dev_err(&pdev->dev, "eepro100: cannot reserve MMIO region\n");
564
                goto err_out_free_pio_region;
565
        }
566
 
567
        irq = pdev->irq;
568
        pci_bar = use_io ? 1 : 0;
569
        pci_base = pci_resource_start(pdev, pci_bar);
570
        if (DEBUG & NETIF_MSG_PROBE)
571
                printk("Found Intel i82557 PCI Speedo at %#lx, IRQ %d.\n",
572
                       pci_base, irq);
573
 
574
        ioaddr = pci_iomap(pdev, pci_bar, 0);
575
        if (!ioaddr) {
576
                dev_err(&pdev->dev, "eepro100: cannot remap IO\n");
577
                goto err_out_free_mmio_region;
578
        }
579
 
580
        if (speedo_found1(pdev, ioaddr, cards_found, acpi_idle_state) == 0)
581
                cards_found++;
582
        else
583
                goto err_out_iounmap;
584
 
585
        return 0;
586
 
587
err_out_iounmap: ;
588
        pci_iounmap(pdev, ioaddr);
589
err_out_free_mmio_region:
590
        release_mem_region(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0));
591
err_out_free_pio_region:
592
        release_region(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1));
593
err_out_none:
594
        return -ENODEV;
595
}
596
 
597
#ifdef CONFIG_NET_POLL_CONTROLLER
598
/*
599
 * Polling 'interrupt' - used by things like netconsole to send skbs
600
 * without having to re-enable interrupts. It's not called while
601
 * the interrupt routine is executing.
602
 */
603
 
604
static void poll_speedo (struct net_device *dev)
605
{
606
        /* disable_irq is not very nice, but with the funny lockless design
607
           we have no other choice. */
608
        disable_irq(dev->irq);
609
        speedo_interrupt (dev->irq, dev);
610
        enable_irq(dev->irq);
611
}
612
#endif
613
 
614
static int __devinit speedo_found1(struct pci_dev *pdev,
615
                void __iomem *ioaddr, int card_idx, int acpi_idle_state)
616
{
617
        struct net_device *dev;
618
        struct speedo_private *sp;
619
        const char *product;
620
        int i, option;
621
        u16 eeprom[0x100];
622
        int size;
623
        void *tx_ring_space;
624
        dma_addr_t tx_ring_dma;
625
        DECLARE_MAC_BUF(mac);
626
 
627
        size = TX_RING_SIZE * sizeof(struct TxFD) + sizeof(struct speedo_stats);
628
        tx_ring_space = pci_alloc_consistent(pdev, size, &tx_ring_dma);
629
        if (tx_ring_space == NULL)
630
                return -1;
631
 
632
        dev = alloc_etherdev(sizeof(struct speedo_private));
633
        if (dev == NULL) {
634
                printk(KERN_ERR "eepro100: Could not allocate ethernet device.\n");
635
                pci_free_consistent(pdev, size, tx_ring_space, tx_ring_dma);
636
                return -1;
637
        }
638
 
639
        SET_NETDEV_DEV(dev, &pdev->dev);
640
 
641
        if (dev->mem_start > 0)
642
                option = dev->mem_start;
643
        else if (card_idx >= 0  &&  options[card_idx] >= 0)
644
                option = options[card_idx];
645
        else
646
                option = 0;
647
 
648
        rtnl_lock();
649
        if (dev_alloc_name(dev, dev->name) < 0)
650
                goto err_free_unlock;
651
 
652
        /* Read the station address EEPROM before doing the reset.
653
           Nominally his should even be done before accepting the device, but
654
           then we wouldn't have a device name with which to report the error.
655
           The size test is for 6 bit vs. 8 bit address serial EEPROMs.
656
        */
657
        {
658
                void __iomem *iobase;
659
                int read_cmd, ee_size;
660
                u16 sum;
661
                int j;
662
 
663
                /* Use IO only to avoid postponed writes and satisfy EEPROM timing
664
                   requirements. */
665
                iobase = pci_iomap(pdev, 1, pci_resource_len(pdev, 1));
666
                if (!iobase)
667
                        goto err_free_unlock;
668
                if ((do_eeprom_cmd(iobase, EE_READ_CMD << 24, 27) & 0xffe0000)
669
                        == 0xffe0000) {
670
                        ee_size = 0x100;
671
                        read_cmd = EE_READ_CMD << 24;
672
                } else {
673
                        ee_size = 0x40;
674
                        read_cmd = EE_READ_CMD << 22;
675
                }
676
 
677
                for (j = 0, i = 0, sum = 0; i < ee_size; i++) {
678
                        u16 value = do_eeprom_cmd(iobase, read_cmd | (i << 16), 27);
679
                        eeprom[i] = value;
680
                        sum += value;
681
                        if (i < 3) {
682
                                dev->dev_addr[j++] = value;
683
                                dev->dev_addr[j++] = value >> 8;
684
                        }
685
                }
686
                if (sum != 0xBABA)
687
                        printk(KERN_WARNING "%s: Invalid EEPROM checksum %#4.4x, "
688
                                   "check settings before activating this device!\n",
689
                                   dev->name, sum);
690
                /* Don't  unregister_netdev(dev);  as the EEPro may actually be
691
                   usable, especially if the MAC address is set later.
692
                   On the other hand, it may be unusable if MDI data is corrupted. */
693
 
694
                pci_iounmap(pdev, iobase);
695
        }
696
 
697
        /* Reset the chip: stop Tx and Rx processes and clear counters.
698
           This takes less than 10usec and will easily finish before the next
699
           action. */
700
        iowrite32(PortReset, ioaddr + SCBPort);
701
        ioread32(ioaddr + SCBPort);
702
        udelay(10);
703
 
704
        if (eeprom[3] & 0x0100)
705
                product = "OEM i82557/i82558 10/100 Ethernet";
706
        else
707
                product = pci_name(pdev);
708
 
709
        printk(KERN_INFO "%s: %s, %s, IRQ %d.\n", dev->name, product,
710
                   print_mac(mac, dev->dev_addr), pdev->irq);
711
 
712
        sp = netdev_priv(dev);
713
 
714
        /* we must initialize this early, for mdio_{read,write} */
715
        sp->regs = ioaddr;
716
 
717
#if 1 || defined(kernel_bloat)
718
        /* OK, this is pure kernel bloat.  I don't like it when other drivers
719
           waste non-pageable kernel space to emit similar messages, but I need
720
           them for bug reports. */
721
        {
722
                const char *connectors[] = {" RJ45", " BNC", " AUI", " MII"};
723
                /* The self-test results must be paragraph aligned. */
724
                volatile s32 *self_test_results;
725
                int boguscnt = 16000;   /* Timeout for set-test. */
726
                if ((eeprom[3] & 0x03) != 0x03)
727
                        printk(KERN_INFO "  Receiver lock-up bug exists -- enabling"
728
                                   " work-around.\n");
729
                printk(KERN_INFO "  Board assembly %4.4x%2.2x-%3.3d, Physical"
730
                           " connectors present:",
731
                           eeprom[8], eeprom[9]>>8, eeprom[9] & 0xff);
732
                for (i = 0; i < 4; i++)
733
                        if (eeprom[5] & (1<<i))
734
                                printk(connectors[i]);
735
                printk("\n"KERN_INFO"  Primary interface chip %s PHY #%d.\n",
736
                           phys[(eeprom[6]>>8)&15], eeprom[6] & 0x1f);
737
                if (eeprom[7] & 0x0700)
738
                        printk(KERN_INFO "    Secondary interface chip %s.\n",
739
                                   phys[(eeprom[7]>>8)&7]);
740
                if (((eeprom[6]>>8) & 0x3f) == DP83840
741
                        ||  ((eeprom[6]>>8) & 0x3f) == DP83840A) {
742
                        int mdi_reg23 = mdio_read(dev, eeprom[6] & 0x1f, 23) | 0x0422;
743
                        if (congenb)
744
                          mdi_reg23 |= 0x0100;
745
                        printk(KERN_INFO"  DP83840 specific setup, setting register 23 to %4.4x.\n",
746
                                   mdi_reg23);
747
                        mdio_write(dev, eeprom[6] & 0x1f, 23, mdi_reg23);
748
                }
749
                if ((option >= 0) && (option & 0x70)) {
750
                        printk(KERN_INFO "  Forcing %dMbs %s-duplex operation.\n",
751
                                   (option & 0x20 ? 100 : 10),
752
                                   (option & 0x10 ? "full" : "half"));
753
                        mdio_write(dev, eeprom[6] & 0x1f, MII_BMCR,
754
                                           ((option & 0x20) ? 0x2000 : 0) |      /* 100mbps? */
755
                                           ((option & 0x10) ? 0x0100 : 0)); /* Full duplex? */
756
                }
757
 
758
                /* Perform a system self-test. */
759
                self_test_results = (s32*) ((((long) tx_ring_space) + 15) & ~0xf);
760
                self_test_results[0] = 0;
761
                self_test_results[1] = -1;
762
                iowrite32(tx_ring_dma | PortSelfTest, ioaddr + SCBPort);
763
                do {
764
                        udelay(10);
765
                } while (self_test_results[1] == -1  &&  --boguscnt >= 0);
766
 
767
                if (boguscnt < 0) {              /* Test optimized out. */
768
                        printk(KERN_ERR "Self test failed, status %8.8x:\n"
769
                                   KERN_ERR " Failure to initialize the i82557.\n"
770
                                   KERN_ERR " Verify that the card is a bus-master"
771
                                   " capable slot.\n",
772
                                   self_test_results[1]);
773
                } else
774
                        printk(KERN_INFO "  General self-test: %s.\n"
775
                                   KERN_INFO "  Serial sub-system self-test: %s.\n"
776
                                   KERN_INFO "  Internal registers self-test: %s.\n"
777
                                   KERN_INFO "  ROM checksum self-test: %s (%#8.8x).\n",
778
                                   self_test_results[1] & 0x1000 ? "failed" : "passed",
779
                                   self_test_results[1] & 0x0020 ? "failed" : "passed",
780
                                   self_test_results[1] & 0x0008 ? "failed" : "passed",
781
                                   self_test_results[1] & 0x0004 ? "failed" : "passed",
782
                                   self_test_results[0]);
783
        }
784
#endif  /* kernel_bloat */
785
 
786
        iowrite32(PortReset, ioaddr + SCBPort);
787
        ioread32(ioaddr + SCBPort);
788
        udelay(10);
789
 
790
        /* Return the chip to its original power state. */
791
        pci_set_power_state(pdev, acpi_idle_state);
792
 
793
        pci_set_drvdata (pdev, dev);
794
        SET_NETDEV_DEV(dev, &pdev->dev);
795
 
796
        dev->irq = pdev->irq;
797
 
798
        sp->pdev = pdev;
799
        sp->msg_enable = DEBUG;
800
        sp->acpi_pwr = acpi_idle_state;
801
        sp->tx_ring = tx_ring_space;
802
        sp->tx_ring_dma = tx_ring_dma;
803
        sp->lstats = (struct speedo_stats *)(sp->tx_ring + TX_RING_SIZE);
804
        sp->lstats_dma = TX_RING_ELEM_DMA(sp, TX_RING_SIZE);
805
        init_timer(&sp->timer); /* used in ioctl() */
806
        spin_lock_init(&sp->lock);
807
 
808
        sp->mii_if.full_duplex = option >= 0 && (option & 0x10) ? 1 : 0;
809
        if (card_idx >= 0) {
810
                if (full_duplex[card_idx] >= 0)
811
                        sp->mii_if.full_duplex = full_duplex[card_idx];
812
        }
813
        sp->default_port = option >= 0 ? (option & 0x0f) : 0;
814
 
815
        sp->phy[0] = eeprom[6];
816
        sp->phy[1] = eeprom[7];
817
 
818
        sp->mii_if.phy_id = eeprom[6] & 0x1f;
819
        sp->mii_if.phy_id_mask = 0x1f;
820
        sp->mii_if.reg_num_mask = 0x1f;
821
        sp->mii_if.dev = dev;
822
        sp->mii_if.mdio_read = mdio_read;
823
        sp->mii_if.mdio_write = mdio_write;
824
 
825
        sp->rx_bug = (eeprom[3] & 0x03) == 3 ? 0 : 1;
826
        if (((pdev->device > 0x1030 && (pdev->device < 0x103F)))
827
            || (pdev->device == 0x2449) || (pdev->device == 0x2459)
828
            || (pdev->device == 0x245D)) {
829
                sp->chip_id = 1;
830
        }
831
 
832
        if (sp->rx_bug)
833
                printk(KERN_INFO "  Receiver lock-up workaround activated.\n");
834
 
835
        /* The Speedo-specific entries in the device structure. */
836
        dev->open = &speedo_open;
837
        dev->hard_start_xmit = &speedo_start_xmit;
838
        netif_set_tx_timeout(dev, &speedo_tx_timeout, TX_TIMEOUT);
839
        dev->stop = &speedo_close;
840
        dev->get_stats = &speedo_get_stats;
841
        dev->set_multicast_list = &set_rx_mode;
842
        dev->do_ioctl = &speedo_ioctl;
843
        SET_ETHTOOL_OPS(dev, &ethtool_ops);
844
#ifdef CONFIG_NET_POLL_CONTROLLER
845
        dev->poll_controller = &poll_speedo;
846
#endif
847
 
848
        if (register_netdevice(dev))
849
                goto err_free_unlock;
850
        rtnl_unlock();
851
 
852
        return 0;
853
 
854
 err_free_unlock:
855
        rtnl_unlock();
856
        free_netdev(dev);
857
        return -1;
858
}
859
 
860
static void do_slow_command(struct net_device *dev, struct speedo_private *sp, int cmd)
861
{
862
        void __iomem *cmd_ioaddr = sp->regs + SCBCmd;
863
        int wait = 0;
864
        do
865
                if (ioread8(cmd_ioaddr) == 0) break;
866
        while(++wait <= 200);
867
        if (wait > 100)
868
                printk(KERN_ERR "Command %4.4x never accepted (%d polls)!\n",
869
                       ioread8(cmd_ioaddr), wait);
870
 
871
        iowrite8(cmd, cmd_ioaddr);
872
 
873
        for (wait = 0; wait <= 100; wait++)
874
                if (ioread8(cmd_ioaddr) == 0) return;
875
        for (; wait <= 20000; wait++)
876
                if (ioread8(cmd_ioaddr) == 0) return;
877
                else udelay(1);
878
        printk(KERN_ERR "Command %4.4x was not accepted after %d polls!"
879
               "  Current status %8.8x.\n",
880
               cmd, wait, ioread32(sp->regs + SCBStatus));
881
}
882
 
883
/* Serial EEPROM section.
884
   A "bit" grungy, but we work our way through bit-by-bit :->. */
885
/*  EEPROM_Ctrl bits. */
886
#define EE_SHIFT_CLK    0x01    /* EEPROM shift clock. */
887
#define EE_CS                   0x02    /* EEPROM chip select. */
888
#define EE_DATA_WRITE   0x04    /* EEPROM chip data in. */
889
#define EE_DATA_READ    0x08    /* EEPROM chip data out. */
890
#define EE_ENB                  (0x4800 | EE_CS)
891
#define EE_WRITE_0              0x4802
892
#define EE_WRITE_1              0x4806
893
#define EE_OFFSET               SCBeeprom
894
 
895
/* The fixes for the code were kindly provided by Dragan Stancevic
896
   <visitor@valinux.com> to strictly follow Intel specifications of EEPROM
897
   access timing.
898
   The publicly available sheet 64486302 (sec. 3.1) specifies 1us access
899
   interval for serial EEPROM.  However, it looks like that there is an
900
   additional requirement dictating larger udelay's in the code below.
901
   2000/05/24  SAW */
902
static int __devinit do_eeprom_cmd(void __iomem *ioaddr, int cmd, int cmd_len)
903
{
904
        unsigned retval = 0;
905
        void __iomem *ee_addr = ioaddr + SCBeeprom;
906
 
907
        iowrite16(EE_ENB, ee_addr); udelay(2);
908
        iowrite16(EE_ENB | EE_SHIFT_CLK, ee_addr); udelay(2);
909
 
910
        /* Shift the command bits out. */
911
        do {
912
                short dataval = (cmd & (1 << cmd_len)) ? EE_WRITE_1 : EE_WRITE_0;
913
                iowrite16(dataval, ee_addr); udelay(2);
914
                iowrite16(dataval | EE_SHIFT_CLK, ee_addr); udelay(2);
915
                retval = (retval << 1) | ((ioread16(ee_addr) & EE_DATA_READ) ? 1 : 0);
916
        } while (--cmd_len >= 0);
917
        iowrite16(EE_ENB, ee_addr); udelay(2);
918
 
919
        /* Terminate the EEPROM access. */
920
        iowrite16(EE_ENB & ~EE_CS, ee_addr);
921
        return retval;
922
}
923
 
924
static int mdio_read(struct net_device *dev, int phy_id, int location)
925
{
926
        struct speedo_private *sp = netdev_priv(dev);
927
        void __iomem *ioaddr = sp->regs;
928
        int val, boguscnt = 64*10;              /* <64 usec. to complete, typ 27 ticks */
929
        iowrite32(0x08000000 | (location<<16) | (phy_id<<21), ioaddr + SCBCtrlMDI);
930
        do {
931
                val = ioread32(ioaddr + SCBCtrlMDI);
932
                if (--boguscnt < 0) {
933
                        printk(KERN_ERR " mdio_read() timed out with val = %8.8x.\n", val);
934
                        break;
935
                }
936
        } while (! (val & 0x10000000));
937
        return val & 0xffff;
938
}
939
 
940
static void mdio_write(struct net_device *dev, int phy_id, int location, int value)
941
{
942
        struct speedo_private *sp = netdev_priv(dev);
943
        void __iomem *ioaddr = sp->regs;
944
        int val, boguscnt = 64*10;              /* <64 usec. to complete, typ 27 ticks */
945
        iowrite32(0x04000000 | (location<<16) | (phy_id<<21) | value,
946
                 ioaddr + SCBCtrlMDI);
947
        do {
948
                val = ioread32(ioaddr + SCBCtrlMDI);
949
                if (--boguscnt < 0) {
950
                        printk(KERN_ERR" mdio_write() timed out with val = %8.8x.\n", val);
951
                        break;
952
                }
953
        } while (! (val & 0x10000000));
954
}
955
 
956
static int
957
speedo_open(struct net_device *dev)
958
{
959
        struct speedo_private *sp = netdev_priv(dev);
960
        void __iomem *ioaddr = sp->regs;
961
        int retval;
962
 
963
        if (netif_msg_ifup(sp))
964
                printk(KERN_DEBUG "%s: speedo_open() irq %d.\n", dev->name, dev->irq);
965
 
966
        pci_set_power_state(sp->pdev, PCI_D0);
967
 
968
        /* Set up the Tx queue early.. */
969
        sp->cur_tx = 0;
970
        sp->dirty_tx = 0;
971
        sp->last_cmd = NULL;
972
        sp->tx_full = 0;
973
        sp->in_interrupt = 0;
974
 
975
        /* .. we can safely take handler calls during init. */
976
        retval = request_irq(dev->irq, &speedo_interrupt, IRQF_SHARED, dev->name, dev);
977
        if (retval) {
978
                return retval;
979
        }
980
 
981
        dev->if_port = sp->default_port;
982
 
983
#ifdef oh_no_you_dont_unless_you_honour_the_options_passed_in_to_us
984
        /* Retrigger negotiation to reset previous errors. */
985
        if ((sp->phy[0] & 0x8000) == 0) {
986
                int phy_addr = sp->phy[0] & 0x1f ;
987
                /* Use 0x3300 for restarting NWay, other values to force xcvr:
988
                   0x0000 10-HD
989
                   0x0100 10-FD
990
                   0x2000 100-HD
991
                   0x2100 100-FD
992
                */
993
#ifdef honor_default_port
994
                mdio_write(dev, phy_addr, MII_BMCR, mii_ctrl[dev->default_port & 7]);
995
#else
996
                mdio_write(dev, phy_addr, MII_BMCR, 0x3300);
997
#endif
998
        }
999
#endif
1000
 
1001
        speedo_init_rx_ring(dev);
1002
 
1003
        /* Fire up the hardware. */
1004
        iowrite16(SCBMaskAll, ioaddr + SCBCmd);
1005
        speedo_resume(dev);
1006
 
1007
        netdevice_start(dev);
1008
        netif_start_queue(dev);
1009
 
1010
        /* Setup the chip and configure the multicast list. */
1011
        sp->mc_setup_head = NULL;
1012
        sp->mc_setup_tail = NULL;
1013
        sp->flow_ctrl = sp->partner = 0;
1014
        sp->rx_mode = -1;                       /* Invalid -> always reset the mode. */
1015
        set_rx_mode(dev);
1016
        if ((sp->phy[0] & 0x8000) == 0)
1017
                sp->mii_if.advertising = mdio_read(dev, sp->phy[0] & 0x1f, MII_ADVERTISE);
1018
 
1019
        mii_check_link(&sp->mii_if);
1020
 
1021
        if (netif_msg_ifup(sp)) {
1022
                printk(KERN_DEBUG "%s: Done speedo_open(), status %8.8x.\n",
1023
                           dev->name, ioread16(ioaddr + SCBStatus));
1024
        }
1025
 
1026
        /* Set the timer.  The timer serves a dual purpose:
1027
           1) to monitor the media interface (e.g. link beat) and perhaps switch
1028
           to an alternate media type
1029
           2) to monitor Rx activity, and restart the Rx process if the receiver
1030
           hangs. */
1031
        sp->timer.expires = RUN_AT((24*HZ)/10);                         /* 2.4 sec. */
1032
        sp->timer.data = (unsigned long)dev;
1033
        sp->timer.function = &speedo_timer;                                     /* timer handler */
1034
        add_timer(&sp->timer);
1035
 
1036
        /* No need to wait for the command unit to accept here. */
1037
        if ((sp->phy[0] & 0x8000) == 0)
1038
                mdio_read(dev, sp->phy[0] & 0x1f, MII_BMCR);
1039
 
1040
        return 0;
1041
}
1042
 
1043
/* Start the chip hardware after a full reset. */
1044
static void speedo_resume(struct net_device *dev)
1045
{
1046
        struct speedo_private *sp = netdev_priv(dev);
1047
        void __iomem *ioaddr = sp->regs;
1048
 
1049
        /* Start with a Tx threshold of 256 (0x..20.... 8 byte units). */
1050
        sp->tx_threshold = 0x01208000;
1051
 
1052
        /* Set the segment registers to '0'. */
1053
        if (wait_for_cmd_done(dev, sp) != 0) {
1054
                iowrite32(PortPartialReset, ioaddr + SCBPort);
1055
                udelay(10);
1056
        }
1057
 
1058
        iowrite32(0, ioaddr + SCBPointer);
1059
        ioread32(ioaddr + SCBPointer);                  /* Flush to PCI. */
1060
        udelay(10);                     /* Bogus, but it avoids the bug. */
1061
 
1062
        /* Note: these next two operations can take a while. */
1063
        do_slow_command(dev, sp, RxAddrLoad);
1064
        do_slow_command(dev, sp, CUCmdBase);
1065
 
1066
        /* Load the statistics block and rx ring addresses. */
1067
        iowrite32(sp->lstats_dma, ioaddr + SCBPointer);
1068
        ioread32(ioaddr + SCBPointer);                  /* Flush to PCI */
1069
 
1070
        iowrite8(CUStatsAddr, ioaddr + SCBCmd);
1071
        sp->lstats->done_marker = 0;
1072
        wait_for_cmd_done(dev, sp);
1073
 
1074
        if (sp->rx_ringp[sp->cur_rx % RX_RING_SIZE] == NULL) {
1075
                if (netif_msg_rx_err(sp))
1076
                        printk(KERN_DEBUG "%s: NULL cur_rx in speedo_resume().\n",
1077
                                        dev->name);
1078
        } else {
1079
                iowrite32(sp->rx_ring_dma[sp->cur_rx % RX_RING_SIZE],
1080
                         ioaddr + SCBPointer);
1081
                ioread32(ioaddr + SCBPointer);          /* Flush to PCI */
1082
        }
1083
 
1084
        /* Note: RxStart should complete instantly. */
1085
        do_slow_command(dev, sp, RxStart);
1086
        do_slow_command(dev, sp, CUDumpStats);
1087
 
1088
        /* Fill the first command with our physical address. */
1089
        {
1090
                struct descriptor *ias_cmd;
1091
 
1092
                ias_cmd =
1093
                        (struct descriptor *)&sp->tx_ring[sp->cur_tx++ % TX_RING_SIZE];
1094
                /* Avoid a bug(?!) here by marking the command already completed. */
1095
                ias_cmd->cmd_status = cpu_to_le32((CmdSuspend | CmdIASetup) | 0xa000);
1096
                ias_cmd->link =
1097
                        cpu_to_le32(TX_RING_ELEM_DMA(sp, sp->cur_tx % TX_RING_SIZE));
1098
                memcpy(ias_cmd->params, dev->dev_addr, 6);
1099
                if (sp->last_cmd)
1100
                        clear_suspend(sp->last_cmd);
1101
                sp->last_cmd = ias_cmd;
1102
        }
1103
 
1104
        /* Start the chip's Tx process and unmask interrupts. */
1105
        iowrite32(TX_RING_ELEM_DMA(sp, sp->dirty_tx % TX_RING_SIZE),
1106
                 ioaddr + SCBPointer);
1107
        /* We are not ACK-ing FCP and ER in the interrupt handler yet so they should
1108
           remain masked --Dragan */
1109
        iowrite16(CUStart | SCBMaskEarlyRx | SCBMaskFlowCtl, ioaddr + SCBCmd);
1110
}
1111
 
1112
/*
1113
 * Sometimes the receiver stops making progress.  This routine knows how to
1114
 * get it going again, without losing packets or being otherwise nasty like
1115
 * a chip reset would be.  Previously the driver had a whole sequence
1116
 * of if RxSuspended, if it's no buffers do one thing, if it's no resources,
1117
 * do another, etc.  But those things don't really matter.  Separate logic
1118
 * in the ISR provides for allocating buffers--the other half of operation
1119
 * is just making sure the receiver is active.  speedo_rx_soft_reset does that.
1120
 * This problem with the old, more involved algorithm is shown up under
1121
 * ping floods on the order of 60K packets/second on a 100Mbps fdx network.
1122
 */
1123
static void
1124
speedo_rx_soft_reset(struct net_device *dev)
1125
{
1126
        struct speedo_private *sp = netdev_priv(dev);
1127
        struct RxFD *rfd;
1128
        void __iomem *ioaddr;
1129
 
1130
        ioaddr = sp->regs;
1131
        if (wait_for_cmd_done(dev, sp) != 0) {
1132
                printk("%s: previous command stalled\n", dev->name);
1133
                return;
1134
        }
1135
        /*
1136
        * Put the hardware into a known state.
1137
        */
1138
        iowrite8(RxAbort, ioaddr + SCBCmd);
1139
 
1140
        rfd = sp->rx_ringp[sp->cur_rx % RX_RING_SIZE];
1141
 
1142
        rfd->rx_buf_addr = 0xffffffff;
1143
 
1144
        if (wait_for_cmd_done(dev, sp) != 0) {
1145
                printk("%s: RxAbort command stalled\n", dev->name);
1146
                return;
1147
        }
1148
        iowrite32(sp->rx_ring_dma[sp->cur_rx % RX_RING_SIZE],
1149
                ioaddr + SCBPointer);
1150
        iowrite8(RxStart, ioaddr + SCBCmd);
1151
}
1152
 
1153
 
1154
/* Media monitoring and control. */
1155
static void speedo_timer(unsigned long data)
1156
{
1157
        struct net_device *dev = (struct net_device *)data;
1158
        struct speedo_private *sp = netdev_priv(dev);
1159
        void __iomem *ioaddr = sp->regs;
1160
        int phy_num = sp->phy[0] & 0x1f;
1161
 
1162
        /* We have MII and lost link beat. */
1163
        if ((sp->phy[0] & 0x8000) == 0) {
1164
                int partner = mdio_read(dev, phy_num, MII_LPA);
1165
                if (partner != sp->partner) {
1166
                        int flow_ctrl = sp->mii_if.advertising & partner & 0x0400 ? 1 : 0;
1167
                        if (netif_msg_link(sp)) {
1168
                                printk(KERN_DEBUG "%s: Link status change.\n", dev->name);
1169
                                printk(KERN_DEBUG "%s: Old partner %x, new %x, adv %x.\n",
1170
                                           dev->name, sp->partner, partner, sp->mii_if.advertising);
1171
                        }
1172
                        sp->partner = partner;
1173
                        if (flow_ctrl != sp->flow_ctrl) {
1174
                                sp->flow_ctrl = flow_ctrl;
1175
                                sp->rx_mode = -1;       /* Trigger a reload. */
1176
                        }
1177
                }
1178
        }
1179
        mii_check_link(&sp->mii_if);
1180
        if (netif_msg_timer(sp)) {
1181
                printk(KERN_DEBUG "%s: Media control tick, status %4.4x.\n",
1182
                           dev->name, ioread16(ioaddr + SCBStatus));
1183
        }
1184
        if (sp->rx_mode < 0  ||
1185
                (sp->rx_bug  && jiffies - sp->last_rx_time > 2*HZ)) {
1186
                /* We haven't received a packet in a Long Time.  We might have been
1187
                   bitten by the receiver hang bug.  This can be cleared by sending
1188
                   a set multicast list command. */
1189
                if (netif_msg_timer(sp))
1190
                        printk(KERN_DEBUG "%s: Sending a multicast list set command"
1191
                                   " from a timer routine,"
1192
                                   " m=%d, j=%ld, l=%ld.\n",
1193
                                   dev->name, sp->rx_mode, jiffies, sp->last_rx_time);
1194
                set_rx_mode(dev);
1195
        }
1196
        /* We must continue to monitor the media. */
1197
        sp->timer.expires = RUN_AT(2*HZ);                       /* 2.0 sec. */
1198
        add_timer(&sp->timer);
1199
}
1200
 
1201
static void speedo_show_state(struct net_device *dev)
1202
{
1203
        struct speedo_private *sp = netdev_priv(dev);
1204
        int i;
1205
 
1206
        if (netif_msg_pktdata(sp)) {
1207
                printk(KERN_DEBUG "%s: Tx ring dump,  Tx queue %u / %u:\n",
1208
                    dev->name, sp->cur_tx, sp->dirty_tx);
1209
                for (i = 0; i < TX_RING_SIZE; i++)
1210
                        printk(KERN_DEBUG "%s:  %c%c%2d %8.8x.\n", dev->name,
1211
                            i == sp->dirty_tx % TX_RING_SIZE ? '*' : ' ',
1212
                            i == sp->cur_tx % TX_RING_SIZE ? '=' : ' ',
1213
                            i, sp->tx_ring[i].status);
1214
 
1215
                printk(KERN_DEBUG "%s: Printing Rx ring"
1216
                    " (next to receive into %u, dirty index %u).\n",
1217
                    dev->name, sp->cur_rx, sp->dirty_rx);
1218
                for (i = 0; i < RX_RING_SIZE; i++)
1219
                        printk(KERN_DEBUG "%s: %c%c%c%2d %8.8x.\n", dev->name,
1220
                            sp->rx_ringp[i] == sp->last_rxf ? 'l' : ' ',
1221
                            i == sp->dirty_rx % RX_RING_SIZE ? '*' : ' ',
1222
                            i == sp->cur_rx % RX_RING_SIZE ? '=' : ' ',
1223
                            i, (sp->rx_ringp[i] != NULL) ?
1224
                            (unsigned)sp->rx_ringp[i]->status : 0);
1225
        }
1226
 
1227
#if 0
1228
        {
1229
                void __iomem *ioaddr = sp->regs;
1230
                int phy_num = sp->phy[0] & 0x1f;
1231
                for (i = 0; i < 16; i++) {
1232
                        /* FIXME: what does it mean?  --SAW */
1233
                        if (i == 6) i = 21;
1234
                        printk(KERN_DEBUG "%s:  PHY index %d register %d is %4.4x.\n",
1235
                                   dev->name, phy_num, i, mdio_read(dev, phy_num, i));
1236
                }
1237
        }
1238
#endif
1239
 
1240
}
1241
 
1242
/* Initialize the Rx and Tx rings, along with various 'dev' bits. */
1243
static void
1244
speedo_init_rx_ring(struct net_device *dev)
1245
{
1246
        struct speedo_private *sp = netdev_priv(dev);
1247
        struct RxFD *rxf, *last_rxf = NULL;
1248
        dma_addr_t last_rxf_dma = 0 /* to shut up the compiler */;
1249
        int i;
1250
 
1251
        sp->cur_rx = 0;
1252
 
1253
        for (i = 0; i < RX_RING_SIZE; i++) {
1254
                struct sk_buff *skb;
1255
                skb = dev_alloc_skb(PKT_BUF_SZ + sizeof(struct RxFD));
1256
                if (skb)
1257
                        rx_align(skb);        /* Align IP on 16 byte boundary */
1258
                sp->rx_skbuff[i] = skb;
1259
                if (skb == NULL)
1260
                        break;                  /* OK.  Just initially short of Rx bufs. */
1261
                skb->dev = dev;                 /* Mark as being used by this device. */
1262
                rxf = (struct RxFD *)skb->data;
1263
                sp->rx_ringp[i] = rxf;
1264
                sp->rx_ring_dma[i] =
1265
                        pci_map_single(sp->pdev, rxf,
1266
                                        PKT_BUF_SZ + sizeof(struct RxFD), PCI_DMA_BIDIRECTIONAL);
1267
                skb_reserve(skb, sizeof(struct RxFD));
1268
                if (last_rxf) {
1269
                        last_rxf->link = cpu_to_le32(sp->rx_ring_dma[i]);
1270
                        pci_dma_sync_single_for_device(sp->pdev, last_rxf_dma,
1271
                                                                                   sizeof(struct RxFD), PCI_DMA_TODEVICE);
1272
                }
1273
                last_rxf = rxf;
1274
                last_rxf_dma = sp->rx_ring_dma[i];
1275
                rxf->status = cpu_to_le32(0x00000001);  /* '1' is flag value only. */
1276
                rxf->link = 0;                                           /* None yet. */
1277
                /* This field unused by i82557. */
1278
                rxf->rx_buf_addr = 0xffffffff;
1279
                rxf->count = cpu_to_le32(PKT_BUF_SZ << 16);
1280
                pci_dma_sync_single_for_device(sp->pdev, sp->rx_ring_dma[i],
1281
                                                                           sizeof(struct RxFD), PCI_DMA_TODEVICE);
1282
        }
1283
        sp->dirty_rx = (unsigned int)(i - RX_RING_SIZE);
1284
        /* Mark the last entry as end-of-list. */
1285
        last_rxf->status = cpu_to_le32(0xC0000002);     /* '2' is flag value only. */
1286
        pci_dma_sync_single_for_device(sp->pdev, sp->rx_ring_dma[RX_RING_SIZE-1],
1287
                                                                   sizeof(struct RxFD), PCI_DMA_TODEVICE);
1288
        sp->last_rxf = last_rxf;
1289
        sp->last_rxf_dma = last_rxf_dma;
1290
}
1291
 
1292
static void speedo_purge_tx(struct net_device *dev)
1293
{
1294
        struct speedo_private *sp = netdev_priv(dev);
1295
        int entry;
1296
 
1297
        while ((int)(sp->cur_tx - sp->dirty_tx) > 0) {
1298
                entry = sp->dirty_tx % TX_RING_SIZE;
1299
                if (sp->tx_skbuff[entry]) {
1300
                        sp->stats.tx_errors++;
1301
                        pci_unmap_single(sp->pdev,
1302
                                        le32_to_cpu(sp->tx_ring[entry].tx_buf_addr0),
1303
                                        sp->tx_skbuff[entry]->len, PCI_DMA_TODEVICE);
1304
                        dev_kfree_skb_irq(sp->tx_skbuff[entry]);
1305
                        sp->tx_skbuff[entry] = NULL;
1306
                }
1307
                sp->dirty_tx++;
1308
        }
1309
        while (sp->mc_setup_head != NULL) {
1310
                struct speedo_mc_block *t;
1311
                if (netif_msg_tx_err(sp))
1312
                        printk(KERN_DEBUG "%s: freeing mc frame.\n", dev->name);
1313
                pci_unmap_single(sp->pdev, sp->mc_setup_head->frame_dma,
1314
                                sp->mc_setup_head->len, PCI_DMA_TODEVICE);
1315
                t = sp->mc_setup_head->next;
1316
                kfree(sp->mc_setup_head);
1317
                sp->mc_setup_head = t;
1318
        }
1319
        sp->mc_setup_tail = NULL;
1320
        sp->tx_full = 0;
1321
        netif_wake_queue(dev);
1322
}
1323
 
1324
static void reset_mii(struct net_device *dev)
1325
{
1326
        struct speedo_private *sp = netdev_priv(dev);
1327
 
1328
        /* Reset the MII transceiver, suggested by Fred Young @ scalable.com. */
1329
        if ((sp->phy[0] & 0x8000) == 0) {
1330
                int phy_addr = sp->phy[0] & 0x1f;
1331
                int advertising = mdio_read(dev, phy_addr, MII_ADVERTISE);
1332
                int mii_bmcr = mdio_read(dev, phy_addr, MII_BMCR);
1333
                mdio_write(dev, phy_addr, MII_BMCR, 0x0400);
1334
                mdio_write(dev, phy_addr, MII_BMSR, 0x0000);
1335
                mdio_write(dev, phy_addr, MII_ADVERTISE, 0x0000);
1336
                mdio_write(dev, phy_addr, MII_BMCR, 0x8000);
1337
#ifdef honor_default_port
1338
                mdio_write(dev, phy_addr, MII_BMCR, mii_ctrl[dev->default_port & 7]);
1339
#else
1340
                mdio_read(dev, phy_addr, MII_BMCR);
1341
                mdio_write(dev, phy_addr, MII_BMCR, mii_bmcr);
1342
                mdio_write(dev, phy_addr, MII_ADVERTISE, advertising);
1343
#endif
1344
        }
1345
}
1346
 
1347
static void speedo_tx_timeout(struct net_device *dev)
1348
{
1349
        struct speedo_private *sp = netdev_priv(dev);
1350
        void __iomem *ioaddr = sp->regs;
1351
        int status = ioread16(ioaddr + SCBStatus);
1352
        unsigned long flags;
1353
 
1354
        if (netif_msg_tx_err(sp)) {
1355
                printk(KERN_WARNING "%s: Transmit timed out: status %4.4x "
1356
                   " %4.4x at %d/%d command %8.8x.\n",
1357
                   dev->name, status, ioread16(ioaddr + SCBCmd),
1358
                   sp->dirty_tx, sp->cur_tx,
1359
                   sp->tx_ring[sp->dirty_tx % TX_RING_SIZE].status);
1360
 
1361
        }
1362
        speedo_show_state(dev);
1363
#if 0
1364
        if ((status & 0x00C0) != 0x0080
1365
                &&  (status & 0x003C) == 0x0010) {
1366
                /* Only the command unit has stopped. */
1367
                printk(KERN_WARNING "%s: Trying to restart the transmitter...\n",
1368
                           dev->name);
1369
                iowrite32(TX_RING_ELEM_DMA(sp, dirty_tx % TX_RING_SIZE]),
1370
                         ioaddr + SCBPointer);
1371
                iowrite16(CUStart, ioaddr + SCBCmd);
1372
                reset_mii(dev);
1373
        } else {
1374
#else
1375
        {
1376
#endif
1377
                del_timer_sync(&sp->timer);
1378
                /* Reset the Tx and Rx units. */
1379
                iowrite32(PortReset, ioaddr + SCBPort);
1380
                /* We may get spurious interrupts here.  But I don't think that they
1381
                   may do much harm.  1999/12/09 SAW */
1382
                udelay(10);
1383
                /* Disable interrupts. */
1384
                iowrite16(SCBMaskAll, ioaddr + SCBCmd);
1385
                synchronize_irq(dev->irq);
1386
                speedo_tx_buffer_gc(dev);
1387
                /* Free as much as possible.
1388
                   It helps to recover from a hang because of out-of-memory.
1389
                   It also simplifies speedo_resume() in case TX ring is full or
1390
                   close-to-be full. */
1391
                speedo_purge_tx(dev);
1392
                speedo_refill_rx_buffers(dev, 1);
1393
                spin_lock_irqsave(&sp->lock, flags);
1394
                speedo_resume(dev);
1395
                sp->rx_mode = -1;
1396
                dev->trans_start = jiffies;
1397
                spin_unlock_irqrestore(&sp->lock, flags);
1398
                set_rx_mode(dev); /* it takes the spinlock itself --SAW */
1399
                /* Reset MII transceiver.  Do it before starting the timer to serialize
1400
                   mdio_xxx operations.  Yes, it's a paranoya :-)  2000/05/09 SAW */
1401
                reset_mii(dev);
1402
                sp->timer.expires = RUN_AT(2*HZ);
1403
                add_timer(&sp->timer);
1404
        }
1405
        return;
1406
}
1407
 
1408
static int
1409
speedo_start_xmit(struct sk_buff *skb, struct net_device *dev)
1410
{
1411
        struct speedo_private *sp = netdev_priv(dev);
1412
        void __iomem *ioaddr = sp->regs;
1413
        int entry;
1414
 
1415
        /* Prevent interrupts from changing the Tx ring from underneath us. */
1416
        unsigned long flags;
1417
 
1418
        spin_lock_irqsave(&sp->lock, flags);
1419
 
1420
        /* Check if there are enough space. */
1421
        if ((int)(sp->cur_tx - sp->dirty_tx) >= TX_QUEUE_LIMIT) {
1422
                printk(KERN_ERR "%s: incorrect tbusy state, fixed.\n", dev->name);
1423
                netif_stop_queue(dev);
1424
                sp->tx_full = 1;
1425
                spin_unlock_irqrestore(&sp->lock, flags);
1426
                return 1;
1427
        }
1428
 
1429
        /* Calculate the Tx descriptor entry. */
1430
        entry = sp->cur_tx++ % TX_RING_SIZE;
1431
 
1432
        sp->tx_skbuff[entry] = skb;
1433
        sp->tx_ring[entry].status =
1434
                cpu_to_le32(CmdSuspend | CmdTx | CmdTxFlex);
1435
        if (!(entry & ((TX_RING_SIZE>>2)-1)))
1436
                sp->tx_ring[entry].status |= cpu_to_le32(CmdIntr);
1437
        sp->tx_ring[entry].link =
1438
                cpu_to_le32(TX_RING_ELEM_DMA(sp, sp->cur_tx % TX_RING_SIZE));
1439
        sp->tx_ring[entry].tx_desc_addr =
1440
                cpu_to_le32(TX_RING_ELEM_DMA(sp, entry) + TX_DESCR_BUF_OFFSET);
1441
        /* The data region is always in one buffer descriptor. */
1442
        sp->tx_ring[entry].count = cpu_to_le32(sp->tx_threshold);
1443
        sp->tx_ring[entry].tx_buf_addr0 =
1444
                cpu_to_le32(pci_map_single(sp->pdev, skb->data,
1445
                                           skb->len, PCI_DMA_TODEVICE));
1446
        sp->tx_ring[entry].tx_buf_size0 = cpu_to_le32(skb->len);
1447
 
1448
        /* workaround for hardware bug on 10 mbit half duplex */
1449
 
1450
        if ((sp->partner == 0) && (sp->chip_id == 1)) {
1451
                wait_for_cmd_done(dev, sp);
1452
                iowrite8(0 , ioaddr + SCBCmd);
1453
                udelay(1);
1454
        }
1455
 
1456
        /* Trigger the command unit resume. */
1457
        wait_for_cmd_done(dev, sp);
1458
        clear_suspend(sp->last_cmd);
1459
        /* We want the time window between clearing suspend flag on the previous
1460
           command and resuming CU to be as small as possible.
1461
           Interrupts in between are very undesired.  --SAW */
1462
        iowrite8(CUResume, ioaddr + SCBCmd);
1463
        sp->last_cmd = (struct descriptor *)&sp->tx_ring[entry];
1464
 
1465
        /* Leave room for set_rx_mode(). If there is no more space than reserved
1466
           for multicast filter mark the ring as full. */
1467
        if ((int)(sp->cur_tx - sp->dirty_tx) >= TX_QUEUE_LIMIT) {
1468
                netif_stop_queue(dev);
1469
                sp->tx_full = 1;
1470
        }
1471
 
1472
        spin_unlock_irqrestore(&sp->lock, flags);
1473
 
1474
        dev->trans_start = jiffies;
1475
 
1476
        return 0;
1477
}
1478
 
1479
static void speedo_tx_buffer_gc(struct net_device *dev)
1480
{
1481
        unsigned int dirty_tx;
1482
        struct speedo_private *sp = netdev_priv(dev);
1483
 
1484
        dirty_tx = sp->dirty_tx;
1485
        while ((int)(sp->cur_tx - dirty_tx) > 0) {
1486
                int entry = dirty_tx % TX_RING_SIZE;
1487
                int status = le32_to_cpu(sp->tx_ring[entry].status);
1488
 
1489
                if (netif_msg_tx_done(sp))
1490
                        printk(KERN_DEBUG " scavenge candidate %d status %4.4x.\n",
1491
                                   entry, status);
1492
                if ((status & StatusComplete) == 0)
1493
                        break;                  /* It still hasn't been processed. */
1494
                if (status & TxUnderrun)
1495
                        if (sp->tx_threshold < 0x01e08000) {
1496
                                if (netif_msg_tx_err(sp))
1497
                                        printk(KERN_DEBUG "%s: TX underrun, threshold adjusted.\n",
1498
                                                   dev->name);
1499
                                sp->tx_threshold += 0x00040000;
1500
                        }
1501
                /* Free the original skb. */
1502
                if (sp->tx_skbuff[entry]) {
1503
                        sp->stats.tx_packets++; /* Count only user packets. */
1504
                        sp->stats.tx_bytes += sp->tx_skbuff[entry]->len;
1505
                        pci_unmap_single(sp->pdev,
1506
                                        le32_to_cpu(sp->tx_ring[entry].tx_buf_addr0),
1507
                                        sp->tx_skbuff[entry]->len, PCI_DMA_TODEVICE);
1508
                        dev_kfree_skb_irq(sp->tx_skbuff[entry]);
1509
                        sp->tx_skbuff[entry] = NULL;
1510
                }
1511
                dirty_tx++;
1512
        }
1513
 
1514
        if (netif_msg_tx_err(sp) && (int)(sp->cur_tx - dirty_tx) > TX_RING_SIZE) {
1515
                printk(KERN_ERR "out-of-sync dirty pointer, %d vs. %d,"
1516
                           " full=%d.\n",
1517
                           dirty_tx, sp->cur_tx, sp->tx_full);
1518
                dirty_tx += TX_RING_SIZE;
1519
        }
1520
 
1521
        while (sp->mc_setup_head != NULL
1522
                   && (int)(dirty_tx - sp->mc_setup_head->tx - 1) > 0) {
1523
                struct speedo_mc_block *t;
1524
                if (netif_msg_tx_err(sp))
1525
                        printk(KERN_DEBUG "%s: freeing mc frame.\n", dev->name);
1526
                pci_unmap_single(sp->pdev, sp->mc_setup_head->frame_dma,
1527
                                sp->mc_setup_head->len, PCI_DMA_TODEVICE);
1528
                t = sp->mc_setup_head->next;
1529
                kfree(sp->mc_setup_head);
1530
                sp->mc_setup_head = t;
1531
        }
1532
        if (sp->mc_setup_head == NULL)
1533
                sp->mc_setup_tail = NULL;
1534
 
1535
        sp->dirty_tx = dirty_tx;
1536
}
1537
 
1538
/* The interrupt handler does all of the Rx thread work and cleans up
1539
   after the Tx thread. */
1540
static irqreturn_t speedo_interrupt(int irq, void *dev_instance)
1541
{
1542
        struct net_device *dev = (struct net_device *)dev_instance;
1543
        struct speedo_private *sp;
1544
        void __iomem *ioaddr;
1545
        long boguscnt = max_interrupt_work;
1546
        unsigned short status;
1547
        unsigned int handled = 0;
1548
 
1549
        sp = netdev_priv(dev);
1550
        ioaddr = sp->regs;
1551
 
1552
#ifndef final_version
1553
        /* A lock to prevent simultaneous entry on SMP machines. */
1554
        if (test_and_set_bit(0, (void*)&sp->in_interrupt)) {
1555
                printk(KERN_ERR"%s: SMP simultaneous entry of an interrupt handler.\n",
1556
                           dev->name);
1557
                sp->in_interrupt = 0;    /* Avoid halting machine. */
1558
                return IRQ_NONE;
1559
        }
1560
#endif
1561
 
1562
        do {
1563
                status = ioread16(ioaddr + SCBStatus);
1564
                /* Acknowledge all of the current interrupt sources ASAP. */
1565
                /* Will change from 0xfc00 to 0xff00 when we start handling
1566
                   FCP and ER interrupts --Dragan */
1567
                iowrite16(status & 0xfc00, ioaddr + SCBStatus);
1568
 
1569
                if (netif_msg_intr(sp))
1570
                        printk(KERN_DEBUG "%s: interrupt  status=%#4.4x.\n",
1571
                                   dev->name, status);
1572
 
1573
                if ((status & 0xfc00) == 0)
1574
                        break;
1575
                handled = 1;
1576
 
1577
 
1578
                if ((status & 0x5000) ||        /* Packet received, or Rx error. */
1579
                        (sp->rx_ring_state&(RrNoMem|RrPostponed)) == RrPostponed)
1580
                                                                        /* Need to gather the postponed packet. */
1581
                        speedo_rx(dev);
1582
 
1583
                /* Always check if all rx buffers are allocated.  --SAW */
1584
                speedo_refill_rx_buffers(dev, 0);
1585
 
1586
                spin_lock(&sp->lock);
1587
                /*
1588
                 * The chip may have suspended reception for various reasons.
1589
                 * Check for that, and re-prime it should this be the case.
1590
                 */
1591
                switch ((status >> 2) & 0xf) {
1592
                case 0: /* Idle */
1593
                        break;
1594
                case 1: /* Suspended */
1595
                case 2: /* No resources (RxFDs) */
1596
                case 9: /* Suspended with no more RBDs */
1597
                case 10: /* No resources due to no RBDs */
1598
                case 12: /* Ready with no RBDs */
1599
                        speedo_rx_soft_reset(dev);
1600
                        break;
1601
                case 3:  case 5:  case 6:  case 7:  case 8:
1602
                case 11:  case 13:  case 14:  case 15:
1603
                        /* these are all reserved values */
1604
                        break;
1605
                }
1606
 
1607
 
1608
                /* User interrupt, Command/Tx unit interrupt or CU not active. */
1609
                if (status & 0xA400) {
1610
                        speedo_tx_buffer_gc(dev);
1611
                        if (sp->tx_full
1612
                                && (int)(sp->cur_tx - sp->dirty_tx) < TX_QUEUE_UNFULL) {
1613
                                /* The ring is no longer full. */
1614
                                sp->tx_full = 0;
1615
                                netif_wake_queue(dev); /* Attention: under a spinlock.  --SAW */
1616
                        }
1617
                }
1618
 
1619
                spin_unlock(&sp->lock);
1620
 
1621
                if (--boguscnt < 0) {
1622
                        printk(KERN_ERR "%s: Too much work at interrupt, status=0x%4.4x.\n",
1623
                                   dev->name, status);
1624
                        /* Clear all interrupt sources. */
1625
                        /* Will change from 0xfc00 to 0xff00 when we start handling
1626
                           FCP and ER interrupts --Dragan */
1627
                        iowrite16(0xfc00, ioaddr + SCBStatus);
1628
                        break;
1629
                }
1630
        } while (1);
1631
 
1632
        if (netif_msg_intr(sp))
1633
                printk(KERN_DEBUG "%s: exiting interrupt, status=%#4.4x.\n",
1634
                           dev->name, ioread16(ioaddr + SCBStatus));
1635
 
1636
        clear_bit(0, (void*)&sp->in_interrupt);
1637
        return IRQ_RETVAL(handled);
1638
}
1639
 
1640
static inline struct RxFD *speedo_rx_alloc(struct net_device *dev, int entry)
1641
{
1642
        struct speedo_private *sp = netdev_priv(dev);
1643
        struct RxFD *rxf;
1644
        struct sk_buff *skb;
1645
        /* Get a fresh skbuff to replace the consumed one. */
1646
        skb = dev_alloc_skb(PKT_BUF_SZ + sizeof(struct RxFD));
1647
        if (skb)
1648
                rx_align(skb);          /* Align IP on 16 byte boundary */
1649
        sp->rx_skbuff[entry] = skb;
1650
        if (skb == NULL) {
1651
                sp->rx_ringp[entry] = NULL;
1652
                return NULL;
1653
        }
1654
        rxf = sp->rx_ringp[entry] = (struct RxFD *)skb->data;
1655
        sp->rx_ring_dma[entry] =
1656
                pci_map_single(sp->pdev, rxf,
1657
                                           PKT_BUF_SZ + sizeof(struct RxFD), PCI_DMA_FROMDEVICE);
1658
        skb->dev = dev;
1659
        skb_reserve(skb, sizeof(struct RxFD));
1660
        rxf->rx_buf_addr = 0xffffffff;
1661
        pci_dma_sync_single_for_device(sp->pdev, sp->rx_ring_dma[entry],
1662
                                                                   sizeof(struct RxFD), PCI_DMA_TODEVICE);
1663
        return rxf;
1664
}
1665
 
1666
static inline void speedo_rx_link(struct net_device *dev, int entry,
1667
                                                                  struct RxFD *rxf, dma_addr_t rxf_dma)
1668
{
1669
        struct speedo_private *sp = netdev_priv(dev);
1670
        rxf->status = cpu_to_le32(0xC0000001);  /* '1' for driver use only. */
1671
        rxf->link = 0;                   /* None yet. */
1672
        rxf->count = cpu_to_le32(PKT_BUF_SZ << 16);
1673
        sp->last_rxf->link = cpu_to_le32(rxf_dma);
1674
        sp->last_rxf->status &= cpu_to_le32(~0xC0000000);
1675
        pci_dma_sync_single_for_device(sp->pdev, sp->last_rxf_dma,
1676
                                                                   sizeof(struct RxFD), PCI_DMA_TODEVICE);
1677
        sp->last_rxf = rxf;
1678
        sp->last_rxf_dma = rxf_dma;
1679
}
1680
 
1681
static int speedo_refill_rx_buf(struct net_device *dev, int force)
1682
{
1683
        struct speedo_private *sp = netdev_priv(dev);
1684
        int entry;
1685
        struct RxFD *rxf;
1686
 
1687
        entry = sp->dirty_rx % RX_RING_SIZE;
1688
        if (sp->rx_skbuff[entry] == NULL) {
1689
                rxf = speedo_rx_alloc(dev, entry);
1690
                if (rxf == NULL) {
1691
                        unsigned int forw;
1692
                        int forw_entry;
1693
                        if (netif_msg_rx_err(sp) || !(sp->rx_ring_state & RrOOMReported)) {
1694
                                printk(KERN_WARNING "%s: can't fill rx buffer (force %d)!\n",
1695
                                                dev->name, force);
1696
                                sp->rx_ring_state |= RrOOMReported;
1697
                        }
1698
                        speedo_show_state(dev);
1699
                        if (!force)
1700
                                return -1;      /* Better luck next time!  */
1701
                        /* Borrow an skb from one of next entries. */
1702
                        for (forw = sp->dirty_rx + 1; forw != sp->cur_rx; forw++)
1703
                                if (sp->rx_skbuff[forw % RX_RING_SIZE] != NULL)
1704
                                        break;
1705
                        if (forw == sp->cur_rx)
1706
                                return -1;
1707
                        forw_entry = forw % RX_RING_SIZE;
1708
                        sp->rx_skbuff[entry] = sp->rx_skbuff[forw_entry];
1709
                        sp->rx_skbuff[forw_entry] = NULL;
1710
                        rxf = sp->rx_ringp[forw_entry];
1711
                        sp->rx_ringp[forw_entry] = NULL;
1712
                        sp->rx_ringp[entry] = rxf;
1713
                }
1714
        } else {
1715
                rxf = sp->rx_ringp[entry];
1716
        }
1717
        speedo_rx_link(dev, entry, rxf, sp->rx_ring_dma[entry]);
1718
        sp->dirty_rx++;
1719
        sp->rx_ring_state &= ~(RrNoMem|RrOOMReported); /* Mark the progress. */
1720
        return 0;
1721
}
1722
 
1723
static void speedo_refill_rx_buffers(struct net_device *dev, int force)
1724
{
1725
        struct speedo_private *sp = netdev_priv(dev);
1726
 
1727
        /* Refill the RX ring. */
1728
        while ((int)(sp->cur_rx - sp->dirty_rx) > 0 &&
1729
                        speedo_refill_rx_buf(dev, force) != -1);
1730
}
1731
 
1732
static int
1733
speedo_rx(struct net_device *dev)
1734
{
1735
        struct speedo_private *sp = netdev_priv(dev);
1736
        int entry = sp->cur_rx % RX_RING_SIZE;
1737
        int rx_work_limit = sp->dirty_rx + RX_RING_SIZE - sp->cur_rx;
1738
        int alloc_ok = 1;
1739
        int npkts = 0;
1740
 
1741
        if (netif_msg_intr(sp))
1742
                printk(KERN_DEBUG " In speedo_rx().\n");
1743
        /* If we own the next entry, it's a new packet. Send it up. */
1744
        while (sp->rx_ringp[entry] != NULL) {
1745
                int status;
1746
                int pkt_len;
1747
 
1748
                pci_dma_sync_single_for_cpu(sp->pdev, sp->rx_ring_dma[entry],
1749
                                                                        sizeof(struct RxFD), PCI_DMA_FROMDEVICE);
1750
                status = le32_to_cpu(sp->rx_ringp[entry]->status);
1751
                pkt_len = le32_to_cpu(sp->rx_ringp[entry]->count) & 0x3fff;
1752
 
1753
                if (!(status & RxComplete))
1754
                        break;
1755
 
1756
                if (--rx_work_limit < 0)
1757
                        break;
1758
 
1759
                /* Check for a rare out-of-memory case: the current buffer is
1760
                   the last buffer allocated in the RX ring.  --SAW */
1761
                if (sp->last_rxf == sp->rx_ringp[entry]) {
1762
                        /* Postpone the packet.  It'll be reaped at an interrupt when this
1763
                           packet is no longer the last packet in the ring. */
1764
                        if (netif_msg_rx_err(sp))
1765
                                printk(KERN_DEBUG "%s: RX packet postponed!\n",
1766
                                           dev->name);
1767
                        sp->rx_ring_state |= RrPostponed;
1768
                        break;
1769
                }
1770
 
1771
                if (netif_msg_rx_status(sp))
1772
                        printk(KERN_DEBUG "  speedo_rx() status %8.8x len %d.\n", status,
1773
                                   pkt_len);
1774
                if ((status & (RxErrTooBig|RxOK|0x0f90)) != RxOK) {
1775
                        if (status & RxErrTooBig)
1776
                                printk(KERN_ERR "%s: Ethernet frame overran the Rx buffer, "
1777
                                           "status %8.8x!\n", dev->name, status);
1778
                        else if (! (status & RxOK)) {
1779
                                /* There was a fatal error.  This *should* be impossible. */
1780
                                sp->stats.rx_errors++;
1781
                                printk(KERN_ERR "%s: Anomalous event in speedo_rx(), "
1782
                                           "status %8.8x.\n",
1783
                                           dev->name, status);
1784
                        }
1785
                } else {
1786
                        struct sk_buff *skb;
1787
 
1788
                        /* Check if the packet is long enough to just accept without
1789
                           copying to a properly sized skbuff. */
1790
                        if (pkt_len < rx_copybreak
1791
                                && (skb = dev_alloc_skb(pkt_len + 2)) != 0) {
1792
                                skb_reserve(skb, 2);    /* Align IP on 16 byte boundaries */
1793
                                /* 'skb_put()' points to the start of sk_buff data area. */
1794
                                pci_dma_sync_single_for_cpu(sp->pdev, sp->rx_ring_dma[entry],
1795
                                                                                        sizeof(struct RxFD) + pkt_len,
1796
                                                                                        PCI_DMA_FROMDEVICE);
1797
 
1798
#if 1 || USE_IP_CSUM
1799
                                /* Packet is in one chunk -- we can copy + cksum. */
1800
                                skb_copy_to_linear_data(skb, sp->rx_skbuff[entry]->data, pkt_len);
1801
                                skb_put(skb, pkt_len);
1802
#else
1803
                                skb_copy_from_linear_data(sp->rx_skbuff[entry],
1804
                                                          skb_put(skb, pkt_len),
1805
                                                          pkt_len);
1806
#endif
1807
                                pci_dma_sync_single_for_device(sp->pdev, sp->rx_ring_dma[entry],
1808
                                                                                           sizeof(struct RxFD) + pkt_len,
1809
                                                                                           PCI_DMA_FROMDEVICE);
1810
                                npkts++;
1811
                        } else {
1812
                                /* Pass up the already-filled skbuff. */
1813
                                skb = sp->rx_skbuff[entry];
1814
                                if (skb == NULL) {
1815
                                        printk(KERN_ERR "%s: Inconsistent Rx descriptor chain.\n",
1816
                                                   dev->name);
1817
                                        break;
1818
                                }
1819
                                sp->rx_skbuff[entry] = NULL;
1820
                                skb_put(skb, pkt_len);
1821
                                npkts++;
1822
                                sp->rx_ringp[entry] = NULL;
1823
                                pci_unmap_single(sp->pdev, sp->rx_ring_dma[entry],
1824
                                                                 PKT_BUF_SZ + sizeof(struct RxFD),
1825
                                                                 PCI_DMA_FROMDEVICE);
1826
                        }
1827
                        skb->protocol = eth_type_trans(skb, dev);
1828
                        netif_rx(skb);
1829
                        dev->last_rx = jiffies;
1830
                        sp->stats.rx_packets++;
1831
                        sp->stats.rx_bytes += pkt_len;
1832
                }
1833
                entry = (++sp->cur_rx) % RX_RING_SIZE;
1834
                sp->rx_ring_state &= ~RrPostponed;
1835
                /* Refill the recently taken buffers.
1836
                   Do it one-by-one to handle traffic bursts better. */
1837
                if (alloc_ok && speedo_refill_rx_buf(dev, 0) == -1)
1838
                        alloc_ok = 0;
1839
        }
1840
 
1841
        /* Try hard to refill the recently taken buffers. */
1842
        speedo_refill_rx_buffers(dev, 1);
1843
 
1844
        if (npkts)
1845
                sp->last_rx_time = jiffies;
1846
 
1847
        return 0;
1848
}
1849
 
1850
static int
1851
speedo_close(struct net_device *dev)
1852
{
1853
        struct speedo_private *sp = netdev_priv(dev);
1854
        void __iomem *ioaddr = sp->regs;
1855
        int i;
1856
 
1857
        netdevice_stop(dev);
1858
        netif_stop_queue(dev);
1859
 
1860
        if (netif_msg_ifdown(sp))
1861
                printk(KERN_DEBUG "%s: Shutting down ethercard, status was %4.4x.\n",
1862
                           dev->name, ioread16(ioaddr + SCBStatus));
1863
 
1864
        /* Shut off the media monitoring timer. */
1865
        del_timer_sync(&sp->timer);
1866
 
1867
        iowrite16(SCBMaskAll, ioaddr + SCBCmd);
1868
 
1869
        /* Shutting down the chip nicely fails to disable flow control. So.. */
1870
        iowrite32(PortPartialReset, ioaddr + SCBPort);
1871
        ioread32(ioaddr + SCBPort); /* flush posted write */
1872
        /*
1873
         * The chip requires a 10 microsecond quiet period.  Wait here!
1874
         */
1875
        udelay(10);
1876
 
1877
        free_irq(dev->irq, dev);
1878
        speedo_show_state(dev);
1879
 
1880
    /* Free all the skbuffs in the Rx and Tx queues. */
1881
        for (i = 0; i < RX_RING_SIZE; i++) {
1882
                struct sk_buff *skb = sp->rx_skbuff[i];
1883
                sp->rx_skbuff[i] = NULL;
1884
                /* Clear the Rx descriptors. */
1885
                if (skb) {
1886
                        pci_unmap_single(sp->pdev,
1887
                                         sp->rx_ring_dma[i],
1888
                                         PKT_BUF_SZ + sizeof(struct RxFD), PCI_DMA_FROMDEVICE);
1889
                        dev_kfree_skb(skb);
1890
                }
1891
        }
1892
 
1893
        for (i = 0; i < TX_RING_SIZE; i++) {
1894
                struct sk_buff *skb = sp->tx_skbuff[i];
1895
                sp->tx_skbuff[i] = NULL;
1896
                /* Clear the Tx descriptors. */
1897
                if (skb) {
1898
                        pci_unmap_single(sp->pdev,
1899
                                         le32_to_cpu(sp->tx_ring[i].tx_buf_addr0),
1900
                                         skb->len, PCI_DMA_TODEVICE);
1901
                        dev_kfree_skb(skb);
1902
                }
1903
        }
1904
 
1905
        /* Free multicast setting blocks. */
1906
        for (i = 0; sp->mc_setup_head != NULL; i++) {
1907
                struct speedo_mc_block *t;
1908
                t = sp->mc_setup_head->next;
1909
                kfree(sp->mc_setup_head);
1910
                sp->mc_setup_head = t;
1911
        }
1912
        sp->mc_setup_tail = NULL;
1913
        if (netif_msg_ifdown(sp))
1914
                printk(KERN_DEBUG "%s: %d multicast blocks dropped.\n", dev->name, i);
1915
 
1916
        pci_set_power_state(sp->pdev, PCI_D2);
1917
 
1918
        return 0;
1919
}
1920
 
1921
/* The Speedo-3 has an especially awkward and unusable method of getting
1922
   statistics out of the chip.  It takes an unpredictable length of time
1923
   for the dump-stats command to complete.  To avoid a busy-wait loop we
1924
   update the stats with the previous dump results, and then trigger a
1925
   new dump.
1926
 
1927
   Oh, and incoming frames are dropped while executing dump-stats!
1928
   */
1929
static struct net_device_stats *
1930
speedo_get_stats(struct net_device *dev)
1931
{
1932
        struct speedo_private *sp = netdev_priv(dev);
1933
        void __iomem *ioaddr = sp->regs;
1934
 
1935
        /* Update only if the previous dump finished. */
1936
        if (sp->lstats->done_marker == le32_to_cpu(0xA007)) {
1937
                sp->stats.tx_aborted_errors += le32_to_cpu(sp->lstats->tx_coll16_errs);
1938
                sp->stats.tx_window_errors += le32_to_cpu(sp->lstats->tx_late_colls);
1939
                sp->stats.tx_fifo_errors += le32_to_cpu(sp->lstats->tx_underruns);
1940
                sp->stats.tx_fifo_errors += le32_to_cpu(sp->lstats->tx_lost_carrier);
1941
                /*sp->stats.tx_deferred += le32_to_cpu(sp->lstats->tx_deferred);*/
1942
                sp->stats.collisions += le32_to_cpu(sp->lstats->tx_total_colls);
1943
                sp->stats.rx_crc_errors += le32_to_cpu(sp->lstats->rx_crc_errs);
1944
                sp->stats.rx_frame_errors += le32_to_cpu(sp->lstats->rx_align_errs);
1945
                sp->stats.rx_over_errors += le32_to_cpu(sp->lstats->rx_resource_errs);
1946
                sp->stats.rx_fifo_errors += le32_to_cpu(sp->lstats->rx_overrun_errs);
1947
                sp->stats.rx_length_errors += le32_to_cpu(sp->lstats->rx_runt_errs);
1948
                sp->lstats->done_marker = 0x0000;
1949
                if (netif_running(dev)) {
1950
                        unsigned long flags;
1951
                        /* Take a spinlock to make wait_for_cmd_done and sending the
1952
                           command atomic.  --SAW */
1953
                        spin_lock_irqsave(&sp->lock, flags);
1954
                        wait_for_cmd_done(dev, sp);
1955
                        iowrite8(CUDumpStats, ioaddr + SCBCmd);
1956
                        spin_unlock_irqrestore(&sp->lock, flags);
1957
                }
1958
        }
1959
        return &sp->stats;
1960
}
1961
 
1962
static void speedo_get_drvinfo(struct net_device *dev, struct ethtool_drvinfo *info)
1963
{
1964
        struct speedo_private *sp = netdev_priv(dev);
1965
        strncpy(info->driver, "eepro100", sizeof(info->driver)-1);
1966
        strncpy(info->version, version, sizeof(info->version)-1);
1967
        if (sp->pdev)
1968
                strcpy(info->bus_info, pci_name(sp->pdev));
1969
}
1970
 
1971
static int speedo_get_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1972
{
1973
        struct speedo_private *sp = netdev_priv(dev);
1974
        spin_lock_irq(&sp->lock);
1975
        mii_ethtool_gset(&sp->mii_if, ecmd);
1976
        spin_unlock_irq(&sp->lock);
1977
        return 0;
1978
}
1979
 
1980
static int speedo_set_settings(struct net_device *dev, struct ethtool_cmd *ecmd)
1981
{
1982
        struct speedo_private *sp = netdev_priv(dev);
1983
        int res;
1984
        spin_lock_irq(&sp->lock);
1985
        res = mii_ethtool_sset(&sp->mii_if, ecmd);
1986
        spin_unlock_irq(&sp->lock);
1987
        return res;
1988
}
1989
 
1990
static int speedo_nway_reset(struct net_device *dev)
1991
{
1992
        struct speedo_private *sp = netdev_priv(dev);
1993
        return mii_nway_restart(&sp->mii_if);
1994
}
1995
 
1996
static u32 speedo_get_link(struct net_device *dev)
1997
{
1998
        struct speedo_private *sp = netdev_priv(dev);
1999
        return mii_link_ok(&sp->mii_if);
2000
}
2001
 
2002
static u32 speedo_get_msglevel(struct net_device *dev)
2003
{
2004
        struct speedo_private *sp = netdev_priv(dev);
2005
        return sp->msg_enable;
2006
}
2007
 
2008
static void speedo_set_msglevel(struct net_device *dev, u32 v)
2009
{
2010
        struct speedo_private *sp = netdev_priv(dev);
2011
        sp->msg_enable = v;
2012
}
2013
 
2014
static const struct ethtool_ops ethtool_ops = {
2015
        .get_drvinfo = speedo_get_drvinfo,
2016
        .get_settings = speedo_get_settings,
2017
        .set_settings = speedo_set_settings,
2018
        .nway_reset = speedo_nway_reset,
2019
        .get_link = speedo_get_link,
2020
        .get_msglevel = speedo_get_msglevel,
2021
        .set_msglevel = speedo_set_msglevel,
2022
};
2023
 
2024
static int speedo_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
2025
{
2026
        struct speedo_private *sp = netdev_priv(dev);
2027
        struct mii_ioctl_data *data = if_mii(rq);
2028
        int phy = sp->phy[0] & 0x1f;
2029
        int saved_acpi;
2030
        int t;
2031
 
2032
    switch(cmd) {
2033
        case SIOCGMIIPHY:               /* Get address of MII PHY in use. */
2034
                data->phy_id = phy;
2035
 
2036
        case SIOCGMIIREG:               /* Read MII PHY register. */
2037
                /* FIXME: these operations need to be serialized with MDIO
2038
                   access from the timeout handler.
2039
                   They are currently serialized only with MDIO access from the
2040
                   timer routine.  2000/05/09 SAW */
2041
                saved_acpi = pci_set_power_state(sp->pdev, PCI_D0);
2042
                t = del_timer_sync(&sp->timer);
2043
                data->val_out = mdio_read(dev, data->phy_id & 0x1f, data->reg_num & 0x1f);
2044
                if (t)
2045
                        add_timer(&sp->timer); /* may be set to the past  --SAW */
2046
                pci_set_power_state(sp->pdev, saved_acpi);
2047
                return 0;
2048
 
2049
        case SIOCSMIIREG:               /* Write MII PHY register. */
2050
                if (!capable(CAP_NET_ADMIN))
2051
                        return -EPERM;
2052
                saved_acpi = pci_set_power_state(sp->pdev, PCI_D0);
2053
                t = del_timer_sync(&sp->timer);
2054
                mdio_write(dev, data->phy_id, data->reg_num, data->val_in);
2055
                if (t)
2056
                        add_timer(&sp->timer); /* may be set to the past  --SAW */
2057
                pci_set_power_state(sp->pdev, saved_acpi);
2058
                return 0;
2059
        default:
2060
                return -EOPNOTSUPP;
2061
        }
2062
}
2063
 
2064
/* Set or clear the multicast filter for this adaptor.
2065
   This is very ugly with Intel chips -- we usually have to execute an
2066
   entire configuration command, plus process a multicast command.
2067
   This is complicated.  We must put a large configuration command and
2068
   an arbitrarily-sized multicast command in the transmit list.
2069
   To minimize the disruption -- the previous command might have already
2070
   loaded the link -- we convert the current command block, normally a Tx
2071
   command, into a no-op and link it to the new command.
2072
*/
2073
static void set_rx_mode(struct net_device *dev)
2074
{
2075
        struct speedo_private *sp = netdev_priv(dev);
2076
        void __iomem *ioaddr = sp->regs;
2077
        struct descriptor *last_cmd;
2078
        char new_rx_mode;
2079
        unsigned long flags;
2080
        int entry, i;
2081
 
2082
        if (dev->flags & IFF_PROMISC) {                 /* Set promiscuous. */
2083
                new_rx_mode = 3;
2084
        } else if ((dev->flags & IFF_ALLMULTI)  ||
2085
                           dev->mc_count > multicast_filter_limit) {
2086
                new_rx_mode = 1;
2087
        } else
2088
                new_rx_mode = 0;
2089
 
2090
        if (netif_msg_rx_status(sp))
2091
                printk(KERN_DEBUG "%s: set_rx_mode %d -> %d\n", dev->name,
2092
                                sp->rx_mode, new_rx_mode);
2093
 
2094
        if ((int)(sp->cur_tx - sp->dirty_tx) > TX_RING_SIZE - TX_MULTICAST_SIZE) {
2095
            /* The Tx ring is full -- don't add anything!  Hope the mode will be
2096
                 * set again later. */
2097
                sp->rx_mode = -1;
2098
                return;
2099
        }
2100
 
2101
        if (new_rx_mode != sp->rx_mode) {
2102
                u8 *config_cmd_data;
2103
 
2104
                spin_lock_irqsave(&sp->lock, flags);
2105
                entry = sp->cur_tx++ % TX_RING_SIZE;
2106
                last_cmd = sp->last_cmd;
2107
                sp->last_cmd = (struct descriptor *)&sp->tx_ring[entry];
2108
 
2109
                sp->tx_skbuff[entry] = NULL;                    /* Redundant. */
2110
                sp->tx_ring[entry].status = cpu_to_le32(CmdSuspend | CmdConfigure);
2111
                sp->tx_ring[entry].link =
2112
                        cpu_to_le32(TX_RING_ELEM_DMA(sp, (entry + 1) % TX_RING_SIZE));
2113
                config_cmd_data = (void *)&sp->tx_ring[entry].tx_desc_addr;
2114
                /* Construct a full CmdConfig frame. */
2115
                memcpy(config_cmd_data, i82558_config_cmd, CONFIG_DATA_SIZE);
2116
                config_cmd_data[1] = (txfifo << 4) | rxfifo;
2117
                config_cmd_data[4] = rxdmacount;
2118
                config_cmd_data[5] = txdmacount + 0x80;
2119
                config_cmd_data[15] |= (new_rx_mode & 2) ? 1 : 0;
2120
                /* 0x80 doesn't disable FC 0x84 does.
2121
                   Disable Flow control since we are not ACK-ing any FC interrupts
2122
                   for now. --Dragan */
2123
                config_cmd_data[19] = 0x84;
2124
                config_cmd_data[19] |= sp->mii_if.full_duplex ? 0x40 : 0;
2125
                config_cmd_data[21] = (new_rx_mode & 1) ? 0x0D : 0x05;
2126
                if (sp->phy[0] & 0x8000) {                       /* Use the AUI port instead. */
2127
                        config_cmd_data[15] |= 0x80;
2128
                        config_cmd_data[8] = 0;
2129
                }
2130
                /* Trigger the command unit resume. */
2131
                wait_for_cmd_done(dev, sp);
2132
                clear_suspend(last_cmd);
2133
                iowrite8(CUResume, ioaddr + SCBCmd);
2134
                if ((int)(sp->cur_tx - sp->dirty_tx) >= TX_QUEUE_LIMIT) {
2135
                        netif_stop_queue(dev);
2136
                        sp->tx_full = 1;
2137
                }
2138
                spin_unlock_irqrestore(&sp->lock, flags);
2139
        }
2140
 
2141
        if (new_rx_mode == 0  &&  dev->mc_count < 4) {
2142
                /* The simple case of 0-3 multicast list entries occurs often, and
2143
                   fits within one tx_ring[] entry. */
2144
                struct dev_mc_list *mclist;
2145
                u16 *setup_params, *eaddrs;
2146
 
2147
                spin_lock_irqsave(&sp->lock, flags);
2148
                entry = sp->cur_tx++ % TX_RING_SIZE;
2149
                last_cmd = sp->last_cmd;
2150
                sp->last_cmd = (struct descriptor *)&sp->tx_ring[entry];
2151
 
2152
                sp->tx_skbuff[entry] = NULL;
2153
                sp->tx_ring[entry].status = cpu_to_le32(CmdSuspend | CmdMulticastList);
2154
                sp->tx_ring[entry].link =
2155
                        cpu_to_le32(TX_RING_ELEM_DMA(sp, (entry + 1) % TX_RING_SIZE));
2156
                sp->tx_ring[entry].tx_desc_addr = 0; /* Really MC list count. */
2157
                setup_params = (u16 *)&sp->tx_ring[entry].tx_desc_addr;
2158
                *setup_params++ = cpu_to_le16(dev->mc_count*6);
2159
                /* Fill in the multicast addresses. */
2160
                for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
2161
                         i++, mclist = mclist->next) {
2162
                        eaddrs = (u16 *)mclist->dmi_addr;
2163
                        *setup_params++ = *eaddrs++;
2164
                        *setup_params++ = *eaddrs++;
2165
                        *setup_params++ = *eaddrs++;
2166
                }
2167
 
2168
                wait_for_cmd_done(dev, sp);
2169
                clear_suspend(last_cmd);
2170
                /* Immediately trigger the command unit resume. */
2171
                iowrite8(CUResume, ioaddr + SCBCmd);
2172
 
2173
                if ((int)(sp->cur_tx - sp->dirty_tx) >= TX_QUEUE_LIMIT) {
2174
                        netif_stop_queue(dev);
2175
                        sp->tx_full = 1;
2176
                }
2177
                spin_unlock_irqrestore(&sp->lock, flags);
2178
        } else if (new_rx_mode == 0) {
2179
                struct dev_mc_list *mclist;
2180
                u16 *setup_params, *eaddrs;
2181
                struct speedo_mc_block *mc_blk;
2182
                struct descriptor *mc_setup_frm;
2183
                int i;
2184
 
2185
                mc_blk = kmalloc(sizeof(*mc_blk) + 2 + multicast_filter_limit*6,
2186
                                                 GFP_ATOMIC);
2187
                if (mc_blk == NULL) {
2188
                        printk(KERN_ERR "%s: Failed to allocate a setup frame.\n",
2189
                                   dev->name);
2190
                        sp->rx_mode = -1; /* We failed, try again. */
2191
                        return;
2192
                }
2193
                mc_blk->next = NULL;
2194
                mc_blk->len = 2 + multicast_filter_limit*6;
2195
                mc_blk->frame_dma =
2196
                        pci_map_single(sp->pdev, &mc_blk->frame, mc_blk->len,
2197
                                        PCI_DMA_TODEVICE);
2198
                mc_setup_frm = &mc_blk->frame;
2199
 
2200
                /* Fill the setup frame. */
2201
                if (netif_msg_ifup(sp))
2202
                        printk(KERN_DEBUG "%s: Constructing a setup frame at %p.\n",
2203
                                   dev->name, mc_setup_frm);
2204
                mc_setup_frm->cmd_status =
2205
                        cpu_to_le32(CmdSuspend | CmdIntr | CmdMulticastList);
2206
                /* Link set below. */
2207
                setup_params = (u16 *)&mc_setup_frm->params;
2208
                *setup_params++ = cpu_to_le16(dev->mc_count*6);
2209
                /* Fill in the multicast addresses. */
2210
                for (i = 0, mclist = dev->mc_list; i < dev->mc_count;
2211
                         i++, mclist = mclist->next) {
2212
                        eaddrs = (u16 *)mclist->dmi_addr;
2213
                        *setup_params++ = *eaddrs++;
2214
                        *setup_params++ = *eaddrs++;
2215
                        *setup_params++ = *eaddrs++;
2216
                }
2217
 
2218
                /* Disable interrupts while playing with the Tx Cmd list. */
2219
                spin_lock_irqsave(&sp->lock, flags);
2220
 
2221
                if (sp->mc_setup_tail)
2222
                        sp->mc_setup_tail->next = mc_blk;
2223
                else
2224
                        sp->mc_setup_head = mc_blk;
2225
                sp->mc_setup_tail = mc_blk;
2226
                mc_blk->tx = sp->cur_tx;
2227
 
2228
                entry = sp->cur_tx++ % TX_RING_SIZE;
2229
                last_cmd = sp->last_cmd;
2230
                sp->last_cmd = mc_setup_frm;
2231
 
2232
                /* Change the command to a NoOp, pointing to the CmdMulti command. */
2233
                sp->tx_skbuff[entry] = NULL;
2234
                sp->tx_ring[entry].status = cpu_to_le32(CmdNOp);
2235
                sp->tx_ring[entry].link = cpu_to_le32(mc_blk->frame_dma);
2236
 
2237
                /* Set the link in the setup frame. */
2238
                mc_setup_frm->link =
2239
                        cpu_to_le32(TX_RING_ELEM_DMA(sp, (entry + 1) % TX_RING_SIZE));
2240
 
2241
                pci_dma_sync_single_for_device(sp->pdev, mc_blk->frame_dma,
2242
                                                                           mc_blk->len, PCI_DMA_TODEVICE);
2243
 
2244
                wait_for_cmd_done(dev, sp);
2245
                clear_suspend(last_cmd);
2246
                /* Immediately trigger the command unit resume. */
2247
                iowrite8(CUResume, ioaddr + SCBCmd);
2248
 
2249
                if ((int)(sp->cur_tx - sp->dirty_tx) >= TX_QUEUE_LIMIT) {
2250
                        netif_stop_queue(dev);
2251
                        sp->tx_full = 1;
2252
                }
2253
                spin_unlock_irqrestore(&sp->lock, flags);
2254
 
2255
                if (netif_msg_rx_status(sp))
2256
                        printk(" CmdMCSetup frame length %d in entry %d.\n",
2257
                                   dev->mc_count, entry);
2258
        }
2259
 
2260
        sp->rx_mode = new_rx_mode;
2261
}
2262
 
2263
#ifdef CONFIG_PM
2264
static int eepro100_suspend(struct pci_dev *pdev, pm_message_t state)
2265
{
2266
        struct net_device *dev = pci_get_drvdata (pdev);
2267
        struct speedo_private *sp = netdev_priv(dev);
2268
        void __iomem *ioaddr = sp->regs;
2269
 
2270
        pci_save_state(pdev);
2271
 
2272
        if (!netif_running(dev))
2273
                return 0;
2274
 
2275
        del_timer_sync(&sp->timer);
2276
 
2277
        netif_device_detach(dev);
2278
        iowrite32(PortPartialReset, ioaddr + SCBPort);
2279
 
2280
        /* XXX call pci_set_power_state ()? */
2281
        pci_disable_device(pdev);
2282
        pci_set_power_state (pdev, PCI_D3hot);
2283
        return 0;
2284
}
2285
 
2286
static int eepro100_resume(struct pci_dev *pdev)
2287
{
2288
        struct net_device *dev = pci_get_drvdata (pdev);
2289
        struct speedo_private *sp = netdev_priv(dev);
2290
        void __iomem *ioaddr = sp->regs;
2291
        int rc;
2292
 
2293
        pci_set_power_state(pdev, PCI_D0);
2294
        pci_restore_state(pdev);
2295
 
2296
        rc = pci_enable_device(pdev);
2297
        if (rc)
2298
                return rc;
2299
 
2300
        pci_set_master(pdev);
2301
 
2302
        if (!netif_running(dev))
2303
                return 0;
2304
 
2305
        /* I'm absolutely uncertain if this part of code may work.
2306
           The problems are:
2307
            - correct hardware reinitialization;
2308
                - correct driver behavior between different steps of the
2309
                  reinitialization;
2310
                - serialization with other driver calls.
2311
           2000/03/08  SAW */
2312
        iowrite16(SCBMaskAll, ioaddr + SCBCmd);
2313
        speedo_resume(dev);
2314
        netif_device_attach(dev);
2315
        sp->rx_mode = -1;
2316
        sp->flow_ctrl = sp->partner = 0;
2317
        set_rx_mode(dev);
2318
        sp->timer.expires = RUN_AT(2*HZ);
2319
        add_timer(&sp->timer);
2320
        return 0;
2321
}
2322
#endif /* CONFIG_PM */
2323
 
2324
static void __devexit eepro100_remove_one (struct pci_dev *pdev)
2325
{
2326
        struct net_device *dev = pci_get_drvdata (pdev);
2327
        struct speedo_private *sp = netdev_priv(dev);
2328
 
2329
        unregister_netdev(dev);
2330
 
2331
        release_region(pci_resource_start(pdev, 1), pci_resource_len(pdev, 1));
2332
        release_mem_region(pci_resource_start(pdev, 0), pci_resource_len(pdev, 0));
2333
 
2334
        pci_iounmap(pdev, sp->regs);
2335
        pci_free_consistent(pdev, TX_RING_SIZE * sizeof(struct TxFD)
2336
                                                                + sizeof(struct speedo_stats),
2337
                                                sp->tx_ring, sp->tx_ring_dma);
2338
        pci_disable_device(pdev);
2339
        free_netdev(dev);
2340
}
2341
 
2342
static struct pci_device_id eepro100_pci_tbl[] = {
2343
        { PCI_VENDOR_ID_INTEL, 0x1229, PCI_ANY_ID, PCI_ANY_ID, },
2344
        { PCI_VENDOR_ID_INTEL, 0x1209, PCI_ANY_ID, PCI_ANY_ID, },
2345
        { PCI_VENDOR_ID_INTEL, 0x1029, PCI_ANY_ID, PCI_ANY_ID, },
2346
        { PCI_VENDOR_ID_INTEL, 0x1030, PCI_ANY_ID, PCI_ANY_ID, },
2347
        { PCI_VENDOR_ID_INTEL, 0x1031, PCI_ANY_ID, PCI_ANY_ID, },
2348
        { PCI_VENDOR_ID_INTEL, 0x1032, PCI_ANY_ID, PCI_ANY_ID, },
2349
        { PCI_VENDOR_ID_INTEL, 0x1033, PCI_ANY_ID, PCI_ANY_ID, },
2350
        { PCI_VENDOR_ID_INTEL, 0x1034, PCI_ANY_ID, PCI_ANY_ID, },
2351
        { PCI_VENDOR_ID_INTEL, 0x1035, PCI_ANY_ID, PCI_ANY_ID, },
2352
        { PCI_VENDOR_ID_INTEL, 0x1036, PCI_ANY_ID, PCI_ANY_ID, },
2353
        { PCI_VENDOR_ID_INTEL, 0x1037, PCI_ANY_ID, PCI_ANY_ID, },
2354
        { PCI_VENDOR_ID_INTEL, 0x1038, PCI_ANY_ID, PCI_ANY_ID, },
2355
        { PCI_VENDOR_ID_INTEL, 0x1039, PCI_ANY_ID, PCI_ANY_ID, },
2356
        { PCI_VENDOR_ID_INTEL, 0x103A, PCI_ANY_ID, PCI_ANY_ID, },
2357
        { PCI_VENDOR_ID_INTEL, 0x103B, PCI_ANY_ID, PCI_ANY_ID, },
2358
        { PCI_VENDOR_ID_INTEL, 0x103C, PCI_ANY_ID, PCI_ANY_ID, },
2359
        { PCI_VENDOR_ID_INTEL, 0x103D, PCI_ANY_ID, PCI_ANY_ID, },
2360
        { PCI_VENDOR_ID_INTEL, 0x103E, PCI_ANY_ID, PCI_ANY_ID, },
2361
        { PCI_VENDOR_ID_INTEL, 0x1050, PCI_ANY_ID, PCI_ANY_ID, },
2362
        { PCI_VENDOR_ID_INTEL, 0x1059, PCI_ANY_ID, PCI_ANY_ID, },
2363
        { PCI_VENDOR_ID_INTEL, 0x1227, PCI_ANY_ID, PCI_ANY_ID, },
2364
        { PCI_VENDOR_ID_INTEL, 0x2449, PCI_ANY_ID, PCI_ANY_ID, },
2365
        { PCI_VENDOR_ID_INTEL, 0x2459, PCI_ANY_ID, PCI_ANY_ID, },
2366
        { PCI_VENDOR_ID_INTEL, 0x245D, PCI_ANY_ID, PCI_ANY_ID, },
2367
        { PCI_VENDOR_ID_INTEL, 0x5200, PCI_ANY_ID, PCI_ANY_ID, },
2368
        { PCI_VENDOR_ID_INTEL, 0x5201, PCI_ANY_ID, PCI_ANY_ID, },
2369
        { 0,}
2370
};
2371
MODULE_DEVICE_TABLE(pci, eepro100_pci_tbl);
2372
 
2373
static struct pci_driver eepro100_driver = {
2374
        .name           = "eepro100",
2375
        .id_table       = eepro100_pci_tbl,
2376
        .probe          = eepro100_init_one,
2377
        .remove         = __devexit_p(eepro100_remove_one),
2378
#ifdef CONFIG_PM
2379
        .suspend        = eepro100_suspend,
2380
        .resume         = eepro100_resume,
2381
#endif /* CONFIG_PM */
2382
};
2383
 
2384
static int __init eepro100_init_module(void)
2385
{
2386
#ifdef MODULE
2387
        printk(version);
2388
#endif
2389
        return pci_register_driver(&eepro100_driver);
2390
}
2391
 
2392
static void __exit eepro100_cleanup_module(void)
2393
{
2394
        pci_unregister_driver(&eepro100_driver);
2395
}
2396
 
2397
module_init(eepro100_init_module);
2398
module_exit(eepro100_cleanup_module);
2399
 
2400
/*
2401
 * Local variables:
2402
 *  compile-command: "gcc -DMODULE -D__KERNEL__ -I/usr/src/linux/net/inet -Wall -Wstrict-prototypes -O6 -c eepro100.c `[ -f /usr/include/linux/modversions.h ] && echo -DMODVERSIONS`"
2403
 *  c-indent-level: 4
2404
 *  c-basic-offset: 4
2405
 *  tab-width: 4
2406
 * End:
2407
 */

powered by: WebSVN 2.1.0

© copyright 1999-2025 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.