• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*  D-Link DL2000-based Gigabit Ethernet Adapter Linux driver */
2 /*
3     Copyright (c) 2001, 2002 by D-Link Corporation
4     Written by Edward Peng.<edward_peng@dlink.com.tw>
5     Created 03-May-2001, base on Linux' sundance.c.
6 
7     This program is free software; you can redistribute it and/or modify
8     it under the terms of the GNU General Public License as published by
9     the Free Software Foundation; either version 2 of the License, or
10     (at your option) any later version.
11 */
12 
13 #ifndef __DL2K_H__
14 #define __DL2K_H__
15 
16 #include <linux/module.h>
17 #include <linux/kernel.h>
18 #include <linux/string.h>
19 #include <linux/timer.h>
20 #include <linux/errno.h>
21 #include <linux/ioport.h>
22 #include <linux/slab.h>
23 #include <linux/interrupt.h>
24 #include <linux/pci.h>
25 #include <linux/netdevice.h>
26 #include <linux/etherdevice.h>
27 #include <linux/skbuff.h>
28 #include <linux/init.h>
29 #include <linux/crc32.h>
30 #include <linux/ethtool.h>
31 #include <linux/bitops.h>
32 #include <asm/processor.h>	/* Processor type for cache alignment. */
33 #include <asm/io.h>
34 #include <asm/uaccess.h>
35 #include <linux/delay.h>
36 #include <linux/spinlock.h>
37 #include <linux/time.h>
38 #define TX_RING_SIZE	256
39 #define TX_QUEUE_LEN	(TX_RING_SIZE - 1) /* Limit ring entries actually used.*/
40 #define RX_RING_SIZE 	256
41 #define TX_TOTAL_SIZE	TX_RING_SIZE*sizeof(struct netdev_desc)
42 #define RX_TOTAL_SIZE	RX_RING_SIZE*sizeof(struct netdev_desc)
43 
44 /* This driver was written to use PCI memory space, however x86-oriented
45    hardware often uses I/O space accesses. */
46 #ifndef MEM_MAPPING
47 #undef readb
48 #undef readw
49 #undef readl
50 #undef writeb
51 #undef writew
52 #undef writel
53 #define readb inb
54 #define readw inw
55 #define readl inl
56 #define writeb outb
57 #define writew outw
58 #define writel outl
59 #endif
60 
61 /* Offsets to the device registers.
62    Unlike software-only systems, device drivers interact with complex hardware.
63    It's not useful to define symbolic names for every register bit in the
64    device.  The name can only partially document the semantics and make
65    the driver longer and more difficult to read.
66    In general, only the important configuration values or bits changed
67    multiple times should be defined symbolically.
68 */
69 enum dl2x_offsets {
70 	/* I/O register offsets */
71 	DMACtrl = 0x00,
72 	RxDMAStatus = 0x08,
73 	TFDListPtr0 = 0x10,
74 	TFDListPtr1 = 0x14,
75 	TxDMABurstThresh = 0x18,
76 	TxDMAUrgentThresh = 0x19,
77 	TxDMAPollPeriod = 0x1a,
78 	RFDListPtr0 = 0x1c,
79 	RFDListPtr1 = 0x20,
80 	RxDMABurstThresh = 0x24,
81 	RxDMAUrgentThresh = 0x25,
82 	RxDMAPollPeriod = 0x26,
83 	RxDMAIntCtrl = 0x28,
84 	DebugCtrl = 0x2c,
85 	ASICCtrl = 0x30,
86 	FifoCtrl = 0x38,
87 	RxEarlyThresh = 0x3a,
88 	FlowOffThresh = 0x3c,
89 	FlowOnThresh = 0x3e,
90 	TxStartThresh = 0x44,
91 	EepromData = 0x48,
92 	EepromCtrl = 0x4a,
93 	ExpromAddr = 0x4c,
94 	Exprodata = 0x50,
95 	WakeEvent = 0x51,
96 	CountDown = 0x54,
97 	IntStatusAck = 0x5a,
98 	IntEnable = 0x5c,
99 	IntStatus = 0x5e,
100 	TxStatus = 0x60,
101 	MACCtrl = 0x6c,
102 	VLANTag = 0x70,
103 	PhyCtrl = 0x76,
104 	StationAddr0 = 0x78,
105 	StationAddr1 = 0x7a,
106 	StationAddr2 = 0x7c,
107 	VLANId = 0x80,
108 	MaxFrameSize = 0x86,
109 	ReceiveMode = 0x88,
110 	HashTable0 = 0x8c,
111 	HashTable1 = 0x90,
112 	RmonStatMask = 0x98,
113 	StatMask = 0x9c,
114 	RxJumboFrames = 0xbc,
115 	TCPCheckSumErrors = 0xc0,
116 	IPCheckSumErrors = 0xc2,
117 	UDPCheckSumErrors = 0xc4,
118 	TxJumboFrames = 0xf4,
119 	/* Ethernet MIB statistic register offsets */
120 	OctetRcvOk = 0xa8,
121 	McstOctetRcvOk = 0xac,
122 	BcstOctetRcvOk = 0xb0,
123 	FramesRcvOk = 0xb4,
124 	McstFramesRcvdOk = 0xb8,
125 	BcstFramesRcvdOk = 0xbe,
126 	MacControlFramesRcvd = 0xc6,
127 	FrameTooLongErrors = 0xc8,
128 	InRangeLengthErrors = 0xca,
129 	FramesCheckSeqErrors = 0xcc,
130 	FramesLostRxErrors = 0xce,
131 	OctetXmtOk = 0xd0,
132 	McstOctetXmtOk = 0xd4,
133 	BcstOctetXmtOk = 0xd8,
134 	FramesXmtOk = 0xdc,
135 	McstFramesXmtdOk = 0xe0,
136 	FramesWDeferredXmt = 0xe4,
137 	LateCollisions = 0xe8,
138 	MultiColFrames = 0xec,
139 	SingleColFrames = 0xf0,
140 	BcstFramesXmtdOk = 0xf6,
141 	CarrierSenseErrors = 0xf8,
142 	MacControlFramesXmtd = 0xfa,
143 	FramesAbortXSColls = 0xfc,
144 	FramesWEXDeferal = 0xfe,
145 	/* RMON statistic register offsets */
146 	EtherStatsCollisions = 0x100,
147 	EtherStatsOctetsTransmit = 0x104,
148 	EtherStatsPktsTransmit = 0x108,
149 	EtherStatsPkts64OctetTransmit = 0x10c,
150 	EtherStats65to127OctetsTransmit = 0x110,
151 	EtherStatsPkts128to255OctetsTransmit = 0x114,
152 	EtherStatsPkts256to511OctetsTransmit = 0x118,
153 	EtherStatsPkts512to1023OctetsTransmit = 0x11c,
154 	EtherStatsPkts1024to1518OctetsTransmit = 0x120,
155 	EtherStatsCRCAlignErrors = 0x124,
156 	EtherStatsUndersizePkts = 0x128,
157 	EtherStatsFragments = 0x12c,
158 	EtherStatsJabbers = 0x130,
159 	EtherStatsOctets = 0x134,
160 	EtherStatsPkts = 0x138,
161 	EtherStats64Octets = 0x13c,
162 	EtherStatsPkts65to127Octets = 0x140,
163 	EtherStatsPkts128to255Octets = 0x144,
164 	EtherStatsPkts256to511Octets = 0x148,
165 	EtherStatsPkts512to1023Octets = 0x14c,
166 	EtherStatsPkts1024to1518Octets = 0x150,
167 };
168 
169 /* Bits in the interrupt status/mask registers. */
170 enum IntStatus_bits {
171 	InterruptStatus = 0x0001,
172 	HostError = 0x0002,
173 	MACCtrlFrame = 0x0008,
174 	TxComplete = 0x0004,
175 	RxComplete = 0x0010,
176 	RxEarly = 0x0020,
177 	IntRequested = 0x0040,
178 	UpdateStats = 0x0080,
179 	LinkEvent = 0x0100,
180 	TxDMAComplete = 0x0200,
181 	RxDMAComplete = 0x0400,
182 	RFDListEnd = 0x0800,
183 	RxDMAPriority = 0x1000,
184 };
185 
186 /* Bits in the ReceiveMode register. */
187 enum ReceiveMode_bits {
188 	ReceiveUnicast = 0x0001,
189 	ReceiveMulticast = 0x0002,
190 	ReceiveBroadcast = 0x0004,
191 	ReceiveAllFrames = 0x0008,
192 	ReceiveMulticastHash = 0x0010,
193 	ReceiveIPMulticast = 0x0020,
194 	ReceiveVLANMatch = 0x0100,
195 	ReceiveVLANHash = 0x0200,
196 };
197 /* Bits in MACCtrl. */
198 enum MACCtrl_bits {
199 	DuplexSelect = 0x20,
200 	TxFlowControlEnable = 0x80,
201 	RxFlowControlEnable = 0x0100,
202 	RcvFCS = 0x200,
203 	AutoVLANtagging = 0x1000,
204 	AutoVLANuntagging = 0x2000,
205 	StatsEnable = 0x00200000,
206 	StatsDisable = 0x00400000,
207 	StatsEnabled = 0x00800000,
208 	TxEnable = 0x01000000,
209 	TxDisable = 0x02000000,
210 	TxEnabled = 0x04000000,
211 	RxEnable = 0x08000000,
212 	RxDisable = 0x10000000,
213 	RxEnabled = 0x20000000,
214 };
215 
216 enum ASICCtrl_LoWord_bits {
217 	PhyMedia = 0x0080,
218 };
219 
220 enum ASICCtrl_HiWord_bits {
221 	GlobalReset = 0x0001,
222 	RxReset = 0x0002,
223 	TxReset = 0x0004,
224 	DMAReset = 0x0008,
225 	FIFOReset = 0x0010,
226 	NetworkReset = 0x0020,
227 	HostReset = 0x0040,
228 	ResetBusy = 0x0400,
229 };
230 
231 /* Transmit Frame Control bits */
232 enum TFC_bits {
233 	DwordAlign = 0x00000000,
234 	WordAlignDisable = 0x00030000,
235 	WordAlign = 0x00020000,
236 	TCPChecksumEnable = 0x00040000,
237 	UDPChecksumEnable = 0x00080000,
238 	IPChecksumEnable = 0x00100000,
239 	FCSAppendDisable = 0x00200000,
240 	TxIndicate = 0x00400000,
241 	TxDMAIndicate = 0x00800000,
242 	FragCountShift = 24,
243 	VLANTagInsert = 0x0000000010000000,
244 	TFDDone = 0x80000000,
245 	VIDShift = 32,
246 	UsePriorityShift = 48,
247 };
248 
249 /* Receive Frames Status bits */
250 enum RFS_bits {
251 	RxFIFOOverrun = 0x00010000,
252 	RxRuntFrame = 0x00020000,
253 	RxAlignmentError = 0x00040000,
254 	RxFCSError = 0x00080000,
255 	RxOverSizedFrame = 0x00100000,
256 	RxLengthError = 0x00200000,
257 	VLANDetected = 0x00400000,
258 	TCPDetected = 0x00800000,
259 	TCPError = 0x01000000,
260 	UDPDetected = 0x02000000,
261 	UDPError = 0x04000000,
262 	IPDetected = 0x08000000,
263 	IPError = 0x10000000,
264 	FrameStart = 0x20000000,
265 	FrameEnd = 0x40000000,
266 	RFDDone = 0x80000000,
267 	TCIShift = 32,
268 	RFS_Errors = 0x003f0000,
269 };
270 
271 #define MII_RESET_TIME_OUT		10000
272 /* MII register */
273 enum _mii_reg {
274 	MII_BMCR = 0,
275 	MII_BMSR = 1,
276 	MII_PHY_ID1 = 2,
277 	MII_PHY_ID2 = 3,
278 	MII_ANAR = 4,
279 	MII_ANLPAR = 5,
280 	MII_ANER = 6,
281 	MII_ANNPT = 7,
282 	MII_ANLPRNP = 8,
283 	MII_MSCR = 9,
284 	MII_MSSR = 10,
285 	MII_ESR = 15,
286 	MII_PHY_SCR = 16,
287 };
288 /* PCS register */
289 enum _pcs_reg {
290 	PCS_BMCR = 0,
291 	PCS_BMSR = 1,
292 	PCS_ANAR = 4,
293 	PCS_ANLPAR = 5,
294 	PCS_ANER = 6,
295 	PCS_ANNPT = 7,
296 	PCS_ANLPRNP = 8,
297 	PCS_ESR = 15,
298 };
299 
300 /* Basic Mode Control Register */
301 enum _mii_bmcr {
302 	MII_BMCR_RESET = 0x8000,
303 	MII_BMCR_LOOP_BACK = 0x4000,
304 	MII_BMCR_SPEED_LSB = 0x2000,
305 	MII_BMCR_AN_ENABLE = 0x1000,
306 	MII_BMCR_POWER_DOWN = 0x0800,
307 	MII_BMCR_ISOLATE = 0x0400,
308 	MII_BMCR_RESTART_AN = 0x0200,
309 	MII_BMCR_DUPLEX_MODE = 0x0100,
310 	MII_BMCR_COL_TEST = 0x0080,
311 	MII_BMCR_SPEED_MSB = 0x0040,
312 	MII_BMCR_SPEED_RESERVED = 0x003f,
313 	MII_BMCR_SPEED_10 = 0,
314 	MII_BMCR_SPEED_100 = MII_BMCR_SPEED_LSB,
315 	MII_BMCR_SPEED_1000 = MII_BMCR_SPEED_MSB,
316 };
317 
318 /* Basic Mode Status Register */
319 enum _mii_bmsr {
320 	MII_BMSR_100BT4 = 0x8000,
321 	MII_BMSR_100BX_FD = 0x4000,
322 	MII_BMSR_100BX_HD = 0x2000,
323 	MII_BMSR_10BT_FD = 0x1000,
324 	MII_BMSR_10BT_HD = 0x0800,
325 	MII_BMSR_100BT2_FD = 0x0400,
326 	MII_BMSR_100BT2_HD = 0x0200,
327 	MII_BMSR_EXT_STATUS = 0x0100,
328 	MII_BMSR_PREAMBLE_SUPP = 0x0040,
329 	MII_BMSR_AN_COMPLETE = 0x0020,
330 	MII_BMSR_REMOTE_FAULT = 0x0010,
331 	MII_BMSR_AN_ABILITY = 0x0008,
332 	MII_BMSR_LINK_STATUS = 0x0004,
333 	MII_BMSR_JABBER_DETECT = 0x0002,
334 	MII_BMSR_EXT_CAP = 0x0001,
335 };
336 
337 /* ANAR */
338 enum _mii_anar {
339 	MII_ANAR_NEXT_PAGE = 0x8000,
340 	MII_ANAR_REMOTE_FAULT = 0x4000,
341 	MII_ANAR_ASYMMETRIC = 0x0800,
342 	MII_ANAR_PAUSE = 0x0400,
343 	MII_ANAR_100BT4 = 0x0200,
344 	MII_ANAR_100BX_FD = 0x0100,
345 	MII_ANAR_100BX_HD = 0x0080,
346 	MII_ANAR_10BT_FD = 0x0020,
347 	MII_ANAR_10BT_HD = 0x0010,
348 	MII_ANAR_SELECTOR = 0x001f,
349 	MII_IEEE8023_CSMACD = 0x0001,
350 };
351 
352 /* ANLPAR */
353 enum _mii_anlpar {
354 	MII_ANLPAR_NEXT_PAGE = MII_ANAR_NEXT_PAGE,
355 	MII_ANLPAR_REMOTE_FAULT = MII_ANAR_REMOTE_FAULT,
356 	MII_ANLPAR_ASYMMETRIC = MII_ANAR_ASYMMETRIC,
357 	MII_ANLPAR_PAUSE = MII_ANAR_PAUSE,
358 	MII_ANLPAR_100BT4 = MII_ANAR_100BT4,
359 	MII_ANLPAR_100BX_FD = MII_ANAR_100BX_FD,
360 	MII_ANLPAR_100BX_HD = MII_ANAR_100BX_HD,
361 	MII_ANLPAR_10BT_FD = MII_ANAR_10BT_FD,
362 	MII_ANLPAR_10BT_HD = MII_ANAR_10BT_HD,
363 	MII_ANLPAR_SELECTOR = MII_ANAR_SELECTOR,
364 };
365 
366 /* Auto-Negotiation Expansion Register */
367 enum _mii_aner {
368 	MII_ANER_PAR_DETECT_FAULT = 0x0010,
369 	MII_ANER_LP_NEXTPAGABLE = 0x0008,
370 	MII_ANER_NETXTPAGABLE = 0x0004,
371 	MII_ANER_PAGE_RECEIVED = 0x0002,
372 	MII_ANER_LP_NEGOTIABLE = 0x0001,
373 };
374 
375 /* MASTER-SLAVE Control Register */
376 enum _mii_mscr {
377 	MII_MSCR_TEST_MODE = 0xe000,
378 	MII_MSCR_CFG_ENABLE = 0x1000,
379 	MII_MSCR_CFG_VALUE = 0x0800,
380 	MII_MSCR_PORT_VALUE = 0x0400,
381 	MII_MSCR_1000BT_FD = 0x0200,
382 	MII_MSCR_1000BT_HD = 0X0100,
383 };
384 
385 /* MASTER-SLAVE Status Register */
386 enum _mii_mssr {
387 	MII_MSSR_CFG_FAULT = 0x8000,
388 	MII_MSSR_CFG_RES = 0x4000,
389 	MII_MSSR_LOCAL_RCV_STATUS = 0x2000,
390 	MII_MSSR_REMOTE_RCVR = 0x1000,
391 	MII_MSSR_LP_1000BT_FD = 0x0800,
392 	MII_MSSR_LP_1000BT_HD = 0x0400,
393 	MII_MSSR_IDLE_ERR_COUNT = 0x00ff,
394 };
395 
396 /* IEEE Extened Status Register */
397 enum _mii_esr {
398 	MII_ESR_1000BX_FD = 0x8000,
399 	MII_ESR_1000BX_HD = 0x4000,
400 	MII_ESR_1000BT_FD = 0x2000,
401 	MII_ESR_1000BT_HD = 0x1000,
402 };
403 /* PHY Specific Control Register */
404 #if 0
405 typedef union t_MII_PHY_SCR {
406 	u16 image;
407 	struct {
408 		u16 disable_jabber:1;	// bit 0
409 		u16 polarity_reversal:1;	// bit 1
410 		u16 SEQ_test:1;	// bit 2
411 		u16 _bit_3:1;	// bit 3
412 		u16 disable_CLK125:1;	// bit 4
413 		u16 mdi_crossover_mode:2;	// bit 6:5
414 		u16 enable_ext_dist:1;	// bit 7
415 		u16 _bit_8_9:2;	// bit 9:8
416 		u16 force_link:1;	// bit 10
417 		u16 assert_CRS:1;	// bit 11
418 		u16 rcv_fifo_depth:2;	// bit 13:12
419 		u16 xmit_fifo_depth:2;	// bit 15:14
420 	} bits;
421 } PHY_SCR_t, *PPHY_SCR_t;
422 #endif
423 
424 typedef enum t_MII_ADMIN_STATUS {
425 	adm_reset,
426 	adm_operational,
427 	adm_loopback,
428 	adm_power_down,
429 	adm_isolate
430 } MII_ADMIN_t, *PMII_ADMIN_t;
431 
432 /* Physical Coding Sublayer Management (PCS) */
433 /* PCS control and status registers bitmap as the same as MII */
434 /* PCS Extended Status register bitmap as the same as MII */
435 /* PCS ANAR */
436 enum _pcs_anar {
437 	PCS_ANAR_NEXT_PAGE = 0x8000,
438 	PCS_ANAR_REMOTE_FAULT = 0x3000,
439 	PCS_ANAR_ASYMMETRIC = 0x0100,
440 	PCS_ANAR_PAUSE = 0x0080,
441 	PCS_ANAR_HALF_DUPLEX = 0x0040,
442 	PCS_ANAR_FULL_DUPLEX = 0x0020,
443 };
444 /* PCS ANLPAR */
445 enum _pcs_anlpar {
446 	PCS_ANLPAR_NEXT_PAGE = PCS_ANAR_NEXT_PAGE,
447 	PCS_ANLPAR_REMOTE_FAULT = PCS_ANAR_REMOTE_FAULT,
448 	PCS_ANLPAR_ASYMMETRIC = PCS_ANAR_ASYMMETRIC,
449 	PCS_ANLPAR_PAUSE = PCS_ANAR_PAUSE,
450 	PCS_ANLPAR_HALF_DUPLEX = PCS_ANAR_HALF_DUPLEX,
451 	PCS_ANLPAR_FULL_DUPLEX = PCS_ANAR_FULL_DUPLEX,
452 };
453 
454 typedef struct t_SROM {
455 	u16 config_param;	/* 0x00 */
456 	u16 asic_ctrl;		/* 0x02 */
457 	u16 sub_vendor_id;	/* 0x04 */
458 	u16 sub_system_id;	/* 0x06 */
459 	u16 reserved1[12];	/* 0x08-0x1f */
460 	u8 mac_addr[6];		/* 0x20-0x25 */
461 	u8 reserved2[10];	/* 0x26-0x2f */
462 	u8 sib[204];		/* 0x30-0xfb */
463 	u32 crc;		/* 0xfc-0xff */
464 } SROM_t, *PSROM_t;
465 
466 /* Ioctl custom data */
467 struct ioctl_data {
468 	char signature[10];
469 	int cmd;
470 	int len;
471 	char *data;
472 };
473 
474 struct mii_data {
475 	__u16 reserved;
476 	__u16 reg_num;
477 	__u16 in_value;
478 	__u16 out_value;
479 };
480 
481 /* The Rx and Tx buffer descriptors. */
482 struct netdev_desc {
483 	__le64 next_desc;
484 	__le64 status;
485 	__le64 fraginfo;
486 };
487 
488 #define PRIV_ALIGN	15	/* Required alignment mask */
489 /* Use  __attribute__((aligned (L1_CACHE_BYTES)))  to maintain alignment
490    within the structure. */
491 struct netdev_private {
492 	/* Descriptor rings first for alignment. */
493 	struct netdev_desc *rx_ring;
494 	struct netdev_desc *tx_ring;
495 	struct sk_buff *rx_skbuff[RX_RING_SIZE];
496 	struct sk_buff *tx_skbuff[TX_RING_SIZE];
497 	dma_addr_t tx_ring_dma;
498 	dma_addr_t rx_ring_dma;
499 	struct pci_dev *pdev;
500 	spinlock_t tx_lock;
501 	spinlock_t rx_lock;
502 	struct net_device_stats stats;
503 	unsigned int rx_buf_sz;		/* Based on MTU+slack. */
504 	unsigned int speed;		/* Operating speed */
505 	unsigned int vlan;		/* VLAN Id */
506 	unsigned int chip_id;		/* PCI table chip id */
507 	unsigned int rx_coalesce; 	/* Maximum frames each RxDMAComplete intr */
508 	unsigned int rx_timeout; 	/* Wait time between RxDMAComplete intr */
509 	unsigned int tx_coalesce;	/* Maximum frames each tx interrupt */
510 	unsigned int full_duplex:1;	/* Full-duplex operation requested. */
511 	unsigned int an_enable:2;	/* Auto-Negotiated Enable */
512 	unsigned int jumbo:1;		/* Jumbo frame enable */
513 	unsigned int coalesce:1;	/* Rx coalescing enable */
514 	unsigned int tx_flow:1;		/* Tx flow control enable */
515 	unsigned int rx_flow:1;		/* Rx flow control enable */
516 	unsigned int phy_media:1;	/* 1: fiber, 0: copper */
517 	unsigned int link_status:1;	/* Current link status */
518 	struct netdev_desc *last_tx;	/* Last Tx descriptor used. */
519 	unsigned long cur_rx, old_rx;	/* Producer/consumer ring indices */
520 	unsigned long cur_tx, old_tx;
521 	struct timer_list timer;
522 	int wake_polarity;
523 	char name[256];		/* net device description */
524 	u8 duplex_polarity;
525 	u16 mcast_filter[4];
526 	u16 advertising;	/* NWay media advertisement */
527 	u16 negotiate;		/* Negotiated media */
528 	int phy_addr;		/* PHY addresses. */
529 };
530 
531 /* The station address location in the EEPROM. */
532 /* The struct pci_device_id consist of:
533         vendor, device          Vendor and device ID to match (or PCI_ANY_ID)
534         subvendor, subdevice    Subsystem vendor and device ID to match (or PCI_ANY_ID)
535         class                   Device class to match. The class_mask tells which bits
536         class_mask              of the class are honored during the comparison.
537         driver_data             Data private to the driver.
538 */
539 
540 static const struct pci_device_id rio_pci_tbl[] = {
541 	{0x1186, 0x4000, PCI_ANY_ID, PCI_ANY_ID, },
542 	{0x13f0, 0x1021, PCI_ANY_ID, PCI_ANY_ID, },
543 	{ }
544 };
545 MODULE_DEVICE_TABLE (pci, rio_pci_tbl);
546 #define TX_TIMEOUT  (4*HZ)
547 #define PACKET_SIZE		1536
548 #define MAX_JUMBO		8000
549 #define RIO_IO_SIZE             340
550 #define DEFAULT_RXC		5
551 #define DEFAULT_RXT		750
552 #define DEFAULT_TXC		1
553 #define MAX_TXC			8
554 #endif				/* __DL2K_H__ */
555