~ubuntu-branches/ubuntu/trusty/linux-armadaxp/trusty

« back to all changes in this revision

Viewing changes to drivers/net/depca.c

  • Committer: Package Import Robot
  • Author(s): Michael Casadevall, Bryan Wu, Dann Frazier, Michael Casadeall
  • Date: 2012-03-10 15:00:54 UTC
  • mfrom: (1.1.1)
  • Revision ID: package-import@ubuntu.com-20120310150054-flugb39zon8vvgwe
Tags: 3.2.0-1600.1
[ Bryan Wu ]
* UBUNTU: import debian/debian.env and debian.armadaxp

[ Dann Frazier ]
* ARM: Armada XP: remove trailing '/' in dirnames in mvRules.mk

[ Michael Casadeall ]
* tools: add some tools for Marvell Armada XP processor
* kernel: timer tick hacking from Marvell
* kernel: Sheeva Errata: add delay on Sheeva when powering down
* net: add Marvell NFP netfilter
* net: socket and skb modifications made by Marvell
* miscdevice: add minor IDs for some Marvell Armada drivers
* fs: introduce memory pool for splice()
* video: EDID detection updates from Marvell Armada XP patchset
* video: backlight: add Marvell Dove LCD backlight driver
* video: display: add THS8200 display driver
* video: framebuffer: add Marvell Dove and Armada XP processor onchip LCD controller driver
* usbtest: add Interrupt transfer testing by Marvell Armada XP code
* usb: ehci: add support for Marvell EHCI controler
* tty/serial: 8250: add support for Marvell Armada XP processor and DeviceTree work
* rtc: add support for Marvell Armada XP onchip RTC controller
* net: pppoe: add Marvell ethernet NFP hook in PPPoE networking driver
* mtd: nand: add support for Marvell Armada XP Nand Flash Controller
* mtd: maps: add Marvell Armada XP specific map driver
* mmc: add support for Marvell Armada XP MMC/SD host controller
* i2c: add support for Marvell Armada XP onchip i2c bus controller
* hwmon: add Kconfig option for Armada XP onchip thermal sensor driver
* dmaengine: add Net DMA support for splice and update Marvell XOR DMA engine driver
* ata: add support for Marvell Armada XP SATA controller and update some quirks
* ARM: add Marvell Armada XP machine to mach-types
* ARM: oprofile: add support for Marvell PJ4B core
* ARM: mm: more ARMv6 switches for Marvell Armada XP
* ARM: remove static declaration to allow compilation
* ARM: alignment access fault trick
* ARM: mm: skip some fault fixing when run on NONE SMP ARMv6 mode during early abort event
* ARM: mm: add Marvell Sheeva CPU Architecture for PJ4B
* ARM: introduce optimized copy operation for Marvell Armada XP
* ARM: SAUCE: hardware breakpoint trick for Marvell Armada XP
* ARM: big endian and little endian tricks for Marvell Armada XP
* ARM: SAUCE: Add Marvell Armada XP build rules to arch/arm/kernel/Makefile
* ARM: vfp: add special handling for Marvell Armada XP
* ARM: add support for Marvell U-Boot
* ARM: add mv_controller_num for ARM PCI drivers
* ARM: add support for local PMUs, general SMP tweaks and cache flushing
* ARM: add Marvell device identifies in glue-proc.h
* ARM: add IPC driver support for Marvell platforms
* ARM: add DMA mapping for Marvell platforms
* ARM: add Sheeva errata and PJ4B code for booting
* ARM: update Kconfig and Makefile to include Marvell Armada XP platforms
* ARM: Armada XP: import LSP from Marvell for Armada XP 3.2 kernel enablement

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
/*  depca.c: A DIGITAL DEPCA & EtherWORKS ethernet driver for linux.
2
 
 
3
 
    Written 1994, 1995 by David C. Davies.
4
 
 
5
 
 
6
 
                      Copyright 1994 David C. Davies
7
 
                                   and
8
 
                         United States Government
9
 
         (as represented by the Director, National Security Agency).
10
 
 
11
 
               Copyright 1995  Digital Equipment Corporation.
12
 
 
13
 
 
14
 
    This software may be used and distributed according to the terms of
15
 
    the GNU General Public License, incorporated herein by reference.
16
 
 
17
 
    This driver is written for the Digital Equipment Corporation series
18
 
    of DEPCA and EtherWORKS ethernet cards:
19
 
 
20
 
        DEPCA       (the original)
21
 
        DE100
22
 
        DE101
23
 
        DE200 Turbo
24
 
        DE201 Turbo
25
 
        DE202 Turbo (TP BNC)
26
 
        DE210
27
 
        DE422       (EISA)
28
 
 
29
 
    The  driver has been tested on DE100, DE200 and DE202 cards  in  a
30
 
    relatively busy network. The DE422 has been tested a little.
31
 
 
32
 
    This  driver will NOT work   for the DE203,  DE204  and DE205 series  of
33
 
    cards,  since they have  a  new custom ASIC in   place of the AMD  LANCE
34
 
    chip.  See the 'ewrk3.c'   driver in the  Linux  source tree for running
35
 
    those cards.
36
 
 
37
 
    I have benchmarked the driver with a  DE100 at 595kB/s to (542kB/s from)
38
 
    a DECstation 5000/200.
39
 
 
40
 
    The author may be reached at davies@maniac.ultranet.com
41
 
 
42
 
    =========================================================================
43
 
 
44
 
    The  driver was originally based  on   the 'lance.c' driver from  Donald
45
 
    Becker   which  is included with  the  standard  driver distribution for
46
 
    linux.  V0.4  is  a complete  re-write  with only  the kernel  interface
47
 
    remaining from the original code.
48
 
 
49
 
    1) Lance.c code in /linux/drivers/net/
50
 
    2) "Ethernet/IEEE 802.3 Family. 1992 World Network Data Book/Handbook",
51
 
       AMD, 1992 [(800) 222-9323].
52
 
    3) "Am79C90 CMOS Local Area Network Controller for Ethernet (C-LANCE)",
53
 
       AMD, Pub. #17881, May 1993.
54
 
    4) "Am79C960 PCnet-ISA(tm), Single-Chip Ethernet Controller for ISA",
55
 
       AMD, Pub. #16907, May 1992
56
 
    5) "DEC EtherWORKS LC Ethernet Controller Owners Manual",
57
 
       Digital Equipment corporation, 1990, Pub. #EK-DE100-OM.003
58
 
    6) "DEC EtherWORKS Turbo Ethernet Controller Owners Manual",
59
 
       Digital Equipment corporation, 1990, Pub. #EK-DE200-OM.003
60
 
    7) "DEPCA Hardware Reference Manual", Pub. #EK-DEPCA-PR
61
 
       Digital Equipment Corporation, 1989
62
 
    8) "DEC EtherWORKS Turbo_(TP BNC) Ethernet Controller Owners Manual",
63
 
       Digital Equipment corporation, 1991, Pub. #EK-DE202-OM.001
64
 
 
65
 
 
66
 
    Peter Bauer's depca.c (V0.5) was referred to when debugging V0.1 of this
67
 
    driver.
68
 
 
69
 
    The original DEPCA  card requires that the  ethernet ROM address counter
70
 
    be enabled to count and has an 8 bit NICSR.  The ROM counter enabling is
71
 
    only  done when a  0x08 is read as the  first address octet (to minimise
72
 
    the chances  of writing over some  other hardware's  I/O register).  The
73
 
    NICSR accesses   have been changed  to  byte accesses  for all the cards
74
 
    supported by this driver, since there is only one  useful bit in the MSB
75
 
    (remote boot timeout) and it  is not used.  Also, there  is a maximum of
76
 
    only 48kB network  RAM for this  card.  My thanks  to Torbjorn Lindh for
77
 
    help debugging all this (and holding my feet to  the fire until I got it
78
 
    right).
79
 
 
80
 
    The DE200  series  boards have  on-board 64kB  RAM for  use  as a shared
81
 
    memory network  buffer. Only the DE100  cards make use  of a  2kB buffer
82
 
    mode which has not  been implemented in  this driver (only the 32kB  and
83
 
    64kB modes are supported [16kB/48kB for the original DEPCA]).
84
 
 
85
 
    At the most only 2 DEPCA cards can  be supported on  the ISA bus because
86
 
    there is only provision  for two I/O base addresses  on each card (0x300
87
 
    and 0x200). The I/O address is detected by searching for a byte sequence
88
 
    in the Ethernet station address PROM at the expected I/O address for the
89
 
    Ethernet  PROM.   The shared memory  base   address  is 'autoprobed'  by
90
 
    looking  for the self  test PROM  and detecting the  card name.   When a
91
 
    second  DEPCA is  detected,  information  is   placed in the   base_addr
92
 
    variable of the  next device structure (which  is created if necessary),
93
 
    thus  enabling ethif_probe  initialization  for the device.  More than 2
94
 
    EISA cards can  be  supported, but  care will  be  needed assigning  the
95
 
    shared memory to ensure that each slot has the  correct IRQ, I/O address
96
 
    and shared memory address assigned.
97
 
 
98
 
    ************************************************************************
99
 
 
100
 
    NOTE: If you are using two  ISA DEPCAs, it is  important that you assign
101
 
    the base memory addresses correctly.   The  driver autoprobes I/O  0x300
102
 
    then 0x200.  The  base memory address for  the first device must be less
103
 
    than that of the second so that the auto probe will correctly assign the
104
 
    I/O and memory addresses on the same card.  I can't think of a way to do
105
 
    this unambiguously at the moment, since there is nothing on the cards to
106
 
    tie I/O and memory information together.
107
 
 
108
 
    I am unable  to  test  2 cards   together for now,    so this  code   is
109
 
    unchecked. All reports, good or bad, are welcome.
110
 
 
111
 
    ************************************************************************
112
 
 
113
 
    The board IRQ   setting must be  at an  unused IRQ which  is auto-probed
114
 
    using Donald Becker's autoprobe routines. DEPCA and DE100 board IRQs are
115
 
    {2,3,4,5,7}, whereas the  DE200 is at {5,9,10,11,15}.  Note that IRQ2 is
116
 
    really IRQ9 in machines with 16 IRQ lines.
117
 
 
118
 
    No 16MB memory  limitation should exist with this  driver as DMA is  not
119
 
    used and the common memory area is in low memory on the network card (my
120
 
    current system has 20MB and I've not had problems yet).
121
 
 
122
 
    The ability to load this driver as a loadable module has been added. To
123
 
    utilise this ability, you have to do <8 things:
124
 
 
125
 
    0) have a copy of the loadable modules code installed on your system.
126
 
    1) copy depca.c from the  /linux/drivers/net directory to your favourite
127
 
    temporary directory.
128
 
    2) if you wish, edit the  source code near  line 1530 to reflect the I/O
129
 
    address and IRQ you're using (see also 5).
130
 
    3) compile  depca.c, but include -DMODULE in  the command line to ensure
131
 
    that the correct bits are compiled (see end of source code).
132
 
    4) if you are wanting to add a new  card, goto 5. Otherwise, recompile a
133
 
    kernel with the depca configuration turned off and reboot.
134
 
    5) insmod depca.o [irq=7] [io=0x200] [mem=0xd0000] [adapter_name=DE100]
135
 
       [Alan Cox: Changed the code to allow command line irq/io assignments]
136
 
       [Dave Davies: Changed the code to allow command line mem/name
137
 
                                                                assignments]
138
 
    6) run the net startup bits for your eth?? interface manually
139
 
    (usually /etc/rc.inet[12] at boot time).
140
 
    7) enjoy!
141
 
 
142
 
    Note that autoprobing is not allowed in loadable modules - the system is
143
 
    already up and running and you're messing with interrupts.
144
 
 
145
 
    To unload a module, turn off the associated interface
146
 
    'ifconfig eth?? down' then 'rmmod depca'.
147
 
 
148
 
    To assign a base memory address for the shared memory  when running as a
149
 
    loadable module, see 5 above.  To include the adapter  name (if you have
150
 
    no PROM  but know the card name)  also see 5  above. Note that this last
151
 
    option  will not work  with kernel  built-in  depca's.
152
 
 
153
 
    The shared memory assignment for a loadable module  makes sense to avoid
154
 
    the 'memory autoprobe' picking the wrong shared memory  (for the case of
155
 
    2 depca's in a PC).
156
 
 
157
 
    ************************************************************************
158
 
    Support for MCA EtherWORKS cards added 11-3-98.
159
 
    Verified to work with up to 2 DE212 cards in a system (although not
160
 
      fully stress-tested).
161
 
 
162
 
    Currently known bugs/limitations:
163
 
 
164
 
    Note:  with the MCA stuff as a module, it trusts the MCA configuration,
165
 
           not the command line for IRQ and memory address.  You can
166
 
           specify them if you want, but it will throw your values out.
167
 
           You still have to pass the IO address it was configured as
168
 
           though.
169
 
 
170
 
    ************************************************************************
171
 
    TO DO:
172
 
    ------
173
 
 
174
 
 
175
 
    Revision History
176
 
    ----------------
177
 
 
178
 
    Version   Date        Description
179
 
 
180
 
      0.1     25-jan-94   Initial writing.
181
 
      0.2     27-jan-94   Added LANCE TX hardware buffer chaining.
182
 
      0.3      1-feb-94   Added multiple DEPCA support.
183
 
      0.31     4-feb-94   Added DE202 recognition.
184
 
      0.32    19-feb-94   Tidy up. Improve multi-DEPCA support.
185
 
      0.33    25-feb-94   Fix DEPCA ethernet ROM counter enable.
186
 
                          Add jabber packet fix from murf@perftech.com
187
 
                          and becker@super.org
188
 
      0.34     7-mar-94   Fix DEPCA max network memory RAM & NICSR access.
189
 
      0.35     8-mar-94   Added DE201 recognition. Tidied up.
190
 
      0.351   30-apr-94   Added EISA support. Added DE422 recognition.
191
 
      0.36    16-may-94   DE422 fix released.
192
 
      0.37    22-jul-94   Added MODULE support
193
 
      0.38    15-aug-94   Added DBR ROM switch in depca_close().
194
 
                          Multi DEPCA bug fix.
195
 
      0.38axp 15-sep-94   Special version for Alpha AXP Linux V1.0.
196
 
      0.381   12-dec-94   Added DE101 recognition, fix multicast bug.
197
 
      0.382    9-feb-95   Fix recognition bug reported by <bkm@star.rl.ac.uk>.
198
 
      0.383   22-feb-95   Fix for conflict with VESA SCSI reported by
199
 
                          <stromain@alf.dec.com>
200
 
      0.384   17-mar-95   Fix a ring full bug reported by <bkm@star.rl.ac.uk>
201
 
      0.385    3-apr-95   Fix a recognition bug reported by
202
 
                                                <ryan.niemi@lastfrontier.com>
203
 
      0.386   21-apr-95   Fix the last fix...sorry, must be galloping senility
204
 
      0.40    25-May-95   Rewrite for portability & updated.
205
 
                          ALPHA support from <jestabro@amt.tay1.dec.com>
206
 
      0.41    26-Jun-95   Added verify_area() calls in depca_ioctl() from
207
 
                          suggestion by <heiko@colossus.escape.de>
208
 
      0.42    27-Dec-95   Add 'mem' shared memory assignment for loadable
209
 
                          modules.
210
 
                          Add 'adapter_name' for loadable modules when no PROM.
211
 
                          Both above from a suggestion by
212
 
                          <pchen@woodruffs121.residence.gatech.edu>.
213
 
                          Add new multicasting code.
214
 
      0.421   22-Apr-96   Fix alloc_device() bug <jari@markkus2.fimr.fi>
215
 
      0.422   29-Apr-96   Fix depca_hw_init() bug <jari@markkus2.fimr.fi>
216
 
      0.423    7-Jun-96   Fix module load bug <kmg@barco.be>
217
 
      0.43    16-Aug-96   Update alloc_device() to conform to de4x5.c
218
 
      0.44     1-Sep-97   Fix *_probe() to test check_region() first - bug
219
 
                           reported by <mmogilvi@elbert.uccs.edu>
220
 
      0.45     3-Nov-98   Added support for MCA EtherWORKS (DE210/DE212) cards
221
 
                           by <tymm@computer.org>
222
 
      0.451    5-Nov-98   Fixed mca stuff cuz I'm a dummy. <tymm@computer.org>
223
 
      0.5     14-Nov-98   Re-spin for 2.1.x kernels.
224
 
      0.51    27-Jun-99   Correct received packet length for CRC from
225
 
                           report by <worm@dkik.dk>
226
 
      0.52    16-Oct-00   Fixes for 2.3 io memory accesses
227
 
                          Fix show-stopper (ints left masked) in depca_interrupt
228
 
                           by <peterd@pnd-pc.demon.co.uk>
229
 
      0.53    12-Jan-01   Release resources on failure, bss tidbits
230
 
                           by acme@conectiva.com.br
231
 
      0.54    08-Nov-01   use library crc32 functions
232
 
                           by Matt_Domsch@dell.com
233
 
      0.55    01-Mar-03   Use EISA/sysfs framework <maz@wild-wind.fr.eu.org>
234
 
 
235
 
    =========================================================================
236
 
*/
237
 
 
238
 
