<# // // Copyright (c) 2010-2023 Antmicro // // This file is licensed under the MIT License. // Full license text is available in 'licenses/MIT.txt'. // #> <#@ template language="C#" #> <#@ import namespace="System.Collections.Generic" #> <# Dictionary types = new Dictionary(); types.Add("byte", "Byte"); types.Add("ushort", "Word"); types.Add("uint", "DoubleWord"); types.Add("ulong", "QuadWord"); #> /******************************************************** * * Warning! * This file was generated automatically. * Please do not edit. Changes should be made in the * appropriate *.tt file. * */ using Antmicro.Renode.Core.Structure.Registers; using Antmicro.Renode.Exceptions; using Antmicro.Renode.Peripherals; namespace Antmicro.Renode.Hooks { public static class RegisterCollectionHookExtensions { <# foreach(var entry in types) { var type = entry.Key; var suffix = entry.Value; #> public static void AddBeforeRead<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset, string script) { var engine = new RegisterCollectionHookPythonEngine<<#= type #>, <#= suffix #>RegisterCollection>(@this, script); @this.AddBeforeReadHook<<#= type #>, <#= suffix #>RegisterCollection>(offset, (addr) => { engine.Hook(addr, null); return engine.Value; }); } public static void AddAfterRead<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset, string script) { var engine = new RegisterCollectionHookPythonEngine<<#= type #>, <#= suffix #>RegisterCollection>(@this, script); @this.AddAfterReadHook<<#= type #>, <#= suffix #>RegisterCollection>(offset, (addr, value) => { engine.Hook(addr, value); return engine.Value; }); } public static void AddBeforeWrite<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset, string script) { var engine = new RegisterCollectionHookPythonEngine<<#= type #>, <#= suffix #>RegisterCollection>(@this, script); @this.AddBeforeWriteHook<<#= type #>, <#= suffix #>RegisterCollection>(offset, (addr, value) => { engine.Hook(addr, value); return engine.Value; }); } public static void AddAfterWrite<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset, string script) { var engine = new RegisterCollectionHookPythonEngine<<#= type #>, <#= suffix #>RegisterCollection>(@this, script); @this.AddAfterWriteHook<<#= type #>, <#= suffix #>RegisterCollection>(offset, (addr, value) => { engine.Hook(addr, value); }); } public static void RemoveBeforeRead<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset) { @this.RemoveBeforeReadHook(offset); } public static void RemoveAfterRead<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset) { @this.RemoveAfterReadHook(offset); } public static void RemoveBeforeWrite<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset) { @this.RemoveBeforeWriteHook(offset); } public static void RemoveAfterWrite<#= suffix #>Hook(this IProvidesRegisterCollection<<#= suffix #>RegisterCollection> @this, long offset) { @this.RemoveAfterWriteHook(offset); } <# } #> } }