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 System;
8 using Antmicro.Renode.Core;
9 using Antmicro.Renode.Core.Structure;
10 using Antmicro.Renode.Core.Structure.Registers;
11 using Antmicro.Renode.Logging;
12 using Antmicro.Renode.Network;
13 using Antmicro.Renode.Peripherals.Bus;
14 using Antmicro.Renode.Peripherals.CPU;
15 
16 namespace Antmicro.Renode.Peripherals.Network
17 {
18     public class S32K3XX_EMAC : SynopsysDWCEthernetQualityOfService
19     {
S32K3XX_EMAC(IMachine machine, long systemClockFrequency, ICPU cpuContext = null)20         public S32K3XX_EMAC(IMachine machine, long systemClockFrequency, ICPU cpuContext = null)
21             :base(machine, systemClockFrequency, cpuContext)
22         {
23             Reset();
24         }
25 
ReadDoubleWord(long offset)26         public override uint ReadDoubleWord(long offset)
27         {
28             if(offset < (long)Registers.MTLOperationMode)
29             {
30                 return base.ReadDoubleWord(offset);
31             }
32             else if(offset < (long)Registers.DMAMode)
33             {
34                 return ReadDoubleWordFromMTL(offset - (long)Registers.MTLOperationMode);
35             }
36             return ReadDoubleWordFromDMA(offset - (long)Registers.DMAMode);
37         }
38 
WriteDoubleWord(long offset, uint value)39         public override void WriteDoubleWord(long offset, uint value)
40         {
41             if(offset < (long)Registers.MTLOperationMode)
42             {
43                 base.WriteDoubleWord(offset, value);
44             }
45             else if(offset < (long)Registers.DMAMode)
46             {
47                 WriteDoubleWordToMTL(offset - (long)Registers.MTLOperationMode, value);
48             }
49             else
50             {
51                 WriteDoubleWordToDMA(offset - (long)Registers.DMAMode, value);
52             }
53         }
54 
55         public override long Size => 0x1200;
56 
57         public GPIO Channel0TX => dmaChannels[0].TxIRQ;
58         public GPIO Channel0RX => dmaChannels[0].RxIRQ;
59         public GPIO Channel1TX => dmaChannels[1].TxIRQ;
60         public GPIO Channel1RX => dmaChannels[1].RxIRQ;
61 
62         // Base model configuration:
63         protected override long[] DMAChannelOffsets => new long[]
64         {
65             (long)Registers.DMAChannel0Control - (long)Registers.DMAMode,
66             (long)Registers.DMAChannel1Control - (long)Registers.DMAMode,
67         };
68         protected override BusWidth DMABusWidth => BusWidth.Bits32;
69         protected override int RxQueueSize => 8192;
70         protected override bool SeparateDMAInterrupts => true;
71 
72         private enum Registers
73         {
74             Configuration = 0x0, // MAC_Configuration
75             ExtendedConfiguration = 0x4, // MAC_Ext_Configuration
76             PacketFilter = 0x8, // MAC_Packet_Filter
77             WatchdogTimeout = 0xC, // MAC_Watchdog_Timeout
78             HashTable0 = 0x10, // MAC_Hash_Table_Reg0
79             HashTable1 = 0x14, // MAC_Hash_Table_Reg1
80 
81             VLANTag = 0x50, // MAC_VLAN_Tag_Ctrl
82             VLANTagControl = 0x50, // MAC_VLAN_Tag_Ctrl
83             VLANTagData = 0x54, // MAC_VLAN_Tag_Data
84             VLANTagFilter0 = 0x54, // MAC_VLAN_Tag_Filter0
85             VLANTagFilter1 = 0x54, // MAC_VLAN_Tag_Filter1
86             VLANTagFilter2 = 0x54, // MAC_VLAN_Tag_Filter2
87             VLANTagFilter3 = 0x54, // MAC_VLAN_Tag_Filter3
88             VLANTagFilter4 = 0x54, // MAC_VLAN_Tag_Filter4
89 
90             VLANHashTable = 0x58, // MAC_VLAN_Hash_Table
91 
92             VLANInclusion = 0x60, // MAC_VLAN_Incl
93             VLANInclusion0 = 0x60, // MAC_VLAN_Incl0
94             VLANInclusion1 = 0x60, // MAC_VLAN_Incl1
95             VLANInclusion2 = 0x60, // MAC_VLAN_Incl2
96             VLANInclusion3 = 0x60, // MAC_VLAN_Incl3
97             VLANInclusion4 = 0x60, // MAC_VLAN_Incl4
98             VLANInclusion5 = 0x60, // MAC_VLAN_Incl5
99             VLANInclusion6 = 0x60, // MAC_VLAN_Incl6
100             VLANInclusion7 = 0x60, // MAC_VLAN_Incl7
101             InnerVLANInclusion = 0x64, // MAC_Inner_VLAN_Incl
102 
103             Queue0TransmitFlowControl = 0x70, // MAC_Q0_Tx_Flow_Ctrl
104 
105             ReceiveFlowControl = 0x90, // MAC_Rx_Flow_Ctrl
106             ReceiveQueueControl4 = 0x94, // MAC_RxQ_Ctrl4
107             ReceiveQueueControl0 = 0xA0, // MAC_RxQ_Ctrl0
108             ReceiveQueueControl1 = 0xA4, // MAC_RxQ_Ctrl1
109             ReceiveQueueControl2 = 0xA8, // MAC_RxQ_Ctrl2
110             InterruptStatus = 0xB0, // MAC_Interrupt_Status
111             InterruptEnable = 0xB4, // MAC_Interrupt_Enable
112             ReceiveTransmitStatus = 0xB8, // MAC_Rx_Tx_Status
113             PHYInterfaceControlAndStatus = 0xF8, // MAC_PHYIF_Control_Status
114             Version = 0x110, // MAC_Version
115             Debug = 0x114, // MAC_Debug
116             HardwareFeature0 = 0x11C, // MAC_HW_Feature0
117             HardwareFeature1 = 0x120, // MAC_HW_Feature1
118             HardwareFeature2 = 0x124, // MAC_HW_Feature2
119             HardwareFeature3 = 0x128, // MAC_HW_Feature3
120 
121             FSMErrorsInterruptStatus = 0x140, // MAC_DPP_FSM_Interrupt_Status
122             FSMControl = 0x148, // MAC_FSM_Control
123             FSMTimeouts = 0x14C, // MAC_FSM_ACT_Timer
124 
125             MDIOAddress = 0x200, // MAC_MDIO_Address
126             ARPAddress = 0x210, // MAC_ARP_Address
127             CSRSoftwareControl = 0x230, // MAC_CSR_SW_Ctrl
128             FramePreeptionControl = 0x234, // MAC_FPE_CTRL_STS
129             ExtendedConfiguration1 = 0x238, // MAC_Ext_Cfg1
130 
131             PresentationTimeNanoseconds = 0x240, // MAC_Presn_Time_ns
132             PresentationTimeUpdate = 0x244, // MAC_Presn_Time_Updt
133 
134             Address0High = 0x300, // MAC_Address0_High
135             Address0Low = 0x304, // MAC_Address0_Low
136             Address1High = 0x308, // MAC_Address1_High
137             Address1Low = 0x30C, // MAC_Address1_Low
138             Address2High = 0x310, // MAC_Address2_High
139             Address2Low = 0x314, // MAC_Address2_Low
140 
141             MMCControl = 0x700, // MMC_Control
142             MMCReceiveInterrupt = 0x704, // MMC_Rx_Interrupt
143             MMCTransmitInterrupt = 0x708, // MMC_Tx_Interrupt
144             MMCReceiveInterruptMask = 0x70C, // MMC_Rx_Interrupt_Mask
145             MMCTransmitInterruptMask = 0x710, // MMC_Tx_Interrupt_Mask
146 
147             TransmitOctetCount = 0x714, // Tx_Octet_Count_Good_Bad
148             TransmitPacketCount = 0x718, // Tx_Packet_Count_Good_Bad
149             TransmitBroadcastPacketGoodCount = 0x71C, // Tx_Broadcast_Packets_Good
150             TransmitMulticastPacketGoodCount = 0x720, // Tx_Multicast_Packets_Good
151             Transmit64OctetPacketCount = 0x724, // Tx_64Octets_Packets_Good_Bad
152             Transmit64To127OctetPacketCount = 0x728, // Tx_65To127Octets_Packets_Good_Bad
153             Transmit128To255OctetPacketCount = 0x72C, // Tx_128To255Octets_Packets_Good_Bad
154             Transmit256To511OctetPacketCount = 0x730, // Tx_256To511Octets_Packets_Good_Bad
155             Transmit512To1023OctetPacketCount = 0x734, // Tx_512To1023Octets_Packets_Good_Bad
156             Transmit1024ToMaxOctetPacketCount = 0x738, // Tx_1024ToMaxOctets_Packets_Good_Bad
157             TransmitUnicastPacketCount = 0x73C, // Tx_Unicast_Packets_Good_Bad
158             TransmitMulticastPacketCount = 0x740, // Tx_Multicast_Packets_Good_Bad
159             TransmitBroadcastPacketCount = 0x744, // Tx_Broadcast_Packets_Good_Bad
160             TransmitUnderflowErrorPacketCount = 0x748, // Tx_Underflow_Error_Packets
161             TransmitSingleCollisionPacketGoodCount = 0x74C, // Tx_Single_Collision_Good_Packets
162             TransmitMultipleCollisionPacketGoodCount = 0x750, // Tx_Multiple_Collision_Good_Packets
163             TransmitDeferredPacketCount = 0x754, // Tx_Deferred_Packets
164             TransmitLateCollisionPacketCount = 0x758, // Tx_Late_Collision_Packets
165             TransmitExcessiveCollisionPacketCount = 0x75C, // Tx_Late_Collision_Packets
166             TransmitCarrierErrorPacketCount = 0x760, // Tx_Carrier_Error_Packets
167             TransmitOctetGoodCount = 0x764, // Tx_Octet_Count_Good
168             TransmitPacketGoodCount = 0x768, // Tx_Packet_Count_Good
169             TransmitExcessiveDeferralErrorPacketCount = 0x76C, // Tx_Excessive_Deferral_Error
170             TransmitPausePacketCount = 0x770, // Tx_Pause_Packets
171             TransmitVLANPacketGoodCount = 0x774, // Tx_VLAN_Packets_Good
172             TransmitGreaterThanMaxSizePacketGoodCount = 0x778, // Tx_OSize_Packets_Good
173 
174             ReceivePacketCount = 0x780, // Rx_Packets_Count_Good_Bad
175             ReceiveOctetCount = 0x784, // Rx_Octet_Count_Good_Bad
176             ReceiveOctetGoodCount = 0x788, // Rx_Octet_Count_Good
177             ReceiveBroadcastPacketGoodCount = 0x78C, // Rx_Broadcast_Packets_Good
178             ReceiveMulticastPacketGoodCount = 0x790, // Rx_Multicast_Packets_Good
179             ReceiveCRCErrorPacketCount = 0x794, // Rx_CRC_Error_Packets
180             ReceiveAlignmentErrorPacketCount = 0x798, // Rx_Alignment_Error_Packets
181             ReceiveRuntErrorPacketCount = 0x79C, // Rx_Runt_Error_Packets
182             ReceiveJabberErrorPacketCount = 0x7A0, // Rx_Jabber_Error_Packets
183             ReceiveUndersizeErrorPacketCount = 0x7A4, // Rx_Undersize_Packets_Good
184             ReceiveOversizeErrorPacketCount = 0x7A8, // Rx_Oversize_Packets_Good
185             Receive64To127OctetPacketCount = 0x7B0, // Rx_65To127Octets_Packets_Good_Bad
186             Receive128To255OctetPacketCount = 0x7B4, // Rx_128To255Octets_Packets_Good_Bad
187             Receive256To511OctetPacketCount = 0x7B8, // Rx_256To511Octets_Packets_Good_Bad
188             Receive512To1023OctetPacketCount = 0x7BC, // Rx_512To1023Octets_Packets_Good_Bad
189             Receive1024ToMaxOctetPacketCount = 0x7C0, // Rx_1024ToMaxOctets_Packets_Good_Bad
190             ReceiveUnicastPacketGoodCount = 0x7C4, // Rx_Unicast_Packets_Good
191             ReceiveLengthErrorPacketCount = 0x7C8, // Rx_Length_Error_Packets
192             ReceiveOutOfRangeTypePacketCount = 0x7CC, // Rx_Out_Of_Range_Type_Packets
193             ReceivePausePacketCount = 0x7D0, // Rx_Pause_Packets
194             ReceiveFIFOOverflowPacketCount = 0x7D4, // Rx_FIFO_Overflow_Packets
195             ReceiveVLANPacketCount = 0x7D8, // Rx_VLAN_Packets_Good_Bad
196             ReceiveWatchdogErrorPacketCount = 0x7DC, // Rx_Watchdog_Error_Packets
197             ReceiveReceiveErrorPacketCount = 0x7E0, // Rx_Receive_Error_Packets
198             ReceiveControlPacketGoodCount = 0x7E4, // Rx_Control_Packets_Good
199 
200             MMCFramePreemptionTransmitInterrupt = 0x8A0, // MMC_FPE_Tx_Interrupt
201             MMCFramePreemptionTransmitInterruptMask = 0x8A4, // MMC_FPE_Tx_Interrupt_Mask
202             MMCFramePreemptionTransmitFragmentCount = 0x8A8, // MMC_Tx_FPE_Fragment_Cntr
203             MMCTransmitHoldRequestCount = 0x8AC, // MMC_Tx_Hold_Req_Cntr
204             MMCFramePreemptionReceiveInterrupt = 0x8C0, // MMC_FPE_Rx_Interrupt
205             MMCFramePreemptionReceiveInterruptMask = 0x8C4, // MMC_FPE_Rx_Interrupt_Mask
206             MMCReceivePacketAssemblyErrorCount = 0x8C8, // MMC_Rx_Packet_Assembly_Err_Cntr
207             MMCReceivePacketSMDErrorCount = 0x8CC, // MMC_Rx_Packet_SMD_Err_Cntr
208             MMCReceivePacketAssemblyOkCount = 0x8D0, // MMC_Rx_Packet_Assembly_OK_Cntr
209             MMCFramePreemptionReceiveFragmentCount = 0x8D4, // MMC_Rx_FPE_Fragment_Cntr
210 
211             Layer3Layer4Control0 = 0x900, // MAC_L3_L4_Control0
212             Layer4Address0 = 0x904, // MAC_Layer4_Address0
213             Layer3Address0Register0 = 0x910, // MAC_Layer3_Addr0_Reg0
214             Layer3Address1Register0 = 0x914, // MAC_Layer3_Addr1_Reg0
215             Layer3Address2Register0 = 0x918, // MAC_Layer3_Addr2_Reg0
216             Layer3Address3Register0 = 0x91C, // MAC_Layer3_Addr3_Reg0
217 
218             Layer3Layer4Control1 = 0x930, // MAC_L3_L4_Control1
219             Layer4Address1 = 0x934, // MAC_Layer4_Address1
220             Layer3Address0Register1 = 0x940, // MAC_Layer3_Addr0_Reg1
221             Layer3Address1Register1 = 0x944, // MAC_Layer3_Addr1_Reg1
222             Layer3Address2Register1 = 0x948, // MAC_Layer3_Addr2_Reg1
223             Layer3Address3Register1 = 0x94C, // MAC_Layer3_Addr3_Reg1
224 
225             Layer3Layer4Control2 = 0x960, // MAC_L3_L4_Control2
226             Layer4Address2 = 0x964, // MAC_Layer4_Address2
227             Layer3Address0Register2 = 0x970, // MAC_Layer3_Addr0_Reg2
228             Layer3Address1Register2 = 0x974, // MAC_Layer3_Addr1_Reg2
229             Layer3Address2Register2 = 0x978, // MAC_Layer3_Addr2_Reg2
230             Layer3Address3Register2 = 0x97C, // MAC_Layer3_Addr3_Reg2
231 
232             Layer3Layer4Control3 = 0x990, // MAC_L3_L4_Control3
233             Layer4Address3 = 0x994, // MAC_Layer4_Address3
234             Layer3Address0Register3 = 0x9A0, // MAC_Layer3_Addr0_Reg3
235             Layer3Address1Register3 = 0x9A4, // MAC_Layer3_Addr1_Reg3
236             Layer3Address2Register3 = 0x9A8, // MAC_Layer3_Addr2_Reg3
237             Layer3Address3Register3 = 0x9AC, // MAC_Layer3_Addr3_Reg3
238 
239             TimestampControl = 0xB00, // MAC_Timestamp_Control
240             SubSecondIncrement = 0xB04, // MAC_Sub_Second_Increment
241             SystemTimeSeconds = 0xB08, // MAC_System_Time_Seconds
242             SystemTimeNanoseconds = 0xB0C, // MAC_System_Time_Nanoseconds
243             SystemTimeSecondsUpdate = 0xB10, // MAC_System_Time_Seconds_Update
244             SystemTimeNanosecondsUpdate = 0xB14, // MAC_System_Time_Nanoseconds_Update
245             TimestampAddend = 0xB18, // MAC_Timestamp_Addend
246             SystemTimeHigherWordSeconds = 0xB1C, // MAC_System_Time_Higher_Word_Seconds
247             TimestampStatus = 0xB20, // MAC_Timestamp_Status
248             TransmitTimestampStatusNanoseconds = 0xB30, // MAC_Tx_Timestamp_Status_Nanoseconds
249             TransmitTimestampStatusSeconds = 0xB34, // MAC_Tx_Timestamp_Status_Seconds
250             TimestampIngressAsymmetryCorrection = 0xB50, // MAC_Timestamp_Ingress_Asym_Corr
251             TimestampEgressAsymmetryCorrection = 0xB54, // MAC_Timestamp_Egress_Asym_Corr
252             TimestampIngressCorrectionNanosecond = 0xB58, // MAC_Timestamp_Ingress_Corr_Nanosecond
253             TimestampEgressCorrectionNanosecond = 0xB5C, // MAC_Timestamp_Egress_Corr_Nanosecond
254             TimestampIngressCorrectionSubnanosecond = 0xB60, // MAC_Timestamp_Ingress_Corr_Subnanosec
255             TimestampEgressCorrectionSubnanosecond = 0xB64, // MAC_Timestamp_Egress_Corr_Subnanosec
256             TimestampIngressLatency = 0xB68, // MAC_Timestamp_Ingress_Latency
257             TimestampEgressLatency = 0xB6C, // MAC_Timestamp_Egress_Latency
258 
259             PPSControl = 0xB70, // MAC_PPS_Control
260             PPS0TargetTimeSeconds = 0xB80, // MAC_PPS0_Target_Time_Seconds
261             PPS0TargetTimeNanoseconds = 0xB84, // MAC_PPS0_Target_Time_Nanoseconds
262             PPS0Interval = 0xB88, // MAC_PPS0_Interval
263             PPS0Width = 0xB8C, // MAC_PPS0_Width
264             PPS1TargetTimeSeconds = 0xB90, // MAC_PPS1_Target_Time_Seconds
265             PPS1TargetTimeNanoseconds = 0xB94, // MAC_PPS1_Target_Time_Nanoseconds
266             PPS1Interval = 0xB98, // MAC_PPS1_Interval
267             PPS1Width = 0xB9C, // MAC_PPS1_Width
268             PPS2TargetTimeSeconds = 0xBA0, // MAC_PPS2_Target_Time_Seconds
269             PPS2TargetTimeNanoseconds = 0xBA4, // MAC_PPS2_Target_Time_Nanoseconds
270             PPS2Interval = 0xBA8, // MAC_PPS2_Interval
271             PPS2Width = 0xBAC, // MAC_PPS2_Width
272             PPS3TargetTimeSeconds = 0xBB0, // MAC_PPS3_Target_Time_Seconds
273             PPS3TargetTimeNanoseconds = 0xBB4, // MAC_PPS3_Target_Time_Nanoseconds
274             PPS3Interval = 0xBB8, // MAC_PPS3_Interval
275             PPS3Width = 0xBBC, // MAC_PPS3_Width
276 
277             MTLOperationMode = 0xC00, // MTL_Operation_Mode
278             MTLDebugControl = 0xC08, // MTL_DBG_CTL
279             MTLDebugStatus = 0xC0C, // MTL_DBG_STS
280             MTLFIFODebugData = 0xC10, // MTL_FIFO_Debug_Data
281             MTLInterruptStatus = 0xC20, // MTL_Interrupt_Status
282             MTLReceiveQueueDMAMap0 = 0xC30, // MTL_RxQ_DMA_Map0
283             MTLTimeBasedSchedulingControl = 0xC40, // MTL_TBS_CTRL
284             MTLEnhancementsToScheduledTransmissionControl = 0xC50, // MTL_EST_Control
285             MTLEnhancementsToScheduledTransmissionExtendedControl = 0xC54, // MTL_EST_Ext_Control
286             MTLEnhancementsToScheduledTransmissionStatus = 0xC58, // MTL_EST_Status
287             MTLEnhancementsToScheduledTransmissionSchedulingError = 0xC60, // MTL_EST_Sch_Error
288             MTLEnhancementsToScheduledTransmissionFrameSizeError = 0xC64, // MTL_EST_Frm_Size_Error
289             MTLEnhancementsToScheduledTransmissionInterruptEnable = 0xC70, // MTL_EST_Intr_Enable
290             MTLEnhancementsToScheduledTransmissionGateControlList = 0xC80, // MTL_EST_GCL_Control
291             MTLEnhancementsToScheduledTransmissionGateControlData = 0xC84, // MTL_EST_GCL_Data
292             MTLFramePreemptionControlStatus = 0xC90, // MTL_FPE_CTRL_STS
293             MTLFramePreemptionAdvanceTime = 0xC94, // MTL_FPE_Advance
294             MTLReceiveParserControlStatus = 0xCA0, // MTL_RXP_Control_Status
295             MTLReceiveParserInterruptControlStatus = 0xCA4, // MTL_RXP_Interrupt_Control_Status
296             MTLReceiveParserDropCount = 0xCA8, // MTL_RXP_Drop_Cnt
297             MTLReceiveParserErrorCount = 0xCAC, // MTL_RXP_Error_Cnt
298             MTLReceiveParserIndirectAccessControlStatus = 0xCB0, // MTL_RXP_Indirect_Acc_Control_Status
299             MTLReceiveParserIndirectAccessData = 0xCB4, // MTL_RXP_Indirect_Acc_Data
300             MTLReceiveParserBypassCount = 0xCB8, // MTL_RXP_Bypass_Cnt
301             MTLErrorCorrectionControl = 0xCC0, // MTL_ECC_Control
302             MTLSafetyInterruptStatus = 0xCC4, // MTL_Safety_Interrupt_Status
303             MTLErrorCorrectionInterruptEnable = 0xCC8, // MTL_ECC_Interrupt_Enable
304             MTLErrorCorrectionInterruptStatus = 0xCCC, // MTL_ECC_Interrupt_Status
305             MTLErrorCorrectionErrorStatusCapture = 0xCD0, // MTL_ECC_Err_Sts_Rctl
306             MTLErrorCorrectionErrorAddressStatus = 0xCD4, // MTL_ECC_Err_Addr_Status
307             MTLErrorCorrectionErrorCountStatus = 0xCD8, // MTL_ECC_Err_Cntr_Status
308             MTLDataParityProtectionControl = 0xCE0, // MTL_DPP_Control
309             MTLTransmitQueue0OperationMode = 0xD00, // MTL_TxQ0_Operation_Mode
310             MTLTransmitQueue0Underflow = 0xD04, // MTL_TxQ0_Underflow
311             MTLTransmitQueue0Debug = 0xD08, // MTL_TxQ0_Debug
312             MTLTransmitQueue0ETSStatus = 0xD14, // MTL_TxQ0_ETS_Status
313             MTLTransmitQueue0QuantumWeight = 0xD18, // MTL_TxQ0_Quantum_Weight
314             MTLQueue0InterruptControlStatus = 0xD2C, // MTL_Q0_Interrupt_Control_Status
315             MTLReceiveQueue0OperationMode = 0xD30, // MTL_RxQ0_Operation_Mode
316             MTLReceiveQueue0MissedPacketOverflowCount = 0xD34, // MTL_RxQ0_Missed_Packet_Overflow_Cnt
317             MTLReceiveQueue0Debug = 0xD38, // MTL_RxQ0_Debug
318             MTLReceiveQueue0Control = 0xD3C, // MTL_RxQ0_Control
319             MTLTransmitQueue1OperationMode = 0xD40, // MTL_TxQ1_Operation_Mode
320             MTLTransmitQueue1Underflow = 0xD44, // MTL_TxQ1_Underflow
321             MTLTransmitQueue1Debug = 0xD48, // MTL_TxQ1_Debug
322             MTLTransmitQueue1ETSControl = 0xD50, // MTL_TxQ1_ETS_Control
323             MTLTransmitQueue1ETSStatus = 0xD54, // MTL_TxQ1_ETS_Status
324             MTLTransmitQueue1QuantumWeight = 0xD58, // MTL_TxQ1_Quantum_Weight
325             MTLTransmitQueue1SendSlopeCredit = 0xD5C, // MTL_TxQ1_SendSlopeCredit
326             MTLTransmitQueue1HighCredit = 0xD60, // MTL_TxQ1_HiCredit
327             MTLTransmitQueue1LowCredit = 0xD64, // MTL_TxQ1_LoCredit
328             MTLQueue1InterruptControlStatus = 0xD6C, // MTL_Q1_Interrupt_Control_Status
329             MTLReceiveQueue1OperationMode = 0xD70, // MTL_RxQ1_Operation_Mode
330             MTLReceiveQueue1MissedPacketOverflowCount = 0xD74, // MTL_RxQ1_Missed_Packet_Overflow_Cnt
331             MTLReceiveQueue1Debug = 0xD78, // MTL_RxQ1_Debug
332             MTLReceiveQueue1Control = 0xD7C, // MTL_RxQ1_Control
333 
334             DMAMode = 0x1000, // DMA_Mode
335             DMASystemBusMode = 0x1004, // DMA_SysBus_Mode
336             DMAInterruptStatus = 0x1008, // DMA_Interrupt_Status
337             DMADebugStatus0 = 0x100C, // DMA_Debug_Status0
338             DMATBSControl0 = 0x1050, // DMA_TBS_CTRL0
339             DMASafetyInterruptStatus = 0x1080, // DMA_Safety_Interrupt_Status
340 
341             DMAChannel0Control = 0x1100, // DMA_CH0_Control
342             DMAChannel0TransmitControl = 0x1104, // DMA_CH0_Tx_Control
343             DMAChannel0ReceiveControl = 0x1108, // DMA_CH0_Rx_Control
344             DMAChannel0TransmitDescriptorListAddress = 0x1114, // DMA_CH0_TxDesc_List_Address
345             DMAChannel0ReceiveDescriptorListAddress = 0x111C, // DMA_CH0_RxDesc_List_Address
346             DMAChannel0TransmitDescriptorTailPointer = 0x1120, // DMA_CH0_TxDesc_Tail_Pointer
347             DMAChannel0ReceiveDescriptorTailPointer = 0x1128, // DMA_CH0_RxDesc_Tail_Pointer
348             DMAChannel0TransmitDescriptorRingLength = 0x112C, // DMA_CH0_TxDesc_Ring_Length
349             DMAChannel0ReceiveDescriptorRingLength = 0x1130, // DMA_CH0_RxDesc_Ring_Length
350             DMAChannel0InterruptEnable = 0x1134, // DMA_CH0_Interrupt_Enable
351             DMAChannel0ReceiveInterruptWatchdogTimer = 0x1138, // DMA_CH0_Rx_Interrupt_Watchdog_Timer
352             DMAChannel0SlotFunctionControlStatus = 0x113C, // DMA_CH0_Slot_Function_Control_Status
353             DMAChannel0CurrentApplicationTransmitDescriptor = 0x1144, // DMA_CH0_Current_App_TxDesc
354             DMAChannel0CurrentApplicationReceiveDescriptor = 0x114C, // DMA_CH0_Current_App_RxDesc
355             DMAChannel0CurrentApplicationTransmitBuffer = 0x1154, // DMA_CH0_Current_App_TxBuffer
356             DMAChannel0CurrentApplicationReceiveBuffer = 0x115C, // DMA_CH0_Current_App_RxBuffer
357             DMAChannel0Status = 0x1160, // DMA_CH0_Status
358             DMAChannel0MissedFrameCount = 0x1164, // DMA_CH0_Miss_Frame_Cnt
359             DMAChannel0ReceiveParserAcceptCount = 0x1168, // DMA_CH0_RXP_Accept_Cnt
360             DMAChannel0ReceiveERICount = 0x116C, // DMA_CH0_RX_ERI_Cnt
361 
362             DMAChannel1Control = 0x1180, // DMA_CH1_Control
363             DMAChannel1TransmitControl = 0x1184, // DMA_CH1_Tx_Control
364             DMAChannel1ReceiveControl = 0x1188, // DMA_CH1_Rx_Control
365             DMAChannel1TransmitDescriptorListAddress = 0x1194, // DMA_CH1_TxDesc_List_Address
366             DMAChannel1ReceiveDescriptorListAddress = 0x119C, // DMA_CH1_RxDesc_List_Address
367             DMAChannel1TransmitDescriptorTailPointer = 0x11A0, // DMA_CH1_TxDesc_Tail_Pointer
368             DMAChannel1ReceiveDescriptorTailPointer = 0x11A8, // DMA_CH1_RxDesc_Tail_Pointer
369             DMAChannel1TransmitDescriptorRingLength = 0x11AC, // DMA_CH1_TxDesc_Ring_Length
370             DMAChannel1ReceiveDescriptorRingLength = 0x11B0, // DMA_CH0_RxDesc_Ring_Length
371             DMAChannel1InterruptEnable = 0x11B4, // DMA_CH1_Interrupt_Enable
372             DMAChannel1ReceiveInterruptWatchdogTimer = 0x11B8, // DMA_CH1_Rx_Interrupt_Watchdog_Timer
373             DMAChannel1SlotFunctionControlStatus = 0x11BC, // DMA_CH1_Slot_Function_Control_Status
374             DMAChannel1CurrentApplicationTransmitDescriptor = 0x11C4, // DMA_CH1_Current_App_TxDesc
375             DMAChannel1CurrentApplicationReceiveDescriptor = 0x11CC, // DMA_CH1_Current_App_RxDesc
376             DMAChannel1CurrentApplicationTransmitBuffer = 0x11D4, // DMA_CH1_Current_App_TxBuffer
377             DMAChannel1CurrentApplicationReceiveBuffer = 0x11DC, // DMA_CH1_Current_App_RxBuffer
378             DMAChannel1Status = 0x11E0, // DMA_CH1_Status
379             DMAChannel1MissedFrameCount = 0x11E4, // DMA_CH1_Miss_Frame_Cnt
380             DMAChannel1ReceiveParserAcceptCount = 0x11E8, // DMA_CH1_RXP_Accept_Cnt
381             DMAChannel1ReceiveERICount = 0x11EC, // DMA_CH1_RX_ERI_Cnt
382         }
383     }
384 }