#include <linux/module.h>
239
 
#include <linux/kernel.h>
240
 
#include <linux/sched.h>
241
 
#include <linux/string.h>
242
 
#include <linux/errno.h>
243
 
#include <linux/ioport.h>
244
 
#include <linux/slab.h>
245
 
#include <linux/interrupt.h>
246
 
#include <linux/delay.h>
247
 
#include <linux/init.h>
248
 
#include <linux/crc32.h>
249
 
#include <linux/netdevice.h>
250
 
#include <linux/etherdevice.h>
251
 
#include <linux/skbuff.h>
252
 
#include <linux/time.h>
253
 
#include <linux/types.h>
254
 
#include <linux/unistd.h>
255
 
#include <linux/ctype.h>
256
 
#include <linux/moduleparam.h>
257
 
#include <linux/platform_device.h>
258
 
#include <linux/bitops.h>
259
 
 
260
 
#include <asm/uaccess.h>
261
 
#include <asm/io.h>
262
 
#include <asm/dma.h>
263
 
 
264
 
#ifdef CONFIG_MCA
265
 
#include <linux/mca.h>
266
 
#endif
267
 
 
268
 
#ifdef CONFIG_EISA
269
 
#include <linux/eisa.h>
270
 
#endif
271
 
 
272
 
#include "depca.h"
273
 
 
274
 
static char version[] __initdata = "depca.c:v0.53 2001/1/12 davies@maniac.ultranet.com\n";
275
 
 
276
 
#ifdef DEPCA_DEBUG
277
 
static int depca_debug = DEPCA_DEBUG;
278
 
#else
279
 
static int depca_debug = 1;
280
 
#endif
281
 
 
282
 
#define DEPCA_NDA 0xffe0        /* No Device Address */
283
 
 
284
 
#define TX_TIMEOUT (1*HZ)
285
 
 
286
 
/*
287
 
** Ethernet PROM defines
288
 
*/
289
 
#define PROBE_LENGTH    32
290
 
#define ETH_PROM_SIG    0xAA5500FFUL
291
 
 
292
 
/*
293
 
** Set the number of Tx and Rx buffers. Ensure that the memory requested
294
 
** here is <= to the amount of shared memory set up by the board switches.
295
 
** The number of descriptors MUST BE A POWER OF 2.
296
 
**
297
 
** total_memory = NUM_RX_DESC*(8+RX_BUFF_SZ) + NUM_TX_DESC*(8+TX_BUFF_SZ)
298
 
*/
299
 
#define NUM_RX_DESC     8       /* Number of RX descriptors */
300
 
#define NUM_TX_DESC     8       /* Number of TX descriptors */
301
 
#define RX_BUFF_SZ      1536    /* Buffer size for each Rx buffer */
302
 
#define TX_BUFF_SZ      1536    /* Buffer size for each Tx buffer */
303
 
 
304
 
/*
305
 
** EISA bus defines
306
 
*/
307
 
#define DEPCA_EISA_IO_PORTS 0x0c00      /* I/O port base address, slot 0 */
308
 
 
309
 
/*
310
 
** ISA Bus defines
311
 
*/
312
 
#define DEPCA_RAM_BASE_ADDRESSES {0xc0000,0xd0000,0xe0000,0x00000}
313
 
#define DEPCA_TOTAL_SIZE 0x10
314
 
 
315
 
static struct {
316
 
        u_long iobase;
317
 
        struct platform_device *device;
318
 
} depca_io_ports[] = {
319
 
        { 0x300, NULL },
320
 
        { 0x200, NULL },
321
 
        { 0    , NULL },
322
 
};
323
 
 
324
 
/*
325
 
** Name <-> Adapter mapping
326
 
*/
327
 
#define DEPCA_SIGNATURE {"DEPCA",\
328
 
                         "DE100","DE101",\
329
 
                         "DE200","DE201","DE202",\
330
 
                         "DE210","DE212",\
331
 
                         "DE422",\
332
 
                         ""}
333
 
 
334
 
static char* __initdata depca_signature[] = DEPCA_SIGNATURE;
335
 
 
336
 
enum depca_type {
337
 
        DEPCA, de100, de101, de200, de201, de202, de210, de212, de422, unknown
338
 
};
339
 
 
340
 
static char depca_string[] = "depca";
341
 
 
342
 
static int depca_device_remove (struct device *device);
343
 
 
344
 
#ifdef CONFIG_EISA
345
 
static struct eisa_device_id depca_eisa_ids[] = {
346
 
        { "DEC4220", de422 },
347
 
        { "" }
348
 
};
349
 
MODULE_DEVICE_TABLE(eisa, depca_eisa_ids);
350
 
 
351
 
static int depca_eisa_probe  (struct device *device);
352
 
 
353
 
static struct eisa_driver depca_eisa_driver = {
354
 
        .id_table = depca_eisa_ids,
355
 
        .driver   = {
356
 
                .name    = depca_string,
357
 
                .probe   = depca_eisa_probe,
358
 
                .remove  = __devexit_p (depca_device_remove)
359
 
        }
360
 
};
361
 
#endif
362
 
 
363
 
#ifdef CONFIG_MCA
364
 
/*
365
 
** Adapter ID for the MCA EtherWORKS DE210/212 adapter
366
 
*/
367
 
#define DE210_ID 0x628d
368
 
#define DE212_ID 0x6def
369
 
 
370
 
static short depca_mca_adapter_ids[] = {
371
 
        DE210_ID,
372
 
        DE212_ID,
373
 
        0x0000
374
 
};
375
 
 
376
 
static char *depca_mca_adapter_name[] = {
377
 
        "DEC EtherWORKS MC Adapter (DE210)",
378
 
        "DEC EtherWORKS MC Adapter (DE212)",
379
 
        NULL
380
 
};
381
 
 
382
 
static enum depca_type depca_mca_adapter_type[] = {
383
 
        de210,
384
 
        de212,
385
 
        0
386
 
};
387
 
 
388
 
static int depca_mca_probe (struct device *);
389
 
 
390
 
static struct mca_driver depca_mca_driver = {
391
 
        .id_table = depca_mca_adapter_ids,
392
 
        .driver   = {
393
 
                .name   = depca_string,
394
 
                .bus    = &mca_bus_type,
395
 
                .probe  = depca_mca_probe,
396
 
                .remove = __devexit_p(depca_device_remove),
397
 
        },
398
 
};
399
 
#endif
400
 
 
401
 
static int depca_isa_probe (struct platform_device *);
402
 
 
403
 
static int __devexit depca_isa_remove(struct platform_device *pdev)
404
 
{
405
 
        return depca_device_remove(&pdev->dev);
406
 
}
407
 
 
408
 
static struct platform_driver depca_isa_driver = {
409
 
        .probe  = depca_isa_probe,
410
 
        .remove = __devexit_p(depca_isa_remove),
411
 
        .driver = {
412
 
                .name   = depca_string,
413
 
        },
414
 
};
415
 
 
416
 
/*
417
 
** Miscellaneous info...
418
 
*/
419
 
#define DEPCA_STRLEN 16
420
 
 
421
 
/*
422
 
** Memory Alignment. Each descriptor is 4 longwords long. To force a
423
 
** particular alignment on the TX descriptor, adjust DESC_SKIP_LEN and
424
 
** DESC_ALIGN. DEPCA_ALIGN aligns the start address of the private memory area
425
 
** and hence the RX descriptor ring's first entry.
426
 
*/
427
 
#define DEPCA_ALIGN4      ((u_long)4 - 1)       /* 1 longword align */
428
 
#define DEPCA_ALIGN8      ((u_long)8 - 1)       /* 2 longword (quadword) align */
429
 
#define DEPCA_ALIGN         DEPCA_ALIGN8        /* Keep the LANCE happy... */
430
 
 
431
 
/*
432
 
** The DEPCA Rx and Tx ring descriptors.
433
 
*/
434
 
struct depca_rx_desc {
435
 
        volatile s32 base;
436
 
        s16 buf_length;         /* This length is negative 2's complement! */
437
 
        s16 msg_length;         /* This length is "normal". */
438
 
};
439
 
 
440
 
struct depca_tx_desc {
441
 
        volatile s32 base;
442
 
        s16 length;             /* This length is negative 2's complement! */
443
 
        s16 misc;               /* Errors and TDR info */
444
 
};
445
 
 
446
 
#define LA_MASK 0x0000ffff      /* LANCE address mask for mapping network RAM
447
 
                                   to LANCE memory address space */
448
 
 
449
 
/*
450
 
** The Lance initialization block, described in databook, in common memory.
451
 
*/
452
 
struct depca_init {
453
 
        u16 mode;               /* Mode register */
454
 
        u8 phys_addr[ETH_ALEN]; /* Physical ethernet address */
455
 
        u8 mcast_table[8];      /* Multicast Hash Table. */
456
 
        u32 rx_ring;            /* Rx ring base pointer & ring length */
457
 
