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 : : /* ChipCmd bits */
297 : : StopReq = 0x80,
298 : : CmdReset = 0x10,
299 : : CmdRxEnb = 0x08,
300 : : CmdTxEnb = 0x04,
301 : : RxBufEmpty = 0x01,
302 : :
303 : : /* Cfg9346 bits */
304 : : Cfg9346_Lock = 0x00,
305 : : Cfg9346_Unlock = 0xC0,
306 : : Cfg9346_EEDO = (1UL << 0),
307 : : Cfg9346_EEDI = (1UL << 1),
308 : : Cfg9346_EESK = (1UL << 2),
309 : : Cfg9346_EECS = (1UL << 3),
310 : : Cfg9346_EEM0 = (1UL << 6),
311 : : Cfg9346_EEM1 = (1UL << 7),
312 : :
313 : : /* RX mode bits */
314 : : AcceptErr = 0x20,
315 : : AcceptRunt = 0x10,
316 : : AcceptBroadcast = 0x08,
317 : : AcceptMulticast = 0x04,
318 : : AcceptMyPhys = 0x02,
319 : : AcceptAllPhys = 0x01,
320 : :
321 : : /* Transmit priority polling */
322 : : HPQ = 0x80,
323 : : NPQ = 0x40,
324 : : FSWInt = 0x01,
325 : :
326 : : /* RX config bits */
327 : : Reserved2_shift = 13,
328 : : RxCfgDMAShift = 8,
329 : : EnableRxDescV3 = (1 << 24),
330 : : EnableOuterVlan = (1 << 23),
331 : : EnableInnerVlan = (1 << 22),
332 : : RxCfg_128_int_en = (1 << 15),
333 : : RxCfg_fet_multi_en = (1 << 14),
334 : : RxCfg_half_refetch = (1 << 13),
335 : : RxCfg_pause_slot_en = (1 << 11),
336 : : RxCfg_9356SEL = (1 << 6),
337 : : EnableRxDescV4_0 = (1 << 1), /* Not in rcr */
338 : :
339 : : /* TX config bits */
340 : : TxInterFrameGapShift = 24,
341 : : TxDMAShift = 8, /* DMA burst value (0-7) is shift this many bits. */
342 : : TxMACLoopBack = (1UL << 17), /* MAC loopback */
343 : :
344 : : /* Config1 register */
345 : : LEDS1 = (1UL << 7),
346 : : LEDS0 = (1UL << 6),
347 : : Speed_down = (1UL << 4),
348 : : MEMMAP = (1UL << 3),
349 : : IOMAP = (1UL << 2),
350 : : VPD = (1UL << 1),
351 : : PMEnable = (1UL << 0), /* Power management enable */
352 : :
353 : : /* Config2 register */
354 : : PMSTS_En = (1UL << 5),
355 : :
356 : : /* Config3 register */
357 : : Isolate_en = (1UL << 12), /* Isolate enable */
358 : : MagicPacket = (1UL << 5), /* Wake up when receives a magic packet */
359 : : LinkUp = (1UL << 4),
360 : :
361 : : /* Wake up when the cable connection is re-established */
362 : : ECRCEN = (1UL << 3),
363 : : Jumbo_En0 = (1UL << 2),
364 : : RDY_TO_L23 = (1UL << 1),
365 : : Beacon_en = (1UL << 0),
366 : :
367 : : /* Config4 register */
368 : : Jumbo_En1 = (1UL << 1),
369 : :
370 : : /* Config5 register */
371 : : BWF = (1UL << 6), /* Accept broadcast wakeup frame */
372 : : MWF = (1UL << 5), /* Accept multicast wakeup frame */
373 : : UWF = (1UL << 4), /* Accept unicast wakeup frame */
374 : : LanWake = (1UL << 1), /* LanWake enable/disable */
375 : : PMEStatus = (1UL << 0), /* PME status can be reset by PCI RST#. */
376 : :
377 : : /* CPlusCmd */
378 : : EnableBist = (1UL << 15),
379 : : Macdbgo_oe = (1UL << 14),
380 : : Normal_mode = (1UL << 13),
381 : : Force_halfdup = (1UL << 12),
382 : : Force_rxflow_en = (1UL << 11),
383 : : Force_txflow_en = (1UL << 10),
384 : : Cxpl_dbg_sel = (1UL << 9),
385 : : ASF = (1UL << 8),
386 : : PktCntrDisable = (1UL << 7),
387 : : RxVlan = (1UL << 6),
388 : : RxChkSum = (1UL << 5),
389 : : Macdbgo_sel = 0x001C,
390 : : INTT_0 = 0x0000,
391 : : INTT_1 = 0x0001,
392 : : INTT_2 = 0x0002,
393 : : INTT_3 = 0x0003,
394 : :
395 : : /* PHY status */
396 : : PowerSaveStatus = 0x80,
397 : : _1000bpsL = 0x80000,
398 : : _10000bpsF = 0x4000,
399 : : _10000bpsL = 0x2000,
400 : : _5000bpsF = 0x1000,
401 : : _5000bpsL = 0x800,
402 : : _2500bpsF = 0x400,
403 : : _2500bpsL = 0x200,
404 : : TxFlowCtrl = 0x40,
405 : : RxFlowCtrl = 0x20,
406 : : _1000bpsF = 0x10,
407 : : _100bps = 0x08,
408 : : _10bps = 0x04,
409 : : LinkStatus = 0x02,
410 : : FullDup = 0x01,
411 : :
412 : : /* DBG reg */
413 : : Fix_Nak_1 = (1UL << 4),
414 : : Fix_Nak_2 = (1UL << 3),
415 : : DBGPIN_E2 = (1UL << 0),
416 : :
417 : : /* Reset counter command */
418 : : CounterReset = 0x1,
419 : : /* Dump counter command */
420 : : CounterDump = 0x8,
421 : :
422 : : /* PHY access */
423 : : PHYAR_Flag = 0x80000000,
424 : : PHYAR_Write = 0x80000000,
425 : : PHYAR_Read = 0x00000000,
426 : : PHYAR_Reg_Mask = 0x1f,
427 : : PHYAR_Reg_shift = 16,
428 : : PHYAR_Data_Mask = 0xffff,
429 : :
430 : : /* EPHY access */
431 : : EPHYAR_Flag = 0x80000000,
432 : : EPHYAR_Write = 0x80000000,
433 : : EPHYAR_Read = 0x00000000,
434 : : EPHYAR_Reg_Mask = 0x3f,
435 : : EPHYAR_Reg_Mask_v2 = 0x7f,
436 : : EPHYAR_Reg_shift = 16,
437 : : EPHYAR_Data_Mask = 0xffff,
438 : : EPHYAR_EXT_ADDR = 0x0ffe,
439 : :
440 : : /* CSI access */
441 : : CSIAR_Flag = 0x80000000,
442 : : CSIAR_Write = 0x80000000,
443 : : CSIAR_Read = 0x00000000,
444 : : CSIAR_ByteEn = 0x0f,
445 : : CSIAR_ByteEn_shift = 12,
446 : : CSIAR_Addr_Mask = 0x0fff,
447 : :
448 : : /* ERI access */
449 : : ERIAR_Flag = 0x80000000,
450 : : ERIAR_Write = 0x80000000,
451 : : ERIAR_Read = 0x00000000,
452 : : ERIAR_Addr_Align = 4, /* ERI access register address must be 4 byte alignment. */
453 : : ERIAR_ExGMAC = 0,
454 : : ERIAR_MSIX = 1,
455 : : ERIAR_ASF = 2,
456 : : ERIAR_OOB = 2,
457 : : ERIAR_Type_shift = 16,
458 : : ERIAR_ByteEn = 0x0f,
459 : : ERIAR_ByteEn_shift = 12,
460 : :
461 : : /* OCP GPHY access */
462 : : OCPDR_Write = 0x80000000,
463 : : OCPDR_Read = 0x00000000,
464 : : OCPDR_Reg_Mask = 0xFF,
465 : : OCPDR_Data_Mask = 0xFFFF,
466 : : OCPDR_GPHY_Reg_shift = 16,
467 : : OCPAR_Flag = 0x80000000,
468 : : OCPAR_GPHY_Write = 0x8000F060,
469 : : OCPAR_GPHY_Read = 0x0000F060,
470 : : OCPR_Write = 0x80000000,
471 : : OCPR_Read = 0x00000000,
472 : : OCPR_Addr_Reg_shift = 16,
473 : : OCPR_Flag = 0x80000000,
474 : : OCP_STD_PHY_BASE_PAGE = 0x0A40,
475 : :
476 : : /* MCU command */
477 : : Now_is_oob = (1UL << 7),
478 : : Txfifo_empty = (1UL << 5),
479 : : Rxfifo_empty = (1UL << 4),
480 : :
481 : : /* E-FUSE access */
482 : : EFUSE_WRITE = 0x80000000,
483 : : EFUSE_WRITE_OK = 0x00000000,
484 : : EFUSE_READ = 0x00000000,
485 : : EFUSE_READ_OK = 0x80000000,
486 : : EFUSE_WRITE_V3 = 0x40000000,
487 : : EFUSE_WRITE_OK_V3 = 0x00000000,
488 : : EFUSE_READ_V3 = 0x80000000,
489 : : EFUSE_READ_OK_V3 = 0x00000000,
490 : : EFUSE_Reg_Mask = 0x03FF,
491 : : EFUSE_Reg_Shift = 8,
492 : : EFUSE_Check_Cnt = 300,
493 : : EFUSE_READ_FAIL = 0xFF,
494 : : EFUSE_Data_Mask = 0x000000FF,
495 : :
496 : : /* GPIO */
497 : : GPIO_en = (1UL << 0),
498 : :
499 : : /* New interrupt bits */
500 : : INT_CFG0_ENABLE_8125 = (1 << 0),
501 : : INT_CFG0_TIMEOUT0_BYPASS_8125 = (1 << 1),
502 : : INT_CFG0_MITIGATION_BYPASS_8125 = (1 << 2),
503 : : INT_CFG0_RDU_BYPASS_8126 = (1 << 4),
504 : : INT_CFG0_MSIX_ENTRY_NUM_MODE = (1 << 5),
505 : : ISRIMR_V2_ROK_Q0 = (1 << 0),
506 : : ISRIMR_TOK_Q0 = (1 << 16),
507 : : ISRIMR_TOK_Q1 = (1 << 18),
508 : : ISRIMR_V2_LINKCHG = (1 << 21),
509 : : };
510 : :
511 : : enum RTL_chipset_name {
512 : : RTL8125A = 0,
513 : : RTL8125B,
514 : : RTL8168KB,
515 : : RTL8125BP,
516 : : RTL8125D,
517 : : RTL8125CP,
518 : : RTL8126A,
519 : : RTL8168EP,
520 : : RTL8168FP,
521 : : RTL8168G,
522 : : RTL8168H,
523 : : RTL8168M,
524 : : RTL8127,
525 : : UNKNOWN
526 : : };
527 : :
528 : : #define PCI_VENDOR_ID_REALTEK 0x10EC
529 : :
530 : : #define RTL_PCI_REG_ADDR(hw, reg) ((u8 *)(hw)->mmio_addr + (reg))
531 : :
532 : : #define RTL_R8(hw, reg) rte_read8(RTL_PCI_REG_ADDR(hw, reg))
533 : : #define RTL_R16(hw, reg) rtl_read16(RTL_PCI_REG_ADDR(hw, reg))
534 : : #define RTL_R32(hw, reg) rtl_read32(RTL_PCI_REG_ADDR(hw, reg))
535 : :
536 : : #define RTL_W8(hw, reg, val) \
537 : : rte_write8((val), RTL_PCI_REG_ADDR(hw, reg))
538 : : #define RTL_W16(hw, reg, val) \
539 : : rte_write16((rte_cpu_to_le_16(val)), RTL_PCI_REG_ADDR(hw, reg))
540 : : #define RTL_W32(hw, reg, val) \
541 : : rte_write32((rte_cpu_to_le_32(val)), RTL_PCI_REG_ADDR(hw, reg))
542 : :
543 : : #define RX_DMA_BURST_unlimited 7 /* Maximum PCI burst, '7' is unlimited */
544 : : #define RX_DMA_BURST_512 5
545 : : #define RX_DMA_BURST_256 4
546 : : #define TX_DMA_BURST_unlimited 7
547 : : #define TX_DMA_BURST_1024 6
548 : : #define TX_DMA_BURST_512 5
549 : : #define TX_DMA_BURST_256 4
550 : : #define TX_DMA_BURST_128 3
551 : : #define TX_DMA_BURST_64 2
552 : : #define TX_DMA_BURST_32 1
553 : : #define TX_DMA_BURST_16 0
554 : : #define InterFrameGap 0x03 /* 3 means InterFrameGap = the shortest one */
555 : : #define Rx_Fetch_Number_8 (1 << 30)
556 : : #define Rx_Close_Multiple (1 << 21)
557 : : #define RxEarly_off_V2 (1 << 11)
558 : : #define Rx_Single_fetch_V2 (1 << 14)
559 : :
560 : : #define TRUE 1
561 : : #define FALSE 0
562 : :
563 : : #define SPEED_10 10
564 : : #define SPEED_100 100
565 : : #define SPEED_1000 1000
566 : : #define SPEED_2500 2500
567 : : #define SPEED_5000 5000
568 : : #define SPEED_10000 10000
569 : :
570 : : #define DUPLEX_HALF 1
571 : : #define DUPLEX_FULL 2
572 : :
573 : : #define AUTONEG_ENABLE 1
574 : : #define AUTONEG_DISABLE 0
575 : :
576 : : #define ADVERTISE_10_HALF RTE_BIT64(0)
577 : : #define ADVERTISE_10_FULL RTE_BIT64(1)
578 : : #define ADVERTISE_100_HALF RTE_BIT64(2)
579 : : #define ADVERTISE_100_FULL RTE_BIT64(3)
580 : : #define ADVERTISE_1000_HALF RTE_BIT64(4)
581 : : #define ADVERTISE_1000_FULL RTE_BIT64(5)
582 : : #define ADVERTISE_2500_FULL RTE_BIT64(15)
583 : : #define ADVERTISE_5000_FULL RTE_BIT64(48)
584 : : #define ADVERTISE_10000_FULL RTE_BIT64(12)
585 : :
586 : : #define RTL_MAX_TX_DESC 4096
587 : : #define RTL_MAX_RX_DESC 4096
588 : : #define RTL_MIN_TX_DESC 64
589 : : #define RTL_MIN_RX_DESC 64
590 : :
591 : : #define RTL_RING_ALIGN 256
592 : :
593 : : #define RTL_MAX_TX_SEG 64
594 : : #define RTL_DESC_ALIGN 64
595 : :
596 : : #define RTL_RX_FREE_THRESH 32
597 : : #define RTL_TX_FREE_THRESH 32
598 : :
599 : : #define VLAN_TAG_SIZE 4
600 : :
601 : : /*
602 : : * The overhead from MTU to max frame size.
603 : : * Considering VLAN so a tag needs to be counted.
604 : : */
605 : : #define RTL_ETH_OVERHEAD (RTE_ETHER_HDR_LEN + RTE_ETHER_CRC_LEN + VLAN_TAG_SIZE)
606 : : #define JUMBO_FRAME_9K (9 * 1024 - RTE_ETHER_HDR_LEN - RTE_VLAN_HLEN - RTE_ETHER_CRC_LEN)
607 : :
608 : : #define DMA_BIT_MASK(n) (((n) == 64) ? ~0ULL : ((1ULL << (n)) - 1))
609 : :
610 : : static inline u32
611 : : rtl_read32(void *addr)
612 : : {
613 : : return rte_le_to_cpu_32(rte_read32(addr));
614 : : }
615 : :
616 : : static inline u32
617 : : rtl_read16(void *addr)
618 : : {
619 : 0 : return rte_le_to_cpu_16(rte_read16(addr));
620 : : }
621 : :
622 : : #endif /* R8169_COMPAT_H */
|