2 * xircom_cb: A driver for the (tulip-like) Xircom Cardbus ethernet cards
4 * This software is (C) by the respective authors, and licensed under the GPL
7 * Written by Arjan van de Ven for Red Hat, Inc.
8 * Based on work by Jeff Garzik, Doug Ledford and Donald Becker
10 * This software may be used and distributed according to the terms
11 * of the GNU General Public License, incorporated herein by reference.
14 * $Id: xircom_cb.c,v 1.33 2001/03/19 14:02:07 arjanv Exp $
17 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
19 #include <linux/module.h>
20 #include <linux/kernel.h>
21 #include <linux/string.h>
22 #include <linux/errno.h>
23 #include <linux/ioport.h>
24 #include <linux/slab.h>
25 #include <linux/interrupt.h>
26 #include <linux/pci.h>
27 #include <linux/netdevice.h>
28 #include <linux/etherdevice.h>
29 #include <linux/skbuff.h>
30 #include <linux/delay.h>
31 #include <linux/init.h>
32 #include <linux/bitops.h>
34 #include <asm/uaccess.h>
36 #ifdef CONFIG_NET_POLL_CONTROLLER
40 MODULE_DESCRIPTION("Xircom Cardbus ethernet driver");
41 MODULE_AUTHOR("Arjan van de Ven <arjanv@redhat.com>");
42 MODULE_LICENSE("GPL");
44 #define xw32(reg, val) iowrite32(val, ioaddr + (reg))
45 #define xr32(reg) ioread32(ioaddr + (reg))
46 #define xr8(reg) ioread8(ioaddr + (reg))
48 /* IO registers on the card, offsets */
68 #define PCI_POWERMGMT 0x40
70 /* Offsets of the buffers within the descriptor pages, in bytes */
72 #define NUMDESCRIPTORS 4
74 static int bufferoffsets[NUMDESCRIPTORS] = {128,2048,4096,6144};
77 struct xircom_private {
78 /* Send and receive buffers, kernel-addressable and dma addressable forms */
83 dma_addr_t rx_dma_handle;
84 dma_addr_t tx_dma_handle;
86 struct sk_buff *tx_skb[4];
91 /* transmit_used is the rotating counter that indicates which transmit
92 descriptor has to be used next */
95 /* Spinlock to serialize register operations.
96 It must be helt while manipulating the following registers:
97 CSR0, CSR6, CSR7, CSR9, CSR10, CSR15
101 struct pci_dev *pdev;
102 struct net_device *dev;
106 /* Function prototypes */
107 static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id);
108 static void xircom_remove(struct pci_dev *pdev);
109 static irqreturn_t xircom_interrupt(int irq, void *dev_instance);
110 static netdev_tx_t xircom_start_xmit(struct sk_buff *skb,
111 struct net_device *dev);
112 static int xircom_open(struct net_device *dev);
113 static int xircom_close(struct net_device *dev);
114 static void xircom_up(struct xircom_private *card);
115 #ifdef CONFIG_NET_POLL_CONTROLLER
116 static void xircom_poll_controller(struct net_device *dev);
119 static void investigate_read_descriptor(struct net_device *dev,struct xircom_private *card, int descnr, unsigned int bufferoffset);
120 static void investigate_write_descriptor(struct net_device *dev, struct xircom_private *card, int descnr, unsigned int bufferoffset);
121 static void read_mac_address(struct xircom_private *card);
122 static void transceiver_voodoo(struct xircom_private *card);
123 static void initialize_card(struct xircom_private *card);
124 static void trigger_transmit(struct xircom_private *card);
125 static void trigger_receive(struct xircom_private *card);
126 static void setup_descriptors(struct xircom_private *card);
127 static void remove_descriptors(struct xircom_private *card);
128 static int link_status_changed(struct xircom_private *card);
129 static void activate_receiver(struct xircom_private *card);
130 static void deactivate_receiver(struct xircom_private *card);
131 static void activate_transmitter(struct xircom_private *card);
132 static void deactivate_transmitter(struct xircom_private *card);
133 static void enable_transmit_interrupt(struct xircom_private *card);
134 static void enable_receive_interrupt(struct xircom_private *card);
135 static void enable_link_interrupt(struct xircom_private *card);
136 static void disable_all_interrupts(struct xircom_private *card);
137 static int link_status(struct xircom_private *card);
141 static DEFINE_PCI_DEVICE_TABLE(xircom_pci_table) = {
142 { PCI_VDEVICE(XIRCOM, 0x0003), },
145 MODULE_DEVICE_TABLE(pci, xircom_pci_table);
147 static struct pci_driver xircom_ops = {
149 .id_table = xircom_pci_table,
150 .probe = xircom_probe,
151 .remove = xircom_remove,
155 #if defined DEBUG && DEBUG > 1
156 static void print_binary(unsigned int number)
162 for (i=31;i>=0;i--) {
170 pr_debug("%s\n",buffer);
174 static const struct net_device_ops netdev_ops = {
175 .ndo_open = xircom_open,
176 .ndo_stop = xircom_close,
177 .ndo_start_xmit = xircom_start_xmit,
178 .ndo_change_mtu = eth_change_mtu,
179 .ndo_set_mac_address = eth_mac_addr,
180 .ndo_validate_addr = eth_validate_addr,
181 #ifdef CONFIG_NET_POLL_CONTROLLER
182 .ndo_poll_controller = xircom_poll_controller,
186 /* xircom_probe is the code that gets called on device insertion.
187 it sets up the hardware and registers the device to the networklayer.
189 TODO: Send 1 or 2 "dummy" packets here as the card seems to discard the
190 first two packets that get send, and pump hates that.
193 static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id)
195 struct device *d = &pdev->dev;
196 struct net_device *dev = NULL;
197 struct xircom_private *private;
199 unsigned short tmp16;
202 /* First do the PCI initialisation */
204 rc = pci_enable_device(pdev);
208 /* disable all powermanagement */
209 pci_write_config_dword(pdev, PCI_POWERMGMT, 0x0000);
211 pci_set_master(pdev); /* Why isn't this done by pci_enable_device ?*/
213 /* clear PCI status, if any */
214 pci_read_config_word (pdev,PCI_STATUS, &tmp16);
215 pci_write_config_word (pdev, PCI_STATUS,tmp16);
217 rc = pci_request_regions(pdev, "xircom_cb");
219 pr_err("%s: failed to allocate io-region\n", __func__);
225 Before changing the hardware, allocate the memory.
226 This way, we can fail gracefully if not enough memory
229 dev = alloc_etherdev(sizeof(struct xircom_private));
233 private = netdev_priv(dev);
235 /* Allocate the send/receive buffers */
236 private->rx_buffer = dma_alloc_coherent(d, 8192,
237 &private->rx_dma_handle,
239 if (private->rx_buffer == NULL)
242 private->tx_buffer = dma_alloc_coherent(d, 8192,
243 &private->tx_dma_handle,
245 if (private->tx_buffer == NULL)
248 SET_NETDEV_DEV(dev, &pdev->dev);
252 private->pdev = pdev;
255 private->ioaddr = pci_iomap(pdev, 0, 0);
256 if (!private->ioaddr)
259 spin_lock_init(&private->lock);
261 initialize_card(private);
262 read_mac_address(private);
263 setup_descriptors(private);
265 dev->netdev_ops = &netdev_ops;
266 pci_set_drvdata(pdev, dev);
268 rc = register_netdev(dev);
270 pr_err("%s: netdevice registration failed\n", __func__);
274 netdev_info(dev, "Xircom cardbus revision %i at irq %i\n",
275 pdev->revision, pdev->irq);
276 /* start the transmitter to get a heartbeat */
277 /* TODO: send 2 dummy packets here */
278 transceiver_voodoo(private);
280 spin_lock_irqsave(&private->lock,flags);
281 activate_transmitter(private);
282 activate_receiver(private);
283 spin_unlock_irqrestore(&private->lock,flags);
285 trigger_receive(private);
290 pci_iounmap(pdev, private->ioaddr);
292 dma_free_coherent(d, 8192, private->tx_buffer, private->tx_dma_handle);
294 dma_free_coherent(d, 8192, private->rx_buffer, private->rx_dma_handle);
298 pci_release_regions(pdev);
300 pci_disable_device(pdev);
306 xircom_remove is called on module-unload or on device-eject.
307 it unregisters the irq, io-region and network device.
308 Interrupts and such are already stopped in the "ifconfig ethX down"
311 static void xircom_remove(struct pci_dev *pdev)
313 struct net_device *dev = pci_get_drvdata(pdev);
314 struct xircom_private *card = netdev_priv(dev);
315 struct device *d = &pdev->dev;
317 unregister_netdev(dev);
318 pci_iounmap(pdev, card->ioaddr);
319 dma_free_coherent(d, 8192, card->tx_buffer, card->tx_dma_handle);
320 dma_free_coherent(d, 8192, card->rx_buffer, card->rx_dma_handle);
322 pci_release_regions(pdev);
323 pci_disable_device(pdev);
326 static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
328 struct net_device *dev = (struct net_device *) dev_instance;
329 struct xircom_private *card = netdev_priv(dev);
330 void __iomem *ioaddr = card->ioaddr;
334 spin_lock(&card->lock);
337 #if defined DEBUG && DEBUG > 1
338 print_binary(status);
339 pr_debug("tx status 0x%08x 0x%08x\n",
340 card->tx_buffer[0], card->tx_buffer[4]);
341 pr_debug("rx status 0x%08x 0x%08x\n",
342 card->rx_buffer[0], card->rx_buffer[4]);
344 /* Handle shared irq and hotplug */
345 if (status == 0 || status == 0xffffffff) {
346 spin_unlock(&card->lock);
350 if (link_status_changed(card)) {
352 netdev_dbg(dev, "Link status has changed\n");
353 newlink = link_status(card);
354 netdev_info(dev, "Link is %d mbit\n", newlink);
356 netif_carrier_on(dev);
358 netif_carrier_off(dev);
362 /* Clear all remaining interrupts */
363 status |= 0xffffffff; /* FIXME: make this clear only the
364 real existing bits */
368 for (i=0;i<NUMDESCRIPTORS;i++)
369 investigate_write_descriptor(dev,card,i,bufferoffsets[i]);
370 for (i=0;i<NUMDESCRIPTORS;i++)
371 investigate_read_descriptor(dev,card,i,bufferoffsets[i]);
373 spin_unlock(&card->lock);
377 static netdev_tx_t xircom_start_xmit(struct sk_buff *skb,
378 struct net_device *dev)
380 struct xircom_private *card;
385 card = netdev_priv(dev);
386 spin_lock_irqsave(&card->lock,flags);
388 /* First see if we can free some descriptors */
389 for (desc=0;desc<NUMDESCRIPTORS;desc++)
390 investigate_write_descriptor(dev,card,desc,bufferoffsets[desc]);
393 nextdescriptor = (card->transmit_used +1) % (NUMDESCRIPTORS);
394 desc = card->transmit_used;
396 /* only send the packet if the descriptor is free */
397 if (card->tx_buffer[4*desc]==0) {
398 /* Copy the packet data; zero the memory first as the card
399 sometimes sends more than you ask it to. */
401 memset(&card->tx_buffer[bufferoffsets[desc]/4],0,1536);
402 skb_copy_from_linear_data(skb,
403 &(card->tx_buffer[bufferoffsets[desc] / 4]),
405 /* FIXME: The specification tells us that the length we send HAS to be a multiple of
408 card->tx_buffer[4*desc+1] = cpu_to_le32(skb->len);
409 if (desc == NUMDESCRIPTORS - 1) /* bit 25: last descriptor of the ring */
410 card->tx_buffer[4*desc+1] |= cpu_to_le32(1<<25);
412 card->tx_buffer[4*desc+1] |= cpu_to_le32(0xF0000000);
413 /* 0xF0... means want interrupts*/
414 card->tx_skb[desc] = skb;
417 /* This gives the descriptor to the card */
418 card->tx_buffer[4*desc] = cpu_to_le32(0x80000000);
419 trigger_transmit(card);
420 if (card->tx_buffer[nextdescriptor*4] & cpu_to_le32(0x8000000)) {
421 /* next descriptor is occupied... */
422 netif_stop_queue(dev);
424 card->transmit_used = nextdescriptor;
425 spin_unlock_irqrestore(&card->lock,flags);
429 /* Uh oh... no free descriptor... drop the packet */
430 netif_stop_queue(dev);
431 spin_unlock_irqrestore(&card->lock,flags);
432 trigger_transmit(card);
434 return NETDEV_TX_BUSY;
440 static int xircom_open(struct net_device *dev)
442 struct xircom_private *xp = netdev_priv(dev);
443 const int irq = xp->pdev->irq;
446 netdev_info(dev, "xircom cardbus adaptor found, using irq %i\n", irq);
447 retval = request_irq(irq, xircom_interrupt, IRQF_SHARED, dev->name, dev);
457 static int xircom_close(struct net_device *dev)
459 struct xircom_private *card;
462 card = netdev_priv(dev);
463 netif_stop_queue(dev); /* we don't want new packets */
466 spin_lock_irqsave(&card->lock,flags);
468 disable_all_interrupts(card);
470 /* We can enable this again once we send dummy packets on ifconfig ethX up */
471 deactivate_receiver(card);
472 deactivate_transmitter(card);
474 remove_descriptors(card);
476 spin_unlock_irqrestore(&card->lock,flags);
479 free_irq(card->pdev->irq, dev);
486 #ifdef CONFIG_NET_POLL_CONTROLLER
487 static void xircom_poll_controller(struct net_device *dev)
489 struct xircom_private *xp = netdev_priv(dev);
490 const int irq = xp->pdev->irq;
493 xircom_interrupt(irq, dev);
499 static void initialize_card(struct xircom_private *card)
501 void __iomem *ioaddr = card->ioaddr;
505 spin_lock_irqsave(&card->lock, flags);
507 /* First: reset the card */
509 val |= 0x01; /* Software reset */
512 udelay(100); /* give the card some time to reset */
515 val &= ~0x01; /* disable Software reset */
519 val = 0; /* Value 0x00 is a safe and conservative value
520 for the PCI configuration settings */
524 disable_all_interrupts(card);
525 deactivate_receiver(card);
526 deactivate_transmitter(card);
528 spin_unlock_irqrestore(&card->lock, flags);
532 trigger_transmit causes the card to check for frames to be transmitted.
533 This is accomplished by writing to the CSR1 port. The documentation
534 claims that the act of writing is sufficient and that the value is
535 ignored; I chose zero.
537 static void trigger_transmit(struct xircom_private *card)
539 void __iomem *ioaddr = card->ioaddr;
545 trigger_receive causes the card to check for empty frames in the
546 descriptor list in which packets can be received.
547 This is accomplished by writing to the CSR2 port. The documentation
548 claims that the act of writing is sufficient and that the value is
549 ignored; I chose zero.
551 static void trigger_receive(struct xircom_private *card)
553 void __iomem *ioaddr = card->ioaddr;
559 setup_descriptors initializes the send and receive buffers to be valid
560 descriptors and programs the addresses into the card.
562 static void setup_descriptors(struct xircom_private *card)
564 void __iomem *ioaddr = card->ioaddr;
568 BUG_ON(card->rx_buffer == NULL);
569 BUG_ON(card->tx_buffer == NULL);
571 /* Receive descriptors */
572 memset(card->rx_buffer, 0, 128); /* clear the descriptors */
573 for (i=0;i<NUMDESCRIPTORS;i++ ) {
575 /* Rx Descr0: It's empty, let the card own it, no errors -> 0x80000000 */
576 card->rx_buffer[i*4 + 0] = cpu_to_le32(0x80000000);
577 /* Rx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
578 card->rx_buffer[i*4 + 1] = cpu_to_le32(1536);
579 if (i == NUMDESCRIPTORS - 1) /* bit 25 is "last descriptor" */
580 card->rx_buffer[i*4 + 1] |= cpu_to_le32(1 << 25);
582 /* Rx Descr2: address of the buffer
583 we store the buffer at the 2nd half of the page */
585 address = card->rx_dma_handle;
586 card->rx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
587 /* Rx Desc3: address of 2nd buffer -> 0 */
588 card->rx_buffer[i*4 + 3] = 0;
592 /* Write the receive descriptor ring address to the card */
593 address = card->rx_dma_handle;
594 xw32(CSR3, address); /* Receive descr list address */
597 /* transmit descriptors */
598 memset(card->tx_buffer, 0, 128); /* clear the descriptors */
600 for (i=0;i<NUMDESCRIPTORS;i++ ) {
601 /* Tx Descr0: Empty, we own it, no errors -> 0x00000000 */
602 card->tx_buffer[i*4 + 0] = 0x00000000;
603 /* Tx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
604 card->tx_buffer[i*4 + 1] = cpu_to_le32(1536);
605 if (i == NUMDESCRIPTORS - 1) /* bit 25 is "last descriptor" */
606 card->tx_buffer[i*4 + 1] |= cpu_to_le32(1 << 25);
608 /* Tx Descr2: address of the buffer
609 we store the buffer at the 2nd half of the page */
610 address = card->tx_dma_handle;
611 card->tx_buffer[i*4 + 2] = cpu_to_le32(address + bufferoffsets[i]);
612 /* Tx Desc3: address of 2nd buffer -> 0 */
613 card->tx_buffer[i*4 + 3] = 0;
617 /* wite the transmit descriptor ring to the card */
618 address = card->tx_dma_handle;
619 xw32(CSR4, address); /* xmit descr list address */
623 remove_descriptors informs the card the descriptors are no longer
624 valid by setting the address in the card to 0x00.
626 static void remove_descriptors(struct xircom_private *card)
628 void __iomem *ioaddr = card->ioaddr;
632 xw32(CSR3, val); /* Receive descriptor address */
633 xw32(CSR4, val); /* Send descriptor address */
637 link_status_changed returns 1 if the card has indicated that
638 the link status has changed. The new link status has to be read from CSR12.
640 This function also clears the status-bit.
642 static int link_status_changed(struct xircom_private *card)
644 void __iomem *ioaddr = card->ioaddr;
647 val = xr32(CSR5); /* Status register */
648 if (!(val & (1 << 27))) /* no change */
651 /* clear the event by writing a 1 to the bit in the
661 transmit_active returns 1 if the transmitter on the card is
662 in a non-stopped state.
664 static int transmit_active(struct xircom_private *card)
666 void __iomem *ioaddr = card->ioaddr;
668 if (!(xr32(CSR5) & (7 << 20))) /* transmitter disabled */
675 receive_active returns 1 if the receiver on the card is
676 in a non-stopped state.
678 static int receive_active(struct xircom_private *card)
680 void __iomem *ioaddr = card->ioaddr;
682 if (!(xr32(CSR5) & (7 << 17))) /* receiver disabled */
689 activate_receiver enables the receiver on the card.
690 Before being allowed to active the receiver, the receiver
691 must be completely de-activated. To achieve this,
692 this code actually disables the receiver first; then it waits for the
693 receiver to become inactive, then it activates the receiver and then
694 it waits for the receiver to be active.
696 must be called with the lock held and interrupts disabled.
698 static void activate_receiver(struct xircom_private *card)
700 void __iomem *ioaddr = card->ioaddr;
704 val = xr32(CSR6); /* Operation mode */
706 /* If the "active" bit is set and the receiver is already
707 active, no need to do the expensive thing */
708 if ((val&2) && (receive_active(card)))
712 val = val & ~2; /* disable the receiver */
716 while (counter > 0) {
717 if (!receive_active(card))
723 netdev_err(card->dev, "Receiver failed to deactivate\n");
726 /* enable the receiver */
727 val = xr32(CSR6); /* Operation mode */
728 val = val | 2; /* enable the receiver */
731 /* now wait for the card to activate again */
733 while (counter > 0) {
734 if (receive_active(card))
740 netdev_err(card->dev,
741 "Receiver failed to re-activate\n");
746 deactivate_receiver disables the receiver on the card.
747 To achieve this this code disables the receiver first;
748 then it waits for the receiver to become inactive.
750 must be called with the lock held and interrupts disabled.
752 static void deactivate_receiver(struct xircom_private *card)
754 void __iomem *ioaddr = card->ioaddr;
758 val = xr32(CSR6); /* Operation mode */
759 val = val & ~2; /* disable the receiver */
763 while (counter > 0) {
764 if (!receive_active(card))
770 netdev_err(card->dev, "Receiver failed to deactivate\n");
776 activate_transmitter enables the transmitter on the card.
777 Before being allowed to active the transmitter, the transmitter
778 must be completely de-activated. To achieve this,
779 this code actually disables the transmitter first; then it waits for the
780 transmitter to become inactive, then it activates the transmitter and then
781 it waits for the transmitter to be active again.
783 must be called with the lock held and interrupts disabled.
785 static void activate_transmitter(struct xircom_private *card)
787 void __iomem *ioaddr = card->ioaddr;
791 val = xr32(CSR6); /* Operation mode */
793 /* If the "active" bit is set and the receiver is already
794 active, no need to do the expensive thing */
795 if ((val&(1<<13)) && (transmit_active(card)))
798 val = val & ~(1 << 13); /* disable the transmitter */
802 while (counter > 0) {
803 if (!transmit_active(card))
809 netdev_err(card->dev,
810 "Transmitter failed to deactivate\n");
813 /* enable the transmitter */
814 val = xr32(CSR6); /* Operation mode */
815 val = val | (1 << 13); /* enable the transmitter */
818 /* now wait for the card to activate again */
820 while (counter > 0) {
821 if (transmit_active(card))
827 netdev_err(card->dev,
828 "Transmitter failed to re-activate\n");
833 deactivate_transmitter disables the transmitter on the card.
834 To achieve this this code disables the transmitter first;
835 then it waits for the transmitter to become inactive.
837 must be called with the lock held and interrupts disabled.
839 static void deactivate_transmitter(struct xircom_private *card)
841 void __iomem *ioaddr = card->ioaddr;
845 val = xr32(CSR6); /* Operation mode */
846 val = val & ~2; /* disable the transmitter */
850 while (counter > 0) {
851 if (!transmit_active(card))
857 netdev_err(card->dev,
858 "Transmitter failed to deactivate\n");
864 enable_transmit_interrupt enables the transmit interrupt
866 must be called with the lock held and interrupts disabled.
868 static void enable_transmit_interrupt(struct xircom_private *card)
870 void __iomem *ioaddr = card->ioaddr;
873 val = xr32(CSR7); /* Interrupt enable register */
874 val |= 1; /* enable the transmit interrupt */
880 enable_receive_interrupt enables the receive interrupt
882 must be called with the lock held and interrupts disabled.
884 static void enable_receive_interrupt(struct xircom_private *card)
886 void __iomem *ioaddr = card->ioaddr;
889 val = xr32(CSR7); /* Interrupt enable register */
890 val = val | (1 << 6); /* enable the receive interrupt */
895 enable_link_interrupt enables the link status change interrupt
897 must be called with the lock held and interrupts disabled.
899 static void enable_link_interrupt(struct xircom_private *card)
901 void __iomem *ioaddr = card->ioaddr;
904 val = xr32(CSR7); /* Interrupt enable register */
905 val = val | (1 << 27); /* enable the link status chage interrupt */
912 disable_all_interrupts disables all interrupts
914 must be called with the lock held and interrupts disabled.
916 static void disable_all_interrupts(struct xircom_private *card)
918 void __iomem *ioaddr = card->ioaddr;
924 enable_common_interrupts enables several weird interrupts
926 must be called with the lock held and interrupts disabled.
928 static void enable_common_interrupts(struct xircom_private *card)
930 void __iomem *ioaddr = card->ioaddr;
933 val = xr32(CSR7); /* Interrupt enable register */
934 val |= (1<<16); /* Normal Interrupt Summary */
935 val |= (1<<15); /* Abnormal Interrupt Summary */
936 val |= (1<<13); /* Fatal bus error */
937 val |= (1<<8); /* Receive Process Stopped */
938 val |= (1<<7); /* Receive Buffer Unavailable */
939 val |= (1<<5); /* Transmit Underflow */
940 val |= (1<<2); /* Transmit Buffer Unavailable */
941 val |= (1<<1); /* Transmit Process Stopped */
946 enable_promisc starts promisc mode
948 must be called with the lock held and interrupts disabled.
950 static int enable_promisc(struct xircom_private *card)
952 void __iomem *ioaddr = card->ioaddr;
956 val = val | (1 << 6);
966 link_status() checks the links status and will return 0 for no link, 10 for 10mbit link and 100 for.. guess what.
968 Must be called in locked state with interrupts disabled
970 static int link_status(struct xircom_private *card)
972 void __iomem *ioaddr = card->ioaddr;
977 /* bit 2 is 0 for 10mbit link, 1 for not an 10mbit link */
978 if (!(val & (1 << 2)))
980 /* bit 1 is 0 for 100mbit link, 1 for not an 100mbit link */
981 if (!(val & (1 << 1)))
984 /* If we get here -> no link at all */
994 read_mac_address() reads the MAC address from the NIC and stores it in the "dev" structure.
996 This function will take the spinlock itself and can, as a result, not be called with the lock helt.
998 static void read_mac_address(struct xircom_private *card)
1000 void __iomem *ioaddr = card->ioaddr;
1001 unsigned long flags;
1005 spin_lock_irqsave(&card->lock, flags);
1007 xw32(CSR9, 1 << 12); /* enable boot rom access */
1008 for (i = 0x100; i < 0x1f7; i += link + 2) {
1009 u8 tuple, data_id, data_count;
1016 data_id = xr32(CSR9);
1018 data_count = xr32(CSR9);
1019 if ((tuple == 0x22) && (data_id == 0x04) && (data_count == 0x06)) {
1022 for (j = 0; j < 6; j++) {
1023 xw32(CSR10, i + j + 4);
1024 card->dev->dev_addr[j] = xr32(CSR9) & 0xff;
1027 } else if (link == 0) {
1031 spin_unlock_irqrestore(&card->lock, flags);
1032 pr_debug(" %pM\n", card->dev->dev_addr);
1037 transceiver_voodoo() enables the external UTP plug thingy.
1038 it's called voodoo as I stole this code and cannot cross-reference
1039 it with the specification.
1041 static void transceiver_voodoo(struct xircom_private *card)
1043 void __iomem *ioaddr = card->ioaddr;
1044 unsigned long flags;
1046 /* disable all powermanagement */
1047 pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1049 setup_descriptors(card);
1051 spin_lock_irqsave(&card->lock, flags);
1053 xw32(CSR15, 0x0008);
1055 xw32(CSR15, 0xa8050000);
1057 xw32(CSR15, 0xa00f0000);
1060 spin_unlock_irqrestore(&card->lock, flags);
1062 netif_start_queue(card->dev);
1066 static void xircom_up(struct xircom_private *card)
1068 unsigned long flags;
1071 /* disable all powermanagement */
1072 pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1074 setup_descriptors(card);
1076 spin_lock_irqsave(&card->lock, flags);
1079 enable_link_interrupt(card);
1080 enable_transmit_interrupt(card);
1081 enable_receive_interrupt(card);
1082 enable_common_interrupts(card);
1083 enable_promisc(card);
1085 /* The card can have received packets already, read them away now */
1086 for (i=0;i<NUMDESCRIPTORS;i++)
1087 investigate_read_descriptor(card->dev,card,i,bufferoffsets[i]);
1090 spin_unlock_irqrestore(&card->lock, flags);
1091 trigger_receive(card);
1092 trigger_transmit(card);
1093 netif_start_queue(card->dev);
1096 /* Bufferoffset is in BYTES */
1098 investigate_read_descriptor(struct net_device *dev, struct xircom_private *card,
1099 int descnr, unsigned int bufferoffset)
1103 status = le32_to_cpu(card->rx_buffer[4*descnr]);
1105 if (status > 0) { /* packet received */
1107 /* TODO: discard error packets */
1109 short pkt_len = ((status >> 16) & 0x7ff) - 4;
1110 /* minus 4, we don't want the CRC */
1111 struct sk_buff *skb;
1113 if (pkt_len > 1518) {
1114 netdev_err(dev, "Packet length %i is bogus\n", pkt_len);
1118 skb = netdev_alloc_skb(dev, pkt_len + 2);
1120 dev->stats.rx_dropped++;
1123 skb_reserve(skb, 2);
1124 skb_copy_to_linear_data(skb,
1125 &card->rx_buffer[bufferoffset / 4],
1127 skb_put(skb, pkt_len);
1128 skb->protocol = eth_type_trans(skb, dev);
1130 dev->stats.rx_packets++;
1131 dev->stats.rx_bytes += pkt_len;
1134 /* give the buffer back to the card */
1135 card->rx_buffer[4*descnr] = cpu_to_le32(0x80000000);
1136 trigger_receive(card);
1141 /* Bufferoffset is in BYTES */
1143 investigate_write_descriptor(struct net_device *dev,
1144 struct xircom_private *card,
1145 int descnr, unsigned int bufferoffset)
1149 status = le32_to_cpu(card->tx_buffer[4*descnr]);
1151 if (status & 0x8000) { /* Major error */
1152 pr_err("Major transmit error status %x\n", status);
1153 card->tx_buffer[4*descnr] = 0;
1154 netif_wake_queue (dev);
1157 if (status > 0) { /* bit 31 is 0 when done */
1158 if (card->tx_skb[descnr]!=NULL) {
1159 dev->stats.tx_bytes += card->tx_skb[descnr]->len;
1160 dev_kfree_skb_irq(card->tx_skb[descnr]);
1162 card->tx_skb[descnr] = NULL;
1163 /* Bit 8 in the status field is 1 if there was a collision */
1164 if (status & (1 << 8))
1165 dev->stats.collisions++;
1166 card->tx_buffer[4*descnr] = 0; /* descriptor is free again */
1167 netif_wake_queue (dev);
1168 dev->stats.tx_packets++;
1172 module_pci_driver(xircom_ops);