        u32 tx_ring;            /* Tx ring base pointer & ring length */
458
 
};
459
 
 
460
 
#define DEPCA_PKT_STAT_SZ 16
461
 
#define DEPCA_PKT_BIN_SZ  128   /* Should be >=100 unless you
462
 
                                   increase DEPCA_PKT_STAT_SZ */
463
 
struct depca_private {
464
 
        char adapter_name[DEPCA_STRLEN];        /* /proc/ioports string                  */
465
 
        enum depca_type adapter;                /* Adapter type */
466
 
        enum {
467
 
                DEPCA_BUS_MCA = 1,
468
 
                DEPCA_BUS_ISA,
469
 
                DEPCA_BUS_EISA,
470
 
        } depca_bus;            /* type of bus */
471
 
        struct depca_init init_block;   /* Shadow Initialization block            */
472
 
/* CPU address space fields */
473
 
        struct depca_rx_desc __iomem *rx_ring;  /* Pointer to start of RX descriptor ring */
474
 
        struct depca_tx_desc __iomem *tx_ring;  /* Pointer to start of TX descriptor ring */
475
 
        void __iomem *rx_buff[NUM_RX_DESC];     /* CPU virt address of sh'd memory buffs  */
476
 
        void __iomem *tx_buff[NUM_TX_DESC];     /* CPU virt address of sh'd memory buffs  */
477
 
        void __iomem *sh_mem;   /* CPU mapped virt address of device RAM  */
478
 
        u_long mem_start;       /* Bus address of device RAM (before remap) */
479
 
        u_long mem_len;         /* device memory size */
480
 
/* Device address space fields */
481
 
        u_long device_ram_start;        /* Start of RAM in device addr space      */
482
 
/* Offsets used in both address spaces */
483
 
        u_long rx_ring_offset;  /* Offset from start of RAM to rx_ring    */
484
 
        u_long tx_ring_offset;  /* Offset from start of RAM to tx_ring    */
485
 
        u_long buffs_offset;    /* LANCE Rx and Tx buffers start address. */
486
 
/* Kernel-only (not device) fields */
487
 
        int rx_new, tx_new;     /* The next free ring entry               */
488
 
        int rx_old, tx_old;     /* The ring entries to be free()ed.       */
489
 
        spinlock_t lock;
490
 
        struct {                /* Private stats counters                 */
491
 
                u32 bins[DEPCA_PKT_STAT_SZ];
492
 
                u32 unicast;
493
 
                u32 multicast;
494
 
                u32 broadcast;
495
 
                u32 excessive_collisions;
496
 
                u32 tx_underruns;
497
 
                u32 excessive_underruns;
498
 
        } pktStats;
499
 
        int txRingMask;         /* TX ring mask                           */
500
 
        int rxRingMask;         /* RX ring mask                           */
501
 
        s32 rx_rlen;            /* log2(rxRingMask+1) for the descriptors */
502
 
        s32 tx_rlen;            /* log2(txRingMask+1) for the descriptors */
503
 
};
504
 
 
505
 
/*
506
 
** The transmit ring full condition is described by the tx_old and tx_new
507
 
** pointers by:
508
 
**    tx_old            = tx_new    Empty ring
509
 
**    tx_old            = tx_new+1  Full ring
510
 
**    tx_old+txRingMask = tx_new    Full ring  (wrapped condition)
511
 
*/
512
 
#define TX_BUFFS_AVAIL ((lp->tx_old<=lp->tx_new)?\
513
 
                         lp->tx_old+lp->txRingMask-lp->tx_new:\
514
 
                         lp->tx_old               -lp->tx_new-1)
515
 
 
516
 
/*
517
 
** Public Functions
518
 
*/
519
 
static int depca_open(struct net_device *dev);
520
 
static netdev_tx_t depca_start_xmit(struct sk_buff *skb,
521
 
                                    struct net_device *dev);
522
 
static irqreturn_t depca_interrupt(int irq, void *dev_id);
523
 
static int depca_close(struct net_device *dev);
524
 
static int depca_ioctl(struct net_device *dev, struct ifreq *rq, int cmd);
525
 
static void depca_tx_timeout(struct net_device *dev);
526
 
static void set_multicast_list(struct net_device *dev);
527
 
 
528
 
/*
529
 
** Private functions
530
 
*/
531
 
static void depca_init_ring(struct net_device *dev);
532
 
static int depca_rx(struct net_device *dev);
533
 
static int depca_tx(struct net_device *dev);
534
 
 
535
 
static void LoadCSRs(struct net_device *dev);
536
 
static int InitRestartDepca(struct net_device *dev);
537
 
static int DepcaSignature(char *name, u_long paddr);
538
 
static int DevicePresent(u_long ioaddr);
539
 
static int get_hw_addr(struct net_device *dev);
540
 
static void SetMulticastFilter(struct net_device *dev);
541
 
static int load_packet(struct net_device *dev, struct sk_buff *skb);
542
 
static void depca_dbg_open(struct net_device *dev);
543
 
 
544
 
static u_char de1xx_irq[] __initdata = { 2, 3, 4, 5, 7, 9, 0 };
545
 
static u_char de2xx_irq[] __initdata = { 5, 9, 10, 11, 15, 0 };
546
 
static u_char de422_irq[] __initdata = { 5, 9, 10, 11, 0 };
547
 
static u_char *depca_irq;
548
 
 
549
 
static int irq;
550
 
static int io;
551
 
static char *adapter_name;
552
 
static int mem;                 /* For loadable module assignment
553
 
                                   use insmod mem=0x????? .... */
554
 
module_param (irq, int, 0);
555
 
module_param (io, int, 0);
556
 
module_param (adapter_name, charp, 0);
557
 
module_param (mem, int, 0);
558
 
MODULE_PARM_DESC(irq, "DEPCA IRQ number");
559
 
MODULE_PARM_DESC(io, "DEPCA I/O base address");
560
 
MODULE_PARM_DESC(adapter_name, "DEPCA adapter name");
561
 
MODULE_PARM_DESC(mem, "DEPCA shared memory address");
562
 
MODULE_LICENSE("GPL");
563
 
 
564
 
/*
565
 
** Miscellaneous defines...
566
 
*/
567
 
#define STOP_DEPCA \
568
 
    outw(CSR0, DEPCA_ADDR);\
569
 
    outw(STOP, DEPCA_DATA)
570
 
 
571
 
static const struct net_device_ops depca_netdev_ops = {
572
 
        .ndo_open               = depca_open,
573
 
        .ndo_start_xmit         = depca_start_xmit,
574
 
        .ndo_stop               = depca_close,
575
 
        .ndo_set_multicast_list = set_multicast_list,
576
 
        .ndo_do_ioctl           = depca_ioctl,
577
 
        .ndo_tx_timeout         = depca_tx_timeout,
578
 
        .ndo_change_mtu         = eth_change_mtu,
579
 
        .ndo_set_mac_address    = eth_mac_addr,
580
 
        .ndo_validate_addr      = eth_validate_addr,
581
 
};
582
 
 
583
 
static int __init depca_hw_init (struct net_device *dev, struct device *device)
584
 
{
585
 
        struct depca_private *lp;
586
 
        int i, j, offset, netRAM, mem_len, status = 0;
587
 
        s16 nicsr;
588
 
        u_long ioaddr;
589
 
        u_long mem_start;
590
 
 
591
 
        /*
592
 
         * We are now supposed to enter this function with the
593
 
         * following fields filled with proper values :
594
 
         *
595
 
         * dev->base_addr
596
 
         * lp->mem_start
597
 
         * lp->depca_bus
598
 
         * lp->adapter
599
 
         *
600
 
         * dev->irq can be set if known from device configuration (on
601
 
         * MCA or EISA) or module option. Otherwise, it will be auto
602
 
         * detected.
603
 
         */
604
 
 
605
 
        ioaddr = dev->base_addr;
606
 
 
607
 
        STOP_DEPCA;
608
 
 
609
 
        nicsr = inb(DEPCA_NICSR);
610
 
        nicsr = ((nicsr & ~SHE & ~RBE & ~IEN) | IM);
611
 
        outb(nicsr, DEPCA_NICSR);
612
 
 
613
 
        if (inw(DEPCA_DATA) != STOP) {
614
 
                return -ENXIO;
615
 
        }
616
 
 
617
 
        lp = netdev_priv(dev);
618
 
        mem_start = lp->mem_start;
619
 
 
620
 
        if (!mem_start || lp->adapter < DEPCA || lp->adapter >=unknown)
621
 
                return -ENXIO;
622
 
 
623
 
        printk("%s: %s at 0x%04lx",
624
 
               dev_name(device), depca_signature[lp->adapter], ioaddr);
625
 
 
626
 
        switch (lp->depca_bus) {
627
 
#ifdef CONFIG_MCA
628
 
        case DEPCA_BUS_MCA:
629
 
                printk(" (MCA slot %d)", to_mca_device(device)->slot + 1);
630
 
                break;
631
 
#endif
632
 
 
633
 
#ifdef CONFIG_EISA
634
 
        case DEPCA_BUS_EISA:
635
 
                printk(" (EISA slot %d)", to_eisa_device(device)->slot);
636
 
                break;
637
 
#endif
638
 
 
639
 
        case DEPCA_BUS_ISA:
640
 
                break;
641
 
 
642
 
        default:
643
 
                printk("Unknown DEPCA bus %d\n", lp->depca_bus);
644
 
                return -ENXIO;
645
 
        }
646
 
 
647
 
        printk(", h/w address ");
648
 
        status = get_hw_addr(dev);
649
 
        printk("%pM", dev->dev_addr);
650
 
        if (status != 0) {
651
 
                printk("      which has an Ethernet PROM CRC error.\n");
652
 
                return -ENXIO;
653
 
        }
654
 
 
655
 
        /* Set up the maximum amount of network RAM(kB) */
656
 
        netRAM = ((lp->adapter != DEPCA) ? 64 : 48);
657
 
        if ((nicsr & _128KB) && (lp->adapter == de422))
658
 
                netRAM = 128;
659
 
 
660
 
        /* Shared Memory Base Address */
661
 
        if (nicsr & BUF) {
662
 
                nicsr &= ~BS;   /* DEPCA RAM in top 32k */
663
 
                netRAM -= 32;
664
 
 
665
 
                /* Only EISA/ISA needs start address to be re-computed */
666
 
                if (lp->depca_bus != DEPCA_BUS_MCA)
667
 
                        mem_start += 0x8000;
668
 
        }
669
 
 
670
 
        if ((mem_len = (NUM_RX_DESC * (sizeof(struct depca_rx_desc) + RX_BUFF_SZ) + NUM_TX_DESC * (sizeof(struct depca_tx_desc) + TX_BUFF_SZ) + sizeof(struct depca_init)))
671
 
            > (netRAM << 10)) {
672
 
                printk(",\n       requests %dkB RAM: only %dkB is available!\n", (mem_len >> 10), netRAM);
673
 
                return -ENXIO;
674
 
        }
675
 
 
676
 
        printk(",\n      has %dkB RAM at 0x%.5lx", netRAM, mem_start);
677
 
 
678
 
        /* Enable the shadow RAM. */
679
 
        if (lp->adapter != DEPCA) {
680
 
                nicsr |= SHE;
681
 
                outb(nicsr, DEPCA_NICSR);
682
 
        }
683
 
 
684
 
        spin_lock_init(&lp->lock);
685
 
        sprintf(lp->adapter_name, "%s (%s)",
686
 
                depca_signature[lp->adapter], dev_name(device));
687
 
        status = -EBUSY;
688
 
 
689
 
        /* Initialisation Block */
690
 
        if (!request_mem_region (mem_start, mem_len, lp->adapter_name)) {
691
 
                printk(KERN_ERR "depca: cannot request ISA memory, aborting\n");
692
 
                goto out_priv;
693
 
        }
694
 
 
695
 
        status = -EIO;
696
 
        lp->sh_mem = ioremap(mem_start, mem_len);
697
 
        if (lp->sh_mem == NULL) {
698
 
                printk(KERN_ERR "depca: cannot remap ISA memory, aborting\n");
699
 
                goto out1;
700
 
        }
701
 
 
702
 
        lp->mem_start = mem_start;
703
 
        lp->mem_len   = mem_len;
704
 
        lp->device_ram_start = mem_start & LA_MASK;
705
 
 
706
 
        offset = 0;
707
 
        offset += sizeof(struct depca_init);
708
 
 
709
 
        /* Tx & Rx descriptors (aligned to a quadword boundary) */
710
 
        offset = (offset + DEPCA_ALIGN) & ~DEPCA_ALIGN;
711
 
        lp->rx_ring = (struct depca_rx_desc __iomem *) (lp->sh_mem + offset);
712
 
        lp->rx_ring_offset = offset;
713
 
 
714
 
        offset += (sizeof(struct depca_rx_desc) * NUM_RX_DESC);
715
 
        lp->tx_ring = (struct depca_tx_desc __iomem *) (lp->sh_mem + offset);
716
 
        lp->tx_ring_offset = offset;
717
 
 
718
 
        offset += (sizeof(struct depca_tx_desc) * NUM_TX_DESC);
719
 
 
720
 
        lp->buffs_offset = offset;
721
 
 
722
 
        /* Finish initialising the ring information. */
723
 
        lp->rxRingMask = NUM_RX_DESC - 1;
724
 
        lp->txRingMask = NUM_TX_DESC - 1;
725
 
 
726
 
        /* Calculate Tx/Rx RLEN size for the descriptors. */
727
 
        for (i = 0, j = lp->rxRingMask; j > 0; i++) {
728
 
                j >>= 1;
729
 
        }
730
 
        lp->rx_rlen = (s32) (i << 29);
731
 
        for (i = 0, j = lp->txRingMask; j > 0; i++) {
732
 
                j >>= 1;
733
 
        }
734
 
        lp->tx_rlen = (s32) (i << 29);
735
 
 
736
 
        /* Load the initialisation block */
737
 
        depca_init_ring(dev);
738
 
 
739
 
        /* Initialise the control and status registers */
740
 
        LoadCSRs(dev);
741
 
 
742
 
        /* Enable DEPCA board interrupts for autoprobing */
743
 
        nicsr = ((nicsr & ~IM) | IEN);
744
 
        outb(nicsr, DEPCA_NICSR);
745
 
 
746
 
        /* To auto-IRQ we enable the initialization-done and DMA err,
747
 
           interrupts. For now we will always get a DMA error. */
748
 
        if (dev->irq < 2) {
749
 
                unsigned char irqnum;
750
 
                unsigned long irq_mask, delay;
751
 
 
752
 
                irq_mask = probe_irq_on();
753
 
 
754
 
                /* Assign the correct irq list */
755
 
                switch (lp->adapter) {
756
 
                case DEPCA:
757
 
                case de100:
758
 
                case de101:
759
 
                        depca_irq = de1xx_irq;
760
 
                        break;
761
 
                case de200:
762
 
                case de201:
763
 
                case de202:
764
 
                case de210:
765
 
                case de212:
766
 
                        depca_irq = de2xx_irq;
767
 
                        break;
768
 
                case de422:
769
 
                        depca_irq = de422_irq;
770
 
                        break;
771
 
 
772
 
                default:
773
 
                        break;  /* Not reached */
774
 
                }
775
 
 
776
 
                /* Trigger an initialization just for the interrupt. */
777
 
                outw(INEA | INIT, DEPCA_DATA);
778
 
 
779
 
                delay = jiffies + HZ/50;
780
 
                while (time_before(jiffies, delay))
781
 
                        yield();
782
 
 
783
 
                irqnum = probe_irq_off(irq_mask);
784
 
 
785
 
                status = -ENXIO;
786
 
                if (!irqnum) {
787
 
                        printk(" and failed to detect IRQ line.\n");
788
 
                        goto out2;
789
 
                } else {
790
 
                        for (dev->irq = 0, i = 0; (depca_irq[i]) && (!dev->irq); i++)
791
 
                                if (irqnum == depca_irq[i]) {
792
 
                                        dev->irq = irqnum;
793
 
                                        printk(" and uses IRQ%d.\n", dev->irq);
794
 
                                }
795
 
 
796
 
                        if (!dev->irq) {
797
 
                                printk(" but incorrect IRQ line detected.\n");
798
 
                                goto out2;
799
 
                        }
800
 
                }
801
 
        } else {
802
 
                printk(" and assigned IRQ%d.\n", dev->irq);
803
 
        }
804
 
 
805
 
        if (depca_debug > 1) {
806
 
                printk(version);
807
 
        }
808
 
 
809
 
        /* The DEPCA-specific entries in the device structure. */
810
 
        dev->netdev_ops = &depca_netdev_ops;
811
 
        dev->watchdog_timeo = TX_TIMEOUT;
812
 
 
813
 
        dev->mem_start = 0;
814
 
 
815
 
        dev_set_drvdata(device, dev);
816
 
        SET_NETDEV_DEV (dev, device);
817
 
 
818
 
        status = register_netdev(dev);
819
 
        if (status == 0)
820
 
                return 0;
821
 
out2:
822
 
        iounmap(lp->sh_mem);
823
 
out1:
824
 
        release_mem_region (mem_start, mem_len);
825
 
out_priv:
826
 
        return status;
827
 
}
828
 
 
829
 
 
830
 
