1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3 ** hp100.c
4 ** HP CASCADE Architecture Driver for 100VG-AnyLan Network Adapters
5 **
6 ** $Id: hp100.c,v 1.58 2001/09/24 18:03:01 perex Exp perex $
7 **
8 ** Based on the HP100 driver written by Jaroslav Kysela <perex@jcu.cz>
9 ** Extended for new busmaster capable chipsets by
10 ** Siegfried "Frieder" Loeffler (dg1sek) <floeff@mathematik.uni-stuttgart.de>
11 **
12 ** Maintained by: Jaroslav Kysela <perex@perex.cz>
13 **
14 ** This driver has only been tested with
15 ** -- HP J2585B 10/100 Mbit/s PCI Busmaster
16 ** -- HP J2585A 10/100 Mbit/s PCI
17 ** -- HP J2970A 10 Mbit/s PCI Combo 10base-T/BNC
18 ** -- HP J2973A 10 Mbit/s PCI 10base-T
19 ** -- HP J2573  10/100 ISA
20 ** -- Compex ReadyLink ENET100-VG4  10/100 Mbit/s PCI / EISA
21 ** -- Compex FreedomLine 100/VG  10/100 Mbit/s ISA / EISA / PCI
22 **
23 ** but it should also work with the other CASCADE based adapters.
24 **
25 ** TODO:
26 **       -  J2573 seems to hang sometimes when in shared memory mode.
27 **       -  Mode for Priority TX
28 **       -  Check PCI registers, performance might be improved?
29 **       -  To reduce interrupt load in busmaster, one could switch off
30 **          the interrupts that are used to refill the queues whenever the
31 **          queues are filled up to more than a certain threshold.
32 **       -  some updates for EISA version of card
33 **
34 **
35 **
36 ** 1.57c -> 1.58
37 **   - used indent to change coding-style
38 **   - added KTI DP-200 EISA ID
39 **   - ioremap is also used for low (<1MB) memory (multi-architecture support)
40 **
41 ** 1.57b -> 1.57c - Arnaldo Carvalho de Melo <acme@conectiva.com.br>
42 **   - release resources on failure in init_module
43 **
44 ** 1.57 -> 1.57b - Jean II
45 **   - fix spinlocks, SMP is now working !
46 **
47 ** 1.56 -> 1.57
48 **   - updates for new PCI interface for 2.1 kernels
49 **
50 ** 1.55 -> 1.56
51 **   - removed printk in misc. interrupt and update statistics to allow
52 **     monitoring of card status
53 **   - timing changes in xmit routines, relogin to 100VG hub added when
54 **     driver does reset
55 **   - included fix for Compex FreedomLine PCI adapter
56 **
57 ** 1.54 -> 1.55
58 **   - fixed bad initialization in init_module
59 **   - added Compex FreedomLine adapter
60 **   - some fixes in card initialization
61 **
62 ** 1.53 -> 1.54
63 **   - added hardware multicast filter support (doesn't work)
64 **   - little changes in hp100_sense_lan routine
65 **     - added support for Coax and AUI (J2970)
66 **   - fix for multiple cards and hp100_mode parameter (insmod)
67 **   - fix for shared IRQ
68 **
69 ** 1.52 -> 1.53
70 **   - fixed bug in multicast support
71 **
72 */
73 
74 #define HP100_DEFAULT_PRIORITY_TX 0
75 
76 #undef HP100_DEBUG
77 #undef HP100_DEBUG_B		/* Trace  */
78 #undef HP100_DEBUG_BM		/* Debug busmaster code (PDL stuff) */
79 
80 #undef HP100_DEBUG_TRAINING	/* Debug login-to-hub procedure */
81 #undef HP100_DEBUG_TX
82 #undef HP100_DEBUG_IRQ
83 #undef HP100_DEBUG_RX
84 
85 #undef HP100_MULTICAST_FILTER	/* Need to be debugged... */
86 
87 #include <linux/module.h>
88 #include <linux/kernel.h>
89 #include <linux/sched.h>
90 #include <linux/string.h>
91 #include <linux/errno.h>
92 #include <linux/ioport.h>
93 #include <linux/interrupt.h>
94 #include <linux/eisa.h>
95 #include <linux/pci.h>
96 #include <linux/dma-mapping.h>
97 #include <linux/spinlock.h>
98 #include <linux/netdevice.h>
99 #include <linux/etherdevice.h>
100 #include <linux/skbuff.h>
101 #include <linux/types.h>
102 #include <linux/delay.h>
103 #include <linux/init.h>
104 #include <linux/bitops.h>
105 #include <linux/jiffies.h>
106 
107 #include <asm/io.h>
108 
109 #include "hp100.h"
110 
111 /*
112  *  defines
113  */
114 
115 #define HP100_BUS_ISA     0
116 #define HP100_BUS_EISA    1
117 #define HP100_BUS_PCI     2
118 
119 #define HP100_REGION_SIZE	0x20	/* for ioports */
120 #define HP100_SIG_LEN		8	/* same as EISA_SIG_LEN */
121 
122 #define HP100_MAX_PACKET_SIZE	(1536+4)
123 #define HP100_MIN_PACKET_SIZE	60
124 
125 #ifndef HP100_DEFAULT_RX_RATIO
126 /* default - 75% onboard memory on the card are used for RX packets */
127 #define HP100_DEFAULT_RX_RATIO	75
128 #endif
129 
130 #ifndef HP100_DEFAULT_PRIORITY_TX
131 /* default - don't enable transmit outgoing packets as priority */
132 #define HP100_DEFAULT_PRIORITY_TX 0
133 #endif
134 
135 /*
136  *  structures
137  */
138 
139 struct hp100_private {
140 	spinlock_t lock;
141 	char id[HP100_SIG_LEN];
142 	u_short chip;
143 	u_short soft_model;
144 	u_int memory_size;
145 	u_int virt_memory_size;
146 	u_short rx_ratio;	/* 1 - 99 */
147 	u_short priority_tx;	/* != 0 - priority tx */
148 	u_short mode;		/* PIO, Shared Mem or Busmaster */
149 	u_char bus;
150 	struct pci_dev *pci_dev;
151 	short mem_mapped;	/* memory mapped access */
152 	void __iomem *mem_ptr_virt;	/* virtual memory mapped area, maybe NULL */
153 	unsigned long mem_ptr_phys;	/* physical memory mapped area */
154 	short lan_type;		/* 10Mb/s, 100Mb/s or -1 (error) */
155 	int hub_status;		/* was login to hub successful? */
156 	u_char mac1_mode;
157 	u_char mac2_mode;
158 	u_char hash_bytes[8];
159 
160 	/* Rings for busmaster mode: */
161 	hp100_ring_t *rxrhead;	/* Head (oldest) index into rxring */
162 	hp100_ring_t *rxrtail;	/* Tail (newest) index into rxring */
163 	hp100_ring_t *txrhead;	/* Head (oldest) index into txring */
164 	hp100_ring_t *txrtail;	/* Tail (newest) index into txring */
165 
166 	hp100_ring_t rxring[MAX_RX_PDL];
167 	hp100_ring_t txring[MAX_TX_PDL];
168 
169 	u_int *page_vaddr_algn;	/* Aligned virtual address of allocated page */
170 	u_long whatever_offset;	/* Offset to bus/phys/dma address */
171 	int rxrcommit;		/* # Rx PDLs committed to adapter */
172 	int txrcommit;		/* # Tx PDLs committed to adapter */
173 };
174 
175 /*
176  *  variables
177  */
178 #ifdef CONFIG_ISA
179 static const char *hp100_isa_tbl[] = {
180 	"HWPF150", /* HP J2573 rev A */
181 	"HWP1950", /* HP J2573 */
182 };
183 #endif
184 
185 static const struct eisa_device_id hp100_eisa_tbl[] = {
186 	{ "HWPF180" }, /* HP J2577 rev A */
187 	{ "HWP1920" }, /* HP 27248B */
188 	{ "HWP1940" }, /* HP J2577 */
189 	{ "HWP1990" }, /* HP J2577 */
190 	{ "CPX0301" }, /* ReadyLink ENET100-VG4 */
191 	{ "CPX0401" }, /* FreedomLine 100/VG */
192 	{ "" }	       /* Mandatory final entry ! */
193 };
194 MODULE_DEVICE_TABLE(eisa, hp100_eisa_tbl);
195 
196 static const struct pci_device_id hp100_pci_tbl[] = {
197 	{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585A, PCI_ANY_ID, PCI_ANY_ID,},
198 	{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2585B, PCI_ANY_ID, PCI_ANY_ID,},
199 	{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2970A, PCI_ANY_ID, PCI_ANY_ID,},
200 	{PCI_VENDOR_ID_HP, PCI_DEVICE_ID_HP_J2973A, PCI_ANY_ID, PCI_ANY_ID,},
201 	{PCI_VENDOR_ID_COMPEX, PCI_DEVICE_ID_COMPEX_ENET100VG4, PCI_ANY_ID, PCI_ANY_ID,},
202 	{PCI_VENDOR_ID_COMPEX2, PCI_DEVICE_ID_COMPEX2_100VG, PCI_ANY_ID, PCI_ANY_ID,},
203 /*	{PCI_VENDOR_ID_KTI, PCI_DEVICE_ID_KTI_DP200, PCI_ANY_ID, PCI_ANY_ID }, */
204 	{}			/* Terminating entry */
205 };
206 MODULE_DEVICE_TABLE(pci, hp100_pci_tbl);
207 
208 static int hp100_rx_ratio = HP100_DEFAULT_RX_RATIO;
209 static int hp100_priority_tx = HP100_DEFAULT_PRIORITY_TX;
210 static int hp100_mode = 1;
211 
212 module_param(hp100_rx_ratio, int, 0);
213 module_param(hp100_priority_tx, int, 0);
214 module_param(hp100_mode, int, 0);
215 
216 /*
217  *  prototypes
218  */
219 
220 static int hp100_probe1(struct net_device *dev, int ioaddr, u_char bus,
221 			struct pci_dev *pci_dev);
222 
223 
224 static int hp100_open(struct net_device *dev);
225 static int hp100_close(struct net_device *dev);
226 static netdev_tx_t hp100_start_xmit(struct sk_buff *skb,
227 				    struct net_device *dev);
228 static netdev_tx_t hp100_start_xmit_bm(struct sk_buff *skb,
229 				       struct net_device *dev);
230 static void hp100_rx(struct net_device *dev);
231 static struct net_device_stats *hp100_get_stats(struct net_device *dev);
232 static void hp100_misc_interrupt(struct net_device *dev);
233 static void hp100_update_stats(struct net_device *dev);
234 static void hp100_clear_stats(struct hp100_private *lp, int ioaddr);
235 static void hp100_set_multicast_list(struct net_device *dev);
236 static irqreturn_t hp100_interrupt(int irq, void *dev_id);
237 static void hp100_start_interface(struct net_device *dev);
238 static void hp100_stop_interface(struct net_device *dev);
239 static void hp100_load_eeprom(struct net_device *dev, u_short ioaddr);
240 static int hp100_sense_lan(struct net_device *dev);
241 static int hp100_login_to_vg_hub(struct net_device *dev,
242 				 u_short force_relogin);
243 static int hp100_down_vg_link(struct net_device *dev);
244 static void hp100_cascade_reset(struct net_device *dev, u_short enable);
245 static void hp100_BM_shutdown(struct net_device *dev);
246 static void hp100_mmuinit(struct net_device *dev);
247 static void hp100_init_pdls(struct net_device *dev);
248 static int hp100_init_rxpdl(struct net_device *dev,
249 			    register hp100_ring_t * ringptr,
250 			    register u_int * pdlptr);
251 static int hp100_init_txpdl(struct net_device *dev,
252 			    register hp100_ring_t * ringptr,
253 			    register u_int * pdlptr);
254 static void hp100_rxfill(struct net_device *dev);
255 static void hp100_hwinit(struct net_device *dev);
256 static void hp100_clean_txring(struct net_device *dev);
257 #ifdef HP100_DEBUG
258 static void hp100_RegisterDump(struct net_device *dev);
259 #endif
260 
261 /* Conversion to new PCI API :
262  * Convert an address in a kernel buffer to a bus/phys/dma address.
263  * This work *only* for memory fragments part of lp->page_vaddr,
264  * because it was properly DMA allocated via pci_alloc_consistent(),
265  * so we just need to "retrieve" the original mapping to bus/phys/dma
266  * address - Jean II */
virt_to_whatever(struct net_device * dev,u32 * ptr)267 static inline dma_addr_t virt_to_whatever(struct net_device *dev, u32 * ptr)
268 {
269 	struct hp100_private *lp = netdev_priv(dev);
270 	return ((u_long) ptr) + lp->whatever_offset;
271 }
272 
pdl_map_data(struct hp100_private * lp,void * data)273 static inline u_int pdl_map_data(struct hp100_private *lp, void *data)
274 {
275 	return pci_map_single(lp->pci_dev, data,
276 			      MAX_ETHER_SIZE, PCI_DMA_FROMDEVICE);
277 }
278 
279 /* TODO: This function should not really be needed in a good design... */
wait(void)280 static void wait(void)
281 {
282 	mdelay(1);
283 }
284 
285 /*
286  *  probe functions
287  *  These functions should - if possible - avoid doing write operations
288  *  since this could cause problems when the card is not installed.
289  */
290 
291 /*
292  * Read board id and convert to string.
293  * Effectively same code as decode_eisa_sig
294  */
hp100_read_id(int ioaddr)295 static const char *hp100_read_id(int ioaddr)
296 {
297 	int i;
298 	static char str[HP100_SIG_LEN];
299 	unsigned char sig[4], sum;
300         unsigned short rev;
301 
302 	hp100_page(ID_MAC_ADDR);
303 	sum = 0;
304 	for (i = 0; i < 4; i++) {
305 		sig[i] = hp100_inb(BOARD_ID + i);
306 		sum += sig[i];
307 	}
308 
309 	sum += hp100_inb(BOARD_ID + i);
310 	if (sum != 0xff)
311 		return NULL;	/* bad checksum */
312 
313         str[0] = ((sig[0] >> 2) & 0x1f) + ('A' - 1);
314         str[1] = (((sig[0] & 3) << 3) | (sig[1] >> 5)) + ('A' - 1);
315         str[2] = (sig[1] & 0x1f) + ('A' - 1);
316         rev = (sig[2] << 8) | sig[3];
317         sprintf(str + 3, "%04X", rev);
318 
319 	return str;
320 }
321 
322 #ifdef CONFIG_ISA
hp100_isa_probe1(struct net_device * dev,int ioaddr)323 static __init int hp100_isa_probe1(struct net_device *dev, int ioaddr)
324 {
325 	const char *sig;
326 	int i;
327 
328 	if (!request_region(ioaddr, HP100_REGION_SIZE, "hp100"))
329 		goto err;
330 
331 	if (hp100_inw(HW_ID) != HP100_HW_ID_CASCADE) {
332 		release_region(ioaddr, HP100_REGION_SIZE);
333 		goto err;
334 	}
335 
336 	sig = hp100_read_id(ioaddr);
337 	release_region(ioaddr, HP100_REGION_SIZE);
338 
339 	if (sig == NULL)
340 		goto err;
341 
342 	for (i = 0; i < ARRAY_SIZE(hp100_isa_tbl); i++) {
343 		if (!strcmp(hp100_isa_tbl[i], sig))
344 			break;
345 
346 	}
347 
348 	if (i < ARRAY_SIZE(hp100_isa_tbl))
349 		return hp100_probe1(dev, ioaddr, HP100_BUS_ISA, NULL);
350  err:
351 	return -ENODEV;
352 
353 }
354 /*
355  * Probe for ISA board.
356  * EISA and PCI are handled by device infrastructure.
357  */
358 
hp100_isa_probe(struct net_device * dev,int addr)359 static int  __init hp100_isa_probe(struct net_device *dev, int addr)
360 {
361 	int err = -ENODEV;
362 
363 	/* Probe for a specific ISA address */
364 	if (addr > 0xff && addr < 0x400)
365 		err = hp100_isa_probe1(dev, addr);
366 
367 	else if (addr != 0)
368 		err = -ENXIO;
369 
370 	else {
371 		/* Probe all ISA possible port regions */
372 		for (addr = 0x100; addr < 0x400; addr += 0x20) {
373 			err = hp100_isa_probe1(dev, addr);
374 			if (!err)
375 				break;
376 		}
377 	}
378 	return err;
379 }
380 #endif /* CONFIG_ISA */
381 
382 #if !defined(MODULE) && defined(CONFIG_ISA)
hp100_probe(int unit)383 struct net_device * __init hp100_probe(int unit)
384 {
385 	struct net_device *dev = alloc_etherdev(sizeof(struct hp100_private));
386 	int err;
387 
388 	if (!dev)
389 		return ERR_PTR(-ENODEV);
390 
391 #ifdef HP100_DEBUG_B
392 	hp100_outw(0x4200, TRACE);
393 	printk("hp100: %s: probe\n", dev->name);
394 #endif
395 
396 	if (unit >= 0) {
397 		sprintf(dev->name, "eth%d", unit);
398 		netdev_boot_setup_check(dev);
399 	}
400 
401 	err = hp100_isa_probe(dev, dev->base_addr);
402 	if (err)
403 		goto out;
404 
405 	return dev;
406  out:
407 	free_netdev(dev);
408 	return ERR_PTR(err);
409 }
410 #endif /* !MODULE && CONFIG_ISA */
411 
412 static const struct net_device_ops hp100_bm_netdev_ops = {
413 	.ndo_open		= hp100_open,
414 	.ndo_stop		= hp100_close,
415 	.ndo_start_xmit		= hp100_start_xmit_bm,
416 	.ndo_get_stats 		= hp100_get_stats,
417 	.ndo_set_rx_mode	= hp100_set_multicast_list,
418 	.ndo_set_mac_address 	= eth_mac_addr,
419 	.ndo_validate_addr	= eth_validate_addr,
420 };
421 
422 static const struct net_device_ops hp100_netdev_ops = {
423 	.ndo_open		= hp100_open,
424 	.ndo_stop		= hp100_close,
425 	.ndo_start_xmit		= hp100_start_xmit,
426 	.ndo_get_stats 		= hp100_get_stats,
427 	.ndo_set_rx_mode	= hp100_set_multicast_list,
428 	.ndo_set_mac_address 	= eth_mac_addr,
429 	.ndo_validate_addr	= eth_validate_addr,
430 };
431 
hp100_probe1(struct net_device * dev,int ioaddr,u_char bus,struct pci_dev * pci_dev)432 static int hp100_probe1(struct net_device *dev, int ioaddr, u_char bus,
433 			struct pci_dev *pci_dev)
434 {
435 	int i;
436 	int err = -ENODEV;
437 	const char *eid;
438 	u_int chip;
439 	u_char uc;
440 	u_int memory_size = 0, virt_memory_size = 0;
441 	u_short local_mode, lsw;
442 	short mem_mapped;
443 	unsigned long mem_ptr_phys;
444 	void __iomem *mem_ptr_virt;
445 	struct hp100_private *lp;
446 
447 #ifdef HP100_DEBUG_B
448 	hp100_outw(0x4201, TRACE);
449 	printk("hp100: %s: probe1\n", dev->name);
450 #endif
451 
452 	/* memory region for programmed i/o */
453 	if (!request_region(ioaddr, HP100_REGION_SIZE, "hp100"))
454 		goto out1;
455 
456 	if (hp100_inw(HW_ID) != HP100_HW_ID_CASCADE)
457 		goto out2;
458 
459 	chip = hp100_inw(PAGING) & HP100_CHIPID_MASK;
460 #ifdef HP100_DEBUG
461 	if (chip == HP100_CHIPID_SHASTA)
462 		printk("hp100: %s: Shasta Chip detected. (This is a pre 802.12 chip)\n", dev->name);
463 	else if (chip == HP100_CHIPID_RAINIER)
464 		printk("hp100: %s: Rainier Chip detected. (This is a pre 802.12 chip)\n", dev->name);
465 	else if (chip == HP100_CHIPID_LASSEN)
466 		printk("hp100: %s: Lassen Chip detected.\n", dev->name);
467 	else
468 		printk("hp100: %s: Warning: Unknown CASCADE chip (id=0x%.4x).\n", dev->name, chip);
469 #endif
470 
471 	dev->base_addr = ioaddr;
472 
473 	eid = hp100_read_id(ioaddr);
474 	if (eid == NULL) {	/* bad checksum? */
475 		printk(KERN_WARNING "%s: bad ID checksum at base port 0x%x\n",
476 		       __func__, ioaddr);
477 		goto out2;
478 	}
479 
480 	hp100_page(ID_MAC_ADDR);
481 	for (i = uc = 0; i < 7; i++)
482 		uc += hp100_inb(LAN_ADDR + i);
483 	if (uc != 0xff) {
484 		printk(KERN_WARNING
485 		       "%s: bad lan address checksum at port 0x%x)\n",
486 		       __func__, ioaddr);
487 		err = -EIO;
488 		goto out2;
489 	}
490 
491 	/* Make sure, that all registers are correctly updated... */
492 
493 	hp100_load_eeprom(dev, ioaddr);
494 	wait();
495 
496 	/*
497 	 * Determine driver operation mode
498 	 *
499 	 * Use the variable "hp100_mode" upon insmod or as kernel parameter to
500 	 * force driver modes:
501 	 * hp100_mode=1 -> default, use busmaster mode if configured.
502 	 * hp100_mode=2 -> enable shared memory mode
503 	 * hp100_mode=3 -> force use of i/o mapped mode.
504 	 * hp100_mode=4 -> same as 1, but re-set the enable bit on the card.
505 	 */
506 
507 	/*
508 	 * LSW values:
509 	 *   0x2278 -> J2585B, PnP shared memory mode
510 	 *   0x2270 -> J2585B, shared memory mode, 0xdc000
511 	 *   0xa23c -> J2585B, I/O mapped mode
512 	 *   0x2240 -> EISA COMPEX, BusMaster (Shasta Chip)
513 	 *   0x2220 -> EISA HP, I/O (Shasta Chip)
514 	 *   0x2260 -> EISA HP, BusMaster (Shasta Chip)
515 	 */
516 
517 #if 0
518 	local_mode = 0x2270;
519 	hp100_outw(0xfefe, OPTION_LSW);
520 	hp100_outw(local_mode | HP100_SET_LB | HP100_SET_HB, OPTION_LSW);
521 #endif
522 
523 	/* hp100_mode value maybe used in future by another card */
524 	local_mode = hp100_mode;
525 	if (local_mode < 1 || local_mode > 4)
526 		local_mode = 1;	/* default */
527 #ifdef HP100_DEBUG
528 	printk("hp100: %s: original LSW = 0x%x\n", dev->name,
529 	       hp100_inw(OPTION_LSW));
530 #endif
531 
532 	if (local_mode == 3) {
533 		hp100_outw(HP100_MEM_EN | HP100_RESET_LB, OPTION_LSW);
534 		hp100_outw(HP100_IO_EN | HP100_SET_LB, OPTION_LSW);
535 		hp100_outw(HP100_BM_WRITE | HP100_BM_READ | HP100_RESET_HB, OPTION_LSW);
536 		printk("hp100: IO mapped mode forced.\n");
537 	} else if (local_mode == 2) {
538 		hp100_outw(HP100_MEM_EN | HP100_SET_LB, OPTION_LSW);
539 		hp100_outw(HP100_IO_EN | HP100_SET_LB, OPTION_LSW);
540 		hp100_outw(HP100_BM_WRITE | HP100_BM_READ | HP100_RESET_HB, OPTION_LSW);
541 		printk("hp100: Shared memory mode requested.\n");
542 	} else if (local_mode == 4) {
543 		if (chip == HP100_CHIPID_LASSEN) {
544 			hp100_outw(HP100_BM_WRITE | HP100_BM_READ | HP100_SET_HB, OPTION_LSW);
545 			hp100_outw(HP100_IO_EN | HP100_MEM_EN | HP100_RESET_LB, OPTION_LSW);
546 			printk("hp100: Busmaster mode requested.\n");
547 		}
548 		local_mode = 1;
549 	}
550 
551 	if (local_mode == 1) {	/* default behaviour */
552 		lsw = hp100_inw(OPTION_LSW);
553 
554 		if ((lsw & HP100_IO_EN) && (~lsw & HP100_MEM_EN) &&
555 		    (~lsw & (HP100_BM_WRITE | HP100_BM_READ))) {
556 #ifdef HP100_DEBUG
557 			printk("hp100: %s: IO_EN bit is set on card.\n", dev->name);
558 #endif
559 			local_mode = 3;
560 		} else if (chip == HP100_CHIPID_LASSEN &&
561 			   (lsw & (HP100_BM_WRITE | HP100_BM_READ)) == (HP100_BM_WRITE | HP100_BM_READ)) {
562 			/* Conversion to new PCI API :
563 			 * I don't have the doc, but I assume that the card
564 			 * can map the full 32bit address space.
565 			 * Also, we can have EISA Busmaster cards (not tested),
566 			 * so beware !!! - Jean II */
567 			if((bus == HP100_BUS_PCI) &&
568 			   (pci_set_dma_mask(pci_dev, DMA_BIT_MASK(32)))) {
569 				/* Gracefully fallback to shared memory */
570 				goto busmasterfail;
571 			}
572 			printk("hp100: Busmaster mode enabled.\n");
573 			hp100_outw(HP100_MEM_EN | HP100_IO_EN | HP100_RESET_LB, OPTION_LSW);
574 		} else {
575 		busmasterfail:
576 #ifdef HP100_DEBUG
577 			printk("hp100: %s: Card not configured for BM or BM not supported with this card.\n", dev->name);
578 			printk("hp100: %s: Trying shared memory mode.\n", dev->name);
579 #endif
580 			/* In this case, try shared memory mode */
581 			local_mode = 2;
582 			hp100_outw(HP100_MEM_EN | HP100_SET_LB, OPTION_LSW);
583 			/* hp100_outw(HP100_IO_EN|HP100_RESET_LB, OPTION_LSW); */
584 		}
585 	}
586 #ifdef HP100_DEBUG
587 	printk("hp100: %s: new LSW = 0x%x\n", dev->name, hp100_inw(OPTION_LSW));
588 #endif
589 
590 	/* Check for shared memory on the card, eventually remap it */
591 	hp100_page(HW_MAP);
592 	mem_mapped = ((hp100_inw(OPTION_LSW) & (HP100_MEM_EN)) != 0);
593 	mem_ptr_phys = 0UL;
594 	mem_ptr_virt = NULL;
595 	memory_size = (8192 << ((hp100_inb(SRAM) >> 5) & 0x07));
596 	virt_memory_size = 0;
597 
598 	/* For memory mapped or busmaster mode, we want the memory address */
599 	if (mem_mapped || (local_mode == 1)) {
600 		mem_ptr_phys = (hp100_inw(MEM_MAP_LSW) | (hp100_inw(MEM_MAP_MSW) << 16));
601 		mem_ptr_phys &= ~0x1fff;	/* 8k alignment */
602 
603 		if (bus == HP100_BUS_ISA && (mem_ptr_phys & ~0xfffff) != 0) {
604 			printk("hp100: Can only use programmed i/o mode.\n");
605 			mem_ptr_phys = 0;
606 			mem_mapped = 0;
607 			local_mode = 3;	/* Use programmed i/o */
608 		}
609 
610 		/* We do not need access to shared memory in busmaster mode */
611 		/* However in slave mode we need to remap high (>1GB) card memory  */
612 		if (local_mode != 1) {	/* = not busmaster */
613 			/* We try with smaller memory sizes, if ioremap fails */
614 			for (virt_memory_size = memory_size; virt_memory_size > 16383; virt_memory_size >>= 1) {
615 				if ((mem_ptr_virt = ioremap((u_long) mem_ptr_phys, virt_memory_size)) == NULL) {
616 #ifdef HP100_DEBUG
617 					printk("hp100: %s: ioremap for 0x%x bytes high PCI memory at 0x%lx failed\n", dev->name, virt_memory_size, mem_ptr_phys);
618 #endif
619 				} else {
620 #ifdef HP100_DEBUG
621 					printk("hp100: %s: remapped 0x%x bytes high PCI memory at 0x%lx to %p.\n", dev->name, virt_memory_size, mem_ptr_phys, mem_ptr_virt);
622 #endif
623 					break;
624 				}
625 			}
626 
627 			if (mem_ptr_virt == NULL) {	/* all ioremap tries failed */
628 				printk("hp100: Failed to ioremap the PCI card memory. Will have to use i/o mapped mode.\n");
629 				local_mode = 3;
630 				virt_memory_size = 0;
631 			}
632 		}
633 	}
634 
635 	if (local_mode == 3) {	/* io mapped forced */
636 		mem_mapped = 0;
637 		mem_ptr_phys = 0;
638 		mem_ptr_virt = NULL;
639 		printk("hp100: Using (slow) programmed i/o mode.\n");
640 	}
641 
642 	/* Initialise the "private" data structure for this card. */
643 	lp = netdev_priv(dev);
644 
645 	spin_lock_init(&lp->lock);
646 	strlcpy(lp->id, eid, HP100_SIG_LEN);
647 	lp->chip = chip;
648 	lp->mode = local_mode;
649 	lp->bus = bus;
650 	lp->pci_dev = pci_dev;
651 	lp->priority_tx = hp100_priority_tx;
652 	lp->rx_ratio = hp100_rx_ratio;
653 	lp->mem_ptr_phys = mem_ptr_phys;
654 	lp->mem_ptr_virt = mem_ptr_virt;
655 	hp100_page(ID_MAC_ADDR);
656 	lp->soft_model = hp100_inb(SOFT_MODEL);
657 	lp->mac1_mode = HP100_MAC1MODE3;
658 	lp->mac2_mode = HP100_MAC2MODE3;
659 	memset(&lp->hash_bytes, 0x00, 8);
660 
661 	dev->base_addr = ioaddr;
662 
663 	lp->memory_size = memory_size;
664 	lp->virt_memory_size = virt_memory_size;
665 	lp->rx_ratio = hp100_rx_ratio;	/* can be conf'd with insmod */
666 
667 	if (lp->mode == 1)	/* busmaster */
668 		dev->netdev_ops = &hp100_bm_netdev_ops;
669 	else
670 		dev->netdev_ops = &hp100_netdev_ops;
671 
672 	/* Ask the card for which IRQ line it is configured */
673 	if (bus == HP100_BUS_PCI) {
674 		dev->irq = pci_dev->irq;
675 	} else {
676 		hp100_page(HW_MAP);
677 		dev->irq = hp100_inb(IRQ_CHANNEL) & HP100_IRQMASK;
678 		if (dev->irq == 2)
679 			dev->irq = 9;
680 	}
681 
682 	if (lp->mode == 1)	/* busmaster */
683 		dev->dma = 4;
684 
685 	/* Ask the card for its MAC address and store it for later use. */
686 	hp100_page(ID_MAC_ADDR);
687 	for (i = uc = 0; i < 6; i++)
688 		dev->dev_addr[i] = hp100_inb(LAN_ADDR + i);
689 
690 	/* Reset statistics (counters) */
691 	hp100_clear_stats(lp, ioaddr);
692 
693 	/* If busmaster mode is wanted, a dma-capable memory area is needed for
694 	 * the rx and tx PDLs
695 	 * PCI cards can access the whole PC memory. Therefore GFP_DMA is not
696 	 * needed for the allocation of the memory area.
697 	 */
698 
699 	/* TODO: We do not need this with old cards, where PDLs are stored
700 	 * in the cards shared memory area. But currently, busmaster has been
701 	 * implemented/tested only with the lassen chip anyway... */
702 	if (lp->mode == 1) {	/* busmaster */
703 		dma_addr_t page_baddr;
704 		/* Get physically continuous memory for TX & RX PDLs    */
705 		/* Conversion to new PCI API :
706 		 * Pages are always aligned and zeroed, no need to it ourself.
707 		 * Doc says should be OK for EISA bus as well - Jean II */
708 		lp->page_vaddr_algn = pci_alloc_consistent(lp->pci_dev, MAX_RINGSIZE, &page_baddr);
709 		if (!lp->page_vaddr_algn) {
710 			err = -ENOMEM;
711 			goto out_mem_ptr;
712 		}
713 		lp->whatever_offset = ((u_long) page_baddr) - ((u_long) lp->page_vaddr_algn);
714 
715 #ifdef HP100_DEBUG_BM
716 		printk("hp100: %s: Reserved DMA memory from 0x%x to 0x%x\n", dev->name, (u_int) lp->page_vaddr_algn, (u_int) lp->page_vaddr_algn + MAX_RINGSIZE);
717 #endif
718 		lp->rxrcommit = lp->txrcommit = 0;
719 		lp->rxrhead = lp->rxrtail = &(lp->rxring[0]);
720 		lp->txrhead = lp->txrtail = &(lp->txring[0]);
721 	}
722 
723 	/* Initialise the card. */
724 	/* (I'm not really sure if it's a good idea to do this during probing, but
725 	 * like this it's assured that the lan connection type can be sensed
726 	 * correctly)
727 	 */
728 	hp100_hwinit(dev);
729 
730 	/* Try to find out which kind of LAN the card is connected to. */
731 	lp->lan_type = hp100_sense_lan(dev);
732 
733 	/* Print out a message what about what we think we have probed. */
734 	printk("hp100: at 0x%x, IRQ %d, ", ioaddr, dev->irq);
735 	switch (bus) {
736 	case HP100_BUS_EISA:
737 		printk("EISA");
738 		break;
739 	case HP100_BUS_PCI:
740 		printk("PCI");
741 		break;
742 	default:
743 		printk("ISA");
744 		break;
745 	}
746 	printk(" bus, %dk SRAM (rx/tx %d%%).\n", lp->memory_size >> 10, lp->rx_ratio);
747 
748 	if (lp->mode == 2) {	/* memory mapped */
749 		printk("hp100: Memory area at 0x%lx-0x%lx", mem_ptr_phys,
750 				(mem_ptr_phys + (mem_ptr_phys > 0x100000 ? (u_long) lp->memory_size : 16 * 1024)) - 1);
751 		if (mem_ptr_virt)
752 			printk(" (virtual base %p)", mem_ptr_virt);
753 		printk(".\n");
754 
755 		/* Set for info when doing ifconfig */
756 		dev->mem_start = mem_ptr_phys;
757 		dev->mem_end = mem_ptr_phys + lp->memory_size;
758 	}
759 
760 	printk("hp100: ");
761 	if (lp->lan_type != HP100_LAN_ERR)
762 		printk("Adapter is attached to ");
763 	switch (lp->lan_type) {
764 	case HP100_LAN_100:
765 		printk("100Mb/s Voice Grade AnyLAN network.\n");
766 		break;
767 	case HP100_LAN_10:
768 		printk("10Mb/s network (10baseT).\n");
769 		break;
770 	case HP100_LAN_COAX:
771 		printk("10Mb/s network (coax).\n");
772 		break;
773 	default:
774 		printk("Warning! Link down.\n");
775 	}
776 
777 	err = register_netdev(dev);
778 	if (err)
779 		goto out3;
780 
781 	return 0;
782 out3:
783 	if (local_mode == 1)
784 		pci_free_consistent(lp->pci_dev, MAX_RINGSIZE + 0x0f,
785 				    lp->page_vaddr_algn,
786 				    virt_to_whatever(dev, lp->page_vaddr_algn));
787 out_mem_ptr:
788 	if (mem_ptr_virt)
789 		iounmap(mem_ptr_virt);
790 out2:
791 	release_region(ioaddr, HP100_REGION_SIZE);
792 out1:
793 	return err;
794 }
795 
796 /* This procedure puts the card into a stable init state */
hp100_hwinit(struct net_device * dev)797 static void hp100_hwinit(struct net_device *dev)
798 {
799 	int ioaddr = dev->base_addr;
800 	struct hp100_private *lp = netdev_priv(dev);
801 
802 #ifdef HP100_DEBUG_B
803 	hp100_outw(0x4202, TRACE);
804 	printk("hp100: %s: hwinit\n", dev->name);
805 #endif
806 
807 	/* Initialise the card. -------------------------------------------- */
808 
809 	/* Clear all pending Ints and disable Ints */
810 	hp100_page(PERFORMANCE);
811 	hp100_outw(0xfefe, IRQ_MASK);	/* mask off all ints */
812 	hp100_outw(0xffff, IRQ_STATUS);	/* clear all pending ints */
813 
814 	hp100_outw(HP100_INT_EN | HP100_RESET_LB, OPTION_LSW);
815 	hp100_outw(HP100_TRI_INT | HP100_SET_HB, OPTION_LSW);
816 
817 	if (lp->mode == 1) {
818 		hp100_BM_shutdown(dev);	/* disables BM, puts cascade in reset */
819 		wait();
820 	} else {
821 		hp100_outw(HP100_INT_EN | HP100_RESET_LB, OPTION_LSW);
822 		hp100_cascade_reset(dev, 1);
823 		hp100_page(MAC_CTRL);
824 		hp100_andb(~(HP100_RX_EN | HP100_TX_EN), MAC_CFG_1);
825 	}
826 
827 	/* Initiate EEPROM reload */
828 	hp100_load_eeprom(dev, 0);
829 
830 	wait();
831 
832 	/* Go into reset again. */
833 	hp100_cascade_reset(dev, 1);
834 
835 	/* Set Option Registers to a safe state  */
836 	hp100_outw(HP100_DEBUG_EN |
837 		   HP100_RX_HDR |
838 		   HP100_EE_EN |
839 		   HP100_BM_WRITE |
840 		   HP100_BM_READ | HP100_RESET_HB |
841 		   HP100_FAKE_INT |
842 		   HP100_INT_EN |
843 		   HP100_MEM_EN |
844 		   HP100_IO_EN | HP100_RESET_LB, OPTION_LSW);
845 
846 	hp100_outw(HP100_TRI_INT |
847 		   HP100_MMAP_DIS | HP100_SET_HB, OPTION_LSW);
848 
849 	hp100_outb(HP100_PRIORITY_TX |
850 		   HP100_ADV_NXT_PKT |
851 		   HP100_TX_CMD | HP100_RESET_LB, OPTION_MSW);
852 
853 	/* TODO: Configure MMU for Ram Test. */
854 	/* TODO: Ram Test. */
855 
856 	/* Re-check if adapter is still at same i/o location      */
857 	/* (If the base i/o in eeprom has been changed but the    */
858 	/* registers had not been changed, a reload of the eeprom */
859 	/* would move the adapter to the address stored in eeprom */
860 
861 	/* TODO: Code to implement. */
862 
863 	/* Until here it was code from HWdiscover procedure. */
864 	/* Next comes code from mmuinit procedure of SCO BM driver which is
865 	 * called from HWconfigure in the SCO driver.  */
866 
867 	/* Initialise MMU, eventually switch on Busmaster Mode, initialise
868 	 * multicast filter...
869 	 */
870 	hp100_mmuinit(dev);
871 
872 	/* We don't turn the interrupts on here - this is done by start_interface. */
873 	wait();			/* TODO: Do we really need this? */
874 
875 	/* Enable Hardware (e.g. unreset) */
876 	hp100_cascade_reset(dev, 0);
877 
878 	/* ------- initialisation complete ----------- */
879 
880 	/* Finally try to log in the Hub if there may be a VG connection. */
881 	if ((lp->lan_type == HP100_LAN_100) || (lp->lan_type == HP100_LAN_ERR))
882 		hp100_login_to_vg_hub(dev, 0);	/* relogin */
883 
884 }
885 
886 
887 /*
888  * mmuinit - Reinitialise Cascade MMU and MAC settings.
889  * Note: Must already be in reset and leaves card in reset.
890  */
hp100_mmuinit(struct net_device * dev)891 static void hp100_mmuinit(struct net_device *dev)
892 {
893 	int ioaddr = dev->base_addr;
894 	struct hp100_private *lp = netdev_priv(dev);
895 	int i;
896 
897 #ifdef HP100_DEBUG_B
898 	hp100_outw(0x4203, TRACE);
899 	printk("hp100: %s: mmuinit\n", dev->name);
900 #endif
901 
902 #ifdef HP100_DEBUG
903 	if (0 != (hp100_inw(OPTION_LSW) & HP100_HW_RST)) {
904 		printk("hp100: %s: Not in reset when entering mmuinit. Fix me.\n", dev->name);
905 		return;
906 	}
907 #endif
908 
909 	/* Make sure IRQs are masked off and ack'ed. */
910 	hp100_page(PERFORMANCE);
911 	hp100_outw(0xfefe, IRQ_MASK);	/* mask off all ints */
912 	hp100_outw(0xffff, IRQ_STATUS);	/* ack IRQ */
913 
914 	/*
915 	 * Enable Hardware
916 	 * - Clear Debug En, Rx Hdr Pipe, EE En, I/O En, Fake Int and Intr En
917 	 * - Set Tri-State Int, Bus Master Rd/Wr, and Mem Map Disable
918 	 * - Clear Priority, Advance Pkt and Xmit Cmd
919 	 */
920 
921 	hp100_outw(HP100_DEBUG_EN |
922 		   HP100_RX_HDR |
923 		   HP100_EE_EN | HP100_RESET_HB |
924 		   HP100_IO_EN |
925 		   HP100_FAKE_INT |
926 		   HP100_INT_EN | HP100_RESET_LB, OPTION_LSW);
927 
928 	hp100_outw(HP100_TRI_INT | HP100_SET_HB, OPTION_LSW);
929 
930 	if (lp->mode == 1) {	/* busmaster */
931 		hp100_outw(HP100_BM_WRITE |
932 			   HP100_BM_READ |
933 			   HP100_MMAP_DIS | HP100_SET_HB, OPTION_LSW);
934 	} else if (lp->mode == 2) {	/* memory mapped */
935 		hp100_outw(HP100_BM_WRITE |
936 			   HP100_BM_READ | HP100_RESET_HB, OPTION_LSW);
937 		hp100_outw(HP100_MMAP_DIS | HP100_RESET_HB, OPTION_LSW);
938 		hp100_outw(HP100_MEM_EN | HP100_SET_LB, OPTION_LSW);
939 		hp100_outw(HP100_IO_EN | HP100_SET_LB, OPTION_LSW);
940 	} else if (lp->mode == 3) {	/* i/o mapped mode */
941 		hp100_outw(HP100_MMAP_DIS | HP100_SET_HB |
942 			   HP100_IO_EN | HP100_SET_LB, OPTION_LSW);
943 	}
944 
945 	hp100_page(HW_MAP);
946 	hp100_outb(0, EARLYRXCFG);
947 	hp100_outw(0, EARLYTXCFG);
948 
949 	/*
950 	 * Enable Bus Master mode
951 	 */
952 	if (lp->mode == 1) {	/* busmaster */
953 		/* Experimental: Set some PCI configuration bits */
954 		hp100_page(HW_MAP);
955 		hp100_andb(~HP100_PDL_USE3, MODECTRL1);	/* BM engine read maximum */
956 		hp100_andb(~HP100_TX_DUALQ, MODECTRL1);	/* No Queue for Priority TX */
957 
958 		/* PCI Bus failures should result in a Misc. Interrupt */
959 		hp100_orb(HP100_EN_BUS_FAIL, MODECTRL2);
960 
961 		hp100_outw(HP100_BM_READ | HP100_BM_WRITE | HP100_SET_HB, OPTION_LSW);
962 		hp100_page(HW_MAP);
963 		/* Use Burst Mode and switch on PAGE_CK */
964 		hp100_orb(HP100_BM_BURST_RD | HP100_BM_BURST_WR, BM);
965 		if ((lp->chip == HP100_CHIPID_RAINIER) || (lp->chip == HP100_CHIPID_SHASTA))
966 			hp100_orb(HP100_BM_PAGE_CK, BM);
967 		hp100_orb(HP100_BM_MASTER, BM);
968 	} else {		/* not busmaster */
969 
970 		hp100_page(HW_MAP);
971 		hp100_andb(~HP100_BM_MASTER, BM);
972 	}
973 
974 	/*
975 	 * Divide card memory into regions for Rx, Tx and, if non-ETR chip, PDLs
976 	 */
977 	hp100_page(MMU_CFG);
978 	if (lp->mode == 1) {	/* only needed for Busmaster */
979 		int xmit_stop, recv_stop;
980 
981 		if ((lp->chip == HP100_CHIPID_RAINIER) ||
982 		    (lp->chip == HP100_CHIPID_SHASTA)) {
983 			int pdl_stop;
984 
985 			/*
986 			 * Each pdl is 508 bytes long. (63 frags * 4 bytes for address and
987 			 * 4 bytes for header). We will leave NUM_RXPDLS * 508 (rounded
988 			 * to the next higher 1k boundary) bytes for the rx-pdl's
989 			 * Note: For non-etr chips the transmit stop register must be
990 			 * programmed on a 1k boundary, i.e. bits 9:0 must be zero.
991 			 */
992 			pdl_stop = lp->memory_size;
993 			xmit_stop = (pdl_stop - 508 * (MAX_RX_PDL) - 16) & ~(0x03ff);
994 			recv_stop = (xmit_stop * (lp->rx_ratio) / 100) & ~(0x03ff);
995 			hp100_outw((pdl_stop >> 4) - 1, PDL_MEM_STOP);
996 #ifdef HP100_DEBUG_BM
997 			printk("hp100: %s: PDL_STOP = 0x%x\n", dev->name, pdl_stop);
998 #endif
999 		} else {
1000 			/* ETR chip (Lassen) in busmaster mode */
1001 			xmit_stop = (lp->memory_size) - 1;
1002 			recv_stop = ((lp->memory_size * lp->rx_ratio) / 100) & ~(0x03ff);
1003 		}
1004 
1005 		hp100_outw(xmit_stop >> 4, TX_MEM_STOP);
1006 		hp100_outw(recv_stop >> 4, RX_MEM_STOP);
1007 #ifdef HP100_DEBUG_BM
1008 		printk("hp100: %s: TX_STOP  = 0x%x\n", dev->name, xmit_stop >> 4);
1009 		printk("hp100: %s: RX_STOP  = 0x%x\n", dev->name, recv_stop >> 4);
1010 #endif
1011 	} else {
1012 		/* Slave modes (memory mapped and programmed io)  */
1013 		hp100_outw((((lp->memory_size * lp->rx_ratio) / 100) >> 4), RX_MEM_STOP);
1014 		hp100_outw(((lp->memory_size - 1) >> 4), TX_MEM_STOP);
1015 #ifdef HP100_DEBUG
1016 		printk("hp100: %s: TX_MEM_STOP: 0x%x\n", dev->name, hp100_inw(TX_MEM_STOP));
1017 		printk("hp100: %s: RX_MEM_STOP: 0x%x\n", dev->name, hp100_inw(RX_MEM_STOP));
1018 #endif
1019 	}
1020 
1021 	/* Write MAC address into page 1 */
1022 	hp100_page(MAC_ADDRESS);
1023 	for (i = 0; i < 6; i++)
1024 		hp100_outb(dev->dev_addr[i], MAC_ADDR + i);
1025 
1026 	/* Zero the multicast hash registers */
1027 	for (i = 0; i < 8; i++)
1028 		hp100_outb(0x0, HASH_BYTE0 + i);
1029 
1030 	/* Set up MAC defaults */
1031 	hp100_page(MAC_CTRL);
1032 
1033 	/* Go to LAN Page and zero all filter bits */
1034 	/* Zero accept error, accept multicast, accept broadcast and accept */
1035 	/* all directed packet bits */
1036 	hp100_andb(~(HP100_RX_EN |
1037 		     HP100_TX_EN |
1038 		     HP100_ACC_ERRORED |
1039 		     HP100_ACC_MC |
1040 		     HP100_ACC_BC | HP100_ACC_PHY), MAC_CFG_1);
1041 
1042 	hp100_outb(0x00, MAC_CFG_2);
1043 
1044 	/* Zero the frame format bit. This works around a training bug in the */
1045 	/* new hubs. */
1046 	hp100_outb(0x00, VG_LAN_CFG_2);	/* (use 802.3) */
1047 
1048 	if (lp->priority_tx)
1049 		hp100_outb(HP100_PRIORITY_TX | HP100_SET_LB, OPTION_MSW);
1050 	else
1051 		hp100_outb(HP100_PRIORITY_TX | HP100_RESET_LB, OPTION_MSW);
1052 
1053 	hp100_outb(HP100_ADV_NXT_PKT |
1054 		   HP100_TX_CMD | HP100_RESET_LB, OPTION_MSW);
1055 
1056 	/* If busmaster, initialize the PDLs */
1057 	if (lp->mode == 1)
1058 		hp100_init_pdls(dev);
1059 
1060 	/* Go to performance page and initialize isr and imr registers */
1061 	hp100_page(PERFORMANCE);
1062 	hp100_outw(0xfefe, IRQ_MASK);	/* mask off all ints */
1063 	hp100_outw(0xffff, IRQ_STATUS);	/* ack IRQ */
1064 }
1065 
1066 /*
1067  *  open/close functions
1068  */
1069 
hp100_open(struct net_device * dev)1070 static int hp100_open(struct net_device *dev)
1071 {
1072 	struct hp100_private *lp = netdev_priv(dev);
1073 #ifdef HP100_DEBUG_B
1074 	int ioaddr = dev->base_addr;
1075 #endif
1076 
1077 #ifdef HP100_DEBUG_B
1078 	hp100_outw(0x4204, TRACE);
1079 	printk("hp100: %s: open\n", dev->name);
1080 #endif
1081 
1082 	/* New: if bus is PCI or EISA, interrupts might be shared interrupts */
1083 	if (request_irq(dev->irq, hp100_interrupt,
1084 			lp->bus == HP100_BUS_PCI || lp->bus ==
1085 			HP100_BUS_EISA ? IRQF_SHARED : 0,
1086 			dev->name, dev)) {
1087 		printk("hp100: %s: unable to get IRQ %d\n", dev->name, dev->irq);
1088 		return -EAGAIN;
1089 	}
1090 
1091 	netif_trans_update(dev); /* prevent tx timeout */
1092 	netif_start_queue(dev);
1093 
1094 	lp->lan_type = hp100_sense_lan(dev);
1095 	lp->mac1_mode = HP100_MAC1MODE3;
1096 	lp->mac2_mode = HP100_MAC2MODE3;
1097 	memset(&lp->hash_bytes, 0x00, 8);
1098 
1099 	hp100_stop_interface(dev);
1100 
1101 	hp100_hwinit(dev);
1102 
1103 	hp100_start_interface(dev);	/* sets mac modes, enables interrupts */
1104 
1105 	return 0;
1106 }
1107 
1108 /* The close function is called when the interface is to be brought down */
hp100_close(struct net_device * dev)1109 static int hp100_close(struct net_device *dev)
1110 {
1111 	int ioaddr = dev->base_addr;
1112 	struct hp100_private *lp = netdev_priv(dev);
1113 
1114 #ifdef HP100_DEBUG_B
1115 	hp100_outw(0x4205, TRACE);
1116 	printk("hp100: %s: close\n", dev->name);
1117 #endif
1118 
1119 	hp100_page(PERFORMANCE);
1120 	hp100_outw(0xfefe, IRQ_MASK);	/* mask off all IRQs */
1121 
1122 	hp100_stop_interface(dev);
1123 
1124 	if (lp->lan_type == HP100_LAN_100)
1125 		lp->hub_status = hp100_login_to_vg_hub(dev, 0);
1126 
1127 	netif_stop_queue(dev);
1128 
1129 	free_irq(dev->irq, dev);
1130 
1131 #ifdef HP100_DEBUG
1132 	printk("hp100: %s: close LSW = 0x%x\n", dev->name,
1133 	       hp100_inw(OPTION_LSW));
1134 #endif
1135 
1136 	return 0;
1137 }
1138 
1139 
1140 /*
1141  * Configure the PDL Rx rings and LAN
1142  */
hp100_init_pdls(struct net_device * dev)1143 static void hp100_init_pdls(struct net_device *dev)
1144 {
1145 	struct hp100_private *lp = netdev_priv(dev);
1146 	hp100_ring_t *ringptr;
1147 	u_int *pageptr;		/* Warning : increment by 4 - Jean II */
1148 	int i;
1149 
1150 #ifdef HP100_DEBUG_B
1151 	int ioaddr = dev->base_addr;
1152 #endif
1153 
1154 #ifdef HP100_DEBUG_B
1155 	hp100_outw(0x4206, TRACE);
1156 	printk("hp100: %s: init pdls\n", dev->name);
1157 #endif
1158 
1159 	if (!lp->page_vaddr_algn)
1160 		printk("hp100: %s: Warning: lp->page_vaddr_algn not initialised!\n", dev->name);
1161 	else {
1162 		/* pageptr shall point into the DMA accessible memory region  */
1163 		/* we use this pointer to status the upper limit of allocated */
1164 		/* memory in the allocated page. */
1165 		/* note: align the pointers to the pci cache line size */
1166 		memset(lp->page_vaddr_algn, 0, MAX_RINGSIZE);	/* Zero  Rx/Tx ring page */
1167 		pageptr = lp->page_vaddr_algn;
1168 
1169 		lp->rxrcommit = 0;
1170 		ringptr = lp->rxrhead = lp->rxrtail = &(lp->rxring[0]);
1171 
1172 		/* Initialise Rx Ring */
1173 		for (i = MAX_RX_PDL - 1; i >= 0; i--) {
1174 			lp->rxring[i].next = ringptr;
1175 			ringptr = &(lp->rxring[i]);
1176 			pageptr += hp100_init_rxpdl(dev, ringptr, pageptr);
1177 		}
1178 
1179 		/* Initialise Tx Ring */
1180 		lp->txrcommit = 0;
1181 		ringptr = lp->txrhead = lp->txrtail = &(lp->txring[0]);
1182 		for (i = MAX_TX_PDL - 1; i >= 0; i--) {
1183 			lp->txring[i].next = ringptr;
1184 			ringptr = &(lp->txring[i]);
1185 			pageptr += hp100_init_txpdl(dev, ringptr, pageptr);
1186 		}
1187 	}
1188 }
1189 
1190 
1191 /* These functions "format" the entries in the pdl structure   */
1192 /* They return how much memory the fragments need.            */
hp100_init_rxpdl(struct net_device * dev,register hp100_ring_t * ringptr,register u32 * pdlptr)1193 static int hp100_init_rxpdl(struct net_device *dev,
1194 			    register hp100_ring_t * ringptr,
1195 			    register u32 * pdlptr)
1196 {
1197 	/* pdlptr is starting address for this pdl */
1198 
1199 	if (0 != (((unsigned long) pdlptr) & 0xf))
1200 		printk("hp100: %s: Init rxpdl: Unaligned pdlptr 0x%lx.\n",
1201 		       dev->name, (unsigned long) pdlptr);
1202 
1203 	ringptr->pdl = pdlptr + 1;
1204 	ringptr->pdl_paddr = virt_to_whatever(dev, pdlptr + 1);
1205 	ringptr->skb = NULL;
1206 
1207 	/*
1208 	 * Write address and length of first PDL Fragment (which is used for
1209 	 * storing the RX-Header
1210 	 * We use the 4 bytes _before_ the PDH in the pdl memory area to
1211 	 * store this information. (PDH is at offset 0x04)
1212 	 */
1213 	/* Note that pdlptr+1 and not pdlptr is the pointer to the PDH */
1214 
1215 	*(pdlptr + 2) = (u_int) virt_to_whatever(dev, pdlptr);	/* Address Frag 1 */
1216 	*(pdlptr + 3) = 4;	/* Length  Frag 1 */
1217 
1218 	return roundup(MAX_RX_FRAG * 2 + 2, 4);
1219 }
1220 
1221 
hp100_init_txpdl(struct net_device * dev,register hp100_ring_t * ringptr,register u32 * pdlptr)1222 static int hp100_init_txpdl(struct net_device *dev,
1223 			    register hp100_ring_t * ringptr,
1224 			    register u32 * pdlptr)
1225 {
1226 	if (0 != (((unsigned long) pdlptr) & 0xf))
1227 		printk("hp100: %s: Init txpdl: Unaligned pdlptr 0x%lx.\n", dev->name, (unsigned long) pdlptr);
1228 
1229 	ringptr->pdl = pdlptr;	/* +1; */
1230 	ringptr->pdl_paddr = virt_to_whatever(dev, pdlptr);	/* +1 */
1231 	ringptr->skb = NULL;
1232 
1233 	return roundup(MAX_TX_FRAG * 2 + 2, 4);
1234 }
1235 
1236 /*
1237  * hp100_build_rx_pdl allocates an skb_buff of maximum size plus two bytes
1238  * for possible odd word alignment rounding up to next dword and set PDL
1239  * address for fragment#2
1240  * Returns: 0 if unable to allocate skb_buff
1241  *          1 if successful
1242  */
hp100_build_rx_pdl(hp100_ring_t * ringptr,struct net_device * dev)1243 static int hp100_build_rx_pdl(hp100_ring_t * ringptr,
1244 			      struct net_device *dev)
1245 {
1246 #ifdef HP100_DEBUG_B
1247 	int ioaddr = dev->base_addr;
1248 #endif
1249 #ifdef HP100_DEBUG_BM
1250 	u_int *p;
1251 #endif
1252 
1253 #ifdef HP100_DEBUG_B
1254 	hp100_outw(0x4207, TRACE);
1255 	printk("hp100: %s: build rx pdl\n", dev->name);
1256 #endif
1257 
1258 	/* Allocate skb buffer of maximum size */
1259 	/* Note: This depends on the alloc_skb functions allocating more
1260 	 * space than requested, i.e. aligning to 16bytes */
1261 
1262 	ringptr->skb = netdev_alloc_skb(dev, roundup(MAX_ETHER_SIZE + 2, 4));
1263 
1264 	if (NULL != ringptr->skb) {
1265 		/*
1266 		 * Reserve 2 bytes at the head of the buffer to land the IP header
1267 		 * on a long word boundary (According to the Network Driver section
1268 		 * in the Linux KHG, this should help to increase performance.)
1269 		 */
1270 		skb_reserve(ringptr->skb, 2);
1271 
1272 		ringptr->skb->data = skb_put(ringptr->skb, MAX_ETHER_SIZE);
1273 
1274 		/* ringptr->pdl points to the beginning of the PDL, i.e. the PDH */
1275 		/* Note: 1st Fragment is used for the 4 byte packet status
1276 		 * (receive header). Its PDL entries are set up by init_rxpdl. So
1277 		 * here we only have to set up the PDL fragment entries for the data
1278 		 * part. Those 4 bytes will be stored in the DMA memory region
1279 		 * directly before the PDL.
1280 		 */
1281 #ifdef HP100_DEBUG_BM
1282 		printk("hp100: %s: build_rx_pdl: PDH@0x%x, skb->data (len %d) at 0x%x\n",
1283 				     dev->name, (u_int) ringptr->pdl,
1284 				     roundup(MAX_ETHER_SIZE + 2, 4),
1285 				     (unsigned int) ringptr->skb->data);
1286 #endif
1287 
1288 		/* Conversion to new PCI API : map skbuf data to PCI bus.
1289 		 * Doc says it's OK for EISA as well - Jean II */
1290 		ringptr->pdl[0] = 0x00020000;	/* Write PDH */
1291 		ringptr->pdl[3] = pdl_map_data(netdev_priv(dev),
1292 					       ringptr->skb->data);
1293 		ringptr->pdl[4] = MAX_ETHER_SIZE;	/* Length of Data */
1294 
1295 #ifdef HP100_DEBUG_BM
1296 		for (p = (ringptr->pdl); p < (ringptr->pdl + 5); p++)
1297 			printk("hp100: %s: Adr 0x%.8x = 0x%.8x\n", dev->name, (u_int) p, (u_int) * p);
1298 #endif
1299 		return 1;
1300 	}
1301 	/* else: */
1302 	/* alloc_skb failed (no memory) -> still can receive the header
1303 	 * fragment into PDL memory. make PDL safe by clearing msgptr and
1304 	 * making the PDL only 1 fragment (i.e. the 4 byte packet status)
1305 	 */
1306 #ifdef HP100_DEBUG_BM
1307 	printk("hp100: %s: build_rx_pdl: PDH@0x%x, No space for skb.\n", dev->name, (u_int) ringptr->pdl);
1308 #endif
1309 
1310 	ringptr->pdl[0] = 0x00010000;	/* PDH: Count=1 Fragment */
1311 
1312 	return 0;
1313 }
1314 
1315 /*
1316  *  hp100_rxfill - attempt to fill the Rx Ring will empty skb's
1317  *
1318  * Makes assumption that skb's are always contiguous memory areas and
1319  * therefore PDLs contain only 2 physical fragments.
1320  * -  While the number of Rx PDLs with buffers is less than maximum
1321  *      a.  Get a maximum packet size skb
1322  *      b.  Put the physical address of the buffer into the PDL.
1323  *      c.  Output physical address of PDL to adapter.
1324  */
hp100_rxfill(struct net_device * dev)1325 static void hp100_rxfill(struct net_device *dev)
1326 {
1327 	int ioaddr = dev->base_addr;
1328 
1329 	struct hp100_private *lp = netdev_priv(dev);
1330 	hp100_ring_t *ringptr;
1331 
1332 #ifdef HP100_DEBUG_B
1333 	hp100_outw(0x4208, TRACE);
1334 	printk("hp100: %s: rxfill\n", dev->name);
1335 #endif
1336 
1337 	hp100_page(PERFORMANCE);
1338 
1339 	while (lp->rxrcommit < MAX_RX_PDL) {
1340 		/*
1341 		   ** Attempt to get a buffer and build a Rx PDL.
1342 		 */
1343 		ringptr = lp->rxrtail;
1344 		if (0 == hp100_build_rx_pdl(ringptr, dev)) {
1345 			return;	/* None available, return */
1346 		}
1347 
1348 		/* Hand this PDL over to the card */
1349 		/* Note: This needs performance page selected! */
1350 #ifdef HP100_DEBUG_BM
1351 		printk("hp100: %s: rxfill: Hand to card: pdl #%d @0x%x phys:0x%x, buffer: 0x%x\n",
1352 				     dev->name, lp->rxrcommit, (u_int) ringptr->pdl,
1353 				     (u_int) ringptr->pdl_paddr, (u_int) ringptr->pdl[3]);
1354 #endif
1355 
1356 		hp100_outl((u32) ringptr->pdl_paddr, RX_PDA);
1357 
1358 		lp->rxrcommit += 1;
1359 		lp->rxrtail = ringptr->next;
1360 	}
1361 }
1362 
1363 /*
1364  * BM_shutdown - shutdown bus mastering and leave chip in reset state
1365  */
1366 
hp100_BM_shutdown(struct net_device * dev)1367 static void hp100_BM_shutdown(struct net_device *dev)
1368 {
1369 	int ioaddr = dev->base_addr;
1370 	struct hp100_private *lp = netdev_priv(dev);
1371 	unsigned long time;
1372 
1373 #ifdef HP100_DEBUG_B
1374 	hp100_outw(0x4209, TRACE);
1375 	printk("hp100: %s: bm shutdown\n", dev->name);
1376 #endif
1377 
1378 	hp100_page(PERFORMANCE);
1379 	hp100_outw(0xfefe, IRQ_MASK);	/* mask off all ints */
1380 	hp100_outw(0xffff, IRQ_STATUS);	/* Ack all ints */
1381 
1382 	/* Ensure Interrupts are off */
1383 	hp100_outw(HP100_INT_EN | HP100_RESET_LB, OPTION_LSW);
1384 
1385 	/* Disable all MAC activity */
1386 	hp100_page(MAC_CTRL);
1387 	hp100_andb(~(HP100_RX_EN | HP100_TX_EN), MAC_CFG_1);	/* stop rx/tx */
1388 
1389 	/* If cascade MMU is not already in reset */
1390 	if (0 != (hp100_inw(OPTION_LSW) & HP100_HW_RST)) {
1391 		/* Wait 1.3ms (10Mb max packet time) to ensure MAC is idle so
1392 		 * MMU pointers will not be reset out from underneath
1393 		 */
1394 		hp100_page(MAC_CTRL);
1395 		for (time = 0; time < 5000; time++) {
1396 			if ((hp100_inb(MAC_CFG_1) & (HP100_TX_IDLE | HP100_RX_IDLE)) == (HP100_TX_IDLE | HP100_RX_IDLE))
1397 				break;
1398 		}
1399 
1400 		/* Shutdown algorithm depends on the generation of Cascade */
1401 		if (lp->chip == HP100_CHIPID_LASSEN) {	/* ETR shutdown/reset */
1402 			/* Disable Busmaster mode and wait for bit to go to zero. */
1403 			hp100_page(HW_MAP);
1404 			hp100_andb(~HP100_BM_MASTER, BM);
1405 			/* 100 ms timeout */
1406 			for (time = 0; time < 32000; time++) {
1407 				if (0 == (hp100_inb(BM) & HP100_BM_MASTER))
1408 					break;
1409 			}
1410 		} else {	/* Shasta or Rainier Shutdown/Reset */
1411 			/* To ensure all bus master inloading activity has ceased,
1412 			 * wait for no Rx PDAs or no Rx packets on card.
1413 			 */
1414 			hp100_page(PERFORMANCE);
1415 			/* 100 ms timeout */
1416 			for (time = 0; time < 10000; time++) {
1417 				/* RX_PDL: PDLs not executed. */
1418 				/* RX_PKT_CNT: RX'd packets on card. */
1419 				if ((hp100_inb(RX_PDL) == 0) && (hp100_inb(RX_PKT_CNT) == 0))
1420 					break;
1421 			}
1422 
1423 			if (time >= 10000)
1424 				printk("hp100: %s: BM shutdown error.\n", dev->name);
1425 
1426 			/* To ensure all bus master outloading activity has ceased,
1427 			 * wait until the Tx PDA count goes to zero or no more Tx space
1428 			 * available in the Tx region of the card.
1429 			 */
1430 			/* 100 ms timeout */
1431 			for (time = 0; time < 10000; time++) {
1432 				if ((0 == hp100_inb(TX_PKT_CNT)) &&
1433 				    (0 != (hp100_inb(TX_MEM_FREE) & HP100_AUTO_COMPARE)))
1434 					break;
1435 			}
1436 
1437 			/* Disable Busmaster mode */
1438 			hp100_page(HW_MAP);
1439 			hp100_andb(~HP100_BM_MASTER, BM);
1440 		}	/* end of shutdown procedure for non-etr parts */
1441 
1442 		hp100_cascade_reset(dev, 1);
1443 	}
1444 	hp100_page(PERFORMANCE);
1445 	/* hp100_outw( HP100_BM_READ | HP100_BM_WRITE | HP100_RESET_HB, OPTION_LSW ); */
1446 	/* Busmaster mode should be shut down now. */
1447 }
1448 
hp100_check_lan(struct net_device * dev)1449 static int hp100_check_lan(struct net_device *dev)
1450 {
1451 	struct hp100_private *lp = netdev_priv(dev);
1452 
1453 	if (lp->lan_type < 0) {	/* no LAN type detected yet? */
1454 		hp100_stop_interface(dev);
1455 		if ((lp->lan_type = hp100_sense_lan(dev)) < 0) {
1456 			printk("hp100: %s: no connection found - check wire\n", dev->name);
1457 			hp100_start_interface(dev);	/* 10Mb/s RX packets maybe handled */
1458 			return -EIO;
1459 		}
1460 		if (lp->lan_type == HP100_LAN_100)
1461 			lp->hub_status = hp100_login_to_vg_hub(dev, 0);	/* relogin */
1462 		hp100_start_interface(dev);
1463 	}
1464 	return 0;
1465 }
1466 
1467 /*
1468  *  transmit functions
1469  */
1470 
1471 /* tx function for busmaster mode */
hp100_start_xmit_bm(struct sk_buff * skb,struct net_device * dev)1472 static netdev_tx_t hp100_start_xmit_bm(struct sk_buff *skb,
1473 				       struct net_device *dev)
1474 {
1475 	unsigned long flags;
1476 	int i, ok_flag;
1477 	int ioaddr = dev->base_addr;
1478 	struct hp100_private *lp = netdev_priv(dev);
1479 	hp100_ring_t *ringptr;
1480 
1481 #ifdef HP100_DEBUG_B
1482 	hp100_outw(0x4210, TRACE);
1483 	printk("hp100: %s: start_xmit_bm\n", dev->name);
1484 #endif
1485 	if (skb->len <= 0)
1486 		goto drop;
1487 
1488 	if (lp->chip == HP100_CHIPID_SHASTA && skb_padto(skb, ETH_ZLEN))
1489 		return NETDEV_TX_OK;
1490 
1491 	/* Get Tx ring tail pointer */
1492 	if (lp->txrtail->next == lp->txrhead) {
1493 		/* No memory. */
1494 #ifdef HP100_DEBUG
1495 		printk("hp100: %s: start_xmit_bm: No TX PDL available.\n", dev->name);
1496 #endif
1497 		/* not waited long enough since last tx? */
1498 		if (time_before(jiffies, dev_trans_start(dev) + HZ))
1499 			goto drop;
1500 
1501 		if (hp100_check_lan(dev))
1502 			goto drop;
1503 
1504 		if (lp->lan_type == HP100_LAN_100 && lp->hub_status < 0) {
1505 			/* we have a 100Mb/s adapter but it isn't connected to hub */
1506 			printk("hp100: %s: login to 100Mb/s hub retry\n", dev->name);
1507 			hp100_stop_interface(dev);
1508 			lp->hub_status = hp100_login_to_vg_hub(dev, 0);
1509 			hp100_start_interface(dev);
1510 		} else {
1511 			spin_lock_irqsave(&lp->lock, flags);
1512 			hp100_ints_off();	/* Useful ? Jean II */
1513 			i = hp100_sense_lan(dev);
1514 			hp100_ints_on();
1515 			spin_unlock_irqrestore(&lp->lock, flags);
1516 			if (i == HP100_LAN_ERR)
1517 				printk("hp100: %s: link down detected\n", dev->name);
1518 			else if (lp->lan_type != i) {	/* cable change! */
1519 				/* it's very hard - all network settings must be changed!!! */
1520 				printk("hp100: %s: cable change 10Mb/s <-> 100Mb/s detected\n", dev->name);
1521 				lp->lan_type = i;
1522 				hp100_stop_interface(dev);
1523 				if (lp->lan_type == HP100_LAN_100)
1524 					lp->hub_status = hp100_login_to_vg_hub(dev, 0);
1525 				hp100_start_interface(dev);
1526 			} else {
1527 				printk("hp100: %s: interface reset\n", dev->name);
1528 				hp100_stop_interface(dev);
1529 				if (lp->lan_type == HP100_LAN_100)
1530 					lp->hub_status = hp100_login_to_vg_hub(dev, 0);
1531 				hp100_start_interface(dev);
1532 			}
1533 		}
1534 
1535 		goto drop;
1536 	}
1537 
1538 	/*
1539 	 * we have to turn int's off before modifying this, otherwise
1540 	 * a tx_pdl_cleanup could occur at the same time
1541 	 */
1542 	spin_lock_irqsave(&lp->lock, flags);
1543 	ringptr = lp->txrtail;
1544 	lp->txrtail = ringptr->next;
1545 
1546 	/* Check whether packet has minimal packet size */
1547 	ok_flag = skb->len >= HP100_MIN_PACKET_SIZE;
1548 	i = ok_flag ? skb->len : HP100_MIN_PACKET_SIZE;
1549 
1550 	ringptr->skb = skb;
1551 	ringptr->pdl[0] = ((1 << 16) | i);	/* PDH: 1 Fragment & length */
1552 	if (lp->chip == HP100_CHIPID_SHASTA) {
1553 		/* TODO:Could someone who has the EISA card please check if this works? */
1554 		ringptr->pdl[2] = i;
1555 	} else {		/* Lassen */
1556 		/* In the PDL, don't use the padded size but the real packet size: */
1557 		ringptr->pdl[2] = skb->len;	/* 1st Frag: Length of frag */
1558 	}
1559 	/* Conversion to new PCI API : map skbuf data to PCI bus.
1560 	 * Doc says it's OK for EISA as well - Jean II */
1561 	ringptr->pdl[1] = ((u32) pci_map_single(lp->pci_dev, skb->data, ringptr->pdl[2], PCI_DMA_TODEVICE));	/* 1st Frag: Adr. of data */
1562 
1563 	/* Hand this PDL to the card. */
1564 	hp100_outl(ringptr->pdl_paddr, TX_PDA_L);	/* Low Prio. Queue */
1565 
1566 	lp->txrcommit++;
1567 
1568 	dev->stats.tx_packets++;
1569 	dev->stats.tx_bytes += skb->len;
1570 
1571 	spin_unlock_irqrestore(&lp->lock, flags);
1572 
1573 	return NETDEV_TX_OK;
1574 
1575 drop:
1576 	dev_kfree_skb(skb);
1577 	return NETDEV_TX_OK;
1578 }
1579 
1580 
1581 /* clean_txring checks if packets have been sent by the card by reading
1582  * the TX_PDL register from the performance page and comparing it to the
1583  * number of committed packets. It then frees the skb's of the packets that
1584  * obviously have been sent to the network.
1585  *
1586  * Needs the PERFORMANCE page selected.
1587  */
hp100_clean_txring(struct net_device * dev)1588 static void hp100_clean_txring(struct net_device *dev)
1589 {
1590 	struct hp100_private *lp = netdev_priv(dev);
1591 	int ioaddr = dev->base_addr;
1592 	int donecount;
1593 
1594 #ifdef HP100_DEBUG_B
1595 	hp100_outw(0x4211, TRACE);
1596 	printk("hp100: %s: clean txring\n", dev->name);
1597 #endif
1598 
1599 	/* How many PDLs have been transmitted? */
1600 	donecount = (lp->txrcommit) - hp100_inb(TX_PDL);
1601 
1602 #ifdef HP100_DEBUG
1603 	if (donecount > MAX_TX_PDL)
1604 		printk("hp100: %s: Warning: More PDLs transmitted than committed to card???\n", dev->name);
1605 #endif
1606 
1607 	for (; 0 != donecount; donecount--) {
1608 #ifdef HP100_DEBUG_BM
1609 		printk("hp100: %s: Free skb: data @0x%.8x txrcommit=0x%x TXPDL=0x%x, done=0x%x\n",
1610 				dev->name, (u_int) lp->txrhead->skb->data,
1611 				lp->txrcommit, hp100_inb(TX_PDL), donecount);
1612 #endif
1613 		/* Conversion to new PCI API : NOP */
1614 		pci_unmap_single(lp->pci_dev, (dma_addr_t) lp->txrhead->pdl[1], lp->txrhead->pdl[2], PCI_DMA_TODEVICE);
1615 		dev_consume_skb_any(lp->txrhead->skb);
1616 		lp->txrhead->skb = NULL;
1617 		lp->txrhead = lp->txrhead->next;
1618 		lp->txrcommit--;
1619 	}
1620 }
1621 
1622 /* tx function for slave modes */
hp100_start_xmit(struct sk_buff * skb,struct net_device * dev)1623 static netdev_tx_t hp100_start_xmit(struct sk_buff *skb,
1624 				    struct net_device *dev)
1625 {
1626 	unsigned long flags;
1627 	int i, ok_flag;
1628 	int ioaddr = dev->base_addr;
1629 	u_short val;
1630 	struct hp100_private *lp = netdev_priv(dev);
1631 
1632 #ifdef HP100_DEBUG_B
1633 	hp100_outw(0x4212, TRACE);
1634 	printk("hp100: %s: start_xmit\n", dev->name);
1635 #endif
1636 	if (skb->len <= 0)
1637 		goto drop;
1638 
1639 	if (hp100_check_lan(dev))
1640 		goto drop;
1641 
1642 	/* If there is not enough free memory on the card... */
1643 	i = hp100_inl(TX_MEM_FREE) & 0x7fffffff;
1644 	if (!(((i / 2) - 539) > (skb->len + 16) && (hp100_inb(TX_PKT_CNT) < 255))) {
1645 #ifdef HP100_DEBUG
1646 		printk("hp100: %s: start_xmit: tx free mem = 0x%x\n", dev->name, i);
1647 #endif
1648 		/* not waited long enough since last failed tx try? */
1649 		if (time_before(jiffies, dev_trans_start(dev) + HZ)) {
1650 #ifdef HP100_DEBUG
1651 			printk("hp100: %s: trans_start timing problem\n",
1652 			       dev->name);
1653 #endif
1654 			goto drop;
1655 		}
1656 		if (lp->lan_type == HP100_LAN_100 && lp->hub_status < 0) {
1657 			/* we have a 100Mb/s adapter but it isn't connected to hub */
1658 			printk("hp100: %s: login to 100Mb/s hub retry\n", dev->name);
1659 			hp100_stop_interface(dev);
1660 			lp->hub_status = hp100_login_to_vg_hub(dev, 0);
1661 			hp100_start_interface(dev);
1662 		} else {
1663 			spin_lock_irqsave(&lp->lock, flags);
1664 			hp100_ints_off();	/* Useful ? Jean II */
1665 			i = hp100_sense_lan(dev);
1666 			hp100_ints_on();
1667 			spin_unlock_irqrestore(&lp->lock, flags);
1668 			if (i == HP100_LAN_ERR)
1669 				printk("hp100: %s: link down detected\n", dev->name);
1670 			else if (lp->lan_type != i) {	/* cable change! */
1671 				/* it's very hard - all network setting must be changed!!! */
1672 				printk("hp100: %s: cable change 10Mb/s <-> 100Mb/s detected\n", dev->name);
1673 				lp->lan_type = i;
1674 				hp100_stop_interface(dev);
1675 				if (lp->lan_type == HP100_LAN_100)
1676 					lp->hub_status = hp100_login_to_vg_hub(dev, 0);
1677 				hp100_start_interface(dev);
1678 			} else {
1679 				printk("hp100: %s: interface reset\n", dev->name);
1680 				hp100_stop_interface(dev);
1681 				if (lp->lan_type == HP100_LAN_100)
1682 					lp->hub_status = hp100_login_to_vg_hub(dev, 0);
1683 				hp100_start_interface(dev);
1684 				mdelay(1);
1685 			}
1686 		}
1687 		goto drop;
1688 	}
1689 
1690 	for (i = 0; i < 6000 && (hp100_inb(OPTION_MSW) & HP100_TX_CMD); i++) {
1691 #ifdef HP100_DEBUG_TX
1692 		printk("hp100: %s: start_xmit: busy\n", dev->name);
1693 #endif
1694 	}
1695 
1696 	spin_lock_irqsave(&lp->lock, flags);
1697 	hp100_ints_off();
1698 	val = hp100_inw(IRQ_STATUS);
1699 	/* Ack / clear the interrupt TX_COMPLETE interrupt - this interrupt is set
1700 	 * when the current packet being transmitted on the wire is completed. */
1701 	hp100_outw(HP100_TX_COMPLETE, IRQ_STATUS);
1702 #ifdef HP100_DEBUG_TX
1703 	printk("hp100: %s: start_xmit: irq_status=0x%.4x, irqmask=0x%.4x, len=%d\n",
1704 			dev->name, val, hp100_inw(IRQ_MASK), (int) skb->len);
1705 #endif
1706 
1707 	ok_flag = skb->len >= HP100_MIN_PACKET_SIZE;
1708 	i = ok_flag ? skb->len : HP100_MIN_PACKET_SIZE;
1709 
1710 	hp100_outw(i, DATA32);	/* tell card the total packet length */
1711 	hp100_outw(i, FRAGMENT_LEN);	/* and first/only fragment length    */
1712 
1713 	if (lp->mode == 2) {	/* memory mapped */
1714 		/* Note: The J2585B needs alignment to 32bits here!  */
1715 		memcpy_toio(lp->mem_ptr_virt, skb->data, (skb->len + 3) & ~3);
1716 		if (!ok_flag)
1717 			memset_io(lp->mem_ptr_virt, 0, HP100_MIN_PACKET_SIZE - skb->len);
1718 	} else {		/* programmed i/o */
1719 		outsl(ioaddr + HP100_REG_DATA32, skb->data,
1720 		      (skb->len + 3) >> 2);
1721 		if (!ok_flag)
1722 			for (i = (skb->len + 3) & ~3; i < HP100_MIN_PACKET_SIZE; i += 4)
1723 				hp100_outl(0, DATA32);
1724 	}
1725 
1726 	hp100_outb(HP100_TX_CMD | HP100_SET_LB, OPTION_MSW);	/* send packet */
1727 
1728 	dev->stats.tx_packets++;
1729 	dev->stats.tx_bytes += skb->len;
1730 	hp100_ints_on();
1731 	spin_unlock_irqrestore(&lp->lock, flags);
1732 
1733 	dev_consume_skb_any(skb);
1734 
1735 #ifdef HP100_DEBUG_TX
1736 	printk("hp100: %s: start_xmit: end\n", dev->name);
1737 #endif
1738 
1739 	return NETDEV_TX_OK;
1740 
1741 drop:
1742 	dev_kfree_skb(skb);
1743 	return NETDEV_TX_OK;
1744 
1745 }
1746 
1747 
1748 /*
1749  * Receive Function (Non-Busmaster mode)
1750  * Called when an "Receive Packet" interrupt occurs, i.e. the receive
1751  * packet counter is non-zero.
1752  * For non-busmaster, this function does the whole work of transferring
1753  * the packet to the host memory and then up to higher layers via skb
1754  * and netif_rx.
1755  */
1756 
hp100_rx(struct net_device * dev)1757 static void hp100_rx(struct net_device *dev)
1758 {
1759 	int packets, pkt_len;
1760 	int ioaddr = dev->base_addr;
1761 	struct hp100_private *lp = netdev_priv(dev);
1762 	u_int header;
1763 	struct sk_buff *skb;
1764 
1765 #ifdef DEBUG_B
1766 	hp100_outw(0x4213, TRACE);
1767 	printk("hp100: %s: rx\n", dev->name);
1768 #endif
1769 
1770 	/* First get indication of received lan packet */
1771 	/* RX_PKT_CND indicates the number of packets which have been fully */
1772 	/* received onto the card but have not been fully transferred of the card */
1773 	packets = hp100_inb(RX_PKT_CNT);
1774 #ifdef HP100_DEBUG_RX
1775 	if (packets > 1)
1776 		printk("hp100: %s: rx: waiting packets = %d\n", dev->name, packets);
1777 #endif
1778 
1779 	while (packets-- > 0) {
1780 		/* If ADV_NXT_PKT is still set, we have to wait until the card has */
1781 		/* really advanced to the next packet. */
1782 		for (pkt_len = 0; pkt_len < 6000 && (hp100_inb(OPTION_MSW) & HP100_ADV_NXT_PKT); pkt_len++) {
1783 #ifdef HP100_DEBUG_RX
1784 			printk ("hp100: %s: rx: busy, remaining packets = %d\n", dev->name, packets);
1785 #endif
1786 		}
1787 
1788 		/* First we get the header, which contains information about the */
1789 		/* actual length of the received packet. */
1790 		if (lp->mode == 2) {	/* memory mapped mode */
1791 			header = readl(lp->mem_ptr_virt);
1792 		} else		/* programmed i/o */
1793 			header = hp100_inl(DATA32);
1794 
1795 		pkt_len = ((header & HP100_PKT_LEN_MASK) + 3) & ~3;
1796 
1797 #ifdef HP100_DEBUG_RX
1798 		printk("hp100: %s: rx: new packet - length=%d, errors=0x%x, dest=0x%x\n",
1799 				     dev->name, header & HP100_PKT_LEN_MASK,
1800 				     (header >> 16) & 0xfff8, (header >> 16) & 7);
1801 #endif
1802 
1803 		/* Now we allocate the skb and transfer the data into it. */
1804 		skb = netdev_alloc_skb(dev, pkt_len + 2);
1805 		if (skb == NULL) {	/* Not enough memory->drop packet */
1806 #ifdef HP100_DEBUG
1807 			printk("hp100: %s: rx: couldn't allocate a sk_buff of size %d\n",
1808 					     dev->name, pkt_len);
1809 #endif
1810 			dev->stats.rx_dropped++;
1811 		} else {	/* skb successfully allocated */
1812 
1813 			u_char *ptr;
1814 
1815 			skb_reserve(skb,2);
1816 
1817 			/* ptr to start of the sk_buff data area */
1818 			skb_put(skb, pkt_len);
1819 			ptr = skb->data;
1820 
1821 			/* Now transfer the data from the card into that area */
1822 			if (lp->mode == 2)
1823 				memcpy_fromio(ptr, lp->mem_ptr_virt,pkt_len);
1824 			else	/* io mapped */
1825 				insl(ioaddr + HP100_REG_DATA32, ptr, pkt_len >> 2);
1826 
1827 			skb->protocol = eth_type_trans(skb, dev);
1828 
1829 #ifdef HP100_DEBUG_RX
1830 			printk("hp100: %s: rx: %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\n",
1831 					dev->name, ptr[0], ptr[1], ptr[2], ptr[3],
1832 		 			ptr[4], ptr[5], ptr[6], ptr[7], ptr[8],
1833 					ptr[9], ptr[10], ptr[11]);
1834 #endif
1835 			netif_rx(skb);
1836 			dev->stats.rx_packets++;
1837 			dev->stats.rx_bytes += pkt_len;
1838 		}
1839 
1840 		/* Indicate the card that we have got the packet */
1841 		hp100_outb(HP100_ADV_NXT_PKT | HP100_SET_LB, OPTION_MSW);
1842 
1843 		switch (header & 0x00070000) {
1844 		case (HP100_MULTI_ADDR_HASH << 16):
1845 		case (HP100_MULTI_ADDR_NO_HASH << 16):
1846 			dev->stats.multicast++;
1847 			break;
1848 		}
1849 	}			/* end of while(there are packets) loop */
1850 #ifdef HP100_DEBUG_RX
1851 	printk("hp100_rx: %s: end\n", dev->name);
1852 #endif
1853 }
1854 
1855 /*
1856  * Receive Function for Busmaster Mode
1857  */
hp100_rx_bm(struct net_device * dev)1858 static void hp100_rx_bm(struct net_device *dev)
1859 {
1860 	int ioaddr = dev->base_addr;
1861 	struct hp100_private *lp = netdev_priv(dev);
1862 	hp100_ring_t *ptr;
1863 	u_int header;
1864 	int pkt_len;
1865 
1866 #ifdef HP100_DEBUG_B
1867 	hp100_outw(0x4214, TRACE);
1868 	printk("hp100: %s: rx_bm\n", dev->name);
1869 #endif
1870 
1871 #ifdef HP100_DEBUG
1872 	if (0 == lp->rxrcommit) {
1873 		printk("hp100: %s: rx_bm called although no PDLs were committed to adapter?\n", dev->name);
1874 		return;
1875 	} else
1876 		/* RX_PKT_CNT states how many PDLs are currently formatted and available to
1877 		 * the cards BM engine */
1878 	if ((hp100_inw(RX_PKT_CNT) & 0x00ff) >= lp->rxrcommit) {
1879 		printk("hp100: %s: More packets received than committed? RX_PKT_CNT=0x%x, commit=0x%x\n",
1880 				     dev->name, hp100_inw(RX_PKT_CNT) & 0x00ff,
1881 				     lp->rxrcommit);
1882 		return;
1883 	}
1884 #endif
1885 
1886 	while ((lp->rxrcommit > hp100_inb(RX_PDL))) {
1887 		/*
1888 		 * The packet was received into the pdl pointed to by lp->rxrhead (
1889 		 * the oldest pdl in the ring
1890 		 */
1891 
1892 		/* First we get the header, which contains information about the */
1893 		/* actual length of the received packet. */
1894 
1895 		ptr = lp->rxrhead;
1896 
1897 		header = *(ptr->pdl - 1);
1898 		pkt_len = (header & HP100_PKT_LEN_MASK);
1899 
1900 		/* Conversion to new PCI API : NOP */
1901 		pci_unmap_single(lp->pci_dev, (dma_addr_t) ptr->pdl[3], MAX_ETHER_SIZE, PCI_DMA_FROMDEVICE);
1902 
1903 #ifdef HP100_DEBUG_BM
1904 		printk("hp100: %s: rx_bm: header@0x%x=0x%x length=%d, errors=0x%x, dest=0x%x\n",
1905 				dev->name, (u_int) (ptr->pdl - 1), (u_int) header,
1906 				pkt_len, (header >> 16) & 0xfff8, (header >> 16) & 7);
1907 		printk("hp100: %s: RX_PDL_COUNT:0x%x TX_PDL_COUNT:0x%x, RX_PKT_CNT=0x%x PDH=0x%x, Data@0x%x len=0x%x\n",
1908 		   		dev->name, hp100_inb(RX_PDL), hp100_inb(TX_PDL),
1909 				hp100_inb(RX_PKT_CNT), (u_int) * (ptr->pdl),
1910 				(u_int) * (ptr->pdl + 3), (u_int) * (ptr->pdl + 4));
1911 #endif
1912 
1913 		if ((pkt_len >= MIN_ETHER_SIZE) &&
1914 		    (pkt_len <= MAX_ETHER_SIZE)) {
1915 			if (ptr->skb == NULL) {
1916 				printk("hp100: %s: rx_bm: skb null\n", dev->name);
1917 				/* can happen if we only allocated room for the pdh due to memory shortage. */
1918 				dev->stats.rx_dropped++;
1919 			} else {
1920 				skb_trim(ptr->skb, pkt_len);	/* Shorten it */
1921 				ptr->skb->protocol =
1922 				    eth_type_trans(ptr->skb, dev);
1923 
1924 				netif_rx(ptr->skb);	/* Up and away... */
1925 
1926 				dev->stats.rx_packets++;
1927 				dev->stats.rx_bytes += pkt_len;
1928 			}
1929 
1930 			switch (header & 0x00070000) {
1931 			case (HP100_MULTI_ADDR_HASH << 16):
1932 			case (HP100_MULTI_ADDR_NO_HASH << 16):
1933 				dev->stats.multicast++;
1934 				break;
1935 			}
1936 		} else {
1937 #ifdef HP100_DEBUG
1938 			printk("hp100: %s: rx_bm: Received bad packet (length=%d)\n", dev->name, pkt_len);
1939 #endif
1940 			if (ptr->skb != NULL)
1941 				dev_kfree_skb_any(ptr->skb);
1942 			dev->stats.rx_errors++;
1943 		}
1944 
1945 		lp->rxrhead = lp->rxrhead->next;
1946 
1947 		/* Allocate a new rx PDL (so lp->rxrcommit stays the same) */
1948 		if (0 == hp100_build_rx_pdl(lp->rxrtail, dev)) {
1949 			/* No space for skb, header can still be received. */
1950 #ifdef HP100_DEBUG
1951 			printk("hp100: %s: rx_bm: No space for new PDL.\n", dev->name);
1952 #endif
1953 			return;
1954 		} else {	/* successfully allocated new PDL - put it in ringlist at tail. */
1955 			hp100_outl((u32) lp->rxrtail->pdl_paddr, RX_PDA);
1956 			lp->rxrtail = lp->rxrtail->next;
1957 		}
1958 
1959 	}
1960 }
1961 
1962 /*
1963  *  statistics
1964  */
hp100_get_stats(struct net_device * dev)1965 static struct net_device_stats *hp100_get_stats(struct net_device *dev)
1966 {
1967 	unsigned long flags;
1968 	int ioaddr = dev->base_addr;
1969 	struct hp100_private *lp = netdev_priv(dev);
1970 
1971 #ifdef HP100_DEBUG_B
1972 	hp100_outw(0x4215, TRACE);
1973 #endif
1974 
1975 	spin_lock_irqsave(&lp->lock, flags);
1976 	hp100_ints_off();	/* Useful ? Jean II */
1977 	hp100_update_stats(dev);
1978 	hp100_ints_on();
1979 	spin_unlock_irqrestore(&lp->lock, flags);
1980 	return &(dev->stats);
1981 }
1982 
hp100_update_stats(struct net_device * dev)1983 static void hp100_update_stats(struct net_device *dev)
1984 {
1985 	int ioaddr = dev->base_addr;
1986 	u_short val;
1987 
1988 #ifdef HP100_DEBUG_B
1989 	hp100_outw(0x4216, TRACE);
1990 	printk("hp100: %s: update-stats\n", dev->name);
1991 #endif
1992 
1993 	/* Note: Statistics counters clear when read. */
1994 	hp100_page(MAC_CTRL);
1995 	val = hp100_inw(DROPPED) & 0x0fff;
1996 	dev->stats.rx_errors += val;
1997 	dev->stats.rx_over_errors += val;
1998 	val = hp100_inb(CRC);
1999 	dev->stats.rx_errors += val;
2000 	dev->stats.rx_crc_errors += val;
2001 	val = hp100_inb(ABORT);
2002 	dev->stats.tx_errors += val;
2003 	dev->stats.tx_aborted_errors += val;
2004 	hp100_page(PERFORMANCE);
2005 }
2006 
hp100_misc_interrupt(struct net_device * dev)2007 static void hp100_misc_interrupt(struct net_device *dev)
2008 {
2009 #ifdef HP100_DEBUG_B
2010 	int ioaddr = dev->base_addr;
2011 #endif
2012 
2013 #ifdef HP100_DEBUG_B
2014 	int ioaddr = dev->base_addr;
2015 	hp100_outw(0x4216, TRACE);
2016 	printk("hp100: %s: misc_interrupt\n", dev->name);
2017 #endif
2018 
2019 	/* Note: Statistics counters clear when read. */
2020 	dev->stats.rx_errors++;
2021 	dev->stats.tx_errors++;
2022 }
2023 
hp100_clear_stats(struct hp100_private * lp,int ioaddr)2024 static void hp100_clear_stats(struct hp100_private *lp, int ioaddr)
2025 {
2026 	unsigned long flags;
2027 
2028 #ifdef HP100_DEBUG_B
2029 	hp100_outw(0x4217, TRACE);
2030 	printk("hp100: %s: clear_stats\n", dev->name);
2031 #endif
2032 
2033 	spin_lock_irqsave(&lp->lock, flags);
2034 	hp100_page(MAC_CTRL);	/* get all statistics bytes */
2035 	hp100_inw(DROPPED);
2036 	hp100_inb(CRC);
2037 	hp100_inb(ABORT);
2038 	hp100_page(PERFORMANCE);
2039 	spin_unlock_irqrestore(&lp->lock, flags);
2040 }
2041 
2042 
2043 /*
2044  *  multicast setup
2045  */
2046 
2047 /*
2048  *  Set or clear the multicast filter for this adapter.
2049  */
2050 
hp100_set_multicast_list(struct net_device * dev)2051 static void hp100_set_multicast_list(struct net_device *dev)
2052 {
2053 	unsigned long flags;
2054 	int ioaddr = dev->base_addr;
2055 	struct hp100_private *lp = netdev_priv(dev);
2056 
2057 #ifdef HP100_DEBUG_B
2058 	hp100_outw(0x4218, TRACE);
2059 	printk("hp100: %s: set_mc_list\n", dev->name);
2060 #endif
2061 
2062 	spin_lock_irqsave(&lp->lock, flags);
2063 	hp100_ints_off();
2064 	hp100_page(MAC_CTRL);
2065 	hp100_andb(~(HP100_RX_EN | HP100_TX_EN), MAC_CFG_1);	/* stop rx/tx */
2066 
2067 	if (dev->flags & IFF_PROMISC) {
2068 		lp->mac2_mode = HP100_MAC2MODE6;	/* promiscuous mode = get all good */
2069 		lp->mac1_mode = HP100_MAC1MODE6;	/* packets on the net */
2070 		memset(&lp->hash_bytes, 0xff, 8);
2071 	} else if (!netdev_mc_empty(dev) || (dev->flags & IFF_ALLMULTI)) {
2072 		lp->mac2_mode = HP100_MAC2MODE5;	/* multicast mode = get packets for */
2073 		lp->mac1_mode = HP100_MAC1MODE5;	/* me, broadcasts and all multicasts */
2074 #ifdef HP100_MULTICAST_FILTER	/* doesn't work!!! */
2075 		if (dev->flags & IFF_ALLMULTI) {
2076 			/* set hash filter to receive all multicast packets */
2077 			memset(&lp->hash_bytes, 0xff, 8);
2078 		} else {
2079 			int i, idx;
2080 			u_char *addrs;
2081 			struct netdev_hw_addr *ha;
2082 
2083 			memset(&lp->hash_bytes, 0x00, 8);
2084 #ifdef HP100_DEBUG
2085 			printk("hp100: %s: computing hash filter - mc_count = %i\n",
2086 			       dev->name, netdev_mc_count(dev));
2087 #endif
2088 			netdev_for_each_mc_addr(ha, dev) {
2089 				addrs = ha->addr;
2090 #ifdef HP100_DEBUG
2091 				printk("hp100: %s: multicast = %pM, ",
2092 					     dev->name, addrs);
2093 #endif
2094 				for (i = idx = 0; i < 6; i++) {
2095 					idx ^= *addrs++ & 0x3f;
2096 					printk(":%02x:", idx);
2097 				}
2098 #ifdef HP100_DEBUG
2099 				printk("idx = %i\n", idx);
2100 #endif
2101 				lp->hash_bytes[idx >> 3] |= (1 << (idx & 7));
2102 			}
2103 		}
2104 #else
2105 		memset(&lp->hash_bytes, 0xff, 8);
2106 #endif
2107 	} else {
2108 		lp->mac2_mode = HP100_MAC2MODE3;	/* normal mode = get packets for me */
2109 		lp->mac1_mode = HP100_MAC1MODE3;	/* and broadcasts */
2110 		memset(&lp->hash_bytes, 0x00, 8);
2111 	}
2112 
2113 	if (((hp100_inb(MAC_CFG_1) & 0x0f) != lp->mac1_mode) ||
2114 	    (hp100_inb(MAC_CFG_2) != lp->mac2_mode)) {
2115 		int i;
2116 
2117 		hp100_outb(lp->mac2_mode, MAC_CFG_2);
2118 		hp100_andb(HP100_MAC1MODEMASK, MAC_CFG_1);	/* clear mac1 mode bits */
2119 		hp100_orb(lp->mac1_mode, MAC_CFG_1);	/* and set the new mode */
2120 
2121 		hp100_page(MAC_ADDRESS);
2122 		for (i = 0; i < 8; i++)
2123 			hp100_outb(lp->hash_bytes[i], HASH_BYTE0 + i);
2124 #ifdef HP100_DEBUG
2125 		printk("hp100: %s: mac1 = 0x%x, mac2 = 0x%x, multicast hash = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
2126 				     dev->name, lp->mac1_mode, lp->mac2_mode,
2127 				     lp->hash_bytes[0], lp->hash_bytes[1],
2128 				     lp->hash_bytes[2], lp->hash_bytes[3],
2129 				     lp->hash_bytes[4], lp->hash_bytes[5],
2130 				     lp->hash_bytes[6], lp->hash_bytes[7]);
2131 #endif
2132 
2133 		if (lp->lan_type == HP100_LAN_100) {
2134 #ifdef HP100_DEBUG
2135 			printk("hp100: %s: 100VG MAC settings have changed - relogin.\n", dev->name);
2136 #endif
2137 			lp->hub_status = hp100_login_to_vg_hub(dev, 1);	/* force a relogin to the hub */
2138 		}
2139 	} else {
2140 		int i;
2141 		u_char old_hash_bytes[8];
2142 
2143 		hp100_page(MAC_ADDRESS);
2144 		for (i = 0; i < 8; i++)
2145 			old_hash_bytes[i] = hp100_inb(HASH_BYTE0 + i);
2146 		if (memcmp(old_hash_bytes, &lp->hash_bytes, 8)) {
2147 			for (i = 0; i < 8; i++)
2148 				hp100_outb(lp->hash_bytes[i], HASH_BYTE0 + i);
2149 #ifdef HP100_DEBUG
2150 			printk("hp100: %s: multicast hash = %02x:%02x:%02x:%02x:%02x:%02x:%02x:%02x\n",
2151 					dev->name, lp->hash_bytes[0],
2152 					lp->hash_bytes[1], lp->hash_bytes[2],
2153 					lp->hash_bytes[3], lp->hash_bytes[4],
2154 					lp->hash_bytes[5], lp->hash_bytes[6],
2155 					lp->hash_bytes[7]);
2156 #endif
2157 
2158 			if (lp->lan_type == HP100_LAN_100) {
2159 #ifdef HP100_DEBUG
2160 				printk("hp100: %s: 100VG MAC settings have changed - relogin.\n", dev->name);
2161 #endif
2162 				lp->hub_status = hp100_login_to_vg_hub(dev, 1);	/* force a relogin to the hub */
2163 			}
2164 		}
2165 	}
2166 
2167 	hp100_page(MAC_CTRL);
2168 	hp100_orb(HP100_RX_EN | HP100_RX_IDLE |	/* enable rx */
2169 		  HP100_TX_EN | HP100_TX_IDLE, MAC_CFG_1);	/* enable tx */
2170 
2171 	hp100_page(PERFORMANCE);
2172 	hp100_ints_on();
2173 	spin_unlock_irqrestore(&lp->lock, flags);
2174 }
2175 
2176 /*
2177  *  hardware interrupt handling
2178  */
2179 
hp100_interrupt(int irq,void * dev_id)2180 static irqreturn_t hp100_interrupt(int irq, void *dev_id)
2181 {
2182 	struct net_device *dev = (struct net_device *) dev_id;
2183 	struct hp100_private *lp = netdev_priv(dev);
2184 
2185 	int ioaddr;
2186 	u_int val;
2187 
2188 	if (dev == NULL)
2189 		return IRQ_NONE;
2190 	ioaddr = dev->base_addr;
2191 
2192 	spin_lock(&lp->lock);
2193 
2194 	hp100_ints_off();
2195 
2196 #ifdef HP100_DEBUG_B
2197 	hp100_outw(0x4219, TRACE);
2198 #endif
2199 
2200 	/*  hp100_page( PERFORMANCE ); */
2201 	val = hp100_inw(IRQ_STATUS);
2202 #ifdef HP100_DEBUG_IRQ
2203 	printk("hp100: %s: mode=%x,IRQ_STAT=0x%.4x,RXPKTCNT=0x%.2x RXPDL=0x%.2x TXPKTCNT=0x%.2x TXPDL=0x%.2x\n",
2204 			     dev->name, lp->mode, (u_int) val, hp100_inb(RX_PKT_CNT),
2205 			     hp100_inb(RX_PDL), hp100_inb(TX_PKT_CNT), hp100_inb(TX_PDL));
2206 #endif
2207 
2208 	if (val == 0) {		/* might be a shared interrupt */
2209 		spin_unlock(&lp->lock);
2210 		hp100_ints_on();
2211 		return IRQ_NONE;
2212 	}
2213 	/* We're only interested in those interrupts we really enabled. */
2214 	/* val &= hp100_inw( IRQ_MASK ); */
2215 
2216 	/*
2217 	 * RX_PDL_FILL_COMPL is set whenever a RX_PDL has been executed. A RX_PDL
2218 	 * is considered executed whenever the RX_PDL data structure is no longer
2219 	 * needed.
2220 	 */
2221 	if (val & HP100_RX_PDL_FILL_COMPL) {
2222 		if (lp->mode == 1)
2223 			hp100_rx_bm(dev);
2224 		else {
2225 			printk("hp100: %s: rx_pdl_fill_compl interrupt although not busmaster?\n", dev->name);
2226 		}
2227 	}
2228 
2229 	/*
2230 	 * The RX_PACKET interrupt is set, when the receive packet counter is
2231 	 * non zero. We use this interrupt for receiving in slave mode. In
2232 	 * busmaster mode, we use it to make sure we did not miss any rx_pdl_fill
2233 	 * interrupts. If rx_pdl_fill_compl is not set and rx_packet is set, then
2234 	 * we somehow have missed a rx_pdl_fill_compl interrupt.
2235 	 */
2236 
2237 	if (val & HP100_RX_PACKET) {	/* Receive Packet Counter is non zero */
2238 		if (lp->mode != 1)	/* non busmaster */
2239 			hp100_rx(dev);
2240 		else if (!(val & HP100_RX_PDL_FILL_COMPL)) {
2241 			/* Shouldn't happen - maybe we missed a RX_PDL_FILL Interrupt?  */
2242 			hp100_rx_bm(dev);
2243 		}
2244 	}
2245 
2246 	/*
2247 	 * Ack. that we have noticed the interrupt and thereby allow next one.
2248 	 * Note that this is now done after the slave rx function, since first
2249 	 * acknowledging and then setting ADV_NXT_PKT caused an extra interrupt
2250 	 * on the J2573.
2251 	 */
2252 	hp100_outw(val, IRQ_STATUS);
2253 
2254 	/*
2255 	 * RX_ERROR is set when a packet is dropped due to no memory resources on
2256 	 * the card or when a RCV_ERR occurs.
2257 	 * TX_ERROR is set when a TX_ABORT condition occurs in the MAC->exists
2258 	 * only in the 802.3 MAC and happens when 16 collisions occur during a TX
2259 	 */
2260 	if (val & (HP100_TX_ERROR | HP100_RX_ERROR)) {
2261 #ifdef HP100_DEBUG_IRQ
2262 		printk("hp100: %s: TX/RX Error IRQ\n", dev->name);
2263 #endif
2264 		hp100_update_stats(dev);
2265 		if (lp->mode == 1) {
2266 			hp100_rxfill(dev);
2267 			hp100_clean_txring(dev);
2268 		}
2269 	}
2270 
2271 	/*
2272 	 * RX_PDA_ZERO is set when the PDA count goes from non-zero to zero.
2273 	 */
2274 	if ((lp->mode == 1) && (val & (HP100_RX_PDA_ZERO)))
2275 		hp100_rxfill(dev);
2276 
2277 	/*
2278 	 * HP100_TX_COMPLETE interrupt occurs when packet transmitted on wire
2279 	 * is completed
2280 	 */
2281 	if ((lp->mode == 1) && (val & (HP100_TX_COMPLETE)))
2282 		hp100_clean_txring(dev);
2283 
2284 	/*
2285 	 * MISC_ERROR is set when either the LAN link goes down or a detected
2286 	 * bus error occurs.
2287 	 */
2288 	if (val & HP100_MISC_ERROR) {	/* New for J2585B */
2289 #ifdef HP100_DEBUG_IRQ
2290 		printk
2291 		    ("hp100: %s: Misc. Error Interrupt - Check cabling.\n",
2292 		     dev->name);
2293 #endif
2294 		if (lp->mode == 1) {
2295 			hp100_clean_txring(dev);
2296 			hp100_rxfill(dev);
2297 		}
2298 		hp100_misc_interrupt(dev);
2299 	}
2300 
2301 	spin_unlock(&lp->lock);
2302 	hp100_ints_on();
2303 	return IRQ_HANDLED;
2304 }
2305 
2306 /*
2307  *  some misc functions
2308  */
2309 
hp100_start_interface(struct net_device * dev)2310 static void hp100_start_interface(struct net_device *dev)
2311 {
2312 	unsigned long flags;
2313 	int ioaddr = dev->base_addr;
2314 	struct hp100_private *lp = netdev_priv(dev);
2315 
2316 #ifdef HP100_DEBUG_B
2317 	hp100_outw(0x4220, TRACE);
2318 	printk("hp100: %s: hp100_start_interface\n", dev->name);
2319 #endif
2320 
2321 	spin_lock_irqsave(&lp->lock, flags);
2322 
2323 	/* Ensure the adapter does not want to request an interrupt when */
2324 	/* enabling the IRQ line to be active on the bus (i.e. not tri-stated) */
2325 	hp100_page(PERFORMANCE);
2326 	hp100_outw(0xfefe, IRQ_MASK);	/* mask off all ints */
2327 	hp100_outw(0xffff, IRQ_STATUS);	/* ack all IRQs */
2328 	hp100_outw(HP100_FAKE_INT | HP100_INT_EN | HP100_RESET_LB,
2329 		   OPTION_LSW);
2330 	/* Un Tri-state int. TODO: Check if shared interrupts can be realised? */
2331 	hp100_outw(HP100_TRI_INT | HP100_RESET_HB, OPTION_LSW);
2332 
2333 	if (lp->mode == 1) {
2334 		/* Make sure BM bit is set... */
2335 		hp100_page(HW_MAP);
2336 		hp100_orb(HP100_BM_MASTER, BM);
2337 		hp100_rxfill(dev);
2338 	} else if (lp->mode == 2) {
2339 		/* Enable memory mapping. Note: Don't do this when busmaster. */
2340 		hp100_outw(HP100_MMAP_DIS | HP100_RESET_HB, OPTION_LSW);
2341 	}
2342 
2343 	hp100_page(PERFORMANCE);
2344 	hp100_outw(0xfefe, IRQ_MASK);	/* mask off all ints */
2345 	hp100_outw(0xffff, IRQ_STATUS);	/* ack IRQ */
2346 
2347 	/* enable a few interrupts: */
2348 	if (lp->mode == 1) {	/* busmaster mode */
2349 		hp100_outw(HP100_RX_PDL_FILL_COMPL |
2350 			   HP100_RX_PDA_ZERO | HP100_RX_ERROR |
2351 			   /* HP100_RX_PACKET    | */
2352 			   /* HP100_RX_EARLY_INT |  */ HP100_SET_HB |
2353 			   /* HP100_TX_PDA_ZERO  |  */
2354 			   HP100_TX_COMPLETE |
2355 			   /* HP100_MISC_ERROR   |  */
2356 			   HP100_TX_ERROR | HP100_SET_LB, IRQ_MASK);
2357 	} else {
2358 		hp100_outw(HP100_RX_PACKET |
2359 			   HP100_RX_ERROR | HP100_SET_HB |
2360 			   HP100_TX_ERROR | HP100_SET_LB, IRQ_MASK);
2361 	}
2362 
2363 	/* Note : before hp100_set_multicast_list(), because it will play with
2364 	 * spinlock itself... Jean II */
2365 	spin_unlock_irqrestore(&lp->lock, flags);
2366 
2367 	/* Enable MAC Tx and RX, set MAC modes, ... */
2368 	hp100_set_multicast_list(dev);
2369 }
2370 
hp100_stop_interface(struct net_device * dev)2371 static void hp100_stop_interface(struct net_device *dev)
2372 {
2373 	struct hp100_private *lp = netdev_priv(dev);
2374 	int ioaddr = dev->base_addr;
2375 	u_int val;
2376 
2377 #ifdef HP100_DEBUG_B
2378 	printk("hp100: %s: hp100_stop_interface\n", dev->name);
2379 	hp100_outw(0x4221, TRACE);
2380 #endif
2381 
2382 	if (lp->mode == 1)
2383 		hp100_BM_shutdown(dev);
2384 	else {
2385 		/* Note: MMAP_DIS will be reenabled by start_interface */
2386 		hp100_outw(HP100_INT_EN | HP100_RESET_LB |
2387 			   HP100_TRI_INT | HP100_MMAP_DIS | HP100_SET_HB,
2388 			   OPTION_LSW);
2389 		val = hp100_inw(OPTION_LSW);
2390 
2391 		hp100_page(MAC_CTRL);
2392 		hp100_andb(~(HP100_RX_EN | HP100_TX_EN), MAC_CFG_1);
2393 
2394 		if (!(val & HP100_HW_RST))
2395 			return;	/* If reset, imm. return ... */
2396 		/* ... else: busy wait until idle */
2397 		for (val = 0; val < 6000; val++)
2398 			if ((hp100_inb(MAC_CFG_1) & (HP100_TX_IDLE | HP100_RX_IDLE)) == (HP100_TX_IDLE | HP100_RX_IDLE)) {
2399 				hp100_page(PERFORMANCE);
2400 				return;
2401 			}
2402 		printk("hp100: %s: hp100_stop_interface - timeout\n", dev->name);
2403 		hp100_page(PERFORMANCE);
2404 	}
2405 }
2406 
hp100_load_eeprom(struct net_device * dev,u_short probe_ioaddr)2407 static void hp100_load_eeprom(struct net_device *dev, u_short probe_ioaddr)
2408 {
2409 	int i;
2410 	int ioaddr = probe_ioaddr > 0 ? probe_ioaddr : dev->base_addr;
2411 
2412 #ifdef HP100_DEBUG_B
2413 	hp100_outw(0x4222, TRACE);
2414 #endif
2415 
2416 	hp100_page(EEPROM_CTRL);
2417 	hp100_andw(~HP100_EEPROM_LOAD, EEPROM_CTRL);
2418 	hp100_orw(HP100_EEPROM_LOAD, EEPROM_CTRL);
2419 	for (i = 0; i < 10000; i++)
2420 		if (!(hp100_inb(OPTION_MSW) & HP100_EE_LOAD))
2421 			return;
2422 	printk("hp100: %s: hp100_load_eeprom - timeout\n", dev->name);
2423 }
2424 
2425 /*  Sense connection status.
2426  *  return values: LAN_10  - Connected to 10Mbit/s network
2427  *                 LAN_100 - Connected to 100Mbit/s network
2428  *                 LAN_ERR - not connected or 100Mbit/s Hub down
2429  */
hp100_sense_lan(struct net_device * dev)2430 static int hp100_sense_lan(struct net_device *dev)
2431 {
2432 	int ioaddr = dev->base_addr;
2433 	u_short val_VG, val_10;
2434 	struct hp100_private *lp = netdev_priv(dev);
2435 
2436 #ifdef HP100_DEBUG_B
2437 	hp100_outw(0x4223, TRACE);
2438 #endif
2439 
2440 	hp100_page(MAC_CTRL);
2441 	val_10 = hp100_inb(10_LAN_CFG_1);
2442 	val_VG = hp100_inb(VG_LAN_CFG_1);
2443 	hp100_page(PERFORMANCE);
2444 #ifdef HP100_DEBUG
2445 	printk("hp100: %s: sense_lan: val_VG = 0x%04x, val_10 = 0x%04x\n",
2446 	       dev->name, val_VG, val_10);
2447 #endif
2448 
2449 	if (val_10 & HP100_LINK_BEAT_ST)	/* 10Mb connection is active */
2450 		return HP100_LAN_10;
2451 
2452 	if (val_10 & HP100_AUI_ST) {	/* have we BNC or AUI onboard? */
2453 		/*
2454 		 * This can be overriden by dos utility, so if this has no effect,
2455 		 * perhaps you need to download that utility from HP and set card
2456 		 * back to "auto detect".
2457 		 */
2458 		val_10 |= HP100_AUI_SEL | HP100_LOW_TH;
2459 		hp100_page(MAC_CTRL);
2460 		hp100_outb(val_10, 10_LAN_CFG_1);
2461 		hp100_page(PERFORMANCE);
2462 		return HP100_LAN_COAX;
2463 	}
2464 
2465 	/* Those cards don't have a 100 Mbit connector */
2466 	if ( !strcmp(lp->id, "HWP1920")  ||
2467 	     (lp->pci_dev &&
2468 	      lp->pci_dev->vendor == PCI_VENDOR_ID &&
2469 	      (lp->pci_dev->device == PCI_DEVICE_ID_HP_J2970A ||
2470 	       lp->pci_dev->device == PCI_DEVICE_ID_HP_J2973A)))
2471 		return HP100_LAN_ERR;
2472 
2473 	if (val_VG & HP100_LINK_CABLE_ST)	/* Can hear the HUBs tone. */
2474 		return HP100_LAN_100;
2475 	return HP100_LAN_ERR;
2476 }
2477 
hp100_down_vg_link(struct net_device * dev)2478 static int hp100_down_vg_link(struct net_device *dev)
2479 {
2480 	struct hp100_private *lp = netdev_priv(dev);
2481 	int ioaddr = dev->base_addr;
2482 	unsigned long time;
2483 	long savelan, newlan;
2484 
2485 #ifdef HP100_DEBUG_B
2486 	hp100_outw(0x4224, TRACE);
2487 	printk("hp100: %s: down_vg_link\n", dev->name);
2488 #endif
2489 
2490 	hp100_page(MAC_CTRL);
2491 	time = jiffies + (HZ / 4);
2492 	do {
2493 		if (hp100_inb(VG_LAN_CFG_1) & HP100_LINK_CABLE_ST)
2494 			break;
2495 		if (!in_interrupt())
2496 			schedule_timeout_interruptible(1);
2497 	} while (time_after(time, jiffies));
2498 
2499 	if (time_after_eq(jiffies, time))	/* no signal->no logout */
2500 		return 0;
2501 
2502 	/* Drop the VG Link by clearing the link up cmd and load addr. */
2503 
2504 	hp100_andb(~(HP100_LOAD_ADDR | HP100_LINK_CMD), VG_LAN_CFG_1);
2505 	hp100_orb(HP100_VG_SEL, VG_LAN_CFG_1);
2506 
2507 	/* Conditionally stall for >250ms on Link-Up Status (to go down) */
2508 	time = jiffies + (HZ / 2);
2509 	do {
2510 		if (!(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST))
2511 			break;
2512 		if (!in_interrupt())
2513 			schedule_timeout_interruptible(1);
2514 	} while (time_after(time, jiffies));
2515 
2516 #ifdef HP100_DEBUG
2517 	if (time_after_eq(jiffies, time))
2518 		printk("hp100: %s: down_vg_link: Link does not go down?\n", dev->name);
2519 #endif
2520 
2521 	/* To prevent condition where Rev 1 VG MAC and old hubs do not complete */
2522 	/* logout under traffic (even though all the status bits are cleared),  */
2523 	/* do this workaround to get the Rev 1 MAC in its idle state */
2524 	if (lp->chip == HP100_CHIPID_LASSEN) {
2525 		/* Reset VG MAC to insure it leaves the logoff state even if */
2526 		/* the Hub is still emitting tones */
2527 		hp100_andb(~HP100_VG_RESET, VG_LAN_CFG_1);
2528 		udelay(1500);	/* wait for >1ms */
2529 		hp100_orb(HP100_VG_RESET, VG_LAN_CFG_1);	/* Release Reset */
2530 		udelay(1500);
2531 	}
2532 
2533 	/* New: For lassen, switch to 10 Mbps mac briefly to clear training ACK */
2534 	/* to get the VG mac to full reset. This is not req.d with later chips */
2535 	/* Note: It will take the between 1 and 2 seconds for the VG mac to be */
2536 	/* selected again! This will be left to the connect hub function to */
2537 	/* perform if desired.  */
2538 	if (lp->chip == HP100_CHIPID_LASSEN) {
2539 		/* Have to write to 10 and 100VG control registers simultaneously */
2540 		savelan = newlan = hp100_inl(10_LAN_CFG_1);	/* read 10+100 LAN_CFG regs */
2541 		newlan &= ~(HP100_VG_SEL << 16);
2542 		newlan |= (HP100_DOT3_MAC) << 8;
2543 		hp100_andb(~HP100_AUTO_MODE, MAC_CFG_3);	/* Autosel off */
2544 		hp100_outl(newlan, 10_LAN_CFG_1);
2545 
2546 		/* Conditionally stall for 5sec on VG selected. */
2547 		time = jiffies + (HZ * 5);
2548 		do {
2549 			if (!(hp100_inb(MAC_CFG_4) & HP100_MAC_SEL_ST))
2550 				break;
2551 			if (!in_interrupt())
2552 				schedule_timeout_interruptible(1);
2553 		} while (time_after(time, jiffies));
2554 
2555 		hp100_orb(HP100_AUTO_MODE, MAC_CFG_3);	/* Autosel back on */
2556 		hp100_outl(savelan, 10_LAN_CFG_1);
2557 	}
2558 
2559 	time = jiffies + (3 * HZ);	/* Timeout 3s */
2560 	do {
2561 		if ((hp100_inb(VG_LAN_CFG_1) & HP100_LINK_CABLE_ST) == 0)
2562 			break;
2563 		if (!in_interrupt())
2564 			schedule_timeout_interruptible(1);
2565 	} while (time_after(time, jiffies));
2566 
2567 	if (time_before_eq(time, jiffies)) {
2568 #ifdef HP100_DEBUG
2569 		printk("hp100: %s: down_vg_link: timeout\n", dev->name);
2570 #endif
2571 		return -EIO;
2572 	}
2573 
2574 	time = jiffies + (2 * HZ);	/* This seems to take a while.... */
2575 	do {
2576 		if (!in_interrupt())
2577 			schedule_timeout_interruptible(1);
2578 	} while (time_after(time, jiffies));
2579 
2580 	return 0;
2581 }
2582 
hp100_login_to_vg_hub(struct net_device * dev,u_short force_relogin)2583 static int hp100_login_to_vg_hub(struct net_device *dev, u_short force_relogin)
2584 {
2585 	int ioaddr = dev->base_addr;
2586 	struct hp100_private *lp = netdev_priv(dev);
2587 	u_short val = 0;
2588 	unsigned long time;
2589 	int startst;
2590 
2591 #ifdef HP100_DEBUG_B
2592 	hp100_outw(0x4225, TRACE);
2593 	printk("hp100: %s: login_to_vg_hub\n", dev->name);
2594 #endif
2595 
2596 	/* Initiate a login sequence iff VG MAC is enabled and either Load Address
2597 	 * bit is zero or the force relogin flag is set (e.g. due to MAC address or
2598 	 * promiscuous mode change)
2599 	 */
2600 	hp100_page(MAC_CTRL);
2601 	startst = hp100_inb(VG_LAN_CFG_1);
2602 	if ((force_relogin == 1) || (hp100_inb(MAC_CFG_4) & HP100_MAC_SEL_ST)) {
2603 #ifdef HP100_DEBUG_TRAINING
2604 		printk("hp100: %s: Start training\n", dev->name);
2605 #endif
2606 
2607 		/* Ensure VG Reset bit is 1 (i.e., do not reset) */
2608 		hp100_orb(HP100_VG_RESET, VG_LAN_CFG_1);
2609 
2610 		/* If Lassen AND auto-select-mode AND VG tones were sensed on */
2611 		/* entry then temporarily put them into force 100Mbit mode */
2612 		if ((lp->chip == HP100_CHIPID_LASSEN) && (startst & HP100_LINK_CABLE_ST))
2613 			hp100_andb(~HP100_DOT3_MAC, 10_LAN_CFG_2);
2614 
2615 		/* Drop the VG link by zeroing Link Up Command and Load Address  */
2616 		hp100_andb(~(HP100_LINK_CMD /* |HP100_LOAD_ADDR */ ), VG_LAN_CFG_1);
2617 
2618 #ifdef HP100_DEBUG_TRAINING
2619 		printk("hp100: %s: Bring down the link\n", dev->name);
2620 #endif
2621 
2622 		/* Wait for link to drop */
2623 		time = jiffies + (HZ / 10);
2624 		do {
2625 			if (!(hp100_inb(VG_LAN_CFG_1) & HP100_LINK_UP_ST))
2626 				break;
2627 			if (!in_interrupt())
2628 				schedule_timeout_interruptible(1);
2629 		} while (time_after(time, jiffies));
2630 
2631 		/* Start an addressed training and optionally request promiscuous port */
2632 		if ((dev->flags) & IFF_PROMISC) {
2633 			hp100_orb(HP100_PROM_MODE, VG_LAN_CFG_2);
2634 			if (lp->chip == HP100_CHIPID_LASSEN)
2635 				hp100_orw(HP100_MACRQ_PROMSC, TRAIN_REQUEST);
2636 		} else {
2637 			hp100_andb(~HP100_PROM_MODE, VG_LAN_CFG_2);
2638 			/* For ETR parts we need to reset the prom. bit in the training
2639 			 * register, otherwise promiscious mode won't be disabled.
2640 			 */
2641 			if (lp->chip == HP100_CHIPID_LASSEN) {
2642 				hp100_andw(~HP100_MACRQ_PROMSC, TRAIN_REQUEST);
2643 			}
2644 		}
2645 
2646 		/* With ETR parts, frame format request bits can be set. */
2647 		if (lp->chip == HP100_CHIPID_LASSEN)
2648 			hp100_orb(HP100_MACRQ_FRAMEFMT_EITHER, TRAIN_REQUEST);
2649 
2650 		hp100_orb(HP100_LINK_CMD | HP100_LOAD_ADDR | HP100_VG_RESET, VG_LAN_CFG_1);
2651 
2652 		/* Note: Next wait could be omitted for Hood and earlier chips under */
2653 		/* certain circumstances */
2654 		/* TODO: check if hood/earlier and skip wait. */
2655 
2656 		/* Wait for either short timeout for VG tones or long for login    */
2657 		/* Wait for the card hardware to signalise link cable status ok... */
2658 		hp100_page(MAC_CTRL);
2659 		time = jiffies + (1 * HZ);	/* 1 sec timeout for cable st */
2660 		do {
2661 			if (hp100_inb(VG_LAN_CFG_1) & HP100_LINK_CABLE_ST)
2662 				break;
2663 			if (!in_interrupt())
2664 				schedule_timeout_interruptible(1);
2665 		} while (time_before(jiffies, time));
2666 
2667 		if (time_after_eq(jiffies, time)) {
2668 #ifdef HP100_DEBUG_TRAINING
2669 			printk("hp100: %s: Link cable status not ok? Training aborted.\n", dev->name);
2670 #endif
2671 		} else {
2672 #ifdef HP100_DEBUG_TRAINING
2673 			printk
2674 			    ("hp100: %s: HUB tones detected. Trying to train.\n",
2675 			     dev->name);
2676 #endif
2677 
2678 			time = jiffies + (2 * HZ);	/* again a timeout */
2679 			do {
2680 				val = hp100_inb(VG_LAN_CFG_1);
2681 				if ((val & (HP100_LINK_UP_ST))) {
2682 #ifdef HP100_DEBUG_TRAINING
2683 					printk("hp100: %s: Passed training.\n", dev->name);
2684 #endif
2685 					break;
2686 				}
2687 				if (!in_interrupt())
2688 					schedule_timeout_interruptible(1);
2689 			} while (time_after(time, jiffies));
2690 		}
2691 
2692 		/* If LINK_UP_ST is set, then we are logged into the hub. */
2693 		if (time_before_eq(jiffies, time) && (val & HP100_LINK_UP_ST)) {
2694 #ifdef HP100_DEBUG_TRAINING
2695 			printk("hp100: %s: Successfully logged into the HUB.\n", dev->name);
2696 			if (lp->chip == HP100_CHIPID_LASSEN) {
2697 				val = hp100_inw(TRAIN_ALLOW);
2698 				printk("hp100: %s: Card supports 100VG MAC Version \"%s\" ",
2699 					     dev->name, (hp100_inw(TRAIN_REQUEST) & HP100_CARD_MACVER) ? "802.12" : "Pre");
2700 				printk("Driver will use MAC Version \"%s\"\n", (val & HP100_HUB_MACVER) ? "802.12" : "Pre");
2701 				printk("hp100: %s: Frame format is %s.\n", dev->name, (val & HP100_MALLOW_FRAMEFMT) ? "802.5" : "802.3");
2702 			}
2703 #endif
2704 		} else {
2705 			/* If LINK_UP_ST is not set, login was not successful */
2706 			printk("hp100: %s: Problem logging into the HUB.\n", dev->name);
2707 			if (lp->chip == HP100_CHIPID_LASSEN) {
2708 				/* Check allowed Register to find out why there is a problem. */
2709 				val = hp100_inw(TRAIN_ALLOW);	/* won't work on non-ETR card */
2710 #ifdef HP100_DEBUG_TRAINING
2711 				printk("hp100: %s: MAC Configuration requested: 0x%04x, HUB allowed: 0x%04x\n", dev->name, hp100_inw(TRAIN_REQUEST), val);
2712 #endif
2713 				if (val & HP100_MALLOW_ACCDENIED)
2714 					printk("hp100: %s: HUB access denied.\n", dev->name);
2715 				if (val & HP100_MALLOW_CONFIGURE)
2716 					printk("hp100: %s: MAC Configuration is incompatible with the Network.\n", dev->name);
2717 				if (val & HP100_MALLOW_DUPADDR)
2718 					printk("hp100: %s: Duplicate MAC Address on the Network.\n", dev->name);
2719 			}
2720 		}
2721 
2722 		/* If we have put the chip into forced 100 Mbit mode earlier, go back */
2723 		/* to auto-select mode */
2724 
2725 		if ((lp->chip == HP100_CHIPID_LASSEN) && (startst & HP100_LINK_CABLE_ST)) {
2726 			hp100_page(MAC_CTRL);
2727 			hp100_orb(HP100_DOT3_MAC, 10_LAN_CFG_2);
2728 		}
2729 
2730 		val = hp100_inb(VG_LAN_CFG_1);
2731 
2732 		/* Clear the MISC_ERROR Interrupt, which might be generated when doing the relogin */
2733 		hp100_page(PERFORMANCE);
2734 		hp100_outw(HP100_MISC_ERROR, IRQ_STATUS);
2735 
2736 		if (val & HP100_LINK_UP_ST)
2737 			return 0;	/* login was ok */
2738 		else {
2739 			printk("hp100: %s: Training failed.\n", dev->name);
2740 			hp100_down_vg_link(dev);
2741 			return -EIO;
2742 		}
2743 	}
2744 	/* no forced relogin & already link there->no training. */
2745 	return -EIO;
2746 }
2747 
hp100_cascade_reset(struct net_device * dev,u_short enable)2748 static void hp100_cascade_reset(struct net_device *dev, u_short enable)
2749 {
2750 	int ioaddr = dev->base_addr;
2751 	struct hp100_private *lp = netdev_priv(dev);
2752 
2753 #ifdef HP100_DEBUG_B
2754 	hp100_outw(0x4226, TRACE);
2755 	printk("hp100: %s: cascade_reset\n", dev->name);
2756 #endif
2757 
2758 	if (enable) {
2759 		hp100_outw(HP100_HW_RST | HP100_RESET_LB, OPTION_LSW);
2760 		if (lp->chip == HP100_CHIPID_LASSEN) {
2761 			/* Lassen requires a PCI transmit fifo reset */
2762 			hp100_page(HW_MAP);
2763 			hp100_andb(~HP100_PCI_RESET, PCICTRL2);
2764 			hp100_orb(HP100_PCI_RESET, PCICTRL2);
2765 			/* Wait for min. 300 ns */
2766 			/* we can't use jiffies here, because it may be */
2767 			/* that we have disabled the timer... */
2768 			udelay(400);
2769 			hp100_andb(~HP100_PCI_RESET, PCICTRL2);
2770 			hp100_page(PERFORMANCE);
2771 		}
2772 	} else {		/* bring out of reset */
2773 		hp100_outw(HP100_HW_RST | HP100_SET_LB, OPTION_LSW);
2774 		udelay(400);
2775 		hp100_page(PERFORMANCE);
2776 	}
2777 }
2778 
2779 #ifdef HP100_DEBUG
hp100_RegisterDump(struct net_device * dev)2780 void hp100_RegisterDump(struct net_device *dev)
2781 {
2782 	int ioaddr = dev->base_addr;
2783 	int Page;
2784 	int Register;
2785 
2786 	/* Dump common registers */
2787 	printk("hp100: %s: Cascade Register Dump\n", dev->name);
2788 	printk("hardware id #1: 0x%.2x\n", hp100_inb(HW_ID));
2789 	printk("hardware id #2/paging: 0x%.2x\n", hp100_inb(PAGING));
2790 	printk("option #1: 0x%.4x\n", hp100_inw(OPTION_LSW));
2791 	printk("option #2: 0x%.4x\n", hp100_inw(OPTION_MSW));
2792 
2793 	/* Dump paged registers */
2794 	for (Page = 0; Page < 8; Page++) {
2795 		/* Dump registers */
2796 		printk("page: 0x%.2x\n", Page);
2797 		outw(Page, ioaddr + 0x02);
2798 		for (Register = 0x8; Register < 0x22; Register += 2) {
2799 			/* Display Register contents except data port */
2800 			if (((Register != 0x10) && (Register != 0x12)) || (Page > 0)) {
2801 				printk("0x%.2x = 0x%.4x\n", Register, inw(ioaddr + Register));
2802 			}
2803 		}
2804 	}
2805 	hp100_page(PERFORMANCE);
2806 }
2807 #endif
2808 
2809 
cleanup_dev(struct net_device * d)2810 static void cleanup_dev(struct net_device *d)
2811 {
2812 	struct hp100_private *p = netdev_priv(d);
2813 
2814 	unregister_netdev(d);
2815 	release_region(d->base_addr, HP100_REGION_SIZE);
2816 
2817 	if (p->mode == 1)	/* busmaster */
2818 		pci_free_consistent(p->pci_dev, MAX_RINGSIZE + 0x0f,
2819 				    p->page_vaddr_algn,
2820 				    virt_to_whatever(d, p->page_vaddr_algn));
2821 	if (p->mem_ptr_virt)
2822 		iounmap(p->mem_ptr_virt);
2823 
2824 	free_netdev(d);
2825 }
2826 
hp100_eisa_probe(struct device * gendev)2827 static int hp100_eisa_probe(struct device *gendev)
2828 {
2829 	struct net_device *dev = alloc_etherdev(sizeof(struct hp100_private));
2830 	struct eisa_device *edev = to_eisa_device(gendev);
2831 	int err;
2832 
2833 	if (!dev)
2834 		return -ENOMEM;
2835 
2836 	SET_NETDEV_DEV(dev, &edev->dev);
2837 
2838 	err = hp100_probe1(dev, edev->base_addr + 0xC38, HP100_BUS_EISA, NULL);
2839 	if (err)
2840 		goto out1;
2841 
2842 #ifdef HP100_DEBUG
2843 	printk("hp100: %s: EISA adapter found at 0x%x\n", dev->name,
2844 	       dev->base_addr);
2845 #endif
2846 	dev_set_drvdata(gendev, dev);
2847 	return 0;
2848  out1:
2849 	free_netdev(dev);
2850 	return err;
2851 }
2852 
hp100_eisa_remove(struct device * gendev)2853 static int hp100_eisa_remove(struct device *gendev)
2854 {
2855 	struct net_device *dev = dev_get_drvdata(gendev);
2856 	cleanup_dev(dev);
2857 	return 0;
2858 }
2859 
2860 static struct eisa_driver hp100_eisa_driver = {
2861         .id_table = hp100_eisa_tbl,
2862         .driver   = {
2863                 .name    = "hp100",
2864                 .probe   = hp100_eisa_probe,
2865 		.remove  = hp100_eisa_remove,
2866         }
2867 };
2868 
hp100_pci_probe(struct pci_dev * pdev,const struct pci_device_id * ent)2869 static int hp100_pci_probe(struct pci_dev *pdev,
2870 			   const struct pci_device_id *ent)
2871 {
2872 	struct net_device *dev;
2873 	int ioaddr;
2874 	u_short pci_command;
2875 	int err;
2876 
2877 	if (pci_enable_device(pdev))
2878 		return -ENODEV;
2879 
2880 	dev = alloc_etherdev(sizeof(struct hp100_private));
2881 	if (!dev) {
2882 		err = -ENOMEM;
2883 		goto out0;
2884 	}
2885 
2886 	SET_NETDEV_DEV(dev, &pdev->dev);
2887 
2888 	pci_read_config_word(pdev, PCI_COMMAND, &pci_command);
2889 	if (!(pci_command & PCI_COMMAND_IO)) {
2890 #ifdef HP100_DEBUG
2891 		printk("hp100: %s: PCI I/O Bit has not been set. Setting...\n", dev->name);
2892 #endif
2893 		pci_command |= PCI_COMMAND_IO;
2894 		pci_write_config_word(pdev, PCI_COMMAND, pci_command);
2895 	}
2896 
2897 	if (!(pci_command & PCI_COMMAND_MASTER)) {
2898 #ifdef HP100_DEBUG
2899 		printk("hp100: %s: PCI Master Bit has not been set. Setting...\n", dev->name);
2900 #endif
2901 		pci_command |= PCI_COMMAND_MASTER;
2902 		pci_write_config_word(pdev, PCI_COMMAND, pci_command);
2903 	}
2904 
2905 	ioaddr = pci_resource_start(pdev, 0);
2906 	err = hp100_probe1(dev, ioaddr, HP100_BUS_PCI, pdev);
2907 	if (err)
2908 		goto out1;
2909 
2910 #ifdef HP100_DEBUG
2911 	printk("hp100: %s: PCI adapter found at 0x%x\n", dev->name, ioaddr);
2912 #endif
2913 	pci_set_drvdata(pdev, dev);
2914 	return 0;
2915  out1:
2916 	free_netdev(dev);
2917  out0:
2918 	pci_disable_device(pdev);
2919 	return err;
2920 }
2921 
hp100_pci_remove(struct pci_dev * pdev)2922 static void hp100_pci_remove(struct pci_dev *pdev)
2923 {
2924 	struct net_device *dev = pci_get_drvdata(pdev);
2925 
2926 	cleanup_dev(dev);
2927 	pci_disable_device(pdev);
2928 }
2929 
2930 
2931 static struct pci_driver hp100_pci_driver = {
2932 	.name		= "hp100",
2933 	.id_table	= hp100_pci_tbl,
2934 	.probe		= hp100_pci_probe,
2935 	.remove		= hp100_pci_remove,
2936 };
2937 
2938 /*
2939  *  module section
2940  */
2941 
2942 MODULE_LICENSE("GPL");
2943 MODULE_AUTHOR("Jaroslav Kysela <perex@perex.cz>, "
2944               "Siegfried \"Frieder\" Loeffler (dg1sek) <floeff@mathematik.uni-stuttgart.de>");
2945 MODULE_DESCRIPTION("HP CASCADE Architecture Driver for 100VG-AnyLan Network Adapters");
2946 
2947 /*
2948  * Note: to register three isa devices, use:
2949  * option hp100 hp100_port=0,0,0
2950  *        to register one card at io 0x280 as eth239, use:
2951  * option hp100 hp100_port=0x280
2952  */
2953 #if defined(MODULE) && defined(CONFIG_ISA)
2954 #define HP100_DEVICES 5
2955 /* Parameters set by insmod */
2956 static int hp100_port[HP100_DEVICES] = { 0, [1 ... (HP100_DEVICES-1)] = -1 };
2957 module_param_hw_array(hp100_port, int, ioport, NULL, 0);
2958 
2959 /* List of devices */
2960 static struct net_device *hp100_devlist[HP100_DEVICES];
2961 
hp100_isa_init(void)2962 static int __init hp100_isa_init(void)
2963 {
2964 	struct net_device *dev;
2965 	int i, err, cards = 0;
2966 
2967 	/* Don't autoprobe ISA bus */
2968 	if (hp100_port[0] == 0)
2969 		return -ENODEV;
2970 
2971 	/* Loop on all possible base addresses */
2972 	for (i = 0; i < HP100_DEVICES && hp100_port[i] != -1; ++i) {
2973 		dev = alloc_etherdev(sizeof(struct hp100_private));
2974 		if (!dev) {
2975 			while (cards > 0)
2976 				cleanup_dev(hp100_devlist[--cards]);
2977 
2978 			return -ENOMEM;
2979 		}
2980 
2981 		err = hp100_isa_probe(dev, hp100_port[i]);
2982 		if (!err)
2983 			hp100_devlist[cards++] = dev;
2984 		else
2985 			free_netdev(dev);
2986 	}
2987 
2988 	return cards > 0 ? 0 : -ENODEV;
2989 }
2990 
hp100_isa_cleanup(void)2991 static void hp100_isa_cleanup(void)
2992 {
2993 	int i;
2994 
2995 	for (i = 0; i < HP100_DEVICES; i++) {
2996 		struct net_device *dev = hp100_devlist[i];
2997 		if (dev)
2998 			cleanup_dev(dev);
2999 	}
3000 }
3001 #else
3002 #define hp100_isa_init()	(0)
3003 #define hp100_isa_cleanup()	do { } while(0)
3004 #endif
3005 
hp100_module_init(void)3006 static int __init hp100_module_init(void)
3007 {
3008 	int err;
3009 
3010 	err = hp100_isa_init();
3011 	if (err && err != -ENODEV)
3012 		goto out;
3013 	err = eisa_driver_register(&hp100_eisa_driver);
3014 	if (err && err != -ENODEV)
3015 		goto out2;
3016 	err = pci_register_driver(&hp100_pci_driver);
3017 	if (err && err != -ENODEV)
3018 		goto out3;
3019  out:
3020 	return err;
3021  out3:
3022 	eisa_driver_unregister (&hp100_eisa_driver);
3023  out2:
3024 	hp100_isa_cleanup();
3025 	goto out;
3026 }
3027 
3028 
hp100_module_exit(void)3029 static void __exit hp100_module_exit(void)
3030 {
3031 	hp100_isa_cleanup();
3032 	eisa_driver_unregister (&hp100_eisa_driver);
3033 	pci_unregister_driver (&hp100_pci_driver);
3034 }
3035 
3036 module_init(hp100_module_init)
3037 module_exit(hp100_module_exit)
3038