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 
10 namespace Antmicro.Renode.Peripherals.Bus
11 {
12     public class GaislerAHBPlugAndPlayRecord
13     {
GaislerAHBPlugAndPlayRecord()14         public GaislerAHBPlugAndPlayRecord()
15         {
16             IdentificationRegister = new IdReg();
17             UserDefinedRegister = new uint[3];
18             BankAddressRegister = new Bar[4];
19             for (var i = 0; i < 4; i++ )
20             {
21                 BankAddressRegister[i] = new Bar();
22             }
23         }
24 
25         public IdReg IdentificationRegister;
26         public uint[] UserDefinedRegister;
27         public Bar[] BankAddressRegister;
28 
ToByteArray()29         public byte[] ToByteArray()
30         {
31             var arr = new byte[32];
32 
33             Array.Copy( BitConverter.GetBytes(IdentificationRegister.GetValue()),0,arr,0,4);
34 
35             for( var i = 0; i < 3; i++)
36             {
37                 Array.Copy( BitConverter.GetBytes(UserDefinedRegister[i]),0,arr,(4 + 4*i),4);
38             }
39             for( var i = 0; i < 4; i++)
40             {
41                 Array.Copy( BitConverter.GetBytes(BankAddressRegister[i].GetValue()), 0, arr, (16 + 4*i), 4);
42             }
43             return arr;
44 
45         }
46 
ToUintArray()47         public uint[] ToUintArray()
48         {
49             var arr = new uint[8];
50 
51             arr[0] = IdentificationRegister.GetValue();
52             for (var i=0; i<3; i++)
53             {
54                 arr[i+1] = UserDefinedRegister[i];
55             }
56             for (var i=0; i<4; i++)
57             {
58                 arr[i+4] = BankAddressRegister[i].GetValue();
59             }
60 
61             return arr;
62         }
63 
64         public class IdReg
65         {
66             public uint Vendor = 0;
67             public uint Device = 0;
68             public uint Version = 0;
69             public uint Irq = 0;
GetValue()70             public uint GetValue()
71             {
72                 var value = ((Vendor & 0xff) << 24) | ((Device & 0xfff) << 12) | ((Version & 0x1f) << 5) | ((Irq & 0x1f) << 0 );
73                 return value;
74             }
75         }
76 
77         public class Bar
78         {
79             public uint Address = 0;
80             public bool Prefechable = false;
81             public bool Cacheble = false;
82             public uint Mask = 0;
83             public SpaceType Type = SpaceType.None;
84 
GetValue()85             public uint GetValue()
86             {
87                 var value = ((Address & 0xfff) << 20) | (Prefechable ? 1u<<17 : 0) | (Cacheble ? 1u<<16 : 0) | ((Mask & 0xfff) << 4) | (uint)(Type);
88                 return value;
89             }
90         }
91 
92         public enum SpaceType : uint
93         {
94             None = 0x00,
95             APBIOSpace = 0x01,
96             AHBMemorySpace = 0x02,
97             AHBIOSpace = 0x03
98         }
99     }
100 }
101 
102