static int depca_open(struct net_device *dev)
831
 
{
832
 
        struct depca_private *lp = netdev_priv(dev);
833
 
        u_long ioaddr = dev->base_addr;
834
 
        s16 nicsr;
835
 
        int status = 0;
836
 
 
837
 
        STOP_DEPCA;
838
 
        nicsr = inb(DEPCA_NICSR);
839
 
 
840
 
        /* Make sure the shadow RAM is enabled */
841
 
        if (lp->adapter != DEPCA) {
842
 
                nicsr |= SHE;
843
 
                outb(nicsr, DEPCA_NICSR);
844
 
        }
845
 
 
846
 
        /* Re-initialize the DEPCA... */
847
 
        depca_init_ring(dev);
848
 
        LoadCSRs(dev);
849
 
 
850
 
        depca_dbg_open(dev);
851
 
 
852
 
        if (request_irq(dev->irq, depca_interrupt, 0, lp->adapter_name, dev)) {
853
 
                printk("depca_open(): Requested IRQ%d is busy\n", dev->irq);
854
 
                status = -EAGAIN;
855
 
        } else {
856
 
 
857
 
                /* Enable DEPCA board interrupts and turn off LED */
858
 
                nicsr = ((nicsr & ~IM & ~LED) | IEN);
859
 
                outb(nicsr, DEPCA_NICSR);
860
 
                outw(CSR0, DEPCA_ADDR);
861
 
 
862
 
                netif_start_queue(dev);
863
 
 
864
 
                status = InitRestartDepca(dev);
865
 
 
866
 
                if (depca_debug > 1) {
867
 
                        printk("CSR0: 0x%4.4x\n", inw(DEPCA_DATA));
868
 
                        printk("nicsr: 0x%02x\n", inb(DEPCA_NICSR));
869
 
                }
870
 
        }
871
 
        return status;
872
 
}
873
 
 
874
 
/* Initialize the lance Rx and Tx descriptor rings. */
875
 
static void depca_init_ring(struct net_device *dev)
876
 
{
877
 
        struct depca_private *lp = netdev_priv(dev);
878
 
        u_int i;
879
 
        u_long offset;
880
 
 
881
 
        /* Lock out other processes whilst setting up the hardware */
882
 
        netif_stop_queue(dev);
883
 
 
884
 
        lp->rx_new = lp->tx_new = 0;
885
 
        lp->rx_old = lp->tx_old = 0;
886
 
 
887
 
        /* Initialize the base address and length of each buffer in the ring */
888
 
        for (i = 0; i <= lp->rxRingMask; i++) {
889
 
                offset = lp->buffs_offset + i * RX_BUFF_SZ;
890
 
                writel((lp->device_ram_start + offset) | R_OWN, &lp->rx_ring[i].base);
891
 
                writew(-RX_BUFF_SZ, &lp->rx_ring[i].buf_length);
892
 
                lp->rx_buff[i] = lp->sh_mem + offset;
893
 
        }
894
 
 
895
 
        for (i = 0; i <= lp->txRingMask; i++) {
896
 
                offset = lp->buffs_offset + (i + lp->rxRingMask + 1) * TX_BUFF_SZ;
897
 
                writel((lp->device_ram_start + offset) & 0x00ffffff, &lp->tx_ring[i].base);
898
 
                lp->tx_buff[i] = lp->sh_mem + offset;
899
 
        }
900
 
 
901
 
        /* Set up the initialization block */
902
 
        lp->init_block.rx_ring = (lp->device_ram_start + lp->rx_ring_offset) | lp->rx_rlen;
903
 
        lp->init_block.tx_ring = (lp->device_ram_start + lp->tx_ring_offset) | lp->tx_rlen;
904
 
 
905
 
        SetMulticastFilter(dev);
906
 
 
907
 
        for (i = 0; i < ETH_ALEN; i++) {
908
 
                lp->init_block.phys_addr[i] = dev->dev_addr[i];
909
 
        }
910
 
 
911
 
        lp->init_block.mode = 0x0000;   /* Enable the Tx and Rx */
912
 
}
913
 
 
914
 
 
915
 
static void depca_tx_timeout(struct net_device *dev)
916
 
{
917
 
        u_long ioaddr = dev->base_addr;
918
 
 
919
 
        printk("%s: transmit timed out, status %04x, resetting.\n", dev->name, inw(DEPCA_DATA));
920
 
 
921
 
        STOP_DEPCA;
922
 
        depca_init_ring(dev);
923
 
        LoadCSRs(dev);
924
 
        dev->trans_start = jiffies; /* prevent tx timeout */
925
 
        netif_wake_queue(dev);
926
 
        InitRestartDepca(dev);
927
 
}
928
 
 
929
 
 
930
 
/*
931
 
** Writes a socket buffer to TX descriptor ring and starts transmission
932
 
*/
933
 
static netdev_tx_t depca_start_xmit(struct sk_buff *skb,
934
 
                                    struct net_device *dev)
935
 
{
936
 
        struct depca_private *lp = netdev_priv(dev);
937
 
        u_long ioaddr = dev->base_addr;
938
 
        int status = 0;
939
 
 
940
 
        /* Transmitter timeout, serious problems. */
941
 
        if (skb->len < 1)
942
 
                goto out;
943
 
 
944
 
        if (skb_padto(skb, ETH_ZLEN))
945
 
                goto out;
946
 
 
947
 
        netif_stop_queue(dev);
948
 
 
949
 
        if (TX_BUFFS_AVAIL) {   /* Fill in a Tx ring entry */
950
 
                status = load_packet(dev, skb);
951
 
 
952
 
                if (!status) {
953
 
                        /* Trigger an immediate send demand. */
954
 
                        outw(CSR0, DEPCA_ADDR);
955
 
                        outw(INEA | TDMD, DEPCA_DATA);
956
 
 
957
 
                        dev_kfree_skb(skb);
958
 
                }
959
 
                if (TX_BUFFS_AVAIL)
960
 
                        netif_start_queue(dev);
961
 
        } else
962
 
                status = NETDEV_TX_LOCKED;
963
 
 
964
 
      out:
965
 
        return status;
966
 
}
967
 
 
968
 
/*
969
 
** The DEPCA interrupt handler.
970
 
*/
971
 
static irqreturn_t depca_interrupt(int irq, void *dev_id)
972
 
{
973
 
        struct net_device *dev = dev_id;
974
 
        struct depca_private *lp;
975
 
        s16 csr0, nicsr;
976
 
        u_long ioaddr;
977
 
 
978
 
        if (dev == NULL) {
979
 
                printk("depca_interrupt(): irq %d for unknown device.\n", irq);
980
 
                return IRQ_NONE;
981
 
        }
982
 
 
983
 
        lp = netdev_priv(dev);
984
 
        ioaddr = dev->base_addr;
985
 
 
986
 
        spin_lock(&lp->lock);
987
 
 
988
 
        /* mask the DEPCA board interrupts and turn on the LED */
989
 
        nicsr = inb(DEPCA_NICSR);
990
 
        nicsr |= (IM | LED);
991
 
        outb(nicsr, DEPCA_NICSR);
992
 
 
993
 
        outw(CSR0, DEPCA_ADDR);
994
 
        csr0 = inw(DEPCA_DATA);
995
 
 
996
 
        /* Acknowledge all of the current interrupt sources ASAP. */
997
 
        outw(csr0 & INTE, DEPCA_DATA);
998
 
 
999
 
        if (csr0 & RINT)        /* Rx interrupt (packet arrived) */
1000
 
                depca_rx(dev);
1001
 
 
1002
 
        if (csr0 & TINT)        /* Tx interrupt (packet sent) */
1003
 
                depca_tx(dev);
1004
 
 
1005
 
        /* Any resources available? */
1006
 
        if ((TX_BUFFS_AVAIL >= 0) && netif_queue_stopped(dev)) {
1007
 
                netif_wake_queue(dev);
1008
 
        }
1009
 
 
1010
 
        /* Unmask the DEPCA board interrupts and turn off the LED */
1011
 
        nicsr = (nicsr & ~IM & ~LED);
1012
 
        outb(nicsr, DEPCA_NICSR);
1013
 
 
1014
 
        spin_unlock(&lp->lock);
1015
 
        return IRQ_HANDLED;
1016
 
}
1017
 
 
1018
 
/* Called with lp->lock held */
1019
 
static int depca_rx(struct net_device *dev)
1020
 
