1 /* ne2k-pci.c: A NE2000 clone on PCI bus driver for Linux. */
2 /*
3 	A Linux device driver for PCI NE2000 clones.
4 
5 	Authors and other copyright holders:
6 	1992-2000 by Donald Becker, NE2000 core and various modifications.
7 	1995-1998 by Paul Gortmaker, core modifications and PCI support.
8 	Copyright 1993 assigned to the United States Government as represented
9 	by the Director, National Security Agency.
10 
11 	This software may be used and distributed according to the terms of
12 	the GNU General Public License (GPL), incorporated herein by reference.
13 	Drivers based on or derived from this code fall under the GPL and must
14 	retain the authorship, copyright and license notice.  This file is not
15 	a complete program and may only be used when the entire operating
16 	system is licensed under the GPL.
17 
18 	The author may be reached as becker@scyld.com, or C/O
19 	Scyld Computing Corporation
20 	410 Severn Ave., Suite 210
21 	Annapolis MD 21403
22 
23 	Issues remaining:
24 	People are making PCI ne2000 clones! Oh the horror, the horror...
25 	Limited full-duplex support.
26 */
27 
28 #define DRV_NAME	"ne2k-pci"
29 #define DRV_VERSION	"1.02"
30 #define DRV_RELDATE	"10/19/2000"
31 
32 
33 /* The user-configurable values.
34    These may be modified when a driver module is loaded.*/
35 
36 static int debug = 1;			/* 1 normal messages, 0 quiet .. 7 verbose. */
37 
38 #define MAX_UNITS 8				/* More are supported, limit only on options */
39 /* Used to pass the full-duplex flag, etc. */
40 static int full_duplex[MAX_UNITS];
41 static int options[MAX_UNITS];
42 
43 /* Force a non std. amount of memory.  Units are 256 byte pages. */
44 /* #define PACKETBUF_MEMSIZE	0x40 */
45 
46 
47 #include <linux/module.h>
48 #include <linux/kernel.h>
49 #include <linux/sched.h>
50 #include <linux/errno.h>
51 #include <linux/pci.h>
52 #include <linux/init.h>
53 #include <linux/interrupt.h>
54 #include <linux/ethtool.h>
55 #include <linux/netdevice.h>
56 #include <linux/etherdevice.h>
57 
58 #include <asm/system.h>
59 #include <asm/io.h>
60 #include <asm/irq.h>
61 #include <asm/uaccess.h>
62 
63 #include "8390.h"
64 
65 /* These identify the driver base version and may not be removed. */
66 static char version[] __devinitdata =
67 KERN_INFO DRV_NAME ".c:v" DRV_VERSION " " DRV_RELDATE " D. Becker/P. Gortmaker\n"
68 KERN_INFO "  http://www.scyld.com/network/ne2k-pci.html\n";
69 
70 #if defined(__powerpc__)
71 #define inl_le(addr)  le32_to_cpu(inl(addr))
72 #define inw_le(addr)  le16_to_cpu(inw(addr))
73 #define insl insl_ns
74 #define outsl outsl_ns
75 #endif
76 
77 #define PFX DRV_NAME ": "
78 
79 MODULE_AUTHOR("Donald Becker / Paul Gortmaker");
80 MODULE_DESCRIPTION("PCI NE2000 clone driver");
81 MODULE_LICENSE("GPL");
82 
83 MODULE_PARM(debug, "i");
84 MODULE_PARM(options, "1-" __MODULE_STRING(MAX_UNITS) "i");
85 MODULE_PARM(full_duplex, "1-" __MODULE_STRING(MAX_UNITS) "i");
86 MODULE_PARM_DESC(debug, "debug level (1-2)");
87 MODULE_PARM_DESC(options, "Bit 5: full duplex");
88 MODULE_PARM_DESC(full_duplex, "full duplex setting(s) (1)");
89 
90 /* Some defines that people can play with if so inclined. */
91 
92 /* Use 32 bit data-movement operations instead of 16 bit. */
93 #define USE_LONGIO
94 
95 /* Do we implement the read before write bugfix ? */
96 /* #define NE_RW_BUGFIX */
97 
98 /* Flags.  We rename an existing ei_status field to store flags! */
99 /* Thus only the low 8 bits are usable for non-init-time flags. */
100 #define ne2k_flags reg0
101 enum {
102 	ONLY_16BIT_IO=8, ONLY_32BIT_IO=4,	/* Chip can do only 16/32-bit xfers. */
103 	FORCE_FDX=0x20,						/* User override. */
104 	REALTEK_FDX=0x40, HOLTEK_FDX=0x80,
105 	STOP_PG_0x60=0x100,
106 };
107 
108 enum ne2k_pci_chipsets {
109 	CH_RealTek_RTL_8029 = 0,
110 	CH_Winbond_89C940,
111 	CH_Compex_RL2000,
112 	CH_KTI_ET32P2,
113 	CH_NetVin_NV5000SC,
114 	CH_Via_86C926,
115 	CH_SureCom_NE34,
116 	CH_Winbond_W89C940F,
117 	CH_Holtek_HT80232,
118 	CH_Holtek_HT80229,
119 	CH_Winbond_89C940_8c4a,
120 };
121 
122 
123 static struct {
124 	char *name;
125 	int flags;
126 } pci_clone_list[] __devinitdata = {
127 	{"RealTek RTL-8029", REALTEK_FDX},
128 	{"Winbond 89C940", 0},
129 	{"Compex RL2000", 0},
130 	{"KTI ET32P2", 0},
131 	{"NetVin NV5000SC", 0},
132 	{"Via 86C926", ONLY_16BIT_IO},
133 	{"SureCom NE34", 0},
134 	{"Winbond W89C940F", 0},
135 	{"Holtek HT80232", ONLY_16BIT_IO | HOLTEK_FDX},
136 	{"Holtek HT80229", ONLY_32BIT_IO | HOLTEK_FDX | STOP_PG_0x60 },
137 	{"Winbond W89C940(misprogrammed)", 0},
138 	{0,}
139 };
140 
141 
142 static struct pci_device_id ne2k_pci_tbl[] = {
143 	{ 0x10ec, 0x8029, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_RealTek_RTL_8029 },
144 	{ 0x1050, 0x0940, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_89C940 },
145 	{ 0x11f6, 0x1401, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Compex_RL2000 },
146 	{ 0x8e2e, 0x3000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_KTI_ET32P2 },
147 	{ 0x4a14, 0x5000, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_NetVin_NV5000SC },
148 	{ 0x1106, 0x0926, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Via_86C926 },
149 	{ 0x10bd, 0x0e34, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_SureCom_NE34 },
150 	{ 0x1050, 0x5a5a, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_W89C940F },
151 	{ 0x12c3, 0x0058, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Holtek_HT80232 },
152 	{ 0x12c3, 0x5598, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Holtek_HT80229 },
153 	{ 0x8c4a, 0x1980, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CH_Winbond_89C940_8c4a },
154 	{ 0, }
155 };
156 MODULE_DEVICE_TABLE(pci, ne2k_pci_tbl);
157 
158 
159 /* ---- No user-serviceable parts below ---- */
160 
161 #define NE_BASE	 (dev->base_addr)
162 #define NE_CMD	 	0x00
163 #define NE_DATAPORT	0x10	/* NatSemi-defined port window offset. */
164 #define NE_RESET	0x1f	/* Issue a read to reset, a write to clear. */
165 #define NE_IO_EXTENT	0x20
166 
167 #define NESM_START_PG	0x40	/* First page of TX buffer */
168 #define NESM_STOP_PG	0x80	/* Last page +1 of RX ring */
169 
170 
171 static int ne2k_pci_open(struct net_device *dev);
172 static int ne2k_pci_close(struct net_device *dev);
173 
174 static void ne2k_pci_reset_8390(struct net_device *dev);
175 static void ne2k_pci_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr,
176 			  int ring_page);
177 static void ne2k_pci_block_input(struct net_device *dev, int count,
178 			  struct sk_buff *skb, int ring_offset);
179 static void ne2k_pci_block_output(struct net_device *dev, const int count,
180 		const unsigned char *buf, const int start_page);
181 static struct ethtool_ops ne2k_pci_ethtool_ops;
182 
183 
184 
185 /* There is no room in the standard 8390 structure for extra info we need,
186    so we build a meta/outer-wrapper structure.. */
187 struct ne2k_pci_card {
188 	struct net_device *dev;
189 	struct pci_dev *pci_dev;
190 };
191 
192 
193 
194 /*
195   NEx000-clone boards have a Station Address (SA) PROM (SAPROM) in the packet
196   buffer memory space.  By-the-spec NE2000 clones have 0x57,0x57 in bytes
197   0x0e,0x0f of the SAPROM, while other supposed NE2000 clones must be
198   detected by their SA prefix.
199 
200   Reading the SAPROM from a word-wide card with the 8390 set in byte-wide
201   mode results in doubled values, which can be detected and compensated for.
202 
203   The probe is also responsible for initializing the card and filling
204   in the 'dev' and 'ei_status' structures.
205 */
206 
207 
ne2k_pci_init_one(struct pci_dev * pdev,const struct pci_device_id * ent)208 static int __devinit ne2k_pci_init_one (struct pci_dev *pdev,
209 				     const struct pci_device_id *ent)
210 {
211 	struct net_device *dev;
212 	int i;
213 	unsigned char SA_prom[32];
214 	int start_page, stop_page;
215 	int irq, reg0, chip_idx = ent->driver_data;
216 	static unsigned int fnd_cnt;
217 	long ioaddr;
218 	int flags = pci_clone_list[chip_idx].flags;
219 
220 /* when built into the kernel, we only print version if device is found */
221 #ifndef MODULE
222 	static int printed_version;
223 	if (!printed_version++)
224 		printk(version);
225 #endif
226 
227 	fnd_cnt++;
228 
229 	i = pci_enable_device (pdev);
230 	if (i)
231 		return i;
232 
233 	ioaddr = pci_resource_start (pdev, 0);
234 	irq = pdev->irq;
235 
236 	if (!ioaddr || ((pci_resource_flags (pdev, 0) & IORESOURCE_IO) == 0)) {
237 		printk (KERN_ERR PFX "no I/O resource at PCI BAR #0\n");
238 		return -ENODEV;
239 	}
240 
241 	if (request_region (ioaddr, NE_IO_EXTENT, DRV_NAME) == NULL) {
242 		printk (KERN_ERR PFX "I/O resource 0x%x @ 0x%lx busy\n",
243 			NE_IO_EXTENT, ioaddr);
244 		return -EBUSY;
245 	}
246 
247 	reg0 = inb(ioaddr);
248 	if (reg0 == 0xFF)
249 		goto err_out_free_res;
250 
251 	/* Do a preliminary verification that we have a 8390. */
252 	{
253 		int regd;
254 		outb(E8390_NODMA+E8390_PAGE1+E8390_STOP, ioaddr + E8390_CMD);
255 		regd = inb(ioaddr + 0x0d);
256 		outb(0xff, ioaddr + 0x0d);
257 		outb(E8390_NODMA+E8390_PAGE0, ioaddr + E8390_CMD);
258 		inb(ioaddr + EN0_COUNTER0); /* Clear the counter by reading. */
259 		if (inb(ioaddr + EN0_COUNTER0) != 0) {
260 			outb(reg0, ioaddr);
261 			outb(regd, ioaddr + 0x0d);	/* Restore the old values. */
262 			goto err_out_free_res;
263 		}
264 	}
265 
266 	/* Allocate net_device, dev->priv; fill in 8390 specific dev fields. */
267 	dev = alloc_ei_netdev();
268 	if (!dev) {
269 		printk (KERN_ERR PFX "cannot allocate ethernet device\n");
270 		goto err_out_free_res;
271 	}
272 	SET_MODULE_OWNER(dev);
273 
274 	/* Reset card. Who knows what dain-bramaged state it was left in. */
275 	{
276 		unsigned long reset_start_time = jiffies;
277 
278 		outb(inb(ioaddr + NE_RESET), ioaddr + NE_RESET);
279 
280 		/* This looks like a horrible timing loop, but it should never take
281 		   more than a few cycles.
282 		*/
283 		while ((inb(ioaddr + EN0_ISR) & ENISR_RESET) == 0)
284 			/* Limit wait: '2' avoids jiffy roll-over. */
285 			if (jiffies - reset_start_time > 2) {
286 				printk(KERN_ERR PFX "Card failure (no reset ack).\n");
287 				goto err_out_free_netdev;
288 			}
289 
290 		outb(0xff, ioaddr + EN0_ISR);		/* Ack all intr. */
291 	}
292 
293 	/* Read the 16 bytes of station address PROM.
294 	   We must first initialize registers, similar to NS8390_init(eifdev, 0).
295 	   We can't reliably read the SAPROM address without this.
296 	   (I learned the hard way!). */
297 	{
298 		struct {unsigned char value, offset; } program_seq[] = {
299 			{E8390_NODMA+E8390_PAGE0+E8390_STOP, E8390_CMD}, /* Select page 0*/
300 			{0x49,	EN0_DCFG},	/* Set word-wide access. */
301 			{0x00,	EN0_RCNTLO},	/* Clear the count regs. */
302 			{0x00,	EN0_RCNTHI},
303 			{0x00,	EN0_IMR},	/* Mask completion irq. */
304 			{0xFF,	EN0_ISR},
305 			{E8390_RXOFF, EN0_RXCR},	/* 0x20  Set to monitor */
306 			{E8390_TXOFF, EN0_TXCR},	/* 0x02  and loopback mode. */
307 			{32,	EN0_RCNTLO},
308 			{0x00,	EN0_RCNTHI},
309 			{0x00,	EN0_RSARLO},	/* DMA starting at 0x0000. */
310 			{0x00,	EN0_RSARHI},
311 			{E8390_RREAD+E8390_START, E8390_CMD},
312 		};
313 		for (i = 0; i < sizeof(program_seq)/sizeof(program_seq[0]); i++)
314 			outb(program_seq[i].value, ioaddr + program_seq[i].offset);
315 
316 	}
317 
318 	/* Note: all PCI cards have at least 16 bit access, so we don't have
319 	   to check for 8 bit cards.  Most cards permit 32 bit access. */
320 	if (flags & ONLY_32BIT_IO) {
321 		for (i = 0; i < 4 ; i++)
322 			((u32 *)SA_prom)[i] = le32_to_cpu(inl(ioaddr + NE_DATAPORT));
323 	} else
324 		for(i = 0; i < 32 /*sizeof(SA_prom)*/; i++)
325 			SA_prom[i] = inb(ioaddr + NE_DATAPORT);
326 
327 	/* We always set the 8390 registers for word mode. */
328 	outb(0x49, ioaddr + EN0_DCFG);
329 	start_page = NESM_START_PG;
330 
331 	stop_page = flags & STOP_PG_0x60 ? 0x60 : NESM_STOP_PG;
332 
333 	/* Set up the rest of the parameters. */
334 	dev->irq = irq;
335 	dev->base_addr = ioaddr;
336 	pci_set_drvdata(pdev, dev);
337 
338 	ei_status.name = pci_clone_list[chip_idx].name;
339 	ei_status.tx_start_page = start_page;
340 	ei_status.stop_page = stop_page;
341 	ei_status.word16 = 1;
342 	ei_status.ne2k_flags = flags;
343 	if (fnd_cnt < MAX_UNITS) {
344 		if (full_duplex[fnd_cnt] > 0  ||  (options[fnd_cnt] & FORCE_FDX))
345 			ei_status.ne2k_flags |= FORCE_FDX;
346 	}
347 
348 	ei_status.rx_start_page = start_page + TX_PAGES;
349 #ifdef PACKETBUF_MEMSIZE
350 	/* Allow the packet buffer size to be overridden by know-it-alls. */
351 	ei_status.stop_page = ei_status.tx_start_page + PACKETBUF_MEMSIZE;
352 #endif
353 
354 	ei_status.reset_8390 = &ne2k_pci_reset_8390;
355 	ei_status.block_input = &ne2k_pci_block_input;
356 	ei_status.block_output = &ne2k_pci_block_output;
357 	ei_status.get_8390_hdr = &ne2k_pci_get_8390_hdr;
358 	ei_status.priv = (unsigned long) pdev;
359 	dev->open = &ne2k_pci_open;
360 	dev->stop = &ne2k_pci_close;
361 	dev->ethtool_ops = &ne2k_pci_ethtool_ops;
362 	NS8390_init(dev, 0);
363 
364 	i = register_netdev(dev);
365 	if (i)
366 		goto err_out_free_netdev;
367 
368 	printk("%s: %s found at %#lx, IRQ %d, ",
369 		   dev->name, pci_clone_list[chip_idx].name, ioaddr, dev->irq);
370 	for(i = 0; i < 6; i++) {
371 		printk("%2.2X%s", SA_prom[i], i == 5 ? ".\n": ":");
372 		dev->dev_addr[i] = SA_prom[i];
373 	}
374 
375 	return 0;
376 
377 err_out_free_netdev:
378 	kfree (dev);
379 err_out_free_res:
380 	release_region (ioaddr, NE_IO_EXTENT);
381 	pci_set_drvdata (pdev, NULL);
382 	return -ENODEV;
383 
384 }
385 
ne2k_pci_open(struct net_device * dev)386 static int ne2k_pci_open(struct net_device *dev)
387 {
388 	int ret = request_irq(dev->irq, ei_interrupt, SA_SHIRQ, dev->name, dev);
389 	if (ret)
390 		return ret;
391 
392 	/* Set full duplex for the chips that we know about. */
393 	if (ei_status.ne2k_flags & FORCE_FDX) {
394 		long ioaddr = dev->base_addr;
395 		if (ei_status.ne2k_flags & REALTEK_FDX) {
396 			outb(0xC0 + E8390_NODMA, ioaddr + NE_CMD); /* Page 3 */
397 			outb(inb(ioaddr + 0x20) | 0x80, ioaddr + 0x20);
398 		} else if (ei_status.ne2k_flags & HOLTEK_FDX)
399 			outb(inb(ioaddr + 0x20) | 0x80, ioaddr + 0x20);
400 	}
401 	ei_open(dev);
402 	return 0;
403 }
404 
ne2k_pci_close(struct net_device * dev)405 static int ne2k_pci_close(struct net_device *dev)
406 {
407 	ei_close(dev);
408 	free_irq(dev->irq, dev);
409 	return 0;
410 }
411 
412 /* Hard reset the card.  This used to pause for the same period that a
413    8390 reset command required, but that shouldn't be necessary. */
ne2k_pci_reset_8390(struct net_device * dev)414 static void ne2k_pci_reset_8390(struct net_device *dev)
415 {
416 	unsigned long reset_start_time = jiffies;
417 
418 	if (debug > 1) printk("%s: Resetting the 8390 t=%ld...",
419 						  dev->name, jiffies);
420 
421 	outb(inb(NE_BASE + NE_RESET), NE_BASE + NE_RESET);
422 
423 	ei_status.txing = 0;
424 	ei_status.dmaing = 0;
425 
426 	/* This check _should_not_ be necessary, omit eventually. */
427 	while ((inb(NE_BASE+EN0_ISR) & ENISR_RESET) == 0)
428 		if (jiffies - reset_start_time > 2) {
429 			printk("%s: ne2k_pci_reset_8390() did not complete.\n", dev->name);
430 			break;
431 		}
432 	outb(ENISR_RESET, NE_BASE + EN0_ISR);	/* Ack intr. */
433 }
434 
435 /* Grab the 8390 specific header. Similar to the block_input routine, but
436    we don't need to be concerned with ring wrap as the header will be at
437    the start of a page, so we optimize accordingly. */
438 
ne2k_pci_get_8390_hdr(struct net_device * dev,struct e8390_pkt_hdr * hdr,int ring_page)439 static void ne2k_pci_get_8390_hdr(struct net_device *dev, struct e8390_pkt_hdr *hdr, int ring_page)
440 {
441 
442 	long nic_base = dev->base_addr;
443 
444 	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
445 	if (ei_status.dmaing) {
446 		printk("%s: DMAing conflict in ne2k_pci_get_8390_hdr "
447 			   "[DMAstat:%d][irqlock:%d].\n",
448 			   dev->name, ei_status.dmaing, ei_status.irqlock);
449 		return;
450 	}
451 
452 	ei_status.dmaing |= 0x01;
453 	outb(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
454 	outb(sizeof(struct e8390_pkt_hdr), nic_base + EN0_RCNTLO);
455 	outb(0, nic_base + EN0_RCNTHI);
456 	outb(0, nic_base + EN0_RSARLO);		/* On page boundary */
457 	outb(ring_page, nic_base + EN0_RSARHI);
458 	outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
459 
460 	if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
461 		insw(NE_BASE + NE_DATAPORT, hdr, sizeof(struct e8390_pkt_hdr)>>1);
462 	} else {
463 		*(u32*)hdr = le32_to_cpu(inl(NE_BASE + NE_DATAPORT));
464 		le16_to_cpus(&hdr->count);
465 	}
466 
467 	outb(ENISR_RDC, nic_base + EN0_ISR);	/* Ack intr. */
468 	ei_status.dmaing &= ~0x01;
469 }
470 
471 /* Block input and output, similar to the Crynwr packet driver.  If you
472    are porting to a new ethercard, look at the packet driver source for hints.
473    The NEx000 doesn't share the on-board packet memory -- you have to put
474    the packet out through the "remote DMA" dataport using outb. */
475 
ne2k_pci_block_input(struct net_device * dev,int count,struct sk_buff * skb,int ring_offset)476 static void ne2k_pci_block_input(struct net_device *dev, int count,
477 				 struct sk_buff *skb, int ring_offset)
478 {
479 	long nic_base = dev->base_addr;
480 	char *buf = skb->data;
481 
482 	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
483 	if (ei_status.dmaing) {
484 		printk("%s: DMAing conflict in ne2k_pci_block_input "
485 			   "[DMAstat:%d][irqlock:%d].\n",
486 			   dev->name, ei_status.dmaing, ei_status.irqlock);
487 		return;
488 	}
489 	ei_status.dmaing |= 0x01;
490 	if (ei_status.ne2k_flags & ONLY_32BIT_IO)
491 		count = (count + 3) & 0xFFFC;
492 	outb(E8390_NODMA+E8390_PAGE0+E8390_START, nic_base+ NE_CMD);
493 	outb(count & 0xff, nic_base + EN0_RCNTLO);
494 	outb(count >> 8, nic_base + EN0_RCNTHI);
495 	outb(ring_offset & 0xff, nic_base + EN0_RSARLO);
496 	outb(ring_offset >> 8, nic_base + EN0_RSARHI);
497 	outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
498 
499 	if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
500 		insw(NE_BASE + NE_DATAPORT,buf,count>>1);
501 		if (count & 0x01) {
502 			buf[count-1] = inb(NE_BASE + NE_DATAPORT);
503 		}
504 	} else {
505 		insl(NE_BASE + NE_DATAPORT, buf, count>>2);
506 		if (count & 3) {
507 			buf += count & ~3;
508 			if (count & 2) {
509 				u16 *b = (u16 *)buf;
510 
511 				*b++ = le16_to_cpu(inw(NE_BASE + NE_DATAPORT));
512 				buf = (char *)b;
513 			}
514 			if (count & 1)
515 				*buf = inb(NE_BASE + NE_DATAPORT);
516 		}
517 	}
518 
519 	outb(ENISR_RDC, nic_base + EN0_ISR);	/* Ack intr. */
520 	ei_status.dmaing &= ~0x01;
521 }
522 
ne2k_pci_block_output(struct net_device * dev,int count,const unsigned char * buf,const int start_page)523 static void ne2k_pci_block_output(struct net_device *dev, int count,
524 				  const unsigned char *buf, const int start_page)
525 {
526 	long nic_base = NE_BASE;
527 	unsigned long dma_start;
528 
529 	/* On little-endian it's always safe to round the count up for
530 	   word writes. */
531 	if (ei_status.ne2k_flags & ONLY_32BIT_IO)
532 		count = (count + 3) & 0xFFFC;
533 	else
534 		if (count & 0x01)
535 			count++;
536 
537 	/* This *shouldn't* happen. If it does, it's the last thing you'll see */
538 	if (ei_status.dmaing) {
539 		printk("%s: DMAing conflict in ne2k_pci_block_output."
540 			   "[DMAstat:%d][irqlock:%d]\n",
541 			   dev->name, ei_status.dmaing, ei_status.irqlock);
542 		return;
543 	}
544 	ei_status.dmaing |= 0x01;
545 	/* We should already be in page 0, but to be safe... */
546 	outb(E8390_PAGE0+E8390_START+E8390_NODMA, nic_base + NE_CMD);
547 
548 #ifdef NE8390_RW_BUGFIX
549 	/* Handle the read-before-write bug the same way as the
550 	   Crynwr packet driver -- the NatSemi method doesn't work.
551 	   Actually this doesn't always work either, but if you have
552 	   problems with your NEx000 this is better than nothing! */
553 	outb(0x42, nic_base + EN0_RCNTLO);
554 	outb(0x00, nic_base + EN0_RCNTHI);
555 	outb(0x42, nic_base + EN0_RSARLO);
556 	outb(0x00, nic_base + EN0_RSARHI);
557 	outb(E8390_RREAD+E8390_START, nic_base + NE_CMD);
558 #endif
559 	outb(ENISR_RDC, nic_base + EN0_ISR);
560 
561    /* Now the normal output. */
562 	outb(count & 0xff, nic_base + EN0_RCNTLO);
563 	outb(count >> 8,   nic_base + EN0_RCNTHI);
564 	outb(0x00, nic_base + EN0_RSARLO);
565 	outb(start_page, nic_base + EN0_RSARHI);
566 	outb(E8390_RWRITE+E8390_START, nic_base + NE_CMD);
567 	if (ei_status.ne2k_flags & ONLY_16BIT_IO) {
568 		outsw(NE_BASE + NE_DATAPORT, buf, count>>1);
569 	} else {
570 		outsl(NE_BASE + NE_DATAPORT, buf, count>>2);
571 		if (count & 3) {
572 			buf += count & ~3;
573 			if (count & 2) {
574 				u16 *b = (u16 *)buf;
575 
576 				outw(cpu_to_le16(*b++), NE_BASE + NE_DATAPORT);
577 				buf = (char *)b;
578 			}
579 		}
580 	}
581 
582 	dma_start = jiffies;
583 
584 	while ((inb(nic_base + EN0_ISR) & ENISR_RDC) == 0)
585 		if (jiffies - dma_start > 2) {			/* Avoid clock roll-over. */
586 			printk(KERN_WARNING "%s: timeout waiting for Tx RDC.\n", dev->name);
587 			ne2k_pci_reset_8390(dev);
588 			NS8390_init(dev,1);
589 			break;
590 		}
591 
592 	outb(ENISR_RDC, nic_base + EN0_ISR);	/* Ack intr. */
593 	ei_status.dmaing &= ~0x01;
594 	return;
595 }
596 
ne2k_pci_get_drvinfo(struct net_device * dev,struct ethtool_drvinfo * info)597 static void ne2k_pci_get_drvinfo(struct net_device *dev,
598 				 struct ethtool_drvinfo *info)
599 {
600 	struct ei_device *ei = dev->priv;
601 	struct pci_dev *pci_dev = (struct pci_dev *) ei->priv;
602 
603 	strcpy(info->driver, DRV_NAME);
604 	strcpy(info->version, DRV_VERSION);
605 	strcpy(info->bus_info, pci_name(pci_dev));
606 }
607 
608 static struct ethtool_ops ne2k_pci_ethtool_ops = {
609 	.get_drvinfo		= ne2k_pci_get_drvinfo,
610 	.get_tx_csum		= ethtool_op_get_tx_csum,
611 	.get_sg			= ethtool_op_get_sg,
612 };
613 
ne2k_pci_remove_one(struct pci_dev * pdev)614 static void __devexit ne2k_pci_remove_one (struct pci_dev *pdev)
615 {
616 	struct net_device *dev = pci_get_drvdata(pdev);
617 
618 	if (!dev)
619 		BUG();
620 
621 	unregister_netdev(dev);
622 	release_region(dev->base_addr, NE_IO_EXTENT);
623 	kfree(dev);
624 	pci_disable_device(pdev);
625 	pci_set_drvdata(pdev, NULL);
626 }
627 
628 
629 static struct pci_driver ne2k_driver = {
630 	.name		= DRV_NAME,
631 	.probe		= ne2k_pci_init_one,
632 	.remove		= __devexit_p(ne2k_pci_remove_one),
633 	.id_table	= ne2k_pci_tbl,
634 };
635 
636 
ne2k_pci_init(void)637 static int __init ne2k_pci_init(void)
638 {
639 /* when a module, this is printed whether or not devices are found in probe */
640 #ifdef MODULE
641 	printk(version);
642 #endif
643 	return pci_module_init (&ne2k_driver);
644 }
645 
646 
ne2k_pci_cleanup(void)647 static void __exit ne2k_pci_cleanup(void)
648 {
649 	pci_unregister_driver (&ne2k_driver);
650 }
651 
652 module_init(ne2k_pci_init);
653 module_exit(ne2k_pci_cleanup);
654