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
= __devexit_p(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 __devinit
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
) {
240 pr_err("%s: no memory for rx buffer\n", __func__
);
243 private->tx_buffer
= dma_alloc_coherent(d
, 8192,
244 &private->tx_dma_handle
,
246 if (private->tx_buffer
== NULL
) {
247 pr_err("%s: no memory for tx buffer\n", __func__
);
251 SET_NETDEV_DEV(dev
, &pdev
->dev
);
255 private->pdev
= pdev
;
258 private->ioaddr
= pci_iomap(pdev
, 0, 0);
259 if (!private->ioaddr
)
262 spin_lock_init(&private->lock
);
264 initialize_card(private);
265 read_mac_address(private);
266 setup_descriptors(private);
268 dev
->netdev_ops
= &netdev_ops
;
269 pci_set_drvdata(pdev
, dev
);
271 rc
= register_netdev(dev
);
273 pr_err("%s: netdevice registration failed\n", __func__
);
277 netdev_info(dev
, "Xircom cardbus revision %i at irq %i\n",
278 pdev
->revision
, pdev
->irq
);
279 /* start the transmitter to get a heartbeat */
280 /* TODO: send 2 dummy packets here */
281 transceiver_voodoo(private);
283 spin_lock_irqsave(&private->lock
,flags
);
284 activate_transmitter(private);
285 activate_receiver(private);
286 spin_unlock_irqrestore(&private->lock
,flags
);
288 trigger_receive(private);
293 pci_iounmap(pdev
, private->ioaddr
);
295 pci_set_drvdata(pdev
, NULL
);
296 dma_free_coherent(d
, 8192, private->tx_buffer
, private->tx_dma_handle
);
298 dma_free_coherent(d
, 8192, private->rx_buffer
, private->rx_dma_handle
);
302 pci_release_regions(pdev
);
304 pci_disable_device(pdev
);
310 xircom_remove is called on module-unload or on device-eject.
311 it unregisters the irq, io-region and network device.
312 Interrupts and such are already stopped in the "ifconfig ethX down"
315 static void __devexit
xircom_remove(struct pci_dev
*pdev
)
317 struct net_device
*dev
= pci_get_drvdata(pdev
);
318 struct xircom_private
*card
= netdev_priv(dev
);
319 struct device
*d
= &pdev
->dev
;
321 unregister_netdev(dev
);
322 pci_iounmap(pdev
, card
->ioaddr
);
323 pci_set_drvdata(pdev
, NULL
);
324 dma_free_coherent(d
, 8192, card
->tx_buffer
, card
->tx_dma_handle
);
325 dma_free_coherent(d
, 8192, card
->rx_buffer
, card
->rx_dma_handle
);
327 pci_release_regions(pdev
);
328 pci_disable_device(pdev
);
331 static irqreturn_t
xircom_interrupt(int irq
, void *dev_instance
)
333 struct net_device
*dev
= (struct net_device
*) dev_instance
;
334 struct xircom_private
*card
= netdev_priv(dev
);
335 void __iomem
*ioaddr
= card
->ioaddr
;
339 spin_lock(&card
->lock
);
342 #if defined DEBUG && DEBUG > 1
343 print_binary(status
);
344 pr_debug("tx status 0x%08x 0x%08x\n",
345 card
->tx_buffer
[0], card
->tx_buffer
[4]);
346 pr_debug("rx status 0x%08x 0x%08x\n",
347 card
->rx_buffer
[0], card
->rx_buffer
[4]);
349 /* Handle shared irq and hotplug */
350 if (status
== 0 || status
== 0xffffffff) {
351 spin_unlock(&card
->lock
);
355 if (link_status_changed(card
)) {
357 netdev_dbg(dev
, "Link status has changed\n");
358 newlink
= link_status(card
);
359 netdev_info(dev
, "Link is %d mbit\n", newlink
);
361 netif_carrier_on(dev
);
363 netif_carrier_off(dev
);
367 /* Clear all remaining interrupts */
368 status
|= 0xffffffff; /* FIXME: make this clear only the
369 real existing bits */
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
]);
378 spin_unlock(&card
->lock
);
382 static netdev_tx_t
xircom_start_xmit(struct sk_buff
*skb
,
383 struct net_device
*dev
)
385 struct xircom_private
*card
;
390 card
= netdev_priv(dev
);
391 spin_lock_irqsave(&card
->lock
,flags
);
393 /* First see if we can free some descriptors */
394 for (desc
=0;desc
<NUMDESCRIPTORS
;desc
++)
395 investigate_write_descriptor(dev
,card
,desc
,bufferoffsets
[desc
]);
398 nextdescriptor
= (card
->transmit_used
+1) % (NUMDESCRIPTORS
);
399 desc
= card
->transmit_used
;
401 /* only send the packet if the descriptor is free */
402 if (card
->tx_buffer
[4*desc
]==0) {
403 /* Copy the packet data; zero the memory first as the card
404 sometimes sends more than you ask it to. */
406 memset(&card
->tx_buffer
[bufferoffsets
[desc
]/4],0,1536);
407 skb_copy_from_linear_data(skb
,
408 &(card
->tx_buffer
[bufferoffsets
[desc
] / 4]),
410 /* FIXME: The specification tells us that the length we send HAS to be a multiple of
413 card
->tx_buffer
[4*desc
+1] = cpu_to_le32(skb
->len
);
414 if (desc
== NUMDESCRIPTORS
- 1) /* bit 25: last descriptor of the ring */
415 card
->tx_buffer
[4*desc
+1] |= cpu_to_le32(1<<25);
417 card
->tx_buffer
[4*desc
+1] |= cpu_to_le32(0xF0000000);
418 /* 0xF0... means want interrupts*/
419 card
->tx_skb
[desc
] = skb
;
422 /* This gives the descriptor to the card */
423 card
->tx_buffer
[4*desc
] = cpu_to_le32(0x80000000);
424 trigger_transmit(card
);
425 if (card
->tx_buffer
[nextdescriptor
*4] & cpu_to_le32(0x8000000)) {
426 /* next descriptor is occupied... */
427 netif_stop_queue(dev
);
429 card
->transmit_used
= nextdescriptor
;
430 spin_unlock_irqrestore(&card
->lock
,flags
);
434 /* Uh oh... no free descriptor... drop the packet */
435 netif_stop_queue(dev
);
436 spin_unlock_irqrestore(&card
->lock
,flags
);
437 trigger_transmit(card
);
439 return NETDEV_TX_BUSY
;
445 static int xircom_open(struct net_device
*dev
)
447 struct xircom_private
*xp
= netdev_priv(dev
);
448 const int irq
= xp
->pdev
->irq
;
451 netdev_info(dev
, "xircom cardbus adaptor found, using irq %i\n", irq
);
452 retval
= request_irq(irq
, xircom_interrupt
, IRQF_SHARED
, dev
->name
, dev
);
462 static int xircom_close(struct net_device
*dev
)
464 struct xircom_private
*card
;
467 card
= netdev_priv(dev
);
468 netif_stop_queue(dev
); /* we don't want new packets */
471 spin_lock_irqsave(&card
->lock
,flags
);
473 disable_all_interrupts(card
);
475 /* We can enable this again once we send dummy packets on ifconfig ethX up */
476 deactivate_receiver(card
);
477 deactivate_transmitter(card
);
479 remove_descriptors(card
);
481 spin_unlock_irqrestore(&card
->lock
,flags
);
484 free_irq(card
->pdev
->irq
, dev
);
491 #ifdef CONFIG_NET_POLL_CONTROLLER
492 static void xircom_poll_controller(struct net_device
*dev
)
494 struct xircom_private
*xp
= netdev_priv(dev
);
495 const int irq
= xp
->pdev
->irq
;
498 xircom_interrupt(irq
, dev
);
504 static void initialize_card(struct xircom_private
*card
)
506 void __iomem
*ioaddr
= card
->ioaddr
;
510 spin_lock_irqsave(&card
->lock
, flags
);
512 /* First: reset the card */
514 val
|= 0x01; /* Software reset */
517 udelay(100); /* give the card some time to reset */
520 val
&= ~0x01; /* disable Software reset */
524 val
= 0; /* Value 0x00 is a safe and conservative value
525 for the PCI configuration settings */
529 disable_all_interrupts(card
);
530 deactivate_receiver(card
);
531 deactivate_transmitter(card
);
533 spin_unlock_irqrestore(&card
->lock
, flags
);
537 trigger_transmit causes the card to check for frames to be transmitted.
538 This is accomplished by writing to the CSR1 port. The documentation
539 claims that the act of writing is sufficient and that the value is
540 ignored; I chose zero.
542 static void trigger_transmit(struct xircom_private
*card
)
544 void __iomem
*ioaddr
= card
->ioaddr
;
550 trigger_receive causes the card to check for empty frames in the
551 descriptor list in which packets can be received.
552 This is accomplished by writing to the CSR2 port. The documentation
553 claims that the act of writing is sufficient and that the value is
554 ignored; I chose zero.
556 static void trigger_receive(struct xircom_private
*card
)
558 void __iomem
*ioaddr
= card
->ioaddr
;
564 setup_descriptors initializes the send and receive buffers to be valid
565 descriptors and programs the addresses into the card.
567 static void setup_descriptors(struct xircom_private
*card
)
569 void __iomem
*ioaddr
= card
->ioaddr
;
573 BUG_ON(card
->rx_buffer
== NULL
);
574 BUG_ON(card
->tx_buffer
== NULL
);
576 /* Receive descriptors */
577 memset(card
->rx_buffer
, 0, 128); /* clear the descriptors */
578 for (i
=0;i
<NUMDESCRIPTORS
;i
++ ) {
580 /* Rx Descr0: It's empty, let the card own it, no errors -> 0x80000000 */
581 card
->rx_buffer
[i
*4 + 0] = cpu_to_le32(0x80000000);
582 /* Rx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
583 card
->rx_buffer
[i
*4 + 1] = cpu_to_le32(1536);
584 if (i
== NUMDESCRIPTORS
- 1) /* bit 25 is "last descriptor" */
585 card
->rx_buffer
[i
*4 + 1] |= cpu_to_le32(1 << 25);
587 /* Rx Descr2: address of the buffer
588 we store the buffer at the 2nd half of the page */
590 address
= card
->rx_dma_handle
;
591 card
->rx_buffer
[i
*4 + 2] = cpu_to_le32(address
+ bufferoffsets
[i
]);
592 /* Rx Desc3: address of 2nd buffer -> 0 */
593 card
->rx_buffer
[i
*4 + 3] = 0;
597 /* Write the receive descriptor ring address to the card */
598 address
= card
->rx_dma_handle
;
599 xw32(CSR3
, address
); /* Receive descr list address */
602 /* transmit descriptors */
603 memset(card
->tx_buffer
, 0, 128); /* clear the descriptors */
605 for (i
=0;i
<NUMDESCRIPTORS
;i
++ ) {
606 /* Tx Descr0: Empty, we own it, no errors -> 0x00000000 */
607 card
->tx_buffer
[i
*4 + 0] = 0x00000000;
608 /* Tx Descr1: buffer 1 is 1536 bytes, buffer 2 is 0 bytes */
609 card
->tx_buffer
[i
*4 + 1] = cpu_to_le32(1536);
610 if (i
== NUMDESCRIPTORS
- 1) /* bit 25 is "last descriptor" */
611 card
->tx_buffer
[i
*4 + 1] |= cpu_to_le32(1 << 25);
613 /* Tx Descr2: address of the buffer
614 we store the buffer at the 2nd half of the page */
615 address
= card
->tx_dma_handle
;
616 card
->tx_buffer
[i
*4 + 2] = cpu_to_le32(address
+ bufferoffsets
[i
]);
617 /* Tx Desc3: address of 2nd buffer -> 0 */
618 card
->tx_buffer
[i
*4 + 3] = 0;
622 /* wite the transmit descriptor ring to the card */
623 address
= card
->tx_dma_handle
;
624 xw32(CSR4
, address
); /* xmit descr list address */
628 remove_descriptors informs the card the descriptors are no longer
629 valid by setting the address in the card to 0x00.
631 static void remove_descriptors(struct xircom_private
*card
)
633 void __iomem
*ioaddr
= card
->ioaddr
;
637 xw32(CSR3
, val
); /* Receive descriptor address */
638 xw32(CSR4
, val
); /* Send descriptor address */
642 link_status_changed returns 1 if the card has indicated that
643 the link status has changed. The new link status has to be read from CSR12.
645 This function also clears the status-bit.
647 static int link_status_changed(struct xircom_private
*card
)
649 void __iomem
*ioaddr
= card
->ioaddr
;
652 val
= xr32(CSR5
); /* Status register */
653 if (!(val
& (1 << 27))) /* no change */
656 /* clear the event by writing a 1 to the bit in the
666 transmit_active returns 1 if the transmitter on the card is
667 in a non-stopped state.
669 static int transmit_active(struct xircom_private
*card
)
671 void __iomem
*ioaddr
= card
->ioaddr
;
673 if (!(xr32(CSR5
) & (7 << 20))) /* transmitter disabled */
680 receive_active returns 1 if the receiver on the card is
681 in a non-stopped state.
683 static int receive_active(struct xircom_private
*card
)
685 void __iomem
*ioaddr
= card
->ioaddr
;
687 if (!(xr32(CSR5
) & (7 << 17))) /* receiver disabled */
694 activate_receiver enables the receiver on the card.
695 Before being allowed to active the receiver, the receiver
696 must be completely de-activated. To achieve this,
697 this code actually disables the receiver first; then it waits for the
698 receiver to become inactive, then it activates the receiver and then
699 it waits for the receiver to be active.
701 must be called with the lock held and interrupts disabled.
703 static void activate_receiver(struct xircom_private
*card
)
705 void __iomem
*ioaddr
= card
->ioaddr
;
709 val
= xr32(CSR6
); /* Operation mode */
711 /* If the "active" bit is set and the receiver is already
712 active, no need to do the expensive thing */
713 if ((val
&2) && (receive_active(card
)))
717 val
= val
& ~2; /* disable the receiver */
721 while (counter
> 0) {
722 if (!receive_active(card
))
728 netdev_err(card
->dev
, "Receiver failed to deactivate\n");
731 /* enable the receiver */
732 val
= xr32(CSR6
); /* Operation mode */
733 val
= val
| 2; /* enable the receiver */
736 /* now wait for the card to activate again */
738 while (counter
> 0) {
739 if (receive_active(card
))
745 netdev_err(card
->dev
,
746 "Receiver failed to re-activate\n");
751 deactivate_receiver disables the receiver on the card.
752 To achieve this this code disables the receiver first;
753 then it waits for the receiver to become inactive.
755 must be called with the lock held and interrupts disabled.
757 static void deactivate_receiver(struct xircom_private
*card
)
759 void __iomem
*ioaddr
= card
->ioaddr
;
763 val
= xr32(CSR6
); /* Operation mode */
764 val
= val
& ~2; /* disable the receiver */
768 while (counter
> 0) {
769 if (!receive_active(card
))
775 netdev_err(card
->dev
, "Receiver failed to deactivate\n");
781 activate_transmitter enables the transmitter on the card.
782 Before being allowed to active the transmitter, the transmitter
783 must be completely de-activated. To achieve this,
784 this code actually disables the transmitter first; then it waits for the
785 transmitter to become inactive, then it activates the transmitter and then
786 it waits for the transmitter to be active again.
788 must be called with the lock held and interrupts disabled.
790 static void activate_transmitter(struct xircom_private
*card
)
792 void __iomem
*ioaddr
= card
->ioaddr
;
796 val
= xr32(CSR6
); /* Operation mode */
798 /* If the "active" bit is set and the receiver is already
799 active, no need to do the expensive thing */
800 if ((val
&(1<<13)) && (transmit_active(card
)))
803 val
= val
& ~(1 << 13); /* disable the transmitter */
807 while (counter
> 0) {
808 if (!transmit_active(card
))
814 netdev_err(card
->dev
,
815 "Transmitter failed to deactivate\n");
818 /* enable the transmitter */
819 val
= xr32(CSR6
); /* Operation mode */
820 val
= val
| (1 << 13); /* enable the transmitter */
823 /* now wait for the card to activate again */
825 while (counter
> 0) {
826 if (transmit_active(card
))
832 netdev_err(card
->dev
,
833 "Transmitter failed to re-activate\n");
838 deactivate_transmitter disables the transmitter on the card.
839 To achieve this this code disables the transmitter first;
840 then it waits for the transmitter to become inactive.
842 must be called with the lock held and interrupts disabled.
844 static void deactivate_transmitter(struct xircom_private
*card
)
846 void __iomem
*ioaddr
= card
->ioaddr
;
850 val
= xr32(CSR6
); /* Operation mode */
851 val
= val
& ~2; /* disable the transmitter */
855 while (counter
> 0) {
856 if (!transmit_active(card
))
862 netdev_err(card
->dev
,
863 "Transmitter failed to deactivate\n");
869 enable_transmit_interrupt enables the transmit interrupt
871 must be called with the lock held and interrupts disabled.
873 static void enable_transmit_interrupt(struct xircom_private
*card
)
875 void __iomem
*ioaddr
= card
->ioaddr
;
878 val
= xr32(CSR7
); /* Interrupt enable register */
879 val
|= 1; /* enable the transmit interrupt */
885 enable_receive_interrupt enables the receive interrupt
887 must be called with the lock held and interrupts disabled.
889 static void enable_receive_interrupt(struct xircom_private
*card
)
891 void __iomem
*ioaddr
= card
->ioaddr
;
894 val
= xr32(CSR7
); /* Interrupt enable register */
895 val
= val
| (1 << 6); /* enable the receive interrupt */
900 enable_link_interrupt enables the link status change interrupt
902 must be called with the lock held and interrupts disabled.
904 static void enable_link_interrupt(struct xircom_private
*card
)
906 void __iomem
*ioaddr
= card
->ioaddr
;
909 val
= xr32(CSR7
); /* Interrupt enable register */
910 val
= val
| (1 << 27); /* enable the link status chage interrupt */
917 disable_all_interrupts disables all interrupts
919 must be called with the lock held and interrupts disabled.
921 static void disable_all_interrupts(struct xircom_private
*card
)
923 void __iomem
*ioaddr
= card
->ioaddr
;
929 enable_common_interrupts enables several weird interrupts
931 must be called with the lock held and interrupts disabled.
933 static void enable_common_interrupts(struct xircom_private
*card
)
935 void __iomem
*ioaddr
= card
->ioaddr
;
938 val
= xr32(CSR7
); /* Interrupt enable register */
939 val
|= (1<<16); /* Normal Interrupt Summary */
940 val
|= (1<<15); /* Abnormal Interrupt Summary */
941 val
|= (1<<13); /* Fatal bus error */
942 val
|= (1<<8); /* Receive Process Stopped */
943 val
|= (1<<7); /* Receive Buffer Unavailable */
944 val
|= (1<<5); /* Transmit Underflow */
945 val
|= (1<<2); /* Transmit Buffer Unavailable */
946 val
|= (1<<1); /* Transmit Process Stopped */
951 enable_promisc starts promisc mode
953 must be called with the lock held and interrupts disabled.
955 static int enable_promisc(struct xircom_private
*card
)
957 void __iomem
*ioaddr
= card
->ioaddr
;
961 val
= val
| (1 << 6);
971 link_status() checks the links status and will return 0 for no link, 10 for 10mbit link and 100 for.. guess what.
973 Must be called in locked state with interrupts disabled
975 static int link_status(struct xircom_private
*card
)
977 void __iomem
*ioaddr
= card
->ioaddr
;
982 /* bit 2 is 0 for 10mbit link, 1 for not an 10mbit link */
983 if (!(val
& (1 << 2)))
985 /* bit 1 is 0 for 100mbit link, 1 for not an 100mbit link */
986 if (!(val
& (1 << 1)))
989 /* If we get here -> no link at all */
999 read_mac_address() reads the MAC address from the NIC and stores it in the "dev" structure.
1001 This function will take the spinlock itself and can, as a result, not be called with the lock helt.
1003 static void read_mac_address(struct xircom_private
*card
)
1005 void __iomem
*ioaddr
= card
->ioaddr
;
1006 unsigned long flags
;
1010 spin_lock_irqsave(&card
->lock
, flags
);
1012 xw32(CSR9
, 1 << 12); /* enable boot rom access */
1013 for (i
= 0x100; i
< 0x1f7; i
+= link
+ 2) {
1014 u8 tuple
, data_id
, data_count
;
1021 data_id
= xr32(CSR9
);
1023 data_count
= xr32(CSR9
);
1024 if ((tuple
== 0x22) && (data_id
== 0x04) && (data_count
== 0x06)) {
1027 for (j
= 0; j
< 6; j
++) {
1028 xw32(CSR10
, i
+ j
+ 4);
1029 card
->dev
->dev_addr
[j
] = xr32(CSR9
) & 0xff;
1032 } else if (link
== 0) {
1036 spin_unlock_irqrestore(&card
->lock
, flags
);
1037 pr_debug(" %pM\n", card
->dev
->dev_addr
);
1042 transceiver_voodoo() enables the external UTP plug thingy.
1043 it's called voodoo as I stole this code and cannot cross-reference
1044 it with the specification.
1046 static void transceiver_voodoo(struct xircom_private
*card
)
1048 void __iomem
*ioaddr
= card
->ioaddr
;
1049 unsigned long flags
;
1051 /* disable all powermanagement */
1052 pci_write_config_dword(card
->pdev
, PCI_POWERMGMT
, 0x0000);
1054 setup_descriptors(card
);
1056 spin_lock_irqsave(&card
->lock
, flags
);
1058 xw32(CSR15
, 0x0008);
1060 xw32(CSR15
, 0xa8050000);
1062 xw32(CSR15
, 0xa00f0000);
1065 spin_unlock_irqrestore(&card
->lock
, flags
);
1067 netif_start_queue(card
->dev
);
1071 static void xircom_up(struct xircom_private
*card
)
1073 unsigned long flags
;
1076 /* disable all powermanagement */
1077 pci_write_config_dword(card
->pdev
, PCI_POWERMGMT
, 0x0000);
1079 setup_descriptors(card
);
1081 spin_lock_irqsave(&card
->lock
, flags
);
1084 enable_link_interrupt(card
);
1085 enable_transmit_interrupt(card
);
1086 enable_receive_interrupt(card
);
1087 enable_common_interrupts(card
);
1088 enable_promisc(card
);
1090 /* The card can have received packets already, read them away now */
1091 for (i
=0;i
<NUMDESCRIPTORS
;i
++)
1092 investigate_read_descriptor(card
->dev
,card
,i
,bufferoffsets
[i
]);
1095 spin_unlock_irqrestore(&card
->lock
, flags
);
1096 trigger_receive(card
);
1097 trigger_transmit(card
);
1098 netif_start_queue(card
->dev
);
1101 /* Bufferoffset is in BYTES */
1103 investigate_read_descriptor(struct net_device
*dev
, struct xircom_private
*card
,
1104 int descnr
, unsigned int bufferoffset
)
1108 status
= le32_to_cpu(card
->rx_buffer
[4*descnr
]);
1110 if (status
> 0) { /* packet received */
1112 /* TODO: discard error packets */
1114 short pkt_len
= ((status
>> 16) & 0x7ff) - 4;
1115 /* minus 4, we don't want the CRC */
1116 struct sk_buff
*skb
;
1118 if (pkt_len
> 1518) {
1119 netdev_err(dev
, "Packet length %i is bogus\n", pkt_len
);
1123 skb
= netdev_alloc_skb(dev
, pkt_len
+ 2);
1125 dev
->stats
.rx_dropped
++;
1128 skb_reserve(skb
, 2);
1129 skb_copy_to_linear_data(skb
,
1130 &card
->rx_buffer
[bufferoffset
/ 4],
1132 skb_put(skb
, pkt_len
);
1133 skb
->protocol
= eth_type_trans(skb
, dev
);
1135 dev
->stats
.rx_packets
++;
1136 dev
->stats
.rx_bytes
+= pkt_len
;
1139 /* give the buffer back to the card */
1140 card
->rx_buffer
[4*descnr
] = cpu_to_le32(0x80000000);
1141 trigger_receive(card
);
1146 /* Bufferoffset is in BYTES */
1148 investigate_write_descriptor(struct net_device
*dev
,
1149 struct xircom_private
*card
,
1150 int descnr
, unsigned int bufferoffset
)
1154 status
= le32_to_cpu(card
->tx_buffer
[4*descnr
]);
1156 if (status
& 0x8000) { /* Major error */
1157 pr_err("Major transmit error status %x\n", status
);
1158 card
->tx_buffer
[4*descnr
] = 0;
1159 netif_wake_queue (dev
);
1162 if (status
> 0) { /* bit 31 is 0 when done */
1163 if (card
->tx_skb
[descnr
]!=NULL
) {
1164 dev
->stats
.tx_bytes
+= card
->tx_skb
[descnr
]->len
;
1165 dev_kfree_skb_irq(card
->tx_skb
[descnr
]);
1167 card
->tx_skb
[descnr
] = NULL
;
1168 /* Bit 8 in the status field is 1 if there was a collision */
1169 if (status
& (1 << 8))
1170 dev
->stats
.collisions
++;
1171 card
->tx_buffer
[4*descnr
] = 0; /* descriptor is free again */
1172 netif_wake_queue (dev
);
1173 dev
->stats
.tx_packets
++;
1177 static int __init
xircom_init(void)
1179 return pci_register_driver(&xircom_ops
);
1182 static void __exit
xircom_exit(void)
1184 pci_unregister_driver(&xircom_ops
);
1187 module_init(xircom_init
)
1188 module_exit(xircom_exit
)