{
1021
 
        struct depca_private *lp = netdev_priv(dev);
1022
 
        int i, entry;
1023
 
        s32 status;
1024
 
 
1025
 
        for (entry = lp->rx_new; !(readl(&lp->rx_ring[entry].base) & R_OWN); entry = lp->rx_new) {
1026
 
                status = readl(&lp->rx_ring[entry].base) >> 16;
1027
 
                if (status & R_STP) {   /* Remember start of frame */
1028
 
                        lp->rx_old = entry;
1029
 
                }
1030
 
                if (status & R_ENP) {   /* Valid frame status */
1031
 
                        if (status & R_ERR) {   /* There was an error. */
1032
 
                                dev->stats.rx_errors++; /* Update the error stats. */
1033
 
                                if (status & R_FRAM)
1034
 
                                        dev->stats.rx_frame_errors++;
1035
 
                                if (status & R_OFLO)
1036
 
                                        dev->stats.rx_over_errors++;
1037
 
                                if (status & R_CRC)
1038
 
                                        dev->stats.rx_crc_errors++;
1039
 
                                if (status & R_BUFF)
1040
 
                                        dev->stats.rx_fifo_errors++;
1041
 
                        } else {
1042
 
                                short len, pkt_len = readw(&lp->rx_ring[entry].msg_length) - 4;
1043
 
                                struct sk_buff *skb;
1044
 
 
1045
 
                                skb = dev_alloc_skb(pkt_len + 2);
1046
 
                                if (skb != NULL) {
1047
 
                                        unsigned char *buf;
1048
 
                                        skb_reserve(skb, 2);    /* 16 byte align the IP header */
1049
 
                                        buf = skb_put(skb, pkt_len);
1050
 
                                        if (entry < lp->rx_old) {       /* Wrapped buffer */
1051
 
                                                len = (lp->rxRingMask - lp->rx_old + 1) * RX_BUFF_SZ;
1052
 
                                                memcpy_fromio(buf, lp->rx_buff[lp->rx_old], len);
1053
 
                                                memcpy_fromio(buf + len, lp->rx_buff[0], pkt_len - len);
1054
 
                                        } else {        /* Linear buffer */
1055
 
                                                memcpy_fromio(buf, lp->rx_buff[lp->rx_old], pkt_len);
1056
 
                                        }
1057
 
 
1058
 
                                        /*
1059
 
                                           ** Notify the upper protocol layers that there is another
1060
 
                                           ** packet to handle
1061
 
                                         */
1062
 
                                        skb->protocol = eth_type_trans(skb, dev);
1063
 
                                        netif_rx(skb);
1064
 
 
1065
 
                                        /*
1066
 
                                           ** Update stats
1067
 
                                         */
1068
 
                                        dev->stats.rx_packets++;
1069
 
                                        dev->stats.rx_bytes += pkt_len;
1070
 
                                        for (i = 1; i < DEPCA_PKT_STAT_SZ - 1; i++) {
1071
 
                                                if (pkt_len < (i * DEPCA_PKT_BIN_SZ)) {
1072
 
                                                        lp->pktStats.bins[i]++;
1073
 
                                                        i = DEPCA_PKT_STAT_SZ;
1074
 
                                                }
1075
 
                                        }
1076
 
                                        if (buf[0] & 0x01) {    /* Multicast/Broadcast */
1077
 
                                                if ((*(s16 *) & buf[0] == -1) && (*(s16 *) & buf[2] == -1) && (*(s16 *) & buf[4] == -1)) {
1078
 
                                                        lp->pktStats.broadcast++;
1079
 
                                                } else {
1080
 
                                                        lp->pktStats.multicast++;
1081
 
                                                }
1082
 
                                        } else if ((*(s16 *) & buf[0] == *(s16 *) & dev->dev_addr[0]) && (*(s16 *) & buf[2] == *(s16 *) & dev->dev_addr[2]) && (*(s16 *) & buf[4] == *(s16 *) & dev->dev_addr[4])) {
1083
 
                                                lp->pktStats.unicast++;
1084
 
                                        }
1085
 
 
1086
 
                                        lp->pktStats.bins[0]++; /* Duplicates stats.rx_packets */
1087
 
                                        if (lp->pktStats.bins[0] == 0) {        /* Reset counters */
1088
 
                                                memset((char *) &lp->pktStats, 0, sizeof(lp->pktStats));
1089
 
                                        }
1090
 
                                } else {
1091
 
                                        printk("%s: Memory squeeze, deferring packet.\n", dev->name);
1092
 
                                        dev->stats.rx_dropped++;        /* Really, deferred. */
1093
 
                                        break;
1094
 
                                }
1095
 
                        }
1096
 
                        /* Change buffer ownership for this last frame, back to the adapter */
1097
 
                        for (; lp->rx_old != entry; lp->rx_old = (lp->rx_old + 1) & lp->rxRingMask) {
1098
 
                                writel(readl(&lp->rx_ring[lp->rx_old].base) | R_OWN, &lp->rx_ring[lp->rx_old].base);
1099
 
                        }
1100
 
                        writel(readl(&lp->rx_ring[entry].base) | R_OWN, &lp->rx_ring[entry].base);
1101
 
                }
1102
 
 
1103
 
                /*
1104
 
                   ** Update entry information
1105
 
                 */
1106
 
                lp->rx_new = (lp->rx_new + 1) & lp->rxRingMask;
1107
 
        }
1108
 
 
1109
 
        return 0;
1110
 
}
1111
 
 
1112
 
/*
1113
 
** Buffer sent - check for buffer errors.
1114
 
** Called with lp->lock held
1115
 
*/
1116
 
static int depca_tx(struct net_device *dev)
1117
 
{
1118
 
        struct depca_private *lp = netdev_priv(dev);
1119
 
        int entry;
1120
 
        s32 status;
1121
 
        u_long ioaddr = dev->base_addr;
1122
 
 
1123
 
        for (entry = lp->tx_old; entry != lp->tx_new; entry = lp->tx_old) {
1124
 
                status = readl(&lp->tx_ring[entry].base) >> 16;
1125
 
 
1126
 
                if (status < 0) {       /* Packet not yet sent! */
1127
 
                        break;
1128
 
                } else if (status & T_ERR) {    /* An error occurred. */
1129
 
                        status = readl(&lp->tx_ring[entry].misc);
1130
 
                        dev->stats.tx_errors++;
1131
 
                        if (status & TMD3_RTRY)
1132
 
                                dev->stats.tx_aborted_errors++;
1133
 
                        if (status & TMD3_LCAR)
1134
 
                                dev->stats.tx_carrier_errors++;
1135
 
                        if (status & TMD3_LCOL)
1136
 
                                dev->stats.tx_window_errors++;
1137
 
                        if (status & TMD3_UFLO)
1138
 
                                dev->stats.tx_fifo_errors++;
1139
 
                        if (status & (TMD3_BUFF | TMD3_UFLO)) {
1140
 
                                /* Trigger an immediate send demand. */
1141
 
                                outw(CSR0, DEPCA_ADDR);
1142
 
                                outw(INEA | TDMD, DEPCA_DATA);
1143
 
                        }
1144
 
                } else if (status & (T_MORE | T_ONE)) {
1145
 
                        dev->stats.collisions++;
1146
 
                } else {
1147
 
                        dev->stats.tx_packets++;
1148
 
                }
1149
 
 
1150
 
                /* Update all the pointers */
1151
 
                lp->tx_old = (lp->tx_old + 1) & lp->txRingMask;
1152
 
        }
1153
 
 
1154
 
        return 0;
1155
 
}
1156
 
 
1157
 
static int depca_close(struct net_device *dev)
1158
 
{
1159
 
        struct depca_private *lp = netdev_priv(dev);
1160
 
        s16 nicsr;
1161
 
        u_long ioaddr = dev->base_addr;
1162
 
 
1163
 
        netif_stop_queue(dev);
1164
 
 
1165
 
        outw(CSR0, DEPCA_ADDR);
1166
 
 
1167
 
        if (depca_debug > 1) {
1168
 
                printk("%s: Shutting down ethercard, status was %2.2x.\n", dev->name, inw(DEPCA_DATA));
1169
 
        }
1170
 
 
1171
 
        /*
1172
 
           ** We stop the DEPCA here -- it occasionally polls
1173
 
           ** memory if we don't.
1174
 
         */
1175
 
        outw(STOP, DEPCA_DATA);
1176
 
 
1177
 
        /*
1178
 
           ** Give back the ROM in case the user wants to go to DOS
1179
 
         */
1180
 
        if (lp->adapter != DEPCA) {
1181
 
                nicsr = inb(DEPCA_NICSR);
1182
 
                nicsr &= ~SHE;
1183
 
                outb(nicsr, DEPCA_NICSR);
1184
 
        }
1185
 
 
1186
 
        /*
1187
 
           ** Free the associated irq
1188
 
         */
1189
 
        free_irq(dev->irq, dev);
1190
 
        return 0;
1191
 
}
1192
 
 
1193
 
static void LoadCSRs(struct net_device *dev)
1194
 
{
1195
 
        struct depca_private *lp = netdev_priv(dev);
1196
 
        u_long ioaddr = dev->base_addr;
1197
 
 
1198
 
        outw(CSR1, DEPCA_ADDR); /* initialisation block address LSW */
1199
 
        outw((u16) lp->device_ram_start, DEPCA_DATA);
1200
 
        outw(CSR2, DEPCA_ADDR); /* initialisation block address MSW */
1201
 
        outw((u16) (lp->device_ram_start >> 16), DEPCA_DATA);
1202
 
        outw(CSR3, DEPCA_ADDR); /* ALE control */
1203
 
        outw(ACON, DEPCA_DATA);
1204
 
 
1205
 
        outw(CSR0, DEPCA_ADDR); /* Point back to CSR0 */
1206
 
}
1207
 
 
1208
 
static int InitRestartDepca(struct net_device *dev)
1209
 
{
1210
 
        struct depca_private *lp = netdev_priv(dev);
1211
 
        u_long ioaddr = dev->base_addr;
1212
 
        int i, status = 0;
1213
 
 
1214
 
        /* Copy the shadow init_block to shared memory */
1215
 
        memcpy_toio(lp->sh_mem, &lp->init_block, sizeof(struct depca_init));
1216
 
 
1217
 
        outw(CSR0, DEPCA_ADDR); /* point back to CSR0 */
1218
 
        outw(INIT, DEPCA_DATA); /* initialize DEPCA */
1219
 
 
1220
 
        /* wait for lance to complete initialisation */
1221
 
        for (i = 0; (i < 100) && !(inw(DEPCA_DATA) & IDON); i++);
1222
 
 
1223
 
        if (i != 100) {
1224
 
                /* clear IDON by writing a "1", enable interrupts and start lance */
1225
 
                outw(IDON | INEA | STRT, DEPCA_DATA);
1226
 
                if (depca_debug > 2) {
1227
 
                        printk("%s: DEPCA open after %d ticks, init block 0x%08lx csr0 %4.4x.\n", dev->name, i, lp->mem_start, inw(DEPCA_DATA));
1228
 
                }
1229
 
        } else {
1230
 
                printk("%s: DEPCA unopen after %d ticks, init block 0x%08lx csr0 %4.4x.\n", dev->name, i, lp->mem_start, inw(DEPCA_DATA));
1231
 
                status = -1;
1232
 
        }
1233
 
 
1234
 
        return status;
1235
 
}
1236
 
 
1237
 
/*
1238
 
** Set or clear the multicast filter for this adaptor.
1239
 
*/
1240
 
static void set_multicast_list(struct net_device *dev)
1241
 
{
1242
 
        struct depca_private *lp = netdev_priv(dev);
1243
 
        u_long ioaddr = dev->base_addr;
1244
 
 
1245
 
        netif_stop_queue(dev);
1246
 
        while (lp->tx_old != lp->tx_new);       /* Wait for the ring to empty */
1247
 
 
1248
 
        STOP_DEPCA;     /* Temporarily stop the depca.  */
1249
 
        depca_init_ring(dev);   /* Initialize the descriptor rings */
1250
 
 
1251
 
        if (dev->flags & IFF_PROMISC) { /* Set promiscuous mode */
1252
 
                lp->init_block.mode |= PROM;
1253
 
        } else {
1254
 
                SetMulticastFilter(dev);
1255
 
                lp->init_block.mode &= ~PROM;   /* Unset promiscuous mode */
1256
 
        }
1257
 
 
1258
 
        LoadCSRs(dev);  /* Reload CSR3 */
1259
 
        InitRestartDepca(dev);  /* Resume normal operation. */
1260
 
        netif_start_queue(dev); /* Unlock the TX ring */
1261
 
}
1262
 
 
1263
 
/*
1264
 
** Calculate the hash code and update the logical address filter
1265
 
** from a list of ethernet multicast addresses.
1266
 
** Big endian crc one liner is mine, all mine, ha ha ha ha!
1267
 
** LANCE calculates its hash codes big endian.
1268
 
*/
1269
 
static void SetMulticastFilter(struct net_device *dev)
1270
 
