3 #include <linux/kernel.h>
4 #include <linux/string.h>
5 #include <linux/errno.h>
6 #include <linux/ioport.h>
7 #include <linux/interrupt.h>
8 #include <linux/delay.h>
9 #include <linux/time.h>
10 #include <linux/mca.h>
11 #include <linux/module.h>
12 #include <linux/netdevice.h>
13 #include <linux/etherdevice.h>
14 #include <linux/if_ether.h>
15 #include <linux/skbuff.h>
16 #include <linux/bitops.h>
18 #include <asm/processor.h>
21 #define _IBM_LANA_DRIVER_
26 #define DRV_NAME "ibmlana"
28 /* ------------------------------------------------------------------------
29 * global static data - not more since we can handle multiple boards and
30 * have to pack all state info into the device struct!
31 * ------------------------------------------------------------------------ */
33 static char *MediaNames
[Media_Count
] = {
34 "10BaseT", "10Base5", "Unknown", "10Base2"
37 /* ------------------------------------------------------------------------
38 * private subfunctions
39 * ------------------------------------------------------------------------ */
42 /* dump all registers */
44 static void dumpregs(struct net_device
*dev
)
48 for (z
= 0; z
< 160; z
+= 2) {
50 printk("REGS: %04x:", z
);
51 printk(" %04x", inw(dev
->base_addr
+ z
));
57 /* dump parts of shared memory - only needed during debugging */
59 static void dumpmem(struct net_device
*dev
, u32 start
, u32 len
)
61 ibmlana_priv
*priv
= netdev_priv(dev
);
64 printk("Address %04x:\n", start
);
65 for (z
= 0; z
< len
; z
++) {
68 printk(" %02x", readb(priv
->base
+ start
+ z
));
76 /* print exact time - ditto */
78 static void PrTime(void)
83 printk("%9d:%06d: ", (int) tv
.tv_sec
, (int) tv
.tv_usec
);
87 /* deduce resources out of POS registers */
89 static void getaddrs(struct mca_device
*mdev
, int *base
, int *memlen
,
90 int *iobase
, int *irq
, ibmlana_medium
*medium
)
94 pos0
= mca_device_read_stored_pos(mdev
, 2);
95 pos1
= mca_device_read_stored_pos(mdev
, 3);
97 *base
= 0xc0000 + ((pos1
& 0xf0) << 9);
98 *memlen
= (pos1
& 0x01) ? 0x8000 : 0x4000;
99 *iobase
= (pos0
& 0xe0) << 7;
100 switch (pos0
& 0x06) {
114 *medium
= (pos0
& 0x18) >> 3;
117 /* wait on register value with mask and timeout */
119 static int wait_timeout(struct net_device
*dev
, int regoffs
, u16 mask
,
120 u16 value
, int timeout
)
122 unsigned long fin
= jiffies
+ timeout
;
124 while (time_before(jiffies
,fin
))
125 if ((inw(dev
->base_addr
+ regoffs
) & mask
) == value
)
132 /* reset the whole board */
134 static void ResetBoard(struct net_device
*dev
)
136 unsigned char bcmval
;
138 /* read original board control value */
140 bcmval
= inb(dev
->base_addr
+ BCMREG
);
142 /* set reset bit for a while */
144 bcmval
|= BCMREG_RESET
;
145 outb(bcmval
, dev
->base_addr
+ BCMREG
);
147 bcmval
&= ~BCMREG_RESET
;
148 outb(bcmval
, dev
->base_addr
+ BCMREG
);
150 /* switch over to RAM again */
152 bcmval
|= BCMREG_RAMEN
| BCMREG_RAMWIN
;
153 outb(bcmval
, dev
->base_addr
+ BCMREG
);
156 /* calculate RAM layout & set up descriptors in RAM */
158 static void InitDscrs(struct net_device
*dev
)
160 ibmlana_priv
*priv
= netdev_priv(dev
);
161 u32 addr
, baddr
, raddr
;
169 memset_io(priv
->base
, 0xaa,
170 dev
->mem_start
- dev
->mem_start
);
172 /* setup n TX descriptors - independent of RAM size */
174 priv
->tdastart
= addr
= 0;
175 priv
->txbufstart
= baddr
= sizeof(tda_t
) * TXBUFCNT
;
176 for (z
= 0; z
< TXBUFCNT
; z
++) {
184 if (z
== TXBUFCNT
- 1)
185 tda
.link
= priv
->tdastart
;
187 tda
.link
= addr
+ sizeof(tda_t
);
189 memcpy_toio(priv
->base
+ addr
, &tda
, sizeof(tda_t
));
190 addr
+= sizeof(tda_t
);
194 /* calculate how many receive buffers fit into remaining memory */
196 priv
->rxbufcnt
= (dev
->mem_end
- dev
->mem_start
- baddr
) / (sizeof(rra_t
) + sizeof(rda_t
) + PKTSIZE
);
198 /* calculate receive addresses */
200 priv
->rrastart
= raddr
= priv
->txbufstart
+ (TXBUFCNT
* PKTSIZE
);
201 priv
->rdastart
= addr
= priv
->rrastart
+ (priv
->rxbufcnt
* sizeof(rra_t
));
202 priv
->rxbufstart
= baddr
= priv
->rdastart
+ (priv
->rxbufcnt
* sizeof(rda_t
));
204 for (z
= 0; z
< priv
->rxbufcnt
; z
++) {
207 rra
.cntlo
= PKTSIZE
>> 1;
209 memcpy_toio(priv
->base
+ raddr
, &rra
, sizeof(rra_t
));
216 if (z
< priv
->rxbufcnt
- 1)
217 rda
.link
= addr
+ sizeof(rda_t
);
221 memcpy_toio(priv
->base
+ addr
, &rda
, sizeof(rda_t
));
224 raddr
+= sizeof(rra_t
);
225 addr
+= sizeof(rda_t
);
228 /* initialize current pointers */
230 priv
->nextrxdescr
= 0;
231 priv
->lastrxdescr
= priv
->rxbufcnt
- 1;
232 priv
->nexttxdescr
= 0;
233 priv
->currtxdescr
= 0;
235 memset(priv
->txused
, 0, sizeof(priv
->txused
));
238 /* set up Rx + Tx descriptors in SONIC */
240 static int InitSONIC(struct net_device
*dev
)
242 ibmlana_priv
*priv
= netdev_priv(dev
);
244 /* set up start & end of resource area */
247 outw(priv
->rrastart
, dev
->base_addr
+ SONIC_RSA
);
248 outw(priv
->rrastart
+ (priv
->rxbufcnt
* sizeof(rra_t
)), dev
->base_addr
+ SONIC_REA
);
249 outw(priv
->rrastart
, dev
->base_addr
+ SONIC_RRP
);
250 outw(priv
->rrastart
, dev
->base_addr
+ SONIC_RWP
);
252 /* set EOBC so that only one packet goes into one buffer */
254 outw((PKTSIZE
- 4) >> 1, dev
->base_addr
+ SONIC_EOBC
);
256 /* let SONIC read the first RRA descriptor */
258 outw(CMDREG_RRRA
, dev
->base_addr
+ SONIC_CMDREG
);
259 if (!wait_timeout(dev
, SONIC_CMDREG
, CMDREG_RRRA
, 0, 2)) {
260 printk(KERN_ERR
"%s: SONIC did not respond on RRRA command - giving up.", dev
->name
);
264 /* point SONIC to the first RDA */
266 outw(0, dev
->base_addr
+ SONIC_URDA
);
267 outw(priv
->rdastart
, dev
->base_addr
+ SONIC_CRDA
);
269 /* set upper half of TDA address */
271 outw(0, dev
->base_addr
+ SONIC_UTDA
);
276 /* stop SONIC so we can reinitialize it */
278 static void StopSONIC(struct net_device
*dev
)
280 /* disable interrupts */
282 outb(inb(dev
->base_addr
+ BCMREG
) & (~BCMREG_IEN
), dev
->base_addr
+ BCMREG
);
283 outb(0, dev
->base_addr
+ SONIC_IMREG
);
285 /* reset the SONIC */
287 outw(CMDREG_RST
, dev
->base_addr
+ SONIC_CMDREG
);
289 outw(CMDREG_RST
, dev
->base_addr
+ SONIC_CMDREG
);
292 /* initialize card and SONIC for proper operation */
294 static void putcam(camentry_t
* cams
, int *camcnt
, char *addr
)
296 camentry_t
*pcam
= cams
+ (*camcnt
);
297 u8
*uaddr
= (u8
*) addr
;
299 pcam
->index
= *camcnt
;
300 pcam
->addr0
= (((u16
) uaddr
[1]) << 8) | uaddr
[0];
301 pcam
->addr1
= (((u16
) uaddr
[3]) << 8) | uaddr
[2];
302 pcam
->addr2
= (((u16
) uaddr
[5]) << 8) | uaddr
[4];
306 static void InitBoard(struct net_device
*dev
)
308 ibmlana_priv
*priv
= netdev_priv(dev
);
312 struct netdev_hw_addr
*ha
;
315 /* reset the SONIC */
317 outw(CMDREG_RST
, dev
->base_addr
+ SONIC_CMDREG
);
320 /* clear all spurious interrupts */
322 outw(inw(dev
->base_addr
+ SONIC_ISREG
), dev
->base_addr
+ SONIC_ISREG
);
324 /* set up the SONIC's bus interface - constant for this adapter -
325 must be done while the SONIC is in reset */
327 outw(DCREG_USR1
| DCREG_USR0
| DCREG_WC1
| DCREG_DW32
, dev
->base_addr
+ SONIC_DCREG
);
328 outw(0, dev
->base_addr
+ SONIC_DCREG2
);
330 /* remove reset form the SONIC */
332 outw(0, dev
->base_addr
+ SONIC_CMDREG
);
335 /* data sheet requires URRA to be programmed before setting up the CAM contents */
337 outw(0, dev
->base_addr
+ SONIC_URRA
);
339 /* program the CAM entry 0 to the device address */
342 putcam(cams
, &camcnt
, dev
->dev_addr
);
344 /* start putting the multicast addresses into the CAM list. Stop if
347 netdev_for_each_mc_addr(ha
, dev
) {
348 putcam(cams
, &camcnt
, ha
->addr
);
353 /* calculate CAM mask */
355 cammask
= (1 << camcnt
) - 1;
357 /* feed CDA into SONIC, initialize RCR value (always get broadcasts) */
359 memcpy_toio(priv
->base
, cams
, sizeof(camentry_t
) * camcnt
);
360 memcpy_toio(priv
->base
+ (sizeof(camentry_t
) * camcnt
), &cammask
, sizeof(cammask
));
363 printk("CAM setup:\n");
364 dumpmem(dev
, 0, sizeof(camentry_t
) * camcnt
+ sizeof(cammask
));
367 outw(0, dev
->base_addr
+ SONIC_CAMPTR
);
368 outw(camcnt
, dev
->base_addr
+ SONIC_CAMCNT
);
369 outw(CMDREG_LCAM
, dev
->base_addr
+ SONIC_CMDREG
);
370 if (!wait_timeout(dev
, SONIC_CMDREG
, CMDREG_LCAM
, 0, 2)) {
371 printk(KERN_ERR
"%s:SONIC did not respond on LCAM command - giving up.", dev
->name
);
374 /* clear interrupt condition */
376 outw(ISREG_LCD
, dev
->base_addr
+ SONIC_ISREG
);
379 printk("Loading CAM done, address pointers %04x:%04x\n",
380 inw(dev
->base_addr
+ SONIC_URRA
),
381 inw(dev
->base_addr
+ SONIC_CAMPTR
));
385 printk("\n-->CAM: PTR %04x CNT %04x\n",
386 inw(dev
->base_addr
+ SONIC_CAMPTR
),
387 inw(dev
->base_addr
+ SONIC_CAMCNT
));
388 outw(CMDREG_RST
, dev
->base_addr
+ SONIC_CMDREG
);
389 for (z
= 0; z
< camcnt
; z
++) {
390 outw(z
, dev
->base_addr
+ SONIC_CAMEPTR
);
391 printk("Entry %d: %04x %04x %04x\n", z
,
392 inw(dev
->base_addr
+ SONIC_CAMADDR0
),
393 inw(dev
->base_addr
+ SONIC_CAMADDR1
),
394 inw(dev
->base_addr
+ SONIC_CAMADDR2
));
396 outw(0, dev
->base_addr
+ SONIC_CMDREG
);
401 rcrval
= RCREG_BRD
| RCREG_LB_NONE
;
403 /* if still multicast addresses left or ALLMULTI is set, set the multicast
406 if ((dev
->flags
& IFF_ALLMULTI
) || netdev_mc_count(dev
) > camcnt
)
409 /* promiscous mode ? */
411 if (dev
->flags
& IFF_PROMISC
)
414 /* program receive mode */
416 outw(rcrval
, dev
->base_addr
+ SONIC_RCREG
);
418 printk("\nRCRVAL: %04x\n", rcrval
);
421 /* set up descriptors in shared memory + feed them into SONIC registers */
427 /* reset all pending interrupts */
429 outw(0xffff, dev
->base_addr
+ SONIC_ISREG
);
431 /* enable transmitter + receiver interrupts */
433 outw(CMDREG_RXEN
, dev
->base_addr
+ SONIC_CMDREG
);
434 outw(IMREG_PRXEN
| IMREG_RBEEN
| IMREG_PTXEN
| IMREG_TXEREN
, dev
->base_addr
+ SONIC_IMREG
);
436 /* turn on card interrupts */
438 outb(inb(dev
->base_addr
+ BCMREG
) | BCMREG_IEN
, dev
->base_addr
+ BCMREG
);
441 printk("Register dump after initialization:\n");
446 /* start transmission of a descriptor */
448 static void StartTx(struct net_device
*dev
, int descr
)
450 ibmlana_priv
*priv
= netdev_priv(dev
);
453 addr
= priv
->tdastart
+ (descr
* sizeof(tda_t
));
455 /* put descriptor address into SONIC */
457 outw(addr
, dev
->base_addr
+ SONIC_CTDA
);
459 /* trigger transmitter */
461 priv
->currtxdescr
= descr
;
462 outw(CMDREG_TXP
, dev
->base_addr
+ SONIC_CMDREG
);
465 /* ------------------------------------------------------------------------
466 * interrupt handler(s)
467 * ------------------------------------------------------------------------ */
469 /* receive buffer area exhausted */
471 static void irqrbe_handler(struct net_device
*dev
)
473 ibmlana_priv
*priv
= netdev_priv(dev
);
475 /* point the SONIC back to the RRA start */
477 outw(priv
->rrastart
, dev
->base_addr
+ SONIC_RRP
);
478 outw(priv
->rrastart
, dev
->base_addr
+ SONIC_RWP
);
481 /* receive interrupt */
483 static void irqrx_handler(struct net_device
*dev
)
485 ibmlana_priv
*priv
= netdev_priv(dev
);
487 u32 rdaaddr
, lrdaaddr
;
492 /* read descriptor that was next to be filled by SONIC */
494 rdaaddr
= priv
->rdastart
+ (priv
->nextrxdescr
* sizeof(rda_t
));
495 lrdaaddr
= priv
->rdastart
+ (priv
->lastrxdescr
* sizeof(rda_t
));
496 memcpy_fromio(&rda
, priv
->base
+ rdaaddr
, sizeof(rda_t
));
498 /* iron out upper word halves of fields we use - SONIC will duplicate
499 bits 0..15 to 16..31 */
501 rda
.status
&= 0xffff;
502 rda
.length
&= 0xffff;
503 rda
.startlo
&= 0xffff;
505 /* stop if the SONIC still owns it, i.e. there is no data for us */
512 else if (rda
.status
& RCREG_PRX
) {
517 skb
= dev_alloc_skb(rda
.length
+ 2);
519 dev
->stats
.rx_dropped
++;
523 memcpy_fromio(skb_put(skb
, rda
.length
),
525 rda
.startlo
, rda
.length
);
527 /* set up skb fields */
529 skb
->protocol
= eth_type_trans(skb
, dev
);
530 skb
->ip_summed
= CHECKSUM_NONE
;
533 dev
->stats
.rx_packets
++;
534 dev
->stats
.rx_bytes
+= rda
.length
;
536 /* pass to the upper layers */
541 /* otherwise check error status bits and increase statistics */
544 dev
->stats
.rx_errors
++;
545 if (rda
.status
& RCREG_FAER
)
546 dev
->stats
.rx_frame_errors
++;
547 if (rda
.status
& RCREG_CRCR
)
548 dev
->stats
.rx_crc_errors
++;
551 /* descriptor processed, will become new last descriptor in queue */
555 memcpy_toio(priv
->base
+ rdaaddr
, &rda
,
558 /* set up link and EOL = 0 in currently last descriptor. Only write
559 the link field since the SONIC may currently already access the
562 memcpy_toio(priv
->base
+ lrdaaddr
+ 20, &rdaaddr
, 4);
564 /* advance indices */
566 priv
->lastrxdescr
= priv
->nextrxdescr
;
567 if ((++priv
->nextrxdescr
) >= priv
->rxbufcnt
)
568 priv
->nextrxdescr
= 0;
572 /* transmit interrupt */
574 static void irqtx_handler(struct net_device
*dev
)
576 ibmlana_priv
*priv
= netdev_priv(dev
);
579 /* fetch descriptor (we forgot the size ;-) */
580 memcpy_fromio(&tda
, priv
->base
+ priv
->tdastart
+ (priv
->currtxdescr
* sizeof(tda_t
)), sizeof(tda_t
));
582 /* update statistics */
583 dev
->stats
.tx_packets
++;
584 dev
->stats
.tx_bytes
+= tda
.length
;
586 /* update our pointers */
587 priv
->txused
[priv
->currtxdescr
] = 0;
590 /* if there are more descriptors present in RAM, start them */
591 if (priv
->txusedcnt
> 0)
592 StartTx(dev
, (priv
->currtxdescr
+ 1) % TXBUFCNT
);
594 /* tell the upper layer we can go on transmitting */
595 netif_wake_queue(dev
);
598 static void irqtxerr_handler(struct net_device
*dev
)
600 ibmlana_priv
*priv
= netdev_priv(dev
);
603 /* fetch descriptor to check status */
604 memcpy_fromio(&tda
, priv
->base
+ priv
->tdastart
+ (priv
->currtxdescr
* sizeof(tda_t
)), sizeof(tda_t
));
606 /* update statistics */
607 dev
->stats
.tx_errors
++;
608 if (tda
.status
& (TCREG_NCRS
| TCREG_CRSL
))
609 dev
->stats
.tx_carrier_errors
++;
610 if (tda
.status
& TCREG_EXC
)
611 dev
->stats
.tx_aborted_errors
++;
612 if (tda
.status
& TCREG_OWC
)
613 dev
->stats
.tx_window_errors
++;
614 if (tda
.status
& TCREG_FU
)
615 dev
->stats
.tx_fifo_errors
++;
617 /* update our pointers */
618 priv
->txused
[priv
->currtxdescr
] = 0;
621 /* if there are more descriptors present in RAM, start them */
622 if (priv
->txusedcnt
> 0)
623 StartTx(dev
, (priv
->currtxdescr
+ 1) % TXBUFCNT
);
625 /* tell the upper layer we can go on transmitting */
626 netif_wake_queue(dev
);
629 /* general interrupt entry */
631 static irqreturn_t
irq_handler(int dummy
, void *device
)
633 struct net_device
*dev
= device
;
636 /* in case we're not meant... */
637 if (!(inb(dev
->base_addr
+ BCMREG
) & BCMREG_IPEND
))
640 /* loop through the interrupt bits until everything is clear */
642 ival
= inw(dev
->base_addr
+ SONIC_ISREG
);
644 if (ival
& ISREG_RBE
) {
646 outw(ISREG_RBE
, dev
->base_addr
+ SONIC_ISREG
);
648 if (ival
& ISREG_PKTRX
) {
650 outw(ISREG_PKTRX
, dev
->base_addr
+ SONIC_ISREG
);
652 if (ival
& ISREG_TXDN
) {
654 outw(ISREG_TXDN
, dev
->base_addr
+ SONIC_ISREG
);
656 if (ival
& ISREG_TXER
) {
657 irqtxerr_handler(dev
);
658 outw(ISREG_TXER
, dev
->base_addr
+ SONIC_ISREG
);
665 /* ------------------------------------------------------------------------
667 * ------------------------------------------------------------------------ */
672 /* open driver. Means also initialization and start of LANCE */
674 static int ibmlana_open(struct net_device
*dev
)
677 ibmlana_priv
*priv
= netdev_priv(dev
);
679 /* register resources - only necessary for IRQ */
681 result
= request_irq(priv
->realirq
, irq_handler
, IRQF_SHARED
| IRQF_SAMPLE_RANDOM
, dev
->name
, dev
);
683 printk(KERN_ERR
"%s: failed to register irq %d\n", dev
->name
, dev
->irq
);
686 dev
->irq
= priv
->realirq
;
688 /* set up the card and SONIC */
691 /* initialize operational flags */
692 netif_start_queue(dev
);
696 /* close driver. Shut down board and free allocated resources */
698 static int ibmlana_close(struct net_device
*dev
)
702 /* release resources */
704 free_irq(dev
->irq
, dev
);
709 /* transmit a block. */
711 static netdev_tx_t
ibmlana_tx(struct sk_buff
*skb
, struct net_device
*dev
)
713 ibmlana_priv
*priv
= netdev_priv(dev
);
719 /* find out if there are free slots for a frame to transmit. If not,
720 the upper layer is in deep desperation and we simply ignore the frame. */
722 if (priv
->txusedcnt
>= TXBUFCNT
) {
723 dev
->stats
.tx_dropped
++;
727 /* copy the frame data into the next free transmit buffer - fillup missing */
731 baddr
= priv
->txbufstart
+ (priv
->nexttxdescr
* PKTSIZE
);
732 memcpy_toio(priv
->base
+ baddr
, skb
->data
, skb
->len
);
734 /* copy filler into RAM - in case we're filling up...
735 we're filling a bit more than necessary, but that doesn't harm
736 since the buffer is far larger...
737 Sorry Linus for the filler string but I couldn't resist ;-) */
739 if (tmplen
> skb
->len
) {
740 char *fill
= "NetBSD is a nice OS too! ";
741 unsigned int destoffs
= skb
->len
, l
= strlen(fill
);
743 while (destoffs
< tmplen
) {
744 memcpy_toio(priv
->base
+ baddr
+ destoffs
, fill
, l
);
749 /* set up the new frame descriptor */
750 addr
= priv
->tdastart
+ (priv
->nexttxdescr
* sizeof(tda_t
));
751 memcpy_fromio(&tda
, priv
->base
+ addr
, sizeof(tda_t
));
752 tda
.length
= tda
.fraglength
= tmplen
;
753 memcpy_toio(priv
->base
+ addr
, &tda
, sizeof(tda_t
));
755 /* if there were no active descriptors, trigger the SONIC */
756 spin_lock_irqsave(&priv
->lock
, flags
);
759 priv
->txused
[priv
->nexttxdescr
] = 1;
761 /* are all transmission slots used up ? */
762 if (priv
->txusedcnt
>= TXBUFCNT
)
763 netif_stop_queue(dev
);
765 if (priv
->txusedcnt
== 1)
766 StartTx(dev
, priv
->nexttxdescr
);
767 priv
->nexttxdescr
= (priv
->nexttxdescr
+ 1) % TXBUFCNT
;
769 spin_unlock_irqrestore(&priv
->lock
, flags
);
775 /* switch receiver mode. */
777 static void ibmlana_set_multicast_list(struct net_device
*dev
)
779 /* first stop the SONIC... */
781 /* ...then reinit it with the new flags */
785 /* ------------------------------------------------------------------------
787 * ------------------------------------------------------------------------ */
789 static int ibmlana_irq
;
790 static int ibmlana_io
;
791 static int startslot
; /* counts through slots when probing multiple devices */
793 static short ibmlana_adapter_ids
[] __initdata
= {
798 static char *ibmlana_adapter_names
[] __devinitdata
= {
804 static const struct net_device_ops ibmlana_netdev_ops
= {
805 .ndo_open
= ibmlana_open
,
806 .ndo_stop
= ibmlana_close
,
807 .ndo_start_xmit
= ibmlana_tx
,
808 .ndo_set_multicast_list
= ibmlana_set_multicast_list
,
809 .ndo_change_mtu
= eth_change_mtu
,
810 .ndo_set_mac_address
= eth_mac_addr
,
811 .ndo_validate_addr
= eth_validate_addr
,
814 static int __devinit
ibmlana_init_one(struct device
*kdev
)
816 struct mca_device
*mdev
= to_mca_device(kdev
);
817 struct net_device
*dev
;
818 int slot
= mdev
->slot
, z
, rc
;
819 int base
= 0, irq
= 0, iobase
= 0, memlen
= 0;
821 ibmlana_medium medium
;
823 dev
= alloc_etherdev(sizeof(ibmlana_priv
));
827 dev
->irq
= ibmlana_irq
;
828 dev
->base_addr
= ibmlana_io
;
830 base
= dev
->mem_start
;
833 /* deduce card addresses */
834 getaddrs(mdev
, &base
, &memlen
, &iobase
, &irq
, &medium
);
836 /* were we looking for something different ? */
837 if (dev
->irq
&& dev
->irq
!= irq
) {
841 if (dev
->mem_start
&& dev
->mem_start
!= base
) {
846 /* announce success */
847 printk(KERN_INFO
"%s: IBM LAN Adapter/A found in slot %d\n", dev
->name
, slot
+ 1);
849 /* try to obtain I/O range */
850 if (!request_region(iobase
, IBM_LANA_IORANGE
, DRV_NAME
)) {
851 printk(KERN_ERR
"%s: cannot allocate I/O range at %#x!\n", DRV_NAME
, iobase
);
852 startslot
= slot
+ 1;
857 priv
= netdev_priv(dev
);
859 priv
->realirq
= mca_device_transform_irq(mdev
, irq
);
860 priv
->medium
= medium
;
861 spin_lock_init(&priv
->lock
);
863 /* set base + irq for this device (irq not allocated so far) */
866 dev
->mem_start
= base
;
867 dev
->mem_end
= base
+ memlen
;
868 dev
->base_addr
= iobase
;
870 priv
->base
= ioremap(base
, memlen
);
872 printk(KERN_ERR
"%s: cannot remap memory!\n", DRV_NAME
);
873 startslot
= slot
+ 1;
878 mca_device_set_name(mdev
, ibmlana_adapter_names
[mdev
->index
]);
879 mca_device_set_claim(mdev
, 1);
882 dev
->netdev_ops
= &ibmlana_netdev_ops
;
883 dev
->flags
|= IFF_MULTICAST
;
885 /* copy out MAC address */
887 for (z
= 0; z
< ETH_ALEN
; z
++)
888 dev
->dev_addr
[z
] = inb(dev
->base_addr
+ MACADDRPROM
+ z
);
892 printk(KERN_INFO
"%s: IRQ %d, I/O %#lx, memory %#lx-%#lx, "
893 "MAC address %pM.\n",
894 dev
->name
, priv
->realirq
, dev
->base_addr
,
895 dev
->mem_start
, dev
->mem_end
- 1,
897 printk(KERN_INFO
"%s: %s medium\n", dev
->name
, MediaNames
[priv
->medium
]);
903 /* next probe will start at next slot */
905 startslot
= slot
+ 1;
907 rc
= register_netdev(dev
);
909 goto err_out_claimed
;
911 dev_set_drvdata(kdev
, dev
);
915 mca_device_set_claim(mdev
, 0);
918 release_region(iobase
, IBM_LANA_IORANGE
);
924 static int ibmlana_remove_one(struct device
*kdev
)
926 struct mca_device
*mdev
= to_mca_device(kdev
);
927 struct net_device
*dev
= dev_get_drvdata(kdev
);
928 ibmlana_priv
*priv
= netdev_priv(dev
);
930 unregister_netdev(dev
);
931 /*DeinitBoard(dev); */
932 release_region(dev
->base_addr
, IBM_LANA_IORANGE
);
933 mca_device_set_claim(mdev
, 0);
939 /* ------------------------------------------------------------------------
940 * modularization support
941 * ------------------------------------------------------------------------ */
943 module_param_named(irq
, ibmlana_irq
, int, 0);
944 module_param_named(io
, ibmlana_io
, int, 0);
945 MODULE_PARM_DESC(irq
, "IBM LAN/A IRQ number");
946 MODULE_PARM_DESC(io
, "IBM LAN/A I/O base address");
947 MODULE_LICENSE("GPL");
949 static struct mca_driver ibmlana_driver
= {
950 .id_table
= ibmlana_adapter_ids
,
953 .bus
= &mca_bus_type
,
954 .probe
= ibmlana_init_one
,
955 .remove
= ibmlana_remove_one
,
959 static int __init
ibmlana_init_module(void)
961 return mca_register_driver(&ibmlana_driver
);
964 static void __exit
ibmlana_cleanup_module(void)
966 mca_unregister_driver(&ibmlana_driver
);
969 module_init(ibmlana_init_module
);
970 module_exit(ibmlana_cleanup_module
);