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