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