1 // 2 // Copyright (c) 2010-2024 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.Logging; 10 using Antmicro.Renode.UserInterface; 11 12 namespace Antmicro.Renode.Peripherals.Network 13 { 14 [Icon("phy")] 15 public class EthernetPhysicalLayer : IPhysicalLayer<ushort> 16 { EthernetPhysicalLayer()17 public EthernetPhysicalLayer() 18 { 19 BasicStatus = (ushort)(BasicStatusBit.LinkStatus | BasicStatusBit.AutoNegotiationComplete); 20 } 21 Read(ushort addr)22 public ushort Read(ushort addr) 23 { 24 switch((Register)addr) 25 { 26 case Register.BasicControl: 27 return (ushort)BasicControl; 28 case Register.BasicStatus: 29 return (ushort)BasicStatus; 30 case Register.Id1: 31 return (ushort)Id1; 32 case Register.Id2: 33 return (ushort)Id2; 34 case Register.AutoNegotiationAdvertisement: 35 return (ushort)AutoNegotiationAdvertisement; 36 case Register.AutoNegotiationLinkPartnerBasePageAbility: 37 return (ushort)AutoNegotiationLinkPartnerBasePageAbility; 38 case Register.AutoNegotiationExpansion: 39 return (ushort)AutoNegotiationExpansion; 40 case Register.AutoNegotiationNextPageTransmit: 41 return (ushort)AutoNegotiationNextPageTransmit; 42 case Register.AutoNegotiationLinkPartnerReceivedNextPage: 43 return (ushort)AutoNegotiationLinkPartnerReceivedNextPage; 44 case Register.MasterSlaveControl: 45 return (ushort)MasterSlaveControl; 46 case Register.MasterSlaveStatus: 47 return (ushort)MasterSlaveStatus; 48 case Register.PowerSourcingEquipmentControl: 49 return (ushort)PowerSourcingEquipmentControl; 50 case Register.PowerSourcingEquipmentStatus: 51 return (ushort)PowerSourcingEquipmentStatus; 52 case Register.MDIOManageableDeviceAccessControl: 53 return (ushort)MDIOManageableDeviceAccessControl; 54 case Register.MDIOManageableDeviceAcceddAddressData: 55 return (ushort)MDIOManageableDeviceAcceddAddressData; 56 case Register.ExtendedStatus: 57 return (ushort)ExtendedStatus; 58 case Register.VendorSpecific0: 59 return (ushort)VendorSpecific0; 60 case Register.VendorSpecific1: 61 return (ushort)VendorSpecific1; 62 case Register.VendorSpecific2: 63 return (ushort)VendorSpecific2; 64 case Register.VendorSpecific3: 65 return (ushort)VendorSpecific3; 66 case Register.VendorSpecific4: 67 return (ushort)VendorSpecific4; 68 case Register.VendorSpecific5: 69 return (ushort)VendorSpecific5; 70 case Register.VendorSpecific6: 71 return (ushort)VendorSpecific6; 72 case Register.VendorSpecific7: 73 return (ushort)VendorSpecific7; 74 case Register.VendorSpecific8: 75 return (ushort)VendorSpecific8; 76 case Register.VendorSpecific9: 77 return (ushort)VendorSpecific9; 78 case Register.VendorSpecific10: 79 return (ushort)VendorSpecific10; 80 case Register.VendorSpecific11: 81 return (ushort)VendorSpecific11; 82 case Register.VendorSpecific12: 83 return (ushort)VendorSpecific12; 84 case Register.VendorSpecific13: 85 return (ushort)VendorSpecific13; 86 case Register.VendorSpecific14: 87 return (ushort)VendorSpecific14; 88 case Register.VendorSpecific15: 89 return (ushort)VendorSpecific15; 90 default: 91 this.LogUnhandledRead(addr); 92 return 0; 93 } 94 } 95 Write(ushort addr, ushort val)96 public void Write(ushort addr, ushort val) 97 { 98 this.LogUnhandledWrite(addr, val); 99 } 100 Reset()101 public void Reset() 102 { 103 } 104 105 public int BasicControl { get; set; } 106 public int BasicStatus { get; set; } 107 public int Id1 { get; set; } 108 public int Id2 { get; set; } 109 public int AutoNegotiationAdvertisement { get; set; } 110 public int AutoNegotiationLinkPartnerBasePageAbility { get; set; } 111 public int AutoNegotiationExpansion { get; set; } 112 public int AutoNegotiationNextPageTransmit { get; set; } 113 public int AutoNegotiationLinkPartnerReceivedNextPage { get; set; } 114 public int MasterSlaveControl { get; set; } 115 public int MasterSlaveStatus { get; set; } 116 public int PowerSourcingEquipmentControl { get; set; } 117 public int PowerSourcingEquipmentStatus { get; set; } 118 public int MDIOManageableDeviceAccessControl { get; set; } 119 public int MDIOManageableDeviceAcceddAddressData { get; set; } 120 public int ExtendedStatus { get; set; } 121 public int VendorSpecific0 { get; set; } 122 public int VendorSpecific1 { get; set; } 123 public int VendorSpecific2 { get; set; } 124 public int VendorSpecific3 { get; set; } 125 public int VendorSpecific4 { get; set; } 126 public int VendorSpecific5 { get; set; } 127 public int VendorSpecific6 { get; set; } 128 public int VendorSpecific7 { get; set; } 129 public int VendorSpecific8 { get; set; } 130 public int VendorSpecific9 { get; set; } 131 public int VendorSpecific10 { get; set; } 132 public int VendorSpecific11 { get; set; } 133 public int VendorSpecific12 { get; set; } 134 public int VendorSpecific13 { get; set; } 135 public int VendorSpecific14 { get; set; } 136 public int VendorSpecific15 { get; set; } 137 138 protected enum Register 139 { 140 BasicControl = 0, 141 BasicStatus = 1, 142 Id1 = 2, 143 Id2 = 3, 144 AutoNegotiationAdvertisement = 4, 145 AutoNegotiationLinkPartnerBasePageAbility = 5, 146 AutoNegotiationExpansion = 6, 147 AutoNegotiationNextPageTransmit = 7, 148 AutoNegotiationLinkPartnerReceivedNextPage = 8, 149 MasterSlaveControl = 9, 150 MasterSlaveStatus = 10, 151 PowerSourcingEquipmentControl = 11, 152 PowerSourcingEquipmentStatus = 12, 153 MDIOManageableDeviceAccessControl = 13, 154 MDIOManageableDeviceAcceddAddressData = 14, 155 ExtendedStatus = 15, 156 VendorSpecific0 = 16, 157 VendorSpecific1 = 17, 158 VendorSpecific2 = 18, 159 VendorSpecific3 = 19, 160 VendorSpecific4 = 20, 161 VendorSpecific5 = 21, 162 VendorSpecific6 = 22, 163 VendorSpecific7 = 23, 164 VendorSpecific8 = 24, 165 VendorSpecific9 = 25, 166 VendorSpecific10 = 26, 167 VendorSpecific11 = 27, 168 VendorSpecific12 = 28, 169 VendorSpecific13 = 29, 170 VendorSpecific14 = 30, 171 VendorSpecific15 = 31 172 } 173 174 [Flags] 175 private enum BasicStatusBit 176 { 177 ExtendedCapabilities = 1 << 0, 178 JabberDetect = 1 << 1, 179 LinkStatus = 1 << 2, 180 AutoNegotiationAbility = 1 << 3, 181 RemoteFaultDetected = 1 << 4, 182 AutoNegotiationComplete = 1 << 5, 183 AcceptManagementFrameWithPreambleSuppressed = 1 << 6, 184 ExtendedStatus = 1 << 8, 185 Supports100BaseT2Half = 1 << 9, 186 Supports100BaseT2Full = 1 << 10, 187 Supports10Half = 1 << 11, 188 Supports10Full = 1 << 12, 189 Supports100BaseXHalf = 1 << 13, 190 Supports100BaseXFull = 1 << 14, 191 Supports100BaseT4 = 1 << 15, 192 } 193 } 194 } 195