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