{
1271
 
        struct depca_private *lp = netdev_priv(dev);
1272
 
        struct netdev_hw_addr *ha;
1273
 
        char *addrs;
1274
 
        int i, j, bit, byte;
1275
 
        u16 hashcode;
1276
 
        u32 crc;
1277
 
 
1278
 
        if (dev->flags & IFF_ALLMULTI) {        /* Set all multicast bits */
1279
 
                for (i = 0; i < (HASH_TABLE_LEN >> 3); i++) {
1280
 
                        lp->init_block.mcast_table[i] = (char) 0xff;
1281
 
                }
1282
 
        } else {
1283
 
                for (i = 0; i < (HASH_TABLE_LEN >> 3); i++) {   /* Clear the multicast table */
1284
 
                        lp->init_block.mcast_table[i] = 0;
1285
 
                }
1286
 
                /* Add multicast addresses */
1287
 
                netdev_for_each_mc_addr(ha, dev) {
1288
 
                        addrs = ha->addr;
1289
 
                        if ((*addrs & 0x01) == 1) {     /* multicast address? */
1290
 
                                crc = ether_crc(ETH_ALEN, addrs);
1291
 
                                hashcode = (crc & 1);   /* hashcode is 6 LSb of CRC ... */
1292
 
                                for (j = 0; j < 5; j++) {       /* ... in reverse order. */
1293
 
                                        hashcode = (hashcode << 1) | ((crc >>= 1) & 1);
1294
 
                                }
1295
 
 
1296
 
 
1297
 
                                byte = hashcode >> 3;   /* bit[3-5] -> byte in filter */
1298
 
                                bit = 1 << (hashcode & 0x07);   /* bit[0-2] -> bit in byte */
1299
 
                                lp->init_block.mcast_table[byte] |= bit;
1300
 
                        }
1301
 
                }
1302
 
        }
1303
 
}
1304
 
 
1305
 
static int __init depca_common_init (u_long ioaddr, struct net_device **devp)
1306
 
{
1307
 
        int status = 0;
1308
 
 
1309
 
        if (!request_region (ioaddr, DEPCA_TOTAL_SIZE, depca_string)) {
1310
 
                status = -EBUSY;
1311
 
                goto out;
1312
 
        }
1313
 
 
1314
 
        if (DevicePresent(ioaddr)) {
1315
 
                status = -ENODEV;
1316
 
                goto out_release;
1317
 
        }
1318
 
 
1319
 
        if (!(*devp = alloc_etherdev (sizeof (struct depca_private)))) {
1320
 
                status = -ENOMEM;
1321
 
                goto out_release;
1322
 
        }
1323
 
 
1324
 
        return 0;
1325
 
 
1326
 
 out_release:
1327
 
        release_region (ioaddr, DEPCA_TOTAL_SIZE);
1328
 
 out:
1329
 
        return status;
1330
 
}
1331
 
 
1332
 
#ifdef CONFIG_MCA
1333
 
/*
1334
 
** Microchannel bus I/O device probe
1335
 
*/
1336
 
static int __init depca_mca_probe(struct device *device)
1337
 
{
1338
 
        unsigned char pos[2];
1339
 
        unsigned char where;
1340
 
        unsigned long iobase, mem_start;
1341
 
        int irq, err;
1342
 
        struct mca_device *mdev = to_mca_device (device);
1343
 
        struct net_device *dev;
1344
 
        struct depca_private *lp;
1345
 
 
1346
 
        /*
1347
 
        ** Search for the adapter.  If an address has been given, search
1348
 
        ** specifically for the card at that address.  Otherwise find the
1349
 
        ** first card in the system.
1350
 
        */
1351
 
 
1352
 
        pos[0] = mca_device_read_stored_pos(mdev, 2);
1353
 
        pos[1] = mca_device_read_stored_pos(mdev, 3);
1354
 
 
1355
 
        /*
1356
 
        ** IO of card is handled by bits 1 and 2 of pos0.
1357
 
        **
1358
 
        **    bit2 bit1    IO
1359
 
        **       0    0    0x2c00
1360
 
        **       0    1    0x2c10
1361
 
        **       1    0    0x2c20
1362
 
        **       1    1    0x2c30
1363
 
        */
1364
 
        where = (pos[0] & 6) >> 1;
1365
 
        iobase = 0x2c00 + (0x10 * where);
1366
 
 
1367
 
        /*
1368
 
        ** Found the adapter we were looking for. Now start setting it up.
1369
 
        **
1370
 
        ** First work on decoding the IRQ.  It's stored in the lower 4 bits
1371
 
        ** of pos1.  Bits are as follows (from the ADF file):
1372
 
        **
1373
 
        **      Bits
1374
 
        **   3   2   1   0    IRQ
1375
 
        **   --------------------
1376
 
        **   0   0   1   0     5
1377
 
        **   0   0   0   1     9
1378
 
        **   0   1   0   0    10
1379
 
        **   1   0   0   0    11
1380
 
        */
1381
 
        where = pos[1] & 0x0f;
1382
 
        switch (where) {
1383
 
        case 1:
1384
 
                irq = 9;
1385
 
                break;
1386
 
        case 2:
1387
 
                irq = 5;
1388
 
                break;
1389
 
        case 4:
1390
 
                irq = 10;
1391
 
                break;
1392
 
        case 8:
1393
 
                irq = 11;
1394
 
                break;
1395
 
        default:
1396
 
                printk("%s: mca_probe IRQ error.  You should never get here (%d).\n", mdev->name, where);
1397
 
                return -EINVAL;
1398
 
        }
1399
 
 
1400
 
        /*
1401
 
        ** Shared memory address of adapter is stored in bits 3-5 of pos0.
1402
 
        ** They are mapped as follows:
1403
 
        **
1404
 
        **    Bit
1405
 
        **   5  4  3       Memory Addresses
1406
 
        **   0  0  0       C0000-CFFFF (64K)
1407
 
        **   1  0  0       C8000-CFFFF (32K)
1408
 
        **   0  0  1       D0000-DFFFF (64K)
1409
 
        **   1  0  1       D8000-DFFFF (32K)
1410
 
        **   0  1  0       E0000-EFFFF (64K)
1411
 
        **   1  1  0       E8000-EFFFF (32K)
1412
 
        */
1413
 
        where = (pos[0] & 0x18) >> 3;
1414
 
        mem_start = 0xc0000 + (where * 0x10000);
1415
 
        if (pos[0] & 0x20) {
1416
 
                mem_start += 0x8000;
1417
 
        }
1418
 
 
1419
 
        /* claim the slot */
1420
 
        strncpy(mdev->name, depca_mca_adapter_name[mdev->index],
1421
 
                sizeof(mdev->name));
1422
 
        mca_device_set_claim(mdev, 1);
1423
 
 
1424
 
        /*
1425
 
        ** Get everything allocated and initialized...  (almost just
1426
 
        ** like the ISA and EISA probes)
1427
 
        */
1428
 
        irq = mca_device_transform_irq(mdev, irq);
1429
 
        iobase = mca_device_transform_ioport(mdev, iobase);
1430
 
 
1431
 
        if ((err = depca_common_init (iobase, &dev)))
1432
 
                goto out_unclaim;
1433
 
 
1434
 
        dev->irq = irq;
1435
 
        dev->base_addr = iobase;
1436
 
        lp = netdev_priv(dev);
1437
 
        lp->depca_bus = DEPCA_BUS_MCA;
1438
 
        lp->adapter = depca_mca_adapter_type[mdev->index];
1439
 
        lp->mem_start = mem_start;
1440
 
 
1441
 
        if ((err = depca_hw_init(dev, device)))
1442
 
                goto out_free;
1443
 
 
1444
 
        return 0;
1445
 
 
1446
 
 out_free:
1447
 
        free_netdev (dev);
1448
 
        release_region (iobase, DEPCA_TOTAL_SIZE);
1449
 
 out_unclaim:
1450
 
        mca_device_set_claim(mdev, 0);
1451
 
 
1452
 
        return err;
1453
 
}
1454
 
#endif
1455
 
 
1456
 
/*
1457
 
** ISA bus I/O device probe
1458
 
*/
1459
 
 
1460
 
static void __init depca_platform_probe (void)
1461
 
{
1462
 
        int i;
1463
 
        struct platform_device *pldev;
1464
 
 
1465
 
        for (i = 0; depca_io_ports[i].iobase; i++) {
1466
 
                depca_io_ports[i].device = NULL;
1467
 
 
1468
 
                /* if an address has been specified on the command
1469
 
                 * line, use it (if valid) */
1470
 
                if (io && io != depca_io_ports[i].iobase)
1471
 
                        continue;
1472
 
 
1473
 
                pldev = platform_device_alloc(depca_string, i);
1474
 
                if (!pldev)
1475
 
                        continue;
1476
 
 
1477
 
                pldev->dev.platform_data = (void *) depca_io_ports[i].iobase;
1478
 
                depca_io_ports[i].device = pldev;
1479
 
 
1480
 
                if (platform_device_add(pldev)) {
1481
 
                        depca_io_ports[i].device = NULL;
1482
 
                        pldev->dev.platform_data = NULL;
1483
 
                        platform_device_put(pldev);
1484
 
                        continue;
1485
 
                }
1486
 
 
1487
 
                if (!pldev->dev.driver) {
1488
 
                /* The driver was not bound to this device, there was
1489
 
                 * no hardware at this address. Unregister it, as the
1490
 
                 * release function will take care of freeing the
1491
 
                 * allocated structure */
1492
 
 
1493
 
                        depca_io_ports[i].device = NULL;
1494
 
                        pldev->dev.platform_data = NULL;
1495
 
                        platform_device_unregister (pldev);
1496
 
                }
1497
 
        }
1498
 
}
1499
 
 
1500
 
static enum depca_type __init depca_shmem_probe (ulong *mem_start)
1501
 
{
1502
 
        u_long mem_base[] = DEPCA_RAM_BASE_ADDRESSES;
1503
 
        enum depca_type adapter = unknown;
1504
 
        int i;
1505
 
 
1506
 
        for (i = 0; mem_base[i]; i++) {
1507
 
                *mem_start = mem ? mem : mem_base[i];
1508
 
                adapter = DepcaSignature (adapter_name, *mem_start);
1509
 
                if (adapter != unknown)
1510
 
                        break;
1511
 
        }
1512
 
 
1513
 
        return adapter;
1514
 
}
1515
 
 
1516
 
static int __devinit depca_isa_probe (struct platform_device *device)
1517
 
{
1518
 
        struct net_device *dev;
1519
 
        struct depca_private *lp;
1520
 
        u_long ioaddr, mem_start = 0;
1521
 
        enum depca_type adapter = unknown;
1522
 
        int status = 0;
1523
 
 
1524
 
        ioaddr = (u_long) device->dev.platform_data;
1525
 
 
1526
 
        if ((status = depca_common_init (ioaddr, &dev)))
1527
 
                goto out;
1528
 
 
1529
 
        adapter = depca_shmem_probe (&mem_start);
1530
 
 
1531
 
        if (adapter == unknown) {
1532
 
                status = -ENODEV;
1533
 
                goto out_free;
1534
 
        }
1535
 
 
1536
 
        dev->base_addr = ioaddr;
1537
 
        dev->irq = irq;         /* Use whatever value the user gave
1538
 
                                 * us, and 0 if he didn't. */
1539
 
        lp = netdev_priv(dev);
1540
 
        lp->depca_bus = DEPCA_BUS_ISA;
1541
 
        lp->adapter = adapter;
1542
 
        lp->mem_start = mem_start;
1543
 
 
1544
 
        if ((status = depca_hw_init(dev, &device->dev)))
1545
 
                goto out_free;
1546
 
 
1547
 
        return 0;
1548
 
 
1549
 
 out_free:
1550
 
        free_netdev (dev);
1551
 
        release_region (ioaddr, DEPCA_TOTAL_SIZE);
1552
 
 out:
1553
 
        return status;
1554
 
}
1555
 
 
1556
 
/*
1557
 
** EISA callbacks from sysfs.
1558
 
*/
1559
 
 
1560
 
#ifdef CONFIG_EISA
1561
 
static int __init depca_eisa_probe (struct device *device)
1562
 
{
1563
 
        enum depca_type adapter = unknown;
1564
 
        struct eisa_device *edev;
1565
 
        struct net_device *dev;
1566
 
        struct depca_private *lp;
1567
 
        u_long ioaddr, mem_start;
1568
 
        int status = 0;
1569
 
 
1570
 
        edev = to_eisa_device (device);
1571
 
        ioaddr = edev->base_addr + DEPCA_EISA_IO_PORTS;
1572
 
 
1573
 
        if ((status = depca_common_init (ioaddr, &dev)))
1574
 
                goto out;
1575
 
 
1576
 
        /* It would have been nice to get card configuration from the
1577
 
         * card. Unfortunately, this register is write-only (shares
1578
 
         * it's address with the ethernet prom)... As we don't parse
1579
 
         * the EISA configuration structures (yet... :-), just rely on
1580
 
         * the ISA probing to sort it out... */
1581
 
 
1582
 
        adapter = depca_shmem_probe (&mem_start);
1583
 
        if (adapter == unknown) {
1584
 
                status = -ENODEV;
1585
 
                goto out_free;
1586
 
        }
1587
 
 
1588
 
        dev->base_addr = ioaddr;
1589
 
        dev->irq = irq;
1590
 
        lp = netdev_priv(dev);
1591
 
        lp->depca_bus = DEPCA_BUS_EISA;
1592
 
        lp->adapter = edev->id.driver_data;
1593
 
        lp->mem_start = mem_start;
1594
 
 
1595
 
        if ((status = depca_hw_init(dev, device)))
1596
 
                goto out_free;
1597
 
 
1598
 
        return 0;
1599
 
 
1600
 
 out_free:
1601
 
        free_netdev (dev);
1602
 
        release_region (ioaddr, DEPCA_TOTAL_SIZE);
1603
 
 out:
1604
 
        return status;
1605
 
}
1606
 
