1 // 2 // Copyright (c) 2010-2025 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 System.Collections.Generic; 9 using Antmicro.Renode.Core.Structure; 10 using Antmicro.Renode.Core.Structure.Registers; 11 using Antmicro.Renode.Logging; 12 using Antmicro.Renode.Peripherals.Bus; 13 using Antmicro.Renode.UserInterface; 14 using Antmicro.Renode.Utilities; 15 16 namespace Antmicro.Renode.Peripherals.Network 17 { 18 public partial class SynopsysDWCEthernetQualityOfService : IDoubleWordPeripheral 19 { ReadDoubleWord(long offset)20 public virtual uint ReadDoubleWord(long offset) 21 { 22 return Read<RegistersMacAndMmc>(macAndMmcRegisters, "MAC and MMC", offset); 23 } 24 WriteDoubleWord(long offset, uint value)25 public virtual void WriteDoubleWord(long offset, uint value) 26 { 27 Write<RegistersMacAndMmc>(macAndMmcRegisters, "MAC and MMC", offset, value); 28 } 29 30 [ConnectionRegionAttribute("mtl")] ReadDoubleWordFromMTL(long offset)31 public uint ReadDoubleWordFromMTL(long offset) 32 { 33 return Read<RegistersMTL>(mtlRegisters, "MTL", offset); 34 } 35 36 [ConnectionRegionAttribute("mtl")] WriteDoubleWordToMTL(long offset, uint value)37 public void WriteDoubleWordToMTL(long offset, uint value) 38 { 39 Write<RegistersMTL>(mtlRegisters, "MTL", offset, value); 40 } 41 42 [ConnectionRegionAttribute("dma")] ReadDoubleWordFromDMA(long offset)43 public uint ReadDoubleWordFromDMA(long offset) 44 { 45 return Read<RegistersDMA>(dmaRegisters, "DMA", offset); 46 } 47 48 [ConnectionRegionAttribute("dma")] WriteDoubleWordToDMA(long offset, uint value)49 public void WriteDoubleWordToDMA(long offset, uint value) 50 { 51 Write<RegistersDMA>(dmaRegisters, "DMA", offset, value); 52 } 53 54 [UiAccessible] GetCoutersInfo()55 public string[,] GetCoutersInfo() 56 { 57 var table = new Table(); 58 table.AddRow("Name", "Value"); 59 table.AddRow(nameof(txByteCounter), Convert.ToString(txByteCounter.Value)); 60 table.AddRow(nameof(txPacketCounter), Convert.ToString(txPacketCounter.Value)); 61 table.AddRow(nameof(txUnicastPacketCounter), Convert.ToString(txUnicastPacketCounter.Value)); 62 table.AddRow(nameof(txMulticastPacketCounter), Convert.ToString(txMulticastPacketCounter.Value)); 63 table.AddRow(nameof(txBroadcastPacketCounter), Convert.ToString(txBroadcastPacketCounter.Value)); 64 table.AddRow(nameof(txGoodByteCounter), Convert.ToString(txGoodByteCounter.Value)); 65 table.AddRow(nameof(txGoodPacketCounter), Convert.ToString(txGoodPacketCounter.Value)); 66 table.AddRow(nameof(rxPacketCounter), Convert.ToString(rxPacketCounter.Value)); 67 table.AddRow(nameof(rxByteCounter), Convert.ToString(rxByteCounter.Value)); 68 table.AddRow(nameof(rxGoodByteCounter), Convert.ToString(rxGoodByteCounter.Value)); 69 table.AddRow(nameof(rxBroadcastPacketCounter), Convert.ToString(rxBroadcastPacketCounter.Value)); 70 table.AddRow(nameof(rxMulticastPacketCounter), Convert.ToString(rxMulticastPacketCounter.Value)); 71 table.AddRow(nameof(rxCrcErrorPacketCounter), Convert.ToString(rxCrcErrorPacketCounter.Value)); 72 table.AddRow(nameof(rxUnicastPacketCounter), Convert.ToString(rxUnicastPacketCounter.Value)); 73 table.AddRow(nameof(rxFifoPacketCounter), Convert.ToString(rxFifoPacketCounter.Value)); 74 for(var i = 0; i < NumberOfIpcCounters; i++) 75 { 76 var name = (IpcCounter)i; 77 table.AddRow($"IPC {name} Packets", Convert.ToString(rxIpcPacketCounter[i].Value)); 78 table.AddRow($"IPC {name} Bytes", Convert.ToString(rxIpcByteCounter[i].Value)); 79 } 80 return table.ToArray(); 81 } 82 83 // This property works similar to `sysbus LogPeripheralAccess` command, 84 // but supports regions. Setting this to `null` disables logging. 85 public LogLevel PeripheralAccessLogLevel { get; set; } = null; 86 87 protected IEnumRegisterField<DMAChannelInterruptMode> dmaInterruptMode; 88 ResetRegisters()89 private void ResetRegisters() 90 { 91 macAndMmcRegisters.Reset(); 92 mtlRegisters.Reset(); 93 dmaRegisters.Reset(); 94 } 95 CreateRegisterMap()96 private IDictionary<long, DoubleWordRegister> CreateRegisterMap() 97 { 98 return new Dictionary<long, DoubleWordRegister>() 99 { 100 {(long)RegistersMacAndMmc.OperatingModeConfiguration, new DoubleWordRegister(this) 101 .WithFlag(0, out rxEnable, name: "MACCR.RE (Receiver Enable)") 102 .WithFlag(1, out txEnable, name: "MACCR.TE (TE)") 103 .WithTag("MACCR.PRELEN (PRELEN)", 2, 2) 104 .WithTaggedFlag("MACCR.DC (DC)", 4) 105 .WithTag("MACCR.BL (BL)", 5, 2) 106 .WithReservedBits(7, 1) 107 .WithTaggedFlag("MACCR.DR (DR)", 8) 108 .WithTaggedFlag("MACCR.DCRS (DCRS)", 9) 109 .WithTaggedFlag("MACCR.DO (DO)", 10) 110 .WithTaggedFlag("MACCR.ECRSFD (ECRSFD)", 11) 111 .WithFlag(12, out loopbackEnabled, name: "MACCR.LM (LM)") 112 .WithTaggedFlag("MACCR.DM (DM)", 13) 113 .WithTaggedFlag("MACCR.FES (FES)", 14) 114 .WithReservedBits(15, 1) 115 .WithTaggedFlag("MACCR.JD (JD)", 17) 116 .WithTaggedFlag("MACCR.JE (JE)", 16) 117 .WithReservedBits(18, 1) 118 .WithTaggedFlag("MACCR.WD (WD)", 19) 119 .WithTaggedFlag("MACCR.ACS (ACS)", 20) 120 .WithTaggedFlag("MACCR.CST (CST)", 21) 121 .WithTaggedFlag("MACCR.S2KP (S2KP)", 22) 122 .WithTaggedFlag("MACCR.GPSLCE (GPSLCE)", 23) 123 .WithTag("MACCR.IPG (IPG)", 24, 3) 124 .WithFlag(27, out checksumOffloadEnable, name: "MACCR.IPC (IPC)") 125 .WithEnumField<DoubleWordRegister, RegisterSourceAddressOperation>(28, 3, out sourceAddressOperation, name: "MACCR.SARC (SARC)") 126 .WithTaggedFlag("MACCR.ARPEN (ARPEN)", 31) 127 }, 128 {(long)RegistersMacAndMmc.ExtendedOperatingModeConfiguration, new DoubleWordRegister(this) 129 .WithTag("MACECR.GPSL (GPSL)", 0, 14) 130 .WithReservedBits(14, 2) 131 .WithFlag(16, out crcCheckDisable, name: "MACECR.DCRCC (DCRCC)") 132 .WithTaggedFlag("MACECR.SPEN (SPEN)", 17) 133 .WithTaggedFlag("MACECR.USP (USP)", 18) 134 .If(dmaChannels.Length > 1) 135 .Then(r => r.WithFlag(19, out packetDuplicationControl, name: "MACECR.PDC (PDC)")) 136 .Else(r => r.WithReservedBits(19, 1)) 137 .WithReservedBits(20, 4) 138 .WithTaggedFlag("MACECR.EIPGEN (EIPGEN)", 24) 139 .WithTag("MACECR.EIPG (EIPG)", 25, 5) 140 .WithReservedBits(30, 2) 141 }, 142 {(long)RegistersMacAndMmc.PacketFilteringControl, new DoubleWordRegister(this) 143 .WithTaggedFlag("MACPFR.PR (PR)", 0) 144 .WithTaggedFlag("MACPFR.HUC (HUC)", 1) 145 .WithTaggedFlag("MACPFR.HMC (HMC)", 2) 146 .WithTaggedFlag("MACPFR.DAIF (DAIF)", 3) 147 .WithTaggedFlag("MACPFR.PM (PM)", 4) 148 .WithTaggedFlag("MACPFR.DBF (DBF)", 5) 149 .WithTag("MACPFR.PCF (PCF)", 6, 2) 150 .WithTaggedFlag("MACPFR.SAIF (SAIF)", 8) 151 .WithTaggedFlag("MACPFR.SAF (SAF)", 9) 152 .WithTaggedFlag("MACPFR.HPF (HPF)", 10) 153 .WithReservedBits(11, 5) 154 .WithTaggedFlag("MACPFR.VTFE (VTFE)", 16) 155 .WithReservedBits(17, 3) 156 .WithTaggedFlag("MACPFR.IPFE (IPFE)", 20) 157 .WithTaggedFlag("MACPFR.DNTU (DNTU)", 21) 158 .WithReservedBits(22, 9) 159 .WithTaggedFlag("MACPFR.RA (RA)", 31) 160 }, 161 {(long)RegistersMacAndMmc.WatchdogTimeout, new DoubleWordRegister(this) 162 .WithTag("MACWTR.WTO (WTO)", 0, 4) 163 .WithReservedBits(4, 4) 164 .WithTaggedFlag("MACWTR.PWE (PWE)", 8) 165 .WithReservedBits(9, 23) 166 }, 167 {(long)RegistersMacAndMmc.HashTable0, new DoubleWordRegister(this) 168 .WithTag("MACHT0R.HT31T0 (HT31T0)", 0, 32) 169 }, 170 {(long)RegistersMacAndMmc.HashTable1, new DoubleWordRegister(this) 171 .WithTag("MACHT1R.HT63T32 (HT63T32)", 0, 32) 172 }, 173 {(long)RegistersMacAndMmc.VLANTag, new DoubleWordRegister(this) 174 .WithTag("MACVTR.VL (VL)", 0, 16) 175 .WithTaggedFlag("MACVTR.ETV (ETV)", 16) 176 .WithTaggedFlag("MACVTR.VTIM (VTIM)", 17) 177 .WithTaggedFlag("MACVTR.ESVL (ESVL)", 18) 178 .WithTaggedFlag("MACVTR.ERSVLM (ERSVLM)", 19) 179 .WithTaggedFlag("MACVTR.DOVLTC (DOVLTC)", 20) 180 .WithTag("MACVTR.EVLS (EVLS)", 21, 2) 181 .WithReservedBits(23, 1) 182 .WithTaggedFlag("MACVTR.EVLRXS (EVLRXS)", 24) 183 .WithTaggedFlag("MACVTR.VTHM (VTHM)", 25) 184 .WithTaggedFlag("MACVTR.EDVLP (EDVLP)", 26) 185 .WithTaggedFlag("MACVTR.ERIVLT (ERIVLT)", 27) 186 .WithTag("MACVTR.EIVLS (EIVLS)", 28, 2) 187 .WithReservedBits(30, 1) 188 .WithTaggedFlag("MACVTR.EIVLRXS (EIVLRXS)", 31) 189 }, 190 {(long)RegistersMacAndMmc.VLANHashTable, new DoubleWordRegister(this) 191 .WithTag("MACVHTR.VLHT (VLHT)", 0, 16) 192 .WithReservedBits(16, 16) 193 }, 194 {(long)RegistersMacAndMmc.VLANInclusion, new DoubleWordRegister(this) 195 .WithTag("MACVIR.VLT (VLT)", 0, 16) 196 .WithTag("MACVIR.VLC (VLC)", 16, 2) 197 .WithTaggedFlag("MACVIR.VLP (VLP)", 18) 198 .WithTaggedFlag("MACVIR.CSVL (CSVL)", 19) 199 .WithTaggedFlag("MACVIR.VLTI (VLTI)", 20) 200 .WithReservedBits(21, 11) 201 }, 202 {(long)RegistersMacAndMmc.InnerVLANInclusion, new DoubleWordRegister(this) 203 .WithTag("MACIVIR.VLT (VLT)", 0, 16) 204 .WithTag("MACIVIR.VLC (VLC)", 16, 2) 205 .WithTaggedFlag("MACIVIR.VLP (VLP)", 18) 206 .WithTaggedFlag("MACIVIR.CSVL (CSVL)", 19) 207 .WithTaggedFlag("MACIVIR.VLTI (VLTI)", 20) 208 .WithReservedBits(21, 11) 209 }, 210 {(long)RegistersMacAndMmc.TxQueueFlowControl, new DoubleWordRegister(this) 211 .WithTaggedFlag("MACQTxFCR.FCB_BPA (FCB_BPA)", 0) 212 .WithTaggedFlag("MACQTxFCR.TFE (TFE)", 1) 213 .WithReservedBits(2, 2) 214 .WithTag("MACQTxFCR.PLT (PLT)", 4, 3) 215 .WithTaggedFlag("MACQTxFCR.DZPQ (DZPQ)", 7) 216 .WithReservedBits(8, 8) 217 .WithTag("MACQTxFCR.PT (PT)", 16, 16) 218 }, 219 {(long)RegistersMacAndMmc.RxFlowControl, new DoubleWordRegister(this) 220 .WithTaggedFlag("MACRxFCR.RFE (RFE)", 0) 221 .WithTaggedFlag("MACRxFCR.UP (UP)", 1) 222 .WithReservedBits(2, 30) 223 }, 224 {(long)RegistersMacAndMmc.InterruptStatus, new DoubleWordRegister(this) 225 .WithReservedBits(0, 3) 226 .WithTaggedFlag("MACISR.PHYIS (PHYIS)", 3) 227 .WithFlag(4, out ptpMessageTypeInterrupt, FieldMode.Read, name: "MACISR.PMTIS (PMTIS)") 228 .WithFlag(5, out lowPowerIdleInterrupt, FieldMode.Read, name: "MACISR.LPIIS (LPIIS)") 229 .WithReservedBits(6, 2) 230 .WithTaggedFlag("MACISR.MMCIS (MMCIS)", 8) 231 .WithFlag(9, FieldMode.Read, valueProviderCallback: _ => MMCRxInterruptStatus, name: "MACISR.MMCRXIS (MMCRXIS)") 232 .WithFlag(10, FieldMode.Read, valueProviderCallback: _ => MMCTxInterruptStatus, name: "MACISR.MMCTXIS (MMCTXIS)") 233 .WithReservedBits(11, 1) 234 .WithFlag(12, out timestampInterrupt, FieldMode.ReadToClear, name: "MACISR.TSIS (TSIS)") 235 .WithTaggedFlag("MACISR.TXSTSIS (TXSTSIS)", 13) 236 .WithTaggedFlag("MACISR.RXSTSIS (RXSTSIS)", 14) 237 .WithReservedBits(15, 17) 238 .WithChangeCallback((_, __) => UpdateInterrupts()) 239 }, 240 {(long)RegistersMacAndMmc.InterruptEnable, new DoubleWordRegister(this) 241 .WithReservedBits(0, 3) 242 .WithTaggedFlag("MACIER.PHYIE (PHYIE)", 3) 243 .WithFlag(4, out ptpMessageTypeInterruptEnable, name: "MACIER.PMTIE (PMTIE)") 244 .WithFlag(5, out lowPowerIdleInterruptEnable, name: "MACIER.LPIIE (LPIIE)") 245 .WithReservedBits(6, 6) 246 .WithFlag(12, out timestampInterruptEnable, name: "MACIER.TSIE (TSIE)") 247 .WithTaggedFlag("MACIER.TXSTSIE (TXSTSIE)", 13) 248 .WithTaggedFlag("MACIER.RXSTSIE (RXSTSIE)", 14) 249 .WithReservedBits(15, 17) 250 .WithChangeCallback((_, __) => UpdateInterrupts()) 251 }, 252 {(long)RegistersMacAndMmc.RxTxStatus, new DoubleWordRegister(this) 253 .WithTaggedFlag("MACRxTxSR.TJT (TJT)", 0) 254 .WithTaggedFlag("MACRxTxSR.NCARR (NCARR)", 1) 255 .WithTaggedFlag("MACRxTxSR.LCARR (LCARR)", 2) 256 .WithTaggedFlag("MACRxTxSR.EXDEF (EXDEF)", 3) 257 .WithTaggedFlag("MACRxTxSR.LCOL (LCOL)", 4) 258 .WithTaggedFlag("MACRxTxSR.EXCOL (LCOL)", 5) 259 .WithReservedBits(6, 2) 260 .WithTaggedFlag("MACRxTxSR.RWT (RWT)", 8) 261 .WithReservedBits(9, 23) 262 }, 263 {(long)RegistersMacAndMmc.PMTControlStatus, new DoubleWordRegister(this) 264 .WithTaggedFlag("MACPCSR.PWRDWN (PWRDWN)", 0) 265 .WithTaggedFlag("MACPCSR.MGKPKTEN (MGKPKTEN)", 1) 266 .WithTaggedFlag("MACPCSR.RWKPKTEN (RWKPKTEN)", 2) 267 .WithReservedBits(3, 2) 268 .WithTaggedFlag("MACPCSR.MGKPRCVD (MGKPRCVD)", 5) 269 .WithTaggedFlag("MACPCSR.RWKPRCVD (RWKPRCVD)", 6) 270 .WithReservedBits(7, 2) 271 .WithTaggedFlag("MACPCSR.GLBLUCAST (GLBLUCAST)", 9) 272 .WithTaggedFlag("MACPCSR.RWKPFE (RWKPFE)", 10) 273 .WithReservedBits(11, 13) 274 .WithTag("MACPCSR.RWKPTR (RWKPTR)", 24, 5) 275 .WithReservedBits(29, 2) 276 .WithTaggedFlag("MACPCSR.RWKFILTRST (RWKFILTRST)", 31) 277 }, 278 {(long)RegistersMacAndMmc.RemoteWakeUpPacketFilter, new DoubleWordRegister(this) 279 .WithTag("MACRWKPFR.MACRWKPFR (MACRWKPFR)", 0, 32) 280 }, 281 {(long)RegistersMacAndMmc.LPIControlAndStatus, new DoubleWordRegister(this) 282 .WithTaggedFlag("MACLCSR.TLPIEN (TLPIEN)", 0) 283 .WithTaggedFlag("MACLCSR.TLPIEX (TLPIEX)", 1) 284 .WithTaggedFlag("MACLCSR.RLPIEN (RLPIEN)", 2) 285 .WithTaggedFlag("MACLCSR.RLPIEX (RLPIEX)", 3) 286 .WithReservedBits(4, 4) 287 .WithTaggedFlag("MACLCSR.TLPIST (TLPIST)", 8) 288 .WithTaggedFlag("MACLCSR.RLPIST (RLPIST)", 9) 289 .WithReservedBits(10, 6) 290 .WithTaggedFlag("MACLCSR.LPIEN (LPIEN)", 16) 291 .WithTaggedFlag("MACLCSR.PLS (PLS)", 17) 292 .WithTaggedFlag("MACLCSR.PLSEN (PLSEN)", 18) 293 .WithTaggedFlag("MACLCSR.LPITXA (LPITXA)", 19) 294 .WithTaggedFlag("MACLCSR.LPITE (LPITE)", 20) 295 .WithReservedBits(21, 11) 296 }, 297 {(long)RegistersMacAndMmc.LPITimersControl, new DoubleWordRegister(this, 0x3E80000) 298 .WithTag("MACLTCR.TWT (TWT)", 0, 16) 299 .WithTag("MACLTCR.LST (LST)", 16, 10) 300 .WithReservedBits(26, 6) 301 }, 302 {(long)RegistersMacAndMmc.LPIEntryTimer, new DoubleWordRegister(this) 303 .WithTag("MACLETR.LPIET (LPIET)", 0, 17) 304 .WithReservedBits(17, 15) 305 }, 306 {(long)RegistersMacAndMmc.OneMicrosecondTickCounter, new DoubleWordRegister(this) 307 .WithTag("MAC1USTCR.TIC_1US_CNTR (TIC_1US_CNTR)", 0, 12) 308 .WithReservedBits(12, 20) 309 }, 310 {(long)RegistersMacAndMmc.Version, new DoubleWordRegister(this, 0x3142) 311 .WithTag("MACVR.SNPSVER (SNPSVER)", 0, 8) 312 .WithTag("MACVR.USERVER (USERVER)", 8, 8) 313 .WithReservedBits(16, 16) 314 }, 315 {(long)RegistersMacAndMmc.Debug, new DoubleWordRegister(this) 316 .WithTaggedFlag("MACDR.RPESTS (RPESTS)", 0) 317 .WithTag("MACDR.RFCFCSTS (RFCFCSTS)", 1, 2) 318 .WithReservedBits(3, 13) 319 .WithTaggedFlag("MACDR.TPESTS (TPESTS)", 16) 320 .WithTag("MACDR.TFCSTS (TFCSTS)", 17, 2) 321 .WithReservedBits(19, 13) 322 }, 323 {(long)RegistersMacAndMmc.HardwareFeature0, new DoubleWordRegister(this, 0x0A0D_73F7) 324 .WithTaggedFlag("MIISEL", 0) 325 .WithTaggedFlag("GMIISEL", 1) 326 .WithTaggedFlag("HDSEL", 2) 327 .WithTaggedFlag("PCSSEL", 3) 328 .WithTaggedFlag("VLHASH", 4) 329 .WithTaggedFlag("SMASEL", 5) 330 .WithTaggedFlag("RWKSEL", 6) 331 .WithTaggedFlag("MGKSEL", 7) 332 .WithTaggedFlag("MMCSEL", 8) 333 .WithTaggedFlag("ARPOFFSEL", 9) 334 .WithReservedBits(10, 2) 335 .WithTaggedFlag("TSSEL", 12) 336 .WithTaggedFlag("EEESEL", 13) 337 .WithTaggedFlag("TXCOESEL", 14) 338 .WithReservedBits(15, 1) 339 .WithTaggedFlag("RXCOESEL", 16) 340 .WithReservedBits(17, 1) 341 .WithTag("ADDMACADRSEL", 18, 5) 342 .WithTaggedFlag("MACADR32SEL", 23) 343 .WithTaggedFlag("MACADR64SEL", 24) 344 .WithTag("TSSTSSEL", 25, 2) 345 .WithTaggedFlag("SAVLANINS", 27) 346 .WithTag("ACTPHYSEL", 28, 3) 347 .WithReservedBits(31, 1) 348 }, 349 {(long)RegistersMacAndMmc.HardwareFeature1, new DoubleWordRegister(this, 0x1104_1904) 350 .WithTag("MACHWF1R.RXFIFOSIZE (RXFIFOSIZE)", 0, 5) 351 .WithReservedBits(5, 1) 352 .WithTag("MACHWF1R.TXFIFOSIZE (TXFIFOSIZE)", 6, 5) 353 .WithTaggedFlag("MACHWF1R.OSTEN (OSTEN)", 11) 354 .WithTaggedFlag("MACHWF1R.PTOEN (PTOEN)", 12) 355 .WithTaggedFlag("MACHWF1R.ADVTHWORD (ADVTHWORD)", 13) 356 .WithTag("MACHWF1R.ADDR64 (ADDR64)", 14, 2) 357 .WithTaggedFlag("MACHWF1R.DCBEN (DCBEN)", 16) 358 .WithTaggedFlag("MACHWF1R.SPHEN (SPHEN)", 17) 359 .WithTaggedFlag("MACHWF1R.TSOEN (TSOEN)", 18) 360 .WithTaggedFlag("MACHWF1R.DBGMEMA (DBGMEMA)", 19) 361 .WithTaggedFlag("MACHWF1R.AVSEL (AVSEL)", 20) 362 .WithReservedBits(21, 3) 363 .WithTag("MACHWF1R.HASHTBLSZ (HASHTBLSZ)", 24, 2) 364 .WithReservedBits(26, 1) 365 .WithTag("MACHWF1R.L3L4FNUM (L3L4FNUM)", 27, 4) 366 .WithReservedBits(31, 1) 367 }, 368 {(long)RegistersMacAndMmc.HardwareFeature2, new DoubleWordRegister(this, 0x4100_0000) 369 .WithTag("MACHWF2R.RXQCNT (RXQCNT)", 0, 4) 370 .WithReservedBits(4, 2) 371 .WithTag("MACHWF2R.TXQCNT (TXQCNT)", 6, 4) 372 .WithReservedBits(10, 2) 373 .WithTag("MACHWF2R.RXCHCNT (RXCHCNT)", 12, 4) 374 .WithReservedBits(16, 2) 375 .WithTag("MACHWF2R.TXCHCNT (TXCHCNT)", 18, 4) 376 .WithReservedBits(22, 2) 377 .WithTag("MACHWF2R.PPSOUTNUM (PPSOUTNUM)", 24, 3) 378 .WithReservedBits(27, 1) 379 .WithTag("MACHWF2R.AUXSNAPNUM (AUXSNAPNUM)", 28, 3) 380 .WithReservedBits(31, 1) 381 }, 382 {(long)RegistersMacAndMmc.HardwareFeature3, new DoubleWordRegister(this, 0x20) 383 .WithTag("NRVF", 0, 3) 384 .WithReservedBits(3, 1) 385 .WithTaggedFlag("CBTISEL", 4) 386 .WithTaggedFlag("DVLAN", 5) 387 .WithReservedBits(6, 26) 388 }, 389 {(long)RegistersMacAndMmc.MDIOAddress, new DoubleWordRegister(this) 390 .WithFlag(0, out miiBusy, name: "MACMDIOAR.MB (MB)") 391 .WithFlag(1, out clause45PhyEnable, name: "MACMDIOAR.C45E (C45E)") 392 .WithEnumField<DoubleWordRegister, MIIOperation>(2, 2, out miiOperation, name: "MACMDIOAR.GOC (GOC)") 393 .WithTaggedFlag("MACMDIOAR.SKAP (SKAP)", 4) 394 .WithReservedBits(5, 3) 395 .WithValueField(8, 4, changeCallback: (_, value) => { if(value >= 0b0110 && value <= 0b0111) this.Log(LogLevel.Warning, "Reserved CSR Clock Range (0x{0:X}).", value); }, name: "MACMDIOAR.CR (CR)") 396 .WithTag("MACMDIOAR.NTC (NTC)", 12, 3) 397 .WithReservedBits(15, 1) 398 .WithValueField(16, 5, out miiRegisterOrDeviceAddress, name: "MACMDIOAR.RDA (RDA)") 399 .WithValueField(21, 5, out miiPhy, name: "MACMDIOAR.PA (PA)") 400 .WithTaggedFlag("MACMDIOAR.BTB (BTB)", 26) 401 .WithTaggedFlag("MACMDIOAR.PSE (PSE)", 27) 402 .WithReservedBits(28, 4) 403 .WithWriteCallback((_, __) => ExecuteMIIOperation()) 404 }, 405 {(long)RegistersMacAndMmc.MDIOData, new DoubleWordRegister(this) 406 .WithValueField(0, 16, out miiData, name: "MACMDIODR.MD (MD)") 407 .WithValueField(16, 16, out miiAddress, name: "MACMDIODR.RA (RA)") 408 }, 409 {(long)RegistersMacAndMmc.ARPAddress, new DoubleWordRegister(this) 410 .WithTag("MACARPAR.ARPPA (ARPPA)", 0, 32) 411 }, 412 {(long)RegistersMacAndMmc.CSRSoftwareControl, new DoubleWordRegister(this) 413 .WithTaggedFlag("RCW", 0) 414 .WithReservedBits(1, 7) 415 .WithTaggedFlag("SEEN", 8) 416 .WithReservedBits(9, 23) 417 }, 418 {(long)RegistersMacAndMmc.MACAddress0High, new DoubleWordRegister(this, 0x8000FFFF) 419 .WithValueField(0, 8, name: "MACA0HR.ADDRHI (ADDRHI) [MAC.E]", 420 valueProviderCallback: _ => MAC.E, 421 writeCallback: (_, value) => MAC = MAC.WithNewOctets(e: (byte)value)) 422 .WithValueField(8, 8, name: "MACA0HR.ADDRHI (ADDRHI) [MAC.F]", 423 valueProviderCallback: _ => MAC.F, 424 writeCallback: (_, value) => MAC = MAC.WithNewOctets(f: (byte)value)) 425 .If(dmaChannels.Length > 1) 426 .Then(r => r 427 .WithValueField(16, dmaChannels.Length, out dmaChannelSelect, name: "MACA0HR.DCS (DCS)") 428 .WithReservedBits(16 + dmaChannels.Length, 15 - dmaChannels.Length)) 429 .Else(r => r.WithReservedBits(16, 15)) 430 .WithFlag(31, FieldMode.Read, name: "MACA0HR.AE (AE)", 431 valueProviderCallback: _ => true) 432 }, 433 {(long)RegistersMacAndMmc.MACAddress0Low, new DoubleWordRegister(this, 0xFFFFFFFF) 434 .WithValueField(0, 8, name: "MACA0LR.ADDRLO (ADDRLO) [MAC.A]", 435 valueProviderCallback: _ => MAC.A, 436 writeCallback: (_, value) => MAC = MAC.WithNewOctets(a: (byte)value)) 437 .WithValueField(8, 8, name: "MACA0LR.ADDRLO (ADDRLO) [MAC.B]", 438 valueProviderCallback: _ => MAC.B, 439 writeCallback: (_, value) => MAC = MAC.WithNewOctets(b: (byte)value)) 440 .WithValueField(16, 8, name: "MACA0LR.ADDRLO (ADDRLO) [MAC.C]", 441 valueProviderCallback: _ => MAC.C, 442 writeCallback: (_, value) => MAC = MAC.WithNewOctets(c: (byte)value)) 443 .WithValueField(24, 8, name: "MACA0LR.ADDRLO (ADDRLO) [MAC.D]", 444 valueProviderCallback: _ => MAC.D, 445 writeCallback: (_, value) => MAC = MAC.WithNewOctets(d: (byte)value)) 446 }, 447 {(long)RegistersMacAndMmc.MACAddress1High, new DoubleWordRegister(this, 0xFFFF) 448 .WithValueField(0, 8, name: "MACA1HR.ADDRHI (ADDRHI) [MAC1.E]", 449 valueProviderCallback: _ => MAC1.E, 450 writeCallback: (_, value) => MAC1 = MAC1.WithNewOctets(e: (byte)value)) 451 .WithValueField(8, 8, name: "MACA1HR.ADDRHI (ADDRHI) [MAC1.F]", 452 valueProviderCallback: _ => MAC1.F, 453 writeCallback: (_, value) => MAC1 = MAC1.WithNewOctets(f: (byte)value)) 454 .WithReservedBits(16, 8) 455 .WithTag("MACA1HR.MBC (MBC)", 24, 6) 456 .WithTaggedFlag("MACA1HR.SA (SA)", 30) 457 .WithTaggedFlag("MACA1HR.AE (AE)", 31) 458 }, 459 {(long)RegistersMacAndMmc.MACAddress1Low, new DoubleWordRegister(this, 0xFFFFFFFF) 460 .WithValueField(0, 8, name: "MACA1LR.ADDRLO (ADDRLO) [MAC.A]", 461 valueProviderCallback: _ => MAC1.A, 462 writeCallback: (_, value) => MAC1 = MAC1.WithNewOctets(a: (byte)value)) 463 .WithValueField(8, 8, name: "MACA1LR.ADDRLO (ADDRLO) [MAC1.B]", 464 valueProviderCallback: _ => MAC1.B, 465 writeCallback: (_, value) => MAC = MAC.WithNewOctets(b: (byte)value)) 466 .WithValueField(16, 8, name: "MACA1LR.ADDRLO (ADDRLO) [MAC1.C]", 467 valueProviderCallback: _ => MAC1.C, 468 writeCallback: (_, value) => MAC1 = MAC1.WithNewOctets(c: (byte)value)) 469 .WithValueField(24, 8, name: "MACA1LR.ADDRLO (ADDRLO) [MAC1.D]", 470 valueProviderCallback: _ => MAC1.D, 471 writeCallback: (_, value) => MAC1 = MAC1.WithNewOctets(d: (byte)value)) 472 }, 473 {(long)RegistersMacAndMmc.MACAddress2High, new DoubleWordRegister(this, 0xFFFF) 474 .WithTag("MACA2HR.ADDRHI (ADDRHI)", 0, 16) 475 .WithReservedBits(16, 8) 476 .WithTag("MACA2HR.MBC (MBC)", 24, 6) 477 .WithTaggedFlag("MACA2HR.SA (SA)", 30) 478 .WithTaggedFlag("MACA2HR.AE (AE)", 31) 479 }, 480 {(long)RegistersMacAndMmc.MACAddress2Low, new DoubleWordRegister(this, 0xFFFFFFFF) 481 .WithTag("MACA2LR.ADDRLO (ADDRLO)", 0, 32) 482 }, 483 {(long)RegistersMacAndMmc.MACAddress3High, new DoubleWordRegister(this, 0xFFFF) 484 .WithTag("MACA3HR.ADDRHI (ADDRHI)", 0, 16) 485 .WithReservedBits(16, 8) 486 .WithTag("MACA3HR.MBC (MBC)", 24, 6) 487 .WithTaggedFlag("MACA3HR.SA (SA)", 30) 488 .WithTaggedFlag("MACA3HR.AE (AE)", 31) 489 }, 490 {(long)RegistersMacAndMmc.MACAddress3Low, new DoubleWordRegister(this, 0xFFFFFFFF) 491 .WithTag("MACA3LR.ADDRLO (ADDRLO)", 0, 32) 492 }, 493 {(long)RegistersMacAndMmc.MMCControl, new DoubleWordRegister(this) 494 .WithTaggedFlag("MMC_CONTROL.CNTRST (CNTRST)", 0) 495 .WithTaggedFlag("MMC_CONTROL.CNTSTOPRO (CNTSTOPRO)", 1) 496 .WithTaggedFlag("MMC_CONTROL.RSTONRD (RSTONRD)", 2) 497 .WithTaggedFlag("MMC_CONTROL.CNTFREEZ (CNTFREEZ)", 3) 498 .WithTaggedFlag("MMC_CONTROL.CNTPRST (CNTPRST)", 4) 499 .WithTaggedFlag("MMC_CONTROL.CNTPRSTLVL (CNTPRSTLVL)", 5) 500 .WithReservedBits(6, 2) 501 .WithTaggedFlag("MMC_CONTROL.UCDBC (UCDBC)", 8) 502 .WithReservedBits(9, 23) 503 }, 504 {(long)RegistersMacAndMmc.MMCRxInterrupt, new DoubleWordRegister(this) 505 .WithFlag(0, out rxPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_RX_INTERRUPT.RXGBPKTIS (MMC Receive Good Bad Packet Counter Interrupt Status)") 506 .WithFlag(1, out rxByteCounterInterrupt, FieldMode.ReadToClear, name: "MMC_RX_INTERRUPT.RXGBOCTIS (MMC Receive Good Bad Octet Counter Interrupt Status)") 507 .WithFlag(2, out rxGoodByteCounterInterrupt, FieldMode.ReadToClear, name: "MMC_RX_INTERRUPT.RXGOCTIS (MMC Receive Good Octet Counter Interrupt Status)") 508 .WithFlag(3, out rxBroadcastPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_RX_INTERRUPT.RXBCGPIS (MMC Receive Broadcast Good Packet Counter Interrupt Status)") 509 .WithFlag(4, out rxMulticastPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_RX_INTERRUPT.RXMCGPIS (MMC Receive Multicast Good Packet Counter Interrupt Status)") 510 .WithFlag(5, out rxCrcErrorPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_RX_INTERRUPT.RXCRCERPIS (MMC Receive CRC Error Packet Counter Interrupt Status)") 511 .WithTaggedFlag("MMC_RX_INTERRUPT.RXALGNERPIS (MMC Receive Alignment Error Packet Counter Interrupt Status)", 6) 512 .WithTaggedFlag("MMC_RX_INTERRUPT.RXRUNTPIS (MMC Receive Runt Packet Counter Interrupt Status)", 7) 513 .WithTaggedFlag("MMC_RX_INTERRUPT.RXJABERPIS (MMC Receive Jabber Error Packet Counter Interrupt Status)", 8) 514 .WithTaggedFlag("MMC_RX_INTERRUPT.RXUSIZEGPIS (MMC Receive Undersize Good Packet Counter Interrupt Status)", 9) 515 .WithTaggedFlag("MMC_RX_INTERRUPT.RXOSIZEGPIS (MMC Receive Oversize Good Packet Counter Interrupt Status)", 10) 516 .WithTaggedFlag("MMC_RX_INTERRUPT.RX64OCTGBPIS (MMC Receive 64 Octet Good Bad Packet Counter Interrupt Status)", 11) 517 .WithTaggedFlag("MMC_RX_INTERRUPT.RX65T127OCTGBPIS (MMC Receive Broadcast Good Bad Packet Counter Interrupt Status)", 12) 518 .WithTaggedFlag("MMC_RX_INTERRUPT.RX128T255OCTGBPIS (MMC Receive 128 to 255 Octet Good Bad Packet Counter Interrupt Status)", 13) 519 .WithTaggedFlag("MMC_RX_INTERRUPT.RX256T511OCTGBPIS (MMC Receive 256 to 511 Octet Good Bad Packet Counter Interrupt Status)", 14) 520 .WithTaggedFlag("MMC_RX_INTERRUPT.RX512T1023OCTGBPIS (MMC Receive 512 to 1023 Octet Good Bad Packet Counter Interrupt Status)", 15) 521 .WithTaggedFlag("MMC_RX_INTERRUPT.RX1024TMAXOCTGBPIS (MMC Receive 1024 to Maximum Octet Good Bad Packet Counter Interrupt Status)", 16) 522 .WithFlag(17, out rxUnicastPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_RX_INTERRUPT.RXUCGPIS (MMC Receive Unicast Good Packet Counter Interrupt Status)") 523 .WithTaggedFlag("MMC_RX_INTERRUPT.RXLENERPIS (MMC Receive Length Error Packet Counter Interrupt Status)", 18) 524 .WithTaggedFlag("MMC_RX_INTERRUPT.RXORANGEPIS (MMC Receive Out Of Range Error Packet Counter Interrupt Status)", 19) 525 .WithTaggedFlag("MMC_RX_INTERRUPT.RXPAUSPIS (MMC Receive Pause Packet Counter Interrupt Status)", 20) 526 .WithFlag(21, out rxFifoPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_RX_INTERRUPT.RXFOVPIS (MMC Receive FIFO Overflow Packet Counter Interrupt Status)") 527 .WithTaggedFlag("MMC_RX_INTERRUPT.RXVLANGBPIS (MMC Receive VLAN Good Bad Packet Counter Interrupt Status)", 22) 528 .WithTaggedFlag("MMC_RX_INTERRUPT.RXWDOGPIS (MMC Receive Watchdog Error Packet Counter Interrupt Status)", 23) 529 .WithTaggedFlag("MMC_RX_INTERRUPT.RXRCVERRPIS (MMC Receive Error Packet Counter Interrupt Status)", 24) 530 .WithTaggedFlag("MMC_RX_INTERRUPT.RXCTRLPIS (MMC Receive Control Packet Counter Interrupt Status)", 25) 531 .WithTaggedFlag("MMC_RX_INTERRUPT.RXLPIUSCIS (MMC Receive LPI Microsecond Counter Interrupt Status)", 26) 532 .WithTaggedFlag("MMC_RX_INTERRUPT.RXLPITRCIS (MMC Receive LPI Transition Counter Interrupt Status)", 27) 533 .WithReservedBits(28, 4) 534 .WithChangeCallback((_, __) => UpdateInterrupts()) 535 }, 536 {(long)RegistersMacAndMmc.MMCTxInterrupt, new DoubleWordRegister(this) 537 .WithFlag(0, out txByteCounterInterrupt, FieldMode.ReadToClear, name: "MMC_TX_INTERRUPT.TXGBOCTIS (MMC Transmit Good Bad Octet Counter Interrupt Status)") 538 .WithFlag(1, out txPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_TX_INTERRUPT.TXGBPKTIS (MMC Transmit Good Bad Packet Counter Interrupt Status)") 539 .WithTaggedFlag("MMC_TX_INTERRUPT.TXBCGPIS (MMC Transmit Broadcast Good Packet Counter Interrupt Status)", 2) 540 .WithTaggedFlag("MMC_TX_INTERRUPT.TXMCGPIS (MMC Transmit Multicast Good Packet Counter Interrupt Status)", 3) 541 .WithTaggedFlag("MMC_TX_INTERRUPT.TX64OCTGBPIS (MMC Transmit 64 Octet Good Bad Packet Counter Interrupt Status)", 4) 542 .WithTaggedFlag("MMC_TX_INTERRUPT.TX65T127OCTGBPIS (MMC Transmit 65 to 127 Octet Good Bad Packet Counter Interrupt Status)", 5) 543 .WithTaggedFlag("MMC_TX_INTERRUPT.TX128T255OCTGBPIS (MMC Transmit 128 to 255 Octet Good Bad Packet Counter Interrupt Status)", 6) 544 .WithTaggedFlag("MMC_TX_INTERRUPT.TX256T511OCTGBPIS (MMC Transmit 256 to 511 Octet Good Bad Packet Counter Interrupt Status)", 7) 545 .WithTaggedFlag("MMC_TX_INTERRUPT.TX512T1023OCTGBPIS (MMC Transmit 512 to 1023 Octet Good Bad Packet Counter Interrupt Status)", 8) 546 .WithTaggedFlag("MMC_TX_INTERRUPT.TX1024TMAXOCTGBPIS (MMC Transmit 1024 to Maximum Octet Good Bad Packet Counter Interrupt Status)", 9) 547 .WithFlag(10, out txUnicastPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_TX_INTERRUPT.TXUCGBPIS (MMC Transmit Unicast Good Bad Packet Counter Interrupt Status)") 548 .WithFlag(11, out txMulticastPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_TX_INTERRUPT.TXMCGBPIS (MMC Transmit Multicast Good Bad Packet Counter Interrupt Status)") 549 .WithFlag(12, out txBroadcastPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_TX_INTERRUPT.TXBCGBPIS (MMC Transmit Broadcast Good Bad Packet Counter Interrupt Status)") 550 .WithTaggedFlag("MMC_TX_INTERRUPT.TXUFLOWERPIS (MMC Transmit Underflow Error Packet Counter Interrupt Status)", 13) 551 .WithTaggedFlag("MMC_TX_INTERRUPT.TXSCOLGPIS (MMC Transmit Single Collision Good Packet Counter Interrupt Status)", 14) 552 .WithTaggedFlag("MMC_TX_INTERRUPT.TXMCOLGPIS (MMC Transmit Multiple Collision Good Packet Counter Interrupt Status)", 15) 553 .WithTaggedFlag("MMC_TX_INTERRUPT.TXDEFPIS (MMC Transmit Deferred Packet Counter Interrupt Status)", 16) 554 .WithTaggedFlag("MMC_TX_INTERRUPT.TXLATCOLPIS (MMC Transmit Late Collision Packet Counter Interrupt Status)", 17) 555 .WithTaggedFlag("MMC_TX_INTERRUPT.TXEXCOLPIS (MMC Transmit Excessive Collision Packet Counter Interrupt Status)", 18) 556 .WithTaggedFlag("MMC_TX_INTERRUPT.TXCARERPIS (MMC Transmit Carrier Error Packet Counter Interrupt Status)", 19) 557 .WithFlag(20, out txGoodByteCounterInterrupt, FieldMode.ReadToClear, name: "MMC_TX_INTERRUPT.TXGOCTIS (MMC Transmit Good Octet Counter Interrupt Status)") 558 .WithFlag(21, out txGoodPacketCounterInterrupt, FieldMode.ReadToClear, name: "MMC_TX_INTERRUPT.TXGPKTIS (MMC Transmit Good Packet Counter Interrupt Status)") 559 .WithTaggedFlag("MMC_TX_INTERRUPT.TXEXDEFPIS (MMC Transmit Excessive Deferral Packet Counter Interrupt Status)", 22) 560 .WithTaggedFlag("MMC_TX_INTERRUPT.TXPAUSPIS (MMC Transmit Pause Packet Counter Interrupt Status)", 23) 561 .WithTaggedFlag("MMC_TX_INTERRUPT.TXVLANGPIS (MMC Transmit VLAN Good Packet Counter Interrupt Status)", 24) 562 .WithTaggedFlag("MMC_TX_INTERRUPT.TXOSIZEGPIS (MMC Transmit Oversize Good Packet Counter Interrupt Status)", 25) 563 .WithTaggedFlag("MMC_TX_INTERRUPT.TXLPIUSCIS (MMC Transmit LPI Microsecond Counter Interrupt Status)", 26) 564 .WithTaggedFlag("MMC_TX_INTERRUPT.TXLPITRCIS (MMC Transmit LPI Transition Counter Interrupt Status)", 27) 565 .WithReservedBits(28, 4) 566 .WithChangeCallback((_, __) => UpdateInterrupts()) 567 }, 568 {(long)RegistersMacAndMmc.MMCRxInterruptMask, new DoubleWordRegister(this) 569 .WithFlag(0, out rxPacketCounterInterruptEnable, name: "MMC_RX_INTERRUPT_MASK.RXGBPKTIM (MMC Receive Good Bad Packet Counter Interrupt Mask)") 570 .WithFlag(1, out rxByteCounterInterruptEnable, name: "MMC_RX_INTERRUPT_MASK.RXGBOCTIM (MMC Receive Good Bad Octet Counter Interrupt Mask)") 571 .WithFlag(2, out rxGoodByteCounterInterruptEnable, name: "MMC_RX_INTERRUPT_MASK.RXGOCTIM (MMC Receive Good Octet Counter Interrupt Mask)") 572 .WithFlag(3, out rxBroadcastPacketCounterInterruptEnable, name: "MMC_RX_INTERRUPT_MASK.RXBCGPIM (MMC Receive Broadcast Good Packet Counter Interrupt Mask)") 573 .WithFlag(4, out rxMulticastPacketCounterInterruptEnable, name: "MMC_RX_INTERRUPT_MASK.RXMCGPIM (MMC Receive Multicast Good Packet Counter Interrupt Mask)") 574 .WithFlag(5, out rxCrcErrorPacketCounterInterruptEnable, name: "MMC_RX_INTERRUPT_MASK.RXCRCERPIM (MMC Receive CRC Error Packet Counter Interrupt Mask)") 575 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXALGNERPIM (MMC Receive Alignment Error Packet Counter Interrupt Mask)", 6) 576 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXRUNTPIM (MMC Receive Runt Packet Counter Interrupt Mask)", 7) 577 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXJABERPIM (MMC Receive Jabber Error Packet Counter Interrupt Mask)", 8) 578 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXUSIZEGPIM (MMC Receive Undersize Good Packet Counter Interrupt Mask)", 9) 579 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXOSIZEGPIM (MMC Receive Oversize Good Packet Counter Interrupt Mask)", 10) 580 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RX64OCTGBPIM (MMC Receive 64 Octet Good Bad Packet Counter Interrupt Mask)", 11) 581 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RX65T127OCTGBPIM (MMC Receive Broadcast Good Bad Packet Counter Interrupt Mask)", 12) 582 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RX128T255OCTGBPIM (MMC Receive 128 to 255 Octet Good Bad Packet Counter Interrupt Mask)", 13) 583 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RX256T511OCTGBPIM (MMC Receive 256 to 511 Octet Good Bad Packet Counter Interrupt Mask)", 14) 584 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RX512T1023OCTGBPIM (MMC Receive 512 to 1023 Octet Good Bad Packet Counter Interrupt Mask)", 15) 585 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RX1024TMAXOCTGBPIM (MMC Receive 1024 to Maximum Octet Good Bad Packet Counter Interrupt Mask)", 16) 586 .WithFlag(17, out rxUnicastPacketCounterInterruptEnable, name: "MMC_RX_INTERRUPT_MASK.RXUCGPIM (MMC Receive Unicast Good Packet Counter Interrupt Mask)") 587 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXLENERPIM (MMC Receive Length Error Packet Counter Interrupt Mask)", 18) 588 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXORANGEPIM (MMC Receive Out Of Range Error Packet Counter Interrupt Mask)", 19) 589 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXPAUSPIM (MMC Receive Pause Packet Counter Interrupt Mask)", 20) 590 .WithFlag(21, out rxFifoPacketCounterInterruptEnable, name: "MMC_RX_INTERRUPT_MASK.RXFOVPIM (MMC Receive FIFO Overflow Packet Counter Interrupt Mask)") 591 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXVLANGBPIM (MMC Receive VLAN Good Bad Packet Counter Interrupt Mask)", 22) 592 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXWDOGPIM (MMC Receive Watchdog Error Packet Counter Interrupt Mask)", 23) 593 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXRCVERRPIM (MMC Receive Error Packet Counter Interrupt Mask)", 24) 594 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXCTRLPIM (MMC Receive Control Packet Counter Interrupt Mask)", 25) 595 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXLPIUSCIM (MMC Receive LPI Microsecond Counter Interrupt Mask)", 26) 596 .WithTaggedFlag("MMC_RX_INTERRUPT_MASK.RXLPITRCIM (MMC Receive LPI Transition Counter Interrupt Mask)", 27) 597 .WithReservedBits(28, 4) 598 .WithChangeCallback((_, __) => UpdateInterrupts()) 599 }, 600 {(long)RegistersMacAndMmc.MMCTxInterruptMask, new DoubleWordRegister(this) 601 .WithFlag(0, out txByteCounterInterruptEnable, name: "MMC_TX_INTERRUPT_MASK.TXGBOCTIM (MMC Transmit Good Bad Octet Counter Interrupt Mask)") 602 .WithFlag(1, out txPacketCounterInterruptEnable, name: "MMC_TX_INTERRUPT_MASK.TXGBPKTIM (MMC Transmit Good Bad Packet Counter Interrupt Mask)") 603 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXBCGPIM (MMC Transmit Broadcast Good Packet Counter Interrupt Mask)", 2) 604 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXMCGPIM (MMC Transmit Multicast Good Packet Counter Interrupt Mask)", 3) 605 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TX64OCTGBPIM (MMC Transmit 64 Octet Good Bad Packet Counter Interrupt Mask)", 4) 606 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TX65T127OCTGBPIM (MMC Transmit 65 to 127 Octet Good Bad Packet Counter Interrupt Mask)", 5) 607 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TX128T255OCTGBPIM (MMC Transmit 128 to 255 Octet Good Bad Packet Counter Interrupt Mask)", 6) 608 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TX256T511OCTGBPIM (MMC Transmit 256 to 511 Octet Good Bad Packet Counter Interrupt Mask)", 7) 609 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TX512T1023OCTGBPIM (MMC Transmit 512 to 1023 Octet Good Bad Packet Counter Interrupt Mask)", 8) 610 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TX1024TMAXOCTGBPIM (MMC Transmit 1024 to Maximum Octet Good Bad Packet Counter Interrupt Mask)", 9) 611 .WithFlag(10, out txUnicastPacketCounterInterruptEnable, name: "MMC_TX_INTERRUPT_MASK.TXUCGBPIM (MMC Transmit Unicast Good Bad Packet Counter Interrupt Mask)") 612 .WithFlag(11, out txMulticastPacketCounterInterruptEnable, name: "MMC_TX_INTERRUPT_MASK.TXMCGBPIM (MMC Transmit Multicast Good Bad Packet Counter Interrupt Mask)") 613 .WithFlag(12, out txBroadcastPacketCounterInterruptEnable, name: "MMC_TX_INTERRUPT_MASK.TXBCGBPIM (MMC Transmit Broadcast Good Bad Packet Counter Interrupt Mask)") 614 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXUFLOWERPIM (MMC Transmit Underflow Error Packet Counter Interrupt Mask)", 13) 615 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXSCOLGPIM (MMC Transmit Single Collision Good Packet Counter Interrupt Mask)", 14) 616 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXMCOLGPIM (MMC Transmit Multiple Collision Good Packet Counter Interrupt Mask)", 15) 617 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXDEFPIM (MMC Transmit Deferred Packet Counter Interrupt Mask)", 16) 618 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXLATCOLPIM (MMC Transmit Late Collision Packet Counter Interrupt Mask)", 17) 619 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXEXCOLPIM (MMC Transmit Excessive Collision Packet Counter Interrupt Mask)", 18) 620 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXCARERPIM (MMC Transmit Carrier Error Packet Counter Interrupt Mask)", 19) 621 .WithFlag(20, out txGoodByteCounterInterruptEnable, name: "MMC_TX_INTERRUPT_MASK.TXGOCTIM (MMC Transmit Good Octet Counter Interrupt Mask)") 622 .WithFlag(21, out txGoodPacketCounterInterruptEnable, name: "MMC_TX_INTERRUPT_MASK.TXGPKTIM (MMC Transmit Good Packet Counter Interrupt Mask)") 623 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXEXDEFPIM (MMC Transmit Excessive Deferral Packet Counter Interrupt Mask)", 22) 624 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXPAUSPIM (MMC Transmit Pause Packet Counter Interrupt Mask)", 23) 625 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXVLANGPIM (MMC Transmit VLAN Good Packet Counter Interrupt Mask)", 24) 626 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXOSIZEGPIM (MMC Transmit Oversize Good Packet Counter Interrupt Mask)", 25) 627 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXLPIUSCIM (MMC Transmit LPI Microsecond Counter Interrupt Mask)", 26) 628 .WithTaggedFlag("MMC_TX_INTERRUPT_MASK.TXLPITRCIM (MMC Transmit LPI Transition Counter Interrupt Mask)", 27) 629 .WithReservedBits(28, 4) 630 .WithChangeCallback((_, __) => UpdateInterrupts()) 631 }, 632 {(long)RegistersMacAndMmc.TxOctetCountGoodBad, new DoubleWordRegister(this) 633 .WithValueField(0, 32, out txByteCounter, FieldMode.Read, name: "TX_OCTET_COUNT_GOOD_BAD.TXOCTGB (TXOCTGB)") 634 }, 635 {(long)RegistersMacAndMmc.TxPacketCountGoodBad, new DoubleWordRegister(this) 636 .WithValueField(0, 32, out txPacketCounter, FieldMode.Read, name: "TX_PACKET_COUNT_GOOD_BAD.TXPKTGB (TXPKTGB)") 637 }, 638 {(long)RegistersMacAndMmc.TxUnicastPacketsGoodBad, new DoubleWordRegister(this) 639 .WithValueField(0, 32, out txUnicastPacketCounter, FieldMode.Read, name: "TX_UNICAST_PACKETS_GOOD_BAD.TXUCASTGB (TXUCASTGB)") 640 }, 641 {(long)RegistersMacAndMmc.TxMulticastPacketsGoodBad, new DoubleWordRegister(this) 642 .WithValueField(0, 32, out txMulticastPacketCounter, FieldMode.Read, name: "TX_MULTICAST_PACKETS_GOOD_BAD.TXMCASTGB (TXMCASTGB)") 643 }, 644 {(long)RegistersMacAndMmc.TxBroadcastPacketsGoodBad, new DoubleWordRegister(this) 645 .WithValueField(0, 32, out txBroadcastPacketCounter, FieldMode.Read, name: "TX_BROADCAST_PACKETS_GOOD_BAD.TXBCASTGB (TXBCASTGB)") 646 }, 647 {(long)RegistersMacAndMmc.TxSingleCollisionGoodPackets, new DoubleWordRegister(this) 648 // collisions are impossible 649 .WithValueField(0, 32, FieldMode.Read, name: "TX_SINGLE_COLLISION_GOOD_PACKETS.TXSNGLCOLG (TXSNGLCOLG)") 650 }, 651 {(long)RegistersMacAndMmc.TxMultipleCollisionGoodPackets, new DoubleWordRegister(this) 652 // collisions are impossible 653 .WithValueField(0, 32, FieldMode.Read, name: "TX_MULTIPLE_COLLISION_GOOD_PACKETS.TXMULTCOLG (TXMULTCOLG)") 654 }, 655 {(long)RegistersMacAndMmc.TxOctetCountGood, new DoubleWordRegister(this) 656 .WithValueField(0, 32, out txGoodByteCounter, FieldMode.Read, name: "TX_OCTET_COUNT_GOOD.TXOCTG (TXOCTG)") 657 }, 658 {(long)RegistersMacAndMmc.TxPacketCountGood, new DoubleWordRegister(this) 659 .WithValueField(0, 32, out txGoodPacketCounter, FieldMode.Read, name: "TX_PACKET_COUNT_GOOD.TXPKTG (TXPKTG)") 660 }, 661 {(long)RegistersMacAndMmc.RxPacketsCountGoodBad, new DoubleWordRegister(this) 662 .WithValueField(0, 32, out rxPacketCounter, FieldMode.Read, name: "RX_PACKETS_COUNT_GOOD_BAD.RXPKTGB (RXPKTGB)") 663 }, 664 {(long)RegistersMacAndMmc.RxOctetCountGoodBad, new DoubleWordRegister(this) 665 .WithValueField(0, 32, out rxByteCounter, FieldMode.Read, name: "RX_OCTET_COUNT_GOOD_BAD.RXOCTGB (RXOCTGB)") 666 }, 667 {(long)RegistersMacAndMmc.RxOctetCountGood, new DoubleWordRegister(this) 668 .WithValueField(0, 32, out rxGoodByteCounter, FieldMode.Read, name: "RX_OCTET_COUNT_GOOD.RXOCTG (RXOCTG)") 669 }, 670 {(long)RegistersMacAndMmc.RxBroadcastPacketsGood, new DoubleWordRegister(this) 671 .WithValueField(0, 32, out rxBroadcastPacketCounter, FieldMode.Read, name: "RX_BROADCAST_PACKETS_GOOD.RXBCASTG (RXBCASTG)") 672 }, 673 {(long)RegistersMacAndMmc.RxMulticastPacketsGood, new DoubleWordRegister(this) 674 .WithValueField(0, 32, out rxMulticastPacketCounter, FieldMode.Read, name: "RX_MULTICAST_PACKETS_GOOD.RXMCASTG (RXMCASTG)") 675 }, 676 {(long)RegistersMacAndMmc.RxCRCErrorPackets, new DoubleWordRegister(this) 677 .WithValueField(0, 32, out rxCrcErrorPacketCounter, FieldMode.Read, name: "RX_CRC_ERROR_PACKETS.RXCRCERR (RXCRCERR)") 678 }, 679 {(long)RegistersMacAndMmc.RxAlignmentErrorPackets, new DoubleWordRegister(this) 680 .WithTag("RX_ALIGNMENT_ERROR_PACKETS.RXALGNERR (RXALGNERR)", 0, 32) 681 }, 682 {(long)RegistersMacAndMmc.RxUnicastPacketsGood, new DoubleWordRegister(this) 683 .WithValueField(0, 32, out rxUnicastPacketCounter, FieldMode.Read, name: "RX_UNICAST_PACKETS_GOOD.RXUCASTG (RXUCASTG)") 684 }, 685 {(long)RegistersMacAndMmc.RxFifoOverflowPackets, new DoubleWordRegister(this) 686 .WithValueField(0, 32, out rxFifoPacketCounter, name: "Rx_FIFO_Overflow_Packets.RXFIFOOVFL (RXFIFOOVFL)") 687 }, 688 {(long)RegistersMacAndMmc.TxLPIMicrodecondTimer, new DoubleWordRegister(this) 689 .WithTag("TX_LPI_USEC_CNTR.TXLPIUSC (TXLPIUSC)", 0, 32) 690 }, 691 {(long)RegistersMacAndMmc.TxLPITransitionCounter, new DoubleWordRegister(this) 692 .WithTag("TX_LPI_TRAN_CNTR.TXLPITRC (TXLPITRC)", 0, 32) 693 }, 694 {(long)RegistersMacAndMmc.RxLPIMicrosecondCounter, new DoubleWordRegister(this) 695 .WithTag("RX_LPI_USEC_CNTR.RXLPIUSC (RXLPIUSC)", 0, 32) 696 }, 697 {(long)RegistersMacAndMmc.RxLPITransitionCounter, new DoubleWordRegister(this) 698 .WithTag("RX_LPI_TRAN_CNTR.RXLPITRC (RXLPITRC)", 0, 32) 699 }, 700 {(long)RegistersMacAndMmc.MmcIpcRxInterruptMask, new DoubleWordRegister(this) 701 .WithFlag(0, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IpV4Good], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4GPIM (RXIPV4GPIM)") 702 .WithFlag(1, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IpV4HeaderError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4HERPIM (RXIPV4HERPIM)") 703 .WithFlag(2, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IpV4NoPayload], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4NOPAYPIM (RXIPV4NOPAYPIM)") 704 .WithFlag(3, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IpV4Fragmented], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4FRAGPIM (RXIPV4FRAGPIM)") 705 .WithFlag(4, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IpV4UDPChecksumDisabled], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4UDSBLPIM (RXIPV4UDSBLPIM)") 706 .WithFlag(5, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IpV6Good], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV6GPIM (RXIPV6GPIM)") 707 .WithFlag(6, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IpV6HeaderError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV6HERPIM (RXIPV6HERPIM)") 708 .WithFlag(7, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IpV6NoPayload], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV6NOPAYPIM (RXIPV6NOPAYPIM)") 709 .WithFlag(8, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.UdpGood], name: "MMC_IPC_RX_INTERRUPT_MASK.RXUDPGPIM (RXUDPGPIM)") 710 .WithFlag(9, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.UdpError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXUDPERPIM (RXUDPERPIM)") 711 .WithFlag(10, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.TcpGood], name: "MMC_IPC_RX_INTERRUPT_MASK.RXTCPGPIM (RXTCPGPIM)") 712 .WithFlag(11, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.TcpError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXTCPERPIM (RXTCPERPIM)") 713 .WithFlag(12, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IcmpGood], name: "MMC_IPC_RX_INTERRUPT_MASK.RXICMPGPIM (RXICMPGPIM)") 714 .WithFlag(13, out rxIpcPacketCounterInterruptEnable[(int)IpcCounter.IcmpError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXICMPERPIM (RXICMPERPIM)") 715 .WithReservedBits(14, 2) 716 .WithFlag(16, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IpV4Good], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4GOIM (RXIPV4GOIM)") 717 .WithFlag(17, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IpV4HeaderError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4HEROIM (RXIPV4HEROIM)") 718 .WithFlag(18, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IpV4NoPayload], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4NOPAYOIM (RXIPV4NOPAYOIM)") 719 .WithFlag(19, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IpV4Fragmented], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4FRAGOIM (RXIPV4FRAGOIM)") 720 .WithFlag(20, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IpV4UDPChecksumDisabled], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV4UDSBLOIM (RXIPV4UDSBLOIM)") 721 .WithFlag(21, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IpV6Good], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV6GOIM (RXIPV6GOIM)") 722 .WithFlag(22, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IpV6HeaderError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV6HEROIM (RXIPV6HEROIM)") 723 .WithFlag(23, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IpV6NoPayload], name: "MMC_IPC_RX_INTERRUPT_MASK.RXIPV6NOPAYOIM (RXIPV6NOPAYOIM)") 724 .WithFlag(24, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.UdpGood], name: "MMC_IPC_RX_INTERRUPT_MASK.RXUDPGOIM (RXUDPGOIM)") 725 .WithFlag(25, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.UdpError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXUDPEROIM (RXUDPEROIM)") 726 .WithFlag(26, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.TcpGood], name: "MMC_IPC_RX_INTERRUPT_MASK.RXTCPGOIM (RXTCPGOIM)") 727 .WithFlag(27, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.TcpError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXTCPEROIM (RXTCPEROIM)") 728 .WithFlag(28, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IcmpGood], name: "MMC_IPC_RX_INTERRUPT_MASK.RXICMPGOIM (RXICMPGOIM)") 729 .WithFlag(29, out rxIpcByteCounterInterruptEnable[(int)IpcCounter.IcmpError], name: "MMC_IPC_RX_INTERRUPT_MASK.RXICMPEROIM (RXICMPEROIM)") 730 .WithReservedBits(30, 2) 731 }, 732 {(long)RegistersMacAndMmc.MmcIpcRxInterrupt, new DoubleWordRegister(this) 733 .WithFlag(0, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IpV4Good], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4GPIS (RXIPV4GPIS)") 734 .WithFlag(1, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IpV4HeaderError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4HERPIS (RXIPV4HERPIS)") 735 .WithFlag(2, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IpV4NoPayload], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4NOPAYPIS (RXIPV4NOPAYPIS)") 736 .WithFlag(3, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IpV4Fragmented], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4FRAGPIS (RXIPV4FRAGPIS)") 737 .WithFlag(4, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IpV4UDPChecksumDisabled], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4UDSBLPIS (RXIPV4UDSBLPIS)") 738 .WithFlag(5, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IpV6Good], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV6GPIS (RXIPV6GPIS)") 739 .WithFlag(6, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IpV6HeaderError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV6HERPIS (RXIPV6HERPIS)") 740 .WithFlag(7, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IpV6NoPayload], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV6NOPAYPIS (RXIPV6NOPAYPIS)") 741 .WithFlag(8, out rxIpcPacketCounterInterrupt[(int)IpcCounter.UdpGood], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXUDPGPIS (RXUDPGPIS)") 742 .WithFlag(9, out rxIpcPacketCounterInterrupt[(int)IpcCounter.UdpError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXUDPERPIS (RXUDPERPIS)") 743 .WithFlag(10, out rxIpcPacketCounterInterrupt[(int)IpcCounter.TcpGood], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXTCPGPIS (RXTCPGPIS)") 744 .WithFlag(11, out rxIpcPacketCounterInterrupt[(int)IpcCounter.TcpError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXTCPERPIS (RXTCPERPIS)") 745 .WithFlag(12, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IcmpGood], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXICMPGPIS (RXICMPGPIS)") 746 .WithFlag(13, out rxIpcPacketCounterInterrupt[(int)IpcCounter.IcmpError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXICMPERPIS (RXICMPERPIS)") 747 .WithReservedBits(14, 2) 748 .WithFlag(16, out rxIpcByteCounterInterrupt[(int)IpcCounter.IpV4Good], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4GOIS (RXIPV4GOIS)") 749 .WithFlag(17, out rxIpcByteCounterInterrupt[(int)IpcCounter.IpV4HeaderError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4HEROIS (RXIPV4HEROIS)") 750 .WithFlag(18, out rxIpcByteCounterInterrupt[(int)IpcCounter.IpV4NoPayload], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4NOPAYOIS (RXIPV4NOPAYOIS)") 751 .WithFlag(19, out rxIpcByteCounterInterrupt[(int)IpcCounter.IpV4Fragmented], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4FRAGOIS (RXIPV4FRAGOIS)") 752 .WithFlag(20, out rxIpcByteCounterInterrupt[(int)IpcCounter.IpV4UDPChecksumDisabled], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV4UDSBLOIS (RXIPV4UDSBLOIS)") 753 .WithFlag(21, out rxIpcByteCounterInterrupt[(int)IpcCounter.IpV6Good], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV6GOIS (RXIPV6GOIS)") 754 .WithFlag(22, out rxIpcByteCounterInterrupt[(int)IpcCounter.IpV6HeaderError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV6HEROIS (RXIPV6HEROIS)") 755 .WithFlag(23, out rxIpcByteCounterInterrupt[(int)IpcCounter.IpV6NoPayload], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXIPV6NOPAYOIS (RXIPV6NOPAYOIS)") 756 .WithFlag(24, out rxIpcByteCounterInterrupt[(int)IpcCounter.UdpGood], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXUDPGOIS (RXUDPGOIS)") 757 .WithFlag(25, out rxIpcByteCounterInterrupt[(int)IpcCounter.UdpError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXUDPEROIS (RXUDPEROIS)") 758 .WithFlag(26, out rxIpcByteCounterInterrupt[(int)IpcCounter.TcpGood], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXTCPGOIS (RXTCPGOIS)") 759 .WithFlag(27, out rxIpcByteCounterInterrupt[(int)IpcCounter.TcpError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXTCPEROIS (RXTCPEROIS)") 760 .WithFlag(28, out rxIpcByteCounterInterrupt[(int)IpcCounter.IcmpGood], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXICMPGOIS (RXICMPGOIS)") 761 .WithFlag(29, out rxIpcByteCounterInterrupt[(int)IpcCounter.IcmpError], FieldMode.ReadToClear, name: "MMC_IPC_RX_INTERRUPT.RXICMPEROIS (RXICMPEROIS)") 762 .WithReservedBits(30, 2) 763 }, 764 {(long)RegistersMacAndMmc.RxIpv4GoodPackets, new DoubleWordRegister(this) 765 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IpV4Good], FieldMode.Read, name: "RXIPV4_GOOD_PACKETS.RXIPV4GDPKT (RXIPV4GDPKT)") 766 }, 767 {(long)RegistersMacAndMmc.RxIpv4HeaderErrorPackets, new DoubleWordRegister(this) 768 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IpV4HeaderError], FieldMode.Read, name: "RXIPV4_HEADER_ERROR_PACKETS.RXIPV4HDRERRPKT (RXIPV4HDRERRPKT)") 769 }, 770 {(long)RegistersMacAndMmc.RxIpv4NoPayloadPackets, new DoubleWordRegister(this) 771 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IpV4NoPayload], FieldMode.Read, name: "RXIPV4_NO_PAYLOAD_PACKETS.RXIPV4NOPAYPKT (RXIPV4NOPAYPKT)") 772 }, 773 {(long)RegistersMacAndMmc.RxIpv4FragmentedPackets, new DoubleWordRegister(this) 774 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IpV4Fragmented], FieldMode.Read, name: "RXIPV4_FRAGMENTED_PACKETS.RXIPV4FRAGPKT (RXIPV4FRAGPKT)") 775 }, 776 {(long)RegistersMacAndMmc.RxIpv4UdpChecksumDisabledPackets, new DoubleWordRegister(this) 777 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IpV4UDPChecksumDisabled], FieldMode.Read, name: "RXIPV4_UDP_CHECKSUM_DISABLED_PACKETS.RXIPV4UDSBLPKT (RXIPV4UDSBLPKT)") 778 }, 779 {(long)RegistersMacAndMmc.RxIpv6GoodPackets, new DoubleWordRegister(this) 780 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IpV6Good], FieldMode.Read, name: "RXIPV6_GOOD_PACKETS.RXIPV6GDPKT (RXIPV6GDPKT)") 781 }, 782 {(long)RegistersMacAndMmc.RxIpv6HeaderErrorPackets, new DoubleWordRegister(this) 783 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IpV6HeaderError], FieldMode.Read, name: "RXIPV6_HEADER_ERROR_PACKETS.RXIPV6HDRERRPKT (RXIPV6HDRERRPKT)") 784 }, 785 {(long)RegistersMacAndMmc.RxIpv6NoPayloadPackets, new DoubleWordRegister(this) 786 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IpV6NoPayload], FieldMode.Read, name: "RXIPV6_NO_PAYLOAD_PACKETS.RXIPV6NOPAYPKT (RXIPV6NOPAYPKT)") 787 }, 788 {(long)RegistersMacAndMmc.RxUdpGoodPackets, new DoubleWordRegister(this) 789 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.UdpGood], FieldMode.Read, name: "RXUDP_GOOD_PACKETS.RXUDPGDPKT (RXUDPGDPKT)") 790 }, 791 {(long)RegistersMacAndMmc.RxUdpErrorPackets, new DoubleWordRegister(this) 792 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.UdpError], FieldMode.Read, name: "RXUDP_ERROR_PACKETS.RXUDPERRPKT (RXUDPERRPKT)") 793 }, 794 {(long)RegistersMacAndMmc.RxTcpGoodPackets, new DoubleWordRegister(this) 795 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.TcpGood], FieldMode.Read, name: "RXTCP_GOOD_PACKETS.RXTCPGDPKT (RXTCPGDPKT)") 796 }, 797 {(long)RegistersMacAndMmc.RxTcpErrorPackets, new DoubleWordRegister(this) 798 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.TcpError], FieldMode.Read, name: "RXTCP_ERROR_PACKETS.RXTCPERRPKT (RXTCPERRPKT)") 799 }, 800 {(long)RegistersMacAndMmc.RxIcmpGoodPackets, new DoubleWordRegister(this) 801 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IcmpGood], FieldMode.Read, name: "RXICMP_GOOD_PACKETS.RXICMPGDPKT (RXICMPGDPKT)") 802 }, 803 {(long)RegistersMacAndMmc.RxIcmpErrorPackets, new DoubleWordRegister(this) 804 .WithValueField(0, 32, out rxIpcPacketCounter[(int)IpcCounter.IcmpError], FieldMode.Read, name: "RXICMP_ERROR_PACKETS.RXICMPERRPKT (RXICMPERRPKT)") 805 }, 806 {(long)RegistersMacAndMmc.RxIpv4GoodOctets, new DoubleWordRegister(this) 807 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IpV4Good], FieldMode.Read, name: "RXIPV4_GOOD_OCTETS.RXIPV4GDOCT (RXIPV4GDOCT)") 808 }, 809 {(long)RegistersMacAndMmc.RxIpv4HeaderErrorOctets, new DoubleWordRegister(this) 810 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IpV4HeaderError], FieldMode.Read, name: "RXIPV4_HEADER_ERROR_OCTETS.RXIPV4HDRERROCT (RXIPV4HDRERROCT)") 811 }, 812 {(long)RegistersMacAndMmc.RxIpv4NoPayloadOctets, new DoubleWordRegister(this) 813 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IpV4NoPayload], FieldMode.Read, name: "RXIPV4_NO_PAYLOAD_OCTETS.RXIPV4NOPAYOCT (RXIPV4NOPAYOCT)") 814 }, 815 {(long)RegistersMacAndMmc.RxIpv4FragmentedOctets, new DoubleWordRegister(this) 816 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IpV4Fragmented], FieldMode.Read, name: "RXIPV4_FRAGMENTED_OCTETS.RXIPV4FRAGOCT (RXIPV4FRAGOCT)") 817 }, 818 {(long)RegistersMacAndMmc.RxIpv4UdpChecksumDisableOctets, new DoubleWordRegister(this) 819 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IpV4UDPChecksumDisabled], FieldMode.Read, name: "RXIPV4_UDP_CHECKSUM_DISABLE_OCTETS.RXIPV4UDSBLOCT (RXIPV4UDSBLOCT)") 820 }, 821 {(long)RegistersMacAndMmc.RxIpv6GoodOctets, new DoubleWordRegister(this) 822 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IpV6Good], FieldMode.Read, name: "RXIPV6_GOOD_OCTETS.RXIPV6GDOCT (RXIPV6GDOCT)") 823 }, 824 {(long)RegistersMacAndMmc.RxIpv6HeaderErrorOctets, new DoubleWordRegister(this) 825 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IpV6HeaderError], FieldMode.Read, name: "RXIPV6_HEADER_ERROR_OCTETS.RXIPV6HDRERROCT (RXIPV6HDRERROCT)") 826 }, 827 {(long)RegistersMacAndMmc.RxIpv6NoPayloadOctets, new DoubleWordRegister(this) 828 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IpV6NoPayload], FieldMode.Read, name: "RXIPV6_NO_PAYLOAD_OCTETS.RXIPV6NOPAYOCT (RXIPV6NOPAYOCT)") 829 }, 830 {(long)RegistersMacAndMmc.RxUdpGoodOctets, new DoubleWordRegister(this) 831 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.UdpGood], FieldMode.Read, name: "RXUDP_GOOD_OCTETS.RXUDPGDOCT (RXUDPGDOCT)") 832 }, 833 {(long)RegistersMacAndMmc.RxUdpErrorOctets, new DoubleWordRegister(this) 834 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.UdpError], FieldMode.Read, name: "RXUDP_ERROR_OCTETS.RXUDPERROCT (RXUDPERROCT)") 835 }, 836 {(long)RegistersMacAndMmc.RxTcpGoodOctets, new DoubleWordRegister(this) 837 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.TcpGood], FieldMode.Read, name: "RXTCP_GOOD_OCTETS.RXTCPGDOCT (RXTCPGDOCT)") 838 }, 839 {(long)RegistersMacAndMmc.RxTcpErrorOctets, new DoubleWordRegister(this) 840 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.TcpError], FieldMode.Read, name: "RXTCP_ERROR_OCTETS.RXTCPERROCT (RXTCPERROCT)") 841 }, 842 {(long)RegistersMacAndMmc.RxIcmpGoodOctets, new DoubleWordRegister(this) 843 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IcmpGood], FieldMode.Read, name: "RXICMP_GOOD_OCTETS.RXICMPGDOCT (RXICMPGDOCT)") 844 }, 845 {(long)RegistersMacAndMmc.RxIcmpErrorOctets, new DoubleWordRegister(this) 846 .WithValueField(0, 32, out rxIpcByteCounter[(int)IpcCounter.IcmpError], FieldMode.Read, name: "RXICMP_ERROR_OCTETS.RXICMPERROCT (RXICMPERROCT)") 847 }, 848 {(long)RegistersMacAndMmc.Layer3And4Control0, new DoubleWordRegister(this) 849 .WithTaggedFlag("MACL3L4C0R.L3PEN0 (L3PEN0)", 0) 850 .WithReservedBits(1, 1) 851 .WithTaggedFlag("MACL3L4C0R.L3SAM0 (L3SAM0)", 2) 852 .WithTaggedFlag("MACL3L4C0R.L3SAIM0 (L3SAIM0)", 3) 853 .WithTaggedFlag("MACL3L4C0R.L3DAM0 (L3DAM0)", 4) 854 .WithTaggedFlag("MACL3L4C0R.L3DAIM0 (L3DAIM0)", 5) 855 .WithTag("MACL3L4C0R.L3HSBM0 (L3HSBM0)", 6, 5) 856 .WithTag("MACL3L4C0R.L3HDBM0 (L3HDBM0)", 11, 5) 857 .WithTaggedFlag("MACL3L4C0R.L4PEN0 (L4PEN0)", 16) 858 .WithReservedBits(17, 1) 859 .WithTaggedFlag("MACL3L4C0R.L4SPM0 (L4SPM0)", 18) 860 .WithTaggedFlag("MACL3L4C0R.L4SPIM0 (L4SPIM0)", 19) 861 .WithTaggedFlag("MACL3L4C0R.L4DPM0 (L4DPM0)", 20) 862 .WithTaggedFlag("MACL3L4C0R.L4DPIM0 (L4DPIM0)", 21) 863 .WithReservedBits(22, 10) 864 }, 865 {(long)RegistersMacAndMmc.Layer4AddressFilter0, new DoubleWordRegister(this) 866 .WithTag("MACL4A0R.L4SP0 (L4SP0)", 0, 16) 867 .WithTag("MACL4A0R.L4DP0 (L4DP0)", 16, 16) 868 }, 869 {(long)RegistersMacAndMmc.Layer3Address0Filter0, new DoubleWordRegister(this) 870 .WithTag("MACL3A00R.L3A00 (L3A00)", 0, 32) 871 }, 872 {(long)RegistersMacAndMmc.Layer3Address1Filter0, new DoubleWordRegister(this) 873 .WithTag("MACL3A10R.L3A10 (L3A10)", 0, 32) 874 }, 875 {(long)RegistersMacAndMmc.Layer3Address2Filter0, new DoubleWordRegister(this) 876 .WithTag("MACL3A20.L3A20 (L3A20)", 0, 32) 877 }, 878 {(long)RegistersMacAndMmc.Layer3Address3Filter0, new DoubleWordRegister(this) 879 .WithTag("MACL3A30.L3A30 (L3A30)", 0, 32) 880 }, 881 {(long)RegistersMacAndMmc.Layer3And4Control1, new DoubleWordRegister(this) 882 .WithTaggedFlag("MACL3L4C1R.L3PEN1 (L3PEN1)", 0) 883 .WithReservedBits(1, 1) 884 .WithTaggedFlag("MACL3L4C1R.L3SAM1 (L3SAM1)", 2) 885 .WithTaggedFlag("MACL3L4C1R.L3SAIM1 (L3SAIM1)", 3) 886 .WithTaggedFlag("MACL3L4C1R.L3DAM1 (L3DAM1)", 4) 887 .WithTaggedFlag("MACL3L4C1R.L3DAIM1 (L3DAIM1)", 5) 888 .WithTag("MACL3L4C1R.L3HSBM1 (L3HSBM1)", 6, 5) 889 .WithTag("MACL3L4C1R.L3HDBM1 (L3HDBM1)", 11, 5) 890 .WithTaggedFlag("MACL3L4C1R.L4PEN1 (L4PEN1)", 16) 891 .WithReservedBits(17, 1) 892 .WithTaggedFlag("MACL3L4C1R.L4SPM1 (L4SPM1)", 18) 893 .WithTaggedFlag("MACL3L4C1R.L4SPIM1 (L4SPIM1)", 19) 894 .WithTaggedFlag("MACL3L4C1R.L4DPM1 (L4DPM1)", 20) 895 .WithTaggedFlag("MACL3L4C1R.L4DPIM1 (L4DPIM1)", 21) 896 .WithReservedBits(22, 10) 897 }, 898 {(long)RegistersMacAndMmc.Layer4AddressFilter1, new DoubleWordRegister(this) 899 .WithTag("MACL4A1R.L4SP1 (L4SP1)", 0, 16) 900 .WithTag("MACL4A1R.L4DP1 (L4DP1)", 16, 16) 901 }, 902 {(long)RegistersMacAndMmc.Layer3Address0Filter1, new DoubleWordRegister(this) 903 .WithTag("MACL3A01R.L3A01 (L3A01)", 0, 32) 904 }, 905 {(long)RegistersMacAndMmc.Layer3Address1Filter1, new DoubleWordRegister(this) 906 .WithTag("MACL3A11R.L3A11 (L3A11)", 0, 32) 907 }, 908 {(long)RegistersMacAndMmc.Layer3Address2Filter1, new DoubleWordRegister(this) 909 .WithTag("MACL3A21R.L3A21 (L3A21)", 0, 32) 910 }, 911 {(long)RegistersMacAndMmc.Layer3Address3Filter1, new DoubleWordRegister(this) 912 .WithTag("MACL3A31R.L3A31 (L3A31)", 0, 32) 913 }, 914 {(long)RegistersMacAndMmc.TimestampControl, new DoubleWordRegister(this, 0x0200) 915 .WithFlag(0, out enableTimestamp, name: "MACTSCR.TSENA (TSENA)") 916 .WithTaggedFlag("MACTSCR.TSCFUPDT (TSCFUPDT)", 1) 917 .WithTaggedFlag("MACTSCR.TSINIT (TSINIT)", 2) 918 .WithTaggedFlag("MACTSCR.TSUPDT (TSUPDT)", 3) 919 .WithReservedBits(4, 1) 920 .WithTaggedFlag("MACTSCR.TSADDREG (TSADDREG)", 5) 921 .WithReservedBits(6, 2) 922 .WithFlag(8, out enableTimestampForAll, name: "MACTSCR.TSENALL (TSENALL)") 923 .WithTaggedFlag("MACTSCR.TSCTRLSSR (TSCTRLSSR)", 9) 924 .WithTaggedFlag("MACTSCR.TSVER2ENA (TSVER2ENA)", 10) 925 .WithTaggedFlag("MACTSCR.TSIPENA (TSIPENA)", 11) 926 .WithTaggedFlag("MACTSCR.TSIPV6ENA (TSIPV6ENA)", 12) 927 .WithTaggedFlag("MACTSCR.TSIPV4ENA (TSIPV4ENA)", 13) 928 .WithTaggedFlag("MACTSCR.TSEVNTENA (TSEVNTENA)", 14) 929 .WithTaggedFlag("MACTSCR.TSMSTRENA (TSMSTRENA)", 15) 930 .WithTag("MACTSCR.SNAPTYPSEL (SNAPTYPSEL)", 16, 2) 931 .WithTaggedFlag("MACTSCR.TSENMACADDR (TSENMACADDR)", 18) 932 .WithTaggedFlag("MACTSCR.CSC (CSC)", 19) 933 .WithReservedBits(20, 4) 934 .WithTaggedFlag("MACTSCR.TXTSSTSM (TXTSSTSM)", 24) 935 .WithReservedBits(25, 7) 936 }, 937 {(long)RegistersMacAndMmc.SubsecondIncrement, new DoubleWordRegister(this) 938 .WithReservedBits(0, 8) 939 .WithTag("MACSSIR.SNSINC (SNSINC)", 8, 8) 940 .WithTag("MACSSIR.SSINC (SSINC)", 16, 8) 941 .WithReservedBits(24, 8) 942 }, 943 {(long)RegistersMacAndMmc.SystemTimeSeconds, new DoubleWordRegister(this) 944 .WithTag("MACSTSR.TSS (TSS)", 0, 32) 945 }, 946 {(long)RegistersMacAndMmc.SystemTimeNanoseconds, new DoubleWordRegister(this) 947 .WithTag("MACSTNR.TSSS (TSSS)", 0, 31) 948 .WithReservedBits(31, 1) 949 }, 950 {(long)RegistersMacAndMmc.SystemTimeSecondsUpdate, new DoubleWordRegister(this) 951 .WithTag("MACSTSUR.TSS (TSS)", 0, 32) 952 }, 953 {(long)RegistersMacAndMmc.SystemTimeNanosecondsUpdate, new DoubleWordRegister(this) 954 .WithTag("MACSTNUR.TSSS (TSSS)", 0, 31) 955 .WithTaggedFlag("MACSTNUR.ADDSUB (ADDSUB)", 31) 956 }, 957 {(long)RegistersMacAndMmc.TimestampAddend, new DoubleWordRegister(this) 958 .WithTag("MACTSAR.TSAR (TSAR)", 0, 32) 959 }, 960 {(long)RegistersMacAndMmc.TimestampStatus, new DoubleWordRegister(this) 961 .WithTaggedFlag("MACTSSR.TSSOVF (TSSOVF)", 0) 962 .WithTaggedFlag("MACTSSR.TSTARGT0 (TSTARGT0)", 1) 963 .WithTaggedFlag("MACTSSR.AUXTSTRIG (AUXTSTRIG)", 2) 964 .WithTaggedFlag("MACTSSR.TSTRGTERR0 (TSTRGTERR0)", 3) 965 .WithReservedBits(4, 11) 966 .WithTaggedFlag("MACTSSR.TXTSSIS (TXTSSIS)", 15) 967 .WithTag("MACTSSR.ATSSTN (ATSSTN)", 16, 4) 968 .WithReservedBits(20, 4) 969 .WithTaggedFlag("MACTSSR.ATSSTM (ATSSTM)", 24) 970 .WithTag("MACTSSR.ATSNS (ATSNS)", 25, 5) 971 .WithReservedBits(30, 2) 972 }, 973 {(long)RegistersMacAndMmc.TxTimestampStatusNanoseconds, new DoubleWordRegister(this) 974 .WithTag("MACTxTSSNR.TXTSSLO (TXTSSLO)", 0, 31) 975 .WithTaggedFlag("MACTxTSSNR.TXTSSMIS (TXTSSMIS)", 31) 976 }, 977 {(long)RegistersMacAndMmc.TxTimestampStatusSeconds, new DoubleWordRegister(this) 978 .WithTag("MACTxTSSSR.TXTSSHI (TXTSSHI)", 0, 32) 979 }, 980 {(long)RegistersMacAndMmc.AuxiliaryControl, new DoubleWordRegister(this) 981 .WithTaggedFlag("MACACR.ATSFC (ATSFC)", 0) 982 .WithReservedBits(1, 3) 983 .WithTaggedFlag("MACACR.ATSEN0 (ATSEN0)", 4) 984 .WithTaggedFlag("MACACR.ATSEN1 (ATSEN1)", 5) 985 .WithTaggedFlag("MACACR.ATSEN2 (ATSEN2)", 6) 986 .WithTaggedFlag("MACACR.ATSEN3 (ATSEN3)", 7) 987 .WithReservedBits(8, 24) 988 }, 989 {(long)RegistersMacAndMmc.AuxiliaryTimestampNanoseconds, new DoubleWordRegister(this) 990 .WithTag("MACATSNR.AUXTSLO (AUXTSLO)", 0, 31) 991 .WithReservedBits(31, 1) 992 }, 993 {(long)RegistersMacAndMmc.AuxiliaryTimestampSeconds, new DoubleWordRegister(this) 994 .WithTag("MACATSSR.AUXTSHI (AUXTSHI)", 0, 32) 995 }, 996 {(long)RegistersMacAndMmc.TimestampIngressAsymmetricCorrection, new DoubleWordRegister(this) 997 .WithTag("MACTSIACR.OSTIAC (OSTIAC)", 0, 32) 998 }, 999 {(long)RegistersMacAndMmc.TimestampEgressAsymmetricCorrection, new DoubleWordRegister(this) 1000 .WithTag("MACTSEACR.OSTEAC (OSTEAC)", 0, 32) 1001 }, 1002 {(long)RegistersMacAndMmc.TimestampIngressCorrectionNanosecond, new DoubleWordRegister(this) 1003 .WithTag("MACTSICNR.TSIC (TSIC)", 0, 32) 1004 }, 1005 {(long)RegistersMacAndMmc.TimestampEgressCorrectionNanosecond, new DoubleWordRegister(this) 1006 .WithTag("MACTSECNR.TSEC (TSEC)", 0, 32) 1007 }, 1008 {(long)RegistersMacAndMmc.PPSControl, new DoubleWordRegister(this) 1009 .WithTag("MACPPSCR.PPSCTRL/MACPPSCR.PPSCMD (PPSCTRL/PPSCMD)", 0, 4) 1010 .WithTaggedFlag("MACPPSCR.PPSEN0 (PPSEN0)", 4) 1011 .WithTag("MACPPSCR.TRGTMODSEL0 (TRGTMODSEL0)", 5, 2) 1012 .WithReservedBits(7, 25) 1013 }, 1014 {(long)RegistersMacAndMmc.PPSTargetTimeSeconds, new DoubleWordRegister(this) 1015 .WithTag("MACPPSTTSR.TSTRH0 (TSTRH0)", 0, 31) 1016 .WithReservedBits(31, 1) 1017 }, 1018 {(long)RegistersMacAndMmc.PPSTargetTimeNanoseconds, new DoubleWordRegister(this) 1019 .WithTag("MACPPSTTNR.TTSL0 (TTSL0)", 0, 31) 1020 .WithTaggedFlag("MACPPSTTNR.TRGTBUSY0 (TRGTBUSY0)", 31) 1021 }, 1022 {(long)RegistersMacAndMmc.PPSInterval, new DoubleWordRegister(this) 1023 .WithTag("MACPPSIR.PPSINT0 (PPSINT0)", 0, 32) 1024 }, 1025 {(long)RegistersMacAndMmc.PPSWidth, new DoubleWordRegister(this) 1026 .WithTag("MACPPSWR.PPSWIDTH0 (PPSWIDTH0)", 0, 32) 1027 }, 1028 {(long)RegistersMacAndMmc.PTPOffloadControl, new DoubleWordRegister(this) 1029 .WithTaggedFlag("MACPOCR.PTOEN (PTOEN)", 0) 1030 .WithTaggedFlag("MACPOCR.ASYNCEN (ASYNCEN)", 1) 1031 .WithTaggedFlag("MACPOCR.APDREQEN (APDREQEN)", 2) 1032 .WithReservedBits(3, 1) 1033 .WithTaggedFlag("MACPOCR.ASYNCTRIG (ASYNCTRIG)", 4) 1034 .WithTaggedFlag("MACPOCR.APDREQTRIG (APDREQTRIG)", 5) 1035 .WithTaggedFlag("MACPOCR.DRRDIS (DRRDIS)", 6) 1036 .WithReservedBits(7, 1) 1037 .WithTag("MACPOCR.DN (DN)", 8, 8) 1038 .WithReservedBits(16, 16) 1039 }, 1040 {(long)RegistersMacAndMmc.PTPSourcePortIdentity0, new DoubleWordRegister(this) 1041 .WithTag("MACSPI0R.SPI0 (SPI0)", 0, 32) 1042 }, 1043 {(long)RegistersMacAndMmc.PTPSourcePortIdentity1, new DoubleWordRegister(this) 1044 .WithTag("MACSPI1R.SPI1 (SPI1)", 0, 32) 1045 }, 1046 {(long)RegistersMacAndMmc.PTPSourcePortIdentity2, new DoubleWordRegister(this) 1047 .WithTag("MACSPI2R.SPI2 (SPI2)", 0, 16) 1048 .WithReservedBits(16, 16) 1049 }, 1050 {(long)RegistersMacAndMmc.LogMessageInterval, new DoubleWordRegister(this) 1051 .WithTag("MACLMIR.LSI (LSI)", 0, 8) 1052 .WithTag("MACLMIR.DRSYNCR (DRSYNCR)", 8, 3) 1053 .WithReservedBits(11, 13) 1054 .WithTag("MACLMIR.LMPDRI (LMPDRI)", 24, 8) 1055 } 1056 }; 1057 } 1058 CreateMTLRegisterMap()1059 private IDictionary<long, DoubleWordRegister> CreateMTLRegisterMap() 1060 { 1061 return new Dictionary<long, DoubleWordRegister>() 1062 { 1063 {(long)RegistersMTL.OperatingMode, new DoubleWordRegister(this) 1064 .WithReservedBits(0, 1) 1065 .WithTaggedFlag("MTLOMR.DTXSTS (DTXSTS)", 1) 1066 .WithReservedBits(2, 6) 1067 .WithTaggedFlag("MTLOMR.CNTPRST (CNTPRST)", 8) 1068 .WithTaggedFlag("MTLOMR.CNTCLR (CNTCLR)", 9) 1069 .WithReservedBits(10, 22) 1070 }, 1071 {(long)RegistersMTL.InterruptStatus, new DoubleWordRegister(this) 1072 .WithTaggedFlag("MTLISR.Q0IS (Queue interrupt status)", 0) 1073 .WithReservedBits(1, 31) 1074 .WithChangeCallback((_, __) => UpdateInterrupts()) 1075 }, 1076 {(long)RegistersMTL.TxQueueOperating, new DoubleWordRegister(this, 0x70008) 1077 .WithTaggedFlag("MTLTxQOMR.FTQ (Flush Transmit Queue)", 0) 1078 .WithTaggedFlag("MTLTxQOMR.TSF (Transmit Store and Forward)", 1) 1079 .WithTag("MTLTxQOMR.TXQEN (Transmit Queue Enable)", 2, 2) 1080 .WithTag("MTLTxQOMR.TTC (Transmit Threshold Control)", 4, 3) 1081 .WithReservedBits(7, 9) 1082 .WithTag("MTLTxQOMR.TQS (Transmit Queue Size)", 16, 3) 1083 .WithReservedBits(19, 13) 1084 }, 1085 {(long)RegistersMTL.TxQueueUnderflow, new DoubleWordRegister(this) 1086 .WithTag("MTLTxQUR.UFFRMCNT (Underflow Packet Counter)", 0, 11) 1087 .WithTaggedFlag("MTLTxQUR.UFCNTOVF (UFCNTOVF)", 11) 1088 .WithReservedBits(12, 20) 1089 }, 1090 {(long)RegistersMTL.TxQueueDebug, new DoubleWordRegister(this) 1091 // values are intentionally empty because we send packets immediately 1092 .WithFlag(0, FieldMode.Read, valueProviderCallback: _ => false, name: "MTLTxQDR.TXQPAUSED (TXQPAUSED)") 1093 .WithEnumField<DoubleWordRegister, MTLTxQueueReadControllerStatus>(1, 2, FieldMode.Read, 1094 valueProviderCallback: _ => MTLTxQueueReadControllerStatus.Idle, name: "MTLTxQDR.TRCSTS (TRCSTS)") 1095 .WithFlag(3, FieldMode.Read, valueProviderCallback: _ => false, name: "MTLTxQDR.TWCSTS (TWCSTS)") 1096 .WithFlag(4, FieldMode.Read, valueProviderCallback: _ => false, name: "MTLTxQDR.TXQSTS (TXQSTS)") 1097 .WithFlag(5, FieldMode.Read, valueProviderCallback: _ => false, name: "MTLTxQDR.TXSTSFSTS (TXSTSFSTS)") 1098 .WithReservedBits(6, 10) 1099 .WithValueField(16, 3, FieldMode.Read, valueProviderCallback: _ => 0, name: "MTLTxQDR.PTXQ (PTXQ)") 1100 .WithReservedBits(19, 1) 1101 .WithValueField(20, 3, FieldMode.Read, valueProviderCallback: _ => 0, name: "MTLTxQDR.STXSTSF (STXSTSF)") 1102 .WithReservedBits(23, 9) 1103 }, 1104 {(long)RegistersMTL.QueueInterruptControlStatus, new DoubleWordRegister(this) 1105 .WithTaggedFlag("MTLQICSR.TXUNFIS (TXUNFIS)", 0) 1106 .WithReservedBits(1, 7) 1107 .WithTaggedFlag("MTLQICSR.TXUIE (TXUIE)", 8) 1108 .WithReservedBits(9, 7) 1109 .WithTaggedFlag("MTLQICSR.RXOVFIS (RXOVFIS)", 16) 1110 .WithReservedBits(17, 7) 1111 .WithTaggedFlag("MTLQICSR.RXOIE (RXOIE)", 24) 1112 .WithReservedBits(25, 7) 1113 }, 1114 {(long)RegistersMTL.RxQueueOperatingMode, new DoubleWordRegister(this) 1115 .WithTag("MTLRxQOMR.RTC (RTC)", 0, 2) 1116 .WithReservedBits(2, 1) 1117 .WithTaggedFlag("MTLRxQOMR.FUP (FUP)", 3) 1118 .WithTaggedFlag("MTLRxQOMR.FEP (FEP)", 4) 1119 .WithTaggedFlag("MTLRxQOMR.RSF (RSF)", 5) 1120 .WithTaggedFlag("MTLRxQOMR.DIS_TCP_EF (DIS_TCP_EF)", 6) 1121 .WithTaggedFlag("MTLRxQOMR.EHFC (EHFC)", 7) 1122 .WithTag("MTLRxQOMR.RFA (RFA)", 8, 4) 1123 .WithReservedBits(12, 2) 1124 .WithTag("MTLRxQOMR.RFD (RFD)", 14, 4) 1125 .WithReservedBits(18, 2) 1126 .WithValueField(20, 5, FieldMode.Read, valueProviderCallback: _ => 0b11111, name: "MTLRxQOMR.RQS (RQS)") 1127 .WithReservedBits(25, 7) 1128 }, 1129 {(long)RegistersMTL.RxQueueMissedPacketAndOverflowCounter, new DoubleWordRegister(this) 1130 .WithTag("MTLRxQMPOCR.OVFPKTCNT (OVFPKTCNT)", 0, 11) 1131 .WithTaggedFlag("MTLRxQMPOCR.OVFCNTOVF (OVFCNTOVF)", 11) 1132 .WithReservedBits(12, 4) 1133 .WithTag("MTLRxQMPOCR.MISPKTCNT (MISPKTCNT)", 16, 11) 1134 .WithTaggedFlag("MTLRxQMPOCR.MISCNTOVF (MISCNTOVF)", 27) 1135 .WithReservedBits(28, 4) 1136 }, 1137 {(long)RegistersMTL.RxQueueDebug, new DoubleWordRegister(this) 1138 .WithTaggedFlag("MTLRxQDR.RWCSTS (RWCSTS)", 0) 1139 .WithTag("MTLRxQDR.RRCSTS (RRCSTS)", 1, 2) 1140 .WithReservedBits(3, 1) 1141 .WithTag("MTLRxQDR.RXQSTS (RXQSTS)", 4, 2) 1142 .WithReservedBits(6, 10) 1143 .WithTag("MTLRxQDR.PRXQ (PRXQ)", 16, 14) 1144 .WithReservedBits(30, 2) 1145 } 1146 }; 1147 } 1148 CreateDMARegisterMap()1149 private IDictionary<long, DoubleWordRegister> CreateDMARegisterMap() 1150 { 1151 var map = new Dictionary<long, DoubleWordRegister>() 1152 { 1153 {(long)RegistersDMA.DMAMode, new DoubleWordRegister(this) 1154 .WithFlag(0, FieldMode.Read | FieldMode.Set, writeCallback: (_, value) => 1155 { 1156 if(value) 1157 { 1158 this.Log(LogLevel.Info, "Software reset."); 1159 Reset(); 1160 } 1161 }, 1162 valueProviderCallback: _ => false, name: "DMAMR.SWR (Software Reset)") 1163 .WithTaggedFlag("DMAMR.DA (DMA Tx or Rx Arbitration Scheme)", 1) 1164 .WithReservedBits(2, 9) 1165 .WithTaggedFlag("DMAMR.TXPR (Transmit priority)", 11) 1166 .WithTag("DMAMR.PR (Priority ratio)", 12, 3) 1167 .WithReservedBits(15, 1) 1168 .WithEnumField(16, 2, out dmaInterruptMode, name: "DMAMR.INTM (Interrupt Mode)", 1169 changeCallback: (previous, current) => 1170 { 1171 if(current == DMAChannelInterruptMode.Reserved) 1172 { 1173 this.Log(LogLevel.Warning, "Attempted to set DMA interrupt mode to a reserved value. Reverting back to the previous value {0}", previous); 1174 dmaInterruptMode.Value = previous; 1175 return; 1176 } 1177 1178 UpdateInterrupts(); 1179 }) 1180 .WithReservedBits(18, 14) 1181 }, 1182 {(long)RegistersDMA.SystemBusMode, new DoubleWordRegister(this) 1183 .WithTaggedFlag("DMASBMR.FB (Fixed Burst Length)", 0) 1184 .WithReservedBits(1, 11) 1185 .WithFlag(12, name: "DMASBMR.AAL (Address-Aligned Beats)") 1186 .WithReservedBits(13, 1) 1187 .WithTaggedFlag("DMASBMR.MB (Mixed Burst)", 14) 1188 .WithTaggedFlag("DMASBMR.RB (Rebuild INCRx Burst)", 15) 1189 .WithReservedBits(16, 16) 1190 }, 1191 {(long)RegistersDMA.InterruptStatus, new DoubleWordRegister(this) 1192 .WithFlags(0, dmaChannels.Length, name: "DMAISR.DCxIS (DMA Channel Interrupt Status)", 1193 valueProviderCallback: (i, _) => dmaChannels[i].Interrupts) 1194 .WithReservedBits(dmaChannels.Length, 16 - dmaChannels.Length) 1195 .WithTaggedFlag("DMAISR.MTLIS (MTL Interrupt Status)", 16) 1196 .WithTaggedFlag("DMAISR.MACIS (MAC Interrupt Status)", 17) 1197 .WithReservedBits(18, 14) 1198 .WithChangeCallback((_, __) => UpdateInterrupts()) 1199 }, 1200 {(long)RegistersDMA.DebugStatus, new DoubleWordRegister(this) 1201 .WithTaggedFlag("DMADSR.AXWHSTS (AHB Master Write Channel)", 0) 1202 .WithReservedBits(1, 7) 1203 .For((r, i) => 1204 { 1205 var offset = i * 8; 1206 r.WithEnumField<DoubleWordRegister, DMARxProcessState>(8 + offset, 4, FieldMode.Read, 1207 valueProviderCallback: _ => dmaChannels[i].DmaRxState, name: $"DMADSR.RPS{i} (DMA Channel {i} Receive Process State)") 1208 .WithEnumField<DoubleWordRegister, DMATxProcessState>(12 + offset, 4, FieldMode.Read, 1209 valueProviderCallback: _ => dmaChannels[i].DmaTxState, name: $"DMADSR.TPS{i} (DMA Channel {i} Transmit Process State)"); 1210 }, 0, dmaChannels.Length) 1211 }, 1212 }; 1213 1214 foreach(var channel in dmaChannels) 1215 { 1216 channel.DefineChannelRegisters(ref map); 1217 } 1218 1219 return map; 1220 } 1221 1222 private uint Read<T>(DoubleWordRegisterCollection registersCollection, string regionName, long offset) 1223 where T : struct, IComparable, IFormattable 1224 { 1225 var result = 0U; 1226 try 1227 { 1228 if(registersCollection.TryRead(offset, out result)) 1229 { 1230 return result; 1231 } 1232 } 1233 finally 1234 { 1235 if(PeripheralAccessLogLevel != null) 1236 { 1237 this.Log(PeripheralAccessLogLevel, "Read from {0} at offset 0x{1:X} ({2}), returned 0x{3:X}.", regionName, offset, Enum.Format(typeof(T), offset, "G"), result); 1238 } 1239 } this.LogAntmicro.Renode.Peripherals.Network.SynopsysDWCEthernetQualityOfService.IFormattable1240 this.Log(LogLevel.Warning, "Unhandled read from {0} at offset 0x{1:X} ({2}).", regionName, offset, Enum.Format(typeof(T), offset, "G")); 1241 return result; 1242 } 1243 1244 private void Write<T>(DoubleWordRegisterCollection registersCollection, string regionName, long offset, uint value) 1245 where T : struct, IComparable, IFormattable 1246 { 1247 if(PeripheralAccessLogLevel != null) 1248 { 1249 this.Log(PeripheralAccessLogLevel, "Write to {0} at offset 0x{1:X} ({2}), value 0x{3:X}.", regionName, offset, Enum.Format(typeof(T), offset, "G"), value); 1250 } 1251 if(!registersCollection.TryWrite(offset, value)) 1252 { 1253 this.Log(LogLevel.Warning, "Unhandled write to {0} at offset 0x{1:X} ({2}), value 0x{3:X}.", regionName, offset, Enum.Format(typeof(T), offset, "G"), value); 1254 return; 1255 } 1256 } 1257 ExecuteMIIOperation()1258 private void ExecuteMIIOperation() 1259 { 1260 if(!miiBusy.Value) 1261 { 1262 return; 1263 } 1264 miiBusy.Value = false; 1265 1266 switch(miiOperation.Value) 1267 { 1268 case MIIOperation.Read: 1269 if(clause45PhyEnable.Value) 1270 { 1271 if(!TryGetPhy<Clause45Address, ushort>((uint)miiPhy.Value, out var phy)) 1272 { 1273 this.Log(LogLevel.Debug, "Read access to unknown phy {0} via Clause 45.", miiPhy.Value); 1274 break; 1275 } 1276 var c45Address = new Clause45Address((byte)miiRegisterOrDeviceAddress.Value, (ushort)miiAddress.Value); 1277 miiData.Value = phy.Read(c45Address); 1278 this.Log(LogLevel.Noisy, "Read ({1}, 0x{2:X}) access to phy {0} via Clause 45.", miiPhy.Value, c45Address, miiData.Value); 1279 } 1280 else 1281 { 1282 if(!TryGetPhy<ushort>((uint)miiPhy.Value, out var phy)) 1283 { 1284 this.Log(LogLevel.Debug, "Read access to unknown phy {0} via Clause 22.", miiPhy.Value); 1285 break; 1286 } 1287 miiData.Value = phy.Read((ushort)miiRegisterOrDeviceAddress.Value); 1288 this.Log(LogLevel.Noisy, "Read ({1}, 0x{2:X}) access to phy {0} via Clause 22.", miiPhy.Value, miiRegisterOrDeviceAddress.Value, miiData.Value); 1289 } 1290 break; 1291 case MIIOperation.Write: 1292 if(clause45PhyEnable.Value) 1293 { 1294 if(!TryGetPhy<Clause45Address, ushort>((uint)miiPhy.Value, out var phy)) 1295 { 1296 this.Log(LogLevel.Debug, "Write access to unknown phy {0} via Clause 45.", miiPhy.Value); 1297 break; 1298 } 1299 var c45Address = new Clause45Address((byte)miiRegisterOrDeviceAddress.Value, (ushort)miiAddress.Value); 1300 this.Log(LogLevel.Noisy, "Write ({1}, 0x{2:X}) access to phy {0} via Clause 45.", miiPhy.Value, c45Address, miiData.Value); 1301 phy.Write(c45Address, (ushort)miiData.Value); 1302 } 1303 else 1304 { 1305 if(!TryGetPhy<ushort>((uint)miiPhy.Value, out var phy)) 1306 { 1307 this.Log(LogLevel.Debug, "Write access to unknown phy {0} via Clause 22.", miiPhy.Value); 1308 break; 1309 } 1310 this.Log(LogLevel.Noisy, "Write ({1}, 0x{2:X}) access to phy {0} via Clause 22.", miiPhy.Value, miiRegisterOrDeviceAddress.Value, miiData.Value); 1311 phy.Write((ushort)miiRegisterOrDeviceAddress.Value, (ushort)miiData.Value); 1312 } 1313 break; 1314 case MIIOperation.PostReadAddressIncrement: 1315 if(!clause45PhyEnable.Value) 1316 { 1317 this.Log(LogLevel.Warning, "Invalid MII Command: Post Read Increment Address is valid only for Clause 45 PHY."); 1318 break; 1319 } 1320 this.Log(LogLevel.Warning, "Unimplemented Command: Post Read Increment Address."); 1321 break; 1322 default: 1323 this.Log(LogLevel.Warning, "Invalid MII Command: Reserved Operation (0x{0:X}).", miiOperation.Value); 1324 break; 1325 } 1326 } 1327 1328 private IFlagRegisterField rxEnable; 1329 private IFlagRegisterField txEnable; 1330 private IFlagRegisterField loopbackEnabled; 1331 private IFlagRegisterField checksumOffloadEnable; 1332 private IFlagRegisterField crcCheckDisable; 1333 private IFlagRegisterField packetDuplicationControl; 1334 private IFlagRegisterField ptpMessageTypeInterrupt; 1335 private IFlagRegisterField lowPowerIdleInterrupt; 1336 private IFlagRegisterField timestampInterrupt; 1337 private IFlagRegisterField ptpMessageTypeInterruptEnable; 1338 private IFlagRegisterField lowPowerIdleInterruptEnable; 1339 private IFlagRegisterField timestampInterruptEnable; 1340 private IFlagRegisterField miiBusy; 1341 private IFlagRegisterField clause45PhyEnable; 1342 private IEnumRegisterField<MIIOperation> miiOperation; 1343 private IEnumRegisterField<RegisterSourceAddressOperation> sourceAddressOperation; 1344 private IValueRegisterField miiRegisterOrDeviceAddress; 1345 private IValueRegisterField miiPhy; 1346 private IValueRegisterField miiData; 1347 private IValueRegisterField miiAddress; 1348 private IValueRegisterField dmaChannelSelect; 1349 private IFlagRegisterField rxUnicastPacketCounterInterrupt; 1350 private IFlagRegisterField rxFifoPacketCounterInterrupt; 1351 private IFlagRegisterField rxCrcErrorPacketCounterInterrupt; 1352 private IFlagRegisterField rxMulticastPacketCounterInterrupt; 1353 private IFlagRegisterField rxBroadcastPacketCounterInterrupt; 1354 private IFlagRegisterField rxGoodByteCounterInterrupt; 1355 private IFlagRegisterField rxByteCounterInterrupt; 1356 private IFlagRegisterField rxPacketCounterInterrupt; 1357 private IFlagRegisterField txGoodPacketCounterInterrupt; 1358 private IFlagRegisterField txGoodByteCounterInterrupt; 1359 private IFlagRegisterField txBroadcastPacketCounterInterrupt; 1360 private IFlagRegisterField txMulticastPacketCounterInterrupt; 1361 private IFlagRegisterField txUnicastPacketCounterInterrupt; 1362 private IFlagRegisterField txPacketCounterInterrupt; 1363 private IFlagRegisterField txByteCounterInterrupt; 1364 private IFlagRegisterField rxUnicastPacketCounterInterruptEnable; 1365 private IFlagRegisterField rxFifoPacketCounterInterruptEnable; 1366 private IFlagRegisterField rxCrcErrorPacketCounterInterruptEnable; 1367 private IFlagRegisterField rxMulticastPacketCounterInterruptEnable; 1368 private IFlagRegisterField rxBroadcastPacketCounterInterruptEnable; 1369 private IFlagRegisterField rxGoodByteCounterInterruptEnable; 1370 private IFlagRegisterField rxByteCounterInterruptEnable; 1371 private IFlagRegisterField rxPacketCounterInterruptEnable; 1372 private IFlagRegisterField txGoodPacketCounterInterruptEnable; 1373 private IFlagRegisterField txGoodByteCounterInterruptEnable; 1374 private IFlagRegisterField txBroadcastPacketCounterInterruptEnable; 1375 private IFlagRegisterField txMulticastPacketCounterInterruptEnable; 1376 private IFlagRegisterField txUnicastPacketCounterInterruptEnable; 1377 private IFlagRegisterField txPacketCounterInterruptEnable; 1378 private IFlagRegisterField txByteCounterInterruptEnable; 1379 private IValueRegisterField txByteCounter; 1380 private IValueRegisterField txPacketCounter; 1381 private IValueRegisterField txUnicastPacketCounter; 1382 private IValueRegisterField txMulticastPacketCounter; 1383 private IValueRegisterField txBroadcastPacketCounter; 1384 private IValueRegisterField txGoodByteCounter; 1385 private IValueRegisterField txGoodPacketCounter; 1386 private IValueRegisterField rxPacketCounter; 1387 private IValueRegisterField rxByteCounter; 1388 private IValueRegisterField rxGoodByteCounter; 1389 private IValueRegisterField rxBroadcastPacketCounter; 1390 private IValueRegisterField rxMulticastPacketCounter; 1391 private IValueRegisterField rxCrcErrorPacketCounter; 1392 private IValueRegisterField rxUnicastPacketCounter; 1393 private IValueRegisterField rxFifoPacketCounter; 1394 private IFlagRegisterField enableTimestamp; 1395 private IFlagRegisterField enableTimestampForAll; 1396 1397 private readonly IFlagRegisterField[] rxIpcPacketCounterInterruptEnable; 1398 private readonly IFlagRegisterField[] rxIpcByteCounterInterruptEnable; 1399 private readonly IFlagRegisterField[] rxIpcPacketCounterInterrupt; 1400 private readonly IFlagRegisterField[] rxIpcByteCounterInterrupt; 1401 private readonly IValueRegisterField[] rxIpcPacketCounter; 1402 private readonly IValueRegisterField[] rxIpcByteCounter; 1403 1404 private readonly DoubleWordRegisterCollection macAndMmcRegisters; 1405 // MAC Transaction Layer 1406 private readonly DoubleWordRegisterCollection mtlRegisters; 1407 private readonly DoubleWordRegisterCollection dmaRegisters; 1408 1409 private readonly int NumberOfIpcCounters = Enum.GetNames(typeof(IpcCounter)).Length; 1410 1411 public enum RegistersMacAndMmc : long 1412 { 1413 OperatingModeConfiguration = 0x000, 1414 ExtendedOperatingModeConfiguration = 0x004, 1415 PacketFilteringControl = 0x008, 1416 WatchdogTimeout = 0x00C, 1417 HashTable0 = 0x010, 1418 HashTable1 = 0x014, 1419 VLANTag = 0x050, 1420 VLANHashTable = 0x058, 1421 VLANInclusion = 0x060, 1422 InnerVLANInclusion = 0x064, 1423 TxQueueFlowControl = 0x070, 1424 RxFlowControl = 0x090, 1425 InterruptStatus = 0x0B0, 1426 InterruptEnable = 0x0B4, 1427 RxTxStatus = 0x0B8, 1428 PMTControlStatus = 0x0C0, 1429 RemoteWakeUpPacketFilter = 0x0C4, 1430 LPIControlAndStatus = 0x0D0, 1431 LPITimersControl = 0x0D4, 1432 LPIEntryTimer = 0x0D8, 1433 OneMicrosecondTickCounter = 0x0DC, 1434 Version = 0x110, 1435 Debug = 0x114, 1436 HardwareFeature0 = 0x11C, 1437 HardwareFeature1 = 0x120, 1438 HardwareFeature2 = 0x124, 1439 HardwareFeature3 = 0x128, 1440 MDIOAddress = 0x200, 1441 MDIOData = 0x204, 1442 ARPAddress = 0x210, 1443 CSRSoftwareControl = 0x230, 1444 MACAddress0High = 0x300, 1445 MACAddress0Low = 0x304, 1446 MACAddress1Low = 0x30C, 1447 MACAddress2Low = 0x314, 1448 MACAddress1High = 0x308, 1449 MACAddress2High = 0x310, 1450 MACAddress3High = 0x318, 1451 MACAddress3Low = 0x31C, 1452 MMCControl = 0x700, 1453 MMCRxInterrupt = 0x704, 1454 MMCTxInterrupt = 0x708, 1455 MMCRxInterruptMask = 0x70C, 1456 MMCTxInterruptMask = 0x710, 1457 TxOctetCountGoodBad = 0x714, 1458 TxPacketCountGoodBad = 0x718, 1459 TxUnicastPacketsGoodBad = 0x73C, 1460 TxMulticastPacketsGoodBad = 0x740, 1461 TxBroadcastPacketsGoodBad = 0x744, 1462 TxSingleCollisionGoodPackets = 0x74C, 1463 TxMultipleCollisionGoodPackets = 0x750, 1464 TxOctetCountGood = 0x764, 1465 TxPacketCountGood = 0x768, 1466 RxPacketsCountGoodBad = 0x780, 1467 RxOctetCountGoodBad = 0x784, 1468 RxOctetCountGood = 0x788, 1469 RxBroadcastPacketsGood = 0x78C, 1470 RxMulticastPacketsGood = 0x790, 1471 RxCRCErrorPackets = 0x794, 1472 RxAlignmentErrorPackets = 0x798, 1473 RxUnicastPacketsGood = 0x7C4, 1474 RxFifoOverflowPackets = 0x7D4, 1475 TxLPIMicrodecondTimer = 0x7EC, 1476 TxLPITransitionCounter = 0x7F0, 1477 RxLPIMicrosecondCounter = 0x7F4, 1478 RxLPITransitionCounter = 0x7F8, 1479 MmcIpcRxInterruptMask = 0x800, 1480 MmcIpcRxInterrupt = 0x808, 1481 RxIpv4GoodPackets = 0x810, 1482 RxIpv4HeaderErrorPackets = 0x814, 1483 RxIpv4NoPayloadPackets = 0x818, 1484 RxIpv4FragmentedPackets = 0x81C, 1485 RxIpv4UdpChecksumDisabledPackets = 0x820, 1486 RxIpv6GoodPackets = 0x824, 1487 RxIpv6HeaderErrorPackets = 0x828, 1488 RxIpv6NoPayloadPackets = 0x82C, 1489 RxUdpGoodPackets = 0x830, 1490 RxUdpErrorPackets = 0x834, 1491 RxTcpGoodPackets = 0x838, 1492 RxTcpErrorPackets = 0x83C, 1493 RxIcmpGoodPackets = 0x840, 1494 RxIcmpErrorPackets = 0x844, 1495 RxIpv4GoodOctets = 0x850, 1496 RxIpv4HeaderErrorOctets = 0x854, 1497 RxIpv4NoPayloadOctets = 0x858, 1498 RxIpv4FragmentedOctets = 0x85C, 1499 RxIpv4UdpChecksumDisableOctets = 0x860, 1500 RxIpv6GoodOctets = 0x864, 1501 RxIpv6HeaderErrorOctets = 0x868, 1502 RxIpv6NoPayloadOctets = 0x86C, 1503 RxUdpGoodOctets = 0x870, 1504 RxUdpErrorOctets = 0x874, 1505 RxTcpGoodOctets = 0x878, 1506 RxTcpErrorOctets = 0x87C, 1507 RxIcmpGoodOctets = 0x880, 1508 RxIcmpErrorOctets = 0x884, 1509 Layer3And4Control0 = 0x900, 1510 Layer4AddressFilter0 = 0x904, 1511 Layer3Address0Filter0 = 0x910, 1512 Layer3Address1Filter0 = 0x914, 1513 Layer3Address2Filter0 = 0x918, 1514 Layer3Address3Filter0 = 0x91C, 1515 Layer3And4Control1 = 0x930, 1516 Layer4AddressFilter1 = 0x934, 1517 Layer3Address0Filter1 = 0x940, 1518 Layer3Address1Filter1 = 0x944, 1519 Layer3Address2Filter1 = 0x948, 1520 Layer3Address3Filter1 = 0x94C, 1521 TimestampControl = 0xB00, 1522 SubsecondIncrement = 0xB04, 1523 SystemTimeSeconds = 0xB08, 1524 SystemTimeNanoseconds = 0xB0C, 1525 SystemTimeSecondsUpdate = 0xB10, 1526 SystemTimeNanosecondsUpdate = 0xB14, 1527 TimestampAddend = 0xB18, 1528 TimestampStatus = 0xB20, 1529 TxTimestampStatusNanoseconds = 0xB30, 1530 TxTimestampStatusSeconds = 0xB34, 1531 AuxiliaryControl = 0xB40, 1532 AuxiliaryTimestampNanoseconds = 0xB48, 1533 AuxiliaryTimestampSeconds = 0xB4C, 1534 TimestampIngressAsymmetricCorrection = 0xB50, 1535 TimestampEgressAsymmetricCorrection = 0xB54, 1536 TimestampIngressCorrectionNanosecond = 0xB58, 1537 TimestampEgressCorrectionNanosecond = 0xB5C, 1538 PPSControl = 0xB70, 1539 PPSTargetTimeSeconds = 0xB80, 1540 PPSTargetTimeNanoseconds = 0xB84, 1541 PPSInterval = 0xB88, 1542 PPSWidth = 0xB8C, 1543 PTPOffloadControl = 0xBC0, 1544 PTPSourcePortIdentity0 = 0xBC4, 1545 PTPSourcePortIdentity1 = 0xBC8, 1546 PTPSourcePortIdentity2 = 0xBCC, 1547 LogMessageInterval = 0xBD0, 1548 } 1549 1550 public enum RegistersMTL : long 1551 { 1552 OperatingMode = 0x000, 1553 InterruptStatus = 0x020, 1554 TxQueueOperating = 0x100, 1555 TxQueueUnderflow = 0x104, 1556 TxQueueDebug = 0x108, 1557 QueueInterruptControlStatus = 0x12C, 1558 RxQueueOperatingMode = 0x130, 1559 RxQueueMissedPacketAndOverflowCounter = 0x134, 1560 RxQueueDebug = 0x138, 1561 } 1562 1563 public enum RegistersDMA : long 1564 { 1565 DMAMode = 0x000, 1566 SystemBusMode = 0x004, 1567 InterruptStatus = 0x008, 1568 DebugStatus = 0x00C, 1569 } 1570 1571 public enum RegistersDMAChannel : long 1572 { 1573 Control = 0x00, 1574 TransmitControl = 0x04, 1575 ReceiveControl = 0x08, 1576 TxDescriptorListAddress = 0x14, 1577 RxDescriptorListAddress = 0x1C, 1578 TxDescriptorTailPointer = 0x20, 1579 RxDescriptorTailPointer = 0x28, 1580 TxDescriptorRingLength = 0x2C, 1581 RxDescriptorRingLength = 0x30, 1582 InterruptEnable = 0x34, 1583 RxInterruptWatchdogTimer = 0x38, 1584 CurrentApplicationTransmitDescriptor = 0x44, 1585 CurrentApplicationReceiveDescriptor = 0x4C, 1586 CurrentApplicationTransmitBuffer = 0x54, 1587 CurrentApplicationReceiveBuffer = 0x5C, 1588 Status = 0x60, 1589 MissedFrameCount = 0x6C, 1590 } 1591 1592 public enum RegisterSourceAddressOperation : byte 1593 { 1594 MACAddressRegisterReserved0 = 0b000, 1595 MACAddressRegisterReserved1 = 0b001, 1596 MACAddressRegister0Insert = 0b010, 1597 MACAddressRegister0Replace = 0b011, 1598 MACAddressRegisterReserved2 = 0b100, 1599 MACAddressRegisterReserved3 = 0b101, 1600 MACAddressRegister1Insert = 0b110, 1601 MACAddressRegister1Replace = 0b111, 1602 } 1603 1604 protected enum DMATxProcessState 1605 { 1606 Stopped = 0b000, // Reset or Stop Receive Command issued 1607 FetchingDescriptor = 0b001, // Fetching Tx Transfer Descriptor 1608 WaitingForStatus = 0b010, // Waiting for status 1609 FetchingBufferData = 0b011, // Reading Data from system memory buffer and queuing it to the Tx buffer (Tx FIFO) 1610 TimestampWriteState = 0b100, // Timestamp write state 1611 // Reserved = 0b101, // Reserved for future use 1612 Suspended = 0b110, // Tx Descriptor Unavailable or Tx Buffer Underflow 1613 ClosingDescriptor = 0b111, // Closing Tx Descriptor 1614 } 1615 1616 protected enum DMARxProcessState 1617 { 1618 Stopped = 0b000, // Reset or Stop Receive Command issued 1619 FetchingDescriptor = 0b001, // Fetching Rx Transfer Descriptor 1620 // Reserved = 0b010, // Reserved for future use 1621 WaitingForPacket = 0b011, // Waiting for Rx packet 1622 Suspended = 0b100, // Rx Descriptor Unavailable 1623 ClosingDescriptor = 0b101, // Closing the Rx Descriptor 1624 TimestampWriteState = 0b110, // Timestamp write state 1625 WritingBufferData = 0b111, // Transferring the received packet data from the Rx buffer to the system memory 1626 } 1627 1628 private enum MIIOperation : byte 1629 { 1630 Write = 0b01, 1631 PostReadAddressIncrement = 0b10, 1632 Read = 0b11, 1633 } 1634 1635 private enum IpcCounter : int 1636 { 1637 IpV4Good, 1638 IpV4HeaderError, 1639 IpV4NoPayload, 1640 IpV4Fragmented, 1641 IpV4UDPChecksumDisabled, 1642 IpV6Good, 1643 IpV6HeaderError, 1644 IpV6NoPayload, 1645 UdpGood, 1646 UdpError, 1647 TcpGood, 1648 TcpError, 1649 IcmpGood, 1650 IcmpError, 1651 } 1652 1653 private enum MTLTxQueueReadControllerStatus 1654 { 1655 Idle = 0b00, 1656 Read = 0b01, 1657 Waiting = 0b10, 1658 Flushing = 0b11, 1659 } 1660 } 1661 } 1662