• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2008 Marty Connor <mdc@etherboot.org>
3  * Copyright (c) 2008 Entity Cyber, Inc.
4  *
5  * This program is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public License as
7  * published by the Free Software Foundation; either version 2 of the
8  * License, or any later version.
9  *
10  * This program is distributed in the hope that it will be useful, but
11  * WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public License
16  * along with this program; if not, write to the Free Software
17  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  *
19  * This driver is based on rtl8169 data sheets and work by:
20  *
21  * Copyright (c) 2002 ShuChen <shuchen@realtek.com.tw>
22  * Copyright (c) 2003 - 2007 Francois Romieu <romieu@fr.zoreil.com>
23  * Copyright (c) a lot of people too. Please respect their work.
24  *
25  */
26 
27 FILE_LICENCE ( GPL2_OR_LATER );
28 
29 #ifndef _R8169_H_
30 #define _R8169_H_
31 
32 #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
33 
34 /** FIXME: include/linux/pci_regs.h has these PCI regs, maybe
35 	   we need such a file in gPXE?
36 **/
37 #define  PCI_EXP_DEVCTL	        8	/* Device Control */
38 #define  PCI_EXP_DEVCTL_READRQ	0x7000	/* Max_Read_Request_Size */
39 #define  PCI_EXP_LNKCTL		16	/* Link Control */
40 #define  PCI_EXP_LNKCTL_CLKREQ_EN 0x100	/* Enable clkreq */
41 #define  PCI_EXP_DEVCTL_NOSNOOP_EN 0x0800  /* Enable No Snoop */
42 
43 /** FIXME: update mii.h in src/include/mii.h from Linux sources
44 	   so we don't have to include these definitiions.
45 **/
46 /* The forced speed, 10Mb, 100Mb, gigabit, 2.5Gb, 10GbE. */
47 #define SPEED_10		10
48 #define SPEED_100		100
49 #define SPEED_1000		1000
50 #define SPEED_2500		2500
51 #define SPEED_10000		10000
52 
53 /* Duplex, half or full. */
54 #define DUPLEX_HALF		0x00
55 #define DUPLEX_FULL		0x01
56 
57 #define AUTONEG_DISABLE		0x00
58 #define AUTONEG_ENABLE		0x01
59 
60 /* MAC address length */
61 #define MAC_ADDR_LEN	6
62 
63 #define MAX_READ_REQUEST_SHIFT	12
64 #define RX_FIFO_THRESH	7	/* 7 means NO threshold, Rx buffer level before first PCI xfer. */
65 #define RX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
66 #define TX_DMA_BURST	6	/* Maximum PCI burst, '6' is 1024 */
67 #define EarlyTxThld	0x3F	/* 0x3F means NO early transmit */
68 #define RxPacketMaxSize	0x3FE8	/* 16K - 1 - ETH_HLEN - VLAN - CRC... */
69 #define SafeMtu		0x1c20	/* ... actually life sucks beyond ~7k */
70 #define InterFrameGap	0x03	/* 3 means InterFrameGap = the shortest one */
71 
72 #define R8169_REGS_SIZE		256
73 #define R8169_NAPI_WEIGHT	64
74 #define NUM_TX_DESC	8	/* Number of Tx descriptor registers */
75 #define NUM_RX_DESC	8	/* Number of Rx descriptor registers */
76 #define RX_BUF_SIZE	1536	/* Rx Buffer size */
77 #define R8169_TX_RING_BYTES	(NUM_TX_DESC * sizeof(struct TxDesc))
78 #define R8169_RX_RING_BYTES	(NUM_RX_DESC * sizeof(struct RxDesc))
79 
80 #define TX_RING_ALIGN		256
81 #define RX_RING_ALIGN		256
82 
83 #define RTL8169_TX_TIMEOUT	(6*HZ)
84 #define RTL8169_PHY_TIMEOUT	(10*HZ)
85 
86 #define RTL_EEPROM_SIG		cpu_to_le32(0x8129)
87 #define RTL_EEPROM_SIG_MASK	cpu_to_le32(0xffff)
88 #define RTL_EEPROM_SIG_ADDR	0x0000
89 
90 /* write/read MMIO register */
91 #define RTL_W8(reg, val8)	writeb ((val8), ioaddr + (reg))
92 #define RTL_W16(reg, val16)	writew ((val16), ioaddr + (reg))
93 #define RTL_W32(reg, val32)	writel ((val32), ioaddr + (reg))
94 #define RTL_R8(reg)		readb (ioaddr + (reg))
95 #define RTL_R16(reg)		readw (ioaddr + (reg))
96 #define RTL_R32(reg)		((unsigned long) readl (ioaddr + (reg)))
97 
98 enum mac_version {
99 	RTL_GIGA_MAC_VER_01 = 0x01, // 8169
100 	RTL_GIGA_MAC_VER_02 = 0x02, // 8169S
101 	RTL_GIGA_MAC_VER_03 = 0x03, // 8110S
102 	RTL_GIGA_MAC_VER_04 = 0x04, // 8169SB
103 	RTL_GIGA_MAC_VER_05 = 0x05, // 8110SCd
104 	RTL_GIGA_MAC_VER_06 = 0x06, // 8110SCe
105 	RTL_GIGA_MAC_VER_07 = 0x07, // 8102e
106 	RTL_GIGA_MAC_VER_08 = 0x08, // 8102e
107 	RTL_GIGA_MAC_VER_09 = 0x09, // 8102e
108 	RTL_GIGA_MAC_VER_10 = 0x0a, // 8101e
109 	RTL_GIGA_MAC_VER_11 = 0x0b, // 8168Bb
110 	RTL_GIGA_MAC_VER_12 = 0x0c, // 8168Be
111 	RTL_GIGA_MAC_VER_13 = 0x0d, // 8101Eb
112 	RTL_GIGA_MAC_VER_14 = 0x0e, // 8101 ?
113 	RTL_GIGA_MAC_VER_15 = 0x0f, // 8101 ?
114 	RTL_GIGA_MAC_VER_16 = 0x11, // 8101Ec
115 	RTL_GIGA_MAC_VER_17 = 0x10, // 8168Bf
116 	RTL_GIGA_MAC_VER_18 = 0x12, // 8168CP
117 	RTL_GIGA_MAC_VER_19 = 0x13, // 8168C
118 	RTL_GIGA_MAC_VER_20 = 0x14, // 8168C
119 	RTL_GIGA_MAC_VER_21 = 0x15, // 8168C
120 	RTL_GIGA_MAC_VER_22 = 0x16, // 8168C
121 	RTL_GIGA_MAC_VER_23 = 0x17, // 8168CP
122 	RTL_GIGA_MAC_VER_24 = 0x18, // 8168CP
123 	RTL_GIGA_MAC_VER_25 = 0x19, // 8168D
124 };
125 
126 #define _R(NAME,MAC,MASK) \
127 	{ .name = NAME, .mac_version = MAC, .RxConfigMask = MASK }
128 
129 static const struct {
130 	const char *name;
131 	u8 mac_version;
132 	u32 RxConfigMask;	/* Clears the bits supported by this chip */
133 } rtl_chip_info[] = {
134 	_R("RTL8169",		RTL_GIGA_MAC_VER_01, 0xff7e1880), // 8169
135 	_R("RTL8169s",		RTL_GIGA_MAC_VER_02, 0xff7e1880), // 8169S
136 	_R("RTL8110s",		RTL_GIGA_MAC_VER_03, 0xff7e1880), // 8110S
137 	_R("RTL8169sb/8110sb",	RTL_GIGA_MAC_VER_04, 0xff7e1880), // 8169SB
138 	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_05, 0xff7e1880), // 8110SCd
139 	_R("RTL8169sc/8110sc",	RTL_GIGA_MAC_VER_06, 0xff7e1880), // 8110SCe
140 	_R("RTL8102e",		RTL_GIGA_MAC_VER_07, 0xff7e1880), // PCI-E
141 	_R("RTL8102e",		RTL_GIGA_MAC_VER_08, 0xff7e1880), // PCI-E
142 	_R("RTL8102e",		RTL_GIGA_MAC_VER_09, 0xff7e1880), // PCI-E
143 	_R("RTL8101e",		RTL_GIGA_MAC_VER_10, 0xff7e1880), // PCI-E
144 	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_11, 0xff7e1880), // PCI-E
145 	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_12, 0xff7e1880), // PCI-E
146 	_R("RTL8101e",		RTL_GIGA_MAC_VER_13, 0xff7e1880), // PCI-E 8139
147 	_R("RTL8100e",		RTL_GIGA_MAC_VER_14, 0xff7e1880), // PCI-E 8139
148 	_R("RTL8100e",		RTL_GIGA_MAC_VER_15, 0xff7e1880), // PCI-E 8139
149 	_R("RTL8168b/8111b",	RTL_GIGA_MAC_VER_17, 0xff7e1880), // PCI-E
150 	_R("RTL8101e",		RTL_GIGA_MAC_VER_16, 0xff7e1880), // PCI-E
151 	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_18, 0xff7e1880), // PCI-E
152 	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_19, 0xff7e1880), // PCI-E
153 	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_20, 0xff7e1880), // PCI-E
154 	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_21, 0xff7e1880), // PCI-E
155 	_R("RTL8168c/8111c",	RTL_GIGA_MAC_VER_22, 0xff7e1880), // PCI-E
156 	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_23, 0xff7e1880), // PCI-E
157 	_R("RTL8168cp/8111cp",	RTL_GIGA_MAC_VER_24, 0xff7e1880), // PCI-E
158 	_R("RTL8168d/8111d",	RTL_GIGA_MAC_VER_25, 0xff7e1880)  // PCI-E
159 };
160 #undef _R
161 
162 enum cfg_version {
163 	RTL_CFG_0 = 0x00,
164 	RTL_CFG_1,
165 	RTL_CFG_2
166 };
167 
168 #if 0
169 /** Device Table from Linux Driver **/
170 static struct pci_device_id rtl8169_pci_tbl[] = {
171 	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8129), 0, 0, RTL_CFG_0 },
172 	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8136), 0, 0, RTL_CFG_2 },
173 	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8167), 0, 0, RTL_CFG_0 },
174 	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8168), 0, 0, RTL_CFG_1 },
175 	{ PCI_DEVICE(PCI_VENDOR_ID_REALTEK,	0x8169), 0, 0, RTL_CFG_0 },
176 	{ PCI_DEVICE(PCI_VENDOR_ID_DLINK,	0x4300), 0, 0, RTL_CFG_0 },
177 	{ PCI_DEVICE(PCI_VENDOR_ID_AT,		0xc107), 0, 0, RTL_CFG_0 },
178 	{ PCI_DEVICE(0x16ec,			0x0116), 0, 0, RTL_CFG_0 },
179 	{ PCI_VENDOR_ID_LINKSYS,		0x1032,
180 		PCI_ANY_ID, 0x0024, 0, 0, RTL_CFG_0 },
181 	{ 0x0001,				0x8168,
182 		PCI_ANY_ID, 0x2410, 0, 0, RTL_CFG_2 },
183 	{0,},
184 };
185 #endif
186 
187 enum rtl_registers {
188 	MAC0		= 0,	/* Ethernet hardware address. */
189 	MAC4		= 4,
190 	MAR0		= 8,	/* Multicast filter. */
191 	CounterAddrLow		= 0x10,
192 	CounterAddrHigh		= 0x14,
193 	TxDescStartAddrLow	= 0x20,
194 	TxDescStartAddrHigh	= 0x24,
195 	TxHDescStartAddrLow	= 0x28,
196 	TxHDescStartAddrHigh	= 0x2c,
197 	FLASH		= 0x30,
198 	ERSR		= 0x36,
199 	ChipCmd		= 0x37,
200 	TxPoll		= 0x38,
201 	IntrMask	= 0x3c,
202 	IntrStatus	= 0x3e,
203 	TxConfig	= 0x40,
204 	RxConfig	= 0x44,
205 	RxMissed	= 0x4c,
206 	Cfg9346		= 0x50,
207 	Config0		= 0x51,
208 	Config1		= 0x52,
209 	Config2		= 0x53,
210 	Config3		= 0x54,
211 	Config4		= 0x55,
212 	Config5		= 0x56,
213 	MultiIntr	= 0x5c,
214 	PHYAR		= 0x60,
215 	PHYstatus	= 0x6c,
216 	RxMaxSize	= 0xda,
217 	CPlusCmd	= 0xe0,
218 	IntrMitigate	= 0xe2,
219 	RxDescAddrLow	= 0xe4,
220 	RxDescAddrHigh	= 0xe8,
221 	EarlyTxThres	= 0xec,
222 	FuncEvent	= 0xf0,
223 	FuncEventMask	= 0xf4,
224 	FuncPresetState	= 0xf8,
225 	FuncForceEvent	= 0xfc,
226 };
227 
228 enum rtl8110_registers {
229 	TBICSR			= 0x64,
230 	TBI_ANAR		= 0x68,
231 	TBI_LPAR		= 0x6a,
232 };
233 
234 enum rtl8168_8101_registers {
235 	CSIDR			= 0x64,
236 	CSIAR			= 0x68,
237 #define	CSIAR_FLAG			0x80000000
238 #define	CSIAR_WRITE_CMD			0x80000000
239 #define	CSIAR_BYTE_ENABLE		0x0f
240 #define	CSIAR_BYTE_ENABLE_SHIFT		12
241 #define	CSIAR_ADDR_MASK			0x0fff
242 
243 	EPHYAR			= 0x80,
244 #define	EPHYAR_FLAG			0x80000000
245 #define	EPHYAR_WRITE_CMD		0x80000000
246 #define	EPHYAR_REG_MASK			0x1f
247 #define	EPHYAR_REG_SHIFT		16
248 #define	EPHYAR_DATA_MASK		0xffff
249 	DBG_REG			= 0xd1,
250 #define	FIX_NAK_1			(1 << 4)
251 #define	FIX_NAK_2			(1 << 3)
252 };
253 
254 enum rtl_register_content {
255 	/* InterruptStatusBits */
256 	SYSErr		= 0x8000,
257 	PCSTimeout	= 0x4000,
258 	SWInt		= 0x0100,
259 	TxDescUnavail	= 0x0080,
260 	RxFIFOOver	= 0x0040,
261 	LinkChg		= 0x0020,
262 	RxOverflow	= 0x0010,
263 	TxErr		= 0x0008,
264 	TxOK		= 0x0004,
265 	RxErr		= 0x0002,
266 	RxOK		= 0x0001,
267 
268 	/* RxStatusDesc */
269 	RxFOVF	= (1 << 23),
270 	RxRWT	= (1 << 22),
271 	RxRES	= (1 << 21),
272 	RxRUNT	= (1 << 20),
273 	RxCRC	= (1 << 19),
274 
275 	/* ChipCmdBits */
276 	CmdReset	= 0x10,
277 	CmdRxEnb	= 0x08,
278 	CmdTxEnb	= 0x04,
279 	RxBufEmpty	= 0x01,
280 
281 	/* TXPoll register p.5 */
282 	HPQ		= 0x80,		/* Poll cmd on the high prio queue */
283 	NPQ		= 0x40,		/* Poll cmd on the low prio queue */
284 	FSWInt		= 0x01,		/* Forced software interrupt */
285 
286 	/* Cfg9346Bits */
287 	Cfg9346_Lock	= 0x00,
288 	Cfg9346_Unlock	= 0xc0,
289 
290 	/* rx_mode_bits */
291 	AcceptErr	= 0x20,
292 	AcceptRunt	= 0x10,
293 	AcceptBroadcast	= 0x08,
294 	AcceptMulticast	= 0x04,
295 	AcceptMyPhys	= 0x02,
296 	AcceptAllPhys	= 0x01,
297 
298 	/* RxConfigBits */
299 	RxCfgFIFOShift	= 13,
300 	RxCfgDMAShift	=  8,
301 
302 	/* TxConfigBits */
303 	TxInterFrameGapShift = 24,
304 	TxDMAShift = 8,	/* DMA burst value (0-7) is shift this many bits */
305 
306 	/* Config1 register p.24 */
307 	LEDS1		= (1 << 7),
308 	LEDS0		= (1 << 6),
309 	MSIEnable	= (1 << 5),	/* Enable Message Signaled Interrupt */
310 	Speed_down	= (1 << 4),
311 	MEMMAP		= (1 << 3),
312 	IOMAP		= (1 << 2),
313 	VPD		= (1 << 1),
314 	PMEnable	= (1 << 0),	/* Power Management Enable */
315 
316 	/* Config2 register p. 25 */
317 	PCI_Clock_66MHz = 0x01,
318 	PCI_Clock_33MHz = 0x00,
319 
320 	/* Config3 register p.25 */
321 	MagicPacket	= (1 << 5),	/* Wake up when receives a Magic Packet */
322 	LinkUp		= (1 << 4),	/* Wake up when the cable connection is re-established */
323 	Beacon_en	= (1 << 0),	/* 8168 only. Reserved in the 8168b */
324 
325 	/* Config5 register p.27 */
326 	BWF		= (1 << 6),	/* Accept Broadcast wakeup frame */
327 	MWF		= (1 << 5),	/* Accept Multicast wakeup frame */
328 	UWF		= (1 << 4),	/* Accept Unicast wakeup frame */
329 	LanWake		= (1 << 1),	/* LanWake enable/disable */
330 	PMEStatus	= (1 << 0),	/* PME status can be reset by PCI RST# */
331 
332 	/* TBICSR p.28 */
333 	TBIReset	= 0x80000000,
334 	TBILoopback	= 0x40000000,
335 	TBINwEnable	= 0x20000000,
336 	TBINwRestart	= 0x10000000,
337 	TBILinkOk	= 0x02000000,
338 	TBINwComplete	= 0x01000000,
339 
340 	/* CPlusCmd p.31 */
341 	EnableBist	= (1 << 15),	// 8168 8101
342 	Mac_dbgo_oe	= (1 << 14),	// 8168 8101
343 	Normal_mode	= (1 << 13),	// unused
344 	Force_half_dup	= (1 << 12),	// 8168 8101
345 	Force_rxflow_en	= (1 << 11),	// 8168 8101
346 	Force_txflow_en	= (1 << 10),	// 8168 8101
347 	Cxpl_dbg_sel	= (1 << 9),	// 8168 8101
348 	ASF		= (1 << 8),	// 8168 8101
349 	PktCntrDisable	= (1 << 7),	// 8168 8101
350 	Mac_dbgo_sel	= 0x001c,	// 8168
351 	RxVlan		= (1 << 6),
352 	RxChkSum	= (1 << 5),
353 	PCIDAC		= (1 << 4),
354 	PCIMulRW	= (1 << 3),
355 	INTT_0		= 0x0000,	// 8168
356 	INTT_1		= 0x0001,	// 8168
357 	INTT_2		= 0x0002,	// 8168
358 	INTT_3		= 0x0003,	// 8168
359 
360 	/* rtl8169_PHYstatus */
361 	TBI_Enable	= 0x80,
362 	TxFlowCtrl	= 0x40,
363 	RxFlowCtrl	= 0x20,
364 	_1000bpsF	= 0x10,
365 	_100bps		= 0x08,
366 	_10bps		= 0x04,
367 	LinkStatus	= 0x02,
368 	FullDup		= 0x01,
369 
370 	/* _TBICSRBit */
371 	TBILinkOK	= 0x02000000,
372 
373 	/* DumpCounterCommand */
374 	CounterDump	= 0x8,
375 };
376 
377 enum desc_status_bit {
378 	DescOwn		= (1 << 31), /* Descriptor is owned by NIC */
379 	RingEnd		= (1 << 30), /* End of descriptor ring */
380 	FirstFrag	= (1 << 29), /* First segment of a packet */
381 	LastFrag	= (1 << 28), /* Final segment of a packet */
382 
383 	/* Tx private */
384 	LargeSend	= (1 << 27), /* TCP Large Send Offload (TSO) */
385 	MSSShift	= 16,        /* MSS value position */
386 	MSSMask		= 0xfff,     /* MSS value + LargeSend bit: 12 bits */
387 	IPCS		= (1 << 18), /* Calculate IP checksum */
388 	UDPCS		= (1 << 17), /* Calculate UDP/IP checksum */
389 	TCPCS		= (1 << 16), /* Calculate TCP/IP checksum */
390 	TxVlanTag	= (1 << 17), /* Add VLAN tag */
391 
392 	/* Rx private */
393 	PID1		= (1 << 18), /* Protocol ID bit 1/2 */
394 	PID0		= (1 << 17), /* Protocol ID bit 2/2 */
395 
396 #define RxProtoUDP	(PID1)
397 #define RxProtoTCP	(PID0)
398 #define RxProtoIP	(PID1 | PID0)
399 #define RxProtoMask	RxProtoIP
400 
401 	IPFail		= (1 << 16), /* IP checksum failed */
402 	UDPFail		= (1 << 15), /* UDP/IP checksum failed */
403 	TCPFail		= (1 << 14), /* TCP/IP checksum failed */
404 	RxVlanTag	= (1 << 16), /* VLAN tag available */
405 };
406 
407 #define RsvdMask	0x3fffc000
408 
409 struct TxDesc {
410 	volatile uint32_t opts1;
411 	volatile uint32_t opts2;
412 	volatile uint32_t addr_lo;
413 	volatile uint32_t addr_hi;
414 };
415 
416 struct RxDesc {
417 	volatile uint32_t opts1;
418 	volatile uint32_t opts2;
419 	volatile uint32_t addr_lo;
420 	volatile uint32_t addr_hi;
421 };
422 
423 enum features {
424 	RTL_FEATURE_WOL		= (1 << 0),
425 	RTL_FEATURE_MSI		= (1 << 1),
426 	RTL_FEATURE_GMII	= (1 << 2),
427 };
428 
429 static void rtl_hw_start_8169(struct net_device *);
430 static void rtl_hw_start_8168(struct net_device *);
431 static void rtl_hw_start_8101(struct net_device *);
432 
433 struct rtl8169_private {
434 
435 	struct pci_device *pci_dev;
436 	struct net_device *netdev;
437 	uint8_t *hw_addr;
438 	void *mmio_addr;
439 	uint32_t irqno;
440 
441 	int chipset;
442 	int mac_version;
443 	int cfg_index;
444 	u16 intr_event;
445 
446 	struct io_buffer *tx_iobuf[NUM_TX_DESC];
447 	struct io_buffer *rx_iobuf[NUM_RX_DESC];
448 
449 	struct TxDesc *tx_base;
450 	struct RxDesc *rx_base;
451 
452 	uint32_t tx_curr;
453 	uint32_t rx_curr;
454 
455 	uint32_t tx_tail;
456 
457 	uint32_t tx_fill_ctr;
458 
459 	u16 cp_cmd;
460 
461 	int phy_auto_nego_reg;
462 	int phy_1000_ctrl_reg;
463 
464 	int ( *set_speed ) (struct net_device *, u8 autoneg, u16 speed, u8 duplex );
465 	void ( *phy_reset_enable ) ( void *ioaddr );
466 	void ( *hw_start ) ( struct net_device * );
467 	unsigned int ( *phy_reset_pending ) ( void *ioaddr );
468 	unsigned int ( *link_ok ) ( void *ioaddr );
469 
470 	int pcie_cap;
471 
472 	unsigned features;
473 
474 };
475 
476 static const unsigned int rtl8169_rx_config =
477 	(RX_FIFO_THRESH << RxCfgFIFOShift) | (RX_DMA_BURST << RxCfgDMAShift);
478 
479 #endif /* _R8169_H_ */
480 
481 /*
482  * Local variables:
483  *  c-basic-offset: 8
484  *  c-indent-level: 8
485  *  tab-width: 8
486  * End:
487  */
488