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