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