]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/net/tulip/xircom_cb.c
[NET]: Introduce and use print_mac() and DECLARE_MAC_BUF()
[karo-tx-linux.git] / drivers / net / tulip / xircom_cb.c
1 /*
2  * xircom_cb: A driver for the (tulip-like) Xircom Cardbus ethernet cards
3  *
4  * This software is (C) by the respective authors, and licensed under the GPL
5  * License.
6  *
7  * Written by Arjan van de Ven for Red Hat, Inc.
8  * Based on work by Jeff Garzik, Doug Ledford and Donald Becker
9  *
10  *      This software may be used and distributed according to the terms
11  *      of the GNU General Public License, incorporated herein by reference.
12  *
13  *
14  *      $Id: xircom_cb.c,v 1.33 2001/03/19 14:02:07 arjanv Exp $
15  */
16
17 #include <linux/module.h>
18 #include <linux/kernel.h>
19 #include <linux/string.h>
20 #include <linux/errno.h>
21 #include <linux/ioport.h>
22 #include <linux/slab.h>
23 #include <linux/interrupt.h>
24 #include <linux/pci.h>
25 #include <linux/netdevice.h>
26 #include <linux/etherdevice.h>
27 #include <linux/skbuff.h>
28 #include <linux/delay.h>
29 #include <linux/init.h>
30 #include <linux/ethtool.h>
31 #include <linux/bitops.h>
32
33 #include <asm/uaccess.h>
34 #include <asm/io.h>
35 #ifdef CONFIG_NET_POLL_CONTROLLER
36 #include <asm/irq.h>
37 #endif
38
39 #ifdef DEBUG
40 #define enter(x)   printk("Enter: %s, %s line %i\n",x,__FILE__,__LINE__)
41 #define leave(x)   printk("Leave: %s, %s line %i\n",x,__FILE__,__LINE__)
42 #else
43 #define enter(x)   do {} while (0)
44 #define leave(x)   do {} while (0)
45 #endif
46
47
48 MODULE_DESCRIPTION("Xircom Cardbus ethernet driver");
49 MODULE_AUTHOR("Arjan van de Ven <arjanv@redhat.com>");
50 MODULE_LICENSE("GPL");
51
52
53
54 /* IO registers on the card, offsets */
55 #define CSR0    0x00
56 #define CSR1    0x08
57 #define CSR2    0x10
58 #define CSR3    0x18
59 #define CSR4    0x20
60 #define CSR5    0x28
61 #define CSR6    0x30
62 #define CSR7    0x38
63 #define CSR8    0x40
64 #define CSR9    0x48
65 #define CSR10   0x50
66 #define CSR11   0x58
67 #define CSR12   0x60
68 #define CSR13   0x68
69 #define CSR14   0x70
70 #define CSR15   0x78
71 #define CSR16   0x80
72
73 /* PCI registers */
74 #define PCI_POWERMGMT   0x40
75
76 /* Offsets of the buffers within the descriptor pages, in bytes */
77
78 #define NUMDESCRIPTORS 4
79
80 static int bufferoffsets[NUMDESCRIPTORS] = {128,2048,4096,6144};
81
82
83 struct xircom_private {
84         /* Send and receive buffers, kernel-addressable and dma addressable forms */
85
86         unsigned int *rx_buffer;
87         unsigned int *tx_buffer;
88
89         dma_addr_t rx_dma_handle;
90         dma_addr_t tx_dma_handle;
91
92         struct sk_buff *tx_skb[4];
93
94         unsigned long io_port;
95         int open;
96
97         /* transmit_used is the rotating counter that indicates which transmit
98            descriptor has to be used next */
99         int transmit_used;
100
101         /* Spinlock to serialize register operations.
102            It must be helt while manipulating the following registers:
103            CSR0, CSR6, CSR7, CSR9, CSR10, CSR15
104          */
105         spinlock_t lock;
106
107
108         struct pci_dev *pdev;
109         struct net_device *dev;
110         struct net_device_stats stats;
111 };
112
113
114 /* Function prototypes */
115 static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id);
116 static void xircom_remove(struct pci_dev *pdev);
117 static irqreturn_t xircom_interrupt(int irq, void *dev_instance);
118 static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev);
119 static int xircom_open(struct net_device *dev);
120 static int xircom_close(struct net_device *dev);
121 static void xircom_up(struct xircom_private *card);
122 static struct net_device_stats *xircom_get_stats(struct net_device *dev);
123 #ifdef CONFIG_NET_POLL_CONTROLLER
124 static void xircom_poll_controller(struct net_device *dev);
125 #endif
126
127 static void investigate_read_descriptor(struct net_device *dev,struct xircom_private *card, int descnr, unsigned int bufferoffset);
128 static void investigate_write_descriptor(struct net_device *dev, struct xircom_private *card, int descnr, unsigned int bufferoffset);
129 static void read_mac_address(struct xircom_private *card);
130 static void transceiver_voodoo(struct xircom_private *card);
131 static void initialize_card(struct xircom_private *card);
132 static void trigger_transmit(struct xircom_private *card);
133 static void trigger_receive(struct xircom_private *card);
134 static void setup_descriptors(struct xircom_private *card);
135 static void remove_descriptors(struct xircom_private *card);
136 static int link_status_changed(struct xircom_private *card);
137 static void activate_receiver(struct xircom_private *card);
138 static void deactivate_receiver(struct xircom_private *card);
139 static void activate_transmitter(struct xircom_private *card);
140 static void deactivate_transmitter(struct xircom_private *card);
141 static void enable_transmit_interrupt(struct xircom_private *card);
142 static void enable_receive_interrupt(struct xircom_private *card);
143 static void enable_link_interrupt(struct xircom_private *card);
144 static void disable_all_interrupts(struct xircom_private *card);
145 static int link_status(struct xircom_private *card);
146
147
148
149 static struct pci_device_id xircom_pci_table[] = {
150         {0x115D, 0x0003, PCI_ANY_ID, PCI_ANY_ID,},
151         {0,},
152 };
153 MODULE_DEVICE_TABLE(pci, xircom_pci_table);
154
155 static struct pci_driver xircom_ops = {
156         .name           = "xircom_cb",
157         .id_table       = xircom_pci_table,
158         .probe          = xircom_probe,
159         .remove         = xircom_remove,
160         .suspend =NULL,
161         .resume =NULL
162 };
163
164
165 #ifdef DEBUG
166 static void print_binary(unsigned int number)
167 {
168         int i,i2;
169         char buffer[64];
170         memset(buffer,0,64);
171         i2=0;
172         for (i=31;i>=0;i--) {
173                 if (number & (1<<i))
174                         buffer[i2++]='1';
175                 else
176                         buffer[i2++]='0';
177                 if ((i&3)==0)
178                         buffer[i2++]=' ';
179         }
180         printk("%s\n",buffer);
181 }
182 #endif
183
184 static void netdev_get_drvinfo(struct net_device *dev,
185                                struct ethtool_drvinfo *info)
186 {
187         struct xircom_private *private = netdev_priv(dev);
188
189         strcpy(info->driver, "xircom_cb");
190         strcpy(info->bus_info, pci_name(private->pdev));
191 }
192
193 static const struct ethtool_ops netdev_ethtool_ops = {
194         .get_drvinfo            = netdev_get_drvinfo,
195 };
196
197 /* xircom_probe is the code that gets called on device insertion.
198    it sets up the hardware and registers the device to the networklayer.
199
200    TODO: Send 1 or 2 "dummy" packets here as the card seems to discard the
201          first two packets that get send, and pump hates that.
202
203  */
204 static int __devinit xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id)
205 {
206         struct net_device *dev = NULL;
207         struct xircom_private *private;
208         unsigned long flags;
209         unsigned short tmp16;
210         enter("xircom_probe");
211
212         /* First do the PCI initialisation */
213
214         if (pci_enable_device(pdev))
215                 return -ENODEV;
216
217         /* disable all powermanagement */
218         pci_write_config_dword(pdev, PCI_POWERMGMT, 0x0000);
219
220         pci_set_master(pdev); /* Why isn't this done by pci_enable_device ?*/
221
222         /* clear PCI status, if any */
223         pci_read_config_word (pdev,PCI_STATUS, &tmp16);
224         pci_write_config_word (pdev, PCI_STATUS,tmp16);
225
226         if (!request_region(pci_resource_start(pdev, 0), 128, "xircom_cb")) {
227                 printk(KERN_ERR "xircom_probe: failed to allocate io-region\n");
228                 return -ENODEV;
229         }
230
231         /*
232            Before changing the hardware, allocate the memory.
233            This way, we can fail gracefully if not enough memory
234            is available.
235          */
236         dev = alloc_etherdev(sizeof(struct xircom_private));
237         if (!dev) {
238                 printk(KERN_ERR "xircom_probe: failed to allocate etherdev\n");
239                 goto device_fail;
240         }
241         private = netdev_priv(dev);
242
243         /* Allocate the send/receive buffers */
244         private->rx_buffer = pci_alloc_consistent(pdev,8192,&private->rx_dma_handle);
245         if (private->rx_buffer == NULL) {
246                 printk(KERN_ERR "xircom_probe: no memory for rx buffer \n");
247                 goto rx_buf_fail;
248         }
249         private->tx_buffer = pci_alloc_consistent(pdev,8192,&private->tx_dma_handle);
250         if (private->tx_buffer == NULL) {
251                 printk(KERN_ERR "xircom_probe: no memory for tx buffer \n");
252                 goto tx_buf_fail;
253         }
254
255         SET_NETDEV_DEV(dev, &pdev->dev);
256
257
258         private->dev = dev;
259         private->pdev = pdev;
260         private->io_port = pci_resource_start(pdev, 0);
261         spin_lock_init(&private->lock);
262         dev->irq = pdev->irq;
263         dev->base_addr = private->io_port;
264
265         initialize_card(private);
266         read_mac_address(private);
267         setup_descriptors(private);
268
269         dev->open = &xircom_open;
270         dev->hard_start_xmit = &xircom_start_xmit;
271         dev->stop = &xircom_close;
272         dev->get_stats = &xircom_get_stats;
273 #ifdef CONFIG_NET_POLL_CONTROLLER
274         dev->poll_controller = &xircom_poll_controller;
275 #endif
276         SET_ETHTOOL_OPS(dev, &netdev_ethtool_ops);
277         pci_set_drvdata(pdev, dev);
278
279         if (register_netdev(dev)) {
280                 printk(KERN_ERR "xircom_probe: netdevice registration failed.\n");
281                 goto reg_fail;
282         }
283
284         printk(KERN_INFO "%s: Xircom cardbus revision %i at irq %i \n", dev->name, pdev->revision, pdev->irq);
285         /* start the transmitter to get a heartbeat */
286         /* TODO: send 2 dummy packets here */
287         transceiver_voodoo(private);
288
289         spin_lock_irqsave(&private->lock,flags);
290         activate_transmitter(private);
291         activate_receiver(private);
292         spin_unlock_irqrestore(&private->lock,flags);
293
294         trigger_receive(private);
295
296         leave("xircom_probe");
297         return 0;
298
299 reg_fail:
300         kfree(private->tx_buffer);
301 tx_buf_fail:
302         kfree(private->rx_buffer);
303 rx_buf_fail:
304         free_netdev(dev);
305 device_fail:
306         return -ENODEV;
307 }
308
309
310 /*
311  xircom_remove is called on module-unload or on device-eject.
312  it unregisters the irq, io-region and network device.
313  Interrupts and such are already stopped in the "ifconfig ethX down"
314  code.
315  */
316 static void __devexit xircom_remove(struct pci_dev *pdev)
317 {
318         struct net_device *dev = pci_get_drvdata(pdev);
319         struct xircom_private *card = netdev_priv(dev);
320
321         enter("xircom_remove");
322         pci_free_consistent(pdev,8192,card->rx_buffer,card->rx_dma_handle);
323         pci_free_consistent(pdev,8192,card->tx_buffer,card->tx_dma_handle);
324
325         release_region(dev->base_addr, 128);
326         unregister_netdev(dev);
327         free_netdev(dev);
328         pci_set_drvdata(pdev, NULL);
329         leave("xircom_remove");
330 }
331
332 static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
333 {
334         struct net_device *dev = (struct net_device *) dev_instance;
335         struct xircom_private *card = netdev_priv(dev);
336         unsigned int status;
337         int i;
338
339         enter("xircom_interrupt\n");
340
341         spin_lock(&card->lock);
342         status = inl(card->io_port+CSR5);
343
344 #ifdef DEBUG
345         print_binary(status);
346         printk("tx status 0x%08x 0x%08x \n",card->tx_buffer[0],card->tx_buffer[4]);
347         printk("rx status 0x%08x 0x%08x \n",card->rx_buffer[0],card->rx_buffer[4]);
348 #endif
349         /* Handle shared irq and hotplug */
350         if (status == 0 || status == 0xffffffff) {
351                 spin_unlock(&card->lock);
352                 return IRQ_NONE;
353         }
354
355         if (link_status_changed(card)) {
356                 int newlink;
357                 printk(KERN_DEBUG "xircom_cb: Link status has changed \n");
358                 newlink = link_status(card);
359                 printk(KERN_INFO  "xircom_cb: Link is %i mbit \n",newlink);
360                 if (newlink)
361                         netif_carrier_on(dev);
362                 else
363                         netif_carrier_off(dev);
364
365         }
366
367         /* Clear all remaining interrupts */
368         status |= 0xffffffff; /* FIXME: make this clear only the
369                                         real existing bits */
370         outl(status,card->io_port+CSR5);
371
372
373         for (i=0;i<NUMDESCRIPTORS;i++)
374                 investigate_write_descriptor(dev,card,i,bufferoffsets[i]);
375         for (i=0;i<NUMDESCRIPTORS;i++)
376                 investigate_read_descriptor(dev,card,i,bufferoffsets[i]);
377
378
379         spin_unlock(&card->lock);
380         leave("xircom_interrupt");
381         return IRQ_HANDLED;
382 }
383
384 static int xircom_start_xmit(struct sk_buff *skb, struct net_device *dev)
385 {
386         struct xircom_private *card;
387         unsigned long flags;
388         int nextdescriptor;
389         int desc;
390         enter("xircom_start_xmit");
391
392         card = netdev_priv(dev);
393         spin_lock_irqsave(&card->lock,flags);
394
395         /* First see if we can free some descriptors */
396         for (desc=0;desc<NUMDESCRIPTORS;desc++)
397                 investigate_write_descriptor(dev,card,desc,bufferoffsets[desc]);
398
399
400         nextdescriptor = (card->transmit_used +1) % (NUMDESCRIPTORS);
401         desc = card->transmit_used;
402
403         /* only send the packet if the descriptor is free */
404         if (card->tx_buffer[4*desc]==0) {
405                         /* Copy the packet data; zero the memory first as the card
406                            sometimes sends more than you ask it to. */
407
408                         memset(&card->tx_buffer[bufferoffsets[desc]/4],0,1536);
409                         skb_copy_from_linear_data(skb,
410                                   &(card->tx_buffer[bufferoffsets[desc] / 4]),
411                                                   skb->len);
412                         /* FIXME: The specification tells us that the length we send HAS to be a multiple of
413                            4 bytes. */
414
415                         card->tx_buffer[4*desc+1] = skb->len;
416                         if (desc == NUMDESCRIPTORS-1)
417                                 card->tx_buffer[4*desc+1] |= (1<<25);  /* bit 25: last descriptor of the ring */
418
419                         card->tx_buffer[4*desc+1] |= 0xF0000000;
420                                                  /* 0xF0... means want interrupts*/
421                         card->tx_skb[desc] = skb;
422
423                         wmb();
424                         /* This gives the descriptor to the card */
425                         card->tx_buffer[4*desc] = 0x80000000;
426                         trigger_transmit(card);
427                         if (((int)card->tx_buffer[nextdescriptor*4])<0) {       /* next descriptor is occupied... */
428                                 netif_stop_queue(dev);
429                         }
430                         card->transmit_used = nextdescriptor;
431                         leave("xircom-start_xmit - sent");
432                         spin_unlock_irqrestore(&card->lock,flags);
433                         return 0;
434         }
435
436
437
438         /* Uh oh... no free descriptor... drop the packet */
439         netif_stop_queue(dev);
440         spin_unlock_irqrestore(&card->lock,flags);
441         trigger_transmit(card);
442
443         return -EIO;
444 }
445
446
447
448
449 static int xircom_open(struct net_device *dev)
450 {
451         struct xircom_private *xp = netdev_priv(dev);
452         int retval;
453         enter("xircom_open");
454         printk(KERN_INFO "xircom cardbus adaptor found, registering as %s, using irq %i \n",dev->name,dev->irq);
455         retval = request_irq(dev->irq, &xircom_interrupt, IRQF_SHARED, dev->name, dev);
456         if (retval) {
457                 leave("xircom_open - No IRQ");
458                 return retval;
459         }
460
461         xircom_up(xp);
462         xp->open = 1;
463         leave("xircom_open");
464         return 0;
465 }
466
467 static int xircom_close(struct net_device *dev)
468 {
469         struct xircom_private *card;
470         unsigned long flags;
471
472         enter("xircom_close");
473         card = netdev_priv(dev);
474         netif_stop_queue(dev); /* we don't want new packets */
475
476
477         spin_lock_irqsave(&card->lock,flags);
478
479         disable_all_interrupts(card);
480 #if 0
481         /* We can enable this again once we send dummy packets on ifconfig ethX up */
482         deactivate_receiver(card);
483         deactivate_transmitter(card);
484 #endif
485         remove_descriptors(card);
486
487         spin_unlock_irqrestore(&card->lock,flags);
488
489         card->open = 0;
490         free_irq(dev->irq,dev);
491
492         leave("xircom_close");
493
494         return 0;
495
496 }
497
498
499
500 static struct net_device_stats *xircom_get_stats(struct net_device *dev)
501 {
502         struct xircom_private *card = netdev_priv(dev);
503         return &card->stats;
504 }
505
506
507 #ifdef CONFIG_NET_POLL_CONTROLLER
508 static void xircom_poll_controller(struct net_device *dev)
509 {
510         disable_irq(dev->irq);
511         xircom_interrupt(dev->irq, dev);
512         enable_irq(dev->irq);
513 }
514 #endif
515
516
517 static void initialize_card(struct xircom_private *card)
518 {
519         unsigned int val;
520         unsigned long flags;
521         enter("initialize_card");
522
523
524         spin_lock_irqsave(&card->lock, flags);
525
526         /* First: reset the card */
527         val = inl(card->io_port + CSR0);
528         val |= 0x01;            /* Software reset */
529         outl(val, card->io_port + CSR0);
530
531         udelay(100);            /* give the card some time to reset */
532
533         val = inl(card->io_port + CSR0);
534         val &= ~0x01;           /* disable Software reset */
535         outl(val, card->io_port + CSR0);
536
537
538         val = 0;                /* Value 0x00 is a safe and conservative value
539                                    for the PCI configuration settings */
540         outl(val, card->io_port + CSR0);
541
542
543         disable_all_interrupts(card);
544         deactivate_receiver(card);
545         deactivate_transmitter(card);
546
547         spin_unlock_irqrestore(&card->lock, flags);
548
549         leave("initialize_card");
550 }
551
552 /*
553 trigger_transmit causes the card to check for frames to be transmitted.
554 This is accomplished by writing to the CSR1 port. The documentation
555 claims that the act of writing is sufficient and that the value is
556 ignored; I chose zero.
557 */
558 static void trigger_transmit(struct xircom_private *card)
559 {
560         unsigned int val;
561         enter("trigger_transmit");
562
563         val = 0;
564         outl(val, card->io_port + CSR1);
565
566         leave("trigger_transmit");
567 }
568
569 /*
570 trigger_receive causes the card to check for empty frames in the
571 descriptor list in which packets can be received.
572 This is accomplished by writing to the CSR2 port. The documentation
573 claims that the act of writing is sufficient and that the value is
574 ignored; I chose zero.
575 */
576 static void trigger_receive(struct xircom_private *card)
577 {
578         unsigned int val;
579         enter("trigger_receive");
580
581         val = 0;
582         outl(val, card->io_port + CSR2);
583
584         leave("trigger_receive");
585 }
586
587 /*
588 setup_descriptors initializes the send and receive buffers to be valid
589 descriptors and programs the addresses into the card.
590 */
591 static void setup_descriptors(struct xircom_private *card)
592 {
593         unsigned int val;
594         unsigned int address;
595         int i;
596         enter("setup_descriptors");
597
598
599         BUG_ON(card->rx_buffer == NULL);
600         BUG_ON(card->tx_buffer == NULL);
601
602         /* Receive descriptors */
603         memset(card->rx_buffer, 0, 128);        /* clear the descriptors */
604         for (i=0;i<NUMDESCRIPTORS;i++ ) {
605
606                 /* Rx Descr0: It's empty, let the card own it, no errors -> 0x80000000 */
607                 card->rx_buffer[i*4 + 0] = 0x80000000;
608                 /* Rx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
609                 card->rx_buffer[i*4 + 1] = 1536;
610                 if (i==NUMDESCRIPTORS-1)
611                         card->rx_buffer[i*4 + 1] |= (1 << 25); /* bit 25 is "last descriptor" */
612
613                 /* Rx Descr2: address of the buffer
614                    we store the buffer at the 2nd half of the page */
615
616                 address = (unsigned long) card->rx_dma_handle;
617                 card->rx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
618                 /* Rx Desc3: address of 2nd buffer -> 0 */
619                 card->rx_buffer[i*4 + 3] = 0;
620         }
621
622         wmb();
623         /* Write the receive descriptor ring address to the card */
624         address = (unsigned long) card->rx_dma_handle;
625         val = cpu_to_le32(address);
626         outl(val, card->io_port + CSR3);        /* Receive descr list address */
627
628
629         /* transmit descriptors */
630         memset(card->tx_buffer, 0, 128);        /* clear the descriptors */
631
632         for (i=0;i<NUMDESCRIPTORS;i++ ) {
633                 /* Tx Descr0: Empty, we own it, no errors -> 0x00000000 */
634                 card->tx_buffer[i*4 + 0] = 0x00000000;
635                 /* Tx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
636                 card->tx_buffer[i*4 + 1] = 1536;
637                 if (i==NUMDESCRIPTORS-1)
638                         card->tx_buffer[i*4 + 1] |= (1 << 25); /* bit 25 is "last descriptor" */
639
640                 /* Tx Descr2: address of the buffer
641                    we store the buffer at the 2nd half of the page */
642                 address = (unsigned long) card->tx_dma_handle;
643                 card->tx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
644                 /* Tx Desc3: address of 2nd buffer -> 0 */
645                 card->tx_buffer[i*4 + 3] = 0;
646         }
647
648         wmb();
649         /* wite the transmit descriptor ring to the card */
650         address = (unsigned long) card->tx_dma_handle;
651         val =cpu_to_le32(address);
652         outl(val, card->io_port + CSR4);        /* xmit descr list address */
653
654         leave("setup_descriptors");
655 }
656
657 /*
658 remove_descriptors informs the card the descriptors are no longer
659 valid by setting the address in the card to 0x00.
660 */
661 static void remove_descriptors(struct xircom_private *card)
662 {
663         unsigned int val;
664         enter("remove_descriptors");
665
666         val = 0;
667         outl(val, card->io_port + CSR3);        /* Receive descriptor address */
668         outl(val, card->io_port + CSR4);        /* Send descriptor address */
669
670         leave("remove_descriptors");
671 }
672
673 /*
674 link_status_changed returns 1 if the card has indicated that
675 the link status has changed. The new link status has to be read from CSR12.
676
677 This function also clears the status-bit.
678 */
679 static int link_status_changed(struct xircom_private *card)
680 {
681         unsigned int val;
682         enter("link_status_changed");
683
684         val = inl(card->io_port + CSR5);        /* Status register */
685
686         if ((val & (1 << 27)) == 0) {   /* no change */
687                 leave("link_status_changed - nochange");
688                 return 0;
689         }
690
691         /* clear the event by writing a 1 to the bit in the
692            status register. */
693         val = (1 << 27);
694         outl(val, card->io_port + CSR5);
695
696         leave("link_status_changed - changed");
697         return 1;
698 }
699
700
701 /*
702 transmit_active returns 1 if the transmitter on the card is
703 in a non-stopped state.
704 */
705 static int transmit_active(struct xircom_private *card)
706 {
707         unsigned int val;
708         enter("transmit_active");
709
710         val = inl(card->io_port + CSR5);        /* Status register */
711
712         if ((val & (7 << 20)) == 0) {   /* transmitter disabled */
713                 leave("transmit_active - inactive");
714                 return 0;
715         }
716
717         leave("transmit_active - active");
718         return 1;
719 }
720
721 /*
722 receive_active returns 1 if the receiver on the card is
723 in a non-stopped state.
724 */
725 static int receive_active(struct xircom_private *card)
726 {
727         unsigned int val;
728         enter("receive_active");
729
730
731         val = inl(card->io_port + CSR5);        /* Status register */
732
733         if ((val & (7 << 17)) == 0) {   /* receiver disabled */
734                 leave("receive_active - inactive");
735                 return 0;
736         }
737
738         leave("receive_active - active");
739         return 1;
740 }
741
742 /*
743 activate_receiver enables the receiver on the card.
744 Before being allowed to active the receiver, the receiver
745 must be completely de-activated. To achieve this,
746 this code actually disables the receiver first; then it waits for the
747 receiver to become inactive, then it activates the receiver and then
748 it waits for the receiver to be active.
749
750 must be called with the lock held and interrupts disabled.
751 */
752 static void activate_receiver(struct xircom_private *card)
753 {
754         unsigned int val;
755         int counter;
756         enter("activate_receiver");
757
758
759         val = inl(card->io_port + CSR6);        /* Operation mode */
760
761         /* If the "active" bit is set and the receiver is already
762            active, no need to do the expensive thing */
763         if ((val&2) && (receive_active(card)))
764                 return;
765
766
767         val = val & ~2;         /* disable the receiver */
768         outl(val, card->io_port + CSR6);
769
770         counter = 10;
771         while (counter > 0) {
772                 if (!receive_active(card))
773                         break;
774                 /* wait a while */
775                 udelay(50);
776                 counter--;
777                 if (counter <= 0)
778                         printk(KERN_ERR "xircom_cb: Receiver failed to deactivate\n");
779         }
780
781         /* enable the receiver */
782         val = inl(card->io_port + CSR6);        /* Operation mode */
783         val = val | 2;                          /* enable the receiver */
784         outl(val, card->io_port + CSR6);
785
786         /* now wait for the card to activate again */
787         counter = 10;
788         while (counter > 0) {
789                 if (receive_active(card))
790                         break;
791                 /* wait a while */
792                 udelay(50);
793                 counter--;
794                 if (counter <= 0)
795                         printk(KERN_ERR "xircom_cb: Receiver failed to re-activate\n");
796         }
797
798         leave("activate_receiver");
799 }
800
801 /*
802 deactivate_receiver disables the receiver on the card.
803 To achieve this this code disables the receiver first;
804 then it waits for the receiver to become inactive.
805
806 must be called with the lock held and interrupts disabled.
807 */
808 static void deactivate_receiver(struct xircom_private *card)
809 {
810         unsigned int val;
811         int counter;
812         enter("deactivate_receiver");
813
814         val = inl(card->io_port + CSR6);        /* Operation mode */
815         val = val & ~2;                         /* disable the receiver */
816         outl(val, card->io_port + CSR6);
817
818         counter = 10;
819         while (counter > 0) {
820                 if (!receive_active(card))
821                         break;
822                 /* wait a while */
823                 udelay(50);
824                 counter--;
825                 if (counter <= 0)
826                         printk(KERN_ERR "xircom_cb: Receiver failed to deactivate\n");
827         }
828
829
830         leave("deactivate_receiver");
831 }
832
833
834 /*
835 activate_transmitter enables the transmitter on the card.
836 Before being allowed to active the transmitter, the transmitter
837 must be completely de-activated. To achieve this,
838 this code actually disables the transmitter first; then it waits for the
839 transmitter to become inactive, then it activates the transmitter and then
840 it waits for the transmitter to be active again.
841
842 must be called with the lock held and interrupts disabled.
843 */
844 static void activate_transmitter(struct xircom_private *card)
845 {
846         unsigned int val;
847         int counter;
848         enter("activate_transmitter");
849
850
851         val = inl(card->io_port + CSR6);        /* Operation mode */
852
853         /* If the "active" bit is set and the receiver is already
854            active, no need to do the expensive thing */
855         if ((val&(1<<13)) && (transmit_active(card)))
856                 return;
857
858         val = val & ~(1 << 13); /* disable the transmitter */
859         outl(val, card->io_port + CSR6);
860
861         counter = 10;
862         while (counter > 0) {
863                 if (!transmit_active(card))
864                         break;
865                 /* wait a while */
866                 udelay(50);
867                 counter--;
868                 if (counter <= 0)
869                         printk(KERN_ERR "xircom_cb: Transmitter failed to deactivate\n");
870         }
871
872         /* enable the transmitter */
873         val = inl(card->io_port + CSR6);        /* Operation mode */
874         val = val | (1 << 13);  /* enable the transmitter */
875         outl(val, card->io_port + CSR6);
876
877         /* now wait for the card to activate again */
878         counter = 10;
879         while (counter > 0) {
880                 if (transmit_active(card))
881                         break;
882                 /* wait a while */
883                 udelay(50);
884                 counter--;
885                 if (counter <= 0)
886                         printk(KERN_ERR "xircom_cb: Transmitter failed to re-activate\n");
887         }
888
889         leave("activate_transmitter");
890 }
891
892 /*
893 deactivate_transmitter disables the transmitter on the card.
894 To achieve this this code disables the transmitter first;
895 then it waits for the transmitter to become inactive.
896
897 must be called with the lock held and interrupts disabled.
898 */
899 static void deactivate_transmitter(struct xircom_private *card)
900 {
901         unsigned int val;
902         int counter;
903         enter("deactivate_transmitter");
904
905         val = inl(card->io_port + CSR6);        /* Operation mode */
906         val = val & ~2;         /* disable the transmitter */
907         outl(val, card->io_port + CSR6);
908
909         counter = 20;
910         while (counter > 0) {
911                 if (!transmit_active(card))
912                         break;
913                 /* wait a while */
914                 udelay(50);
915                 counter--;
916                 if (counter <= 0)
917                         printk(KERN_ERR "xircom_cb: Transmitter failed to deactivate\n");
918         }
919
920
921         leave("deactivate_transmitter");
922 }
923
924
925 /*
926 enable_transmit_interrupt enables the transmit interrupt
927
928 must be called with the lock held and interrupts disabled.
929 */
930 static void enable_transmit_interrupt(struct xircom_private *card)
931 {
932         unsigned int val;
933         enter("enable_transmit_interrupt");
934
935         val = inl(card->io_port + CSR7);        /* Interrupt enable register */
936         val |= 1;                               /* enable the transmit interrupt */
937         outl(val, card->io_port + CSR7);
938
939         leave("enable_transmit_interrupt");
940 }
941
942
943 /*
944 enable_receive_interrupt enables the receive interrupt
945
946 must be called with the lock held and interrupts disabled.
947 */
948 static void enable_receive_interrupt(struct xircom_private *card)
949 {
950         unsigned int val;
951         enter("enable_receive_interrupt");
952
953         val = inl(card->io_port + CSR7);        /* Interrupt enable register */
954         val = val | (1 << 6);                   /* enable the receive interrupt */
955         outl(val, card->io_port + CSR7);
956
957         leave("enable_receive_interrupt");
958 }
959
960 /*
961 enable_link_interrupt enables the link status change interrupt
962
963 must be called with the lock held and interrupts disabled.
964 */
965 static void enable_link_interrupt(struct xircom_private *card)
966 {
967         unsigned int val;
968         enter("enable_link_interrupt");
969
970         val = inl(card->io_port + CSR7);        /* Interrupt enable register */
971         val = val | (1 << 27);                  /* enable the link status chage interrupt */
972         outl(val, card->io_port + CSR7);
973
974         leave("enable_link_interrupt");
975 }
976
977
978
979 /*
980 disable_all_interrupts disables all interrupts
981
982 must be called with the lock held and interrupts disabled.
983 */
984 static void disable_all_interrupts(struct xircom_private *card)
985 {
986         unsigned int val;
987         enter("enable_all_interrupts");
988
989         val = 0;                                /* disable all interrupts */
990         outl(val, card->io_port + CSR7);
991
992         leave("disable_all_interrupts");
993 }
994
995 /*
996 enable_common_interrupts enables several weird interrupts
997
998 must be called with the lock held and interrupts disabled.
999 */
1000 static void enable_common_interrupts(struct xircom_private *card)
1001 {
1002         unsigned int val;
1003         enter("enable_link_interrupt");
1004
1005         val = inl(card->io_port + CSR7);        /* Interrupt enable register */
1006         val |= (1<<16); /* Normal Interrupt Summary */
1007         val |= (1<<15); /* Abnormal Interrupt Summary */
1008         val |= (1<<13); /* Fatal bus error */
1009         val |= (1<<8);  /* Receive Process Stopped */
1010         val |= (1<<7);  /* Receive Buffer Unavailable */
1011         val |= (1<<5);  /* Transmit Underflow */
1012         val |= (1<<2);  /* Transmit Buffer Unavailable */
1013         val |= (1<<1);  /* Transmit Process Stopped */
1014         outl(val, card->io_port + CSR7);
1015
1016         leave("enable_link_interrupt");
1017 }
1018
1019 /*
1020 enable_promisc starts promisc mode
1021
1022 must be called with the lock held and interrupts disabled.
1023 */
1024 static int enable_promisc(struct xircom_private *card)
1025 {
1026         unsigned int val;
1027         enter("enable_promisc");
1028
1029         val = inl(card->io_port + CSR6);
1030         val = val | (1 << 6);
1031         outl(val, card->io_port + CSR6);
1032
1033         leave("enable_promisc");
1034         return 1;
1035 }
1036
1037
1038
1039
1040 /*
1041 link_status() checks the links status and will return 0 for no link, 10 for 10mbit link and 100 for.. guess what.
1042
1043 Must be called in locked state with interrupts disabled
1044 */
1045 static int link_status(struct xircom_private *card)
1046 {
1047         unsigned int val;
1048         enter("link_status");
1049
1050         val = inb(card->io_port + CSR12);
1051
1052         if (!(val&(1<<2)))  /* bit 2 is 0 for 10mbit link, 1 for not an 10mbit link */
1053                 return 10;
1054         if (!(val&(1<<1)))  /* bit 1 is 0 for 100mbit link, 1 for not an 100mbit link */
1055                 return 100;
1056
1057         /* If we get here -> no link at all */
1058
1059         leave("link_status");
1060         return 0;
1061 }
1062
1063
1064
1065
1066
1067 /*
1068   read_mac_address() reads the MAC address from the NIC and stores it in the "dev" structure.
1069
1070   This function will take the spinlock itself and can, as a result, not be called with the lock helt.
1071  */
1072 static void read_mac_address(struct xircom_private *card)
1073 {
1074         unsigned char j, tuple, link, data_id, data_count;
1075         unsigned long flags;
1076         int i;
1077         DECLARE_MAC_BUF(mac);
1078
1079         enter("read_mac_address");
1080
1081         spin_lock_irqsave(&card->lock, flags);
1082
1083         outl(1 << 12, card->io_port + CSR9);    /* enable boot rom access */
1084         for (i = 0x100; i < 0x1f7; i += link + 2) {
1085                 outl(i, card->io_port + CSR10);
1086                 tuple = inl(card->io_port + CSR9) & 0xff;
1087                 outl(i + 1, card->io_port + CSR10);
1088                 link = inl(card->io_port + CSR9) & 0xff;
1089                 outl(i + 2, card->io_port + CSR10);
1090                 data_id = inl(card->io_port + CSR9) & 0xff;
1091                 outl(i + 3, card->io_port + CSR10);
1092                 data_count = inl(card->io_port + CSR9) & 0xff;
1093                 if ((tuple == 0x22) && (data_id == 0x04) && (data_count == 0x06)) {
1094                         /*
1095                          * This is it.  We have the data we want.
1096                          */
1097                         for (j = 0; j < 6; j++) {
1098                                 outl(i + j + 4, card->io_port + CSR10);
1099                                 card->dev->dev_addr[j] = inl(card->io_port + CSR9) & 0xff;
1100                         }
1101                         break;
1102                 } else if (link == 0) {
1103                         break;
1104                 }
1105         }
1106         spin_unlock_irqrestore(&card->lock, flags);
1107         pr_debug(" %s\n", print_mac(mac, card->dev->dev_addr));
1108         leave("read_mac_address");
1109 }
1110
1111
1112 /*
1113  transceiver_voodoo() enables the external UTP plug thingy.
1114  it's called voodoo as I stole this code and cannot cross-reference
1115  it with the specification.
1116  */
1117 static void transceiver_voodoo(struct xircom_private *card)
1118 {
1119         unsigned long flags;
1120
1121         enter("transceiver_voodoo");
1122
1123         /* disable all powermanagement */
1124         pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1125
1126         setup_descriptors(card);
1127
1128         spin_lock_irqsave(&card->lock, flags);
1129
1130         outl(0x0008, card->io_port + CSR15);
1131         udelay(25);
1132         outl(0xa8050000, card->io_port + CSR15);
1133         udelay(25);
1134         outl(0xa00f0000, card->io_port + CSR15);
1135         udelay(25);
1136
1137         spin_unlock_irqrestore(&card->lock, flags);
1138
1139         netif_start_queue(card->dev);
1140         leave("transceiver_voodoo");
1141 }
1142
1143
1144 static void xircom_up(struct xircom_private *card)
1145 {
1146         unsigned long flags;
1147         int i;
1148
1149         enter("xircom_up");
1150
1151         /* disable all powermanagement */
1152         pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1153
1154         setup_descriptors(card);
1155
1156         spin_lock_irqsave(&card->lock, flags);
1157
1158
1159         enable_link_interrupt(card);
1160         enable_transmit_interrupt(card);
1161         enable_receive_interrupt(card);
1162         enable_common_interrupts(card);
1163         enable_promisc(card);
1164
1165         /* The card can have received packets already, read them away now */
1166         for (i=0;i<NUMDESCRIPTORS;i++)
1167                 investigate_read_descriptor(card->dev,card,i,bufferoffsets[i]);
1168
1169
1170         spin_unlock_irqrestore(&card->lock, flags);
1171         trigger_receive(card);
1172         trigger_transmit(card);
1173         netif_start_queue(card->dev);
1174         leave("xircom_up");
1175 }
1176
1177 /* Bufferoffset is in BYTES */
1178 static void investigate_read_descriptor(struct net_device *dev,struct xircom_private *card, int descnr, unsigned int bufferoffset)
1179 {
1180                 int status;
1181
1182                 enter("investigate_read_descriptor");
1183                 status = card->rx_buffer[4*descnr];
1184
1185                 if ((status > 0)) {     /* packet received */
1186
1187                         /* TODO: discard error packets */
1188
1189                         short pkt_len = ((status >> 16) & 0x7ff) - 4;   /* minus 4, we don't want the CRC */
1190                         struct sk_buff *skb;
1191
1192                         if (pkt_len > 1518) {
1193                                 printk(KERN_ERR "xircom_cb: Packet length %i is bogus \n",pkt_len);
1194                                 pkt_len = 1518;
1195                         }
1196
1197                         skb = dev_alloc_skb(pkt_len + 2);
1198                         if (skb == NULL) {
1199                                 card->stats.rx_dropped++;
1200                                 goto out;
1201                         }
1202                         skb_reserve(skb, 2);
1203                         skb_copy_to_linear_data(skb, (unsigned char*)&card->rx_buffer[bufferoffset / 4], pkt_len);
1204                         skb_put(skb, pkt_len);
1205                         skb->protocol = eth_type_trans(skb, dev);
1206                         netif_rx(skb);
1207                         dev->last_rx = jiffies;
1208                         card->stats.rx_packets++;
1209                         card->stats.rx_bytes += pkt_len;
1210
1211                       out:
1212                         /* give the buffer back to the card */
1213                         card->rx_buffer[4*descnr] =  0x80000000;
1214                         trigger_receive(card);
1215                 }
1216
1217                 leave("investigate_read_descriptor");
1218
1219 }
1220
1221
1222 /* Bufferoffset is in BYTES */
1223 static void investigate_write_descriptor(struct net_device *dev, struct xircom_private *card, int descnr, unsigned int bufferoffset)
1224 {
1225                 int status;
1226
1227                 enter("investigate_write_descriptor");
1228
1229                 status = card->tx_buffer[4*descnr];
1230 #if 0
1231                 if (status & 0x8000) {  /* Major error */
1232                         printk(KERN_ERR "Major transmit error status %x \n", status);
1233                         card->tx_buffer[4*descnr] = 0;
1234                         netif_wake_queue (dev);
1235                 }
1236 #endif
1237                 if (status > 0) {       /* bit 31 is 0 when done */
1238                         if (card->tx_skb[descnr]!=NULL) {
1239                                 card->stats.tx_bytes += card->tx_skb[descnr]->len;
1240                                 dev_kfree_skb_irq(card->tx_skb[descnr]);
1241                         }
1242                         card->tx_skb[descnr] = NULL;
1243                         /* Bit 8 in the status field is 1 if there was a collision */
1244                         if (status&(1<<8))
1245                                 card->stats.collisions++;
1246                         card->tx_buffer[4*descnr] = 0; /* descriptor is free again */
1247                         netif_wake_queue (dev);
1248                         card->stats.tx_packets++;
1249                 }
1250
1251                 leave("investigate_write_descriptor");
1252
1253 }
1254
1255
1256 static int __init xircom_init(void)
1257 {
1258         return pci_register_driver(&xircom_ops);
1259 }
1260
1261 static void __exit xircom_exit(void)
1262 {
1263         pci_unregister_driver(&xircom_ops);
1264 }
1265
1266 module_init(xircom_init)
1267 module_exit(xircom_exit)
1268