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