1 //
2 // Copyright (c) 2010-2024 Antmicro
3 //
4 // This file is licensed under the MIT License.
5 // Full license text is available in 'licenses/MIT.txt'.
6 //
7 using Antmicro.Renode.Core;
8 using Antmicro.Renode.Peripherals.CPU;
9 
10 namespace Antmicro.Renode.Peripherals.Network
11 {
12     public class S32K3XX_GMAC : SynopsysDWCEthernetQualityOfService
13     {
S32K3XX_GMAC(IMachine machine, long systemClockFrequency, ICPU cpuContext = null)14         public S32K3XX_GMAC(IMachine machine, long systemClockFrequency, ICPU cpuContext = null)
15             : base(machine, systemClockFrequency, cpuContext)
16         {
17             Reset();
18         }
19 
ReadDoubleWord(long offset)20         public override uint ReadDoubleWord(long offset)
21         {
22             if(offset < (long)Registers.MTLOperationMode)
23             {
24                 return base.ReadDoubleWord(offset);
25             }
26             else if(offset < (long)Registers.DMAMode)
27             {
28                 return ReadDoubleWordFromMTL(offset - (long)Registers.MTLOperationMode);
29             }
30             return ReadDoubleWordFromDMA(offset - (long)Registers.DMAMode);
31         }
32 
WriteDoubleWord(long offset, uint value)33         public override void WriteDoubleWord(long offset, uint value)
34         {
35             if(offset < (long)Registers.MTLOperationMode)
36             {
37                 base.WriteDoubleWord(offset, value);
38             }
39             else if(offset < (long)Registers.DMAMode)
40             {
41                 WriteDoubleWordToMTL(offset - (long)Registers.MTLOperationMode, value);
42             }
43             else
44             {
45                 WriteDoubleWordToDMA(offset - (long)Registers.DMAMode, value);
46             }
47         }
48 
49         public override long Size => 0x1300;
50 
51         public GPIO Channel0TX => dmaChannels[0].TxIRQ;
52         public GPIO Channel0RX => dmaChannels[0].RxIRQ;
53         public GPIO Channel1TX => dmaChannels[1].TxIRQ;
54         public GPIO Channel1RX => dmaChannels[1].RxIRQ;
55         public GPIO Channel2TX => dmaChannels[2].TxIRQ;
56         public GPIO Channel2RX => dmaChannels[2].RxIRQ;
57 
58         // Base model configuration:
59         protected override long[] DMAChannelOffsets => new long[]
60         {
61             (long)Registers.DMAChannel0Control - (long)Registers.DMAMode,
62             (long)Registers.DMAChannel1Control - (long)Registers.DMAMode,
63             (long)Registers.DMAChannel2Control - (long)Registers.DMAMode,
64         };
65         protected override BusWidth DMABusWidth => BusWidth.Bits64;
66         protected override int RxQueueSize => 16384;
67         protected override bool SeparateDMAInterrupts => true;
68 
69         private enum Registers
70         {
71             Configuration = 0x0, // MAC_Configuration
72             ExtendedConfiguration = 0x4, // MAC_Ext_Configuration
73             PacketFilter = 0x8, // MAC_Packet_Filter
74             WatchdogTimeout = 0xC, // MAC_Watchdog_Timeout
75             HashTable0 = 0x10, // MAC_Hash_Table_Reg0
76             HashTable1 = 0x14, // MAC_Hash_Table_Reg1
77             HashTable2 = 0x18, // MAC_Hash_Table_Reg2
78             HashTable3 = 0x1C, // MAC_Hash_Table_Reg3
79             HashTable4 = 0x20, // MAC_Hash_Table_Reg4
80             HashTable5 = 0x24, // MAC_Hash_Table_Reg5
81             HashTable6 = 0x28, // MAC_Hash_Table_Reg6
82             HashTable7 = 0x2C, // MAC_Hash_Table_Reg7
83 
84             VLANTagControl = 0x50, // MAC_VLAN_Tag_Ctrl
85             VLANTagData = 0x54, // MAC_VLAN_Tag_Data
86             VLANTagFilter0 = 0x54, // MAC_VLAN_Tag_Filter0
87             VLANTagFilter1 = 0x54, // MAC_VLAN_Tag_Filter1
88             VLANTagFilter2 = 0x54, // MAC_VLAN_Tag_Filter2
89             VLANTagFilter3 = 0x54, // MAC_VLAN_Tag_Filter3
90             VLANTagFilter4 = 0x54, // MAC_VLAN_Tag_Filter4
91             VLANTagFilter5 = 0x54, // MAC_VLAN_Tag_Filter5
92             VLANTagFilter6 = 0x54, // MAC_VLAN_Tag_Filter6
93             VLANTagFilter7 = 0x54, // MAC_VLAN_Tag_Filter7
94             VLANTagFilter8 = 0x54, // MAC_VLAN_Tag_Filter8
95             VLANTagFilter9 = 0x54, // MAC_VLAN_Tag_Filter9
96             VLANTagFilter10 = 0x54, // MAC_VLAN_Tag_Filter10
97             VLANTagFilter11 = 0x54, // MAC_VLAN_Tag_Filter11
98             VLANTagFilter12 = 0x54, // MAC_VLAN_Tag_Filter12
99             VLANTagFilter13 = 0x54, // MAC_VLAN_Tag_Filter13
100             VLANTagFilter14 = 0x54, // MAC_VLAN_Tag_Filter14
101             VLANTagFilter15 = 0x54, // MAC_VLAN_Tag_Filter15
102             VLANTagFilter16 = 0x54, // MAC_VLAN_Tag_Filter16
103             VLANTagFilter17 = 0x54, // MAC_VLAN_Tag_Filter17
104             VLANTagFilter18 = 0x54, // MAC_VLAN_Tag_Filter18
105             VLANTagFilter19 = 0x54, // MAC_VLAN_Tag_Filter19
106             VLANTagFilter20 = 0x54, // MAC_VLAN_Tag_Filter20
107             VLANTagFilter21 = 0x54, // MAC_VLAN_Tag_Filter21
108             VLANTagFilter22 = 0x54, // MAC_VLAN_Tag_Filter22
109             VLANTagFilter23 = 0x54, // MAC_VLAN_Tag_Filter23
110             VLANTagFilter24 = 0x54, // MAC_VLAN_Tag_Filter24
111             VLANTagFilter25 = 0x54, // MAC_VLAN_Tag_Filter25
112             VLANTagFilter26 = 0x54, // MAC_VLAN_Tag_Filter26
113             VLANTagFilter27 = 0x54, // MAC_VLAN_Tag_Filter27
114             VLANTagFilter28 = 0x54, // MAC_VLAN_Tag_Filter28
115             VLANTagFilter29 = 0x54, // MAC_VLAN_Tag_Filter29
116             VLANTagFilter30 = 0x54, // MAC_VLAN_Tag_Filter30
117             VLANTagFilter31 = 0x54, // MAC_VLAN_Tag_Filter31
118 
119             VLANHashTable = 0x58, // MAC_VLAN_Hash_Table
120 
121             VLANInclusion = 0x60, // MAC_VLAN_Incl
122             VLANInclusion0 = 0x60, // MAC_VLAN_Incl0
123             VLANInclusion1 = 0x60, // MAC_VLAN_Incl1
124             VLANInclusion2 = 0x60, // MAC_VLAN_Incl2
125             VLANInclusion3 = 0x60, // MAC_VLAN_Incl3
126             VLANInclusion4 = 0x60, // MAC_VLAN_Incl4
127             VLANInclusion5 = 0x60, // MAC_VLAN_Incl5
128             VLANInclusion6 = 0x60, // MAC_VLAN_Incl6
129             VLANInclusion7 = 0x60, // MAC_VLAN_Incl7
130             VLANInclusion8 = 0x60, // MAC_VLAN_Incl8
131             InnerVLANInclusion = 0x64, // MAC_Inner_VLAN_Incl
132 
133             Queue0TransmitFlowControl = 0x70, // MAC_Q0_Tx_Flow_Ctrl
134             Queue1TransmitFlowControl = 0x74, // MAC_Q1_Tx_Flow_Ctrl
135             Queue2TransmitFlowControl = 0x78, // MAC_Q2_Tx_Flow_Ctrl
136 
137             ReceiveFlowControl = 0x90, // MAC_Rx_Flow_Ctrl
138             ReceiveQueueControl4 = 0x94, // MAC_RxQ_Ctrl4
139             TransmitQueuePriorityMapping0 = 0x98, // MAC_TxQ_Prty_Map0
140             ReceiveQueueControl0 = 0xA0, // MAC_RxQ_Ctrl0
141             ReceiveQueueControl1 = 0xA4, // MAC_RxQ_Ctrl1
142             ReceiveQueueControl2 = 0xA8, // MAC_RxQ_Ctrl2
143             InterruptStatus = 0xB0, // MAC_Interrupt_Status
144             InterruptEnable = 0xB4, // MAC_Interrupt_Enable
145             ReceiveTransmitStatus = 0xB8, // MAC_Rx_Tx_Status
146             PHYInterfaceControlAndStatus = 0xF8, // MAC_PHYIF_Control_Status
147             Version = 0x110, // MAC_Version
148             Debug = 0x114, // MAC_Debug
149             HardwareFeature0 = 0x11C, // MAC_HW_Feature0
150             HardwareFeature1 = 0x120, // MAC_HW_Feature1
151             HardwareFeature2 = 0x124, // MAC_HW_Feature2
152             HardwareFeature3 = 0x128, // MAC_HW_Feature3
153 
154             FSMErrorsInterruptStatus = 0x140, // MAC_DPP_FSM_Interrupt_Status
155             FSMControl = 0x148, // MAC_FSM_Control
156             FSMTimeouts = 0x14C, // MAC_FSM_ACT_Timer
157 
158             MDIOAddress = 0x200, // MAC_MDIO_Address
159             ARPAddress = 0x210, // MAC_ARP_Address
160             CSRSoftwareControl = 0x230, // MAC_CSR_SW_Ctrl
161             FramePreeptionControl = 0x234, // MAC_FPE_CTRL_STS
162             ExtendedConfiguration1 = 0x238, // MAC_Ext_Cfg1
163 
164             PresentationTimeNanoseconds = 0x240, // MAC_Presn_Time_ns
165             PresentationTimeUpdate = 0x244, // MAC_Presn_Time_Updt
166 
167             Address0High = 0x300, // MAC_Address0_High
168             Address0Low = 0x304, // MAC_Address0_Low
169             Address1High = 0x308, // MAC_Address1_High
170             Address1Low = 0x30C, // MAC_Address1_Low
171             Address2High = 0x310, // MAC_Address2_High
172             Address2Low = 0x314, // MAC_Address2_Low
173 
174             MMCControl = 0x700, // MMC_Control
175             MMCReceiveInterrupt = 0x704, // MMC_Rx_Interrupt
176             MMCTransmitInterrupt = 0x708, // MMC_Tx_Interrupt
177             MMCReceiveInterruptMask = 0x70C, // MMC_Rx_Interrupt_Mask
178             MMCTransmitInterruptMask = 0x710, // MMC_Tx_Interrupt_Mask
179 
180             TransmitOctetCount = 0x714, // Tx_Octet_Count_Good_Bad
181             TransmitPacketCount = 0x718, // Tx_Packet_Count_Good_Bad
182             TransmitBroadcastPacketGoodCount = 0x71C, // Tx_Broadcast_Packets_Good
183             TransmitMulticastPacketGoodCount = 0x720, // Tx_Multicast_Packets_Good
184             Transmit64OctetPacketCount = 0x724, // Tx_64Octets_Packets_Good_Bad
185             Transmit64To127OctetPacketCount = 0x728, // Tx_65To127Octets_Packets_Good_Bad
186             Transmit128To255OctetPacketCount = 0x72C, // Tx_128To255Octets_Packets_Good_Bad
187             Transmit256To511OctetPacketCount = 0x730, // Tx_256To511Octets_Packets_Good_Bad
188             Transmit512To1023OctetPacketCount = 0x734, // Tx_512To1023Octets_Packets_Good_Bad
189             Transmit1024ToMaxOctetPacketCount = 0x738, // Tx_1024ToMaxOctets_Packets_Good_Bad
190             TransmitUnicastPacketCount = 0x73C, // Tx_Unicast_Packets_Good_Bad
191             TransmitMulticastPacketCount = 0x740, // Tx_Multicast_Packets_Good_Bad
192             TransmitBroadcastPacketCount = 0x744, // Tx_Broadcast_Packets_Good_Bad
193             TransmitUnderflowErrorPacketCount = 0x748, // Tx_Underflow_Error_Packets
194             TransmitSingleCollisionPacketGoodCount = 0x74C, // Tx_Single_Collision_Good_Packets
195             TransmitMultipleCollisionPacketGoodCount = 0x750, // Tx_Multiple_Collision_Good_Packets
196             TransmitDeferredPacketCount = 0x754, // Tx_Deferred_Packets
197             TransmitLateCollisionPacketCount = 0x758, // Tx_Late_Collision_Packets
198             TransmitExcessiveCollisionPacketCount = 0x75C, // Tx_Late_Collision_Packets
199             TransmitCarrierErrorPacketCount = 0x760, // Tx_Carrier_Error_Packets
200             TransmitOctetGoodCount = 0x764, // Tx_Octet_Count_Good
201             TransmitPacketGoodCount = 0x768, // Tx_Packet_Count_Good
202             TransmitExcessiveDeferralErrorPacketCount = 0x76C, // Tx_Excessive_Deferral_Error
203             TransmitPausePacketCount = 0x770, // Tx_Pause_Packets
204             TransmitVLANPacketGoodCount = 0x774, // Tx_VLAN_Packets_Good
205             TransmitGreaterThanMaxSizePacketGoodCount = 0x778, // Tx_OSize_Packets_Good
206 
207             ReceivePacketCount = 0x780, // Rx_Packets_Count_Good_Bad
208             ReceiveOctetCount = 0x784, // Rx_Octet_Count_Good_Bad
209             ReceiveOctetGoodCount = 0x788, // Rx_Octet_Count_Good
210             ReceiveBroadcastPacketGoodCount = 0x78C, // Rx_Broadcast_Packets_Good
211             ReceiveMulticastPacketGoodCount = 0x790, // Rx_Multicast_Packets_Good
212             ReceiveCRCErrorPacketCount = 0x794, // Rx_CRC_Error_Packets
213             ReceiveAlignmentErrorPacketCount = 0x798, // Rx_Alignment_Error_Packets
214             ReceiveRuntErrorPacketCount = 0x79C, // Rx_Runt_Error_Packets
215             ReceiveJabberErrorPacketCount = 0x7A0, // Rx_Jabber_Error_Packets
216             ReceiveUndersizeErrorPacketCount = 0x7A4, // Rx_Undersize_Packets_Good
217             ReceiveOversizeErrorPacketCount = 0x7A8, // Rx_Oversize_Packets_Good
218             Receive64To127OctetPacketCount = 0x7B0, // Rx_65To127Octets_Packets_Good_Bad
219             Receive128To255OctetPacketCount = 0x7B4, // Rx_128To255Octets_Packets_Good_Bad
220             Receive256To511OctetPacketCount = 0x7B8, // Rx_256To511Octets_Packets_Good_Bad
221             Receive512To1023OctetPacketCount = 0x7BC, // Rx_512To1023Octets_Packets_Good_Bad
222             Receive1024ToMaxOctetPacketCount = 0x7C0, // Rx_1024ToMaxOctets_Packets_Good_Bad
223             ReceiveUnicastPacketGoodCount = 0x7C4, // Rx_Unicast_Packets_Good
224             ReceiveLengthErrorPacketCount = 0x7C8, // Rx_Length_Error_Packets
225             ReceiveOutOfRangeTypePacketCount = 0x7CC, // Rx_Out_Of_Range_Type_Packets
226             ReceivePausePacketCount = 0x7D0, // Rx_Pause_Packets
227             ReceiveFIFOOverflowPacketCount = 0x7D4, // Rx_FIFO_Overflow_Packets
228             ReceiveVLANPacketCount = 0x7D8, // Rx_VLAN_Packets_Good_Bad
229             ReceiveWatchdogErrorPacketCount = 0x7DC, // Rx_Watchdog_Error_Packets
230             ReceiveReceiveErrorPacketCount = 0x7E0, // Rx_Receive_Error_Packets
231             ReceiveControlPacketGoodCount = 0x7E4, // Rx_Control_Packets_Good
232 
233             MMCFramePreemptionTransmitInterrupt = 0x8A0, // MMC_FPE_Tx_Interrupt
234             MMCFramePreemptionTransmitInterruptMask = 0x8A4, // MMC_FPE_Tx_Interrupt_Mask
235             MMCFramePreemptionTransmitFragmentCount = 0x8A8, // MMC_Tx_FPE_Fragment_Cntr
236             MMCTransmitHoldRequestCount = 0x8AC, // MMC_Tx_Hold_Req_Cntr
237             MMCFramePreemptionReceiveInterrupt = 0x8C0, // MMC_FPE_Rx_Interrupt
238             MMCFramePreemptionReceiveInterruptMask = 0x8C4, // MMC_FPE_Rx_Interrupt_Mask
239             MMCReceivePacketAssemblyErrorCount = 0x8C8, // MMC_Rx_Packet_Assembly_Err_Cntr
240             MMCReceivePacketSMDErrorCount = 0x8CC, // MMC_Rx_Packet_SMD_Err_Cntr
241             MMCReceivePacketAssemblyOkCount = 0x8D0, // MMC_Rx_Packet_Assembly_OK_Cntr
242             MMCFramePreemptionReceiveFragmentCount = 0x8D4, // MMC_Rx_FPE_Fragment_Cntr
243 
244             Layer3Layer4Control0 = 0x900, // MAC_L3_L4_Control0
245             Layer4Address0 = 0x904, // MAC_Layer4_Address0
246             Layer3Address0Register0 = 0x910, // MAC_Layer3_Addr0_Reg0
247             Layer3Address1Register0 = 0x914, // MAC_Layer3_Addr1_Reg0
248             Layer3Address2Register0 = 0x918, // MAC_Layer3_Addr2_Reg0
249             Layer3Address3Register0 = 0x91C, // MAC_Layer3_Addr3_Reg0
250 
251             Layer3Layer4Control1 = 0x930, // MAC_L3_L4_Control1
252             Layer4Address1 = 0x934, // MAC_Layer4_Address1
253             Layer3Address0Register1 = 0x940, // MAC_Layer3_Addr0_Reg1
254             Layer3Address1Register1 = 0x944, // MAC_Layer3_Addr1_Reg1
255             Layer3Address2Register1 = 0x948, // MAC_Layer3_Addr2_Reg1
256             Layer3Address3Register1 = 0x94C, // MAC_Layer3_Addr3_Reg1
257 
258             Layer3Layer4Control2 = 0x960, // MAC_L3_L4_Control2
259             Layer4Address2 = 0x964, // MAC_Layer4_Address2
260             Layer3Address0Register2 = 0x970, // MAC_Layer3_Addr0_Reg2
261             Layer3Address1Register2 = 0x974, // MAC_Layer3_Addr1_Reg2
262             Layer3Address2Register2 = 0x978, // MAC_Layer3_Addr2_Reg2
263             Layer3Address3Register2 = 0x97C, // MAC_Layer3_Addr3_Reg2
264 
265             Layer3Layer4Control3 = 0x990, // MAC_L3_L4_Control3
266             Layer4Address3 = 0x994, // MAC_Layer4_Address3
267             Layer3Address0Register3 = 0x9A0, // MAC_Layer3_Addr0_Reg3
268             Layer3Address1Register3 = 0x9A4, // MAC_Layer3_Addr1_Reg3
269             Layer3Address2Register3 = 0x9A8, // MAC_Layer3_Addr2_Reg3
270             Layer3Address3Register3 = 0x9AC, // MAC_Layer3_Addr3_Reg3
271 
272             Layer3Layer4Control4 = 0x9C0, // MAC_L3_L4_Control4
273             Layer4Address4 = 0x9C4, // MAC_Layer4_Address4
274             Layer3Address0Register4 = 0x9D0, // MAC_Layer3_Addr0_Reg4
275             Layer3Address1Register4 = 0x9D4, // MAC_Layer3_Addr1_Reg4
276             Layer3Address2Register4 = 0x9D8, // MAC_Layer3_Addr2_Reg4
277             Layer3Address3Register4 = 0x9DC, // MAC_Layer3_Addr3_Reg4
278 
279             Layer3Layer4Control5 = 0x9F0, // MAC_L3_L4_Control5
280             Layer4Address5 = 0x9F4, // MAC_Layer4_Address5
281             Layer3Address0Register5 = 0xA00, // MAC_Layer3_Addr0_Reg5
282             Layer3Address1Register5 = 0xA04, // MAC_Layer3_Addr1_Reg5
283             Layer3Address2Register5 = 0xA08, // MAC_Layer3_Addr2_Reg5
284             Layer3Address3Register5 = 0xA0C, // MAC_Layer3_Addr3_Reg5
285 
286             Layer3Layer4Control6 = 0xA20, // MAC_L3_L4_Control6
287             Layer4Address6 = 0xA24, // MAC_Layer4_Address6
288             Layer3Address0Register6 = 0xA30, // MAC_Layer3_Addr0_Reg6
289             Layer3Address1Register6 = 0xA34, // MAC_Layer3_Addr1_Reg6
290             Layer3Address2Register6 = 0xA38, // MAC_Layer3_Addr2_Reg6
291             Layer3Address3Register6 = 0xA3C, // MAC_Layer3_Addr3_Reg6
292 
293             Layer3Layer4Control7 = 0xA50, // MAC_L3_L4_Control7
294             Layer4Address7 = 0xA54, // MAC_Layer4_Address7
295             Layer3Address0Register7 = 0xA60, // MAC_Layer3_Addr0_Reg7
296             Layer3Address1Register7 = 0xA64, // MAC_Layer3_Addr1_Reg7
297             Layer3Address2Register7 = 0xA68, // MAC_Layer3_Addr2_Reg7
298             Layer3Address3Register7 = 0xA6C, // MAC_Layer3_Addr3_Reg7
299 
300             IndirectAccessControl = 0xA70, // MAC_Indir_Access_Ctrl
301             IndirectAccessData = 0xA74, // MAC_Indir_Access_Data
302 
303             TypeMatchReceiveQueueRegister0 = 0xA74, // MAC_TMRQ_Regs0
304             TypeMatchReceiveQueueRegister1 = 0xA74, // MAC_TMRQ_Regs1
305             TypeMatchReceiveQueueRegister2 = 0xA74, // MAC_TMRQ_Regs2
306             TypeMatchReceiveQueueRegister3 = 0xA74, // MAC_TMRQ_Regs3
307             TypeMatchReceiveQueueRegister4 = 0xA74, // MAC_TMRQ_Regs4
308             TypeMatchReceiveQueueRegister5 = 0xA74, // MAC_TMRQ_Regs5
309             TypeMatchReceiveQueueRegister6 = 0xA74, // MAC_TMRQ_Regs6
310             TypeMatchReceiveQueueRegister7 = 0xA74, // MAC_TMRQ_Regs7
311 
312             TimestampControl = 0xB00, // MAC_Timestamp_Control
313             SubSecondIncrement = 0xB04, // MAC_Sub_Second_Increment
314             SystemTimeSeconds = 0xB08, // MAC_System_Time_Seconds
315             SystemTimeNanoseconds = 0xB0C, // MAC_System_Time_Nanoseconds
316             SystemTimeSecondsUpdate = 0xB10, // MAC_System_Time_Seconds_Update
317             SystemTimeNanosecondsUpdate = 0xB14, // MAC_System_Time_Nanoseconds_Update
318             TimestampAddend = 0xB18, // MAC_Timestamp_Addend
319             SystemTimeHigherWordSeconds = 0xB1C, // MAC_System_Time_Higher_Word_Seconds
320             TimestampStatus = 0xB20, // MAC_Timestamp_Status
321             TransmitTimestampStatusNanoseconds = 0xB30, // MAC_Tx_Timestamp_Status_Nanoseconds
322             TransmitTimestampStatusSeconds = 0xB34, // MAC_Tx_Timestamp_Status_Seconds
323             TimestampIngressAsymmetryCorrection = 0xB50, // MAC_Timestamp_Ingress_Asym_Corr
324             TimestampEgressAsymmetryCorrection = 0xB54, // MAC_Timestamp_Egress_Asym_Corr
325             TimestampIngressCorrectionNanosecond = 0xB58, // MAC_Timestamp_Ingress_Corr_Nanosecond
326             TimestampEgressCorrectionNanosecond = 0xB5C, // MAC_Timestamp_Egress_Corr_Nanosecond
327             TimestampIngressCorrectionSubnanosecond = 0xB60, // MAC_Timestamp_Ingress_Corr_Subnanosec
328             TimestampEgressCorrectionSubnanosecond = 0xB64, // MAC_Timestamp_Egress_Corr_Subnanosec
329             TimestampIngressLatency = 0xB68, // MAC_Timestamp_Ingress_Latency
330             TimestampEgressLatency = 0xB6C, // MAC_Timestamp_Egress_Latency
331 
332             PPSControl = 0xB70, // MAC_PPS_Control
333             PPS0TargetTimeSeconds = 0xB80, // MAC_PPS0_Target_Time_Seconds
334             PPS0TargetTimeNanoseconds = 0xB84, // MAC_PPS0_Target_Time_Nanoseconds
335             PPS0Interval = 0xB88, // MAC_PPS0_Interval
336             PPS0Width = 0xB8C, // MAC_PPS0_Width
337             PPS1TargetTimeSeconds = 0xB90, // MAC_PPS1_Target_Time_Seconds
338             PPS1TargetTimeNanoseconds = 0xB94, // MAC_PPS1_Target_Time_Nanoseconds
339             PPS1Interval = 0xB98, // MAC_PPS1_Interval
340             PPS1Width = 0xB9C, // MAC_PPS1_Width
341             PPS2TargetTimeSeconds = 0xBA0, // MAC_PPS2_Target_Time_Seconds
342             PPS2TargetTimeNanoseconds = 0xBA4, // MAC_PPS2_Target_Time_Nanoseconds
343             PPS2Interval = 0xBA8, // MAC_PPS2_Interval
344             PPS2Width = 0xBAC, // MAC_PPS2_Width
345             PPS3TargetTimeSeconds = 0xBB0, // MAC_PPS3_Target_Time_Seconds
346             PPS3TargetTimeNanoseconds = 0xBB4, // MAC_PPS3_Target_Time_Nanoseconds
347             PPS3Interval = 0xBB8, // MAC_PPS3_Interval
348             PPS3Width = 0xBBC, // MAC_PPS3_Width
349 
350             MTLOperationMode = 0xC00, // MTL_Operation_Mode
351             MTLDebugControl = 0xC08, // MTL_DBG_CTL
352             MTLDebugStatus = 0xC0C, // MTL_DBG_STS
353             MTLFIFODebugData = 0xC10, // MTL_FIFO_Debug_Data
354             MTLInterruptStatus = 0xC20, // MTL_Interrupt_Status
355             MTLReceiveQueueDMAMap0 = 0xC30, // MTL_RxQ_DMA_Map0
356             MTLTimeBasedSchedulingControl = 0xC40, // MTL_TBS_CTRL
357             MTLEnhancementsToScheduledTransmissionControl = 0xC50, // MTL_EST_Control
358             MTLEnhancementsToScheduledTransmissionExtendedControl = 0xC54, // MTL_EST_Ext_Control
359             MTLEnhancementsToScheduledTransmissionStatus = 0xC58, // MTL_EST_Status
360             MTLEnhancementsToScheduledTransmissionSchedulingError = 0xC60, // MTL_EST_Sch_Error
361             MTLEnhancementsToScheduledTransmissionFrameSizeError = 0xC64, // MTL_EST_Frm_Size_Error
362             MTLEnhancementsToScheduledTransmissionInterruptEnable = 0xC70, // MTL_EST_Intr_Enable
363             MTLEnhancementsToScheduledTransmissionGateControlList = 0xC80, // MTL_EST_GCL_Control
364             MTLEnhancementsToScheduledTransmissionGateControlData = 0xC84, // MTL_EST_GCL_Data
365             MTLFramePreemptionControlStatus = 0xC90, // MTL_FPE_CTRL_STS
366             MTLFramePreemptionAdvanceTime = 0xC94, // MTL_FPE_Advance
367             MTLReceiveParserControlStatus = 0xCA0, // MTL_RXP_Control_Status
368             MTLReceiveParserInterruptControlStatus = 0xCA4, // MTL_RXP_Interrupt_Control_Status
369             MTLReceiveParserDropCount = 0xCA8, // MTL_RXP_Drop_Cnt
370             MTLReceiveParserErrorCount = 0xCAC, // MTL_RXP_Error_Cnt
371             MTLReceiveParserIndirectAccessControlStatus = 0xCB0, // MTL_RXP_Indirect_Acc_Control_Status
372             MTLReceiveParserIndirectAccessData = 0xCB4, // MTL_RXP_Indirect_Acc_Data
373             MTLReceiveParserBypassCount = 0xCB8, // MTL_RXP_Bypass_Cnt
374             MTLErrorCorrectionControl = 0xCC0, // MTL_ECC_Control
375             MTLSafetyInterruptStatus = 0xCC4, // MTL_Safety_Interrupt_Status
376             MTLErrorCorrectionInterruptEnable = 0xCC8, // MTL_ECC_Interrupt_Enable
377             MTLErrorCorrectionInterruptStatus = 0xCCC, // MTL_ECC_Interrupt_Status
378             MTLErrorCorrectionErrorStatusCapture = 0xCD0, // MTL_ECC_Err_Sts_Rctl
379             MTLErrorCorrectionErrorAddressStatus = 0xCD4, // MTL_ECC_Err_Addr_Status
380             MTLErrorCorrectionErrorCountStatus = 0xCD8, // MTL_ECC_Err_Cntr_Status
381             MTLDataParityProtectionControl = 0xCE0, // MTL_DPP_Control
382             MTLDataParityProtectionErrorCorrectionErrorInjection = 0xCE4, // MTL_DPP_ECC_EIC
383             MTLTransmitQueue0OperationMode = 0xD00, // MTL_TxQ0_Operation_Mode
384             MTLTransmitQueue0Underflow = 0xD04, // MTL_TxQ0_Underflow
385             MTLTransmitQueue0Debug = 0xD08, // MTL_TxQ0_Debug
386             MTLTransmitQueue0ETSStatus = 0xD14, // MTL_TxQ0_ETS_Status
387             MTLTransmitQueue0QuantumWeight = 0xD18, // MTL_TxQ0_Quantum_Weight
388             MTLQueue0InterruptControlStatus = 0xD2C, // MTL_Q0_Interrupt_Control_Status
389             MTLReceiveQueue0OperationMode = 0xD30, // MTL_RxQ0_Operation_Mode
390             MTLReceiveQueue0MissedPacketOverflowCount = 0xD34, // MTL_RxQ0_Missed_Packet_Overflow_Cnt
391             MTLReceiveQueue0Debug = 0xD38, // MTL_RxQ0_Debug
392             MTLReceiveQueue0Control = 0xD3C, // MTL_RxQ0_Control
393             MTLTransmitQueue1OperationMode = 0xD40, // MTL_TxQ1_Operation_Mode
394             MTLTransmitQueue1Underflow = 0xD44, // MTL_TxQ1_Underflow
395             MTLTransmitQueue1Debug = 0xD48, // MTL_TxQ1_Debug
396             MTLTransmitQueue1ETSControl = 0xD50, // MTL_TxQ1_ETS_Control
397             MTLTransmitQueue1ETSStatus = 0xD54, // MTL_TxQ1_ETS_Status
398             MTLTransmitQueue1QuantumWeight = 0xD58, // MTL_TxQ1_Quantum_Weight
399             MTLTransmitQueue1SendSlopeCredit = 0xD5C, // MTL_TxQ1_SendSlopeCredit
400             MTLTransmitQueue1HighCredit = 0xD60, // MTL_TxQ1_HiCredit
401             MTLTransmitQueue1LowCredit = 0xD64, // MTL_TxQ1_LoCredit
402             MTLQueue1InterruptControlStatus = 0xD6C, // MTL_Q1_Interrupt_Control_Status
403             MTLReceiveQueue1OperationMode = 0xD70, // MTL_RxQ1_Operation_Mode
404             MTLReceiveQueue1MissedPacketOverflowCount = 0xD74, // MTL_RxQ1_Missed_Packet_Overflow_Cnt
405             MTLReceiveQueue1Debug = 0xD78, // MTL_RxQ1_Debug
406             MTLReceiveQueue1Control = 0xD7C, // MTL_RxQ1_Control
407             MTLTransmitQueue2OperationMode = 0xD80, // MTL_TxQ2_Operation_Mode
408             MTLTransmitQueue2Underflow = 0xD84, // MTL_TxQ2_Underflow
409             MTLTransmitQueue2Debug = 0xD88, // MTL_TxQ2_Debug
410             MTLTransmitQueue2ETSControl = 0xD90, // MTL_TxQ2_ETS_Control
411             MTLTransmitQueue2ETSStatus = 0xD94, // MTL_TxQ2_ETS_Status
412             MTLTransmitQueue2QuantumWeight = 0xD98, // MTL_TxQ2_Quantum_Weight
413             MTLTransmitQueue2SendSlopeCredit = 0xD9C, // MTL_TxQ2_SendSlopeCredit
414             MTLTransmitQueue2HighCredit = 0xDA0, // MTL_TxQ2_HiCredit
415             MTLTransmitQueue2LowCredit = 0xDA4, // MTL_TxQ2_LoCredit
416             MTLQueue2InterruptControlStatus = 0xDAC, // MTL_Q2_Interrupt_Control_Status
417             MTLReceiveQueue2OperationMode = 0xDB0, // MTL_RxQ2_Operation_Mode
418             MTLReceiveQueue2MissedPacketOverflowCount = 0xDB4, // MTL_RxQ2_Missed_Packet_Overflow_Cnt
419             MTLReceiveQueue2Debug = 0xDB8, // MTL_RxQ2_Debug
420             MTLReceiveQueue2Control = 0xDBC, // MTL_RxQ2_Control
421 
422             DMAMode = 0x1000, // DMA_Mode
423             DMASystemBusMode = 0x1004, // DMA_SysBus_Mode
424             DMAInterruptStatus = 0x1008, // DMA_Interrupt_Status
425             DMADebugStatus0 = 0x100C, // DMA_Debug_Status0
426             DMATBSControl0 = 0x1050, // DMA_TBS_CTRL0
427             DMATBSControl1 = 0x1054, // DMA_TBS_CTRL1
428             DMATBSControl2 = 0x1058, // DMA_TBS_CTRL2
429             DMATBSControl3 = 0x105C, // DMA_TBS_CTRL3
430             DMASafetyInterruptStatus = 0x1080, // DMA_Safety_Interrupt_Status
431 
432             DMAChannel0Control = 0x1100, // DMA_CH0_Control
433             DMAChannel0TransmitControl = 0x1104, // DMA_CH0_Tx_Control
434             DMAChannel0ReceiveControl = 0x1108, // DMA_CH0_Rx_Control
435             DMAChannel0TransmitDescriptorListAddress = 0x1114, // DMA_CH0_TxDesc_List_Address
436             DMAChannel0ReceiveDescriptorListAddress = 0x111C, // DMA_CH0_RxDesc_List_Address
437             DMAChannel0TransmitDescriptorTailPointer = 0x1120, // DMA_CH0_TxDesc_Tail_Pointer
438             DMAChannel0ReceiveDescriptorTailPointer = 0x1128, // DMA_CH0_RxDesc_Tail_Pointer
439             DMAChannel0TransmitDescriptorRingLength = 0x112C, // DMA_CH0_TxDesc_Ring_Length
440             DMAChannel0ReceiveControl2 = 0x1130, // DMA_CH0_Rx_Control2
441             DMAChannel0InterruptEnable = 0x1134, // DMA_CH0_Interrupt_Enable
442             DMAChannel0ReceiveInterruptWatchdogTimer = 0x1138, // DMA_CH0_Rx_Interrupt_Watchdog_Timer
443             DMAChannel0SlotFunctionControlStatus = 0x113C, // DMA_CH0_Slot_Function_Control_Status
444             DMAChannel0CurrentApplicationTransmitDescriptor = 0x1144, // DMA_CH0_Current_App_TxDesc
445             DMAChannel0CurrentApplicationReceiveDescriptor = 0x114C, // DMA_CH0_Current_App_RxDesc
446             DMAChannel0CurrentApplicationTransmitBuffer = 0x1154, // DMA_CH0_Current_App_TxBuffer
447             DMAChannel0CurrentApplicationReceiveBuffer = 0x115C, // DMA_CH0_Current_App_RxBuffer
448             DMAChannel0Status = 0x1160, // DMA_CH0_Status
449             DMAChannel0MissedFrameCount = 0x1164, // DMA_CH0_Miss_Frame_Cnt
450             DMAChannel0ReceiveParserAcceptCount = 0x1168, // DMA_CH0_RXP_Accept_Cnt
451             DMAChannel0ReceiveERICount = 0x116C, // DMA_CH0_RX_ERI_Cnt
452 
453             DMAChannel1Control = 0x1180, // DMA_CH1_Control
454             DMAChannel1TransmitControl = 0x1184, // DMA_CH1_Tx_Control
455             DMAChannel1ReceiveControl = 0x1188, // DMA_CH1_Rx_Control
456             DMAChannel1TransmitDescriptorListAddress = 0x1194, // DMA_CH1_TxDesc_List_Address
457             DMAChannel1ReceiveDescriptorListAddress = 0x119C, // DMA_CH1_RxDesc_List_Address
458             DMAChannel1TransmitDescriptorTailPointer = 0x11A0, // DMA_CH1_TxDesc_Tail_Pointer
459             DMAChannel1ReceiveDescriptorTailPointer = 0x11A8, // DMA_CH1_RxDesc_Tail_Pointer
460             DMAChannel1TransmitDescriptorRingLength = 0x11AC, // DMA_CH1_TxDesc_Ring_Length
461             DMAChannel1ReceiveControl2 = 0x11B0, // DMA_CH1_Rx_Control2
462             DMAChannel1InterruptEnable = 0x11B4, // DMA_CH1_Interrupt_Enable
463             DMAChannel1ReceiveInterruptWatchdogTimer = 0x11B8, // DMA_CH1_Rx_Interrupt_Watchdog_Timer
464             DMAChannel1SlotFunctionControlStatus = 0x11BC, // DMA_CH1_Slot_Function_Control_Status
465             DMAChannel1CurrentApplicationTransmitDescriptor = 0x11C4, // DMA_CH1_Current_App_TxDesc
466             DMAChannel1CurrentApplicationReceiveDescriptor = 0x11CC, // DMA_CH1_Current_App_RxDesc
467             DMAChannel1CurrentApplicationTransmitBuffer = 0x11D4, // DMA_CH1_Current_App_TxBuffer
468             DMAChannel1CurrentApplicationReceiveBuffer = 0x11DC, // DMA_CH1_Current_App_RxBuffer
469             DMAChannel1Status = 0x11E0, // DMA_CH1_Status
470             DMAChannel1MissedFrameCount = 0x11E4, // DMA_CH1_Miss_Frame_Cnt
471             DMAChannel1ReceiveParserAcceptCount = 0x11E8, // DMA_CH1_RXP_Accept_Cnt
472             DMAChannel1ReceiveERICount = 0x11EC, // DMA_CH1_RX_ERI_Cnt
473 
474             DMAChannel2Control = 0x1200, // DMA_CH2_Control
475             DMAChannel2TransmitControl = 0x1204, // DMA_CH2_Tx_Control
476             DMAChannel2ReceiveControl = 0x1208, // DMA_CH2_Rx_Control
477             DMAChannel2TransmitDescriptorListAddress = 0x1214, // DMA_CH2_TxDesc_List_Address
478             DMAChannel2ReceiveDescriptorListAddress = 0x1218, // DMA_CH2_RxDesc_List_Address
479             DMAChannel2TransmitDescriptorTailPointer = 0x1220, // DMA_CH2_TxDesc_Tail_Pointer
480             DMAChannel2ReceiveDescriptorTailPointer = 0x1228, // DMA_CH2_RxDesc_Tail_Pointer
481             DMAChannel2TransmitDescriptorRingLength = 0x122C, // DMA_CH2_TxDesc_Ring_Length
482             DMAChannel2ReceiveControl2 = 0x1230, // DMA_CH2_Rx_Control2
483             DMAChannel2InterruptEnable = 0x1234, // DMA_CH2_Interrupt_Enable
484             DMAChannel2ReceiveInterruptWatchdogTimer = 0x1238, // DMA_CH2_Rx_Interrupt_Watchdog_Timer
485             DMAChannel2SlotFunctionControlStatus = 0x123C, // DMA_CH2_Slot_Function_Control_Status
486             DMAChannel2CurrentApplicationTransmitDescriptor = 0x1244, // DMA_CH2_Current_App_TxDesc
487             DMAChannel2CurrentApplicationReceiveDescriptor = 0x124C, // DMA_CH2_Current_App_RxDesc
488             DMAChannel2CurrentApplicationTransmitBuffer = 0x1254, // DMA_CH2_Current_App_TxBuffer
489             DMAChannel2CurrentApplicationReceiveBuffer = 0x125C, // DMA_CH2_Current_App_RxBuffer
490             DMAChannel2Status = 0x1260, // DMA_CH2_Status
491             DMAChannel2MissedFrameCount = 0x1264, // DMA_CH2_Miss_Frame_Cnt
492             DMAChannel2ReceiveParserAcceptCount = 0x1268, // DMA_CH2_RXP_Accept_Cnt
493             DMAChannel2ReceiveERICount = 0x126C, // DMA_CH2_RX_ERI_Cnt
494         }
495     }
496 }
497