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 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18 
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>
33 
34 #include <asm/uaccess.h>
35 #include <asm/io.h>
36 #ifdef CONFIG_NET_POLL_CONTROLLER
37 #include <asm/irq.h>
38 #endif
39 
40 MODULE_DESCRIPTION("Xircom Cardbus ethernet driver");
41 MODULE_AUTHOR("Arjan van de Ven <arjanv@redhat.com>");
42 MODULE_LICENSE("GPL");
43 
44 #define xw32(reg, val)	iowrite32(val, ioaddr + (reg))
45 #define xr32(reg)	ioread32(ioaddr + (reg))
46 #define xr8(reg)	ioread8(ioaddr + (reg))
47 
48 /* IO registers on the card, offsets */
49 #define CSR0	0x00
50 #define CSR1	0x08
51 #define CSR2	0x10
52 #define CSR3	0x18
53 #define CSR4	0x20
54 #define CSR5	0x28
55 #define CSR6	0x30
56 #define CSR7	0x38
57 #define CSR8	0x40
58 #define CSR9	0x48
59 #define CSR10	0x50
60 #define CSR11	0x58
61 #define CSR12	0x60
62 #define CSR13	0x68
63 #define CSR14	0x70
64 #define CSR15	0x78
65 #define CSR16	0x80
66 
67 /* PCI registers */
68 #define PCI_POWERMGMT 	0x40
69 
70 /* Offsets of the buffers within the descriptor pages, in bytes */
71 
72 #define NUMDESCRIPTORS 4
73 
74 static int bufferoffsets[NUMDESCRIPTORS] = {128,2048,4096,6144};
75 
76 
77 struct xircom_private {
78 	/* Send and receive buffers, kernel-addressable and dma addressable forms */
79 
80 	__le32 *rx_buffer;
81 	__le32 *tx_buffer;
82 
83 	dma_addr_t rx_dma_handle;
84 	dma_addr_t tx_dma_handle;
85 
86 	struct sk_buff *tx_skb[4];
87 
88 	void __iomem *ioaddr;
89 	int open;
90 
91 	/* transmit_used is the rotating counter that indicates which transmit
92 	   descriptor has to be used next */
93 	int transmit_used;
94 
95 	/* Spinlock to serialize register operations.
96 	   It must be helt while manipulating the following registers:
97 	   CSR0, CSR6, CSR7, CSR9, CSR10, CSR15
98 	 */
99 	spinlock_t lock;
100 
101 	struct pci_dev *pdev;
102 	struct net_device *dev;
103 };
104 
105 
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);
117 #endif
118 
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);
138 
139 
140 
141 static DEFINE_PCI_DEVICE_TABLE(xircom_pci_table) = {
142 	{ PCI_VDEVICE(XIRCOM, 0x0003), },
143 	{0,},
144 };
145 MODULE_DEVICE_TABLE(pci, xircom_pci_table);
146 
147 static struct pci_driver xircom_ops = {
148 	.name		= "xircom_cb",
149 	.id_table	= xircom_pci_table,
150 	.probe		= xircom_probe,
151 	.remove		= xircom_remove,
152 };
153 
154 
155 #if defined DEBUG && DEBUG > 1
156 static void print_binary(unsigned int number)
157 {
158 	int i,i2;
159 	char buffer[64];
160 	memset(buffer,0,64);
161 	i2=0;
162 	for (i=31;i>=0;i--) {
163 		if (number & (1<<i))
164 			buffer[i2++]='1';
165 		else
166 			buffer[i2++]='0';
167 		if ((i&3)==0)
168 			buffer[i2++]=' ';
169 	}
170 	pr_debug("%s\n",buffer);
171 }
172 #endif
173 
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,
183 #endif
184 };
185 
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.
188 
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.
191 
192  */
193 static int xircom_probe(struct pci_dev *pdev, const struct pci_device_id *id)
194 {
195 	struct device *d = &pdev->dev;
196 	struct net_device *dev = NULL;
197 	struct xircom_private *private;
198 	unsigned long flags;
199 	unsigned short tmp16;
200 	int rc;
201 
202 	/* First do the PCI initialisation */
203 
204 	rc = pci_enable_device(pdev);
205 	if (rc < 0)
206 		goto out;
207 
208 	/* disable all powermanagement */
209 	pci_write_config_dword(pdev, PCI_POWERMGMT, 0x0000);
210 
211 	pci_set_master(pdev); /* Why isn't this done by pci_enable_device ?*/
212 
213 	/* clear PCI status, if any */
214 	pci_read_config_word (pdev,PCI_STATUS, &tmp16);
215 	pci_write_config_word (pdev, PCI_STATUS,tmp16);
216 
217 	rc = pci_request_regions(pdev, "xircom_cb");
218 	if (rc < 0) {
219 		pr_err("%s: failed to allocate io-region\n", __func__);
220 		goto err_disable;
221 	}
222 
223 	rc = -ENOMEM;
224 	/*
225 	   Before changing the hardware, allocate the memory.
226 	   This way, we can fail gracefully if not enough memory
227 	   is available.
228 	 */
229 	dev = alloc_etherdev(sizeof(struct xircom_private));
230 	if (!dev)
231 		goto err_release;
232 
233 	private = netdev_priv(dev);
234 
235 	/* Allocate the send/receive buffers */
236 	private->rx_buffer = dma_alloc_coherent(d, 8192,
237 						&private->rx_dma_handle,
238 						GFP_KERNEL);
239 	if (private->rx_buffer == NULL)
240 		goto rx_buf_fail;
241 
242 	private->tx_buffer = dma_alloc_coherent(d, 8192,
243 						&private->tx_dma_handle,
244 						GFP_KERNEL);
245 	if (private->tx_buffer == NULL)
246 		goto tx_buf_fail;
247 
248 	SET_NETDEV_DEV(dev, &pdev->dev);
249 
250 
251 	private->dev = dev;
252 	private->pdev = pdev;
253 
254 	/* IO range. */
255 	private->ioaddr = pci_iomap(pdev, 0, 0);
256 	if (!private->ioaddr)
257 		goto reg_fail;
258 
259 	spin_lock_init(&private->lock);
260 
261 	initialize_card(private);
262 	read_mac_address(private);
263 	setup_descriptors(private);
264 
265 	dev->netdev_ops = &netdev_ops;
266 	pci_set_drvdata(pdev, dev);
267 
268 	rc = register_netdev(dev);
269 	if (rc < 0) {
270 		pr_err("%s: netdevice registration failed\n", __func__);
271 		goto err_unmap;
272 	}
273 
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);
279 
280 	spin_lock_irqsave(&private->lock,flags);
281 	activate_transmitter(private);
282 	activate_receiver(private);
283 	spin_unlock_irqrestore(&private->lock,flags);
284 
285 	trigger_receive(private);
286 out:
287 	return rc;
288 
289 err_unmap:
290 	pci_iounmap(pdev, private->ioaddr);
291 reg_fail:
292 	dma_free_coherent(d, 8192, private->tx_buffer, private->tx_dma_handle);
293 tx_buf_fail:
294 	dma_free_coherent(d, 8192, private->rx_buffer, private->rx_dma_handle);
295 rx_buf_fail:
296 	free_netdev(dev);
297 err_release:
298 	pci_release_regions(pdev);
299 err_disable:
300 	pci_disable_device(pdev);
301 	goto out;
302 }
303 
304 
305 /*
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"
309  code.
310  */
311 static void xircom_remove(struct pci_dev *pdev)
312 {
313 	struct net_device *dev = pci_get_drvdata(pdev);
314 	struct xircom_private *card = netdev_priv(dev);
315 	struct device *d = &pdev->dev;
316 
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);
321 	free_netdev(dev);
322 	pci_release_regions(pdev);
323 	pci_disable_device(pdev);
324 }
325 
326 static irqreturn_t xircom_interrupt(int irq, void *dev_instance)
327 {
328 	struct net_device *dev = (struct net_device *) dev_instance;
329 	struct xircom_private *card = netdev_priv(dev);
330 	void __iomem *ioaddr = card->ioaddr;
331 	unsigned int status;
332 	int i;
333 
334 	spin_lock(&card->lock);
335 	status = xr32(CSR5);
336 
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]);
343 #endif
344 	/* Handle shared irq and hotplug */
345 	if (status == 0 || status == 0xffffffff) {
346 		spin_unlock(&card->lock);
347 		return IRQ_NONE;
348 	}
349 
350 	if (link_status_changed(card)) {
351 		int newlink;
352 		netdev_dbg(dev, "Link status has changed\n");
353 		newlink = link_status(card);
354 		netdev_info(dev, "Link is %d mbit\n", newlink);
355 		if (newlink)
356 			netif_carrier_on(dev);
357 		else
358 			netif_carrier_off(dev);
359 
360 	}
361 
362 	/* Clear all remaining interrupts */
363 	status |= 0xffffffff; /* FIXME: make this clear only the
364 				        real existing bits */
365 	xw32(CSR5, status);
366 
367 
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]);
372 
373 	spin_unlock(&card->lock);
374 	return IRQ_HANDLED;
375 }
376 
377 static netdev_tx_t xircom_start_xmit(struct sk_buff *skb,
378 					   struct net_device *dev)
379 {
380 	struct xircom_private *card;
381 	unsigned long flags;
382 	int nextdescriptor;
383 	int desc;
384 
385 	card = netdev_priv(dev);
386 	spin_lock_irqsave(&card->lock,flags);
387 
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]);
391 
392 
393 	nextdescriptor = (card->transmit_used +1) % (NUMDESCRIPTORS);
394 	desc = card->transmit_used;
395 
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. */
400 
401 			memset(&card->tx_buffer[bufferoffsets[desc]/4],0,1536);
402 			skb_copy_from_linear_data(skb,
403 				  &(card->tx_buffer[bufferoffsets[desc] / 4]),
404 						  skb->len);
405 			/* FIXME: The specification tells us that the length we send HAS to be a multiple of
406 			   4 bytes. */
407 
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);
411 
412 			card->tx_buffer[4*desc+1] |= cpu_to_le32(0xF0000000);
413 						 /* 0xF0... means want interrupts*/
414 			card->tx_skb[desc] = skb;
415 
416 			wmb();
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);
423 			}
424 			card->transmit_used = nextdescriptor;
425 			spin_unlock_irqrestore(&card->lock,flags);
426 			return NETDEV_TX_OK;
427 	}
428 
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);
433 
434 	return NETDEV_TX_BUSY;
435 }
436 
437 
438 
439 
440 static int xircom_open(struct net_device *dev)
441 {
442 	struct xircom_private *xp = netdev_priv(dev);
443 	const int irq = xp->pdev->irq;
444 	int retval;
445 
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);
448 	if (retval)
449 		return retval;
450 
451 	xircom_up(xp);
452 	xp->open = 1;
453 
454 	return 0;
455 }
456 
457 static int xircom_close(struct net_device *dev)
458 {
459 	struct xircom_private *card;
460 	unsigned long flags;
461 
462 	card = netdev_priv(dev);
463 	netif_stop_queue(dev); /* we don't want new packets */
464 
465 
466 	spin_lock_irqsave(&card->lock,flags);
467 
468 	disable_all_interrupts(card);
469 #if 0
470 	/* We can enable this again once we send dummy packets on ifconfig ethX up */
471 	deactivate_receiver(card);
472 	deactivate_transmitter(card);
473 #endif
474 	remove_descriptors(card);
475 
476 	spin_unlock_irqrestore(&card->lock,flags);
477 
478 	card->open = 0;
479 	free_irq(card->pdev->irq, dev);
480 
481 	return 0;
482 
483 }
484 
485 
486 #ifdef CONFIG_NET_POLL_CONTROLLER
487 static void xircom_poll_controller(struct net_device *dev)
488 {
489 	struct xircom_private *xp = netdev_priv(dev);
490 	const int irq = xp->pdev->irq;
491 
492 	disable_irq(irq);
493 	xircom_interrupt(irq, dev);
494 	enable_irq(irq);
495 }
496 #endif
497 
498 
499 static void initialize_card(struct xircom_private *card)
500 {
501 	void __iomem *ioaddr = card->ioaddr;
502 	unsigned long flags;
503 	u32 val;
504 
505 	spin_lock_irqsave(&card->lock, flags);
506 
507 	/* First: reset the card */
508 	val = xr32(CSR0);
509 	val |= 0x01;		/* Software reset */
510 	xw32(CSR0, val);
511 
512 	udelay(100);		/* give the card some time to reset */
513 
514 	val = xr32(CSR0);
515 	val &= ~0x01;		/* disable Software reset */
516 	xw32(CSR0, val);
517 
518 
519 	val = 0;		/* Value 0x00 is a safe and conservative value
520 				   for the PCI configuration settings */
521 	xw32(CSR0, val);
522 
523 
524 	disable_all_interrupts(card);
525 	deactivate_receiver(card);
526 	deactivate_transmitter(card);
527 
528 	spin_unlock_irqrestore(&card->lock, flags);
529 }
530 
531 /*
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.
536 */
537 static void trigger_transmit(struct xircom_private *card)
538 {
539 	void __iomem *ioaddr = card->ioaddr;
540 
541 	xw32(CSR1, 0);
542 }
543 
544 /*
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.
550 */
551 static void trigger_receive(struct xircom_private *card)
552 {
553 	void __iomem *ioaddr = card->ioaddr;
554 
555 	xw32(CSR2, 0);
556 }
557 
558 /*
559 setup_descriptors initializes the send and receive buffers to be valid
560 descriptors and programs the addresses into the card.
561 */
562 static void setup_descriptors(struct xircom_private *card)
563 {
564 	void __iomem *ioaddr = card->ioaddr;
565 	u32 address;
566 	int i;
567 
568 	BUG_ON(card->rx_buffer == NULL);
569 	BUG_ON(card->tx_buffer == NULL);
570 
571 	/* Receive descriptors */
572 	memset(card->rx_buffer, 0, 128);	/* clear the descriptors */
573 	for (i=0;i<NUMDESCRIPTORS;i++ ) {
574 
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);
581 
582 		/* Rx Descr2: address of the buffer
583 		   we store the buffer at the 2nd half of the page */
584 
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;
589 	}
590 
591 	wmb();
592 	/* Write the receive descriptor ring address to the card */
593 	address = card->rx_dma_handle;
594 	xw32(CSR3, address);	/* Receive descr list address */
595 
596 
597 	/* transmit descriptors */
598 	memset(card->tx_buffer, 0, 128);	/* clear the descriptors */
599 
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);
607 
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;
614 	}
615 
616 	wmb();
617 	/* wite the transmit descriptor ring to the card */
618 	address = card->tx_dma_handle;
619 	xw32(CSR4, address);	/* xmit descr list address */
620 }
621 
622 /*
623 remove_descriptors informs the card the descriptors are no longer
624 valid by setting the address in the card to 0x00.
625 */
626 static void remove_descriptors(struct xircom_private *card)
627 {
628 	void __iomem *ioaddr = card->ioaddr;
629 	unsigned int val;
630 
631 	val = 0;
632 	xw32(CSR3, val);	/* Receive descriptor address */
633 	xw32(CSR4, val);	/* Send descriptor address */
634 }
635 
636 /*
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.
639 
640 This function also clears the status-bit.
641 */
642 static int link_status_changed(struct xircom_private *card)
643 {
644 	void __iomem *ioaddr = card->ioaddr;
645 	unsigned int val;
646 
647 	val = xr32(CSR5);	/* Status register */
648 	if (!(val & (1 << 27)))	/* no change */
649 		return 0;
650 
651 	/* clear the event by writing a 1 to the bit in the
652 	   status register. */
653 	val = (1 << 27);
654 	xw32(CSR5, val);
655 
656 	return 1;
657 }
658 
659 
660 /*
661 transmit_active returns 1 if the transmitter on the card is
662 in a non-stopped state.
663 */
664 static int transmit_active(struct xircom_private *card)
665 {
666 	void __iomem *ioaddr = card->ioaddr;
667 
668 	if (!(xr32(CSR5) & (7 << 20)))	/* transmitter disabled */
669 		return 0;
670 
671 	return 1;
672 }
673 
674 /*
675 receive_active returns 1 if the receiver on the card is
676 in a non-stopped state.
677 */
678 static int receive_active(struct xircom_private *card)
679 {
680 	void __iomem *ioaddr = card->ioaddr;
681 
682 	if (!(xr32(CSR5) & (7 << 17)))	/* receiver disabled */
683 		return 0;
684 
685 	return 1;
686 }
687 
688 /*
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.
695 
696 must be called with the lock held and interrupts disabled.
697 */
698 static void activate_receiver(struct xircom_private *card)
699 {
700 	void __iomem *ioaddr = card->ioaddr;
701 	unsigned int val;
702 	int counter;
703 
704 	val = xr32(CSR6);	/* Operation mode */
705 
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)))
709 		return;
710 
711 
712 	val = val & ~2;		/* disable the receiver */
713 	xw32(CSR6, val);
714 
715 	counter = 10;
716 	while (counter > 0) {
717 		if (!receive_active(card))
718 			break;
719 		/* wait a while */
720 		udelay(50);
721 		counter--;
722 		if (counter <= 0)
723 			netdev_err(card->dev, "Receiver failed to deactivate\n");
724 	}
725 
726 	/* enable the receiver */
727 	val = xr32(CSR6);	/* Operation mode */
728 	val = val | 2;		/* enable the receiver */
729 	xw32(CSR6, val);
730 
731 	/* now wait for the card to activate again */
732 	counter = 10;
733 	while (counter > 0) {
734 		if (receive_active(card))
735 			break;
736 		/* wait a while */
737 		udelay(50);
738 		counter--;
739 		if (counter <= 0)
740 			netdev_err(card->dev,
741 				   "Receiver failed to re-activate\n");
742 	}
743 }
744 
745 /*
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.
749 
750 must be called with the lock held and interrupts disabled.
751 */
752 static void deactivate_receiver(struct xircom_private *card)
753 {
754 	void __iomem *ioaddr = card->ioaddr;
755 	unsigned int val;
756 	int counter;
757 
758 	val = xr32(CSR6);	/* Operation mode */
759 	val = val & ~2;		/* disable the receiver */
760 	xw32(CSR6, val);
761 
762 	counter = 10;
763 	while (counter > 0) {
764 		if (!receive_active(card))
765 			break;
766 		/* wait a while */
767 		udelay(50);
768 		counter--;
769 		if (counter <= 0)
770 			netdev_err(card->dev, "Receiver failed to deactivate\n");
771 	}
772 }
773 
774 
775 /*
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.
782 
783 must be called with the lock held and interrupts disabled.
784 */
785 static void activate_transmitter(struct xircom_private *card)
786 {
787 	void __iomem *ioaddr = card->ioaddr;
788 	unsigned int val;
789 	int counter;
790 
791 	val = xr32(CSR6);	/* Operation mode */
792 
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)))
796 		return;
797 
798 	val = val & ~(1 << 13);	/* disable the transmitter */
799 	xw32(CSR6, val);
800 
801 	counter = 10;
802 	while (counter > 0) {
803 		if (!transmit_active(card))
804 			break;
805 		/* wait a while */
806 		udelay(50);
807 		counter--;
808 		if (counter <= 0)
809 			netdev_err(card->dev,
810 				   "Transmitter failed to deactivate\n");
811 	}
812 
813 	/* enable the transmitter */
814 	val = xr32(CSR6);	/* Operation mode */
815 	val = val | (1 << 13);	/* enable the transmitter */
816 	xw32(CSR6, val);
817 
818 	/* now wait for the card to activate again */
819 	counter = 10;
820 	while (counter > 0) {
821 		if (transmit_active(card))
822 			break;
823 		/* wait a while */
824 		udelay(50);
825 		counter--;
826 		if (counter <= 0)
827 			netdev_err(card->dev,
828 				   "Transmitter failed to re-activate\n");
829 	}
830 }
831 
832 /*
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.
836 
837 must be called with the lock held and interrupts disabled.
838 */
839 static void deactivate_transmitter(struct xircom_private *card)
840 {
841 	void __iomem *ioaddr = card->ioaddr;
842 	unsigned int val;
843 	int counter;
844 
845 	val = xr32(CSR6);	/* Operation mode */
846 	val = val & ~2;		/* disable the transmitter */
847 	xw32(CSR6, val);
848 
849 	counter = 20;
850 	while (counter > 0) {
851 		if (!transmit_active(card))
852 			break;
853 		/* wait a while */
854 		udelay(50);
855 		counter--;
856 		if (counter <= 0)
857 			netdev_err(card->dev,
858 				   "Transmitter failed to deactivate\n");
859 	}
860 }
861 
862 
863 /*
864 enable_transmit_interrupt enables the transmit interrupt
865 
866 must be called with the lock held and interrupts disabled.
867 */
868 static void enable_transmit_interrupt(struct xircom_private *card)
869 {
870 	void __iomem *ioaddr = card->ioaddr;
871 	unsigned int val;
872 
873 	val = xr32(CSR7);	/* Interrupt enable register */
874 	val |= 1;		/* enable the transmit interrupt */
875 	xw32(CSR7, val);
876 }
877 
878 
879 /*
880 enable_receive_interrupt enables the receive interrupt
881 
882 must be called with the lock held and interrupts disabled.
883 */
884 static void enable_receive_interrupt(struct xircom_private *card)
885 {
886 	void __iomem *ioaddr = card->ioaddr;
887 	unsigned int val;
888 
889 	val = xr32(CSR7);	/* Interrupt enable register */
890 	val = val | (1 << 6);	/* enable the receive interrupt */
891 	xw32(CSR7, val);
892 }
893 
894 /*
895 enable_link_interrupt enables the link status change interrupt
896 
897 must be called with the lock held and interrupts disabled.
898 */
899 static void enable_link_interrupt(struct xircom_private *card)
900 {
901 	void __iomem *ioaddr = card->ioaddr;
902 	unsigned int val;
903 
904 	val = xr32(CSR7);	/* Interrupt enable register */
905 	val = val | (1 << 27);	/* enable the link status chage interrupt */
906 	xw32(CSR7, val);
907 }
908 
909 
910 
911 /*
912 disable_all_interrupts disables all interrupts
913 
914 must be called with the lock held and interrupts disabled.
915 */
916 static void disable_all_interrupts(struct xircom_private *card)
917 {
918 	void __iomem *ioaddr = card->ioaddr;
919 
920 	xw32(CSR7, 0);
921 }
922 
923 /*
924 enable_common_interrupts enables several weird interrupts
925 
926 must be called with the lock held and interrupts disabled.
927 */
928 static void enable_common_interrupts(struct xircom_private *card)
929 {
930 	void __iomem *ioaddr = card->ioaddr;
931 	unsigned int val;
932 
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 */
942 	xw32(CSR7, val);
943 }
944 
945 /*
946 enable_promisc starts promisc mode
947 
948 must be called with the lock held and interrupts disabled.
949 */
950 static int enable_promisc(struct xircom_private *card)
951 {
952 	void __iomem *ioaddr = card->ioaddr;
953 	unsigned int val;
954 
955 	val = xr32(CSR6);
956 	val = val | (1 << 6);
957 	xw32(CSR6, val);
958 
959 	return 1;
960 }
961 
962 
963 
964 
965 /*
966 link_status() checks the links status and will return 0 for no link, 10 for 10mbit link and 100 for.. guess what.
967 
968 Must be called in locked state with interrupts disabled
969 */
970 static int link_status(struct xircom_private *card)
971 {
972 	void __iomem *ioaddr = card->ioaddr;
973 	u8 val;
974 
975 	val = xr8(CSR12);
976 
977 	/* bit 2 is 0 for 10mbit link, 1 for not an 10mbit link */
978 	if (!(val & (1 << 2)))
979 		return 10;
980 	/* bit 1 is 0 for 100mbit link, 1 for not an 100mbit link */
981 	if (!(val & (1 << 1)))
982 		return 100;
983 
984 	/* If we get here -> no link at all */
985 
986 	return 0;
987 }
988 
989 
990 
991 
992 
993 /*
994   read_mac_address() reads the MAC address from the NIC and stores it in the "dev" structure.
995 
996   This function will take the spinlock itself and can, as a result, not be called with the lock helt.
997  */
998 static void read_mac_address(struct xircom_private *card)
999 {
1000 	void __iomem *ioaddr = card->ioaddr;
1001 	unsigned long flags;
1002 	u8 link;
1003 	int i;
1004 
1005 	spin_lock_irqsave(&card->lock, flags);
1006 
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;
1010 
1011 		xw32(CSR10, i);
1012 		tuple = xr32(CSR9);
1013 		xw32(CSR10, i + 1);
1014 		link = xr32(CSR9);
1015 		xw32(CSR10, i + 2);
1016 		data_id = xr32(CSR9);
1017 		xw32(CSR10, i + 3);
1018 		data_count = xr32(CSR9);
1019 		if ((tuple == 0x22) && (data_id == 0x04) && (data_count == 0x06)) {
1020 			int j;
1021 
1022 			for (j = 0; j < 6; j++) {
1023 				xw32(CSR10, i + j + 4);
1024 				card->dev->dev_addr[j] = xr32(CSR9) & 0xff;
1025 			}
1026 			break;
1027 		} else if (link == 0) {
1028 			break;
1029 		}
1030 	}
1031 	spin_unlock_irqrestore(&card->lock, flags);
1032 	pr_debug(" %pM\n", card->dev->dev_addr);
1033 }
1034 
1035 
1036 /*
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.
1040  */
1041 static void transceiver_voodoo(struct xircom_private *card)
1042 {
1043 	void __iomem *ioaddr = card->ioaddr;
1044 	unsigned long flags;
1045 
1046 	/* disable all powermanagement */
1047 	pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1048 
1049 	setup_descriptors(card);
1050 
1051 	spin_lock_irqsave(&card->lock, flags);
1052 
1053 	xw32(CSR15, 0x0008);
1054 	udelay(25);
1055 	xw32(CSR15, 0xa8050000);
1056 	udelay(25);
1057 	xw32(CSR15, 0xa00f0000);
1058 	udelay(25);
1059 
1060 	spin_unlock_irqrestore(&card->lock, flags);
1061 
1062 	netif_start_queue(card->dev);
1063 }
1064 
1065 
1066 static void xircom_up(struct xircom_private *card)
1067 {
1068 	unsigned long flags;
1069 	int i;
1070 
1071 	/* disable all powermanagement */
1072 	pci_write_config_dword(card->pdev, PCI_POWERMGMT, 0x0000);
1073 
1074 	setup_descriptors(card);
1075 
1076 	spin_lock_irqsave(&card->lock, flags);
1077 
1078 
1079 	enable_link_interrupt(card);
1080 	enable_transmit_interrupt(card);
1081 	enable_receive_interrupt(card);
1082 	enable_common_interrupts(card);
1083 	enable_promisc(card);
1084 
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]);
1088 
1089 
1090 	spin_unlock_irqrestore(&card->lock, flags);
1091 	trigger_receive(card);
1092 	trigger_transmit(card);
1093 	netif_start_queue(card->dev);
1094 }
1095 
1096 /* Bufferoffset is in BYTES */
1097 static void
1098 investigate_read_descriptor(struct net_device *dev, struct xircom_private *card,
1099 			    int descnr, unsigned int bufferoffset)
1100 {
1101 	int status;
1102 
1103 	status = le32_to_cpu(card->rx_buffer[4*descnr]);
1104 
1105 	if (status > 0) {		/* packet received */
1106 
1107 		/* TODO: discard error packets */
1108 
1109 		short pkt_len = ((status >> 16) & 0x7ff) - 4;
1110 					/* minus 4, we don't want the CRC */
1111 		struct sk_buff *skb;
1112 
1113 		if (pkt_len > 1518) {
1114 			netdev_err(dev, "Packet length %i is bogus\n", pkt_len);
1115 			pkt_len = 1518;
1116 		}
1117 
1118 		skb = netdev_alloc_skb(dev, pkt_len + 2);
1119 		if (skb == NULL) {
1120 			dev->stats.rx_dropped++;
1121 			goto out;
1122 		}
1123 		skb_reserve(skb, 2);
1124 		skb_copy_to_linear_data(skb,
1125 					&card->rx_buffer[bufferoffset / 4],
1126 					pkt_len);
1127 		skb_put(skb, pkt_len);
1128 		skb->protocol = eth_type_trans(skb, dev);
1129 		netif_rx(skb);
1130 		dev->stats.rx_packets++;
1131 		dev->stats.rx_bytes += pkt_len;
1132 
1133 out:
1134 		/* give the buffer back to the card */
1135 		card->rx_buffer[4*descnr] = cpu_to_le32(0x80000000);
1136 		trigger_receive(card);
1137 	}
1138 }
1139 
1140 
1141 /* Bufferoffset is in BYTES */
1142 static void
1143 investigate_write_descriptor(struct net_device *dev,
1144 			     struct xircom_private *card,
1145 			     int descnr, unsigned int bufferoffset)
1146 {
1147 	int status;
1148 
1149 	status = le32_to_cpu(card->tx_buffer[4*descnr]);
1150 #if 0
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);
1155 	}
1156 #endif
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]);
1161 		}
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++;
1169 	}
1170 }
1171 
1172 module_pci_driver(xircom_ops);
1173