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