#endif
1607
 
 
1608
 
static int __devexit depca_device_remove (struct device *device)
1609
 
{
1610
 
        struct net_device *dev;
1611
 
        struct depca_private *lp;
1612
 
        int bus;
1613
 
 
1614
 
        dev  = dev_get_drvdata(device);
1615
 
        lp   = netdev_priv(dev);
1616
 
 
1617
 
        unregister_netdev (dev);
1618
 
        iounmap (lp->sh_mem);
1619
 
        release_mem_region (lp->mem_start, lp->mem_len);
1620
 
        release_region (dev->base_addr, DEPCA_TOTAL_SIZE);
1621
 
        bus = lp->depca_bus;
1622
 
        free_netdev (dev);
1623
 
 
1624
 
        return 0;
1625
 
}
1626
 
 
1627
 
/*
1628
 
** Look for a particular board name in the on-board Remote Diagnostics
1629
 
** and Boot (readb) ROM. This will also give us a clue to the network RAM
1630
 
** base address.
1631
 
*/
1632
 
static int __init DepcaSignature(char *name, u_long base_addr)
1633
 
{
1634
 
        u_int i, j, k;
1635
 
        void __iomem *ptr;
1636
 
        char tmpstr[16];
1637
 
        u_long prom_addr = base_addr + 0xc000;
1638
 
        u_long mem_addr = base_addr + 0x8000; /* 32KB */
1639
 
 
1640
 
        /* Can't reserve the prom region, it is already marked as
1641
 
         * used, at least on x86. Instead, reserve a memory region a
1642
 
         * board would certainly use. If it works, go ahead. If not,
1643
 
         * run like hell... */
1644
 
 
1645
 
        if (!request_mem_region (mem_addr, 16, depca_string))
1646
 
                return unknown;
1647
 
 
1648
 
        /* Copy the first 16 bytes of ROM */
1649
 
 
1650
 
        ptr = ioremap(prom_addr, 16);
1651
 
        if (ptr == NULL) {
1652
 
                printk(KERN_ERR "depca: I/O remap failed at %lx\n", prom_addr);
1653
 
                return unknown;
1654
 
        }
1655
 
        for (i = 0; i < 16; i++) {
1656
 
                tmpstr[i] = readb(ptr + i);
1657
 
        }
1658
 
        iounmap(ptr);
1659
 
 
1660
 
        release_mem_region (mem_addr, 16);
1661
 
 
1662
 
        /* Check if PROM contains a valid string */
1663
 
        for (i = 0; *depca_signature[i] != '\0'; i++) {
1664
 
                for (j = 0, k = 0; j < 16 && k < strlen(depca_signature[i]); j++) {
1665
 
                        if (depca_signature[i][k] == tmpstr[j]) {       /* track signature */
1666
 
                                k++;
1667
 
                        } else {        /* lost signature; begin search again */
1668
 
                                k = 0;
1669
 
                        }
1670
 
                }
1671
 
                if (k == strlen(depca_signature[i]))
1672
 
                        break;
1673
 
        }
1674
 
 
1675
 
        /* Check if name string is valid, provided there's no PROM */
1676
 
        if (name && *name && (i == unknown)) {
1677
 
                for (i = 0; *depca_signature[i] != '\0'; i++) {
1678
 
                        if (strcmp(name, depca_signature[i]) == 0)
1679
 
                                break;
1680
 
                }
1681
 
        }
1682
 
 
1683
 
        return i;
1684
 
}
1685
 
 
1686
 
/*
1687
 
** Look for a special sequence in the Ethernet station address PROM that
1688
 
** is common across all DEPCA products. Note that the original DEPCA needs
1689
 
** its ROM address counter to be initialized and enabled. Only enable
1690
 
** if the first address octet is a 0x08 - this minimises the chances of
1691
 
** messing around with some other hardware, but it assumes that this DEPCA
1692
 
** card initialized itself correctly.
1693
 
**
1694
 
** Search the Ethernet address ROM for the signature. Since the ROM address
1695
 
** counter can start at an arbitrary point, the search must include the entire
1696
 
** probe sequence length plus the (length_of_the_signature - 1).
1697
 
** Stop the search IMMEDIATELY after the signature is found so that the
1698
 
** PROM address counter is correctly positioned at the start of the
1699
 
** ethernet address for later read out.
1700
 
*/
1701
 
static int __init DevicePresent(u_long ioaddr)
1702
 
{
1703
 
        union {
1704
 
                struct {
1705
 
                        u32 a;
1706
 
                        u32 b;
1707
 
                } llsig;
1708
 
                char Sig[sizeof(u32) << 1];
1709
 
        }
1710
 
        dev;
1711
 
        short sigLength = 0;
1712
 
        s8 data;
1713
 
        s16 nicsr;
1714
 
        int i, j, status = 0;
1715
 
 
1716
 
        data = inb(DEPCA_PROM); /* clear counter on DEPCA */
1717
 
        data = inb(DEPCA_PROM); /* read data */
1718
 
 
1719
 
        if (data == 0x08) {     /* Enable counter on DEPCA */
1720
 
                nicsr = inb(DEPCA_NICSR);
1721
 
                nicsr |= AAC;
1722
 
                outb(nicsr, DEPCA_NICSR);
1723
 
        }
1724
 
 
1725
 
        dev.llsig.a = ETH_PROM_SIG;
1726
 
        dev.llsig.b = ETH_PROM_SIG;
1727
 
        sigLength = sizeof(u32) << 1;
1728
 
 
1729
 
        for (i = 0, j = 0; j < sigLength && i < PROBE_LENGTH + sigLength - 1; i++) {
1730
 
                data = inb(DEPCA_PROM);
1731
 
                if (dev.Sig[j] == data) {       /* track signature */
1732
 
                        j++;
1733
 
                } else {        /* lost signature; begin search again */
1734
 
                        if (data == dev.Sig[0]) {       /* rare case.... */
1735
 
                                j = 1;
1736
 
                        } else {
1737
 
                                j = 0;
1738
 
                        }
1739
 
                }
1740
 
        }
1741
 
 
1742
 
        if (j != sigLength) {
1743
 
                status = -ENODEV;       /* search failed */
1744
 
        }
1745
 
 
1746
 
        return status;
1747
 
}
1748
 
 
1749
 
/*
1750
 
** The DE100 and DE101 PROM accesses were made non-standard for some bizarre
1751
 
** reason: access the upper half of the PROM with x=0; access the lower half
1752
 
** with x=1.
1753
 
*/
1754
 
static int __init get_hw_addr(struct net_device *dev)
1755
 
{
1756
 
        u_long ioaddr = dev->base_addr;
1757
 
        struct depca_private *lp = netdev_priv(dev);
1758
 
        int i, k, tmp, status = 0;
1759
 
        u_short j, x, chksum;
1760
 
 
1761
 
        x = (((lp->adapter == de100) || (lp->adapter == de101)) ? 1 : 0);
1762
 
 
1763
 
        for (i = 0, k = 0, j = 0; j < 3; j++) {
1764
 
                k <<= 1;
1765
 
                if (k > 0xffff)
1766
 
                        k -= 0xffff;
1767
 
 
1768
 
                k += (u_char) (tmp = inb(DEPCA_PROM + x));
1769
 
                dev->dev_addr[i++] = (u_char) tmp;
1770
 
                k += (u_short) ((tmp = inb(DEPCA_PROM + x)) << 8);
1771
 
                dev->dev_addr[i++] = (u_char) tmp;
1772
 
 
1773
 
                if (k > 0xffff)
1774
 
                        k -= 0xffff;
1775
 
        }
1776
 
        if (k == 0xffff)
1777
 
                k = 0;
1778
 
 
1779
 
        chksum = (u_char) inb(DEPCA_PROM + x);
1780
 
        chksum |= (u_short) (inb(DEPCA_PROM + x) << 8);
1781
 
        if (k != chksum)
1782
 
                status = -1;
1783
 
 
1784
 
        return status;
1785
 
}
1786
 
 
1787
 
/*
1788
 
** Load a packet into the shared memory
1789
 
*/
1790
 
static int load_packet(struct net_device *dev, struct sk_buff *skb)
1791
 
{
1792
 
        struct depca_private *lp = netdev_priv(dev);
1793
 
        int i, entry, end, len, status = NETDEV_TX_OK;
1794
 
 
1795
 
        entry = lp->tx_new;     /* Ring around buffer number. */
1796
 
        end = (entry + (skb->len - 1) / TX_BUFF_SZ) & lp->txRingMask;
1797
 
        if (!(readl(&lp->tx_ring[end].base) & T_OWN)) { /* Enough room? */
1798
 
                /*
1799
 
                   ** Caution: the write order is important here... don't set up the
1800
 
                   ** ownership rights until all the other information is in place.
1801
 
                 */
1802
 
                if (end < entry) {      /* wrapped buffer */
1803
 
                        len = (lp->txRingMask - entry + 1) * TX_BUFF_SZ;
1804
 
                        memcpy_toio(lp->tx_buff[entry], skb->data, len);
1805
 
                        memcpy_toio(lp->tx_buff[0], skb->data + len, skb->len - len);
1806
 
                } else {        /* linear buffer */
1807
 
                        memcpy_toio(lp->tx_buff[entry], skb->data, skb->len);
1808
 
                }
1809
 
 
1810
 
                /* set up the buffer descriptors */
1811
 
                len = (skb->len < ETH_ZLEN) ? ETH_ZLEN : skb->len;
1812
 
                for (i = entry; i != end; i = (i+1) & lp->txRingMask) {
1813
 
                        /* clean out flags */
1814
 
                        writel(readl(&lp->tx_ring[i].base) & ~T_FLAGS, &lp->tx_ring[i].base);
1815
 
                        writew(0x0000, &lp->tx_ring[i].misc);   /* clears other error flags */
1816
 
                        writew(-TX_BUFF_SZ, &lp->tx_ring[i].length);    /* packet length in buffer */
1817
 
                        len -= TX_BUFF_SZ;
1818
 
                }
1819
 
                /* clean out flags */
1820
 
                writel(readl(&lp->tx_ring[end].base) & ~T_FLAGS, &lp->tx_ring[end].base);
1821
 
                writew(0x0000, &lp->tx_ring[end].misc); /* clears other error flags */
1822
 
                writew(-len, &lp->tx_ring[end].length); /* packet length in last buff */
1823
 
 
1824
 
                /* start of packet */
1825
 
                writel(readl(&lp->tx_ring[entry].base) | T_STP, &lp->tx_ring[entry].base);
1826
 
                /* end of packet */
1827
 
                writel(readl(&lp->tx_ring[end].base) | T_ENP, &lp->tx_ring[end].base);
1828
 
 
1829
 
                for (i = end; i != entry; --i) {
1830
 
                        /* ownership of packet */
1831
 
                        writel(readl(&lp->tx_ring[i].base) | T_OWN, &lp->tx_ring[i].base);
1832
 
                        if (i == 0)
1833
 
                                i = lp->txRingMask + 1;
1834
 
                }
1835
 
                writel(readl(&lp->tx_ring[entry].base) | T_OWN, &lp->tx_ring[entry].base);
1836
 
 
1837
 
                lp->tx_new = (++end) & lp->txRingMask;  /* update current pointers */
1838
 
        } else {
1839
 
                status = NETDEV_TX_LOCKED;
1840
 
        }
1841
 
 
1842
 
        return status;
1843
 
}
1844
 
 
1845
 
static void depca_dbg_open(struct net_device *dev)
1846
 
