Branch data Line data Source code
1 : : /* SPDX-License-Identifier: BSD-3-Clause
2 : : * Copyright(c) 2024 Realtek Corporation. All rights reserved
3 : : */
4 : :
5 : : #ifndef R8169_COMPAT_H
6 : : #define R8169_COMPAT_H
7 : :
8 : : #include <stdint.h>
9 : :
10 : : #include <rte_common.h>
11 : : #include <rte_cycles.h>
12 : : #include <rte_byteorder.h>
13 : : #include <rte_io.h>
14 : : #include <rte_ether.h>
15 : :
16 : : typedef uint8_t u8;
17 : : typedef uint16_t u16;
18 : : typedef uint32_t u32;
19 : : typedef uint64_t u64;
20 : :
21 : : struct rtl_counters {
22 : : u64 tx_packets;
23 : : u64 rx_packets;
24 : : u64 tx_errors;
25 : : u32 rx_errors;
26 : : u16 rx_missed;
27 : : u16 align_errors;
28 : : u32 tx_one_collision;
29 : : u32 tx_multi_collision;
30 : : u64 rx_unicast;
31 : : u64 rx_broadcast;
32 : : u32 rx_multicast;
33 : : u16 tx_aborted;
34 : : };
35 : :
36 : : enum mcfg {
37 : : CFG_METHOD_1 = 1,
38 : : CFG_METHOD_2,
39 : : CFG_METHOD_3,
40 : : CFG_METHOD_4,
41 : : CFG_METHOD_5,
42 : : CFG_METHOD_6,
43 : : CFG_METHOD_7,
44 : : CFG_METHOD_8,
45 : : CFG_METHOD_9,
46 : : CFG_METHOD_10,
47 : : CFG_METHOD_11,
48 : : CFG_METHOD_12,
49 : : CFG_METHOD_13,
50 : : CFG_METHOD_14,
51 : : CFG_METHOD_15,
52 : : CFG_METHOD_16,
53 : : CFG_METHOD_17,
54 : : CFG_METHOD_18,
55 : : CFG_METHOD_19,
56 : : CFG_METHOD_20,
57 : : CFG_METHOD_21,
58 : : CFG_METHOD_22,
59 : : CFG_METHOD_23,
60 : : CFG_METHOD_24,
61 : : CFG_METHOD_25,
62 : : CFG_METHOD_26,
63 : : CFG_METHOD_27,
64 : : CFG_METHOD_28,
65 : : CFG_METHOD_29,
66 : : CFG_METHOD_30,
67 : : CFG_METHOD_31,
68 : : CFG_METHOD_32,
69 : : CFG_METHOD_33,
70 : : CFG_METHOD_34,
71 : : CFG_METHOD_35,
72 : : CFG_METHOD_36,
73 : : CFG_METHOD_37,
74 : : CFG_METHOD_38,
75 : : CFG_METHOD_39,
76 : : CFG_METHOD_40,
77 : : CFG_METHOD_41,
78 : : CFG_METHOD_42,
79 : : CFG_METHOD_43,
80 : : CFG_METHOD_44,
81 : : CFG_METHOD_45,
82 : : CFG_METHOD_46,
83 : : CFG_METHOD_47,
84 : : CFG_METHOD_48,
85 : : CFG_METHOD_49,
86 : : CFG_METHOD_50,
87 : : CFG_METHOD_51,
88 : : CFG_METHOD_52,
89 : : CFG_METHOD_53,
90 : : CFG_METHOD_54,
91 : : CFG_METHOD_55,
92 : : CFG_METHOD_56,
93 : : CFG_METHOD_57,
94 : : CFG_METHOD_58,
95 : : CFG_METHOD_59,
96 : : CFG_METHOD_60,
97 : : CFG_METHOD_61,
98 : : CFG_METHOD_62,
99 : : CFG_METHOD_63,
100 : : CFG_METHOD_64,
101 : : CFG_METHOD_65,
102 : : CFG_METHOD_66,
103 : : CFG_METHOD_67,
104 : : CFG_METHOD_68,
105 : : CFG_METHOD_69,
106 : : CFG_METHOD_70,
107 : : CFG_METHOD_71,
108 : : CFG_METHOD_MAX,
109 : : CFG_METHOD_DEFAULT = 0xFF
110 : : };
111 : :
112 : : enum bits {
113 : : BIT_0 = (1UL << 0),
114 : : BIT_1 = (1UL << 1),
115 : : BIT_2 = (1UL << 2),
116 : : BIT_3 = (1UL << 3),
117 : : BIT_4 = (1UL << 4),
118 : : BIT_5 = (1UL << 5),
119 : : BIT_6 = (1UL << 6),
120 : : BIT_7 = (1UL << 7),
121 : : BIT_8 = (1UL << 8),
122 : : BIT_9 = (1UL << 9),
123 : : BIT_10 = (1UL << 10),
124 : : BIT_11 = (1UL << 11),
125 : : BIT_12 = (1UL << 12),
126 : : BIT_13 = (1UL << 13),
127 : : BIT_14 = (1UL << 14),
128 : : BIT_15 = (1UL << 15),
129 : : BIT_16 = (1UL << 16),
130 : : BIT_17 = (1UL << 17),
131 : : BIT_18 = (1UL << 18),
132 : : BIT_19 = (1UL << 19),
133 : : BIT_20 = (1UL << 20),
134 : : BIT_21 = (1UL << 21),
135 : : BIT_22 = (1UL << 22),
136 : : BIT_23 = (1UL << 23),
137 : : BIT_24 = (1UL << 24),
138 : : BIT_25 = (1UL << 25),
139 : : BIT_26 = (1UL << 26),
140 : : BIT_27 = (1UL << 27),
141 : : BIT_28 = (1UL << 28),
142 : : BIT_29 = (1UL << 29),
143 : : BIT_30 = (1UL << 30),
144 : : BIT_31 = (1UL << 31)
145 : : };
146 : :
147 : : enum RTL_registers {
148 : : MAC0 = 0x00, /* Ethernet hardware address */
149 : : MAC4 = 0x04,
150 : : MAR0 = 0x08, /* Multicast filter */
151 : : CounterAddrLow = 0x10,
152 : : CounterAddrHigh = 0x14,
153 : : CustomLED = 0x18,
154 : : TxDescStartAddrLow = 0x20,
155 : : TxDescStartAddrHigh = 0x24,
156 : : TxHDescStartAddrLow = 0x28,
157 : : TxHDescStartAddrHigh = 0x2C,
158 : : FLASH = 0x30,
159 : : INT_CFG0_8125 = 0x34,
160 : : ERSR = 0x36,
161 : : ChipCmd = 0x37,
162 : : TxPoll = 0x38,
163 : : IntrMask = 0x3C,
164 : : IntrStatus = 0x3E,
165 : : TxConfig = 0x40,
166 : : RxConfig = 0x44,
167 : : TCTR = 0x48,
168 : : Cfg9346 = 0x50,
169 : : Config0 = 0x51,
170 : : Config1 = 0x52,
171 : : Config2 = 0x53,
172 : : Config3 = 0x54,
173 : : Config4 = 0x55,
174 : : Config5 = 0x56,
175 : : TDFNR = 0x57,
176 : : TimeInt0 = 0x58,
177 : : TimeInt1 = 0x5C,
178 : : PHYAR = 0x60,
179 : : CSIDR = 0x64,
180 : : CSIAR = 0x68,
181 : : PHYstatus = 0x6C,
182 : : MACDBG = 0x6D,
183 : : GPIO = 0x6E,
184 : : PMCH = 0x6F,
185 : : ERIDR = 0x70,
186 : : ERIAR = 0x74,
187 : : INT_CFG1_8125 = 0x7A,
188 : : EPHY_RXER_NUM = 0x7C,
189 : : EPHYAR = 0x80,
190 : : TimeInt2 = 0x8C,
191 : : OCPDR = 0xB0,
192 : : MACOCP = 0xB0,
193 : : OCPAR = 0xB4,
194 : : SecMAC0 = 0xB4,
195 : : SecMAC4 = 0xB8,
196 : : PHYOCP = 0xB8,
197 : : DBG_reg = 0xD1,
198 : : TwiCmdReg = 0xD2,
199 : : MCUCmd_reg = 0xD3,
200 : : RxMaxSize = 0xDA,
201 : : EFUSEAR = 0xDC,
202 : : CPlusCmd = 0xE0,
203 : : IntrMitigate = 0xE2,
204 : : RxDescAddrLow = 0xE4,
205 : : RxDescAddrHigh = 0xE8,
206 : : MTPS = 0xEC,
207 : : FuncEvent = 0xF0,
208 : : PPSW = 0xF2,
209 : : FuncEventMask = 0xF4,
210 : : TimeInt3 = 0xF4,
211 : : FuncPresetState = 0xF8,
212 : : CMAC_IBCR0 = 0xF8,
213 : : CMAC_IBCR2 = 0xF9,
214 : : CMAC_IBIMR0 = 0xFA,
215 : : CMAC_IBISR0 = 0xFB,
216 : : FuncForceEvent = 0xFC,
217 : :
218 : : /* 8125 */
219 : : IMR0_8125 = 0x38,
220 : : ISR0_8125 = 0x3C,
221 : : TPPOLL_8125 = 0x90,
222 : : IMR1_8125 = 0x800,
223 : : ISR1_8125 = 0x802,
224 : : IMR2_8125 = 0x804,
225 : : ISR2_8125 = 0x806,
226 : : IMR3_8125 = 0x808,
227 : : ISR3_8125 = 0x80A,
228 : : BACKUP_ADDR0_8125 = 0x19E0,
229 : : BACKUP_ADDR1_8125 = 0X19E4,
230 : : TCTR0_8125 = 0x0048,
231 : : TCTR1_8125 = 0x004C,
232 : : TCTR2_8125 = 0x0088,
233 : : TCTR3_8125 = 0x001C,
234 : : TIMER_INT0_8125 = 0x0058,
235 : : TIMER_INT1_8125 = 0x005C,
236 : : TIMER_INT2_8125 = 0x008C,
237 : : TIMER_INT3_8125 = 0x00F4,
238 : : INT_MITI_V2_0_RX = 0x0A00,
239 : : INT_MITI_V2_0_TX = 0x0A02,
240 : : INT_MITI_V2_1_RX = 0x0A08,
241 : : INT_MITI_V2_1_TX = 0x0A0A,
242 : : IMR_V2_CLEAR_REG_8125 = 0x0D00,
243 : : ISR_V2_8125 = 0x0D04,
244 : : IMR_V2_SET_REG_8125 = 0x0D0C,
245 : : TDU_STA_8125 = 0x0D08,
246 : : RDU_STA_8125 = 0x0D0A,
247 : : IMR_V4_L2_CLEAR_REG_8125 = 0x0D10,
248 : : IMR_V4_L2_SET_REG_8125 = 0x0D18,
249 : : ISR_V4_L2_8125 = 0x0D14,
250 : : SW_TAIL_PTR0_8125BP = 0x0D30,
251 : : SW_TAIL_PTR1_8125BP = 0x0D38,
252 : : HW_CLO_PTR0_8125BP = 0x0D34,
253 : : HW_CLO_PTR1_8125BP = 0x0D3C,
254 : : DOUBLE_VLAN_CONFIG = 0x1000,
255 : : TX_NEW_CTRL = 0x203E,
256 : : TNPDS_Q1_LOW_8125 = 0x2100,
257 : : PLA_TXQ0_IDLE_CREDIT = 0x2500,
258 : : PLA_TXQ1_IDLE_CREDIT = 0x2504,
259 : : SW_TAIL_PTR0_8125 = 0x2800,
260 : : HW_CLO_PTR0_8125 = 0x2802,
261 : : SW_TAIL_PTR0_8126 = 0x2800,
262 : : HW_CLO_PTR0_8126 = 0x2800,
263 : : RDSAR_Q1_LOW_8125 = 0x4000,
264 : : RSS_CTRL_8125 = 0x4500,
265 : : Q_NUM_CTRL_8125 = 0x4800,
266 : : RSS_KEY_8125 = 0x4600,
267 : : RSS_INDIRECTION_TBL_8125_V2 = 0x4700,
268 : : EEE_TXIDLE_TIMER_8125 = 0x6048,
269 : : IB2SOC_SET = 0x0010,
270 : : IB2SOC_DATA = 0x0014,
271 : : IB2SOC_CMD = 0x0018,
272 : : IB2SOC_IMR = 0x001C,
273 : : };
274 : :
275 : : enum RTL_register_content {
276 : : /* Interrupt status bits */
277 : : SYSErr = 0x8000,
278 : : PCSTimeout = 0x4000,
279 : : SWInt = 0x0100,
280 : : TxDescUnavail = 0x0080,
281 : : RxFIFOOver = 0x0040,
282 : : LinkChg = 0x0020,
283 : : RxDescUnavail = 0x0010,
284 : : TxErr = 0x0008,
285 : : TxOK = 0x0004,
286 : : RxErr = 0x0002,
287 : : RxOK = 0x0001,
288 : :
289 : : /* RX status desc */
290 : : RxRWT = (1UL << 22),
291 : : RxRES = (1UL << 21),
292 : : RxRUNT = (1UL << 20),
293 : : RxCRC = (1UL << 19),
294 : :
295 : : /* ChipCmd bits */
296 : : StopReq = 0x80,
297 : : CmdReset = 0x10,
298 : : CmdRxEnb = 0x08,
299 : : CmdTxEnb = 0x04,
300 : : RxBufEmpty = 0x01,
301 : :
302 : : /* Cfg9346 bits */
303 : : Cfg9346_Lock = 0x00,
304 : : Cfg9346_Unlock = 0xC0,
305 : : Cfg9346_EEDO = (1UL << 0),
306 : : Cfg9346_EEDI = (1UL << 1),
307 : : Cfg9346_EESK = (1UL << 2),
308 : : Cfg9346_EECS = (1UL << 3),
309 : : Cfg9346_EEM0 = (1UL << 6),
310 : : Cfg9346_EEM1 = (1UL << 7),
311 : :
312 : : /* RX mode bits */
313 : : AcceptErr = 0x20,
314 : : AcceptRunt = 0x10,
315 : : AcceptBroadcast = 0x08,
316 : : AcceptMulticast = 0x04,
317 : : AcceptMyPhys = 0x02,
318 : : AcceptAllPhys = 0x01,
319 : :
320 : : /* Transmit priority polling */
321 : : HPQ = 0x80,
322 : : NPQ = 0x40,
323 : : FSWInt = 0x01,
324 : :
325 : : /* RX config bits */
326 : : Reserved2_shift = 13,
327 : : RxCfgDMAShift = 8,
328 : : EnableRxDescV3 = (1 << 24),
329 : : EnableOuterVlan = (1 << 23),
330 : : EnableInnerVlan = (1 << 22),
331 : : RxCfg_128_int_en = (1 << 15),
332 : : RxCfg_fet_multi_en = (1 << 14),
333 : : RxCfg_half_refetch = (1 << 13),
334 : : RxCfg_pause_slot_en = (1 << 11),
335 : : RxCfg_9356SEL = (1 << 6),
336 : : EnableRxDescV4_0 = (1 << 1), /* Not in rcr */
337 : :
338 : : /* TX config bits */
339 : : TxInterFrameGapShift = 24,
340 : : TxDMAShift = 8, /* DMA burst value (0-7) is shift this many bits. */
341 : : TxMACLoopBack = (1UL << 17), /* MAC loopback */
342 : :
343 : : /* Config1 register */
344 : : LEDS1 = (1UL << 7),
345 : : LEDS0 = (1UL << 6),
346 : : Speed_down = (1UL << 4),
347 : : MEMMAP = (1UL << 3),
348 : : IOMAP = (1UL << 2),
349 : : VPD = (1UL << 1),
350 : : PMEnable = (1UL << 0), /* Power management enable */
351 : :
352 : : /* Config2 register */
353 : : PMSTS_En = (1UL << 5),
354 : :
355 : : /* Config3 register */
356 : : Isolate_en = (1UL << 12), /* Isolate enable */
357 : : MagicPacket = (1UL << 5), /* Wake up when receives a magic packet */
358 : : LinkUp = (1UL << 4), /* This bit is reserved in RTL8125B. */
359 : :
360 : : /* Wake up when the cable connection is re-established */
361 : : ECRCEN = (1UL << 3), /* This bit is reserved in RTL8125B. */
362 : : Jumbo_En0 = (1UL << 2), /* This bit is reserved in RTL8125B. */
363 : : RDY_TO_L23 = (1UL << 1), /* This bit is reserved in RTL8125B. */
364 : : Beacon_en = (1UL << 0), /* This bit is reserved in RTL8125B. */
365 : :
366 : : /* Config4 register */
367 : : Jumbo_En1 = (1UL << 1), /* This bit is reserved in RTL8125B. */
368 : :
369 : : /* Config5 register */
370 : : BWF = (1UL << 6), /* Accept broadcast wakeup frame */
371 : : MWF = (1UL << 5), /* Accept multicast wakeup frame */
372 : : UWF = (1UL << 4), /* Accept unicast wakeup frame */
373 : : LanWake = (1UL << 1), /* LanWake enable/disable */
374 : : PMEStatus = (1UL << 0), /* PME status can be reset by PCI RST#. */
375 : :
376 : : /* CPlusCmd */
377 : : EnableBist = (1UL << 15),
378 : : Macdbgo_oe = (1UL << 14),
379 : : Normal_mode = (1UL << 13),
380 : : Force_halfdup = (1UL << 12),
381 : : Force_rxflow_en = (1UL << 11),
382 : : Force_txflow_en = (1UL << 10),
383 : : Cxpl_dbg_sel = (1UL << 9), /* This bit is reserved in RTL8125B. */
384 : : ASF = (1UL << 8), /* This bit is reserved in RTL8125C. */
385 : : PktCntrDisable = (1UL << 7),
386 : : RxVlan = (1UL << 6),
387 : : RxChkSum = (1UL << 5),
388 : : Macdbgo_sel = 0x001C,
389 : : INTT_0 = 0x0000,
390 : : INTT_1 = 0x0001,
391 : : INTT_2 = 0x0002,
392 : : INTT_3 = 0x0003,
393 : :
394 : : /* PHY status */
395 : : PowerSaveStatus = 0x80,
396 : : _5000bpsF = 0x1000,
397 : : _2500bpsF = 0x400,
398 : : TxFlowCtrl = 0x40,
399 : : RxFlowCtrl = 0x20,
400 : : _1000bpsF = 0x10,
401 : : _100bps = 0x08,
402 : : _10bps = 0x04,
403 : : LinkStatus = 0x02,
404 : : FullDup = 0x01,
405 : :
406 : : /* DBG reg */
407 : : Fix_Nak_1 = (1UL << 4),
408 : : Fix_Nak_2 = (1UL << 3),
409 : : DBGPIN_E2 = (1UL << 0),
410 : :
411 : : /* Reset counter command */
412 : : CounterReset = 0x1,
413 : : /* Dump counter command */
414 : : CounterDump = 0x8,
415 : :
416 : : /* PHY access */
417 : : PHYAR_Flag = 0x80000000,
418 : : PHYAR_Write = 0x80000000,
419 : : PHYAR_Read = 0x00000000,
420 : : PHYAR_Reg_Mask = 0x1f,
421 : : PHYAR_Reg_shift = 16,
422 : : PHYAR_Data_Mask = 0xffff,
423 : :
424 : : /* EPHY access */
425 : : EPHYAR_Flag = 0x80000000,
426 : : EPHYAR_Write = 0x80000000,
427 : : EPHYAR_Read = 0x00000000,
428 : : EPHYAR_Reg_Mask = 0x3f,
429 : : EPHYAR_Reg_Mask_v2 = 0x7f,
430 : : EPHYAR_Reg_shift = 16,
431 : : EPHYAR_Data_Mask = 0xffff,
432 : :
433 : : /* CSI access */
434 : : CSIAR_Flag = 0x80000000,
435 : : CSIAR_Write = 0x80000000,
436 : : CSIAR_Read = 0x00000000,
437 : : CSIAR_ByteEn = 0x0f,
438 : : CSIAR_ByteEn_shift = 12,
439 : : CSIAR_Addr_Mask = 0x0fff,
440 : :
441 : : /* ERI access */
442 : : ERIAR_Flag = 0x80000000,
443 : : ERIAR_Write = 0x80000000,
444 : : ERIAR_Read = 0x00000000,
445 : : ERIAR_Addr_Align = 4, /* ERI access register address must be 4 byte alignment. */
446 : : ERIAR_ExGMAC = 0,
447 : : ERIAR_MSIX = 1,
448 : : ERIAR_ASF = 2,
449 : : ERIAR_OOB = 2,
450 : : ERIAR_Type_shift = 16,
451 : : ERIAR_ByteEn = 0x0f,
452 : : ERIAR_ByteEn_shift = 12,
453 : :
454 : : /* OCP GPHY access */
455 : : OCPDR_Write = 0x80000000,
456 : : OCPDR_Read = 0x00000000,
457 : : OCPDR_Reg_Mask = 0xFF,
458 : : OCPDR_Data_Mask = 0xFFFF,
459 : : OCPDR_GPHY_Reg_shift = 16,
460 : : OCPAR_Flag = 0x80000000,
461 : : OCPAR_GPHY_Write = 0x8000F060,
462 : : OCPAR_GPHY_Read = 0x0000F060,
463 : : OCPR_Write = 0x80000000,
464 : : OCPR_Read = 0x00000000,
465 : : OCPR_Addr_Reg_shift = 16,
466 : : OCPR_Flag = 0x80000000,
467 : : OCP_STD_PHY_BASE_PAGE = 0x0A40,
468 : :
469 : : /* MCU command */
470 : : Now_is_oob = (1UL << 7),
471 : : Txfifo_empty = (1UL << 5),
472 : : Rxfifo_empty = (1UL << 4),
473 : :
474 : : /* E-FUSE access */
475 : : EFUSE_WRITE = 0x80000000,
476 : : EFUSE_WRITE_OK = 0x00000000,
477 : : EFUSE_READ = 0x00000000,
478 : : EFUSE_READ_OK = 0x80000000,
479 : : EFUSE_WRITE_V3 = 0x40000000,
480 : : EFUSE_WRITE_OK_V3 = 0x00000000,
481 : : EFUSE_READ_V3 = 0x80000000,
482 : : EFUSE_READ_OK_V3 = 0x00000000,
483 : : EFUSE_Reg_Mask = 0x03FF,
484 : : EFUSE_Reg_Shift = 8,
485 : : EFUSE_Check_Cnt = 300,
486 : : EFUSE_READ_FAIL = 0xFF,
487 : : EFUSE_Data_Mask = 0x000000FF,
488 : :
489 : : /* GPIO */
490 : : GPIO_en = (1UL << 0),
491 : :
492 : : /* New interrupt bits */
493 : : INT_CFG0_ENABLE_8125 = (1 << 0),
494 : : INT_CFG0_TIMEOUT0_BYPASS_8125 = (1 << 1),
495 : : INT_CFG0_MITIGATION_BYPASS_8125 = (1 << 2),
496 : : INT_CFG0_RDU_BYPASS_8126 = (1 << 4),
497 : : INT_CFG0_MSIX_ENTRY_NUM_MODE = (1 << 5),
498 : : ISRIMR_V2_ROK_Q0 = (1 << 0),
499 : : ISRIMR_TOK_Q0 = (1 << 16),
500 : : ISRIMR_TOK_Q1 = (1 << 18),
501 : : ISRIMR_V2_LINKCHG = (1 << 21),
502 : : };
503 : :
504 : : enum RTL_chipset_name {
505 : : RTL8125A = 0,
506 : : RTL8125B,
507 : : RTL8168KB,
508 : : RTL8125BP,
509 : : RTL8125D,
510 : : RTL8126A,
511 : : UNKNOWN
512 : : };
513 : :
514 : : #define PCI_VENDOR_ID_REALTEK 0x10EC
515 : :
516 : : #define RTL_PCI_REG_ADDR(hw, reg) ((u8 *)(hw)->mmio_addr + (reg))
517 : :
518 : : #define RTL_R8(hw, reg) rte_read8(RTL_PCI_REG_ADDR(hw, reg))
519 : : #define RTL_R16(hw, reg) rtl_read16(RTL_PCI_REG_ADDR(hw, reg))
520 : : #define RTL_R32(hw, reg) rtl_read32(RTL_PCI_REG_ADDR(hw, reg))
521 : :
522 : : #define RTL_W8(hw, reg, val) \
523 : : rte_write8((val), RTL_PCI_REG_ADDR(hw, reg))
524 : : #define RTL_W16(hw, reg, val) \
525 : : rte_write16((rte_cpu_to_le_16(val)), RTL_PCI_REG_ADDR(hw, reg))
526 : : #define RTL_W32(hw, reg, val) \
527 : : rte_write32((rte_cpu_to_le_32(val)), RTL_PCI_REG_ADDR(hw, reg))
528 : :
529 : : #define RX_DMA_BURST_unlimited 7 /* Maximum PCI burst, '7' is unlimited */
530 : : #define RX_DMA_BURST_512 5
531 : : #define RX_DMA_BURST_256 4
532 : : #define TX_DMA_BURST_unlimited 7
533 : : #define TX_DMA_BURST_1024 6
534 : : #define TX_DMA_BURST_512 5
535 : : #define TX_DMA_BURST_256 4
536 : : #define TX_DMA_BURST_128 3
537 : : #define TX_DMA_BURST_64 2
538 : : #define TX_DMA_BURST_32 1
539 : : #define TX_DMA_BURST_16 0
540 : : #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */
541 : : #define Rx_Fetch_Number_8 (1 << 30)
542 : : #define Rx_Close_Multiple (1 << 21)
543 : :
544 : : #define TRUE 1
545 : : #define FALSE 0
546 : :
547 : : #define SPEED_10 10
548 : : #define SPEED_100 100
549 : : #define SPEED_1000 1000
550 : : #define SPEED_2500 2500
551 : : #define SPEED_5000 5000
552 : :
553 : : #define DUPLEX_HALF 1
554 : : #define DUPLEX_FULL 2
555 : :
556 : : #define AUTONEG_ENABLE 1
557 : : #define AUTONEG_DISABLE 0
558 : :
559 : : #define ADVERTISE_10_HALF 0x0001
560 : : #define ADVERTISE_10_FULL 0x0002
561 : : #define ADVERTISE_100_HALF 0x0004
562 : : #define ADVERTISE_100_FULL 0x0008
563 : : #define ADVERTISE_1000_HALF 0x0010 /* Not used, just FYI */
564 : : #define ADVERTISE_1000_FULL 0x0020
565 : : #define ADVERTISE_2500_HALF 0x0040 /* NOT used, just FYI */
566 : : #define ADVERTISE_2500_FULL 0x0080
567 : : #define ADVERTISE_5000_HALF 0x0100 /* NOT used, just FYI */
568 : : #define ADVERTISE_5000_FULL 0x0200
569 : :
570 : : #define MAC_ADDR_LEN RTE_ETHER_ADDR_LEN
571 : :
572 : : #define RTL_MAX_TX_DESC 4096
573 : : #define RTL_MAX_RX_DESC 4096
574 : : #define RTL_MIN_TX_DESC 64
575 : : #define RTL_MIN_RX_DESC 64
576 : :
577 : : #define RTL_RING_ALIGN 256
578 : :
579 : : #define RTL_MAX_TX_SEG 64
580 : : #define RTL_DESC_ALIGN 64
581 : :
582 : : #define RTL_RX_FREE_THRESH 32
583 : : #define RTL_TX_FREE_THRESH 32
584 : :
585 : : #define VLAN_TAG_SIZE 4
586 : :
587 : : /*
588 : : * The overhead from MTU to max frame size.
589 : : * Considering VLAN so a tag needs to be counted.
590 : : */
591 : : #define RTL_ETH_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + VLAN_TAG_SIZE)
592 : : #define JUMBO_FRAME_9K (9 * 1024 - RTE_ETHER_HDR_LEN - RTE_VLAN_HLEN - RTE_ETHER_CRC_LEN)
593 : :
594 : : #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL << (n)) - 1))
595 : :
596 : : static inline u32
597 : : rtl_read32(void *addr)
598 : : {
599 : : return rte_le_to_cpu_32(rte_read32(addr));
600 : : }
601 : :
602 : : static inline u32
603 : : rtl_read16(void *addr)
604 : : {
605 : 0 : return rte_le_to_cpu_16(rte_read16(addr));
606 : : }
607 : :
608 : : #endif /* R8169_COMPAT_H */
|