1<# 2// 3// Copyright (c) 2010-2023 Antmicro 4// 5// This file is licensed under the MIT License. 6// Full license text is available in 'licenses/MIT.txt'. 7// 8#> 9<#@ template language="C#" #> 10<#@ import namespace="System.Collections.Generic" #> 11<# 12Dictionary<string, string> types = new Dictionary<string, string>(); 13types.Add("byte", "Byte"); 14types.Add("ushort", "Word"); 15types.Add("uint", "DoubleWord"); 16types.Add("ulong", "QuadWord"); 17#> 18/******************************************************** 19* 20* Warning! 21* This file was generated automatically. 22* Please do not edit. Changes should be made in the 23* appropriate *.tt file. 24* 25*/ 26 27using Antmicro.Renode.Core.Structure.Registers; 28using Antmicro.Renode.Exceptions; 29using Antmicro.Renode.Peripherals; 30 31namespace Antmicro.Renode.Hooks 32{ 33 public static class RegisterCollectionHookExtensions 34 { 35<# 36 foreach(var entry in types) 37 { 38 var type = entry.Key; 39 var suffix = entry.Value; 40#> 41 public static void AddBeforeRead<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset, string script) 42 { 43 var engine = new RegisterCollectionHookPythonEngine<<#= type #>, <#= suffix #>RegisterCollection>(@this, script); 44 @this.AddBeforeReadHook<<#= type #>, <#= suffix #>RegisterCollection>(offset, (addr) => 45 { 46 engine.Hook(addr, null); 47 return engine.Value; 48 }); 49 } 50 51 public static void AddAfterRead<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset, string script) 52 { 53 var engine = new RegisterCollectionHookPythonEngine<<#= type #>, <#= suffix #>RegisterCollection>(@this, script); 54 @this.AddAfterReadHook<<#= type #>, <#= suffix #>RegisterCollection>(offset, (addr, value) => 55 { 56 engine.Hook(addr, value); 57 return engine.Value; 58 }); 59 } 60 61 public static void AddBeforeWrite<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset, string script) 62 { 63 var engine = new RegisterCollectionHookPythonEngine<<#= type #>, <#= suffix #>RegisterCollection>(@this, script); 64 @this.AddBeforeWriteHook<<#= type #>, <#= suffix #>RegisterCollection>(offset, (addr, value) => 65 { 66 engine.Hook(addr, value); 67 return engine.Value; 68 }); 69 } 70 71 public static void AddAfterWrite<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset, string script) 72 { 73 74 var engine = new RegisterCollectionHookPythonEngine<<#= type #>, <#= suffix #>RegisterCollection>(@this, script); 75 @this.AddAfterWriteHook<<#= type #>, <#= suffix #>RegisterCollection>(offset, (addr, value) => 76 { 77 engine.Hook(addr, value); 78 }); 79 } 80 81 public static void RemoveBeforeRead<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset) 82 { 83 @this.RemoveBeforeReadHook(offset); 84 } 85 86 public static void RemoveAfterRead<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset) 87 { 88 @this.RemoveAfterReadHook(offset); 89 } 90 91 public static void RemoveBeforeWrite<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset) 92 { 93 @this.RemoveBeforeWriteHook(offset); 94 } 95 96 public static void RemoveAfterWrite<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset) 97 { 98 @this.RemoveAfterWriteHook(offset); 99 } 100 101<# 102 } 103#> 104 } 105} 106