{
1847
 
        struct depca_private *lp = netdev_priv(dev);
1848
 
        u_long ioaddr = dev->base_addr;
1849
 
        struct depca_init *p = &lp->init_block;
1850
 
        int i;
1851
 
 
1852
 
        if (depca_debug > 1) {
1853
 
                /* Do not copy the shadow init block into shared memory */
1854
 
                /* Debugging should not affect normal operation! */
1855
 
                /* The shadow init block will get copied across during InitRestartDepca */
1856
 
                printk("%s: depca open with irq %d\n", dev->name, dev->irq);
1857
 
                printk("Descriptor head addresses (CPU):\n");
1858
 
                printk("        0x%lx  0x%lx\n", (u_long) lp->rx_ring, (u_long) lp->tx_ring);
1859
 
                printk("Descriptor addresses (CPU):\nRX: ");
1860
 
                for (i = 0; i < lp->rxRingMask; i++) {
1861
 
                        if (i < 3) {
1862
 
                                printk("%p ", &lp->rx_ring[i].base);
1863
 
                        }
1864
 
                }
1865
 
                printk("...%p\n", &lp->rx_ring[i].base);
1866
 
                printk("TX: ");
1867
 
                for (i = 0; i < lp->txRingMask; i++) {
1868
 
                        if (i < 3) {
1869
 
                                printk("%p ", &lp->tx_ring[i].base);
1870
 
                        }
1871
 
                }
1872
 
                printk("...%p\n", &lp->tx_ring[i].base);
1873
 
                printk("\nDescriptor buffers (Device):\nRX: ");
1874
 
                for (i = 0; i < lp->rxRingMask; i++) {
1875
 
                        if (i < 3) {
1876
 
                                printk("0x%8.8x  ", readl(&lp->rx_ring[i].base));
1877
 
                        }
1878
 
                }
1879
 
                printk("...0x%8.8x\n", readl(&lp->rx_ring[i].base));
1880
 
                printk("TX: ");
1881
 
                for (i = 0; i < lp->txRingMask; i++) {
1882
 
                        if (i < 3) {
1883
 
                                printk("0x%8.8x  ", readl(&lp->tx_ring[i].base));
1884
 
                        }
1885
 
                }
1886
 
                printk("...0x%8.8x\n", readl(&lp->tx_ring[i].base));
1887
 
                printk("Initialisation block at 0x%8.8lx(Phys)\n", lp->mem_start);
1888
 
                printk("        mode: 0x%4.4x\n", p->mode);
1889
 
                printk("        physical address: %pM\n", p->phys_addr);
1890
 
                printk("        multicast hash table: ");
1891
 
                for (i = 0; i < (HASH_TABLE_LEN >> 3) - 1; i++) {
1892
 
                        printk("%2.2x:", p->mcast_table[i]);
1893
 
                }
1894
 
                printk("%2.2x\n", p->mcast_table[i]);
1895
 
                printk("        rx_ring at: 0x%8.8x\n", p->rx_ring);
1896
 
                printk("        tx_ring at: 0x%8.8x\n", p->tx_ring);
1897
 
                printk("buffers (Phys): 0x%8.8lx\n", lp->mem_start + lp->buffs_offset);
1898
 
                printk("Ring size:\nRX: %d  Log2(rxRingMask): 0x%8.8x\n", (int) lp->rxRingMask + 1, lp->rx_rlen);
1899
 
                printk("TX: %d  Log2(txRingMask): 0x%8.8x\n", (int) lp->txRingMask + 1, lp->tx_rlen);
1900
 
                outw(CSR2, DEPCA_ADDR);
1901
 
                printk("CSR2&1: 0x%4.4x", inw(DEPCA_DATA));
1902
 
                outw(CSR1, DEPCA_ADDR);
1903
 
                printk("%4.4x\n", inw(DEPCA_DATA));
1904
 
                outw(CSR3, DEPCA_ADDR);
1905
 
                printk("CSR3: 0x%4.4x\n", inw(DEPCA_DATA));
1906
 
        }
1907
 
}
1908
 
 
1909
 
/*
1910
 
** Perform IOCTL call functions here. Some are privileged operations and the
1911
 
** effective uid is checked in those cases.
1912
 
** All multicast IOCTLs will not work here and are for testing purposes only.
1913
 
*/
1914
 
static int depca_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
1915
 
{
1916
 
        struct depca_private *lp = netdev_priv(dev);
1917
 
        struct depca_ioctl *ioc = (struct depca_ioctl *) &rq->ifr_ifru;
1918
 
        int i, status = 0;
1919
 
        u_long ioaddr = dev->base_addr;
1920
 
        union {
1921
 
                u8 addr[(HASH_TABLE_LEN * ETH_ALEN)];
1922
 
                u16 sval[(HASH_TABLE_LEN * ETH_ALEN) >> 1];
1923
 
                u32 lval[(HASH_TABLE_LEN * ETH_ALEN) >> 2];
1924
 
        } tmp;
1925
 
        unsigned long flags;
1926
 
        void *buf;
1927
 
 
1928
 
        switch (ioc->cmd) {
1929
 
        case DEPCA_GET_HWADDR:  /* Get the hardware address */
1930
 
                for (i = 0; i < ETH_ALEN; i++) {
1931
 
                        tmp.addr[i] = dev->dev_addr[i];
1932
 
                }
1933
 
                ioc->len = ETH_ALEN;
1934
 
                if (copy_to_user(ioc->data, tmp.addr, ioc->len))
1935
 
                        return -EFAULT;
1936
 
                break;
1937
 
 
1938
 
        case DEPCA_SET_HWADDR:  /* Set the hardware address */
1939
 
                if (!capable(CAP_NET_ADMIN))
1940
 
                        return -EPERM;
1941
 
                if (copy_from_user(tmp.addr, ioc->data, ETH_ALEN))
1942
 
                        return -EFAULT;
1943
 
                for (i = 0; i < ETH_ALEN; i++) {
1944
 
                        dev->dev_addr[i] = tmp.addr[i];
1945
 
                }
1946
 
                netif_stop_queue(dev);
1947
 
                while (lp->tx_old != lp->tx_new)
1948
 
                        cpu_relax();    /* Wait for the ring to empty */
1949
 
 
1950
 
                STOP_DEPCA;     /* Temporarily stop the depca.  */
1951
 
                depca_init_ring(dev);   /* Initialize the descriptor rings */
1952
 
                LoadCSRs(dev);  /* Reload CSR3 */
1953
 
                InitRestartDepca(dev);  /* Resume normal operation. */
1954
 
                netif_start_queue(dev); /* Unlock the TX ring */
1955
 
                break;
1956
 
 
1957
 
        case DEPCA_SET_PROM:    /* Set Promiscuous Mode */
1958
 
                if (!capable(CAP_NET_ADMIN))
1959
 
                        return -EPERM;
1960
 
                netif_stop_queue(dev);
1961
 
                while (lp->tx_old != lp->tx_new)
1962
 
                        cpu_relax();    /* Wait for the ring to empty */
1963
 
 
1964
 
                STOP_DEPCA;     /* Temporarily stop the depca.  */
1965
 
                depca_init_ring(dev);   /* Initialize the descriptor rings */
1966
 
                lp->init_block.mode |= PROM;    /* Set promiscuous mode */
1967
 
 
1968
 
                LoadCSRs(dev);  /* Reload CSR3 */
1969
 
                InitRestartDepca(dev);  /* Resume normal operation. */
1970
 
                netif_start_queue(dev); /* Unlock the TX ring */
1971
 
                break;
1972
 
 
1973
 
        case DEPCA_CLR_PROM:    /* Clear Promiscuous Mode */
1974
 
                if (!capable(CAP_NET_ADMIN))
1975
 
                        return -EPERM;
1976
 
                netif_stop_queue(dev);
1977
 
                while (lp->tx_old != lp->tx_new)
1978
 
                        cpu_relax();    /* Wait for the ring to empty */
1979
 
 
1980
 
                STOP_DEPCA;     /* Temporarily stop the depca.  */
1981
 
                depca_init_ring(dev);   /* Initialize the descriptor rings */
1982
 
                lp->init_block.mode &= ~PROM;   /* Clear promiscuous mode */
1983
 
 
1984
 
                LoadCSRs(dev);  /* Reload CSR3 */
1985
 
                InitRestartDepca(dev);  /* Resume normal operation. */
1986
 
                netif_start_queue(dev); /* Unlock the TX ring */
1987
 
                break;
1988
 
 
1989
 
        case DEPCA_SAY_BOO:     /* Say "Boo!" to the kernel log file */
1990
 
                if(!capable(CAP_NET_ADMIN))
1991
 
                        return -EPERM;
1992
 
                printk("%s: Boo!\n", dev->name);
1993
 
                break;
1994
 
 
1995
 
        case DEPCA_GET_MCA:     /* Get the multicast address table */
1996
 
                ioc->len = (HASH_TABLE_LEN >> 3);
1997
 
                if (copy_to_user(ioc->data, lp->init_block.mcast_table, ioc->len))
1998
 
                        return -EFAULT;
1999
 
                break;
2000
 
 
2001
 
        case DEPCA_SET_MCA:     /* Set a multicast address */
2002
 
                if (!capable(CAP_NET_ADMIN))
2003
 
                        return -EPERM;
2004
 
                if (ioc->len >= HASH_TABLE_LEN)
2005
 
                        return -EINVAL;
2006
 
                if (copy_from_user(tmp.addr, ioc->data, ETH_ALEN * ioc->len))
2007
 
                        return -EFAULT;
2008
 
                set_multicast_list(dev);
2009
 
                break;
2010
 
 
2011
 
        case DEPCA_CLR_MCA:     /* Clear all multicast addresses */
2012
 
                if (!capable(CAP_NET_ADMIN))
2013
 
                        return -EPERM;
2014
 
                set_multicast_list(dev);
2015
 
                break;
2016
 
 
2017
 
        case DEPCA_MCA_EN:      /* Enable pass all multicast addressing */
2018
 
                if (!capable(CAP_NET_ADMIN))
2019
 
                        return -EPERM;
2020
 
                set_multicast_list(dev);
2021
 
                break;
2022
 
 
2023
 
        case DEPCA_GET_STATS:   /* Get the driver statistics */
2024
 
                ioc->len = sizeof(lp->pktStats);
2025
 
                buf = kmalloc(ioc->len, GFP_KERNEL);
2026
 
                if(!buf)
2027
 
                        return -ENOMEM;
2028
 
                spin_lock_irqsave(&lp->lock, flags);
2029
 
                memcpy(buf, &lp->pktStats, ioc->len);
2030
 
                spin_unlock_irqrestore(&lp->lock, flags);
2031
 
                if (copy_to_user(ioc->data, buf, ioc->len))
2032
 
                        status = -EFAULT;
2033
 
                kfree(buf);
2034
 
                break;
2035
 
 
2036
 
        case DEPCA_CLR_STATS:   /* Zero out the driver statistics */
2037
 
                if (!capable(CAP_NET_ADMIN))
2038
 
                        return -EPERM;
2039
 
                spin_lock_irqsave(&lp->lock, flags);
2040
 
                memset(&lp->pktStats, 0, sizeof(lp->pktStats));
2041
 
                spin_unlock_irqrestore(&lp->lock, flags);
2042
 
                break;
2043
 
 
2044
 
        case DEPCA_GET_REG:     /* Get the DEPCA Registers */
2045
 
                i = 0;
2046
 
                tmp.sval[i++] = inw(DEPCA_NICSR);
2047
 
                outw(CSR0, DEPCA_ADDR); /* status register */
2048
 
                tmp.sval[i++] = inw(DEPCA_DATA);
2049
 
                memcpy(&tmp.sval[i], &lp->init_block, sizeof(struct depca_init));
2050
 
                ioc->len = i + sizeof(struct depca_init);
2051
 
                if (copy_to_user(ioc->data, tmp.addr, ioc->len))
2052
 
                        return -EFAULT;
2053
 
                break;
2054
 
 
2055
 
        default:
2056
 
                return -EOPNOTSUPP;
2057
 
        }
2058
 
 
2059
 
        return status;
2060
 
}
2061
 
 
2062
 
static int __init depca_module_init (void)
2063
 
{
2064
 
        int err = 0;
2065
 
 
2066
 
#ifdef CONFIG_MCA
2067
 
        err = mca_register_driver(&depca_mca_driver);
2068
 
        if (err)
2069
 
                goto err;
2070
 
#endif
2071
 
#ifdef CONFIG_EISA
2072
 
        err = eisa_driver_register(&depca_eisa_driver);
2073
 
        if (err)
2074
 
                goto err_mca;
2075
 
#endif
2076
 
        err = platform_driver_register(&depca_isa_driver);
2077
 
        if (err)
2078
 
                goto err_eisa;
2079
 
 
2080
 
        depca_platform_probe();
2081
 
        return 0;
2082
 
 
2083
 
err_eisa:
2084
 
#ifdef CONFIG_EISA
2085
 
        eisa_driver_unregister(&depca_eisa_driver);
2086
 
err_mca:
2087
 
#endif
2088
 
#ifdef CONFIG_MCA
2089
 
        mca_unregister_driver(&depca_mca_driver);
2090
 
err:
2091
 
#endif
2092
 
        return err;
2093
 
}
2094
 
 
2095
 
static void __exit depca_module_exit (void)
2096
 
{
2097
 
        int i;
2098
 
#ifdef CONFIG_MCA
2099
 
        mca_unregister_driver (&depca_mca_driver);
2100
 
#endif
2101
 
#ifdef CONFIG_EISA
2102
 
        eisa_driver_unregister (&depca_eisa_driver);
2103
 
#endif
2104
 
        platform_driver_unregister (&depca_isa_driver);
2105
 
 
2106
 
        for (i = 0; depca_io_ports[i].iobase; i++) {
2107
 
                if (depca_io_ports[i].device) {
2108
 
                        depca_io_ports[i].device->dev.platform_data = NULL;
2109
 
                        platform_device_unregister (depca_io_ports[i].device);
2110
 
                        depca_io_ports[i].device = NULL;
2111
 
                }
2112
 
        }
2113
 
}
2114
 
 
2115
 
module_init (depca_module_init);
2116
 
module_exit (depca_module_exit);