1 // 2 // Copyright (c) 2010-2018 Antmicro 3 // Copyright (c) 2011-2015 Realtime Embedded 4 // 5 // This file is licensed under the MIT License. 6 // Full license text is available in 'licenses/MIT.txt'. 7 // 8 using System; 9 using Antmicro.Renode.Peripherals.Bus; 10 using Antmicro.Renode.Logging; 11 12 namespace Antmicro.Renode.Peripherals.Network 13 { 14 public class FastEthernetController : IDoubleWordPeripheral, IKnownSize 15 { ReadDoubleWord(long offset)16 public uint ReadDoubleWord(long offset) 17 { 18 switch((Register)offset) 19 { 20 case Register.InterruptEvent: 21 return interruptRegisterValue; 22 case Register.MiiManagementFrame: 23 return miiManagementValue; 24 case Register.ControlRegister: 25 return 1; 26 } 27 this.LogUnhandledRead(offset); 28 return 0; 29 } 30 WriteDoubleWord(long offset, uint value)31 public void WriteDoubleWord(long offset, uint value) 32 { 33 switch((Register)offset) 34 { 35 case Register.ControlRegister: 36 if(value != 0) 37 { 38 this.Log(LogLevel.Warning, "Unhandled value 0x{0:X} written to control register.", value); 39 } 40 break; 41 case Register.InterruptEvent: 42 interruptRegisterValue &= ~value; 43 break; 44 case Register.MiiManagementFrame: 45 interruptRegisterValue |= 0x00800000; 46 miiManagementValue = value; 47 break; 48 default: 49 this.LogUnhandledWrite(offset, value); 50 break; 51 } 52 } 53 Reset()54 public void Reset() 55 { 56 interruptRegisterValue = 0; 57 miiManagementValue = 0; 58 } 59 60 public long Size 61 { 62 get 63 { 64 return 0x4000; 65 } 66 } 67 68 private enum Register 69 { 70 InterruptEvent = 0x4, 71 ControlRegister = 0x24, 72 MiiManagementFrame = 0x40 73 } 74 75 private uint interruptRegisterValue; 76 private uint miiManagementValue; 77 } 78 } 79 80