/ src / Ryujinx.Cpu / IVirtualMemoryManagerTracked.cs
IVirtualMemoryManagerTracked.cs
 1  using Ryujinx.Memory;
 2  using Ryujinx.Memory.Tracking;
 3  using System;
 4  using System.Collections.Generic;
 5  
 6  namespace Ryujinx.Cpu
 7  {
 8      public interface IVirtualMemoryManagerTracked : IVirtualMemoryManager
 9      {
10          /// <summary>
11          /// Reads data from CPU mapped memory, with read tracking
12          /// </summary>
13          /// <typeparam name="T">Type of the data being read</typeparam>
14          /// <param name="va">Virtual address of the data in memory</param>
15          /// <returns>The data</returns>
16          T ReadTracked<T>(ulong va) where T : unmanaged;
17  
18          /// <summary>
19          /// Writes data to CPU mapped memory, without write tracking.
20          /// </summary>
21          /// <param name="va">Virtual address to write the data into</param>
22          /// <param name="data">Data to be written</param>
23          void WriteUntracked(ulong va, ReadOnlySpan<byte> data);
24  
25          /// <summary>
26          /// Obtains a memory tracking handle for the given virtual region. This should be disposed when finished with.
27          /// </summary>
28          /// <param name="address">CPU virtual address of the region</param>
29          /// <param name="size">Size of the region</param>
30          /// <param name="id">Handle ID</param>
31          /// <param name="flags">Region flags</param>
32          /// <returns>The memory tracking handle</returns>
33          RegionHandle BeginTracking(ulong address, ulong size, int id, RegionFlags flags = RegionFlags.None);
34  
35          /// <summary>
36          /// Obtains a memory tracking handle for the given virtual region, with a specified granularity. This should be disposed when finished with.
37          /// </summary>
38          /// <param name="address">CPU virtual address of the region</param>
39          /// <param name="size">Size of the region</param>
40          /// <param name="handles">Handles to inherit state from or reuse. When none are present, provide null</param>
41          /// <param name="granularity">Desired granularity of write tracking</param>
42          /// <param name="id">Handle ID</param>
43          /// <param name="flags">Region flags</param>
44          /// <returns>The memory tracking handle</returns>
45          MultiRegionHandle BeginGranularTracking(ulong address, ulong size, IEnumerable<IRegionHandle> handles, ulong granularity, int id, RegionFlags flags = RegionFlags.None);
46  
47          /// <summary>
48          /// Obtains a smart memory tracking handle for the given virtual region, with a specified granularity. This should be disposed when finished with.
49          /// </summary>
50          /// <param name="address">CPU virtual address of the region</param>
51          /// <param name="size">Size of the region</param>
52          /// <param name="granularity">Desired granularity of write tracking</param>
53          /// <param name="id">Handle ID</param>
54          /// <returns>The memory tracking handle</returns>
55          SmartMultiRegionHandle BeginSmartGranularTracking(ulong address, ulong size, ulong granularity, int id);
56      }
57  }