Root/drivers/net/ne-h8300.c

1/* ne-h8300.c: A NE2000 clone on H8/300 driver for linux. */
2/*
3    original ne.c
4    Written 1992-94 by Donald Becker.
5
6    Copyright 1993 United States Government as represented by the
7    Director, National Security Agency.
8
9    This software may be used and distributed according to the terms
10    of the GNU General Public License, incorporated herein by reference.
11
12    The author may be reached as becker@scyld.com, or C/O
13    Scyld Computing Corporation, 410 Severn Ave., Suite 210, Annapolis MD 21403
14
15    H8/300 modified
16    Yoshinori Sato <ysato@users.sourceforge.jp>
17*/
18
19static const char version1[] =
20"ne-h8300.c:v1.00 2004/04/11 ysato\n";
21
22#include <linux/module.h>
23#include <linux/kernel.h>
24#include <linux/errno.h>
25#include <linux/init.h>
26#include <linux/interrupt.h>
27#include <linux/delay.h>
28#include <linux/netdevice.h>
29#include <linux/etherdevice.h>
30#include <linux/jiffies.h>
31
32#include <asm/system.h>
33#include <asm/io.h>
34#include <asm/irq.h>
35
36#define EI_SHIFT(x) (ei_local->reg_offset[x])
37
38#include "8390.h"
39
40#define DRV_NAME "ne-h8300"
41
42/* Some defines that people can play with if so inclined. */
43
44/* Do we perform extra sanity checks on stuff ? */
45/* #define NE_SANITY_CHECK */
46
47/* Do we implement the read before write bugfix ? */
48/* #define NE_RW_BUGFIX */
49
50/* Do we have a non std. amount of memory? (in units of 256 byte pages) */
51/* #define PACKETBUF_MEMSIZE 0x40 */
52
53/* A zero-terminated list of I/O addresses to be probed at boot. */
54
55/* ---- No user-serviceable parts below ---- */
56
57static const char version[] =
58    "8390.c:v1.10cvs 9/23/94 Donald Becker (becker@cesdis.gsfc.nasa.gov)\n";
59
60#include "lib8390.c"
61
62#define NE_BASE (dev->base_addr)
63#define NE_CMD 0x00
64#define NE_DATAPORT (ei_status.word16?0x20:0x10) /* NatSemi-defined port window offset. */
65#define NE_RESET (ei_status.word16?0x3f:0x1f) /* Issue a read to reset, a write to clear. */
66#define NE_IO_EXTENT (ei_status.word16?0x40:0x20)
67
68#define NESM_START_PG 0x40 /* First page of TX buffer */
69#define NESM_STOP_PG 0x80 /* Last page +1 of RX ring */
70
71static int ne_probe1(struct net_device *dev, int ioaddr);
72
73static int ne_open(struct net_device *dev);
74static int ne_close(struct net_device *dev);
75
76static void ne_reset_8390(struct net_device *dev);
77static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
78              int ring_page);
79static void ne_block_input(struct net_device *dev, int count,
80              struct sk_buff *skb, int ring_offset);
81static void ne_block_output(struct net_device *dev, const int count,
82        const unsigned char *buf, const int start_page);
83
84
85static u32 reg_offset[16];
86
87static int __init init_reg_offset(struct net_device *dev,unsigned long base_addr)
88{
89    struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
90    int i;
91    unsigned char bus_width;
92
93    bus_width = *(volatile unsigned char *)ABWCR;
94    bus_width &= 1 << ((base_addr >> 21) & 7);
95
96    for (i = 0; i < ARRAY_SIZE(reg_offset); i++)
97        if (bus_width == 0)
98            reg_offset[i] = i * 2 + 1;
99        else
100            reg_offset[i] = i;
101
102    ei_local->reg_offset = reg_offset;
103    return 0;
104}
105
106static int __initdata h8300_ne_count = 0;
107#ifdef CONFIG_H8300H_H8MAX
108static unsigned long __initdata h8300_ne_base[] = { 0x800600 };
109static int h8300_ne_irq[] = {EXT_IRQ4};
110#endif
111#ifdef CONFIG_H8300H_AKI3068NET
112static unsigned long __initdata h8300_ne_base[] = { 0x200000 };
113static int h8300_ne_irq[] = {EXT_IRQ5};
114#endif
115
116static inline int init_dev(struct net_device *dev)
117{
118    if (h8300_ne_count < ARRAY_SIZE(h8300_ne_base)) {
119        dev->base_addr = h8300_ne_base[h8300_ne_count];
120        dev->irq = h8300_ne_irq[h8300_ne_count];
121        h8300_ne_count++;
122        return 0;
123    } else
124        return -ENODEV;
125}
126
127/* Probe for various non-shared-memory ethercards.
128
129   NEx000-clone boards have a Station Address PROM (SAPROM) in the packet
130   buffer memory space. NE2000 clones have 0x57,0x57 in bytes 0x0e,0x0f of
131   the SAPROM, while other supposed NE2000 clones must be detected by their
132   SA prefix.
133
134   Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
135   mode results in doubled values, which can be detected and compensated for.
136
137   The probe is also responsible for initializing the card and filling
138   in the 'dev' and 'ei_status' structures.
139
140   We use the minimum memory size for some ethercard product lines, iff we can't
141   distinguish models. You can increase the packet buffer size by setting
142   PACKETBUF_MEMSIZE. Reported Cabletron packet buffer locations are:
143    E1010 starts at 0x100 and ends at 0x2000.
144    E1010-x starts at 0x100 and ends at 0x8000. ("-x" means "more memory")
145    E2010 starts at 0x100 and ends at 0x4000.
146    E2010-x starts at 0x100 and ends at 0xffff. */
147
148static int __init do_ne_probe(struct net_device *dev)
149{
150    unsigned int base_addr = dev->base_addr;
151
152    /* First check any supplied i/o locations. User knows best. <cough> */
153    if (base_addr > 0x1ff) /* Check a single specified location. */
154        return ne_probe1(dev, base_addr);
155    else if (base_addr != 0) /* Don't probe at all. */
156        return -ENXIO;
157
158    return -ENODEV;
159}
160
161static void cleanup_card(struct net_device *dev)
162{
163    free_irq(dev->irq, dev);
164    release_region(dev->base_addr, NE_IO_EXTENT);
165}
166
167#ifndef MODULE
168struct net_device * __init ne_probe(int unit)
169{
170    struct net_device *dev = alloc_ei_netdev();
171    int err;
172
173    if (!dev)
174        return ERR_PTR(-ENOMEM);
175
176    if (init_dev(dev))
177        return ERR_PTR(-ENODEV);
178
179    sprintf(dev->name, "eth%d", unit);
180    netdev_boot_setup_check(dev);
181
182    err = init_reg_offset(dev, dev->base_addr);
183    if (err)
184        goto out;
185
186    err = do_ne_probe(dev);
187    if (err)
188        goto out;
189    return dev;
190out:
191    free_netdev(dev);
192    return ERR_PTR(err);
193}
194#endif
195
196static const struct net_device_ops ne_netdev_ops = {
197    .ndo_open = ne_open,
198    .ndo_stop = ne_close,
199
200    .ndo_start_xmit = ei_start_xmit,
201    .ndo_tx_timeout = ei_tx_timeout,
202    .ndo_get_stats = ei_get_stats,
203    .ndo_set_multicast_list = ei_set_multicast_list,
204    .ndo_validate_addr = eth_validate_addr,
205    .ndo_set_mac_address = eth_mac_addr,
206    .ndo_change_mtu = eth_change_mtu,
207#ifdef CONFIG_NET_POLL_CONTROLLER
208    .ndo_poll_controller = ei_poll,
209#endif
210};
211
212static int __init ne_probe1(struct net_device *dev, int ioaddr)
213{
214    int i;
215    unsigned char SA_prom[16];
216    int wordlength = 2;
217    const char *name = NULL;
218    int start_page, stop_page;
219    int reg0, ret;
220    static unsigned version_printed;
221    struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
222    unsigned char bus_width;
223
224    if (!request_region(ioaddr, NE_IO_EXTENT, DRV_NAME))
225        return -EBUSY;
226
227    reg0 = inb_p(ioaddr);
228    if (reg0 == 0xFF) {
229        ret = -ENODEV;
230        goto err_out;
231    }
232
233    /* Do a preliminary verification that we have a 8390. */
234    {
235        int regd;
236        outb_p(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD);
237        regd = inb_p(ioaddr + EI_SHIFT(0x0d));
238        outb_p(0xff, ioaddr + EI_SHIFT(0x0d));
239        outb_p(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD);
240        inb_p(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
241        if (inb_p(ioaddr + EN0_COUNTER0) != 0) {
242            outb_p(reg0, ioaddr + EI_SHIFT(0));
243            outb_p(regd, ioaddr + EI_SHIFT(0x0d)); /* Restore the old values. */
244            ret = -ENODEV;
245            goto err_out;
246        }
247    }
248
249    if (ei_debug && version_printed++ == 0)
250        printk(KERN_INFO "%s", version1);
251
252    printk(KERN_INFO "NE*000 ethercard probe at %08x:", ioaddr);
253
254    /* Read the 16 bytes of station address PROM.
255       We must first initialize registers, similar to NS8390_init(eifdev, 0).
256       We can't reliably read the SAPROM address without this.
257       (I learned the hard way!). */
258    {
259        struct {unsigned char value, offset; } program_seq[] =
260        {
261            {E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
262            {0x48, EN0_DCFG}, /* Set byte-wide (0x48) access. */
263            {0x00, EN0_RCNTLO}, /* Clear the count regs. */
264            {0x00, EN0_RCNTHI},
265            {0x00, EN0_IMR}, /* Mask completion irq. */
266            {0xFF, EN0_ISR},
267            {E8390_RXOFF, EN0_RXCR}, /* 0x20 Set to monitor */
268            {E8390_TXOFF, EN0_TXCR}, /* 0x02 and loopback mode. */
269            {32, EN0_RCNTLO},
270            {0x00, EN0_RCNTHI},
271            {0x00, EN0_RSARLO}, /* DMA starting at 0x0000. */
272            {0x00, EN0_RSARHI},
273            {E8390_RREAD+E8390_START, E8390_CMD},
274        };
275
276        for (i = 0; i < ARRAY_SIZE(program_seq); i++)
277            outb_p(program_seq[i].value, ioaddr + program_seq[i].offset);
278
279    }
280    bus_width = *(volatile unsigned char *)ABWCR;
281    bus_width &= 1 << ((ioaddr >> 21) & 7);
282    ei_status.word16 = (bus_width == 0); /* temporary setting */
283    for(i = 0; i < 16 /*sizeof(SA_prom)*/; i++) {
284        SA_prom[i] = inb_p(ioaddr + NE_DATAPORT);
285        inb_p(ioaddr + NE_DATAPORT); /* dummy read */
286    }
287
288    start_page = NESM_START_PG;
289    stop_page = NESM_STOP_PG;
290
291    if (bus_width)
292        wordlength = 1;
293    else
294        outb_p(0x49, ioaddr + EN0_DCFG);
295
296    /* Set up the rest of the parameters. */
297    name = (wordlength == 2) ? "NE2000" : "NE1000";
298
299    if (! dev->irq) {
300        printk(" failed to detect IRQ line.\n");
301        ret = -EAGAIN;
302        goto err_out;
303    }
304
305    /* Snarf the interrupt now. There's no point in waiting since we cannot
306       share and the board will usually be enabled. */
307    ret = request_irq(dev->irq, __ei_interrupt, 0, name, dev);
308    if (ret) {
309        printk (" unable to get IRQ %d (errno=%d).\n", dev->irq, ret);
310        goto err_out;
311    }
312
313    dev->base_addr = ioaddr;
314
315    for(i = 0; i < ETHER_ADDR_LEN; i++)
316        dev->dev_addr[i] = SA_prom[i];
317    printk(" %pM\n", dev->dev_addr);
318
319    printk("%s: %s found at %#x, using IRQ %d.\n",
320        dev->name, name, ioaddr, dev->irq);
321
322    ei_status.name = name;
323    ei_status.tx_start_page = start_page;
324    ei_status.stop_page = stop_page;
325    ei_status.word16 = (wordlength == 2);
326
327    ei_status.rx_start_page = start_page + TX_PAGES;
328#ifdef PACKETBUF_MEMSIZE
329     /* Allow the packet buffer size to be overridden by know-it-alls. */
330    ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
331#endif
332
333    ei_status.reset_8390 = &ne_reset_8390;
334    ei_status.block_input = &ne_block_input;
335    ei_status.block_output = &ne_block_output;
336    ei_status.get_8390_hdr = &ne_get_8390_hdr;
337    ei_status.priv = 0;
338
339    dev->netdev_ops = &ne_netdev_ops;
340
341    __NS8390_init(dev, 0);
342
343    ret = register_netdev(dev);
344    if (ret)
345        goto out_irq;
346    return 0;
347out_irq:
348    free_irq(dev->irq, dev);
349err_out:
350    release_region(ioaddr, NE_IO_EXTENT);
351    return ret;
352}
353
354static int ne_open(struct net_device *dev)
355{
356    __ei_open(dev);
357    return 0;
358}
359
360static int ne_close(struct net_device *dev)
361{
362    if (ei_debug > 1)
363        printk(KERN_DEBUG "%s: Shutting down ethercard.\n", dev->name);
364    __ei_close(dev);
365    return 0;
366}
367
368/* Hard reset the card. This used to pause for the same period that a
369   8390 reset command required, but that shouldn't be necessary. */
370
371static void ne_reset_8390(struct net_device *dev)
372{
373    unsigned long reset_start_time = jiffies;
374    struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
375
376    if (ei_debug > 1)
377        printk(KERN_DEBUG "resetting the 8390 t=%ld...", jiffies);
378
379    /* DON'T change these to inb_p/outb_p or reset will fail on clones. */
380    outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET);
381
382    ei_status.txing = 0;
383    ei_status.dmaing = 0;
384
385    /* This check _should_not_ be necessary, omit eventually. */
386    while ((inb_p(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
387        if (time_after(jiffies, reset_start_time + 2*HZ/100)) {
388            printk(KERN_WARNING "%s: ne_reset_8390() did not complete.\n", dev->name);
389            break;
390        }
391    outb_p(ENISR_RESET, NE_BASE + EN0_ISR); /* Ack intr. */
392}
393
394/* Grab the 8390 specific header. Similar to the block_input routine, but
395   we don't need to be concerned with ring wrap as the header will be at
396   the start of a page, so we optimize accordingly. */
397
398static void ne_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
399{
400    struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
401    /* This *shouldn't* happen. If it does, it's the last thing you'll see */
402
403    if (ei_status.dmaing)
404    {
405        printk(KERN_EMERG "%s: DMAing conflict in ne_get_8390_hdr "
406            "[DMAstat:%d][irqlock:%d].\n",
407            dev->name, ei_status.dmaing, ei_status.irqlock);
408        return;
409    }
410
411    ei_status.dmaing |= 0x01;
412    outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, NE_BASE + NE_CMD);
413    outb_p(sizeof(struct e8390_pkt_hdr), NE_BASE + EN0_RCNTLO);
414    outb_p(0, NE_BASE + EN0_RCNTHI);
415    outb_p(0, NE_BASE + EN0_RSARLO); /* On page boundary */
416    outb_p(ring_page, NE_BASE + EN0_RSARHI);
417    outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD);
418
419    if (ei_status.word16) {
420        int len;
421        unsigned short *p = (unsigned short *)hdr;
422        for (len = sizeof(struct e8390_pkt_hdr)>>1; len > 0; len--)
423            *p++ = inw(NE_BASE + NE_DATAPORT);
424    } else
425        insb(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr));
426
427    outb_p(ENISR_RDC, NE_BASE + EN0_ISR); /* Ack intr. */
428    ei_status.dmaing &= ~0x01;
429
430    le16_to_cpus(&hdr->count);
431}
432
433/* Block input and output, similar to the Crynwr packet driver. If you
434   are porting to a new ethercard, look at the packet driver source for hints.
435   The NEx000 doesn't share the on-board packet memory -- you have to put
436   the packet out through the "remote DMA" dataport using outb. */
437
438static void ne_block_input(struct net_device *dev, int count, struct sk_buff *skb, int ring_offset)
439{
440    struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
441#ifdef NE_SANITY_CHECK
442    int xfer_count = count;
443#endif
444    char *buf = skb->data;
445
446    /* This *shouldn't* happen. If it does, it's the last thing you'll see */
447    if (ei_status.dmaing)
448    {
449        printk(KERN_EMERG "%s: DMAing conflict in ne_block_input "
450            "[DMAstat:%d][irqlock:%d].\n",
451            dev->name, ei_status.dmaing, ei_status.irqlock);
452        return;
453    }
454    ei_status.dmaing |= 0x01;
455    outb_p(E8390_NODMA+E8390_PAGE0+E8390_START, NE_BASE + NE_CMD);
456    outb_p(count & 0xff, NE_BASE + EN0_RCNTLO);
457    outb_p(count >> 8, NE_BASE + EN0_RCNTHI);
458    outb_p(ring_offset & 0xff, NE_BASE + EN0_RSARLO);
459    outb_p(ring_offset >> 8, NE_BASE + EN0_RSARHI);
460    outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD);
461    if (ei_status.word16)
462    {
463        int len;
464        unsigned short *p = (unsigned short *)buf;
465        for (len = count>>1; len > 0; len--)
466            *p++ = inw(NE_BASE + NE_DATAPORT);
467        if (count & 0x01)
468        {
469            buf[count-1] = inb(NE_BASE + NE_DATAPORT);
470#ifdef NE_SANITY_CHECK
471            xfer_count++;
472#endif
473        }
474    } else {
475        insb(NE_BASE + NE_DATAPORT, buf, count);
476    }
477
478#ifdef NE_SANITY_CHECK
479    /* This was for the ALPHA version only, but enough people have
480       been encountering problems so it is still here. If you see
481       this message you either 1) have a slightly incompatible clone
482       or 2) have noise/speed problems with your bus. */
483
484    if (ei_debug > 1)
485    {
486        /* DMA termination address check... */
487        int addr, tries = 20;
488        do {
489            /* DON'T check for 'inb_p(EN0_ISR) & ENISR_RDC' here
490               -- it's broken for Rx on some cards! */
491            int high = inb_p(NE_BASE + EN0_RSARHI);
492            int low = inb_p(NE_BASE + EN0_RSARLO);
493            addr = (high << 8) + low;
494            if (((ring_offset + xfer_count) & 0xff) == low)
495                break;
496        } while (--tries > 0);
497         if (tries <= 0)
498            printk(KERN_WARNING "%s: RX transfer address mismatch,"
499                "%#4.4x (expected) vs. %#4.4x (actual).\n",
500                dev->name, ring_offset + xfer_count, addr);
501    }
502#endif
503    outb_p(ENISR_RDC, NE_BASE + EN0_ISR); /* Ack intr. */
504    ei_status.dmaing &= ~0x01;
505}
506
507static void ne_block_output(struct net_device *dev, int count,
508        const unsigned char *buf, const int start_page)
509{
510    struct ei_device *ei_local = (struct ei_device *) netdev_priv(dev);
511    unsigned long dma_start;
512#ifdef NE_SANITY_CHECK
513    int retries = 0;
514#endif
515
516    /* Round the count up for word writes. Do we need to do this?
517       What effect will an odd byte count have on the 8390?
518       I should check someday. */
519
520    if (ei_status.word16 && (count & 0x01))
521        count++;
522
523    /* This *shouldn't* happen. If it does, it's the last thing you'll see */
524    if (ei_status.dmaing)
525    {
526        printk(KERN_EMERG "%s: DMAing conflict in ne_block_output."
527            "[DMAstat:%d][irqlock:%d]\n",
528            dev->name, ei_status.dmaing, ei_status.irqlock);
529        return;
530    }
531    ei_status.dmaing |= 0x01;
532    /* We should already be in page 0, but to be safe... */
533    outb_p(E8390_PAGE0+E8390_START+E8390_NODMA, NE_BASE + NE_CMD);
534
535#ifdef NE_SANITY_CHECK
536retry:
537#endif
538
539#ifdef NE8390_RW_BUGFIX
540    /* Handle the read-before-write bug the same way as the
541       Crynwr packet driver -- the NatSemi method doesn't work.
542       Actually this doesn't always work either, but if you have
543       problems with your NEx000 this is better than nothing! */
544
545    outb_p(0x42, NE_BASE + EN0_RCNTLO);
546    outb_p(0x00, NE_BASE + EN0_RCNTHI);
547    outb_p(0x42, NE_BASE + EN0_RSARLO);
548    outb_p(0x00, NE_BASE + EN0_RSARHI);
549    outb_p(E8390_RREAD+E8390_START, NE_BASE + NE_CMD);
550    /* Make certain that the dummy read has occurred. */
551    udelay(6);
552#endif
553
554    outb_p(ENISR_RDC, NE_BASE + EN0_ISR);
555
556    /* Now the normal output. */
557    outb_p(count & 0xff, NE_BASE + EN0_RCNTLO);
558    outb_p(count >> 8, NE_BASE + EN0_RCNTHI);
559    outb_p(0x00, NE_BASE + EN0_RSARLO);
560    outb_p(start_page, NE_BASE + EN0_RSARHI);
561
562    outb_p(E8390_RWRITE+E8390_START, NE_BASE + NE_CMD);
563    if (ei_status.word16) {
564        int len;
565        unsigned short *p = (unsigned short *)buf;
566        for (len = count>>1; len > 0; len--)
567            outw(*p++, NE_BASE + NE_DATAPORT);
568    } else {
569        outsb(NE_BASE + NE_DATAPORT, buf, count);
570    }
571
572    dma_start = jiffies;
573
574#ifdef NE_SANITY_CHECK
575    /* This was for the ALPHA version only, but enough people have
576       been encountering problems so it is still here. */
577
578    if (ei_debug > 1)
579    {
580        /* DMA termination address check... */
581        int addr, tries = 20;
582        do {
583            int high = inb_p(NE_BASE + EN0_RSARHI);
584            int low = inb_p(NE_BASE + EN0_RSARLO);
585            addr = (high << 8) + low;
586            if ((start_page << 8) + count == addr)
587                break;
588        } while (--tries > 0);
589
590        if (tries <= 0)
591        {
592            printk(KERN_WARNING "%s: Tx packet transfer address mismatch,"
593                "%#4.4x (expected) vs. %#4.4x (actual).\n",
594                dev->name, (start_page << 8) + count, addr);
595            if (retries++ == 0)
596                goto retry;
597        }
598    }
599#endif
600
601    while ((inb_p(NE_BASE + EN0_ISR) & ENISR_RDC) == 0)
602        if (time_after(jiffies, dma_start + 2*HZ/100)) { /* 20ms */
603            printk(KERN_WARNING "%s: timeout waiting for Tx RDC.\n", dev->name);
604            ne_reset_8390(dev);
605            __NS8390_init(dev,1);
606            break;
607        }
608
609    outb_p(ENISR_RDC, NE_BASE + EN0_ISR); /* Ack intr. */
610    ei_status.dmaing &= ~0x01;
611    return;
612}
613
614
615#ifdef MODULE
616#define MAX_NE_CARDS 1 /* Max number of NE cards per module */
617static struct net_device *dev_ne[MAX_NE_CARDS];
618static int io[MAX_NE_CARDS];
619static int irq[MAX_NE_CARDS];
620static int bad[MAX_NE_CARDS]; /* 0xbad = bad sig or no reset ack */
621
622module_param_array(io, int, NULL, 0);
623module_param_array(irq, int, NULL, 0);
624module_param_array(bad, int, NULL, 0);
625MODULE_PARM_DESC(io, "I/O base address(es)");
626MODULE_PARM_DESC(irq, "IRQ number(s)");
627MODULE_DESCRIPTION("H8/300 NE2000 Ethernet driver");
628MODULE_LICENSE("GPL");
629
630/* This is set up so that no ISA autoprobe takes place. We can't guarantee
631that the ne2k probe is the last 8390 based probe to take place (as it
632is at boot) and so the probe will get confused by any other 8390 cards.
633ISA device autoprobes on a running machine are not recommended anyway. */
634
635int init_module(void)
636{
637    int this_dev, found = 0;
638    int err;
639
640    for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
641        struct net_device *dev = alloc_ei_netdev();
642        if (!dev)
643            break;
644        if (io[this_dev]) {
645            dev->irq = irq[this_dev];
646            dev->mem_end = bad[this_dev];
647            dev->base_addr = io[this_dev];
648        } else {
649            dev->base_addr = h8300_ne_base[this_dev];
650            dev->irq = h8300_ne_irq[this_dev];
651        }
652        err = init_reg_offset(dev, dev->base_addr);
653        if (!err) {
654            if (do_ne_probe(dev) == 0) {
655                dev_ne[found++] = dev;
656                continue;
657            }
658        }
659        free_netdev(dev);
660        if (found)
661            break;
662        if (io[this_dev] != 0)
663            printk(KERN_WARNING "ne.c: No NE*000 card found at i/o = %#x\n", dev->base_addr);
664        else
665            printk(KERN_NOTICE "ne.c: You must supply \"io=0xNNN\" value(s) for ISA cards.\n");
666        return -ENXIO;
667    }
668    if (found)
669        return 0;
670    return -ENODEV;
671}
672
673void cleanup_module(void)
674{
675    int this_dev;
676
677    for (this_dev = 0; this_dev < MAX_NE_CARDS; this_dev++) {
678        struct net_device *dev = dev_ne[this_dev];
679        if (dev) {
680            unregister_netdev(dev);
681            cleanup_card(dev);
682            free_netdev(dev);
683        }
684    }
685}
686#endif /* MODULE */
687

Archive Download this file



interactive