tg3: Update version to 3.95
[linux-2.6] / drivers / net / tulip / de4x5.c
1 /*  de4x5.c: A DIGITAL DC21x4x DECchip and DE425/DE434/DE435/DE450/DE500
2              ethernet driver for Linux.
3
4     Copyright 1994, 1995 Digital Equipment Corporation.
5
6     Testing resources for this driver have been made available
7     in part by NASA Ames Research Center (mjacob@nas.nasa.gov).
8
9     The author may be reached at davies@maniac.ultranet.com.
10
11     This program is free software; you can redistribute  it and/or modify it
12     under  the terms of  the GNU General  Public License as published by the
13     Free Software Foundation;  either version 2 of the  License, or (at your
14     option) any later version.
15
16     THIS  SOFTWARE  IS PROVIDED   ``AS  IS'' AND   ANY  EXPRESS OR   IMPLIED
17     WARRANTIES,   INCLUDING, BUT NOT  LIMITED  TO, THE IMPLIED WARRANTIES OF
18     MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.  IN
19     NO  EVENT  SHALL   THE AUTHOR  BE    LIABLE FOR ANY   DIRECT,  INDIRECT,
20     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
21     NOT LIMITED   TO, PROCUREMENT OF  SUBSTITUTE GOODS  OR SERVICES; LOSS OF
22     USE, DATA,  OR PROFITS; OR  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
23     ANY THEORY OF LIABILITY, WHETHER IN  CONTRACT, STRICT LIABILITY, OR TORT
24     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
25     THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26
27     You should have received a copy of the  GNU General Public License along
28     with this program; if not, write  to the Free Software Foundation, Inc.,
29     675 Mass Ave, Cambridge, MA 02139, USA.
30
31     Originally,   this  driver  was    written  for the  Digital   Equipment
32     Corporation series of EtherWORKS ethernet cards:
33
34         DE425 TP/COAX EISA
35         DE434 TP PCI
36         DE435 TP/COAX/AUI PCI
37         DE450 TP/COAX/AUI PCI
38         DE500 10/100 PCI Fasternet
39
40     but it  will  now attempt  to  support all  cards which   conform to the
41     Digital Semiconductor   SROM   Specification.    The  driver   currently
42     recognises the following chips:
43
44         DC21040  (no SROM)
45         DC21041[A]
46         DC21140[A]
47         DC21142
48         DC21143
49
50     So far the driver is known to work with the following cards:
51
52         KINGSTON
53         Linksys
54         ZNYX342
55         SMC8432
56         SMC9332 (w/new SROM)
57         ZNYX31[45]
58         ZNYX346 10/100 4 port (can act as a 10/100 bridge!)
59
60     The driver has been tested on a relatively busy network using the DE425,
61     DE434, DE435 and DE500 cards and benchmarked with 'ttcp': it transferred
62     16M of data to a DECstation 5000/200 as follows:
63
64                 TCP           UDP
65              TX     RX     TX     RX
66     DE425   1030k  997k   1170k  1128k
67     DE434   1063k  995k   1170k  1125k
68     DE435   1063k  995k   1170k  1125k
69     DE500   1063k  998k   1170k  1125k  in 10Mb/s mode
70
71     All  values are typical (in   kBytes/sec) from a  sample  of 4 for  each
72     measurement. Their error is +/-20k on a quiet (private) network and also
73     depend on what load the CPU has.
74
75     =========================================================================
76     This driver  has been written substantially  from  scratch, although its
77     inheritance of style and stack interface from 'ewrk3.c' and in turn from
78     Donald Becker's 'lance.c' should be obvious. With the module autoload of
79     every  usable DECchip board,  I  pinched Donald's 'next_module' field to
80     link my modules together.
81
82     Upto 15 EISA cards can be supported under this driver, limited primarily
83     by the available IRQ lines.  I have  checked different configurations of
84     multiple depca, EtherWORKS 3 cards and de4x5 cards and  have not found a
85     problem yet (provided you have at least depca.c v0.38) ...
86
87     PCI support has been added  to allow the driver  to work with the DE434,
88     DE435, DE450 and DE500 cards. The I/O accesses are a bit of a kludge due
89     to the differences in the EISA and PCI CSR address offsets from the base
90     address.
91
92     The ability to load this  driver as a loadable  module has been included
93     and used extensively  during the driver development  (to save those long
94     reboot sequences).  Loadable module support  under PCI and EISA has been
95     achieved by letting the driver autoprobe as if it were compiled into the
96     kernel. Do make sure  you're not sharing  interrupts with anything  that
97     cannot accommodate  interrupt  sharing!
98
99     To utilise this ability, you have to do 8 things:
100
101     0) have a copy of the loadable modules code installed on your system.
102     1) copy de4x5.c from the  /linux/drivers/net directory to your favourite
103     temporary directory.
104     2) for fixed  autoprobes (not  recommended),  edit the source code  near
105     line 5594 to reflect the I/O address  you're using, or assign these when
106     loading by:
107
108                    insmod de4x5 io=0xghh           where g = bus number
109                                                         hh = device number
110
111        NB: autoprobing for modules is now supported by default. You may just
112            use:
113
114                    insmod de4x5
115
116            to load all available boards. For a specific board, still use
117            the 'io=?' above.
118     3) compile  de4x5.c, but include -DMODULE in  the command line to ensure
119     that the correct bits are compiled (see end of source code).
120     4) if you are wanting to add a new  card, goto 5. Otherwise, recompile a
121     kernel with the de4x5 configuration turned off and reboot.
122     5) insmod de4x5 [io=0xghh]
123     6) run the net startup bits for your new eth?? interface(s) manually
124     (usually /etc/rc.inet[12] at boot time).
125     7) enjoy!
126
127     To unload a module, turn off the associated interface(s)
128     'ifconfig eth?? down' then 'rmmod de4x5'.
129
130     Automedia detection is included so that in  principal you can disconnect
131     from, e.g.  TP, reconnect  to BNC  and  things will still work  (after a
132     pause whilst the   driver figures out   where its media went).  My tests
133     using ping showed that it appears to work....
134
135     By  default,  the driver will  now   autodetect any  DECchip based card.
136     Should you have a need to restrict the driver to DIGITAL only cards, you
137     can compile with a  DEC_ONLY define, or if  loading as a module, use the
138     'dec_only=1'  parameter.
139
140     I've changed the timing routines to  use the kernel timer and scheduling
141     functions  so that the  hangs  and other assorted problems that occurred
142     while autosensing the  media  should be gone.  A  bonus  for the DC21040
143     auto  media sense algorithm is  that it can now  use one that is more in
144     line with the  rest (the DC21040  chip doesn't  have a hardware  timer).
145     The downside is the 1 'jiffies' (10ms) resolution.
146
147     IEEE 802.3u MII interface code has  been added in anticipation that some
148     products may use it in the future.
149
150     The SMC9332 card  has a non-compliant SROM  which needs fixing -  I have
151     patched this  driver to detect it  because the SROM format used complies
152     to a previous DEC-STD format.
153
154     I have removed the buffer copies needed for receive on Intels.  I cannot
155     remove them for   Alphas since  the  Tulip hardware   only does longword
156     aligned  DMA transfers  and  the  Alphas get   alignment traps with  non
157     longword aligned data copies (which makes them really slow). No comment.
158
159     I  have added SROM decoding  routines to make this  driver work with any
160     card that  supports the Digital  Semiconductor SROM spec. This will help
161     all  cards running the dc2114x  series chips in particular.  Cards using
162     the dc2104x  chips should run correctly with  the basic  driver.  I'm in
163     debt to <mjacob@feral.com> for the  testing and feedback that helped get
164     this feature working.  So far we have  tested KINGSTON, SMC8432, SMC9332
165     (with the latest SROM complying  with the SROM spec  V3: their first was
166     broken), ZNYX342  and  LinkSys. ZYNX314 (dual  21041  MAC) and  ZNYX 315
167     (quad 21041 MAC)  cards also  appear  to work despite their  incorrectly
168     wired IRQs.
169
170     I have added a temporary fix for interrupt problems when some SCSI cards
171     share the same interrupt as the DECchip based  cards. The problem occurs
172     because  the SCSI card wants to  grab the interrupt  as a fast interrupt
173     (runs the   service routine with interrupts turned   off) vs.  this card
174     which really needs to run the service routine with interrupts turned on.
175     This driver will  now   add the interrupt service   routine  as  a  fast
176     interrupt if it   is bounced from the   slow interrupt.  THIS IS NOT   A
177     RECOMMENDED WAY TO RUN THE DRIVER  and has been done  for a limited time
178     until  people   sort  out their  compatibility    issues and the  kernel
179     interrupt  service code  is  fixed.   YOU  SHOULD SEPARATE OUT  THE FAST
180     INTERRUPT CARDS FROM THE SLOW INTERRUPT CARDS to ensure that they do not
181     run on the same interrupt. PCMCIA/CardBus is another can of worms...
182
183     Finally, I think  I have really  fixed  the module  loading problem with
184     more than one DECchip based  card.  As a  side effect, I don't mess with
185     the  device structure any  more which means that  if more than 1 card in
186     2.0.x is    installed (4  in   2.1.x),  the  user   will have   to  edit
187     linux/drivers/net/Space.c  to make room for  them. Hence, module loading
188     is  the preferred way to use   this driver, since  it  doesn't have this
189     limitation.
190
191     Where SROM media  detection is used and  full duplex is specified in the
192     SROM,  the feature is  ignored unless  lp->params.fdx  is set at compile
193     time  OR during  a   module load  (insmod  de4x5   args='eth??:fdx' [see
194     below]).  This is because there  is no way  to automatically detect full
195     duplex   links  except through   autonegotiation.    When I  include the
196     autonegotiation feature in  the SROM autoconf  code, this detection will
197     occur automatically for that case.
198
199     Command  line arguments are  now  allowed, similar  to passing arguments
200     through LILO. This will allow a per adapter board  set up of full duplex
201     and media. The only lexical constraints  are: the board name (dev->name)
202     appears in the list before its  parameters.  The list of parameters ends
203     either at the end of the parameter list or with another board name.  The
204     following parameters are allowed:
205
206             fdx        for full duplex
207             autosense  to set the media/speed; with the following
208                        sub-parameters:
209                        TP, TP_NW, BNC, AUI, BNC_AUI, 100Mb, 10Mb, AUTO
210
211     Case sensitivity is important  for  the sub-parameters. They *must*   be
212     upper case. Examples:
213
214         insmod de4x5 args='eth1:fdx autosense=BNC eth0:autosense=100Mb'.
215
216     For a compiled in driver, at or above line 548, place e.g.
217         #define DE4X5_PARM "eth0:fdx autosense=AUI eth2:autosense=TP"
218
219     Yes,  I know full duplex isn't  permissible on BNC  or AUI; they're just
220     examples. By default, full duplex is turned off and  AUTO is the default
221     autosense setting.  In reality, I expect only  the full duplex option to
222     be used. Note the use of single quotes in the two examples above and the
223     lack of commas to separate items. ALSO, you must get the requested media
224     correct in relation to what the adapter SROM says it has. There's no way
225     to  determine this in  advance other than by  trial and error and common
226     sense, e.g. call a BNC connectored port 'BNC', not '10Mb'.
227
228     Changed the bus probing.  EISA used to be  done first,  followed by PCI.
229     Most people probably don't even know  what a de425 is today and the EISA
230     probe has messed  up some SCSI cards  in the past,  so now PCI is always
231     probed  first  followed by  EISA if  a) the architecture allows EISA and
232     either  b) there have been no PCI cards detected or  c) an EISA probe is
233     forced by  the user.  To force  a probe  include  "force_eisa"  in  your
234     insmod "args" line;  for built-in kernels either change the driver to do
235     this  automatically  or include  #define DE4X5_FORCE_EISA  on or  before
236     line 1040 in the driver.
237
238     TO DO:
239     ------
240
241     Revision History
242     ----------------
243
244     Version   Date        Description
245
246       0.1     17-Nov-94   Initial writing. ALPHA code release.
247       0.2     13-Jan-95   Added PCI support for DE435's.
248       0.21    19-Jan-95   Added auto media detection.
249       0.22    10-Feb-95   Fix interrupt handler call <chris@cosy.sbg.ac.at>.
250                           Fix recognition bug reported by <bkm@star.rl.ac.uk>.
251                           Add request/release_region code.
252                           Add loadable modules support for PCI.
253                           Clean up loadable modules support.
254       0.23    28-Feb-95   Added DC21041 and DC21140 support.
255                           Fix missed frame counter value and initialisation.
256                           Fixed EISA probe.
257       0.24    11-Apr-95   Change delay routine to use <linux/udelay>.
258                           Change TX_BUFFS_AVAIL macro.
259                           Change media autodetection to allow manual setting.
260                           Completed DE500 (DC21140) support.
261       0.241   18-Apr-95   Interim release without DE500 Autosense Algorithm.
262       0.242   10-May-95   Minor changes.
263       0.30    12-Jun-95   Timer fix for DC21140.
264                           Portability changes.
265                           Add ALPHA changes from <jestabro@ant.tay1.dec.com>.
266                           Add DE500 semi automatic autosense.
267                           Add Link Fail interrupt TP failure detection.
268                           Add timer based link change detection.
269                           Plugged a memory leak in de4x5_queue_pkt().
270       0.31    13-Jun-95   Fixed PCI stuff for 1.3.1.
271       0.32    26-Jun-95   Added verify_area() calls in de4x5_ioctl() from a
272                           suggestion by <heiko@colossus.escape.de>.
273       0.33     8-Aug-95   Add shared interrupt support (not released yet).
274       0.331   21-Aug-95   Fix de4x5_open() with fast CPUs.
275                           Fix de4x5_interrupt().
276                           Fix dc21140_autoconf() mess.
277                           No shared interrupt support.
278       0.332   11-Sep-95   Added MII management interface routines.
279       0.40     5-Mar-96   Fix setup frame timeout <maartenb@hpkuipc.cern.ch>.
280                           Add kernel timer code (h/w is too flaky).
281                           Add MII based PHY autosense.
282                           Add new multicasting code.
283                           Add new autosense algorithms for media/mode
284                           selection using kernel scheduling/timing.
285                           Re-formatted.
286                           Made changes suggested by <jeff@router.patch.net>:
287                             Change driver to detect all DECchip based cards
288                             with DEC_ONLY restriction a special case.
289                             Changed driver to autoprobe as a module. No irq
290                             checking is done now - assume BIOS is good!
291                           Added SMC9332 detection <manabe@Roy.dsl.tutics.ac.jp>
292       0.41    21-Mar-96   Don't check for get_hw_addr checksum unless DEC card
293                           only <niles@axp745gsfc.nasa.gov>
294                           Fix for multiple PCI cards reported by <jos@xos.nl>
295                           Duh, put the IRQF_SHARED flag into request_interrupt().
296                           Fix SMC ethernet address in enet_det[].
297                           Print chip name instead of "UNKNOWN" during boot.
298       0.42    26-Apr-96   Fix MII write TA bit error.
299                           Fix bug in dc21040 and dc21041 autosense code.
300                           Remove buffer copies on receive for Intels.
301                           Change sk_buff handling during media disconnects to
302                            eliminate DUP packets.
303                           Add dynamic TX thresholding.
304                           Change all chips to use perfect multicast filtering.
305                           Fix alloc_device() bug <jari@markkus2.fimr.fi>
306       0.43   21-Jun-96    Fix unconnected media TX retry bug.
307                           Add Accton to the list of broken cards.
308                           Fix TX under-run bug for non DC21140 chips.
309                           Fix boot command probe bug in alloc_device() as
310                            reported by <koen.gadeyne@barco.com> and
311                            <orava@nether.tky.hut.fi>.
312                           Add cache locks to prevent a race condition as
313                            reported by <csd@microplex.com> and
314                            <baba@beckman.uiuc.edu>.
315                           Upgraded alloc_device() code.
316       0.431  28-Jun-96    Fix potential bug in queue_pkt() from discussion
317                           with <csd@microplex.com>
318       0.44   13-Aug-96    Fix RX overflow bug in 2114[023] chips.
319                           Fix EISA probe bugs reported by <os2@kpi.kharkov.ua>
320                           and <michael@compurex.com>.
321       0.441   9-Sep-96    Change dc21041_autoconf() to probe quiet BNC media
322                            with a loopback packet.
323       0.442   9-Sep-96    Include AUI in dc21041 media printout. Bug reported
324                            by <bhat@mundook.cs.mu.OZ.AU>
325       0.45    8-Dec-96    Include endian functions for PPC use, from work
326                            by <cort@cs.nmt.edu> and <g.thomas@opengroup.org>.
327       0.451  28-Dec-96    Added fix to allow autoprobe for modules after
328                            suggestion from <mjacob@feral.com>.
329       0.5    30-Jan-97    Added SROM decoding functions.
330                           Updated debug flags.
331                           Fix sleep/wakeup calls for PCI cards, bug reported
332                            by <cross@gweep.lkg.dec.com>.
333                           Added multi-MAC, one SROM feature from discussion
334                            with <mjacob@feral.com>.
335                           Added full module autoprobe capability.
336                           Added attempt to use an SMC9332 with broken SROM.
337                           Added fix for ZYNX multi-mac cards that didn't
338                            get their IRQs wired correctly.
339       0.51   13-Feb-97    Added endian fixes for the SROM accesses from
340                            <paubert@iram.es>
341                           Fix init_connection() to remove extra device reset.
342                           Fix MAC/PHY reset ordering in dc21140m_autoconf().
343                           Fix initialisation problem with lp->timeout in
344                            typeX_infoblock() from <paubert@iram.es>.
345                           Fix MII PHY reset problem from work done by
346                            <paubert@iram.es>.
347       0.52   26-Apr-97    Some changes may not credit the right people -
348                            a disk crash meant I lost some mail.
349                           Change RX interrupt routine to drop rather than
350                            defer packets to avoid hang reported by
351                            <g.thomas@opengroup.org>.
352                           Fix srom_exec() to return for COMPACT and type 1
353                            infoblocks.
354                           Added DC21142 and DC21143 functions.
355                           Added byte counters from <phil@tazenda.demon.co.uk>
356                           Added IRQF_DISABLED temporary fix from
357                            <mjacob@feral.com>.
358       0.53   12-Nov-97    Fix the *_probe() to include 'eth??' name during
359                            module load: bug reported by
360                            <Piete.Brooks@cl.cam.ac.uk>
361                           Fix multi-MAC, one SROM, to work with 2114x chips:
362                            bug reported by <cmetz@inner.net>.
363                           Make above search independent of BIOS device scan
364                            direction.
365                           Completed DC2114[23] autosense functions.
366       0.531  21-Dec-97    Fix DE500-XA 100Mb/s bug reported by
367                            <robin@intercore.com
368                           Fix type1_infoblock() bug introduced in 0.53, from
369                            problem reports by
370                            <parmee@postecss.ncrfran.france.ncr.com> and
371                            <jo@ice.dillingen.baynet.de>.
372                           Added argument list to set up each board from either
373                            a module's command line or a compiled in #define.
374                           Added generic MII PHY functionality to deal with
375                            newer PHY chips.
376                           Fix the mess in 2.1.67.
377       0.532   5-Jan-98    Fix bug in mii_get_phy() reported by
378                            <redhat@cococo.net>.
379                           Fix bug in pci_probe() for 64 bit systems reported
380                            by <belliott@accessone.com>.
381       0.533   9-Jan-98    Fix more 64 bit bugs reported by <jal@cs.brown.edu>.
382       0.534  24-Jan-98    Fix last (?) endian bug from <geert@linux-m68k.org>
383       0.535  21-Feb-98    Fix Ethernet Address PROM reset bug for DC21040.
384       0.536  21-Mar-98    Change pci_probe() to use the pci_dev structure.
385                           **Incompatible with 2.0.x from here.**
386       0.540   5-Jul-98    Atomicize assertion of dev->interrupt for SMP
387                            from <lma@varesearch.com>
388                           Add TP, AUI and BNC cases to 21140m_autoconf() for
389                            case where a 21140 under SROM control uses, e.g. AUI
390                            from problem report by <delchini@lpnp09.in2p3.fr>
391                           Add MII parallel detection to 2114x_autoconf() for
392                            case where no autonegotiation partner exists from
393                            problem report by <mlapsley@ndirect.co.uk>.
394                           Add ability to force connection type directly even
395                            when using SROM control from problem report by
396                            <earl@exis.net>.
397                           Updated the PCI interface to conform with the latest
398                            version. I hope nothing is broken...
399                           Add TX done interrupt modification from suggestion
400                            by <Austin.Donnelly@cl.cam.ac.uk>.
401                           Fix is_anc_capable() bug reported by
402                            <Austin.Donnelly@cl.cam.ac.uk>.
403                           Fix type[13]_infoblock() bug: during MII search, PHY
404                            lp->rst not run because lp->ibn not initialised -
405                            from report & fix by <paubert@iram.es>.
406                           Fix probe bug with EISA & PCI cards present from
407                            report by <eirik@netcom.com>.
408       0.541  24-Aug-98    Fix compiler problems associated with i386-string
409                            ops from multiple bug reports and temporary fix
410                            from <paubert@iram.es>.
411                           Fix pci_probe() to correctly emulate the old
412                            pcibios_find_class() function.
413                           Add an_exception() for old ZYNX346 and fix compile
414                            warning on PPC & SPARC, from <ecd@skynet.be>.
415                           Fix lastPCI to correctly work with compiled in
416                            kernels and modules from bug report by
417                            <Zlatko.Calusic@CARNet.hr> et al.
418       0.542  15-Sep-98    Fix dc2114x_autoconf() to stop multiple messages
419                            when media is unconnected.
420                           Change dev->interrupt to lp->interrupt to ensure
421                            alignment for Alpha's and avoid their unaligned
422                            access traps. This flag is merely for log messages:
423                            should do something more definitive though...
424       0.543  30-Dec-98    Add SMP spin locking.
425       0.544   8-May-99    Fix for buggy SROM in Motorola embedded boards using
426                            a 21143 by <mmporter@home.com>.
427                           Change PCI/EISA bus probing order.
428       0.545  28-Nov-99    Further Moto SROM bug fix from
429                            <mporter@eng.mcd.mot.com>
430                           Remove double checking for DEBUG_RX in de4x5_dbg_rx()
431                            from report by <geert@linux-m68k.org>
432       0.546  22-Feb-01    Fixes Alpha XP1000 oops.  The srom_search function
433                            was causing a page fault when initializing the
434                            variable 'pb', on a non de4x5 PCI device, in this
435                            case a PCI bridge (DEC chip 21152). The value of
436                            'pb' is now only initialized if a de4x5 chip is
437                            present.
438                            <france@handhelds.org>
439       0.547  08-Nov-01    Use library crc32 functions by <Matt_Domsch@dell.com>
440       0.548  30-Aug-03    Big 2.6 cleanup. Ported to PCI/EISA probing and
441                            generic DMA APIs. Fixed DE425 support on Alpha.
442                            <maz@wild-wind.fr.eu.org>
443     =========================================================================
444 */
445
446 #include <linux/module.h>
447 #include <linux/kernel.h>
448 #include <linux/string.h>
449 #include <linux/interrupt.h>
450 #include <linux/ptrace.h>
451 #include <linux/errno.h>
452 #include <linux/ioport.h>
453 #include <linux/slab.h>
454 #include <linux/pci.h>
455 #include <linux/eisa.h>
456 #include <linux/delay.h>
457 #include <linux/init.h>
458 #include <linux/spinlock.h>
459 #include <linux/crc32.h>
460 #include <linux/netdevice.h>
461 #include <linux/etherdevice.h>
462 #include <linux/skbuff.h>
463 #include <linux/time.h>
464 #include <linux/types.h>
465 #include <linux/unistd.h>
466 #include <linux/ctype.h>
467 #include <linux/dma-mapping.h>
468 #include <linux/moduleparam.h>
469 #include <linux/bitops.h>
470
471 #include <asm/io.h>
472 #include <asm/dma.h>
473 #include <asm/byteorder.h>
474 #include <asm/unaligned.h>
475 #include <asm/uaccess.h>
476 #ifdef CONFIG_PPC_PMAC
477 #include <asm/machdep.h>
478 #endif /* CONFIG_PPC_PMAC */
479
480 #include "de4x5.h"
481
482 static char version[] __devinitdata = "de4x5.c:V0.546 2001/02/22 davies@maniac.ultranet.com\n";
483
484 #define c_char const char
485
486 /*
487 ** MII Information
488 */
489 struct phy_table {
490     int reset;              /* Hard reset required?                         */
491     int id;                 /* IEEE OUI                                     */
492     int ta;                 /* One cycle TA time - 802.3u is confusing here */
493     struct {                /* Non autonegotiation (parallel) speed det.    */
494         int reg;
495         int mask;
496         int value;
497     } spd;
498 };
499
500 struct mii_phy {
501     int reset;              /* Hard reset required?                      */
502     int id;                 /* IEEE OUI                                  */
503     int ta;                 /* One cycle TA time                         */
504     struct {                /* Non autonegotiation (parallel) speed det. */
505         int reg;
506         int mask;
507         int value;
508     } spd;
509     int addr;               /* MII address for the PHY                   */
510     u_char  *gep;           /* Start of GEP sequence block in SROM       */
511     u_char  *rst;           /* Start of reset sequence in SROM           */
512     u_int mc;               /* Media Capabilities                        */
513     u_int ana;              /* NWay Advertisement                        */
514     u_int fdx;              /* Full DupleX capabilities for each media   */
515     u_int ttm;              /* Transmit Threshold Mode for each media    */
516     u_int mci;              /* 21142 MII Connector Interrupt info        */
517 };
518
519 #define DE4X5_MAX_PHY 8     /* Allow upto 8 attached PHY devices per board */
520
521 struct sia_phy {
522     u_char mc;              /* Media Code                                */
523     u_char ext;             /* csr13-15 valid when set                   */
524     int csr13;              /* SIA Connectivity Register                 */
525     int csr14;              /* SIA TX/RX Register                        */
526     int csr15;              /* SIA General Register                      */
527     int gepc;               /* SIA GEP Control Information               */
528     int gep;                /* SIA GEP Data                              */
529 };
530
531 /*
532 ** Define the know universe of PHY devices that can be
533 ** recognised by this driver.
534 */
535 static struct phy_table phy_info[] = {
536     {0, NATIONAL_TX, 1, {0x19, 0x40, 0x00}},       /* National TX      */
537     {1, BROADCOM_T4, 1, {0x10, 0x02, 0x02}},       /* Broadcom T4      */
538     {0, SEEQ_T4    , 1, {0x12, 0x10, 0x10}},       /* SEEQ T4          */
539     {0, CYPRESS_T4 , 1, {0x05, 0x20, 0x20}},       /* Cypress T4       */
540     {0, 0x7810     , 1, {0x14, 0x0800, 0x0800}}    /* Level One LTX970 */
541 };
542
543 /*
544 ** These GENERIC values assumes that the PHY devices follow 802.3u and
545 ** allow parallel detection to set the link partner ability register.
546 ** Detection of 100Base-TX [H/F Duplex] and 100Base-T4 is supported.
547 */
548 #define GENERIC_REG   0x05      /* Autoneg. Link Partner Advertisement Reg. */
549 #define GENERIC_MASK  MII_ANLPA_100M /* All 100Mb/s Technologies            */
550 #define GENERIC_VALUE MII_ANLPA_100M /* 100B-TX, 100B-TX FDX, 100B-T4       */
551
552 /*
553 ** Define special SROM detection cases
554 */
555 static c_char enet_det[][ETH_ALEN] = {
556     {0x00, 0x00, 0xc0, 0x00, 0x00, 0x00},
557     {0x00, 0x00, 0xe8, 0x00, 0x00, 0x00}
558 };
559
560 #define SMC    1
561 #define ACCTON 2
562
563 /*
564 ** SROM Repair definitions. If a broken SROM is detected a card may
565 ** use this information to help figure out what to do. This is a
566 ** "stab in the dark" and so far for SMC9332's only.
567 */
568 static c_char srom_repair_info[][100] = {
569     {0x00,0x1e,0x00,0x00,0x00,0x08,             /* SMC9332 */
570      0x1f,0x01,0x8f,0x01,0x00,0x01,0x00,0x02,
571      0x01,0x00,0x00,0x78,0xe0,0x01,0x00,0x50,
572      0x00,0x18,}
573 };
574
575
576 #ifdef DE4X5_DEBUG
577 static int de4x5_debug = DE4X5_DEBUG;
578 #else
579 /*static int de4x5_debug = (DEBUG_MII | DEBUG_SROM | DEBUG_PCICFG | DEBUG_MEDIA | DEBUG_VERSION);*/
580 static int de4x5_debug = (DEBUG_MEDIA | DEBUG_VERSION);
581 #endif
582
583 /*
584 ** Allow per adapter set up. For modules this is simply a command line
585 ** parameter, e.g.:
586 ** insmod de4x5 args='eth1:fdx autosense=BNC eth0:autosense=100Mb'.
587 **
588 ** For a compiled in driver, place e.g.
589 **     #define DE4X5_PARM "eth0:fdx autosense=AUI eth2:autosense=TP"
590 ** here
591 */
592 #ifdef DE4X5_PARM
593 static char *args = DE4X5_PARM;
594 #else
595 static char *args;
596 #endif
597
598 struct parameters {
599     bool fdx;
600     int autosense;
601 };
602
603 #define DE4X5_AUTOSENSE_MS 250      /* msec autosense tick (DE500) */
604
605 #define DE4X5_NDA 0xffe0            /* No Device (I/O) Address */
606
607 /*
608 ** Ethernet PROM defines
609 */
610 #define PROBE_LENGTH    32
611 #define ETH_PROM_SIG    0xAA5500FFUL
612
613 /*
614 ** Ethernet Info
615 */
616 #define PKT_BUF_SZ      1536            /* Buffer size for each Tx/Rx buffer */
617 #define IEEE802_3_SZ    1518            /* Packet + CRC */
618 #define MAX_PKT_SZ      1514            /* Maximum ethernet packet length */
619 #define MAX_DAT_SZ      1500            /* Maximum ethernet data length */
620 #define MIN_DAT_SZ      1               /* Minimum ethernet data length */
621 #define PKT_HDR_LEN     14              /* Addresses and data length info */
622 #define FAKE_FRAME_LEN  (MAX_PKT_SZ + 1)
623 #define QUEUE_PKT_TIMEOUT (3*HZ)        /* 3 second timeout */
624
625
626 /*
627 ** EISA bus defines
628 */
629 #define DE4X5_EISA_IO_PORTS   0x0c00    /* I/O port base address, slot 0 */
630 #define DE4X5_EISA_TOTAL_SIZE 0x100     /* I/O address extent */
631
632 #define EISA_ALLOWED_IRQ_LIST  {5, 9, 10, 11}
633
634 #define DE4X5_SIGNATURE {"DE425","DE434","DE435","DE450","DE500"}
635 #define DE4X5_NAME_LENGTH 8
636
637 static c_char *de4x5_signatures[] = DE4X5_SIGNATURE;
638
639 /*
640 ** Ethernet PROM defines for DC21040
641 */
642 #define PROBE_LENGTH    32
643 #define ETH_PROM_SIG    0xAA5500FFUL
644
645 /*
646 ** PCI Bus defines
647 */
648 #define PCI_MAX_BUS_NUM      8
649 #define DE4X5_PCI_TOTAL_SIZE 0x80       /* I/O address extent */
650 #define DE4X5_CLASS_CODE     0x00020000 /* Network controller, Ethernet */
651
652 /*
653 ** Memory Alignment. Each descriptor is 4 longwords long. To force a
654 ** particular alignment on the TX descriptor, adjust DESC_SKIP_LEN and
655 ** DESC_ALIGN. ALIGN aligns the start address of the private memory area
656 ** and hence the RX descriptor ring's first entry.
657 */
658 #define DE4X5_ALIGN4      ((u_long)4 - 1)     /* 1 longword align */
659 #define DE4X5_ALIGN8      ((u_long)8 - 1)     /* 2 longword align */
660 #define DE4X5_ALIGN16     ((u_long)16 - 1)    /* 4 longword align */
661 #define DE4X5_ALIGN32     ((u_long)32 - 1)    /* 8 longword align */
662 #define DE4X5_ALIGN64     ((u_long)64 - 1)    /* 16 longword align */
663 #define DE4X5_ALIGN128    ((u_long)128 - 1)   /* 32 longword align */
664
665 #define DE4X5_ALIGN         DE4X5_ALIGN32           /* Keep the DC21040 happy... */
666 #define DE4X5_CACHE_ALIGN   CAL_16LONG
667 #define DESC_SKIP_LEN DSL_0             /* Must agree with DESC_ALIGN */
668 /*#define DESC_ALIGN    u32 dummy[4];  / * Must agree with DESC_SKIP_LEN */
669 #define DESC_ALIGN
670
671 #ifndef DEC_ONLY                        /* See README.de4x5 for using this */
672 static int dec_only;
673 #else
674 static int dec_only = 1;
675 #endif
676
677 /*
678 ** DE4X5 IRQ ENABLE/DISABLE
679 */
680 #define ENABLE_IRQs { \
681     imr |= lp->irq_en;\
682     outl(imr, DE4X5_IMR);               /* Enable the IRQs */\
683 }
684
685 #define DISABLE_IRQs {\
686     imr = inl(DE4X5_IMR);\
687     imr &= ~lp->irq_en;\
688     outl(imr, DE4X5_IMR);               /* Disable the IRQs */\
689 }
690
691 #define UNMASK_IRQs {\
692     imr |= lp->irq_mask;\
693     outl(imr, DE4X5_IMR);               /* Unmask the IRQs */\
694 }
695
696 #define MASK_IRQs {\
697     imr = inl(DE4X5_IMR);\
698     imr &= ~lp->irq_mask;\
699     outl(imr, DE4X5_IMR);               /* Mask the IRQs */\
700 }
701
702 /*
703 ** DE4X5 START/STOP
704 */
705 #define START_DE4X5 {\
706     omr = inl(DE4X5_OMR);\
707     omr |= OMR_ST | OMR_SR;\
708     outl(omr, DE4X5_OMR);               /* Enable the TX and/or RX */\
709 }
710
711 #define STOP_DE4X5 {\
712     omr = inl(DE4X5_OMR);\
713     omr &= ~(OMR_ST|OMR_SR);\
714     outl(omr, DE4X5_OMR);               /* Disable the TX and/or RX */ \
715 }
716
717 /*
718 ** DE4X5 SIA RESET
719 */
720 #define RESET_SIA outl(0, DE4X5_SICR);  /* Reset SIA connectivity regs */
721
722 /*
723 ** DE500 AUTOSENSE TIMER INTERVAL (MILLISECS)
724 */
725 #define DE4X5_AUTOSENSE_MS  250
726
727 /*
728 ** SROM Structure
729 */
730 struct de4x5_srom {
731     char sub_vendor_id[2];
732     char sub_system_id[2];
733     char reserved[12];
734     char id_block_crc;
735     char reserved2;
736     char version;
737     char num_controllers;
738     char ieee_addr[6];
739     char info[100];
740     short chksum;
741 };
742 #define SUB_VENDOR_ID 0x500a
743
744 /*
745 ** DE4X5 Descriptors. Make sure that all the RX buffers are contiguous
746 ** and have sizes of both a power of 2 and a multiple of 4.
747 ** A size of 256 bytes for each buffer could be chosen because over 90% of
748 ** all packets in our network are <256 bytes long and 64 longword alignment
749 ** is possible. 1536 showed better 'ttcp' performance. Take your pick. 32 TX
750 ** descriptors are needed for machines with an ALPHA CPU.
751 */
752 #define NUM_RX_DESC 8                   /* Number of RX descriptors   */
753 #define NUM_TX_DESC 32                  /* Number of TX descriptors   */
754 #define RX_BUFF_SZ  1536                /* Power of 2 for kmalloc and */
755                                         /* Multiple of 4 for DC21040  */
756                                         /* Allows 512 byte alignment  */
757 struct de4x5_desc {
758     volatile __le32 status;
759     __le32 des1;
760     __le32 buf;
761     __le32 next;
762     DESC_ALIGN
763 };
764
765 /*
766 ** The DE4X5 private structure
767 */
768 #define DE4X5_PKT_STAT_SZ 16
769 #define DE4X5_PKT_BIN_SZ  128            /* Should be >=100 unless you
770                                             increase DE4X5_PKT_STAT_SZ */
771
772 struct pkt_stats {
773         u_int bins[DE4X5_PKT_STAT_SZ];      /* Private stats counters       */
774         u_int unicast;
775         u_int multicast;
776         u_int broadcast;
777         u_int excessive_collisions;
778         u_int tx_underruns;
779         u_int excessive_underruns;
780         u_int rx_runt_frames;
781         u_int rx_collision;
782         u_int rx_dribble;
783         u_int rx_overflow;
784 };
785
786 struct de4x5_private {
787     char adapter_name[80];                  /* Adapter name                 */
788     u_long interrupt;                       /* Aligned ISR flag             */
789     struct de4x5_desc *rx_ring;             /* RX descriptor ring           */
790     struct de4x5_desc *tx_ring;             /* TX descriptor ring           */
791     struct sk_buff *tx_skb[NUM_TX_DESC];    /* TX skb for freeing when sent */
792     struct sk_buff *rx_skb[NUM_RX_DESC];    /* RX skb's                     */
793     int rx_new, rx_old;                     /* RX descriptor ring pointers  */
794     int tx_new, tx_old;                     /* TX descriptor ring pointers  */
795     char setup_frame[SETUP_FRAME_LEN];      /* Holds MCA and PA info.       */
796     char frame[64];                         /* Min sized packet for loopback*/
797     spinlock_t lock;                        /* Adapter specific spinlock    */
798     struct net_device_stats stats;          /* Public stats                 */
799     struct pkt_stats pktStats;              /* Private stats counters       */
800     char rxRingSize;
801     char txRingSize;
802     int  bus;                               /* EISA or PCI                  */
803     int  bus_num;                           /* PCI Bus number               */
804     int  device;                            /* Device number on PCI bus     */
805     int  state;                             /* Adapter OPENED or CLOSED     */
806     int  chipset;                           /* DC21040, DC21041 or DC21140  */
807     s32  irq_mask;                          /* Interrupt Mask (Enable) bits */
808     s32  irq_en;                            /* Summary interrupt bits       */
809     int  media;                             /* Media (eg TP), mode (eg 100B)*/
810     int  c_media;                           /* Remember the last media conn */
811     bool fdx;                               /* media full duplex flag       */
812     int  linkOK;                            /* Link is OK                   */
813     int  autosense;                         /* Allow/disallow autosensing   */
814     bool tx_enable;                         /* Enable descriptor polling    */
815     int  setup_f;                           /* Setup frame filtering type   */
816     int  local_state;                       /* State within a 'media' state */
817     struct mii_phy phy[DE4X5_MAX_PHY];      /* List of attached PHY devices */
818     struct sia_phy sia;                     /* SIA PHY Information          */
819     int  active;                            /* Index to active PHY device   */
820     int  mii_cnt;                           /* Number of attached PHY's     */
821     int  timeout;                           /* Scheduling counter           */
822     struct timer_list timer;                /* Timer info for kernel        */
823     int tmp;                                /* Temporary global per card    */
824     struct {
825         u_long lock;                        /* Lock the cache accesses      */
826         s32 csr0;                           /* Saved Bus Mode Register      */
827         s32 csr6;                           /* Saved Operating Mode Reg.    */
828         s32 csr7;                           /* Saved IRQ Mask Register      */
829         s32 gep;                            /* Saved General Purpose Reg.   */
830         s32 gepc;                           /* Control info for GEP         */
831         s32 csr13;                          /* Saved SIA Connectivity Reg.  */
832         s32 csr14;                          /* Saved SIA TX/RX Register     */
833         s32 csr15;                          /* Saved SIA General Register   */
834         int save_cnt;                       /* Flag if state already saved  */
835         struct sk_buff_head queue;          /* Save the (re-ordered) skb's  */
836     } cache;
837     struct de4x5_srom srom;                 /* A copy of the SROM           */
838     int cfrv;                               /* Card CFRV copy */
839     int rx_ovf;                             /* Check for 'RX overflow' tag  */
840     bool useSROM;                           /* For non-DEC card use SROM    */
841     bool useMII;                            /* Infoblock using the MII      */
842     int asBitValid;                         /* Autosense bits in GEP?       */
843     int asPolarity;                         /* 0 => asserted high           */
844     int asBit;                              /* Autosense bit number in GEP  */
845     int defMedium;                          /* SROM default medium          */
846     int tcount;                             /* Last infoblock number        */
847     int infoblock_init;                     /* Initialised this infoblock?  */
848     int infoleaf_offset;                    /* SROM infoleaf for controller */
849     s32 infoblock_csr6;                     /* csr6 value in SROM infoblock */
850     int infoblock_media;                    /* infoblock media              */
851     int (*infoleaf_fn)(struct net_device *);    /* Pointer to infoleaf function */
852     u_char *rst;                            /* Pointer to Type 5 reset info */
853     u_char  ibn;                            /* Infoblock number             */
854     struct parameters params;               /* Command line/ #defined params */
855     struct device *gendev;                  /* Generic device */
856     dma_addr_t dma_rings;                   /* DMA handle for rings         */
857     int dma_size;                           /* Size of the DMA area         */
858     char *rx_bufs;                          /* rx bufs on alpha, sparc, ... */
859 };
860
861 /*
862 ** To get around certain poxy cards that don't provide an SROM
863 ** for the second and more DECchip, I have to key off the first
864 ** chip's address. I'll assume there's not a bad SROM iff:
865 **
866 **      o the chipset is the same
867 **      o the bus number is the same and > 0
868 **      o the sum of all the returned hw address bytes is 0 or 0x5fa
869 **
870 ** Also have to save the irq for those cards whose hardware designers
871 ** can't follow the PCI to PCI Bridge Architecture spec.
872 */
873 static struct {
874     int chipset;
875     int bus;
876     int irq;
877     u_char addr[ETH_ALEN];
878 } last = {0,};
879
880 /*
881 ** The transmit ring full condition is described by the tx_old and tx_new
882 ** pointers by:
883 **    tx_old            = tx_new    Empty ring
884 **    tx_old            = tx_new+1  Full ring
885 **    tx_old+txRingSize = tx_new+1  Full ring  (wrapped condition)
886 */
887 #define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\
888                         lp->tx_old+lp->txRingSize-lp->tx_new-1:\
889                         lp->tx_old               -lp->tx_new-1)
890
891 #define TX_PKT_PENDING (lp->tx_old != lp->tx_new)
892
893 /*
894 ** Public Functions
895 */
896 static int     de4x5_open(struct net_device *dev);
897 static int     de4x5_queue_pkt(struct sk_buff *skb, struct net_device *dev);
898 static irqreturn_t de4x5_interrupt(int irq, void *dev_id);
899 static int     de4x5_close(struct net_device *dev);
900 static struct  net_device_stats *de4x5_get_stats(struct net_device *dev);
901 static void    de4x5_local_stats(struct net_device *dev, char *buf, int pkt_len);
902 static void    set_multicast_list(struct net_device *dev);
903 static int     de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
904
905 /*
906 ** Private functions
907 */
908 static int     de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev);
909 static int     de4x5_init(struct net_device *dev);
910 static int     de4x5_sw_reset(struct net_device *dev);
911 static int     de4x5_rx(struct net_device *dev);
912 static int     de4x5_tx(struct net_device *dev);
913 static void    de4x5_ast(struct net_device *dev);
914 static int     de4x5_txur(struct net_device *dev);
915 static int     de4x5_rx_ovfc(struct net_device *dev);
916
917 static int     autoconf_media(struct net_device *dev);
918 static void    create_packet(struct net_device *dev, char *frame, int len);
919 static void    load_packet(struct net_device *dev, char *buf, u32 flags, struct sk_buff *skb);
920 static int     dc21040_autoconf(struct net_device *dev);
921 static int     dc21041_autoconf(struct net_device *dev);
922 static int     dc21140m_autoconf(struct net_device *dev);
923 static int     dc2114x_autoconf(struct net_device *dev);
924 static int     srom_autoconf(struct net_device *dev);
925 static int     de4x5_suspect_state(struct net_device *dev, int timeout, int prev_state, int (*fn)(struct net_device *, int), int (*asfn)(struct net_device *));
926 static int     dc21040_state(struct net_device *dev, int csr13, int csr14, int csr15, int timeout, int next_state, int suspect_state, int (*fn)(struct net_device *, int));
927 static int     test_media(struct net_device *dev, s32 irqs, s32 irq_mask, s32 csr13, s32 csr14, s32 csr15, s32 msec);
928 static int     test_for_100Mb(struct net_device *dev, int msec);
929 static int     wait_for_link(struct net_device *dev);
930 static int     test_mii_reg(struct net_device *dev, int reg, int mask, bool pol, long msec);
931 static int     is_spd_100(struct net_device *dev);
932 static int     is_100_up(struct net_device *dev);
933 static int     is_10_up(struct net_device *dev);
934 static int     is_anc_capable(struct net_device *dev);
935 static int     ping_media(struct net_device *dev, int msec);
936 static struct sk_buff *de4x5_alloc_rx_buff(struct net_device *dev, int index, int len);
937 static void    de4x5_free_rx_buffs(struct net_device *dev);
938 static void    de4x5_free_tx_buffs(struct net_device *dev);
939 static void    de4x5_save_skbs(struct net_device *dev);
940 static void    de4x5_rst_desc_ring(struct net_device *dev);
941 static void    de4x5_cache_state(struct net_device *dev, int flag);
942 static void    de4x5_put_cache(struct net_device *dev, struct sk_buff *skb);
943 static void    de4x5_putb_cache(struct net_device *dev, struct sk_buff *skb);
944 static struct  sk_buff *de4x5_get_cache(struct net_device *dev);
945 static void    de4x5_setup_intr(struct net_device *dev);
946 static void    de4x5_init_connection(struct net_device *dev);
947 static int     de4x5_reset_phy(struct net_device *dev);
948 static void    reset_init_sia(struct net_device *dev, s32 sicr, s32 strr, s32 sigr);
949 static int     test_ans(struct net_device *dev, s32 irqs, s32 irq_mask, s32 msec);
950 static int     test_tp(struct net_device *dev, s32 msec);
951 static int     EISA_signature(char *name, struct device *device);
952 static int     PCI_signature(char *name, struct de4x5_private *lp);
953 static void    DevicePresent(struct net_device *dev, u_long iobase);
954 static void    enet_addr_rst(u_long aprom_addr);
955 static int     de4x5_bad_srom(struct de4x5_private *lp);
956 static short   srom_rd(u_long address, u_char offset);
957 static void    srom_latch(u_int command, u_long address);
958 static void    srom_command(u_int command, u_long address);
959 static void    srom_address(u_int command, u_long address, u_char offset);
960 static short   srom_data(u_int command, u_long address);
961 /*static void    srom_busy(u_int command, u_long address);*/
962 static void    sendto_srom(u_int command, u_long addr);
963 static int     getfrom_srom(u_long addr);
964 static int     srom_map_media(struct net_device *dev);
965 static int     srom_infoleaf_info(struct net_device *dev);
966 static void    srom_init(struct net_device *dev);
967 static void    srom_exec(struct net_device *dev, u_char *p);
968 static int     mii_rd(u_char phyreg, u_char phyaddr, u_long ioaddr);
969 static void    mii_wr(int data, u_char phyreg, u_char phyaddr, u_long ioaddr);
970 static int     mii_rdata(u_long ioaddr);
971 static void    mii_wdata(int data, int len, u_long ioaddr);
972 static void    mii_ta(u_long rw, u_long ioaddr);
973 static int     mii_swap(int data, int len);
974 static void    mii_address(u_char addr, u_long ioaddr);
975 static void    sendto_mii(u32 command, int data, u_long ioaddr);
976 static int     getfrom_mii(u32 command, u_long ioaddr);
977 static int     mii_get_oui(u_char phyaddr, u_long ioaddr);
978 static int     mii_get_phy(struct net_device *dev);
979 static void    SetMulticastFilter(struct net_device *dev);
980 static int     get_hw_addr(struct net_device *dev);
981 static void    srom_repair(struct net_device *dev, int card);
982 static int     test_bad_enet(struct net_device *dev, int status);
983 static int     an_exception(struct de4x5_private *lp);
984 static char    *build_setup_frame(struct net_device *dev, int mode);
985 static void    disable_ast(struct net_device *dev);
986 static long    de4x5_switch_mac_port(struct net_device *dev);
987 static int     gep_rd(struct net_device *dev);
988 static void    gep_wr(s32 data, struct net_device *dev);
989 static void    yawn(struct net_device *dev, int state);
990 static void    de4x5_parse_params(struct net_device *dev);
991 static void    de4x5_dbg_open(struct net_device *dev);
992 static void    de4x5_dbg_mii(struct net_device *dev, int k);
993 static void    de4x5_dbg_media(struct net_device *dev);
994 static void    de4x5_dbg_srom(struct de4x5_srom *p);
995 static void    de4x5_dbg_rx(struct sk_buff *skb, int len);
996 static int     de4x5_strncmp(char *a, char *b, int n);
997 static int     dc21041_infoleaf(struct net_device *dev);
998 static int     dc21140_infoleaf(struct net_device *dev);
999 static int     dc21142_infoleaf(struct net_device *dev);
1000 static int     dc21143_infoleaf(struct net_device *dev);
1001 static int     type0_infoblock(struct net_device *dev, u_char count, u_char *p);
1002 static int     type1_infoblock(struct net_device *dev, u_char count, u_char *p);
1003 static int     type2_infoblock(struct net_device *dev, u_char count, u_char *p);
1004 static int     type3_infoblock(struct net_device *dev, u_char count, u_char *p);
1005 static int     type4_infoblock(struct net_device *dev, u_char count, u_char *p);
1006 static int     type5_infoblock(struct net_device *dev, u_char count, u_char *p);
1007 static int     compact_infoblock(struct net_device *dev, u_char count, u_char *p);
1008
1009 /*
1010 ** Note now that module autoprobing is allowed under EISA and PCI. The
1011 ** IRQ lines will not be auto-detected; instead I'll rely on the BIOSes
1012 ** to "do the right thing".
1013 */
1014
1015 static int io=0x0;/* EDIT THIS LINE FOR YOUR CONFIGURATION IF NEEDED        */
1016
1017 module_param(io, int, 0);
1018 module_param(de4x5_debug, int, 0);
1019 module_param(dec_only, int, 0);
1020 module_param(args, charp, 0);
1021
1022 MODULE_PARM_DESC(io, "de4x5 I/O base address");
1023 MODULE_PARM_DESC(de4x5_debug, "de4x5 debug mask");
1024 MODULE_PARM_DESC(dec_only, "de4x5 probe only for Digital boards (0-1)");
1025 MODULE_PARM_DESC(args, "de4x5 full duplex and media type settings; see de4x5.c for details");
1026 MODULE_LICENSE("GPL");
1027
1028 /*
1029 ** List the SROM infoleaf functions and chipsets
1030 */
1031 struct InfoLeaf {
1032     int chipset;
1033     int (*fn)(struct net_device *);
1034 };
1035 static struct InfoLeaf infoleaf_array[] = {
1036     {DC21041, dc21041_infoleaf},
1037     {DC21140, dc21140_infoleaf},
1038     {DC21142, dc21142_infoleaf},
1039     {DC21143, dc21143_infoleaf}
1040 };
1041 #define INFOLEAF_SIZE ARRAY_SIZE(infoleaf_array)
1042
1043 /*
1044 ** List the SROM info block functions
1045 */
1046 static int (*dc_infoblock[])(struct net_device *dev, u_char, u_char *) = {
1047     type0_infoblock,
1048     type1_infoblock,
1049     type2_infoblock,
1050     type3_infoblock,
1051     type4_infoblock,
1052     type5_infoblock,
1053     compact_infoblock
1054 };
1055
1056 #define COMPACT (ARRAY_SIZE(dc_infoblock) - 1)
1057
1058 /*
1059 ** Miscellaneous defines...
1060 */
1061 #define RESET_DE4X5 {\
1062     int i;\
1063     i=inl(DE4X5_BMR);\
1064     mdelay(1);\
1065     outl(i | BMR_SWR, DE4X5_BMR);\
1066     mdelay(1);\
1067     outl(i, DE4X5_BMR);\
1068     mdelay(1);\
1069     for (i=0;i<5;i++) {inl(DE4X5_BMR); mdelay(1);}\
1070     mdelay(1);\
1071 }
1072
1073 #define PHY_HARD_RESET {\
1074     outl(GEP_HRST, DE4X5_GEP);           /* Hard RESET the PHY dev. */\
1075     mdelay(1);                           /* Assert for 1ms */\
1076     outl(0x00, DE4X5_GEP);\
1077     mdelay(2);                           /* Wait for 2ms */\
1078 }
1079
1080
1081 static int __devinit
1082 de4x5_hw_init(struct net_device *dev, u_long iobase, struct device *gendev)
1083 {
1084     char name[DE4X5_NAME_LENGTH + 1];
1085     struct de4x5_private *lp = netdev_priv(dev);
1086     struct pci_dev *pdev = NULL;
1087     int i, status=0;
1088
1089     gendev->driver_data = dev;
1090
1091     /* Ensure we're not sleeping */
1092     if (lp->bus == EISA) {
1093         outb(WAKEUP, PCI_CFPM);
1094     } else {
1095         pdev = to_pci_dev (gendev);
1096         pci_write_config_byte(pdev, PCI_CFDA_PSM, WAKEUP);
1097     }
1098     mdelay(10);
1099
1100     RESET_DE4X5;
1101
1102     if ((inl(DE4X5_STS) & (STS_TS | STS_RS)) != 0) {
1103         return -ENXIO;                       /* Hardware could not reset */
1104     }
1105
1106     /*
1107     ** Now find out what kind of DC21040/DC21041/DC21140 board we have.
1108     */
1109     lp->useSROM = false;
1110     if (lp->bus == PCI) {
1111         PCI_signature(name, lp);
1112     } else {
1113         EISA_signature(name, gendev);
1114     }
1115
1116     if (*name == '\0') {                     /* Not found a board signature */
1117         return -ENXIO;
1118     }
1119
1120     dev->base_addr = iobase;
1121     printk ("%s: %s at 0x%04lx", gendev->bus_id, name, iobase);
1122
1123     status = get_hw_addr(dev);
1124     printk(", h/w address %pM\n", dev->dev_addr);
1125
1126     if (status != 0) {
1127         printk("      which has an Ethernet PROM CRC error.\n");
1128         return -ENXIO;
1129     } else {
1130         skb_queue_head_init(&lp->cache.queue);
1131         lp->cache.gepc = GEP_INIT;
1132         lp->asBit = GEP_SLNK;
1133         lp->asPolarity = GEP_SLNK;
1134         lp->asBitValid = ~0;
1135         lp->timeout = -1;
1136         lp->gendev = gendev;
1137         spin_lock_init(&lp->lock);
1138         init_timer(&lp->timer);
1139         lp->timer.function = (void (*)(unsigned long))de4x5_ast;
1140         lp->timer.data = (unsigned long)dev;
1141         de4x5_parse_params(dev);
1142
1143         /*
1144         ** Choose correct autosensing in case someone messed up
1145         */
1146         lp->autosense = lp->params.autosense;
1147         if (lp->chipset != DC21140) {
1148             if ((lp->chipset==DC21040) && (lp->params.autosense&TP_NW)) {
1149                 lp->params.autosense = TP;
1150             }
1151             if ((lp->chipset==DC21041) && (lp->params.autosense&BNC_AUI)) {
1152                 lp->params.autosense = BNC;
1153             }
1154         }
1155         lp->fdx = lp->params.fdx;
1156         sprintf(lp->adapter_name,"%s (%s)", name, gendev->bus_id);
1157
1158         lp->dma_size = (NUM_RX_DESC + NUM_TX_DESC) * sizeof(struct de4x5_desc);
1159 #if defined(__alpha__) || defined(__powerpc__) || defined(CONFIG_SPARC) || defined(DE4X5_DO_MEMCPY)
1160         lp->dma_size += RX_BUFF_SZ * NUM_RX_DESC + DE4X5_ALIGN;
1161 #endif
1162         lp->rx_ring = dma_alloc_coherent(gendev, lp->dma_size,
1163                                          &lp->dma_rings, GFP_ATOMIC);
1164         if (lp->rx_ring == NULL) {
1165             return -ENOMEM;
1166         }
1167
1168         lp->tx_ring = lp->rx_ring + NUM_RX_DESC;
1169
1170         /*
1171         ** Set up the RX descriptor ring (Intels)
1172         ** Allocate contiguous receive buffers, long word aligned (Alphas)
1173         */
1174 #if !defined(__alpha__) && !defined(__powerpc__) && !defined(CONFIG_SPARC) && !defined(DE4X5_DO_MEMCPY)
1175         for (i=0; i<NUM_RX_DESC; i++) {
1176             lp->rx_ring[i].status = 0;
1177             lp->rx_ring[i].des1 = cpu_to_le32(RX_BUFF_SZ);
1178             lp->rx_ring[i].buf = 0;
1179             lp->rx_ring[i].next = 0;
1180             lp->rx_skb[i] = (struct sk_buff *) 1;     /* Dummy entry */
1181         }
1182
1183 #else
1184         {
1185                 dma_addr_t dma_rx_bufs;
1186
1187                 dma_rx_bufs = lp->dma_rings + (NUM_RX_DESC + NUM_TX_DESC)
1188                         * sizeof(struct de4x5_desc);
1189                 dma_rx_bufs = (dma_rx_bufs + DE4X5_ALIGN) & ~DE4X5_ALIGN;
1190                 lp->rx_bufs = (char *)(((long)(lp->rx_ring + NUM_RX_DESC
1191                         + NUM_TX_DESC) + DE4X5_ALIGN) & ~DE4X5_ALIGN);
1192                 for (i=0; i<NUM_RX_DESC; i++) {
1193                         lp->rx_ring[i].status = 0;
1194                         lp->rx_ring[i].des1 = cpu_to_le32(RX_BUFF_SZ);
1195                         lp->rx_ring[i].buf =
1196                                 cpu_to_le32(dma_rx_bufs+i*RX_BUFF_SZ);
1197                         lp->rx_ring[i].next = 0;
1198                         lp->rx_skb[i] = (struct sk_buff *) 1; /* Dummy entry */
1199                 }
1200
1201         }
1202 #endif
1203
1204         barrier();
1205
1206         lp->rxRingSize = NUM_RX_DESC;
1207         lp->txRingSize = NUM_TX_DESC;
1208
1209         /* Write the end of list marker to the descriptor lists */
1210         lp->rx_ring[lp->rxRingSize - 1].des1 |= cpu_to_le32(RD_RER);
1211         lp->tx_ring[lp->txRingSize - 1].des1 |= cpu_to_le32(TD_TER);
1212
1213         /* Tell the adapter where the TX/RX rings are located. */
1214         outl(lp->dma_rings, DE4X5_RRBA);
1215         outl(lp->dma_rings + NUM_RX_DESC * sizeof(struct de4x5_desc),
1216              DE4X5_TRBA);
1217
1218         /* Initialise the IRQ mask and Enable/Disable */
1219         lp->irq_mask = IMR_RIM | IMR_TIM | IMR_TUM | IMR_UNM;
1220         lp->irq_en   = IMR_NIM | IMR_AIM;
1221
1222         /* Create a loopback packet frame for later media probing */
1223         create_packet(dev, lp->frame, sizeof(lp->frame));
1224
1225         /* Check if the RX overflow bug needs testing for */
1226         i = lp->cfrv & 0x000000fe;
1227         if ((lp->chipset == DC21140) && (i == 0x20)) {
1228             lp->rx_ovf = 1;
1229         }
1230
1231         /* Initialise the SROM pointers if possible */
1232         if (lp->useSROM) {
1233             lp->state = INITIALISED;
1234             if (srom_infoleaf_info(dev)) {
1235                 dma_free_coherent (gendev, lp->dma_size,
1236                                lp->rx_ring, lp->dma_rings);
1237                 return -ENXIO;
1238             }
1239             srom_init(dev);
1240         }
1241
1242         lp->state = CLOSED;
1243
1244         /*
1245         ** Check for an MII interface
1246         */
1247         if ((lp->chipset != DC21040) && (lp->chipset != DC21041)) {
1248             mii_get_phy(dev);
1249         }
1250
1251         printk("      and requires IRQ%d (provided by %s).\n", dev->irq,
1252                ((lp->bus == PCI) ? "PCI BIOS" : "EISA CNFG"));
1253     }
1254
1255     if (de4x5_debug & DEBUG_VERSION) {
1256         printk(version);
1257     }
1258
1259     /* The DE4X5-specific entries in the device structure. */
1260     SET_NETDEV_DEV(dev, gendev);
1261     dev->open = &de4x5_open;
1262     dev->hard_start_xmit = &de4x5_queue_pkt;
1263     dev->stop = &de4x5_close;
1264     dev->get_stats = &de4x5_get_stats;
1265     dev->set_multicast_list = &set_multicast_list;
1266     dev->do_ioctl = &de4x5_ioctl;
1267
1268     dev->mem_start = 0;
1269
1270     /* Fill in the generic fields of the device structure. */
1271     if ((status = register_netdev (dev))) {
1272             dma_free_coherent (gendev, lp->dma_size,
1273                                lp->rx_ring, lp->dma_rings);
1274             return status;
1275     }
1276
1277     /* Let the adapter sleep to save power */
1278     yawn(dev, SLEEP);
1279
1280     return status;
1281 }
1282
1283
1284 static int
1285 de4x5_open(struct net_device *dev)
1286 {
1287     struct de4x5_private *lp = netdev_priv(dev);
1288     u_long iobase = dev->base_addr;
1289     int i, status = 0;
1290     s32 omr;
1291
1292     /* Allocate the RX buffers */
1293     for (i=0; i<lp->rxRingSize; i++) {
1294         if (de4x5_alloc_rx_buff(dev, i, 0) == NULL) {
1295             de4x5_free_rx_buffs(dev);
1296             return -EAGAIN;
1297         }
1298     }
1299
1300     /*
1301     ** Wake up the adapter
1302     */
1303     yawn(dev, WAKEUP);
1304
1305     /*
1306     ** Re-initialize the DE4X5...
1307     */
1308     status = de4x5_init(dev);
1309     spin_lock_init(&lp->lock);
1310     lp->state = OPEN;
1311     de4x5_dbg_open(dev);
1312
1313     if (request_irq(dev->irq, de4x5_interrupt, IRQF_SHARED,
1314                                                      lp->adapter_name, dev)) {
1315         printk("de4x5_open(): Requested IRQ%d is busy - attemping FAST/SHARE...", dev->irq);
1316         if (request_irq(dev->irq, de4x5_interrupt, IRQF_DISABLED | IRQF_SHARED,
1317                                                      lp->adapter_name, dev)) {
1318             printk("\n              Cannot get IRQ- reconfigure your hardware.\n");
1319             disable_ast(dev);
1320             de4x5_free_rx_buffs(dev);
1321             de4x5_free_tx_buffs(dev);
1322             yawn(dev, SLEEP);
1323             lp->state = CLOSED;
1324             return -EAGAIN;
1325         } else {
1326             printk("\n              Succeeded, but you should reconfigure your hardware to avoid this.\n");
1327             printk("WARNING: there may be IRQ related problems in heavily loaded systems.\n");
1328         }
1329     }
1330
1331     lp->interrupt = UNMASK_INTERRUPTS;
1332     dev->trans_start = jiffies;
1333
1334     START_DE4X5;
1335
1336     de4x5_setup_intr(dev);
1337
1338     if (de4x5_debug & DEBUG_OPEN) {
1339         printk("\tsts:  0x%08x\n", inl(DE4X5_STS));
1340         printk("\tbmr:  0x%08x\n", inl(DE4X5_BMR));
1341         printk("\timr:  0x%08x\n", inl(DE4X5_IMR));
1342         printk("\tomr:  0x%08x\n", inl(DE4X5_OMR));
1343         printk("\tsisr: 0x%08x\n", inl(DE4X5_SISR));
1344         printk("\tsicr: 0x%08x\n", inl(DE4X5_SICR));
1345         printk("\tstrr: 0x%08x\n", inl(DE4X5_STRR));
1346         printk("\tsigr: 0x%08x\n", inl(DE4X5_SIGR));
1347     }
1348
1349     return status;
1350 }
1351
1352 /*
1353 ** Initialize the DE4X5 operating conditions. NB: a chip problem with the
1354 ** DC21140 requires using perfect filtering mode for that chip. Since I can't
1355 ** see why I'd want > 14 multicast addresses, I have changed all chips to use
1356 ** the perfect filtering mode. Keep the DMA burst length at 8: there seems
1357 ** to be data corruption problems if it is larger (UDP errors seen from a
1358 ** ttcp source).
1359 */
1360 static int
1361 de4x5_init(struct net_device *dev)
1362 {
1363     /* Lock out other processes whilst setting up the hardware */
1364     netif_stop_queue(dev);
1365
1366     de4x5_sw_reset(dev);
1367
1368     /* Autoconfigure the connected port */
1369     autoconf_media(dev);
1370
1371     return 0;
1372 }
1373
1374 static int
1375 de4x5_sw_reset(struct net_device *dev)
1376 {
1377     struct de4x5_private *lp = netdev_priv(dev);
1378     u_long iobase = dev->base_addr;
1379     int i, j, status = 0;
1380     s32 bmr, omr;
1381
1382     /* Select the MII or SRL port now and RESET the MAC */
1383     if (!lp->useSROM) {
1384         if (lp->phy[lp->active].id != 0) {
1385             lp->infoblock_csr6 = OMR_SDP | OMR_PS | OMR_HBD;
1386         } else {
1387             lp->infoblock_csr6 = OMR_SDP | OMR_TTM;
1388         }
1389         de4x5_switch_mac_port(dev);
1390     }
1391
1392     /*
1393     ** Set the programmable burst length to 8 longwords for all the DC21140
1394     ** Fasternet chips and 4 longwords for all others: DMA errors result
1395     ** without these values. Cache align 16 long.
1396     */
1397     bmr = (lp->chipset==DC21140 ? PBL_8 : PBL_4) | DESC_SKIP_LEN | DE4X5_CACHE_ALIGN;
1398     bmr |= ((lp->chipset & ~0x00ff)==DC2114x ? BMR_RML : 0);
1399     outl(bmr, DE4X5_BMR);
1400
1401     omr = inl(DE4X5_OMR) & ~OMR_PR;             /* Turn off promiscuous mode */
1402     if (lp->chipset == DC21140) {
1403         omr |= (OMR_SDP | OMR_SB);
1404     }
1405     lp->setup_f = PERFECT;
1406     outl(lp->dma_rings, DE4X5_RRBA);
1407     outl(lp->dma_rings + NUM_RX_DESC * sizeof(struct de4x5_desc),
1408          DE4X5_TRBA);
1409
1410     lp->rx_new = lp->rx_old = 0;
1411     lp->tx_new = lp->tx_old = 0;
1412
1413     for (i = 0; i < lp->rxRingSize; i++) {
1414         lp->rx_ring[i].status = cpu_to_le32(R_OWN);
1415     }
1416
1417     for (i = 0; i < lp->txRingSize; i++) {
1418         lp->tx_ring[i].status = cpu_to_le32(0);
1419     }
1420
1421     barrier();
1422
1423     /* Build the setup frame depending on filtering mode */
1424     SetMulticastFilter(dev);
1425
1426     load_packet(dev, lp->setup_frame, PERFECT_F|TD_SET|SETUP_FRAME_LEN, (struct sk_buff *)1);
1427     outl(omr|OMR_ST, DE4X5_OMR);
1428
1429     /* Poll for setup frame completion (adapter interrupts are disabled now) */
1430
1431     for (j=0, i=0;(i<500) && (j==0);i++) {       /* Upto 500ms delay */
1432         mdelay(1);
1433         if ((s32)le32_to_cpu(lp->tx_ring[lp->tx_new].status) >= 0) j=1;
1434     }
1435     outl(omr, DE4X5_OMR);                        /* Stop everything! */
1436
1437     if (j == 0) {
1438         printk("%s: Setup frame timed out, status %08x\n", dev->name,
1439                inl(DE4X5_STS));
1440         status = -EIO;
1441     }
1442
1443     lp->tx_new = (++lp->tx_new) % lp->txRingSize;
1444     lp->tx_old = lp->tx_new;
1445
1446     return status;
1447 }
1448
1449 /*
1450 ** Writes a socket buffer address to the next available transmit descriptor.
1451 */
1452 static int
1453 de4x5_queue_pkt(struct sk_buff *skb, struct net_device *dev)
1454 {
1455     struct de4x5_private *lp = netdev_priv(dev);
1456     u_long iobase = dev->base_addr;
1457     int status = 0;
1458     u_long flags = 0;
1459
1460     netif_stop_queue(dev);
1461     if (!lp->tx_enable) {                   /* Cannot send for now */
1462         return -1;
1463     }
1464
1465     /*
1466     ** Clean out the TX ring asynchronously to interrupts - sometimes the
1467     ** interrupts are lost by delayed descriptor status updates relative to
1468     ** the irq assertion, especially with a busy PCI bus.
1469     */
1470     spin_lock_irqsave(&lp->lock, flags);
1471     de4x5_tx(dev);
1472     spin_unlock_irqrestore(&lp->lock, flags);
1473
1474     /* Test if cache is already locked - requeue skb if so */
1475     if (test_and_set_bit(0, (void *)&lp->cache.lock) && !lp->interrupt)
1476         return -1;
1477
1478     /* Transmit descriptor ring full or stale skb */
1479     if (netif_queue_stopped(dev) || (u_long) lp->tx_skb[lp->tx_new] > 1) {
1480         if (lp->interrupt) {
1481             de4x5_putb_cache(dev, skb);          /* Requeue the buffer */
1482         } else {
1483             de4x5_put_cache(dev, skb);
1484         }
1485         if (de4x5_debug & DEBUG_TX) {
1486             printk("%s: transmit busy, lost media or stale skb found:\n  STS:%08x\n  tbusy:%d\n  IMR:%08x\n  OMR:%08x\n Stale skb: %s\n",dev->name, inl(DE4X5_STS), netif_queue_stopped(dev), inl(DE4X5_IMR), inl(DE4X5_OMR), ((u_long) lp->tx_skb[lp->tx_new] > 1) ? "YES" : "NO");
1487         }
1488     } else if (skb->len > 0) {
1489         /* If we already have stuff queued locally, use that first */
1490         if (!skb_queue_empty(&lp->cache.queue) && !lp->interrupt) {
1491             de4x5_put_cache(dev, skb);
1492             skb = de4x5_get_cache(dev);
1493         }
1494
1495         while (skb && !netif_queue_stopped(dev) &&
1496                (u_long) lp->tx_skb[lp->tx_new] <= 1) {
1497             spin_lock_irqsave(&lp->lock, flags);
1498             netif_stop_queue(dev);
1499             load_packet(dev, skb->data, TD_IC | TD_LS | TD_FS | skb->len, skb);
1500             lp->stats.tx_bytes += skb->len;
1501             outl(POLL_DEMAND, DE4X5_TPD);/* Start the TX */
1502
1503             lp->tx_new = (++lp->tx_new) % lp->txRingSize;
1504             dev->trans_start = jiffies;
1505
1506             if (TX_BUFFS_AVAIL) {
1507                 netif_start_queue(dev);         /* Another pkt may be queued */
1508             }
1509             skb = de4x5_get_cache(dev);
1510             spin_unlock_irqrestore(&lp->lock, flags);
1511         }
1512         if (skb) de4x5_putb_cache(dev, skb);
1513     }
1514
1515     lp->cache.lock = 0;
1516
1517     return status;
1518 }
1519
1520 /*
1521 ** The DE4X5 interrupt handler.
1522 **
1523 ** I/O Read/Writes through intermediate PCI bridges are never 'posted',
1524 ** so that the asserted interrupt always has some real data to work with -
1525 ** if these I/O accesses are ever changed to memory accesses, ensure the
1526 ** STS write is read immediately to complete the transaction if the adapter
1527 ** is not on bus 0. Lost interrupts can still occur when the PCI bus load
1528 ** is high and descriptor status bits cannot be set before the associated
1529 ** interrupt is asserted and this routine entered.
1530 */
1531 static irqreturn_t
1532 de4x5_interrupt(int irq, void *dev_id)
1533 {
1534     struct net_device *dev = dev_id;
1535     struct de4x5_private *lp;
1536     s32 imr, omr, sts, limit;
1537     u_long iobase;
1538     unsigned int handled = 0;
1539
1540     lp = netdev_priv(dev);
1541     spin_lock(&lp->lock);
1542     iobase = dev->base_addr;
1543
1544     DISABLE_IRQs;                        /* Ensure non re-entrancy */
1545
1546     if (test_and_set_bit(MASK_INTERRUPTS, (void*) &lp->interrupt))
1547         printk("%s: Re-entering the interrupt handler.\n", dev->name);
1548
1549     synchronize_irq(dev->irq);
1550
1551     for (limit=0; limit<8; limit++) {
1552         sts = inl(DE4X5_STS);            /* Read IRQ status */
1553         outl(sts, DE4X5_STS);            /* Reset the board interrupts */
1554
1555         if (!(sts & lp->irq_mask)) break;/* All done */
1556         handled = 1;
1557
1558         if (sts & (STS_RI | STS_RU))     /* Rx interrupt (packet[s] arrived) */
1559           de4x5_rx(dev);
1560
1561         if (sts & (STS_TI | STS_TU))     /* Tx interrupt (packet sent) */
1562           de4x5_tx(dev);
1563
1564         if (sts & STS_LNF) {             /* TP Link has failed */
1565             lp->irq_mask &= ~IMR_LFM;
1566         }
1567
1568         if (sts & STS_UNF) {             /* Transmit underrun */
1569             de4x5_txur(dev);
1570         }
1571
1572         if (sts & STS_SE) {              /* Bus Error */
1573             STOP_DE4X5;
1574             printk("%s: Fatal bus error occurred, sts=%#8x, device stopped.\n",
1575                    dev->name, sts);
1576             spin_unlock(&lp->lock);
1577             return IRQ_HANDLED;
1578         }
1579     }
1580
1581     /* Load the TX ring with any locally stored packets */
1582     if (!test_and_set_bit(0, (void *)&lp->cache.lock)) {
1583         while (!skb_queue_empty(&lp->cache.queue) && !netif_queue_stopped(dev) && lp->tx_enable) {
1584             de4x5_queue_pkt(de4x5_get_cache(dev), dev);
1585         }
1586         lp->cache.lock = 0;
1587     }
1588
1589     lp->interrupt = UNMASK_INTERRUPTS;
1590     ENABLE_IRQs;
1591     spin_unlock(&lp->lock);
1592
1593     return IRQ_RETVAL(handled);
1594 }
1595
1596 static int
1597 de4x5_rx(struct net_device *dev)
1598 {
1599     struct de4x5_private *lp = netdev_priv(dev);
1600     u_long iobase = dev->base_addr;
1601     int entry;
1602     s32 status;
1603
1604     for (entry=lp->rx_new; (s32)le32_to_cpu(lp->rx_ring[entry].status)>=0;
1605                                                             entry=lp->rx_new) {
1606         status = (s32)le32_to_cpu(lp->rx_ring[entry].status);
1607
1608         if (lp->rx_ovf) {
1609             if (inl(DE4X5_MFC) & MFC_FOCM) {
1610                 de4x5_rx_ovfc(dev);
1611                 break;
1612             }
1613         }
1614
1615         if (status & RD_FS) {                 /* Remember the start of frame */
1616             lp->rx_old = entry;
1617         }
1618
1619         if (status & RD_LS) {                 /* Valid frame status */
1620             if (lp->tx_enable) lp->linkOK++;
1621             if (status & RD_ES) {             /* There was an error. */
1622                 lp->stats.rx_errors++;        /* Update the error stats. */
1623                 if (status & (RD_RF | RD_TL)) lp->stats.rx_frame_errors++;
1624                 if (status & RD_CE)           lp->stats.rx_crc_errors++;
1625                 if (status & RD_OF)           lp->stats.rx_fifo_errors++;
1626                 if (status & RD_TL)           lp->stats.rx_length_errors++;
1627                 if (status & RD_RF)           lp->pktStats.rx_runt_frames++;
1628                 if (status & RD_CS)           lp->pktStats.rx_collision++;
1629                 if (status & RD_DB)           lp->pktStats.rx_dribble++;
1630                 if (status & RD_OF)           lp->pktStats.rx_overflow++;
1631             } else {                          /* A valid frame received */
1632                 struct sk_buff *skb;
1633                 short pkt_len = (short)(le32_to_cpu(lp->rx_ring[entry].status)
1634                                                                     >> 16) - 4;
1635
1636                 if ((skb = de4x5_alloc_rx_buff(dev, entry, pkt_len)) == NULL) {
1637                     printk("%s: Insufficient memory; nuking packet.\n",
1638                                                                     dev->name);
1639                     lp->stats.rx_dropped++;
1640                 } else {
1641                     de4x5_dbg_rx(skb, pkt_len);
1642
1643                     /* Push up the protocol stack */
1644                     skb->protocol=eth_type_trans(skb,dev);
1645                     de4x5_local_stats(dev, skb->data, pkt_len);
1646                     netif_rx(skb);
1647
1648                     /* Update stats */
1649                     dev->last_rx = jiffies;
1650                     lp->stats.rx_packets++;
1651                     lp->stats.rx_bytes += pkt_len;
1652                 }
1653             }
1654
1655             /* Change buffer ownership for this frame, back to the adapter */
1656             for (;lp->rx_old!=entry;lp->rx_old=(++lp->rx_old)%lp->rxRingSize) {
1657                 lp->rx_ring[lp->rx_old].status = cpu_to_le32(R_OWN);
1658                 barrier();
1659             }
1660             lp->rx_ring[entry].status = cpu_to_le32(R_OWN);
1661             barrier();
1662         }
1663
1664         /*
1665         ** Update entry information
1666         */
1667         lp->rx_new = (++lp->rx_new) % lp->rxRingSize;
1668     }
1669
1670     return 0;
1671 }
1672
1673 static inline void
1674 de4x5_free_tx_buff(struct de4x5_private *lp, int entry)
1675 {
1676     dma_unmap_single(lp->gendev, le32_to_cpu(lp->tx_ring[entry].buf),
1677                      le32_to_cpu(lp->tx_ring[entry].des1) & TD_TBS1,
1678                      DMA_TO_DEVICE);
1679     if ((u_long) lp->tx_skb[entry] > 1)
1680         dev_kfree_skb_irq(lp->tx_skb[entry]);
1681     lp->tx_skb[entry] = NULL;
1682 }
1683
1684 /*
1685 ** Buffer sent - check for TX buffer errors.
1686 */
1687 static int
1688 de4x5_tx(struct net_device *dev)
1689 {
1690     struct de4x5_private *lp = netdev_priv(dev);
1691     u_long iobase = dev->base_addr;
1692     int entry;
1693     s32 status;
1694
1695     for (entry = lp->tx_old; entry != lp->tx_new; entry = lp->tx_old) {
1696         status = (s32)le32_to_cpu(lp->tx_ring[entry].status);
1697         if (status < 0) {                     /* Buffer not sent yet */
1698             break;
1699         } else if (status != 0x7fffffff) {    /* Not setup frame */
1700             if (status & TD_ES) {             /* An error happened */
1701                 lp->stats.tx_errors++;
1702                 if (status & TD_NC) lp->stats.tx_carrier_errors++;
1703                 if (status & TD_LC) lp->stats.tx_window_errors++;
1704                 if (status & TD_UF) lp->stats.tx_fifo_errors++;
1705                 if (status & TD_EC) lp->pktStats.excessive_collisions++;
1706                 if (status & TD_DE) lp->stats.tx_aborted_errors++;
1707
1708                 if (TX_PKT_PENDING) {
1709                     outl(POLL_DEMAND, DE4X5_TPD);/* Restart a stalled TX */
1710                 }
1711             } else {                      /* Packet sent */
1712                 lp->stats.tx_packets++;
1713                 if (lp->tx_enable) lp->linkOK++;
1714             }
1715             /* Update the collision counter */
1716             lp->stats.collisions += ((status & TD_EC) ? 16 :
1717                                                       ((status & TD_CC) >> 3));
1718
1719             /* Free the buffer. */
1720             if (lp->tx_skb[entry] != NULL)
1721                 de4x5_free_tx_buff(lp, entry);
1722         }
1723
1724         /* Update all the pointers */
1725         lp->tx_old = (++lp->tx_old) % lp->txRingSize;
1726     }
1727
1728     /* Any resources available? */
1729     if (TX_BUFFS_AVAIL && netif_queue_stopped(dev)) {
1730         if (lp->interrupt)
1731             netif_wake_queue(dev);
1732         else
1733             netif_start_queue(dev);
1734     }
1735
1736     return 0;
1737 }
1738
1739 static void
1740 de4x5_ast(struct net_device *dev)
1741 {
1742         struct de4x5_private *lp = netdev_priv(dev);
1743         int next_tick = DE4X5_AUTOSENSE_MS;
1744         int dt;
1745
1746         if (lp->useSROM)
1747                 next_tick = srom_autoconf(dev);
1748         else if (lp->chipset == DC21140)
1749                 next_tick = dc21140m_autoconf(dev);
1750         else if (lp->chipset == DC21041)
1751                 next_tick = dc21041_autoconf(dev);
1752         else if (lp->chipset == DC21040)
1753                 next_tick = dc21040_autoconf(dev);
1754         lp->linkOK = 0;
1755
1756         dt = (next_tick * HZ) / 1000;
1757
1758         if (!dt)
1759                 dt = 1;
1760
1761         mod_timer(&lp->timer, jiffies + dt);
1762 }
1763
1764 static int
1765 de4x5_txur(struct net_device *dev)
1766 {
1767     struct de4x5_private *lp = netdev_priv(dev);
1768     u_long iobase = dev->base_addr;
1769     int omr;
1770
1771     omr = inl(DE4X5_OMR);
1772     if (!(omr & OMR_SF) || (lp->chipset==DC21041) || (lp->chipset==DC21040)) {
1773         omr &= ~(OMR_ST|OMR_SR);
1774         outl(omr, DE4X5_OMR);
1775         while (inl(DE4X5_STS) & STS_TS);
1776         if ((omr & OMR_TR) < OMR_TR) {
1777             omr += 0x4000;
1778         } else {
1779             omr |= OMR_SF;
1780         }
1781         outl(omr | OMR_ST | OMR_SR, DE4X5_OMR);
1782     }
1783
1784     return 0;
1785 }
1786
1787 static int
1788 de4x5_rx_ovfc(struct net_device *dev)
1789 {
1790     struct de4x5_private *lp = netdev_priv(dev);
1791     u_long iobase = dev->base_addr;
1792     int omr;
1793
1794     omr = inl(DE4X5_OMR);
1795     outl(omr & ~OMR_SR, DE4X5_OMR);
1796     while (inl(DE4X5_STS) & STS_RS);
1797
1798     for (; (s32)le32_to_cpu(lp->rx_ring[lp->rx_new].status)>=0;) {
1799         lp->rx_ring[lp->rx_new].status = cpu_to_le32(R_OWN);
1800         lp->rx_new = (++lp->rx_new % lp->rxRingSize);
1801     }
1802
1803     outl(omr, DE4X5_OMR);
1804
1805     return 0;
1806 }
1807
1808 static int
1809 de4x5_close(struct net_device *dev)
1810 {
1811     struct de4x5_private *lp = netdev_priv(dev);
1812     u_long iobase = dev->base_addr;
1813     s32 imr, omr;
1814
1815     disable_ast(dev);
1816
1817     netif_stop_queue(dev);
1818
1819     if (de4x5_debug & DEBUG_CLOSE) {
1820         printk("%s: Shutting down ethercard, status was %8.8x.\n",
1821                dev->name, inl(DE4X5_STS));
1822     }
1823
1824     /*
1825     ** We stop the DE4X5 here... mask interrupts and stop TX & RX
1826     */
1827     DISABLE_IRQs;
1828     STOP_DE4X5;
1829
1830     /* Free the associated irq */
1831     free_irq(dev->irq, dev);
1832     lp->state = CLOSED;
1833
1834     /* Free any socket buffers */
1835     de4x5_free_rx_buffs(dev);
1836     de4x5_free_tx_buffs(dev);
1837
1838     /* Put the adapter to sleep to save power */
1839     yawn(dev, SLEEP);
1840
1841     return 0;
1842 }
1843
1844 static struct net_device_stats *
1845 de4x5_get_stats(struct net_device *dev)
1846 {
1847     struct de4x5_private *lp = netdev_priv(dev);
1848     u_long iobase = dev->base_addr;
1849
1850     lp->stats.rx_missed_errors = (int)(inl(DE4X5_MFC) & (MFC_OVFL | MFC_CNTR));
1851
1852     return &lp->stats;
1853 }
1854
1855 static void
1856 de4x5_local_stats(struct net_device *dev, char *buf, int pkt_len)
1857 {
1858     struct de4x5_private *lp = netdev_priv(dev);
1859     int i;
1860
1861     for (i=1; i<DE4X5_PKT_STAT_SZ-1; i++) {
1862         if (pkt_len < (i*DE4X5_PKT_BIN_SZ)) {
1863             lp->pktStats.bins[i]++;
1864             i = DE4X5_PKT_STAT_SZ;
1865         }
1866     }
1867     if (buf[0] & 0x01) {          /* Multicast/Broadcast */
1868         if ((*(s32 *)&buf[0] == -1) && (*(s16 *)&buf[4] == -1)) {
1869             lp->pktStats.broadcast++;
1870         } else {
1871             lp->pktStats.multicast++;
1872         }
1873     } else if ((*(s32 *)&buf[0] == *(s32 *)&dev->dev_addr[0]) &&
1874                (*(s16 *)&buf[4] == *(s16 *)&dev->dev_addr[4])) {
1875         lp->pktStats.unicast++;
1876     }
1877
1878     lp->pktStats.bins[0]++;       /* Duplicates stats.rx_packets */
1879     if (lp->pktStats.bins[0] == 0) { /* Reset counters */
1880         memset((char *)&lp->pktStats, 0, sizeof(lp->pktStats));
1881     }
1882
1883     return;
1884 }
1885
1886 /*
1887 ** Removes the TD_IC flag from previous descriptor to improve TX performance.
1888 ** If the flag is changed on a descriptor that is being read by the hardware,
1889 ** I assume PCI transaction ordering will mean you are either successful or
1890 ** just miss asserting the change to the hardware. Anyway you're messing with
1891 ** a descriptor you don't own, but this shouldn't kill the chip provided
1892 ** the descriptor register is read only to the hardware.
1893 */
1894 static void
1895 load_packet(struct net_device *dev, char *buf, u32 flags, struct sk_buff *skb)
1896 {
1897     struct de4x5_private *lp = netdev_priv(dev);
1898     int entry = (lp->tx_new ? lp->tx_new-1 : lp->txRingSize-1);
1899     dma_addr_t buf_dma = dma_map_single(lp->gendev, buf, flags & TD_TBS1, DMA_TO_DEVICE);
1900
1901     lp->tx_ring[lp->tx_new].buf = cpu_to_le32(buf_dma);
1902     lp->tx_ring[lp->tx_new].des1 &= cpu_to_le32(TD_TER);
1903     lp->tx_ring[lp->tx_new].des1 |= cpu_to_le32(flags);
1904     lp->tx_skb[lp->tx_new] = skb;
1905     lp->tx_ring[entry].des1 &= cpu_to_le32(~TD_IC);
1906     barrier();
1907
1908     lp->tx_ring[lp->tx_new].status = cpu_to_le32(T_OWN);
1909     barrier();
1910 }
1911
1912 /*
1913 ** Set or clear the multicast filter for this adaptor.
1914 */
1915 static void
1916 set_multicast_list(struct net_device *dev)
1917 {
1918     struct de4x5_private *lp = netdev_priv(dev);
1919     u_long iobase = dev->base_addr;
1920
1921     /* First, double check that the adapter is open */
1922     if (lp->state == OPEN) {
1923         if (dev->flags & IFF_PROMISC) {         /* set promiscuous mode */
1924             u32 omr;
1925             omr = inl(DE4X5_OMR);
1926             omr |= OMR_PR;
1927             outl(omr, DE4X5_OMR);
1928         } else {
1929             SetMulticastFilter(dev);
1930             load_packet(dev, lp->setup_frame, TD_IC | PERFECT_F | TD_SET |
1931                                                         SETUP_FRAME_LEN, (struct sk_buff *)1);
1932
1933             lp->tx_new = (++lp->tx_new) % lp->txRingSize;
1934             outl(POLL_DEMAND, DE4X5_TPD);       /* Start the TX */
1935             dev->trans_start = jiffies;
1936         }
1937     }
1938 }
1939
1940 /*
1941 ** Calculate the hash code and update the logical address filter
1942 ** from a list of ethernet multicast addresses.
1943 ** Little endian crc one liner from Matt Thomas, DEC.
1944 */
1945 static void
1946 SetMulticastFilter(struct net_device *dev)
1947 {
1948     struct de4x5_private *lp = netdev_priv(dev);
1949     struct dev_mc_list *dmi=dev->mc_list;
1950     u_long iobase = dev->base_addr;
1951     int i, j, bit, byte;
1952     u16 hashcode;
1953     u32 omr, crc;
1954     char *pa;
1955     unsigned char *addrs;
1956
1957     omr = inl(DE4X5_OMR);
1958     omr &= ~(OMR_PR | OMR_PM);
1959     pa = build_setup_frame(dev, ALL);        /* Build the basic frame */
1960
1961     if ((dev->flags & IFF_ALLMULTI) || (dev->mc_count > 14)) {
1962         omr |= OMR_PM;                       /* Pass all multicasts */
1963     } else if (lp->setup_f == HASH_PERF) {   /* Hash Filtering */
1964         for (i=0;i<dev->mc_count;i++) {      /* for each address in the list */
1965             addrs=dmi->dmi_addr;
1966             dmi=dmi->next;
1967             if ((*addrs & 0x01) == 1) {      /* multicast address? */
1968                 crc = ether_crc_le(ETH_ALEN, addrs);
1969                 hashcode = crc & HASH_BITS;  /* hashcode is 9 LSb of CRC */
1970
1971                 byte = hashcode >> 3;        /* bit[3-8] -> byte in filter */
1972                 bit = 1 << (hashcode & 0x07);/* bit[0-2] -> bit in byte */
1973
1974                 byte <<= 1;                  /* calc offset into setup frame */
1975                 if (byte & 0x02) {
1976                     byte -= 1;
1977                 }
1978                 lp->setup_frame[byte] |= bit;
1979             }
1980         }
1981     } else {                                 /* Perfect filtering */
1982         for (j=0; j<dev->mc_count; j++) {
1983             addrs=dmi->dmi_addr;
1984             dmi=dmi->next;
1985             for (i=0; i<ETH_ALEN; i++) {
1986                 *(pa + (i&1)) = *addrs++;
1987                 if (i & 0x01) pa += 4;
1988             }
1989         }
1990     }
1991     outl(omr, DE4X5_OMR);
1992
1993     return;
1994 }
1995
1996 #ifdef CONFIG_EISA
1997
1998 static u_char de4x5_irq[] = EISA_ALLOWED_IRQ_LIST;
1999
2000 static int __init de4x5_eisa_probe (struct device *gendev)
2001 {
2002         struct eisa_device *edev;
2003         u_long iobase;
2004         u_char irq, regval;
2005         u_short vendor;
2006         u32 cfid;
2007         int status, device;
2008         struct net_device *dev;
2009         struct de4x5_private *lp;
2010
2011         edev = to_eisa_device (gendev);
2012         iobase = edev->base_addr;
2013
2014         if (!request_region (iobase, DE4X5_EISA_TOTAL_SIZE, "de4x5"))
2015                 return -EBUSY;
2016
2017         if (!request_region (iobase + DE4X5_EISA_IO_PORTS,
2018                              DE4X5_EISA_TOTAL_SIZE, "de4x5")) {
2019                 status = -EBUSY;
2020                 goto release_reg_1;
2021         }
2022
2023         if (!(dev = alloc_etherdev (sizeof (struct de4x5_private)))) {
2024                 status = -ENOMEM;
2025                 goto release_reg_2;
2026         }
2027         lp = netdev_priv(dev);
2028
2029         cfid = (u32) inl(PCI_CFID);
2030         lp->cfrv = (u_short) inl(PCI_CFRV);
2031         device = (cfid >> 8) & 0x00ffff00;
2032         vendor = (u_short) cfid;
2033
2034         /* Read the EISA Configuration Registers */
2035         regval = inb(EISA_REG0) & (ER0_INTL | ER0_INTT);
2036 #ifdef CONFIG_ALPHA
2037         /* Looks like the Jensen firmware (rev 2.2) doesn't really
2038          * care about the EISA configuration, and thus doesn't
2039          * configure the PLX bridge properly. Oh well... Simply mimic
2040          * the EISA config file to sort it out. */
2041
2042         /* EISA REG1: Assert DecChip 21040 HW Reset */
2043         outb (ER1_IAM | 1, EISA_REG1);
2044         mdelay (1);
2045
2046         /* EISA REG1: Deassert DecChip 21040 HW Reset */
2047         outb (ER1_IAM, EISA_REG1);
2048         mdelay (1);
2049
2050         /* EISA REG3: R/W Burst Transfer Enable */
2051         outb (ER3_BWE | ER3_BRE, EISA_REG3);
2052
2053         /* 32_bit slave/master, Preempt Time=23 bclks, Unlatched Interrupt */
2054         outb (ER0_BSW | ER0_BMW | ER0_EPT | regval, EISA_REG0);
2055 #endif
2056         irq = de4x5_irq[(regval >> 1) & 0x03];
2057
2058         if (is_DC2114x) {
2059             device = ((lp->cfrv & CFRV_RN) < DC2114x_BRK ? DC21142 : DC21143);
2060         }
2061         lp->chipset = device;
2062         lp->bus = EISA;
2063
2064         /* Write the PCI Configuration Registers */
2065         outl(PCI_COMMAND_IO | PCI_COMMAND_MASTER, PCI_CFCS);
2066         outl(0x00006000, PCI_CFLT);
2067         outl(iobase, PCI_CBIO);
2068
2069         DevicePresent(dev, EISA_APROM);
2070
2071         dev->irq = irq;
2072
2073         if (!(status = de4x5_hw_init (dev, iobase, gendev))) {
2074                 return 0;
2075         }
2076
2077         free_netdev (dev);
2078  release_reg_2:
2079         release_region (iobase + DE4X5_EISA_IO_PORTS, DE4X5_EISA_TOTAL_SIZE);
2080  release_reg_1:
2081         release_region (iobase, DE4X5_EISA_TOTAL_SIZE);
2082
2083         return status;
2084 }
2085
2086 static int __devexit de4x5_eisa_remove (struct device *device)
2087 {
2088         struct net_device *dev;
2089         u_long iobase;
2090
2091         dev = device->driver_data;
2092         iobase = dev->base_addr;
2093
2094         unregister_netdev (dev);
2095         free_netdev (dev);
2096         release_region (iobase + DE4X5_EISA_IO_PORTS, DE4X5_EISA_TOTAL_SIZE);
2097         release_region (iobase, DE4X5_EISA_TOTAL_SIZE);
2098
2099         return 0;
2100 }
2101
2102 static struct eisa_device_id de4x5_eisa_ids[] = {
2103         { "DEC4250", 0 },       /* 0 is the board name index... */
2104         { "" }
2105 };
2106 MODULE_DEVICE_TABLE(eisa, de4x5_eisa_ids);
2107
2108 static struct eisa_driver de4x5_eisa_driver = {
2109         .id_table = de4x5_eisa_ids,
2110         .driver   = {
2111                 .name    = "de4x5",
2112                 .probe   = de4x5_eisa_probe,
2113                 .remove  = __devexit_p (de4x5_eisa_remove),
2114         }
2115 };
2116 MODULE_DEVICE_TABLE(eisa, de4x5_eisa_ids);
2117 #endif
2118
2119 #ifdef CONFIG_PCI
2120
2121 /*
2122 ** This function searches the current bus (which is >0) for a DECchip with an
2123 ** SROM, so that in multiport cards that have one SROM shared between multiple
2124 ** DECchips, we can find the base SROM irrespective of the BIOS scan direction.
2125 ** For single port cards this is a time waster...
2126 */
2127 static void __devinit
2128 srom_search(struct net_device *dev, struct pci_dev *pdev)
2129 {
2130     u_char pb;
2131     u_short vendor, status;
2132     u_int irq = 0, device;
2133     u_long iobase = 0;                     /* Clear upper 32 bits in Alphas */
2134     int i, j;
2135     struct de4x5_private *lp = netdev_priv(dev);
2136     struct list_head *walk;
2137
2138     list_for_each(walk, &pdev->bus_list) {
2139         struct pci_dev *this_dev = pci_dev_b(walk);
2140
2141         /* Skip the pci_bus list entry */
2142         if (list_entry(walk, struct pci_bus, devices) == pdev->bus) continue;
2143
2144         vendor = this_dev->vendor;
2145         device = this_dev->device << 8;
2146         if (!(is_DC21040 || is_DC21041 || is_DC21140 || is_DC2114x)) continue;
2147
2148         /* Get the chip configuration revision register */
2149         pb = this_dev->bus->number;
2150
2151         /* Set the device number information */
2152         lp->device = PCI_SLOT(this_dev->devfn);
2153         lp->bus_num = pb;
2154
2155         /* Set the chipset information */
2156         if (is_DC2114x) {
2157             device = ((this_dev->revision & CFRV_RN) < DC2114x_BRK
2158                       ? DC21142 : DC21143);
2159         }
2160         lp->chipset = device;
2161
2162         /* Get the board I/O address (64 bits on sparc64) */
2163         iobase = pci_resource_start(this_dev, 0);
2164
2165         /* Fetch the IRQ to be used */
2166         irq = this_dev->irq;
2167         if ((irq == 0) || (irq == 0xff) || ((int)irq == -1)) continue;
2168
2169         /* Check if I/O accesses are enabled */
2170         pci_read_config_word(this_dev, PCI_COMMAND, &status);
2171         if (!(status & PCI_COMMAND_IO)) continue;
2172
2173         /* Search for a valid SROM attached to this DECchip */
2174         DevicePresent(dev, DE4X5_APROM);
2175         for (j=0, i=0; i<ETH_ALEN; i++) {
2176             j += (u_char) *((u_char *)&lp->srom + SROM_HWADD + i);
2177         }
2178         if (j != 0 && j != 6 * 0xff) {
2179             last.chipset = device;
2180             last.bus = pb;
2181             last.irq = irq;
2182             for (i=0; i<ETH_ALEN; i++) {
2183                 last.addr[i] = (u_char)*((u_char *)&lp->srom + SROM_HWADD + i);
2184             }
2185             return;
2186         }
2187     }
2188
2189     return;
2190 }
2191
2192 /*
2193 ** PCI bus I/O device probe
2194 ** NB: PCI I/O accesses and Bus Mastering are enabled by the PCI BIOS, not
2195 ** the driver. Some PCI BIOS's, pre V2.1, need the slot + features to be
2196 ** enabled by the user first in the set up utility. Hence we just check for
2197 ** enabled features and silently ignore the card if they're not.
2198 **
2199 ** STOP PRESS: Some BIOS's __require__ the driver to enable the bus mastering
2200 ** bit. Here, check for I/O accesses and then set BM. If you put the card in
2201 ** a non BM slot, you're on your own (and complain to the PC vendor that your
2202 ** PC doesn't conform to the PCI standard)!
2203 **
2204 ** This function is only compatible with the *latest* 2.1.x kernels. For 2.0.x
2205 ** kernels use the V0.535[n] drivers.
2206 */
2207
2208 static int __devinit de4x5_pci_probe (struct pci_dev *pdev,
2209                                    const struct pci_device_id *ent)
2210 {
2211         u_char pb, pbus = 0, dev_num, dnum = 0, timer;
2212         u_short vendor, status;
2213         u_int irq = 0, device;
2214         u_long iobase = 0;      /* Clear upper 32 bits in Alphas */
2215         int error;
2216         struct net_device *dev;
2217         struct de4x5_private *lp;
2218
2219         dev_num = PCI_SLOT(pdev->devfn);
2220         pb = pdev->bus->number;
2221
2222         if (io) { /* probe a single PCI device */
2223                 pbus = (u_short)(io >> 8);
2224                 dnum = (u_short)(io & 0xff);
2225                 if ((pbus != pb) || (dnum != dev_num))
2226                         return -ENODEV;
2227         }
2228
2229         vendor = pdev->vendor;
2230         device = pdev->device << 8;
2231         if (!(is_DC21040 || is_DC21041 || is_DC21140 || is_DC2114x))
2232                 return -ENODEV;
2233
2234         /* Ok, the device seems to be for us. */
2235         if ((error = pci_enable_device (pdev)))
2236                 return error;
2237
2238         if (!(dev = alloc_etherdev (sizeof (struct de4x5_private)))) {
2239                 error = -ENOMEM;
2240                 goto disable_dev;
2241         }
2242
2243         lp = netdev_priv(dev);
2244         lp->bus = PCI;
2245         lp->bus_num = 0;
2246
2247         /* Search for an SROM on this bus */
2248         if (lp->bus_num != pb) {
2249             lp->bus_num = pb;
2250             srom_search(dev, pdev);
2251         }
2252
2253         /* Get the chip configuration revision register */
2254         lp->cfrv = pdev->revision;
2255
2256         /* Set the device number information */
2257         lp->device = dev_num;
2258         lp->bus_num = pb;
2259
2260         /* Set the chipset information */
2261         if (is_DC2114x) {
2262             device = ((lp->cfrv & CFRV_RN) < DC2114x_BRK ? DC21142 : DC21143);
2263         }
2264         lp->chipset = device;
2265
2266         /* Get the board I/O address (64 bits on sparc64) */
2267         iobase = pci_resource_start(pdev, 0);
2268
2269         /* Fetch the IRQ to be used */
2270         irq = pdev->irq;
2271         if ((irq == 0) || (irq == 0xff) || ((int)irq == -1)) {
2272                 error = -ENODEV;
2273                 goto free_dev;
2274         }
2275
2276         /* Check if I/O accesses and Bus Mastering are enabled */
2277         pci_read_config_word(pdev, PCI_COMMAND, &status);
2278 #ifdef __powerpc__
2279         if (!(status & PCI_COMMAND_IO)) {
2280             status |= PCI_COMMAND_IO;
2281             pci_write_config_word(pdev, PCI_COMMAND, status);
2282             pci_read_config_word(pdev, PCI_COMMAND, &status);
2283         }
2284 #endif /* __powerpc__ */
2285         if (!(status & PCI_COMMAND_IO)) {
2286                 error = -ENODEV;
2287                 goto free_dev;
2288         }
2289
2290         if (!(status & PCI_COMMAND_MASTER)) {
2291             status |= PCI_COMMAND_MASTER;
2292             pci_write_config_word(pdev, PCI_COMMAND, status);
2293             pci_read_config_word(pdev, PCI_COMMAND, &status);
2294         }
2295         if (!(status & PCI_COMMAND_MASTER)) {
2296                 error = -ENODEV;
2297                 goto free_dev;
2298         }
2299
2300         /* Check the latency timer for values >= 0x60 */
2301         pci_read_config_byte(pdev, PCI_LATENCY_TIMER, &timer);
2302         if (timer < 0x60) {
2303             pci_write_config_byte(pdev, PCI_LATENCY_TIMER, 0x60);
2304         }
2305
2306         DevicePresent(dev, DE4X5_APROM);
2307
2308         if (!request_region (iobase, DE4X5_PCI_TOTAL_SIZE, "de4x5")) {
2309                 error = -EBUSY;
2310                 goto free_dev;
2311         }
2312
2313         dev->irq = irq;
2314
2315         if ((error = de4x5_hw_init(dev, iobase, &pdev->dev))) {
2316                 goto release;
2317         }
2318
2319         return 0;
2320
2321  release:
2322         release_region (iobase, DE4X5_PCI_TOTAL_SIZE);
2323  free_dev:
2324         free_netdev (dev);
2325  disable_dev:
2326         pci_disable_device (pdev);
2327         return error;
2328 }
2329
2330 static void __devexit de4x5_pci_remove (struct pci_dev *pdev)
2331 {
2332         struct net_device *dev;
2333         u_long iobase;
2334
2335         dev = pdev->dev.driver_data;
2336         iobase = dev->base_addr;
2337
2338         unregister_netdev (dev);
2339         free_netdev (dev);
2340         release_region (iobase, DE4X5_PCI_TOTAL_SIZE);
2341         pci_disable_device (pdev);
2342 }
2343
2344 static struct pci_device_id de4x5_pci_tbl[] = {
2345         { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP,
2346           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 0 },
2347         { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_PLUS,
2348           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 1 },
2349         { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_TULIP_FAST,
2350           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 2 },
2351         { PCI_VENDOR_ID_DEC, PCI_DEVICE_ID_DEC_21142,
2352           PCI_ANY_ID, PCI_ANY_ID, 0, 0, 3 },
2353         { },
2354 };
2355
2356 static struct pci_driver de4x5_pci_driver = {
2357         .name           = "de4x5",
2358         .id_table       = de4x5_pci_tbl,
2359         .probe          = de4x5_pci_probe,
2360         .remove         = __devexit_p (de4x5_pci_remove),
2361 };
2362
2363 #endif
2364
2365 /*
2366 ** Auto configure the media here rather than setting the port at compile
2367 ** time. This routine is called by de4x5_init() and when a loss of media is
2368 ** detected (excessive collisions, loss of carrier, no carrier or link fail
2369 ** [TP] or no recent receive activity) to check whether the user has been
2370 ** sneaky and changed the port on us.
2371 */
2372 static int
2373 autoconf_media(struct net_device *dev)
2374 {
2375         struct de4x5_private *lp = netdev_priv(dev);
2376         u_long iobase = dev->base_addr;
2377
2378         disable_ast(dev);
2379
2380         lp->c_media = AUTO;                     /* Bogus last media */
2381         inl(DE4X5_MFC);                         /* Zero the lost frames counter */
2382         lp->media = INIT;
2383         lp->tcount = 0;
2384
2385         de4x5_ast(dev);
2386
2387         return lp->media;
2388 }
2389
2390 /*
2391 ** Autoconfigure the media when using the DC21040. AUI cannot be distinguished
2392 ** from BNC as the port has a jumper to set thick or thin wire. When set for
2393 ** BNC, the BNC port will indicate activity if it's not terminated correctly.
2394 ** The only way to test for that is to place a loopback packet onto the
2395 ** network and watch for errors. Since we're messing with the interrupt mask
2396 ** register, disable the board interrupts and do not allow any more packets to
2397 ** be queued to the hardware. Re-enable everything only when the media is
2398 ** found.
2399 ** I may have to "age out" locally queued packets so that the higher layer
2400 ** timeouts don't effectively duplicate packets on the network.
2401 */
2402 static int
2403 dc21040_autoconf(struct net_device *dev)
2404 {
2405     struct de4x5_private *lp = netdev_priv(dev);
2406     u_long iobase = dev->base_addr;
2407     int next_tick = DE4X5_AUTOSENSE_MS;
2408     s32 imr;
2409
2410     switch (lp->media) {
2411     case INIT:
2412         DISABLE_IRQs;
2413         lp->tx_enable = false;
2414         lp->timeout = -1;
2415         de4x5_save_skbs(dev);
2416         if ((lp->autosense == AUTO) || (lp->autosense == TP)) {
2417             lp->media = TP;
2418         } else if ((lp->autosense == BNC) || (lp->autosense == AUI) || (lp->autosense == BNC_AUI)) {
2419             lp->media = BNC_AUI;
2420         } else if (lp->autosense == EXT_SIA) {
2421             lp->media = EXT_SIA;
2422         } else {
2423             lp->media = NC;
2424         }
2425         lp->local_state = 0;
2426         next_tick = dc21040_autoconf(dev);
2427         break;
2428
2429     case TP:
2430         next_tick = dc21040_state(dev, 0x8f01, 0xffff, 0x0000, 3000, BNC_AUI,
2431                                                          TP_SUSPECT, test_tp);
2432         break;
2433
2434     case TP_SUSPECT:
2435         next_tick = de4x5_suspect_state(dev, 1000, TP, test_tp, dc21040_autoconf);
2436         break;
2437
2438     case BNC:
2439     case AUI:
2440     case BNC_AUI:
2441         next_tick = dc21040_state(dev, 0x8f09, 0x0705, 0x0006, 3000, EXT_SIA,
2442                                                   BNC_AUI_SUSPECT, ping_media);
2443         break;
2444
2445     case BNC_AUI_SUSPECT:
2446         next_tick = de4x5_suspect_state(dev, 1000, BNC_AUI, ping_media, dc21040_autoconf);
2447         break;
2448
2449     case EXT_SIA:
2450         next_tick = dc21040_state(dev, 0x3041, 0x0000, 0x0006, 3000,
2451                                               NC, EXT_SIA_SUSPECT, ping_media);
2452         break;
2453
2454     case EXT_SIA_SUSPECT:
2455         next_tick = de4x5_suspect_state(dev, 1000, EXT_SIA, ping_media, dc21040_autoconf);
2456         break;
2457
2458     case NC:
2459         /* default to TP for all */
2460         reset_init_sia(dev, 0x8f01, 0xffff, 0x0000);
2461         if (lp->media != lp->c_media) {
2462             de4x5_dbg_media(dev);
2463             lp->c_media = lp->media;
2464         }
2465         lp->media = INIT;
2466         lp->tx_enable = false;
2467         break;
2468     }
2469
2470     return next_tick;
2471 }
2472
2473 static int
2474 dc21040_state(struct net_device *dev, int csr13, int csr14, int csr15, int timeout,
2475               int next_state, int suspect_state,
2476               int (*fn)(struct net_device *, int))
2477 {
2478     struct de4x5_private *lp = netdev_priv(dev);
2479     int next_tick = DE4X5_AUTOSENSE_MS;
2480     int linkBad;
2481
2482     switch (lp->local_state) {
2483     case 0:
2484         reset_init_sia(dev, csr13, csr14, csr15);
2485         lp->local_state++;
2486         next_tick = 500;
2487         break;
2488
2489     case 1:
2490         if (!lp->tx_enable) {
2491             linkBad = fn(dev, timeout);
2492             if (linkBad < 0) {
2493                 next_tick = linkBad & ~TIMER_CB;
2494             } else {
2495                 if (linkBad && (lp->autosense == AUTO)) {
2496                     lp->local_state = 0;
2497                     lp->media = next_state;
2498                 } else {
2499                     de4x5_init_connection(dev);
2500                 }
2501             }
2502         } else if (!lp->linkOK && (lp->autosense == AUTO)) {
2503             lp->media = suspect_state;
2504             next_tick = 3000;
2505         }
2506         break;
2507     }
2508
2509     return next_tick;
2510 }
2511
2512 static int
2513 de4x5_suspect_state(struct net_device *dev, int timeout, int prev_state,
2514                       int (*fn)(struct net_device *, int),
2515                       int (*asfn)(struct net_device *))
2516 {
2517     struct de4x5_private *lp = netdev_priv(dev);
2518     int next_tick = DE4X5_AUTOSENSE_MS;
2519     int linkBad;
2520
2521     switch (lp->local_state) {
2522     case 1:
2523         if (lp->linkOK) {
2524             lp->media = prev_state;
2525         } else {
2526             lp->local_state++;
2527             next_tick = asfn(dev);
2528         }
2529         break;
2530
2531     case 2:
2532         linkBad = fn(dev, timeout);
2533         if (linkBad < 0) {
2534             next_tick = linkBad & ~TIMER_CB;
2535         } else if (!linkBad) {
2536             lp->local_state--;
2537             lp->media = prev_state;
2538         } else {
2539             lp->media = INIT;
2540             lp->tcount++;
2541         }
2542     }
2543
2544     return next_tick;
2545 }
2546
2547 /*
2548 ** Autoconfigure the media when using the DC21041. AUI needs to be tested
2549 ** before BNC, because the BNC port will indicate activity if it's not
2550 ** terminated correctly. The only way to test for that is to place a loopback
2551 ** packet onto the network and watch for errors. Since we're messing with
2552 ** the interrupt mask register, disable the board interrupts and do not allow
2553 ** any more packets to be queued to the hardware. Re-enable everything only
2554 ** when the media is found.
2555 */
2556 static int
2557 dc21041_autoconf(struct net_device *dev)
2558 {
2559     struct de4x5_private *lp = netdev_priv(dev);
2560     u_long iobase = dev->base_addr;
2561     s32 sts, irqs, irq_mask, imr, omr;
2562     int next_tick = DE4X5_AUTOSENSE_MS;
2563
2564     switch (lp->media) {
2565     case INIT:
2566         DISABLE_IRQs;
2567         lp->tx_enable = false;
2568         lp->timeout = -1;
2569         de4x5_save_skbs(dev);          /* Save non transmitted skb's */
2570         if ((lp->autosense == AUTO) || (lp->autosense == TP_NW)) {
2571             lp->media = TP;            /* On chip auto negotiation is broken */
2572         } else if (lp->autosense == TP) {
2573             lp->media = TP;
2574         } else if (lp->autosense == BNC) {
2575             lp->media = BNC;
2576         } else if (lp->autosense == AUI) {
2577             lp->media = AUI;
2578         } else {
2579             lp->media = NC;
2580         }
2581         lp->local_state = 0;
2582         next_tick = dc21041_autoconf(dev);
2583         break;
2584
2585     case TP_NW:
2586         if (lp->timeout < 0) {
2587             omr = inl(DE4X5_OMR);/* Set up full duplex for the autonegotiate */
2588             outl(omr | OMR_FDX, DE4X5_OMR);
2589         }
2590         irqs = STS_LNF | STS_LNP;
2591         irq_mask = IMR_LFM | IMR_LPM;
2592         sts = test_media(dev, irqs, irq_mask, 0xef01, 0xffff, 0x0008, 2400);
2593         if (sts < 0) {
2594             next_tick = sts & ~TIMER_CB;
2595         } else {
2596             if (sts & STS_LNP) {
2597                 lp->media = ANS;
2598             } else {
2599                 lp->media = AUI;
2600             }
2601             next_tick = dc21041_autoconf(dev);
2602         }
2603         break;
2604
2605     case ANS:
2606         if (!lp->tx_enable) {
2607             irqs = STS_LNP;
2608             irq_mask = IMR_LPM;
2609             sts = test_ans(dev, irqs, irq_mask, 3000);
2610             if (sts < 0) {
2611                 next_tick = sts & ~TIMER_CB;
2612             } else {
2613                 if (!(sts & STS_LNP) && (lp->autosense == AUTO)) {
2614                     lp->media = TP;
2615                     next_tick = dc21041_autoconf(dev);
2616                 } else {
2617                     lp->local_state = 1;
2618                     de4x5_init_connection(dev);
2619                 }
2620             }
2621         } else if (!lp->linkOK && (lp->autosense == AUTO)) {
2622             lp->media = ANS_SUSPECT;
2623             next_tick = 3000;
2624         }
2625         break;
2626
2627     case ANS_SUSPECT:
2628         next_tick = de4x5_suspect_state(dev, 1000, ANS, test_tp, dc21041_autoconf);
2629         break;
2630
2631     case TP:
2632         if (!lp->tx_enable) {
2633             if (lp->timeout < 0) {
2634                 omr = inl(DE4X5_OMR);          /* Set up half duplex for TP */
2635                 outl(omr & ~OMR_FDX, DE4X5_OMR);
2636             }
2637             irqs = STS_LNF | STS_LNP;
2638             irq_mask = IMR_LFM | IMR_LPM;
2639             sts = test_media(dev,irqs, irq_mask, 0xef01, 0xff3f, 0x0008, 2400);
2640             if (sts < 0) {
2641                 next_tick = sts & ~TIMER_CB;
2642             } else {
2643                 if (!(sts & STS_LNP) && (lp->autosense == AUTO)) {
2644                     if (inl(DE4X5_SISR) & SISR_NRA) {
2645                         lp->media = AUI;       /* Non selected port activity */
2646                     } else {
2647                         lp->media = BNC;
2648                     }
2649                     next_tick = dc21041_autoconf(dev);
2650                 } else {
2651                     lp->local_state = 1;
2652                     de4x5_init_connection(dev);
2653                 }
2654             }
2655         } else if (!lp->linkOK && (lp->autosense == AUTO)) {
2656             lp->media = TP_SUSPECT;
2657             next_tick = 3000;
2658         }
2659         break;
2660
2661     case TP_SUSPECT:
2662         next_tick = de4x5_suspect_state(dev, 1000, TP, test_tp, dc21041_autoconf);
2663         break;
2664
2665     case AUI:
2666         if (!lp->tx_enable) {
2667             if (lp->timeout < 0) {
2668                 omr = inl(DE4X5_OMR);          /* Set up half duplex for AUI */
2669                 outl(omr & ~OMR_FDX, DE4X5_OMR);
2670             }
2671             irqs = 0;
2672             irq_mask = 0;
2673             sts = test_media(dev,irqs, irq_mask, 0xef09, 0xf73d, 0x000e, 1000);
2674             if (sts < 0) {
2675                 next_tick = sts & ~TIMER_CB;
2676             } else {
2677                 if (!(inl(DE4X5_SISR) & SISR_SRA) && (lp->autosense == AUTO)) {
2678                     lp->media = BNC;
2679                     next_tick = dc21041_autoconf(dev);
2680                 } else {
2681                     lp->local_state = 1;
2682                     de4x5_init_connection(dev);
2683                 }
2684             }
2685         } else if (!lp->linkOK && (lp->autosense == AUTO)) {
2686             lp->media = AUI_SUSPECT;
2687             next_tick = 3000;
2688         }
2689         break;
2690
2691     case AUI_SUSPECT:
2692         next_tick = de4x5_suspect_state(dev, 1000, AUI, ping_media, dc21041_autoconf);
2693         break;
2694
2695     case BNC:
2696         switch (lp->local_state) {
2697         case 0:
2698             if (lp->timeout < 0) {
2699                 omr = inl(DE4X5_OMR);          /* Set up half duplex for BNC */
2700                 outl(omr & ~OMR_FDX, DE4X5_OMR);
2701             }
2702             irqs = 0;
2703             irq_mask = 0;
2704             sts = test_media(dev,irqs, irq_mask, 0xef09, 0xf73d, 0x0006, 1000);
2705             if (sts < 0) {
2706                 next_tick = sts & ~TIMER_CB;
2707             } else {
2708                 lp->local_state++;             /* Ensure media connected */
2709                 next_tick = dc21041_autoconf(dev);
2710             }
2711             break;
2712
2713         case 1:
2714             if (!lp->tx_enable) {
2715                 if ((sts = ping_media(dev, 3000)) < 0) {
2716                     next_tick = sts & ~TIMER_CB;
2717                 } else {
2718                     if (sts) {
2719                         lp->local_state = 0;
2720                         lp->media = NC;
2721                     } else {
2722                         de4x5_init_connection(dev);
2723                     }
2724                 }
2725             } else if (!lp->linkOK && (lp->autosense == AUTO)) {
2726                 lp->media = BNC_SUSPECT;
2727                 next_tick = 3000;
2728             }
2729             break;
2730         }
2731         break;
2732
2733     case BNC_SUSPECT:
2734         next_tick = de4x5_suspect_state(dev, 1000, BNC, ping_media, dc21041_autoconf);
2735         break;
2736
2737     case NC:
2738         omr = inl(DE4X5_OMR);    /* Set up full duplex for the autonegotiate */
2739         outl(omr | OMR_FDX, DE4X5_OMR);
2740         reset_init_sia(dev, 0xef01, 0xffff, 0x0008);/* Initialise the SIA */
2741         if (lp->media != lp->c_media) {
2742             de4x5_dbg_media(dev);
2743             lp->c_media = lp->media;
2744         }
2745         lp->media = INIT;
2746         lp->tx_enable = false;
2747         break;
2748     }
2749
2750     return next_tick;
2751 }
2752
2753 /*
2754 ** Some autonegotiation chips are broken in that they do not return the
2755 ** acknowledge bit (anlpa & MII_ANLPA_ACK) in the link partner advertisement
2756 ** register, except at the first power up negotiation.
2757 */
2758 static int
2759 dc21140m_autoconf(struct net_device *dev)
2760 {
2761     struct de4x5_private *lp = netdev_priv(dev);
2762     int ana, anlpa, cap, cr, slnk, sr;
2763     int next_tick = DE4X5_AUTOSENSE_MS;
2764     u_long imr, omr, iobase = dev->base_addr;
2765
2766     switch(lp->media) {
2767     case INIT:
2768         if (lp->timeout < 0) {
2769             DISABLE_IRQs;
2770             lp->tx_enable = false;
2771             lp->linkOK = 0;
2772             de4x5_save_skbs(dev);          /* Save non transmitted skb's */
2773         }
2774         if ((next_tick = de4x5_reset_phy(dev)) < 0) {
2775             next_tick &= ~TIMER_CB;
2776         } else {
2777             if (lp->useSROM) {
2778                 if (srom_map_media(dev) < 0) {
2779                     lp->tcount++;
2780                     return next_tick;
2781                 }
2782                 srom_exec(dev, lp->phy[lp->active].gep);
2783                 if (lp->infoblock_media == ANS) {
2784                     ana = lp->phy[lp->active].ana | MII_ANA_CSMA;
2785                     mii_wr(ana, MII_ANA, lp->phy[lp->active].addr, DE4X5_MII);
2786                 }
2787             } else {
2788                 lp->tmp = MII_SR_ASSC;     /* Fake out the MII speed set */
2789                 SET_10Mb;
2790                 if (lp->autosense == _100Mb) {
2791                     lp->media = _100Mb;
2792                 } else if (lp->autosense == _10Mb) {
2793                     lp->media = _10Mb;
2794                 } else if ((lp->autosense == AUTO) &&
2795                                     ((sr=is_anc_capable(dev)) & MII_SR_ANC)) {
2796                     ana = (((sr >> 6) & MII_ANA_TAF) | MII_ANA_CSMA);
2797                     ana &= (lp->fdx ? ~0 : ~MII_ANA_FDAM);
2798                     mii_wr(ana, MII_ANA, lp->phy[lp->active].addr, DE4X5_MII);
2799                     lp->media = ANS;
2800                 } else if (lp->autosense == AUTO) {
2801                     lp->media = SPD_DET;
2802                 } else if (is_spd_100(dev) && is_100_up(dev)) {
2803                     lp->media = _100Mb;
2804                 } else {
2805                     lp->media = NC;
2806                 }
2807             }
2808             lp->local_state = 0;
2809             next_tick = dc21140m_autoconf(dev);
2810         }
2811         break;
2812
2813     case ANS:
2814         switch (lp->local_state) {
2815         case 0:
2816             if (lp->timeout < 0) {
2817                 mii_wr(MII_CR_ASSE | MII_CR_RAN, MII_CR, lp->phy[lp->active].addr, DE4X5_MII);
2818             }
2819             cr = test_mii_reg(dev, MII_CR, MII_CR_RAN, false, 500);
2820             if (cr < 0) {
2821                 next_tick = cr & ~TIMER_CB;
2822             } else {
2823                 if (cr) {
2824                     lp->local_state = 0;
2825                     lp->media = SPD_DET;
2826                 } else {
2827                     lp->local_state++;
2828                 }
2829                 next_tick = dc21140m_autoconf(dev);
2830             }
2831             break;
2832
2833         case 1:
2834             if ((sr=test_mii_reg(dev, MII_SR, MII_SR_ASSC, true, 2000)) < 0) {
2835                 next_tick = sr & ~TIMER_CB;
2836             } else {
2837                 lp->media = SPD_DET;
2838                 lp->local_state = 0;
2839                 if (sr) {                         /* Success! */
2840                     lp->tmp = MII_SR_ASSC;
2841                     anlpa = mii_rd(MII_ANLPA, lp->phy[lp->active].addr, DE4X5_MII);
2842                     ana = mii_rd(MII_ANA, lp->phy[lp->active].addr, DE4X5_MII);
2843                     if (!(anlpa & MII_ANLPA_RF) &&
2844                          (cap = anlpa & MII_ANLPA_TAF & ana)) {
2845                         if (cap & MII_ANA_100M) {
2846                             lp->fdx = (ana & anlpa & MII_ANA_FDAM & MII_ANA_100M) != 0;
2847                             lp->media = _100Mb;
2848                         } else if (cap & MII_ANA_10M) {
2849                             lp->fdx = (ana & anlpa & MII_ANA_FDAM & MII_ANA_10M) != 0;
2850
2851                             lp->media = _10Mb;
2852                         }
2853                     }
2854                 }                       /* Auto Negotiation failed to finish */
2855                 next_tick = dc21140m_autoconf(dev);
2856             }                           /* Auto Negotiation failed to start */
2857             break;
2858         }
2859         break;
2860
2861     case SPD_DET:                              /* Choose 10Mb/s or 100Mb/s */
2862         if (lp->timeout < 0) {
2863             lp->tmp = (lp->phy[lp->active].id ? MII_SR_LKS :
2864                                                   (~gep_rd(dev) & GEP_LNP));
2865             SET_100Mb_PDET;
2866         }
2867         if ((slnk = test_for_100Mb(dev, 6500)) < 0) {
2868             next_tick = slnk & ~TIMER_CB;
2869         } else {
2870             if (is_spd_100(dev) && is_100_up(dev)) {
2871                 lp->media = _100Mb;
2872             } else if ((!is_spd_100(dev) && (is_10_up(dev) & lp->tmp))) {
2873                 lp->media = _10Mb;
2874             } else {
2875                 lp->media = NC;
2876             }
2877             next_tick = dc21140m_autoconf(dev);
2878         }
2879         break;
2880
2881     case _100Mb:                               /* Set 100Mb/s */
2882         next_tick = 3000;
2883         if (!lp->tx_enable) {
2884             SET_100Mb;
2885             de4x5_init_connection(dev);
2886         } else {
2887             if (!lp->linkOK && (lp->autosense == AUTO)) {
2888                 if (!is_100_up(dev) || (!lp->useSROM && !is_spd_100(dev))) {
2889                     lp->media = INIT;
2890                     lp->tcount++;
2891                     next_tick = DE4X5_AUTOSENSE_MS;
2892                 }
2893             }
2894         }
2895         break;
2896
2897     case BNC:
2898     case AUI:
2899     case _10Mb:                                /* Set 10Mb/s */
2900         next_tick = 3000;
2901         if (!lp->tx_enable) {
2902             SET_10Mb;
2903             de4x5_init_connection(dev);
2904         } else {
2905             if (!lp->linkOK && (lp->autosense == AUTO)) {
2906                 if (!is_10_up(dev) || (!lp->useSROM && is_spd_100(dev))) {
2907                     lp->media = INIT;
2908                     lp->tcount++;
2909                     next_tick = DE4X5_AUTOSENSE_MS;
2910                 }
2911             }
2912         }
2913         break;
2914
2915     case NC:
2916         if (lp->media != lp->c_media) {
2917             de4x5_dbg_media(dev);
2918             lp->c_media = lp->media;
2919         }
2920         lp->media = INIT;
2921         lp->tx_enable = false;
2922         break;
2923     }
2924
2925     return next_tick;
2926 }
2927
2928 /*
2929 ** This routine may be merged into dc21140m_autoconf() sometime as I'm
2930 ** changing how I figure out the media - but trying to keep it backwards
2931 ** compatible with the de500-xa and de500-aa.
2932 ** Whether it's BNC, AUI, SYM or MII is sorted out in the infoblock
2933 ** functions and set during de4x5_mac_port() and/or de4x5_reset_phy().
2934 ** This routine just has to figure out whether 10Mb/s or 100Mb/s is
2935 ** active.
2936 ** When autonegotiation is working, the ANS part searches the SROM for
2937 ** the highest common speed (TP) link that both can run and if that can
2938 ** be full duplex. That infoblock is executed and then the link speed set.
2939 **
2940 ** Only _10Mb and _100Mb are tested here.
2941 */
2942 static int
2943 dc2114x_autoconf(struct net_device *dev)
2944 {
2945     struct de4x5_private *lp = netdev_priv(dev);
2946     u_long iobase = dev->base_addr;
2947     s32 cr, anlpa, ana, cap, irqs, irq_mask, imr, omr, slnk, sr, sts;
2948     int next_tick = DE4X5_AUTOSENSE_MS;
2949
2950     switch (lp->media) {
2951     case INIT:
2952         if (lp->timeout < 0) {
2953             DISABLE_IRQs;
2954             lp->tx_enable = false;
2955             lp->linkOK = 0;
2956             lp->timeout = -1;
2957             de4x5_save_skbs(dev);            /* Save non transmitted skb's */
2958             if (lp->params.autosense & ~AUTO) {
2959                 srom_map_media(dev);         /* Fixed media requested      */
2960                 if (lp->media != lp->params.autosense) {
2961                     lp->tcount++;
2962                     lp->media = INIT;
2963                     return next_tick;
2964                 }
2965                 lp->media = INIT;
2966             }
2967         }
2968         if ((next_tick = de4x5_reset_phy(dev)) < 0) {
2969             next_tick &= ~TIMER_CB;
2970         } else {
2971             if (lp->autosense == _100Mb) {
2972                 lp->media = _100Mb;
2973             } else if (lp->autosense == _10Mb) {
2974                 lp->media = _10Mb;
2975             } else if (lp->autosense == TP) {
2976                 lp->media = TP;
2977             } else if (lp->autosense == BNC) {
2978                 lp->media = BNC;
2979             } else if (lp->autosense == AUI) {
2980                 lp->media = AUI;
2981             } else {
2982                 lp->media = SPD_DET;
2983                 if ((lp->infoblock_media == ANS) &&
2984                                     ((sr=is_anc_capable(dev)) & MII_SR_ANC)) {
2985                     ana = (((sr >> 6) & MII_ANA_TAF) | MII_ANA_CSMA);
2986                     ana &= (lp->fdx ? ~0 : ~MII_ANA_FDAM);
2987                     mii_wr(ana, MII_ANA, lp->phy[lp->active].addr, DE4X5_MII);
2988                     lp->media = ANS;
2989                 }
2990             }
2991             lp->local_state = 0;
2992             next_tick = dc2114x_autoconf(dev);
2993         }
2994         break;
2995
2996     case ANS:
2997         switch (lp->local_state) {
2998         case 0:
2999             if (lp->timeout < 0) {
3000                 mii_wr(MII_CR_ASSE | MII_CR_RAN, MII_CR, lp->phy[lp->active].addr, DE4X5_MII);
3001             }
3002             cr = test_mii_reg(dev, MII_CR, MII_CR_RAN, false, 500);
3003             if (cr < 0) {
3004                 next_tick = cr & ~TIMER_CB;
3005             } else {
3006                 if (cr) {
3007                     lp->local_state = 0;
3008                     lp->media = SPD_DET;
3009                 } else {
3010                     lp->local_state++;
3011                 }
3012                 next_tick = dc2114x_autoconf(dev);
3013             }
3014             break;
3015
3016         case 1:
3017             sr = test_mii_reg(dev, MII_SR, MII_SR_ASSC, true, 2000);
3018             if (sr < 0) {
3019                 next_tick = sr & ~TIMER_CB;
3020             } else {
3021                 lp->media = SPD_DET;
3022                 lp->local_state = 0;
3023                 if (sr) {                         /* Success! */
3024                     lp->tmp = MII_SR_ASSC;
3025                     anlpa = mii_rd(MII_ANLPA, lp->phy[lp->active].addr, DE4X5_MII);
3026                     ana = mii_rd(MII_ANA, lp->phy[lp->active].addr, DE4X5_MII);
3027                     if (!(anlpa & MII_ANLPA_RF) &&
3028                          (cap = anlpa & MII_ANLPA_TAF & ana)) {
3029                         if (cap & MII_ANA_100M) {
3030                             lp->fdx = (ana & anlpa & MII_ANA_FDAM & MII_ANA_100M) != 0;
3031                             lp->media = _100Mb;
3032                         } else if (cap & MII_ANA_10M) {
3033                             lp->fdx = (ana & anlpa & MII_ANA_FDAM & MII_ANA_10M) != 0;
3034                             lp->media = _10Mb;
3035                         }
3036                     }
3037                 }                       /* Auto Negotiation failed to finish */
3038                 next_tick = dc2114x_autoconf(dev);
3039             }                           /* Auto Negotiation failed to start  */
3040             break;
3041         }
3042         break;
3043
3044     case AUI:
3045         if (!lp->tx_enable) {
3046             if (lp->timeout < 0) {
3047                 omr = inl(DE4X5_OMR);   /* Set up half duplex for AUI        */
3048                 outl(omr & ~OMR_FDX, DE4X5_OMR);
3049             }
3050             irqs = 0;
3051             irq_mask = 0;
3052             sts = test_media(dev,irqs, irq_mask, 0, 0, 0, 1000);
3053             if (sts < 0) {
3054                 next_tick = sts & ~TIMER_CB;
3055             } else {
3056                 if (!(inl(DE4X5_SISR) & SISR_SRA) && (lp->autosense == AUTO)) {
3057                     lp->media = BNC;
3058                     next_tick = dc2114x_autoconf(dev);
3059                 } else {
3060                     lp->local_state = 1;
3061                     de4x5_init_connection(dev);
3062                 }
3063             }
3064         } else if (!lp->linkOK && (lp->autosense == AUTO)) {
3065             lp->media = AUI_SUSPECT;
3066             next_tick = 3000;
3067         }
3068         break;
3069
3070     case AUI_SUSPECT:
3071         next_tick = de4x5_suspect_state(dev, 1000, AUI, ping_media, dc2114x_autoconf);
3072         break;
3073
3074     case BNC:
3075         switch (lp->local_state) {
3076         case 0:
3077             if (lp->timeout < 0) {
3078                 omr = inl(DE4X5_OMR);          /* Set up half duplex for BNC */
3079                 outl(omr & ~OMR_FDX, DE4X5_OMR);
3080             }
3081             irqs = 0;
3082             irq_mask = 0;
3083             sts = test_media(dev,irqs, irq_mask, 0, 0, 0, 1000);
3084             if (sts < 0) {
3085                 next_tick = sts & ~TIMER_CB;
3086             } else {
3087                 lp->local_state++;             /* Ensure media connected */
3088                 next_tick = dc2114x_autoconf(dev);
3089             }
3090             break;
3091
3092         case 1:
3093             if (!lp->tx_enable) {
3094                 if ((sts = ping_media(dev, 3000)) < 0) {
3095                     next_tick = sts & ~TIMER_CB;
3096                 } else {
3097                     if (sts) {
3098                         lp->local_state = 0;
3099                         lp->tcount++;
3100                         lp->media = INIT;
3101                     } else {
3102                         de4x5_init_connection(dev);
3103                     }
3104                 }
3105             } else if (!lp->linkOK && (lp->autosense == AUTO)) {
3106                 lp->media = BNC_SUSPECT;
3107                 next_tick = 3000;
3108             }
3109             break;
3110         }
3111         break;
3112
3113     case BNC_SUSPECT:
3114         next_tick = de4x5_suspect_state(dev, 1000, BNC, ping_media, dc2114x_autoconf);
3115         break;
3116
3117     case SPD_DET:                              /* Choose 10Mb/s or 100Mb/s */
3118           if (srom_map_media(dev) < 0) {
3119               lp->tcount++;
3120               lp->media = INIT;
3121               return next_tick;
3122           }
3123           if (lp->media == _100Mb) {
3124               if ((slnk = test_for_100Mb(dev, 6500)) < 0) {
3125                   lp->media = SPD_DET;
3126                   return  (slnk & ~TIMER_CB);
3127               }
3128           } else {
3129               if (wait_for_link(dev) < 0) {
3130                   lp->media = SPD_DET;
3131                   return PDET_LINK_WAIT;
3132               }
3133           }
3134           if (lp->media == ANS) {           /* Do MII parallel detection */
3135               if (is_spd_100(dev)) {
3136                   lp->media = _100Mb;
3137               } else {
3138                   lp->media = _10Mb;
3139               }
3140               next_tick = dc2114x_autoconf(dev);
3141           } else if (((lp->media == _100Mb) && is_100_up(dev)) ||
3142                      (((lp->media == _10Mb) || (lp->media == TP) ||
3143                        (lp->media == BNC)   || (lp->media == AUI)) &&
3144                       is_10_up(dev))) {
3145               next_tick = dc2114x_autoconf(dev);
3146           } else {
3147               lp->tcount++;
3148               lp->media = INIT;
3149           }
3150           break;
3151
3152     case _10Mb:
3153         next_tick = 3000;
3154         if (!lp->tx_enable) {
3155             SET_10Mb;
3156             de4x5_init_connection(dev);
3157         } else {
3158             if (!lp->linkOK && (lp->autosense == AUTO)) {
3159                 if (!is_10_up(dev) || (!lp->useSROM && is_spd_100(dev))) {
3160                     lp->media = INIT;
3161                     lp->tcount++;
3162                     next_tick = DE4X5_AUTOSENSE_MS;
3163                 }
3164             }
3165         }
3166         break;
3167
3168     case _100Mb:
3169         next_tick = 3000;
3170         if (!lp->tx_enable) {
3171             SET_100Mb;
3172             de4x5_init_connection(dev);
3173         } else {
3174             if (!lp->linkOK && (lp->autosense == AUTO)) {
3175                 if (!is_100_up(dev) || (!lp->useSROM && !is_spd_100(dev))) {
3176                     lp->media = INIT;
3177                     lp->tcount++;
3178                     next_tick = DE4X5_AUTOSENSE_MS;
3179                 }
3180             }
3181         }
3182         break;
3183
3184     default:
3185         lp->tcount++;
3186 printk("Huh?: media:%02x\n", lp->media);
3187         lp->media = INIT;
3188         break;
3189     }
3190
3191     return next_tick;
3192 }
3193
3194 static int
3195 srom_autoconf(struct net_device *dev)
3196 {
3197     struct de4x5_private *lp = netdev_priv(dev);
3198
3199     return lp->infoleaf_fn(dev);
3200 }
3201
3202 /*
3203 ** This mapping keeps the original media codes and FDX flag unchanged.
3204 ** While it isn't strictly necessary, it helps me for the moment...
3205 ** The early return avoids a media state / SROM media space clash.
3206 */
3207 static int
3208 srom_map_media(struct net_device *dev)
3209 {
3210     struct de4x5_private *lp = netdev_priv(dev);
3211
3212     lp->fdx = false;
3213     if (lp->infoblock_media == lp->media)
3214       return 0;
3215
3216     switch(lp->infoblock_media) {
3217       case SROM_10BASETF:
3218         if (!lp->params.fdx) return -1;
3219         lp->fdx = true;
3220       case SROM_10BASET:
3221         if (lp->params.fdx && !lp->fdx) return -1;
3222         if ((lp->chipset == DC21140) || ((lp->chipset & ~0x00ff) == DC2114x)) {
3223             lp->media = _10Mb;
3224         } else {
3225             lp->media = TP;
3226         }
3227         break;
3228
3229       case SROM_10BASE2:
3230         lp->media = BNC;
3231         break;
3232
3233       case SROM_10BASE5:
3234         lp->media = AUI;
3235         break;
3236
3237       case SROM_100BASETF:
3238         if (!lp->params.fdx) return -1;
3239         lp->fdx = true;
3240       case SROM_100BASET:
3241         if (lp->params.fdx && !lp->fdx) return -1;
3242         lp->media = _100Mb;
3243         break;
3244
3245       case SROM_100BASET4:
3246         lp->media = _100Mb;
3247         break;
3248
3249       case SROM_100BASEFF:
3250         if (!lp->params.fdx) return -1;
3251         lp->fdx = true;
3252       case SROM_100BASEF:
3253         if (lp->params.fdx && !lp->fdx) return -1;
3254         lp->media = _100Mb;
3255         break;
3256
3257       case ANS:
3258         lp->media = ANS;
3259         lp->fdx = lp->params.fdx;
3260         break;
3261
3262       default:
3263         printk("%s: Bad media code [%d] detected in SROM!\n", dev->name,
3264                                                           lp->infoblock_media);
3265         return -1;
3266         break;
3267     }
3268
3269     return 0;
3270 }
3271
3272 static void
3273 de4x5_init_connection(struct net_device *dev)
3274 {
3275     struct de4x5_private *lp = netdev_priv(dev);
3276     u_long iobase = dev->base_addr;
3277     u_long flags = 0;
3278
3279     if (lp->media != lp->c_media) {
3280         de4x5_dbg_media(dev);
3281         lp->c_media = lp->media;          /* Stop scrolling media messages */
3282     }
3283
3284     spin_lock_irqsave(&lp->lock, flags);
3285     de4x5_rst_desc_ring(dev);
3286     de4x5_setup_intr(dev);
3287     lp->tx_enable = true;
3288     spin_unlock_irqrestore(&lp->lock, flags);
3289     outl(POLL_DEMAND, DE4X5_TPD);
3290
3291     netif_wake_queue(dev);
3292
3293     return;
3294 }
3295
3296 /*
3297 ** General PHY reset function. Some MII devices don't reset correctly
3298 ** since their MII address pins can float at voltages that are dependent
3299 ** on the signal pin use. Do a double reset to ensure a reset.
3300 */
3301 static int
3302 de4x5_reset_phy(struct net_device *dev)
3303 {
3304     struct de4x5_private *lp = netdev_priv(dev);
3305     u_long iobase = dev->base_addr;
3306     int next_tick = 0;
3307
3308     if ((lp->useSROM) || (lp->phy[lp->active].id)) {
3309         if (lp->timeout < 0) {
3310             if (lp->useSROM) {
3311                 if (lp->phy[lp->active].rst) {
3312                     srom_exec(dev, lp->phy[lp->active].rst);
3313                     srom_exec(dev, lp->phy[lp->active].rst);
3314                 } else if (lp->rst) {          /* Type 5 infoblock reset */
3315                     srom_exec(dev, lp->rst);
3316                     srom_exec(dev, lp->rst);
3317                 }
3318             } else {
3319                 PHY_HARD_RESET;
3320             }
3321             if (lp->useMII) {
3322                 mii_wr(MII_CR_RST, MII_CR, lp->phy[lp->active].addr, DE4X5_MII);
3323             }
3324         }
3325         if (lp->useMII) {
3326             next_tick = test_mii_reg(dev, MII_CR, MII_CR_RST, false, 500);
3327         }
3328     } else if (lp->chipset == DC21140) {
3329         PHY_HARD_RESET;
3330     }
3331
3332     return next_tick;
3333 }
3334
3335 static int
3336 test_media(struct net_device *dev, s32 irqs, s32 irq_mask, s32 csr13, s32 csr14, s32 csr15, s32 msec)
3337 {
3338     struct de4x5_private *lp = netdev_priv(dev);
3339     u_long iobase = dev->base_addr;
3340     s32 sts, csr12;
3341
3342     if (lp->timeout < 0) {
3343         lp->timeout = msec/100;
3344         if (!lp->useSROM) {      /* Already done if by SROM, else dc2104[01] */
3345             reset_init_sia(dev, csr13, csr14, csr15);
3346         }
3347
3348         /* set up the interrupt mask */
3349         outl(irq_mask, DE4X5_IMR);
3350
3351         /* clear all pending interrupts */
3352         sts = inl(DE4X5_STS);
3353         outl(sts, DE4X5_STS);
3354
3355         /* clear csr12 NRA and SRA bits */
3356         if ((lp->chipset == DC21041) || lp->useSROM) {
3357             csr12 = inl(DE4X5_SISR);
3358             outl(csr12, DE4X5_SISR);
3359         }
3360     }
3361
3362     sts = inl(DE4X5_STS) & ~TIMER_CB;
3363
3364     if (!(sts & irqs) && --lp->timeout) {
3365         sts = 100 | TIMER_CB;
3366     } else {
3367         lp->timeout = -1;
3368     }
3369
3370     return sts;
3371 }
3372
3373 static int
3374 test_tp(struct net_device *dev, s32 msec)
3375 {
3376     struct de4x5_private *lp = netdev_priv(dev);
3377     u_long iobase = dev->base_addr;
3378     int sisr;
3379
3380     if (lp->timeout < 0) {
3381         lp->timeout = msec/100;
3382     }
3383
3384     sisr = (inl(DE4X5_SISR) & ~TIMER_CB) & (SISR_LKF | SISR_NCR);
3385
3386     if (sisr && --lp->timeout) {
3387         sisr = 100 | TIMER_CB;
3388     } else {
3389         lp->timeout = -1;
3390     }
3391
3392     return sisr;
3393 }
3394
3395 /*
3396 ** Samples the 100Mb Link State Signal. The sample interval is important
3397 ** because too fast a rate can give erroneous results and confuse the
3398 ** speed sense algorithm.
3399 */
3400 #define SAMPLE_INTERVAL 500  /* ms */
3401 #define SAMPLE_DELAY    2000 /* ms */
3402 static int
3403 test_for_100Mb(struct net_device *dev, int msec)
3404 {
3405     struct de4x5_private *lp = netdev_priv(dev);
3406     int gep = 0, ret = ((lp->chipset & ~0x00ff)==DC2114x? -1 :GEP_SLNK);
3407
3408     if (lp->timeout < 0) {
3409         if ((msec/SAMPLE_INTERVAL) <= 0) return 0;
3410         if (msec > SAMPLE_DELAY) {
3411             lp->timeout = (msec - SAMPLE_DELAY)/SAMPLE_INTERVAL;
3412             gep = SAMPLE_DELAY | TIMER_CB;
3413             return gep;
3414         } else {
3415             lp->timeout = msec/SAMPLE_INTERVAL;
3416         }
3417     }
3418
3419     if (lp->phy[lp->active].id || lp->useSROM) {
3420         gep = is_100_up(dev) | is_spd_100(dev);
3421     } else {
3422         gep = (~gep_rd(dev) & (GEP_SLNK | GEP_LNP));
3423     }
3424     if (!(gep & ret) && --lp->timeout) {
3425         gep = SAMPLE_INTERVAL | TIMER_CB;
3426     } else {
3427         lp->timeout = -1;
3428     }
3429
3430     return gep;
3431 }
3432
3433 static int
3434 wait_for_link(struct net_device *dev)
3435 {
3436     struct de4x5_private *lp = netdev_priv(dev);
3437
3438     if (lp->timeout < 0) {
3439         lp->timeout = 1;
3440     }
3441
3442     if (lp->timeout--) {
3443         return TIMER_CB;
3444     } else {
3445         lp->timeout = -1;
3446     }
3447
3448     return 0;
3449 }
3450
3451 /*
3452 **
3453 **
3454 */
3455 static int
3456 test_mii_reg(struct net_device *dev, int reg, int mask, bool pol, long msec)
3457 {
3458     struct de4x5_private *lp = netdev_priv(dev);
3459     int test;
3460     u_long iobase = dev->base_addr;
3461
3462     if (lp->timeout < 0) {
3463         lp->timeout = msec/100;
3464     }
3465
3466     reg = mii_rd((u_char)reg, lp->phy[lp->active].addr, DE4X5_MII) & mask;
3467     test = (reg ^ (pol ? ~0 : 0)) & mask;
3468
3469     if (test && --lp->timeout) {
3470         reg = 100 | TIMER_CB;
3471     } else {
3472         lp->timeout = -1;
3473     }
3474
3475     return reg;
3476 }
3477
3478 static int
3479 is_spd_100(struct net_device *dev)
3480 {
3481     struct de4x5_private *lp = netdev_priv(dev);
3482     u_long iobase = dev->base_addr;
3483     int spd;
3484
3485     if (lp->useMII) {
3486         spd = mii_rd(lp->phy[lp->active].spd.reg, lp->phy[lp->active].addr, DE4X5_MII);
3487         spd = ~(spd ^ lp->phy[lp->active].spd.value);
3488         spd &= lp->phy[lp->active].spd.mask;
3489     } else if (!lp->useSROM) {                      /* de500-xa */
3490         spd = ((~gep_rd(dev)) & GEP_SLNK);
3491     } else {
3492         if ((lp->ibn == 2) || !lp->asBitValid)
3493             return ((lp->chipset == DC21143)?(~inl(DE4X5_SISR)&SISR_LS100):0);
3494
3495         spd = (lp->asBitValid & (lp->asPolarity ^ (gep_rd(dev) & lp->asBit))) |
3496                   (lp->linkOK & ~lp->asBitValid);
3497     }
3498
3499     return spd;
3500 }
3501
3502 static int
3503 is_100_up(struct net_device *dev)
3504 {
3505     struct de4x5_private *lp = netdev_priv(dev);
3506     u_long iobase = dev->base_addr;
3507
3508     if (lp->useMII) {
3509         /* Double read for sticky bits & temporary drops */
3510         mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII);
3511         return (mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII) & MII_SR_LKS);
3512     } else if (!lp->useSROM) {                       /* de500-xa */
3513         return ((~gep_rd(dev)) & GEP_SLNK);
3514     } else {
3515         if ((lp->ibn == 2) || !lp->asBitValid)
3516             return ((lp->chipset == DC21143)?(~inl(DE4X5_SISR)&SISR_LS100):0);
3517
3518         return ((lp->asBitValid&(lp->asPolarity^(gep_rd(dev)&lp->asBit))) |
3519                 (lp->linkOK & ~lp->asBitValid));
3520     }
3521 }
3522
3523 static int
3524 is_10_up(struct net_device *dev)
3525 {
3526     struct de4x5_private *lp = netdev_priv(dev);
3527     u_long iobase = dev->base_addr;
3528
3529     if (lp->useMII) {
3530         /* Double read for sticky bits & temporary drops */
3531         mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII);
3532         return (mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII) & MII_SR_LKS);
3533     } else if (!lp->useSROM) {                       /* de500-xa */
3534         return ((~gep_rd(dev)) & GEP_LNP);
3535     } else {
3536         if ((lp->ibn == 2) || !lp->asBitValid)
3537             return (((lp->chipset & ~0x00ff) == DC2114x) ?
3538                     (~inl(DE4X5_SISR)&SISR_LS10):
3539                     0);
3540
3541         return ((lp->asBitValid&(lp->asPolarity^(gep_rd(dev)&lp->asBit))) |
3542                 (lp->linkOK & ~lp->asBitValid));
3543     }
3544 }
3545
3546 static int
3547 is_anc_capable(struct net_device *dev)
3548 {
3549     struct de4x5_private *lp = netdev_priv(dev);
3550     u_long iobase = dev->base_addr;
3551
3552     if (lp->phy[lp->active].id && (!lp->useSROM || lp->useMII)) {
3553         return (mii_rd(MII_SR, lp->phy[lp->active].addr, DE4X5_MII));
3554     } else if ((lp->chipset & ~0x00ff) == DC2114x) {
3555         return (inl(DE4X5_SISR) & SISR_LPN) >> 12;
3556     } else {
3557         return 0;
3558     }
3559 }
3560
3561 /*
3562 ** Send a packet onto the media and watch for send errors that indicate the
3563 ** media is bad or unconnected.
3564 */
3565 static int
3566 ping_media(struct net_device *dev, int msec)
3567 {
3568     struct de4x5_private *lp = netdev_priv(dev);
3569     u_long iobase = dev->base_addr;
3570     int sisr;
3571
3572     if (lp->timeout < 0) {
3573         lp->timeout = msec/100;
3574
3575         lp->tmp = lp->tx_new;                /* Remember the ring position */
3576         load_packet(dev, lp->frame, TD_LS | TD_FS | sizeof(lp->frame), (struct sk_buff *)1);
3577         lp->tx_new = (++lp->tx_new) % lp->txRingSize;
3578         outl(POLL_DEMAND, DE4X5_TPD);
3579     }
3580
3581     sisr = inl(DE4X5_SISR);
3582
3583     if ((!(sisr & SISR_NCR)) &&
3584         ((s32)le32_to_cpu(lp->tx_ring[lp->tmp].status) < 0) &&
3585          (--lp->timeout)) {
3586         sisr = 100 | TIMER_CB;
3587     } else {
3588         if ((!(sisr & SISR_NCR)) &&
3589             !(le32_to_cpu(lp->tx_ring[lp->tmp].status) & (T_OWN | TD_ES)) &&
3590             lp->timeout) {
3591             sisr = 0;
3592         } else {
3593             sisr = 1;
3594         }
3595         lp->timeout = -1;
3596     }
3597
3598     return sisr;
3599 }
3600
3601 /*
3602 ** This function does 2 things: on Intels it kmalloc's another buffer to
3603 ** replace the one about to be passed up. On Alpha's it kmallocs a buffer
3604 ** into which the packet is copied.
3605 */
3606 static struct sk_buff *
3607 de4x5_alloc_rx_buff(struct net_device *dev, int index, int len)
3608 {
3609     struct de4x5_private *lp = netdev_priv(dev);
3610     struct sk_buff *p;
3611
3612 #if !defined(__alpha__) && !defined(__powerpc__) && !defined(CONFIG_SPARC) && !defined(DE4X5_DO_MEMCPY)
3613     struct sk_buff *ret;
3614     u_long i=0, tmp;
3615
3616     p = dev_alloc_skb(IEEE802_3_SZ + DE4X5_ALIGN + 2);
3617     if (!p) return NULL;
3618
3619     tmp = virt_to_bus(p->data);
3620     i = ((tmp + DE4X5_ALIGN) & ~DE4X5_ALIGN) - tmp;
3621     skb_reserve(p, i);
3622     lp->rx_ring[index].buf = cpu_to_le32(tmp + i);
3623
3624     ret = lp->rx_skb[index];
3625     lp->rx_skb[index] = p;
3626
3627     if ((u_long) ret > 1) {
3628         skb_put(ret, len);
3629     }
3630
3631     return ret;
3632
3633 #else
3634     if (lp->state != OPEN) return (struct sk_buff *)1; /* Fake out the open */
3635
3636     p = dev_alloc_skb(len + 2);
3637     if (!p) return NULL;
3638
3639     skb_reserve(p, 2);                                 /* Align */
3640     if (index < lp->rx_old) {                          /* Wrapped buffer */
3641         short tlen = (lp->rxRingSize - lp->rx_old) * RX_BUFF_SZ;
3642         memcpy(skb_put(p,tlen),lp->rx_bufs + lp->rx_old * RX_BUFF_SZ,tlen);
3643         memcpy(skb_put(p,len-tlen),lp->rx_bufs,len-tlen);
3644     } else {                                           /* Linear buffer */
3645         memcpy(skb_put(p,len),lp->rx_bufs + lp->rx_old * RX_BUFF_SZ,len);
3646     }
3647
3648     return p;
3649 #endif
3650 }
3651
3652 static void
3653 de4x5_free_rx_buffs(struct net_device *dev)
3654 {
3655     struct de4x5_private *lp = netdev_priv(dev);
3656     int i;
3657
3658     for (i=0; i<lp->rxRingSize; i++) {
3659         if ((u_long) lp->rx_skb[i] > 1) {
3660             dev_kfree_skb(lp->rx_skb[i]);
3661         }
3662         lp->rx_ring[i].status = 0;
3663         lp->rx_skb[i] = (struct sk_buff *)1;    /* Dummy entry */
3664     }
3665
3666     return;
3667 }
3668
3669 static void
3670 de4x5_free_tx_buffs(struct net_device *dev)
3671 {
3672     struct de4x5_private *lp = netdev_priv(dev);
3673     int i;
3674
3675     for (i=0; i<lp->txRingSize; i++) {
3676         if (lp->tx_skb[i])
3677             de4x5_free_tx_buff(lp, i);
3678         lp->tx_ring[i].status = 0;
3679     }
3680
3681     /* Unload the locally queued packets */
3682     __skb_queue_purge(&lp->cache.queue);
3683 }
3684
3685 /*
3686 ** When a user pulls a connection, the DECchip can end up in a
3687 ** 'running - waiting for end of transmission' state. This means that we
3688 ** have to perform a chip soft reset to ensure that we can synchronize
3689 ** the hardware and software and make any media probes using a loopback
3690 ** packet meaningful.
3691 */
3692 static void
3693 de4x5_save_skbs(struct net_device *dev)
3694 {
3695     struct de4x5_private *lp = netdev_priv(dev);
3696     u_long iobase = dev->base_addr;
3697     s32 omr;
3698
3699     if (!lp->cache.save_cnt) {
3700         STOP_DE4X5;
3701         de4x5_tx(dev);                          /* Flush any sent skb's */
3702         de4x5_free_tx_buffs(dev);
3703         de4x5_cache_state(dev, DE4X5_SAVE_STATE);
3704         de4x5_sw_reset(dev);
3705         de4x5_cache_state(dev, DE4X5_RESTORE_STATE);
3706         lp->cache.save_cnt++;
3707         START_DE4X5;
3708     }
3709
3710     return;
3711 }
3712
3713 static void
3714 de4x5_rst_desc_ring(struct net_device *dev)
3715 {
3716     struct de4x5_private *lp = netdev_priv(dev);
3717     u_long iobase = dev->base_addr;
3718     int i;
3719     s32 omr;
3720
3721     if (lp->cache.save_cnt) {
3722         STOP_DE4X5;
3723         outl(lp->dma_rings, DE4X5_RRBA);
3724         outl(lp->dma_rings + NUM_RX_DESC * sizeof(struct de4x5_desc),
3725              DE4X5_TRBA);
3726
3727         lp->rx_new = lp->rx_old = 0;
3728         lp->tx_new = lp->tx_old = 0;
3729
3730         for (i = 0; i < lp->rxRingSize; i++) {
3731             lp->rx_ring[i].status = cpu_to_le32(R_OWN);
3732         }
3733
3734         for (i = 0; i < lp->txRingSize; i++) {
3735             lp->tx_ring[i].status = cpu_to_le32(0);
3736         }
3737
3738         barrier();
3739         lp->cache.save_cnt--;
3740         START_DE4X5;
3741     }
3742
3743     return;
3744 }
3745
3746 static void
3747 de4x5_cache_state(struct net_device *dev, int flag)
3748 {
3749     struct de4x5_private *lp = netdev_priv(dev);
3750     u_long iobase = dev->base_addr;
3751
3752     switch(flag) {
3753       case DE4X5_SAVE_STATE:
3754         lp->cache.csr0 = inl(DE4X5_BMR);
3755         lp->cache.csr6 = (inl(DE4X5_OMR) & ~(OMR_ST | OMR_SR));
3756         lp->cache.csr7 = inl(DE4X5_IMR);
3757         break;
3758
3759       case DE4X5_RESTORE_STATE:
3760         outl(lp->cache.csr0, DE4X5_BMR);
3761         outl(lp->cache.csr6, DE4X5_OMR);
3762         outl(lp->cache.csr7, DE4X5_IMR);
3763         if (lp->chipset == DC21140) {
3764             gep_wr(lp->cache.gepc, dev);
3765             gep_wr(lp->cache.gep, dev);
3766         } else {
3767             reset_init_sia(dev, lp->cache.csr13, lp->cache.csr14,
3768                                                               lp->cache.csr15);
3769         }
3770         break;
3771     }
3772
3773     return;
3774 }
3775
3776 static void
3777 de4x5_put_cache(struct net_device *dev, struct sk_buff *skb)
3778 {
3779     struct de4x5_private *lp = netdev_priv(dev);
3780
3781     __skb_queue_tail(&lp->cache.queue, skb);
3782 }
3783
3784 static void
3785 de4x5_putb_cache(struct net_device *dev, struct sk_buff *skb)
3786 {
3787     struct de4x5_private *lp = netdev_priv(dev);
3788
3789     __skb_queue_head(&lp->cache.queue, skb);
3790 }
3791
3792 static struct sk_buff *
3793 de4x5_get_cache(struct net_device *dev)
3794 {
3795     struct de4x5_private *lp = netdev_priv(dev);
3796
3797     return __skb_dequeue(&lp->cache.queue);
3798 }
3799
3800 /*
3801 ** Check the Auto Negotiation State. Return OK when a link pass interrupt
3802 ** is received and the auto-negotiation status is NWAY OK.
3803 */
3804 static int
3805 test_ans(struct net_device *dev, s32 irqs, s32 irq_mask, s32 msec)
3806 {
3807     struct de4x5_private *lp = netdev_priv(dev);
3808     u_long iobase = dev->base_addr;
3809     s32 sts, ans;
3810
3811     if (lp->timeout < 0) {
3812         lp->timeout = msec/100;
3813         outl(irq_mask, DE4X5_IMR);
3814
3815         /* clear all pending interrupts */
3816         sts = inl(DE4X5_STS);
3817         outl(sts, DE4X5_STS);
3818     }
3819
3820     ans = inl(DE4X5_SISR) & SISR_ANS;
3821     sts = inl(DE4X5_STS) & ~TIMER_CB;
3822
3823     if (!(sts & irqs) && (ans ^ ANS_NWOK) && --lp->timeout) {
3824         sts = 100 | TIMER_CB;
3825     } else {
3826         lp->timeout = -1;
3827     }
3828
3829     return sts;
3830 }
3831
3832 static void
3833 de4x5_setup_intr(struct net_device *dev)
3834 {
3835     struct de4x5_private *lp = netdev_priv(dev);
3836     u_long iobase = dev->base_addr;
3837     s32 imr, sts;
3838
3839     if (inl(DE4X5_OMR) & OMR_SR) {   /* Only unmask if TX/RX is enabled */
3840         imr = 0;
3841         UNMASK_IRQs;
3842         sts = inl(DE4X5_STS);        /* Reset any pending (stale) interrupts */
3843         outl(sts, DE4X5_STS);
3844         ENABLE_IRQs;
3845     }
3846
3847     return;
3848 }
3849
3850 /*
3851 **
3852 */
3853 static void
3854 reset_init_sia(struct net_device *dev, s32 csr13, s32 csr14, s32 csr15)
3855 {
3856     struct de4x5_private *lp = netdev_priv(dev);
3857     u_long iobase = dev->base_addr;
3858
3859     RESET_SIA;
3860     if (lp->useSROM) {
3861         if (lp->ibn == 3) {
3862             srom_exec(dev, lp->phy[lp->active].rst);
3863             srom_exec(dev, lp->phy[lp->active].gep);
3864             outl(1, DE4X5_SICR);
3865             return;
3866         } else {
3867             csr15 = lp->cache.csr15;
3868             csr14 = lp->cache.csr14;
3869             csr13 = lp->cache.csr13;
3870             outl(csr15 | lp->cache.gepc, DE4X5_SIGR);
3871             outl(csr15 | lp->cache.gep, DE4X5_SIGR);
3872         }
3873     } else {
3874         outl(csr15, DE4X5_SIGR);
3875     }
3876     outl(csr14, DE4X5_STRR);
3877     outl(csr13, DE4X5_SICR);
3878
3879     mdelay(10);
3880
3881     return;
3882 }
3883
3884 /*
3885 ** Create a loopback ethernet packet
3886 */
3887 static void
3888 create_packet(struct net_device *dev, char *frame, int len)
3889 {
3890     int i;
3891     char *buf = frame;
3892
3893     for (i=0; i<ETH_ALEN; i++) {             /* Use this source address */
3894         *buf++ = dev->dev_addr[i];
3895     }
3896     for (i=0; i<ETH_ALEN; i++) {             /* Use this destination address */
3897         *buf++ = dev->dev_addr[i];
3898     }
3899
3900     *buf++ = 0;                              /* Packet length (2 bytes) */
3901     *buf++ = 1;
3902
3903     return;
3904 }
3905
3906 /*
3907 ** Look for a particular board name in the EISA configuration space
3908 */
3909 static int
3910 EISA_signature(char *name, struct device *device)
3911 {
3912     int i, status = 0, siglen = ARRAY_SIZE(de4x5_signatures);
3913     struct eisa_device *edev;
3914
3915     *name = '\0';
3916     edev = to_eisa_device (device);
3917     i = edev->id.driver_data;
3918
3919     if (i >= 0 && i < siglen) {
3920             strcpy (name, de4x5_signatures[i]);
3921             status = 1;
3922     }
3923
3924     return status;                         /* return the device name string */
3925 }
3926
3927 /*
3928 ** Look for a particular board name in the PCI configuration space
3929 */
3930 static int
3931 PCI_signature(char *name, struct de4x5_private *lp)
3932 {
3933     int i, status = 0, siglen = ARRAY_SIZE(de4x5_signatures);
3934
3935     if (lp->chipset == DC21040) {
3936         strcpy(name, "DE434/5");
3937         return status;
3938     } else {                           /* Search for a DEC name in the SROM */
3939         int i = *((char *)&lp->srom + 19) * 3;
3940         strncpy(name, (char *)&lp->srom + 26 + i, 8);
3941     }
3942     name[8] = '\0';
3943     for (i=0; i<siglen; i++) {
3944         if (strstr(name,de4x5_signatures[i])!=NULL) break;
3945     }
3946     if (i == siglen) {
3947         if (dec_only) {
3948             *name = '\0';
3949         } else {                        /* Use chip name to avoid confusion */
3950             strcpy(name, (((lp->chipset == DC21040) ? "DC21040" :
3951                            ((lp->chipset == DC21041) ? "DC21041" :
3952                             ((lp->chipset == DC21140) ? "DC21140" :
3953                              ((lp->chipset == DC21142) ? "DC21142" :
3954                               ((lp->chipset == DC21143) ? "DC21143" : "UNKNOWN"
3955                              )))))));
3956         }
3957         if (lp->chipset != DC21041) {
3958             lp->useSROM = true;             /* card is not recognisably DEC */
3959         }
3960     } else if ((lp->chipset & ~0x00ff) == DC2114x) {
3961         lp->useSROM = true;
3962     }
3963
3964     return status;
3965 }
3966
3967 /*
3968 ** Set up the Ethernet PROM counter to the start of the Ethernet address on
3969 ** the DC21040, else  read the SROM for the other chips.
3970 ** The SROM may not be present in a multi-MAC card, so first read the
3971 ** MAC address and check for a bad address. If there is a bad one then exit
3972 ** immediately with the prior srom contents intact (the h/w address will
3973 ** be fixed up later).
3974 */
3975 static void
3976 DevicePresent(struct net_device *dev, u_long aprom_addr)
3977 {
3978     int i, j=0;
3979     struct de4x5_private *lp = netdev_priv(dev);
3980
3981     if (lp->chipset == DC21040) {
3982         if (lp->bus == EISA) {
3983             enet_addr_rst(aprom_addr); /* Reset Ethernet Address ROM Pointer */
3984         } else {
3985             outl(0, aprom_addr);       /* Reset Ethernet Address ROM Pointer */
3986         }
3987     } else {                           /* Read new srom */
3988         u_short tmp;
3989         __le16 *p = (__le16 *)((char *)&lp->srom + SROM_HWADD);
3990         for (i=0; i<(ETH_ALEN>>1); i++) {
3991             tmp = srom_rd(aprom_addr, (SROM_HWADD>>1) + i);
3992             j += tmp;   /* for check for 0:0:0:0:0:0 or ff:ff:ff:ff:ff:ff */
3993             *p = cpu_to_le16(tmp);
3994         }
3995         if (j == 0 || j == 3 * 0xffff) {
3996                 /* could get 0 only from all-0 and 3 * 0xffff only from all-1 */
3997                 return;
3998         }
3999
4000         p = (__le16 *)&lp->srom;
4001         for (i=0; i<(sizeof(struct de4x5_srom)>>1); i++) {
4002             tmp = srom_rd(aprom_addr, i);
4003             *p++ = cpu_to_le16(tmp);
4004         }
4005         de4x5_dbg_srom((struct de4x5_srom *)&lp->srom);
4006     }
4007
4008     return;
4009 }
4010
4011 /*
4012 ** Since the write on the Enet PROM register doesn't seem to reset the PROM
4013 ** pointer correctly (at least on my DE425 EISA card), this routine should do
4014 ** it...from depca.c.
4015 */
4016 static void
4017 enet_addr_rst(u_long aprom_addr)
4018 {
4019     union {
4020         struct {
4021             u32 a;
4022             u32 b;
4023         } llsig;
4024         char Sig[sizeof(u32) << 1];
4025     } dev;
4026     short sigLength=0;
4027     s8 data;
4028     int i, j;
4029
4030     dev.llsig.a = ETH_PROM_SIG;
4031     dev.llsig.b = ETH_PROM_SIG;
4032     sigLength = sizeof(u32) << 1;
4033
4034     for (i=0,j=0;j<sigLength && i<PROBE_LENGTH+sigLength-1;i++) {
4035         data = inb(aprom_addr);
4036         if (dev.Sig[j] == data) {    /* track signature */
4037             j++;
4038         } else {                     /* lost signature; begin search again */
4039             if (data == dev.Sig[0]) {  /* rare case.... */
4040                 j=1;
4041             } else {
4042                 j=0;
4043             }
4044         }
4045     }
4046
4047     return;
4048 }
4049
4050 /*
4051 ** For the bad status case and no SROM, then add one to the previous
4052 ** address. However, need to add one backwards in case we have 0xff
4053 ** as one or more of the bytes. Only the last 3 bytes should be checked
4054 ** as the first three are invariant - assigned to an organisation.
4055 */
4056 static int
4057 get_hw_addr(struct net_device *dev)
4058 {
4059     u_long iobase = dev->base_addr;
4060     int broken, i, k, tmp, status = 0;
4061     u_short j,chksum;
4062     struct de4x5_private *lp = netdev_priv(dev);
4063
4064     broken = de4x5_bad_srom(lp);
4065
4066     for (i=0,k=0,j=0;j<3;j++) {
4067         k <<= 1;
4068         if (k > 0xffff) k-=0xffff;
4069
4070         if (lp->bus == PCI) {
4071             if (lp->chipset == DC21040) {
4072                 while ((tmp = inl(DE4X5_APROM)) < 0);
4073                 k += (u_char) tmp;
4074                 dev->dev_addr[i++] = (u_char) tmp;
4075                 while ((tmp = inl(DE4X5_APROM)) < 0);
4076                 k += (u_short) (tmp << 8);
4077                 dev->dev_addr[i++] = (u_char) tmp;
4078             } else if (!broken) {
4079                 dev->dev_addr[i] = (u_char) lp->srom.ieee_addr[i]; i++;
4080                 dev->dev_addr[i] = (u_char) lp->srom.ieee_addr[i]; i++;
4081             } else if ((broken == SMC) || (broken == ACCTON)) {
4082                 dev->dev_addr[i] = *((u_char *)&lp->srom + i); i++;
4083                 dev->dev_addr[i] = *((u_char *)&lp->srom + i); i++;
4084             }
4085         } else {
4086             k += (u_char) (tmp = inb(EISA_APROM));
4087             dev->dev_addr[i++] = (u_char) tmp;
4088             k += (u_short) ((tmp = inb(EISA_APROM)) << 8);
4089             dev->dev_addr[i++] = (u_char) tmp;
4090         }
4091
4092         if (k > 0xffff) k-=0xffff;
4093     }
4094     if (k == 0xffff) k=0;
4095
4096     if (lp->bus == PCI) {
4097         if (lp->chipset == DC21040) {
4098             while ((tmp = inl(DE4X5_APROM)) < 0);
4099             chksum = (u_char) tmp;
4100             while ((tmp = inl(DE4X5_APROM)) < 0);
4101             chksum |= (u_short) (tmp << 8);
4102             if ((k != chksum) && (dec_only)) status = -1;
4103         }
4104     } else {
4105         chksum = (u_char) inb(EISA_APROM);
4106         chksum |= (u_short) (inb(EISA_APROM) << 8);
4107         if ((k != chksum) && (dec_only)) status = -1;
4108     }
4109
4110     /* If possible, try to fix a broken card - SMC only so far */
4111     srom_repair(dev, broken);
4112
4113 #ifdef CONFIG_PPC_PMAC
4114     /*
4115     ** If the address starts with 00 a0, we have to bit-reverse
4116     ** each byte of the address.
4117     */
4118     if ( machine_is(powermac) &&
4119          (dev->dev_addr[0] == 0) &&
4120          (dev->dev_addr[1] == 0xa0) )
4121     {
4122             for (i = 0; i < ETH_ALEN; ++i)
4123             {
4124                     int x = dev->dev_addr[i];
4125                     x = ((x & 0xf) << 4) + ((x & 0xf0) >> 4);
4126                     x = ((x & 0x33) << 2) + ((x & 0xcc) >> 2);
4127                     dev->dev_addr[i] = ((x & 0x55) << 1) + ((x & 0xaa) >> 1);
4128             }
4129     }
4130 #endif /* CONFIG_PPC_PMAC */
4131
4132     /* Test for a bad enet address */
4133     status = test_bad_enet(dev, status);
4134
4135     return status;
4136 }
4137
4138 /*
4139 ** Test for enet addresses in the first 32 bytes. The built-in strncmp
4140 ** didn't seem to work here...?
4141 */
4142 static int
4143 de4x5_bad_srom(struct de4x5_private *lp)
4144 {
4145     int i, status = 0;
4146
4147     for (i = 0; i < ARRAY_SIZE(enet_det); i++) {
4148         if (!de4x5_strncmp((char *)&lp->srom, (char *)&enet_det[i], 3) &&
4149             !de4x5_strncmp((char *)&lp->srom+0x10, (char *)&enet_det[i], 3)) {
4150             if (i == 0) {
4151                 status = SMC;
4152             } else if (i == 1) {
4153                 status = ACCTON;
4154             }
4155             break;
4156         }
4157     }
4158
4159     return status;
4160 }
4161
4162 static int
4163 de4x5_strncmp(char *a, char *b, int n)
4164 {
4165     int ret=0;
4166
4167     for (;n && !ret; n--) {
4168         ret = *a++ - *b++;
4169     }
4170
4171     return ret;
4172 }
4173
4174 static void
4175 srom_repair(struct net_device *dev, int card)
4176 {
4177     struct de4x5_private *lp = netdev_priv(dev);
4178
4179     switch(card) {
4180       case SMC:
4181         memset((char *)&lp->srom, 0, sizeof(struct de4x5_srom));
4182         memcpy(lp->srom.ieee_addr, (char *)dev->dev_addr, ETH_ALEN);
4183         memcpy(lp->srom.info, (char *)&srom_repair_info[SMC-1], 100);
4184         lp->useSROM = true;
4185         break;
4186     }
4187
4188     return;
4189 }
4190
4191 /*
4192 ** Assume that the irq's do not follow the PCI spec - this is seems
4193 ** to be true so far (2 for 2).
4194 */
4195 static int
4196 test_bad_enet(struct net_device *dev, int status)
4197 {
4198     struct de4x5_private *lp = netdev_priv(dev);
4199     int i, tmp;
4200
4201     for (tmp=0,i=0; i<ETH_ALEN; i++) tmp += (u_char)dev->dev_addr[i];
4202     if ((tmp == 0) || (tmp == 0x5fa)) {
4203         if ((lp->chipset == last.chipset) &&
4204             (lp->bus_num == last.bus) && (lp->bus_num > 0)) {
4205             for (i=0; i<ETH_ALEN; i++) dev->dev_addr[i] = last.addr[i];
4206             for (i=ETH_ALEN-1; i>2; --i) {
4207                 dev->dev_addr[i] += 1;
4208                 if (dev->dev_addr[i] != 0) break;
4209             }
4210             for (i=0; i<ETH_ALEN; i++) last.addr[i] = dev->dev_addr[i];
4211             if (!an_exception(lp)) {
4212                 dev->irq = last.irq;
4213             }
4214
4215             status = 0;
4216         }
4217     } else if (!status) {
4218         last.chipset = lp->chipset;
4219         last.bus = lp->bus_num;
4220         last.irq = dev->irq;
4221         for (i=0; i<ETH_ALEN; i++) last.addr[i] = dev->dev_addr[i];
4222     }
4223
4224     return status;
4225 }
4226
4227 /*
4228 ** List of board exceptions with correctly wired IRQs
4229 */
4230 static int
4231 an_exception(struct de4x5_private *lp)
4232 {
4233     if ((*(u_short *)lp->srom.sub_vendor_id == 0x00c0) &&
4234         (*(u_short *)lp->srom.sub_system_id == 0x95e0)) {
4235         return -1;
4236     }
4237
4238     return 0;
4239 }
4240
4241 /*
4242 ** SROM Read
4243 */
4244 static short
4245 srom_rd(u_long addr, u_char offset)
4246 {
4247     sendto_srom(SROM_RD | SROM_SR, addr);
4248
4249     srom_latch(SROM_RD | SROM_SR | DT_CS, addr);
4250     srom_command(SROM_RD | SROM_SR | DT_IN | DT_CS, addr);
4251     srom_address(SROM_RD | SROM_SR | DT_CS, addr, offset);
4252
4253     return srom_data(SROM_RD | SROM_SR | DT_CS, addr);
4254 }
4255
4256 static void
4257 srom_latch(u_int command, u_long addr)
4258 {
4259     sendto_srom(command, addr);
4260     sendto_srom(command | DT_CLK, addr);
4261     sendto_srom(command, addr);
4262
4263     return;
4264 }
4265
4266 static void
4267 srom_command(u_int command, u_long addr)
4268 {
4269     srom_latch(command, addr);
4270     srom_latch(command, addr);
4271     srom_latch((command & 0x0000ff00) | DT_CS, addr);
4272
4273     return;
4274 }
4275
4276 static void
4277 srom_address(u_int command, u_long addr, u_char offset)
4278 {
4279     int i, a;
4280
4281     a = offset << 2;
4282     for (i=0; i<6; i++, a <<= 1) {
4283         srom_latch(command | ((a & 0x80) ? DT_IN : 0), addr);
4284     }
4285     udelay(1);
4286
4287     i = (getfrom_srom(addr) >> 3) & 0x01;
4288
4289     return;
4290 }
4291
4292 static short
4293 srom_data(u_int command, u_long addr)
4294 {
4295     int i;
4296     short word = 0;
4297     s32 tmp;
4298
4299     for (i=0; i<16; i++) {
4300         sendto_srom(command  | DT_CLK, addr);
4301         tmp = getfrom_srom(addr);
4302         sendto_srom(command, addr);
4303
4304         word = (word << 1) | ((tmp >> 3) & 0x01);
4305     }
4306
4307     sendto_srom(command & 0x0000ff00, addr);
4308
4309     return word;
4310 }
4311
4312 /*
4313 static void
4314 srom_busy(u_int command, u_long addr)
4315 {
4316    sendto_srom((command & 0x0000ff00) | DT_CS, addr);
4317
4318    while (!((getfrom_srom(addr) >> 3) & 0x01)) {
4319        mdelay(1);
4320    }
4321
4322    sendto_srom(command & 0x0000ff00, addr);
4323
4324    return;
4325 }
4326 */
4327
4328 static void
4329 sendto_srom(u_int command, u_long addr)
4330 {
4331     outl(command, addr);
4332     udelay(1);
4333
4334     return;
4335 }
4336
4337 static int
4338 getfrom_srom(u_long addr)
4339 {
4340     s32 tmp;
4341
4342     tmp = inl(addr);
4343     udelay(1);
4344
4345     return tmp;
4346 }
4347
4348 static int
4349 srom_infoleaf_info(struct net_device *dev)
4350 {
4351     struct de4x5_private *lp = netdev_priv(dev);
4352     int i, count;
4353     u_char *p;
4354
4355     /* Find the infoleaf decoder function that matches this chipset */
4356     for (i=0; i<INFOLEAF_SIZE; i++) {
4357         if (lp->chipset == infoleaf_array[i].chipset) break;
4358     }
4359     if (i == INFOLEAF_SIZE) {
4360         lp->useSROM = false;
4361         printk("%s: Cannot find correct chipset for SROM decoding!\n",
4362                                                                   dev->name);
4363         return -ENXIO;
4364     }
4365
4366     lp->infoleaf_fn = infoleaf_array[i].fn;
4367
4368     /* Find the information offset that this function should use */
4369     count = *((u_char *)&lp->srom + 19);
4370     p  = (u_char *)&lp->srom + 26;
4371
4372     if (count > 1) {
4373         for (i=count; i; --i, p+=3) {
4374             if (lp->device == *p) break;
4375         }
4376         if (i == 0) {
4377             lp->useSROM = false;
4378             printk("%s: Cannot find correct PCI device [%d] for SROM decoding!\n",
4379                                                        dev->name, lp->device);
4380             return -ENXIO;
4381         }
4382     }
4383
4384         lp->infoleaf_offset = get_unaligned_le16(p + 1);
4385
4386     return 0;
4387 }
4388
4389 /*
4390 ** This routine loads any type 1 or 3 MII info into the mii device
4391 ** struct and executes any type 5 code to reset PHY devices for this
4392 ** controller.
4393 ** The info for the MII devices will be valid since the index used
4394 ** will follow the discovery process from MII address 1-31 then 0.
4395 */
4396 static void
4397 srom_init(struct net_device *dev)
4398 {
4399     struct de4x5_private *lp = netdev_priv(dev);
4400     u_char *p = (u_char *)&lp->srom + lp->infoleaf_offset;
4401     u_char count;
4402
4403     p+=2;
4404     if (lp->chipset == DC21140) {
4405         lp->cache.gepc = (*p++ | GEP_CTRL);
4406         gep_wr(lp->cache.gepc, dev);
4407     }
4408
4409     /* Block count */
4410     count = *p++;
4411
4412     /* Jump the infoblocks to find types */
4413     for (;count; --count) {
4414         if (*p < 128) {
4415             p += COMPACT_LEN;
4416         } else if (*(p+1) == 5) {
4417             type5_infoblock(dev, 1, p);
4418             p += ((*p & BLOCK_LEN) + 1);
4419         } else if (*(p+1) == 4) {
4420             p += ((*p & BLOCK_LEN) + 1);
4421         } else if (*(p+1) == 3) {
4422             type3_infoblock(dev, 1, p);
4423             p += ((*p & BLOCK_LEN) + 1);
4424         } else if (*(p+1) == 2) {
4425             p += ((*p & BLOCK_LEN) + 1);
4426         } else if (*(p+1) == 1) {
4427             type1_infoblock(dev, 1, p);
4428             p += ((*p & BLOCK_LEN) + 1);
4429         } else {
4430             p += ((*p & BLOCK_LEN) + 1);
4431         }
4432     }
4433
4434     return;
4435 }
4436
4437 /*
4438 ** A generic routine that writes GEP control, data and reset information
4439 ** to the GEP register (21140) or csr15 GEP portion (2114[23]).
4440 */
4441 static void
4442 srom_exec(struct net_device *dev, u_char *p)
4443 {
4444     struct de4x5_private *lp = netdev_priv(dev);
4445     u_long iobase = dev->base_addr;
4446     u_char count = (p ? *p++ : 0);
4447     u_short *w = (u_short *)p;
4448
4449     if (((lp->ibn != 1) && (lp->ibn != 3) && (lp->ibn != 5)) || !count) return;
4450
4451     if (lp->chipset != DC21140) RESET_SIA;
4452
4453     while (count--) {
4454         gep_wr(((lp->chipset==DC21140) && (lp->ibn!=5) ?
4455                                                    *p++ : get_unaligned_le16(w++)), dev);
4456         mdelay(2);                          /* 2ms per action */
4457     }
4458
4459     if (lp->chipset != DC21140) {
4460         outl(lp->cache.csr14, DE4X5_STRR);
4461         outl(lp->cache.csr13, DE4X5_SICR);
4462     }
4463
4464     return;
4465 }
4466
4467 /*
4468 ** Basically this function is a NOP since it will never be called,
4469 ** unless I implement the DC21041 SROM functions. There's no need
4470 ** since the existing code will be satisfactory for all boards.
4471 */
4472 static int
4473 dc21041_infoleaf(struct net_device *dev)
4474 {
4475     return DE4X5_AUTOSENSE_MS;
4476 }
4477
4478 static int
4479 dc21140_infoleaf(struct net_device *dev)
4480 {
4481     struct de4x5_private *lp = netdev_priv(dev);
4482     u_char count = 0;
4483     u_char *p = (u_char *)&lp->srom + lp->infoleaf_offset;
4484     int next_tick = DE4X5_AUTOSENSE_MS;
4485
4486     /* Read the connection type */
4487     p+=2;
4488
4489     /* GEP control */
4490     lp->cache.gepc = (*p++ | GEP_CTRL);
4491
4492     /* Block count */
4493     count = *p++;
4494
4495     /* Recursively figure out the info blocks */
4496     if (*p < 128) {
4497         next_tick = dc_infoblock[COMPACT](dev, count, p);
4498     } else {
4499         next_tick = dc_infoblock[*(p+1)](dev, count, p);
4500     }
4501
4502     if (lp->tcount == count) {
4503         lp->media = NC;
4504         if (lp->media != lp->c_media) {
4505             de4x5_dbg_media(dev);
4506             lp->c_media = lp->media;
4507         }
4508         lp->media = INIT;
4509         lp->tcount = 0;
4510         lp->tx_enable = false;
4511     }
4512
4513     return next_tick & ~TIMER_CB;
4514 }
4515
4516 static int
4517 dc21142_infoleaf(struct net_device *dev)
4518 {
4519     struct de4x5_private *lp = netdev_priv(dev);
4520     u_char count = 0;
4521     u_char *p = (u_char *)&lp->srom + lp->infoleaf_offset;
4522     int next_tick = DE4X5_AUTOSENSE_MS;
4523
4524     /* Read the connection type */
4525     p+=2;
4526
4527     /* Block count */
4528     count = *p++;
4529
4530     /* Recursively figure out the info blocks */
4531     if (*p < 128) {
4532         next_tick = dc_infoblock[COMPACT](dev, count, p);
4533     } else {
4534         next_tick = dc_infoblock[*(p+1)](dev, count, p);
4535     }
4536
4537     if (lp->tcount == count) {
4538         lp->media = NC;
4539         if (lp->media != lp->c_media) {
4540             de4x5_dbg_media(dev);
4541             lp->c_media = lp->media;
4542         }
4543         lp->media = INIT;
4544         lp->tcount = 0;
4545         lp->tx_enable = false;
4546     }
4547
4548     return next_tick & ~TIMER_CB;
4549 }
4550
4551 static int
4552 dc21143_infoleaf(struct net_device *dev)
4553 {
4554     struct de4x5_private *lp = netdev_priv(dev);
4555     u_char count = 0;
4556     u_char *p = (u_char *)&lp->srom + lp->infoleaf_offset;
4557     int next_tick = DE4X5_AUTOSENSE_MS;
4558
4559     /* Read the connection type */
4560     p+=2;
4561
4562     /* Block count */
4563     count = *p++;
4564
4565     /* Recursively figure out the info blocks */
4566     if (*p < 128) {
4567         next_tick = dc_infoblock[COMPACT](dev, count, p);
4568     } else {
4569         next_tick = dc_infoblock[*(p+1)](dev, count, p);
4570     }
4571     if (lp->tcount == count) {
4572         lp->media = NC;
4573         if (lp->media != lp->c_media) {
4574             de4x5_dbg_media(dev);
4575             lp->c_media = lp->media;
4576         }
4577         lp->media = INIT;
4578         lp->tcount = 0;
4579         lp->tx_enable = false;
4580     }
4581
4582     return next_tick & ~TIMER_CB;
4583 }
4584
4585 /*
4586 ** The compact infoblock is only designed for DC21140[A] chips, so
4587 ** we'll reuse the dc21140m_autoconf function. Non MII media only.
4588 */
4589 static int
4590 compact_infoblock(struct net_device *dev, u_char count, u_char *p)
4591 {
4592     struct de4x5_private *lp = netdev_priv(dev);
4593     u_char flags, csr6;
4594
4595     /* Recursively figure out the info blocks */
4596     if (--count > lp->tcount) {
4597         if (*(p+COMPACT_LEN) < 128) {
4598             return dc_infoblock[COMPACT](dev, count, p+COMPACT_LEN);
4599         } else {
4600             return dc_infoblock[*(p+COMPACT_LEN+1)](dev, count, p+COMPACT_LEN);
4601         }
4602     }
4603
4604     if ((lp->media == INIT) && (lp->timeout < 0)) {
4605         lp->ibn = COMPACT;
4606         lp->active = 0;
4607         gep_wr(lp->cache.gepc, dev);
4608         lp->infoblock_media = (*p++) & COMPACT_MC;
4609         lp->cache.gep = *p++;
4610         csr6 = *p++;
4611         flags = *p++;
4612
4613         lp->asBitValid = (flags & 0x80) ? 0 : -1;
4614         lp->defMedium = (flags & 0x40) ? -1 : 0;
4615         lp->asBit = 1 << ((csr6 >> 1) & 0x07);
4616         lp->asPolarity = ((csr6 & 0x80) ? -1 : 0) & lp->asBit;
4617         lp->infoblock_csr6 = OMR_DEF | ((csr6 & 0x71) << 18);
4618         lp->useMII = false;
4619
4620         de4x5_switch_mac_port(dev);
4621     }
4622
4623     return dc21140m_autoconf(dev);
4624 }
4625
4626 /*
4627 ** This block describes non MII media for the DC21140[A] only.
4628 */
4629 static int
4630 type0_infoblock(struct net_device *dev, u_char count, u_char *p)
4631 {
4632     struct de4x5_private *lp = netdev_priv(dev);
4633     u_char flags, csr6, len = (*p & BLOCK_LEN)+1;
4634
4635     /* Recursively figure out the info blocks */
4636     if (--count > lp->tcount) {
4637         if (*(p+len) < 128) {
4638             return dc_infoblock[COMPACT](dev, count, p+len);
4639         } else {
4640             return dc_infoblock[*(p+len+1)](dev, count, p+len);
4641         }
4642     }
4643
4644     if ((lp->media == INIT) && (lp->timeout < 0)) {
4645         lp->ibn = 0;
4646         lp->active = 0;
4647         gep_wr(lp->cache.gepc, dev);
4648         p+=2;
4649         lp->infoblock_media = (*p++) & BLOCK0_MC;
4650         lp->cache.gep = *p++;
4651         csr6 = *p++;
4652         flags = *p++;
4653
4654         lp->asBitValid = (flags & 0x80) ? 0 : -1;
4655         lp->defMedium = (flags & 0x40) ? -1 : 0;
4656         lp->asBit = 1 << ((csr6 >> 1) & 0x07);
4657         lp->asPolarity = ((csr6 & 0x80) ? -1 : 0) & lp->asBit;
4658         lp->infoblock_csr6 = OMR_DEF | ((csr6 & 0x71) << 18);
4659         lp->useMII = false;
4660
4661         de4x5_switch_mac_port(dev);
4662     }
4663
4664     return dc21140m_autoconf(dev);
4665 }
4666
4667 /* These functions are under construction! */
4668
4669 static int
4670 type1_infoblock(struct net_device *dev, u_char count, u_char *p)
4671 {
4672     struct de4x5_private *lp = netdev_priv(dev);
4673     u_char len = (*p & BLOCK_LEN)+1;
4674
4675     /* Recursively figure out the info blocks */
4676     if (--count > lp->tcount) {
4677         if (*(p+len) < 128) {
4678             return dc_infoblock[COMPACT](dev, count, p+len);
4679         } else {
4680             return dc_infoblock[*(p+len+1)](dev, count, p+len);
4681         }
4682     }
4683
4684     p += 2;
4685     if (lp->state == INITIALISED) {
4686         lp->ibn = 1;
4687         lp->active = *p++;
4688         lp->phy[lp->active].gep = (*p ? p : NULL); p += (*p + 1);
4689         lp->phy[lp->active].rst = (*p ? p : NULL); p += (*p + 1);
4690         lp->phy[lp->active].mc  = get_unaligned_le16(p); p += 2;
4691         lp->phy[lp->active].ana = get_unaligned_le16(p); p += 2;
4692         lp->phy[lp->active].fdx = get_unaligned_le16(p); p += 2;
4693         lp->phy[lp->active].ttm = get_unaligned_le16(p);
4694         return 0;
4695     } else if ((lp->media == INIT) && (lp->timeout < 0)) {
4696         lp->ibn = 1;
4697         lp->active = *p;
4698         lp->infoblock_csr6 = OMR_MII_100;
4699         lp->useMII = true;
4700         lp->infoblock_media = ANS;
4701
4702         de4x5_switch_mac_port(dev);
4703     }
4704
4705     return dc21140m_autoconf(dev);
4706 }
4707
4708 static int
4709 type2_infoblock(struct net_device *dev, u_char count, u_char *p)
4710 {
4711     struct de4x5_private *lp = netdev_priv(dev);
4712     u_char len = (*p & BLOCK_LEN)+1;
4713
4714     /* Recursively figure out the info blocks */
4715     if (--count > lp->tcount) {
4716         if (*(p+len) < 128) {
4717             return dc_infoblock[COMPACT](dev, count, p+len);
4718         } else {
4719             return dc_infoblock[*(p+len+1)](dev, count, p+len);
4720         }
4721     }
4722
4723     if ((lp->media == INIT) && (lp->timeout < 0)) {
4724         lp->ibn = 2;
4725         lp->active = 0;
4726         p += 2;
4727         lp->infoblock_media = (*p) & MEDIA_CODE;
4728
4729         if ((*p++) & EXT_FIELD) {
4730             lp->cache.csr13 = get_unaligned_le16(p); p += 2;
4731             lp->cache.csr14 = get_unaligned_le16(p); p += 2;
4732             lp->cache.csr15 = get_unaligned_le16(p); p += 2;
4733         } else {
4734             lp->cache.csr13 = CSR13;
4735             lp->cache.csr14 = CSR14;
4736             lp->cache.csr15 = CSR15;
4737         }
4738         lp->cache.gepc = ((s32)(get_unaligned_le16(p)) << 16); p += 2;
4739         lp->cache.gep  = ((s32)(get_unaligned_le16(p)) << 16);
4740         lp->infoblock_csr6 = OMR_SIA;
4741         lp->useMII = false;
4742
4743         de4x5_switch_mac_port(dev);
4744     }
4745
4746     return dc2114x_autoconf(dev);
4747 }
4748
4749 static int
4750 type3_infoblock(struct net_device *dev, u_char count, u_char *p)
4751 {
4752     struct de4x5_private *lp = netdev_priv(dev);
4753     u_char len = (*p & BLOCK_LEN)+1;
4754
4755     /* Recursively figure out the info blocks */
4756     if (--count > lp->tcount) {
4757         if (*(p+len) < 128) {
4758             return dc_infoblock[COMPACT](dev, count, p+len);
4759         } else {
4760             return dc_infoblock[*(p+len+1)](dev, count, p+len);
4761         }
4762     }
4763
4764     p += 2;
4765     if (lp->state == INITIALISED) {
4766         lp->ibn = 3;
4767         lp->active = *p++;
4768         if (MOTO_SROM_BUG) lp->active = 0;
4769         lp->phy[lp->active].gep = (*p ? p : NULL); p += (2 * (*p) + 1);
4770         lp->phy[lp->active].rst = (*p ? p : NULL); p += (2 * (*p) + 1);
4771         lp->phy[lp->active].mc  = get_unaligned_le16(p); p += 2;
4772         lp->phy[lp->active].ana = get_unaligned_le16(p); p += 2;
4773         lp->phy[lp->active].fdx = get_unaligned_le16(p); p += 2;
4774         lp->phy[lp->active].ttm = get_unaligned_le16(p); p += 2;
4775         lp->phy[lp->active].mci = *p;
4776         return 0;
4777     } else if ((lp->media == INIT) && (lp->timeout < 0)) {
4778         lp->ibn = 3;
4779         lp->active = *p;
4780         if (MOTO_SROM_BUG) lp->active = 0;
4781         lp->infoblock_csr6 = OMR_MII_100;
4782         lp->useMII = true;
4783         lp->infoblock_media = ANS;
4784
4785         de4x5_switch_mac_port(dev);
4786     }
4787
4788     return dc2114x_autoconf(dev);
4789 }
4790
4791 static int
4792 type4_infoblock(struct net_device *dev, u_char count, u_char *p)
4793 {
4794     struct de4x5_private *lp = netdev_priv(dev);
4795     u_char flags, csr6, len = (*p & BLOCK_LEN)+1;
4796
4797     /* Recursively figure out the info blocks */
4798     if (--count > lp->tcount) {
4799         if (*(p+len) < 128) {
4800             return dc_infoblock[COMPACT](dev, count, p+len);
4801         } else {
4802             return dc_infoblock[*(p+len+1)](dev, count, p+len);
4803         }
4804     }
4805
4806     if ((lp->media == INIT) && (lp->timeout < 0)) {
4807         lp->ibn = 4;
4808         lp->active = 0;
4809         p+=2;
4810         lp->infoblock_media = (*p++) & MEDIA_CODE;
4811         lp->cache.csr13 = CSR13;              /* Hard coded defaults */
4812         lp->cache.csr14 = CSR14;
4813         lp->cache.csr15 = CSR15;
4814         lp->cache.gepc = ((s32)(get_unaligned_le16(p)) << 16); p += 2;
4815         lp->cache.gep  = ((s32)(get_unaligned_le16(p)) << 16); p += 2;
4816         csr6 = *p++;
4817         flags = *p++;
4818
4819         lp->asBitValid = (flags & 0x80) ? 0 : -1;
4820         lp->defMedium = (flags & 0x40) ? -1 : 0;
4821         lp->asBit = 1 << ((csr6 >> 1) & 0x07);
4822         lp->asPolarity = ((csr6 & 0x80) ? -1 : 0) & lp->asBit;
4823         lp->infoblock_csr6 = OMR_DEF | ((csr6 & 0x71) << 18);
4824         lp->useMII = false;
4825
4826         de4x5_switch_mac_port(dev);
4827     }
4828
4829     return dc2114x_autoconf(dev);
4830 }
4831
4832 /*
4833 ** This block type provides information for resetting external devices
4834 ** (chips) through the General Purpose Register.
4835 */
4836 static int
4837 type5_infoblock(struct net_device *dev, u_char count, u_char *p)
4838 {
4839     struct de4x5_private *lp = netdev_priv(dev);
4840     u_char len = (*p & BLOCK_LEN)+1;
4841
4842     /* Recursively figure out the info blocks */
4843     if (--count > lp->tcount) {
4844         if (*(p+len) < 128) {
4845             return dc_infoblock[COMPACT](dev, count, p+len);
4846         } else {
4847             return dc_infoblock[*(p+len+1)](dev, count, p+len);
4848         }
4849     }
4850
4851     /* Must be initializing to run this code */
4852     if ((lp->state == INITIALISED) || (lp->media == INIT)) {
4853         p+=2;
4854         lp->rst = p;
4855         srom_exec(dev, lp->rst);
4856     }
4857
4858     return DE4X5_AUTOSENSE_MS;
4859 }
4860
4861 /*
4862 ** MII Read/Write
4863 */
4864
4865 static int
4866 mii_rd(u_char phyreg, u_char phyaddr, u_long ioaddr)
4867 {
4868     mii_wdata(MII_PREAMBLE,  2, ioaddr);   /* Start of 34 bit preamble...    */
4869     mii_wdata(MII_PREAMBLE, 32, ioaddr);   /* ...continued                   */
4870     mii_wdata(MII_STRD, 4, ioaddr);        /* SFD and Read operation         */
4871     mii_address(phyaddr, ioaddr);          /* PHY address to be accessed     */
4872     mii_address(phyreg, ioaddr);           /* PHY Register to read           */
4873     mii_ta(MII_STRD, ioaddr);              /* Turn around time - 2 MDC       */
4874
4875     return mii_rdata(ioaddr);              /* Read data                      */
4876 }
4877
4878 static void
4879 mii_wr(int data, u_char phyreg, u_char phyaddr, u_long ioaddr)
4880 {
4881     mii_wdata(MII_PREAMBLE,  2, ioaddr);   /* Start of 34 bit preamble...    */
4882     mii_wdata(MII_PREAMBLE, 32, ioaddr);   /* ...continued                   */
4883     mii_wdata(MII_STWR, 4, ioaddr);        /* SFD and Write operation        */
4884     mii_address(phyaddr, ioaddr);          /* PHY address to be accessed     */
4885     mii_address(phyreg, ioaddr);           /* PHY Register to write          */
4886     mii_ta(MII_STWR, ioaddr);              /* Turn around time - 2 MDC       */
4887     data = mii_swap(data, 16);             /* Swap data bit ordering         */
4888     mii_wdata(data, 16, ioaddr);           /* Write data                     */
4889
4890     return;
4891 }
4892
4893 static int
4894 mii_rdata(u_long ioaddr)
4895 {
4896     int i;
4897     s32 tmp = 0;
4898
4899     for (i=0; i<16; i++) {
4900         tmp <<= 1;
4901         tmp |= getfrom_mii(MII_MRD | MII_RD, ioaddr);
4902     }
4903
4904     return tmp;
4905 }
4906
4907 static void
4908 mii_wdata(int data, int len, u_long ioaddr)
4909 {
4910     int i;
4911
4912     for (i=0; i<len; i++) {
4913         sendto_mii(MII_MWR | MII_WR, data, ioaddr);
4914         data >>= 1;
4915     }
4916
4917     return;
4918 }
4919
4920 static void
4921 mii_address(u_char addr, u_long ioaddr)
4922 {
4923     int i;
4924
4925     addr = mii_swap(addr, 5);
4926     for (i=0; i<5; i++) {
4927         sendto_mii(MII_MWR | MII_WR, addr, ioaddr);
4928         addr >>= 1;
4929     }
4930
4931     return;
4932 }
4933
4934 static void
4935 mii_ta(u_long rw, u_long ioaddr)
4936 {
4937     if (rw == MII_STWR) {
4938         sendto_mii(MII_MWR | MII_WR, 1, ioaddr);
4939         sendto_mii(MII_MWR | MII_WR, 0, ioaddr);
4940     } else {
4941         getfrom_mii(MII_MRD | MII_RD, ioaddr);        /* Tri-state MDIO */
4942     }
4943
4944     return;
4945 }
4946
4947 static int
4948 mii_swap(int data, int len)
4949 {
4950     int i, tmp = 0;
4951
4952     for (i=0; i<len; i++) {
4953         tmp <<= 1;
4954         tmp |= (data & 1);
4955         data >>= 1;
4956     }
4957
4958     return tmp;
4959 }
4960
4961 static void
4962 sendto_mii(u32 command, int data, u_long ioaddr)
4963 {
4964     u32 j;
4965
4966     j = (data & 1) << 17;
4967     outl(command | j, ioaddr);
4968     udelay(1);
4969     outl(command | MII_MDC | j, ioaddr);
4970     udelay(1);
4971
4972     return;
4973 }
4974
4975 static int
4976 getfrom_mii(u32 command, u_long ioaddr)
4977 {
4978     outl(command, ioaddr);
4979     udelay(1);
4980     outl(command | MII_MDC, ioaddr);
4981     udelay(1);
4982
4983     return ((inl(ioaddr) >> 19) & 1);
4984 }
4985
4986 /*
4987 ** Here's 3 ways to calculate the OUI from the ID registers.
4988 */
4989 static int
4990 mii_get_oui(u_char phyaddr, u_long ioaddr)
4991 {
4992 /*
4993     union {
4994         u_short reg;
4995         u_char breg[2];
4996     } a;
4997     int i, r2, r3, ret=0;*/
4998     int r2, r3;
4999
5000     /* Read r2 and r3 */
5001     r2 = mii_rd(MII_ID0, phyaddr, ioaddr);
5002     r3 = mii_rd(MII_ID1, phyaddr, ioaddr);
5003                                                 /* SEEQ and Cypress way * /
5004     / * Shuffle r2 and r3 * /
5005     a.reg=0;
5006     r3 = ((r3>>10)|(r2<<6))&0x0ff;
5007     r2 = ((r2>>2)&0x3fff);
5008
5009     / * Bit reverse r3 * /
5010     for (i=0;i<8;i++) {
5011         ret<<=1;
5012         ret |= (r3&1);
5013         r3>>=1;
5014     }
5015
5016     / * Bit reverse r2 * /
5017     for (i=0;i<16;i++) {
5018         a.reg<<=1;
5019         a.reg |= (r2&1);
5020         r2>>=1;
5021     }
5022
5023     / * Swap r2 bytes * /
5024     i=a.breg[0];
5025     a.breg[0]=a.breg[1];
5026     a.breg[1]=i;
5027
5028     return ((a.reg<<8)|ret); */                 /* SEEQ and Cypress way */
5029 /*    return ((r2<<6)|(u_int)(r3>>10)); */      /* NATIONAL and BROADCOM way */
5030     return r2;                                  /* (I did it) My way */
5031 }
5032
5033 /*
5034 ** The SROM spec forces us to search addresses [1-31 0]. Bummer.
5035 */
5036 static int
5037 mii_get_phy(struct net_device *dev)
5038 {
5039     struct de4x5_private *lp = netdev_priv(dev);
5040     u_long iobase = dev->base_addr;
5041     int i, j, k, n, limit=ARRAY_SIZE(phy_info);
5042     int id;
5043
5044     lp->active = 0;
5045     lp->useMII = true;
5046
5047     /* Search the MII address space for possible PHY devices */
5048     for (n=0, lp->mii_cnt=0, i=1; !((i==1) && (n==1)); i=(i+1)%DE4X5_MAX_MII) {
5049         lp->phy[lp->active].addr = i;
5050         if (i==0) n++;                             /* Count cycles */
5051         while (de4x5_reset_phy(dev)<0) udelay(100);/* Wait for reset */
5052         id = mii_get_oui(i, DE4X5_MII);
5053         if ((id == 0) || (id == 65535)) continue;  /* Valid ID? */
5054         for (j=0; j<limit; j++) {                  /* Search PHY table */
5055             if (id != phy_info[j].id) continue;    /* ID match? */
5056             for (k=0; lp->phy[k].id && (k < DE4X5_MAX_PHY); k++);
5057             if (k < DE4X5_MAX_PHY) {
5058                 memcpy((char *)&lp->phy[k],
5059                        (char *)&phy_info[j], sizeof(struct phy_table));
5060                 lp->phy[k].addr = i;
5061                 lp->mii_cnt++;
5062                 lp->active++;
5063             } else {
5064                 goto purgatory;                    /* Stop the search */
5065             }
5066             break;
5067         }
5068         if ((j == limit) && (i < DE4X5_MAX_MII)) {
5069             for (k=0; lp->phy[k].id && (k < DE4X5_MAX_PHY); k++);
5070             lp->phy[k].addr = i;
5071             lp->phy[k].id = id;
5072             lp->phy[k].spd.reg = GENERIC_REG;      /* ANLPA register         */
5073             lp->phy[k].spd.mask = GENERIC_MASK;    /* 100Mb/s technologies   */
5074             lp->phy[k].spd.value = GENERIC_VALUE;  /* TX & T4, H/F Duplex    */
5075             lp->mii_cnt++;
5076             lp->active++;
5077             printk("%s: Using generic MII device control. If the board doesn't operate, \nplease mail the following dump to the author:\n", dev->name);
5078             j = de4x5_debug;
5079             de4x5_debug |= DEBUG_MII;
5080             de4x5_dbg_mii(dev, k);
5081             de4x5_debug = j;
5082             printk("\n");
5083         }
5084     }
5085   purgatory:
5086     lp->active = 0;
5087     if (lp->phy[0].id) {                           /* Reset the PHY devices */
5088         for (k=0; lp->phy[k].id && (k < DE4X5_MAX_PHY); k++) { /*For each PHY*/
5089             mii_wr(MII_CR_RST, MII_CR, lp->phy[k].addr, DE4X5_MII);
5090             while (mii_rd(MII_CR, lp->phy[k].addr, DE4X5_MII) & MII_CR_RST);
5091
5092             de4x5_dbg_mii(dev, k);
5093         }
5094     }
5095     if (!lp->mii_cnt) lp->useMII = false;
5096
5097     return lp->mii_cnt;
5098 }
5099
5100 static char *
5101 build_setup_frame(struct net_device *dev, int mode)
5102 {
5103     struct de4x5_private *lp = netdev_priv(dev);
5104     int i;
5105     char *pa = lp->setup_frame;
5106
5107     /* Initialise the setup frame */
5108     if (mode == ALL) {
5109         memset(lp->setup_frame, 0, SETUP_FRAME_LEN);
5110     }
5111
5112     if (lp->setup_f == HASH_PERF) {
5113         for (pa=lp->setup_frame+IMPERF_PA_OFFSET, i=0; i<ETH_ALEN; i++) {
5114             *(pa + i) = dev->dev_addr[i];                 /* Host address */
5115             if (i & 0x01) pa += 2;
5116         }
5117         *(lp->setup_frame + (HASH_TABLE_LEN >> 3) - 3) = 0x80;
5118     } else {
5119         for (i=0; i<ETH_ALEN; i++) { /* Host address */
5120             *(pa + (i&1)) = dev->dev_addr[i];
5121             if (i & 0x01) pa += 4;
5122         }
5123         for (i=0; i<ETH_ALEN; i++) { /* Broadcast address */
5124             *(pa + (i&1)) = (char) 0xff;
5125             if (i & 0x01) pa += 4;
5126         }
5127     }
5128
5129     return pa;                     /* Points to the next entry */
5130 }
5131
5132 static void
5133 disable_ast(struct net_device *dev)
5134 {
5135         struct de4x5_private *lp = netdev_priv(dev);
5136         del_timer_sync(&lp->timer);
5137 }
5138
5139 static long
5140 de4x5_switch_mac_port(struct net_device *dev)
5141 {
5142     struct de4x5_private *lp = netdev_priv(dev);
5143     u_long iobase = dev->base_addr;
5144     s32 omr;
5145
5146     STOP_DE4X5;
5147
5148     /* Assert the OMR_PS bit in CSR6 */
5149     omr = (inl(DE4X5_OMR) & ~(OMR_PS | OMR_HBD | OMR_TTM | OMR_PCS | OMR_SCR |
5150                                                                      OMR_FDX));
5151     omr |= lp->infoblock_csr6;
5152     if (omr & OMR_PS) omr |= OMR_HBD;
5153     outl(omr, DE4X5_OMR);
5154
5155     /* Soft Reset */
5156     RESET_DE4X5;
5157
5158     /* Restore the GEP - especially for COMPACT and Type 0 Infoblocks */
5159     if (lp->chipset == DC21140) {
5160         gep_wr(lp->cache.gepc, dev);
5161         gep_wr(lp->cache.gep, dev);
5162     } else if ((lp->chipset & ~0x0ff) == DC2114x) {
5163         reset_init_sia(dev, lp->cache.csr13, lp->cache.csr14, lp->cache.csr15);
5164     }
5165
5166     /* Restore CSR6 */
5167     outl(omr, DE4X5_OMR);
5168
5169     /* Reset CSR8 */
5170     inl(DE4X5_MFC);
5171
5172     return omr;
5173 }
5174
5175 static void
5176 gep_wr(s32 data, struct net_device *dev)
5177 {
5178     struct de4x5_private *lp = netdev_priv(dev);
5179     u_long iobase = dev->base_addr;
5180
5181     if (lp->chipset == DC21140) {
5182         outl(data, DE4X5_GEP);
5183     } else if ((lp->chipset & ~0x00ff) == DC2114x) {
5184         outl((data<<16) | lp->cache.csr15, DE4X5_SIGR);
5185     }
5186
5187     return;
5188 }
5189
5190 static int
5191 gep_rd(struct net_device *dev)
5192 {
5193     struct de4x5_private *lp = netdev_priv(dev);
5194     u_long iobase = dev->base_addr;
5195
5196     if (lp->chipset == DC21140) {
5197         return inl(DE4X5_GEP);
5198     } else if ((lp->chipset & ~0x00ff) == DC2114x) {
5199         return (inl(DE4X5_SIGR) & 0x000fffff);
5200     }
5201
5202     return 0;
5203 }
5204
5205 static void
5206 yawn(struct net_device *dev, int state)
5207 {
5208     struct de4x5_private *lp = netdev_priv(dev);
5209     u_long iobase = dev->base_addr;
5210
5211     if ((lp->chipset == DC21040) || (lp->chipset == DC21140)) return;
5212
5213     if(lp->bus == EISA) {
5214         switch(state) {
5215           case WAKEUP:
5216             outb(WAKEUP, PCI_CFPM);
5217             mdelay(10);
5218             break;
5219
5220           case SNOOZE:
5221             outb(SNOOZE, PCI_CFPM);
5222             break;
5223
5224           case SLEEP:
5225             outl(0, DE4X5_SICR);
5226             outb(SLEEP, PCI_CFPM);
5227             break;
5228         }
5229     } else {
5230         struct pci_dev *pdev = to_pci_dev (lp->gendev);
5231         switch(state) {
5232           case WAKEUP:
5233             pci_write_config_byte(pdev, PCI_CFDA_PSM, WAKEUP);
5234             mdelay(10);
5235             break;
5236
5237           case SNOOZE:
5238             pci_write_config_byte(pdev, PCI_CFDA_PSM, SNOOZE);
5239             break;
5240
5241           case SLEEP:
5242             outl(0, DE4X5_SICR);
5243             pci_write_config_byte(pdev, PCI_CFDA_PSM, SLEEP);
5244             break;
5245         }
5246     }
5247
5248     return;
5249 }
5250
5251 static void
5252 de4x5_parse_params(struct net_device *dev)
5253 {
5254     struct de4x5_private *lp = netdev_priv(dev);
5255     char *p, *q, t;
5256
5257     lp->params.fdx = 0;
5258     lp->params.autosense = AUTO;
5259
5260     if (args == NULL) return;
5261
5262     if ((p = strstr(args, dev->name))) {
5263         if (!(q = strstr(p+strlen(dev->name), "eth"))) q = p + strlen(p);
5264         t = *q;
5265         *q = '\0';
5266
5267         if (strstr(p, "fdx") || strstr(p, "FDX")) lp->params.fdx = 1;
5268
5269         if (strstr(p, "autosense") || strstr(p, "AUTOSENSE")) {
5270             if (strstr(p, "TP")) {
5271                 lp->params.autosense = TP;
5272             } else if (strstr(p, "TP_NW")) {
5273                 lp->params.autosense = TP_NW;
5274             } else if (strstr(p, "BNC")) {
5275                 lp->params.autosense = BNC;
5276             } else if (strstr(p, "AUI")) {
5277                 lp->params.autosense = AUI;
5278             } else if (strstr(p, "BNC_AUI")) {
5279                 lp->params.autosense = BNC;
5280             } else if (strstr(p, "10Mb")) {
5281                 lp->params.autosense = _10Mb;
5282             } else if (strstr(p, "100Mb")) {
5283                 lp->params.autosense = _100Mb;
5284             } else if (strstr(p, "AUTO")) {
5285                 lp->params.autosense = AUTO;
5286             }
5287         }
5288         *q = t;
5289     }
5290
5291     return;
5292 }
5293
5294 static void
5295 de4x5_dbg_open(struct net_device *dev)
5296 {
5297     struct de4x5_private *lp = netdev_priv(dev);
5298     int i;
5299
5300     if (de4x5_debug & DEBUG_OPEN) {
5301         printk("%s: de4x5 opening with irq %d\n",dev->name,dev->irq);
5302         printk("\tphysical address: ");
5303         for (i=0;i<6;i++) {
5304             printk("%2.2x:",(short)dev->dev_addr[i]);
5305         }
5306         printk("\n");
5307         printk("Descriptor head addresses:\n");
5308         printk("\t0x%8.8lx  0x%8.8lx\n",(u_long)lp->rx_ring,(u_long)lp->tx_ring);
5309         printk("Descriptor addresses:\nRX: ");
5310         for (i=0;i<lp->rxRingSize-1;i++){
5311             if (i < 3) {
5312                 printk("0x%8.8lx  ",(u_long)&lp->rx_ring[i].status);
5313             }
5314         }
5315         printk("...0x%8.8lx\n",(u_long)&lp->rx_ring[i].status);
5316         printk("TX: ");
5317         for (i=0;i<lp->txRingSize-1;i++){
5318             if (i < 3) {
5319                 printk("0x%8.8lx  ", (u_long)&lp->tx_ring[i].status);
5320             }
5321         }
5322         printk("...0x%8.8lx\n", (u_long)&lp->tx_ring[i].status);
5323         printk("Descriptor buffers:\nRX: ");
5324         for (i=0;i<lp->rxRingSize-1;i++){
5325             if (i < 3) {
5326                 printk("0x%8.8x  ",le32_to_cpu(lp->rx_ring[i].buf));
5327             }
5328         }
5329         printk("...0x%8.8x\n",le32_to_cpu(lp->rx_ring[i].buf));
5330         printk("TX: ");
5331         for (i=0;i<lp->txRingSize-1;i++){
5332             if (i < 3) {
5333                 printk("0x%8.8x  ", le32_to_cpu(lp->tx_ring[i].buf));
5334             }
5335         }
5336         printk("...0x%8.8x\n", le32_to_cpu(lp->tx_ring[i].buf));
5337         printk("Ring size: \nRX: %d\nTX: %d\n",
5338                (short)lp->rxRingSize,
5339                (short)lp->txRingSize);
5340     }
5341
5342     return;
5343 }
5344
5345 static void
5346 de4x5_dbg_mii(struct net_device *dev, int k)
5347 {
5348     struct de4x5_private *lp = netdev_priv(dev);
5349     u_long iobase = dev->base_addr;
5350
5351     if (de4x5_debug & DEBUG_MII) {
5352         printk("\nMII device address: %d\n", lp->phy[k].addr);
5353         printk("MII CR:  %x\n",mii_rd(MII_CR,lp->phy[k].addr,DE4X5_MII));
5354         printk("MII SR:  %x\n",mii_rd(MII_SR,lp->phy[k].addr,DE4X5_MII));
5355         printk("MII ID0: %x\n",mii_rd(MII_ID0,lp->phy[k].addr,DE4X5_MII));
5356         printk("MII ID1: %x\n",mii_rd(MII_ID1,lp->phy[k].addr,DE4X5_MII));
5357         if (lp->phy[k].id != BROADCOM_T4) {
5358             printk("MII ANA: %x\n",mii_rd(0x04,lp->phy[k].addr,DE4X5_MII));
5359             printk("MII ANC: %x\n",mii_rd(0x05,lp->phy[k].addr,DE4X5_MII));
5360         }
5361         printk("MII 16:  %x\n",mii_rd(0x10,lp->phy[k].addr,DE4X5_MII));
5362         if (lp->phy[k].id != BROADCOM_T4) {
5363             printk("MII 17:  %x\n",mii_rd(0x11,lp->phy[k].addr,DE4X5_MII));
5364             printk("MII 18:  %x\n",mii_rd(0x12,lp->phy[k].addr,DE4X5_MII));
5365         } else {
5366             printk("MII 20:  %x\n",mii_rd(0x14,lp->phy[k].addr,DE4X5_MII));
5367         }
5368     }
5369
5370     return;
5371 }
5372
5373 static void
5374 de4x5_dbg_media(struct net_device *dev)
5375 {
5376     struct de4x5_private *lp = netdev_priv(dev);
5377
5378     if (lp->media != lp->c_media) {
5379         if (de4x5_debug & DEBUG_MEDIA) {
5380             printk("%s: media is %s%s\n", dev->name,
5381                    (lp->media == NC  ? "unconnected, link down or incompatible connection" :
5382                     (lp->media == TP  ? "TP" :
5383                      (lp->media == ANS ? "TP/Nway" :
5384                       (lp->media == BNC ? "BNC" :
5385                        (lp->media == AUI ? "AUI" :
5386                         (lp->media == BNC_AUI ? "BNC/AUI" :
5387                          (lp->media == EXT_SIA ? "EXT SIA" :
5388                           (lp->media == _100Mb  ? "100Mb/s" :
5389                            (lp->media == _10Mb   ? "10Mb/s" :
5390                             "???"
5391                             ))))))))), (lp->fdx?" full duplex.":"."));
5392         }
5393         lp->c_media = lp->media;
5394     }
5395
5396     return;
5397 }
5398
5399 static void
5400 de4x5_dbg_srom(struct de4x5_srom *p)
5401 {
5402     int i;
5403
5404     if (de4x5_debug & DEBUG_SROM) {
5405         printk("Sub-system Vendor ID: %04x\n", *((u_short *)p->sub_vendor_id));
5406         printk("Sub-system ID:        %04x\n", *((u_short *)p->sub_system_id));
5407         printk("ID Block CRC:         %02x\n", (u_char)(p->id_block_crc));
5408         printk("SROM version:         %02x\n", (u_char)(p->version));
5409         printk("# controllers:        %02x\n", (u_char)(p->num_controllers));
5410
5411         printk("Hardware Address:     %pM\n", p->ieee_addr);
5412         printk("CRC checksum:         %04x\n", (u_short)(p->chksum));
5413         for (i=0; i<64; i++) {
5414             printk("%3d %04x\n", i<<1, (u_short)*((u_short *)p+i));
5415         }
5416     }
5417
5418     return;
5419 }
5420
5421 static void
5422 de4x5_dbg_rx(struct sk_buff *skb, int len)
5423 {
5424     int i, j;
5425
5426     if (de4x5_debug & DEBUG_RX) {
5427         printk("R: %pM <- %pM len/SAP:%02x%02x [%d]\n",
5428                skb->data, &skb->data[6],
5429                (u_char)skb->data[12],
5430                (u_char)skb->data[13],
5431                len);
5432         for (j=0; len>0;j+=16, len-=16) {
5433           printk("    %03x: ",j);
5434           for (i=0; i<16 && i<len; i++) {
5435             printk("%02x ",(u_char)skb->data[i+j]);
5436           }
5437           printk("\n");
5438         }
5439     }
5440
5441     return;
5442 }
5443
5444 /*
5445 ** Perform IOCTL call functions here. Some are privileged operations and the
5446 ** effective uid is checked in those cases. In the normal course of events
5447 ** this function is only used for my testing.
5448 */
5449 static int
5450 de4x5_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
5451 {
5452     struct de4x5_private *lp = netdev_priv(dev);
5453     struct de4x5_ioctl *ioc = (struct de4x5_ioctl *) &rq->ifr_ifru;
5454     u_long iobase = dev->base_addr;
5455     int i, j, status = 0;
5456     s32 omr;
5457     union {
5458         u8  addr[144];
5459         u16 sval[72];
5460         u32 lval[36];
5461     } tmp;
5462     u_long flags = 0;
5463
5464     switch(ioc->cmd) {
5465     case DE4X5_GET_HWADDR:           /* Get the hardware address */
5466         ioc->len = ETH_ALEN;
5467         for (i=0; i<ETH_ALEN; i++) {
5468             tmp.addr[i] = dev->dev_addr[i];
5469         }
5470         if (copy_to_user(ioc->data, tmp.addr, ioc->len)) return -EFAULT;
5471         break;
5472
5473     case DE4X5_SET_HWADDR:           /* Set the hardware address */
5474         if (!capable(CAP_NET_ADMIN)) return -EPERM;
5475         if (copy_from_user(tmp.addr, ioc->data, ETH_ALEN)) return -EFAULT;
5476         if (netif_queue_stopped(dev))
5477                 return -EBUSY;
5478         netif_stop_queue(dev);
5479         for (i=0; i<ETH_ALEN; i++) {
5480             dev->dev_addr[i] = tmp.addr[i];
5481         }
5482         build_setup_frame(dev, PHYS_ADDR_ONLY);
5483         /* Set up the descriptor and give ownership to the card */
5484         load_packet(dev, lp->setup_frame, TD_IC | PERFECT_F | TD_SET |
5485                                                        SETUP_FRAME_LEN, (struct sk_buff *)1);
5486         lp->tx_new = (++lp->tx_new) % lp->txRingSize;
5487         outl(POLL_DEMAND, DE4X5_TPD);                /* Start the TX */
5488         netif_wake_queue(dev);                      /* Unlock the TX ring */
5489         break;
5490
5491     case DE4X5_SAY_BOO:              /* Say "Boo!" to the kernel log file */
5492         if (!capable(CAP_NET_ADMIN)) return -EPERM;
5493         printk("%s: Boo!\n", dev->name);
5494         break;
5495
5496     case DE4X5_MCA_EN:               /* Enable pass all multicast addressing */
5497         if (!capable(CAP_NET_ADMIN)) return -EPERM;
5498         omr = inl(DE4X5_OMR);
5499         omr |= OMR_PM;
5500         outl(omr, DE4X5_OMR);
5501         break;
5502
5503     case DE4X5_GET_STATS:            /* Get the driver statistics */
5504     {
5505         struct pkt_stats statbuf;
5506         ioc->len = sizeof(statbuf);
5507         spin_lock_irqsave(&lp->lock, flags);
5508         memcpy(&statbuf, &lp->pktStats, ioc->len);
5509         spin_unlock_irqrestore(&lp->lock, flags);
5510         if (copy_to_user(ioc->data, &statbuf, ioc->len))
5511                 return -EFAULT;
5512         break;
5513     }
5514     case DE4X5_CLR_STATS:            /* Zero out the driver statistics */
5515         if (!capable(CAP_NET_ADMIN)) return -EPERM;
5516         spin_lock_irqsave(&lp->lock, flags);
5517         memset(&lp->pktStats, 0, sizeof(lp->pktStats));
5518         spin_unlock_irqrestore(&lp->lock, flags);
5519         break;
5520
5521     case DE4X5_GET_OMR:              /* Get the OMR Register contents */
5522         tmp.addr[0] = inl(DE4X5_OMR);
5523         if (copy_to_user(ioc->data, tmp.addr, 1)) return -EFAULT;
5524         break;
5525
5526     case DE4X5_SET_OMR:              /* Set the OMR Register contents */
5527         if (!capable(CAP_NET_ADMIN)) return -EPERM;
5528         if (copy_from_user(tmp.addr, ioc->data, 1)) return -EFAULT;
5529         outl(tmp.addr[0], DE4X5_OMR);
5530         break;
5531
5532     case DE4X5_GET_REG:              /* Get the DE4X5 Registers */
5533         j = 0;
5534         tmp.lval[0] = inl(DE4X5_STS); j+=4;
5535         tmp.lval[1] = inl(DE4X5_BMR); j+=4;
5536         tmp.lval[2] = inl(DE4X5_IMR); j+=4;
5537         tmp.lval[3] = inl(DE4X5_OMR); j+=4;
5538         tmp.lval[4] = inl(DE4X5_SISR); j+=4;
5539         tmp.lval[5] = inl(DE4X5_SICR); j+=4;
5540         tmp.lval[6] = inl(DE4X5_STRR); j+=4;
5541         tmp.lval[7] = inl(DE4X5_SIGR); j+=4;
5542         ioc->len = j;
5543         if (copy_to_user(ioc->data, tmp.addr, ioc->len)) return -EFAULT;
5544         break;
5545
5546 #define DE4X5_DUMP              0x0f /* Dump the DE4X5 Status */
5547 /*
5548       case DE4X5_DUMP:
5549         j = 0;
5550         tmp.addr[j++] = dev->irq;
5551         for (i=0; i<ETH_ALEN; i++) {
5552             tmp.addr[j++] = dev->dev_addr[i];
5553         }
5554         tmp.addr[j++] = lp->rxRingSize;
5555         tmp.lval[j>>2] = (long)lp->rx_ring; j+=4;
5556         tmp.lval[j>>2] = (long)lp->tx_ring; j+=4;
5557
5558         for (i=0;i<lp->rxRingSize-1;i++){
5559             if (i < 3) {
5560                 tmp.lval[j>>2] = (long)&lp->rx_ring[i].status; j+=4;
5561             }
5562         }
5563         tmp.lval[j>>2] = (long)&lp->rx_ring[i].status; j+=4;
5564         for (i=0;i<lp->txRingSize-1;i++){
5565             if (i < 3) {
5566                 tmp.lval[j>>2] = (long)&lp->tx_ring[i].status; j+=4;
5567             }
5568         }
5569         tmp.lval[j>>2] = (long)&lp->tx_ring[i].status; j+=4;
5570
5571         for (i=0;i<lp->rxRingSize-1;i++){
5572             if (i < 3) {
5573                 tmp.lval[j>>2] = (s32)le32_to_cpu(lp->rx_ring[i].buf); j+=4;
5574             }
5575         }
5576         tmp.lval[j>>2] = (s32)le32_to_cpu(lp->rx_ring[i].buf); j+=4;
5577         for (i=0;i<lp->txRingSize-1;i++){
5578             if (i < 3) {
5579                 tmp.lval[j>>2] = (s32)le32_to_cpu(lp->tx_ring[i].buf); j+=4;
5580             }
5581         }
5582         tmp.lval[j>>2] = (s32)le32_to_cpu(lp->tx_ring[i].buf); j+=4;
5583
5584         for (i=0;i<lp->rxRingSize;i++){
5585             tmp.lval[j>>2] = le32_to_cpu(lp->rx_ring[i].status); j+=4;
5586         }
5587         for (i=0;i<lp->txRingSize;i++){
5588             tmp.lval[j>>2] = le32_to_cpu(lp->tx_ring[i].status); j+=4;
5589         }
5590
5591         tmp.lval[j>>2] = inl(DE4X5_BMR);  j+=4;
5592         tmp.lval[j>>2] = inl(DE4X5_TPD);  j+=4;
5593         tmp.lval[j>>2] = inl(DE4X5_RPD);  j+=4;
5594         tmp.lval[j>>2] = inl(DE4X5_RRBA); j+=4;
5595         tmp.lval[j>>2] = inl(DE4X5_TRBA); j+=4;
5596         tmp.lval[j>>2] = inl(DE4X5_STS);  j+=4;
5597         tmp.lval[j>>2] = inl(DE4X5_OMR);  j+=4;
5598         tmp.lval[j>>2] = inl(DE4X5_IMR);  j+=4;
5599         tmp.lval[j>>2] = lp->chipset; j+=4;
5600         if (lp->chipset == DC21140) {
5601             tmp.lval[j>>2] = gep_rd(dev);  j+=4;
5602         } else {
5603             tmp.lval[j>>2] = inl(DE4X5_SISR); j+=4;
5604             tmp.lval[j>>2] = inl(DE4X5_SICR); j+=4;
5605             tmp.lval[j>>2] = inl(DE4X5_STRR); j+=4;
5606             tmp.lval[j>>2] = inl(DE4X5_SIGR); j+=4;
5607         }
5608         tmp.lval[j>>2] = lp->phy[lp->active].id; j+=4;
5609         if (lp->phy[lp->active].id && (!lp->useSROM || lp->useMII)) {
5610             tmp.lval[j>>2] = lp->active; j+=4;
5611             tmp.lval[j>>2]=mii_rd(MII_CR,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5612             tmp.lval[j>>2]=mii_rd(MII_SR,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5613             tmp.lval[j>>2]=mii_rd(MII_ID0,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5614             tmp.lval[j>>2]=mii_rd(MII_ID1,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5615             if (lp->phy[lp->active].id != BROADCOM_T4) {
5616                 tmp.lval[j>>2]=mii_rd(MII_ANA,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5617                 tmp.lval[j>>2]=mii_rd(MII_ANLPA,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5618             }
5619             tmp.lval[j>>2]=mii_rd(0x10,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5620             if (lp->phy[lp->active].id != BROADCOM_T4) {
5621                 tmp.lval[j>>2]=mii_rd(0x11,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5622                 tmp.lval[j>>2]=mii_rd(0x12,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5623             } else {
5624                 tmp.lval[j>>2]=mii_rd(0x14,lp->phy[lp->active].addr,DE4X5_MII); j+=4;
5625             }
5626         }
5627
5628         tmp.addr[j++] = lp->txRingSize;
5629         tmp.addr[j++] = netif_queue_stopped(dev);
5630
5631         ioc->len = j;
5632         if (copy_to_user(ioc->data, tmp.addr, ioc->len)) return -EFAULT;
5633         break;
5634
5635 */
5636     default:
5637         return -EOPNOTSUPP;
5638     }
5639
5640     return status;
5641 }
5642
5643 static int __init de4x5_module_init (void)
5644 {
5645         int err = 0;
5646
5647 #ifdef CONFIG_PCI
5648         err = pci_register_driver(&de4x5_pci_driver);
5649 #endif
5650 #ifdef CONFIG_EISA
5651         err |= eisa_driver_register (&de4x5_eisa_driver);
5652 #endif
5653
5654         return err;
5655 }
5656
5657 static void __exit de4x5_module_exit (void)
5658 {
5659 #ifdef CONFIG_PCI
5660         pci_unregister_driver (&de4x5_pci_driver);
5661 #endif
5662 #ifdef CONFIG_EISA
5663         eisa_driver_unregister (&de4x5_eisa_driver);
5664 #endif
5665 }
5666
5667 module_init (de4x5_module_init);
5668 module_exit (de4x5_module_exit);