diff options
| author | Ac_K <Acoustik666@gmail.com> | 2019-09-19 02:45:11 +0200 |
|---|---|---|
| committer | jduncanator <1518948+jduncanator@users.noreply.github.com> | 2019-09-19 10:45:11 +1000 |
| commit | a0720b5681852f3d786d77bd3793b0359dea321c (patch) | |
| tree | 9d8f61e540d1d1d827999902dad95e5c0c1e076e /Ryujinx.HLE/HOS/Services/Nv/NvMap | |
| parent | 4af3101b22e6957d6aa48a2768566d658699f4ed (diff) | |
Refactoring HOS folder structure (#771)
* Refactoring HOS folder structure
Refactoring HOS folder structure:
- Added some subfolders when needed (Following structure decided in private).
- Added some `Types` folders when needed.
- Little cleanup here and there.
- Add services placeholders for every HOS services (close #766 and #753).
* Remove Types namespaces
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Nv/NvMap')
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapAlloc.cs | 12 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapCreate.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapFree.cs | 11 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapFromId.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapGetId.cs | 8 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapHandle.cs | 38 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapHandleParam.cs | 12 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapIoctl.cs | 300 | ||||
| -rw-r--r-- | Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapParam.cs | 9 |
9 files changed, 0 insertions, 406 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapAlloc.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapAlloc.cs deleted file mode 100644 index bc61baad..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapAlloc.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - struct NvMapAlloc - { - public int Handle; - public int HeapMask; - public int Flags; - public int Align; - public long Kind; - public long Address; - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapCreate.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapCreate.cs deleted file mode 100644 index dd4bff98..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapCreate.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - struct NvMapCreate - { - public int Size; - public int Handle; - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapFree.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapFree.cs deleted file mode 100644 index d946987e..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapFree.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - struct NvMapFree - { - public int Handle; - public int Padding; - public long Address; - public int Size; - public int Flags; - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapFromId.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapFromId.cs deleted file mode 100644 index e49257ea..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapFromId.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - struct NvMapFromId - { - public int Id; - public int Handle; - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapGetId.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapGetId.cs deleted file mode 100644 index 1f4f3290..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapGetId.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - struct NvMapGetId - { - public int Id; - public int Handle; - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapHandle.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapHandle.cs deleted file mode 100644 index 31bf8329..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapHandle.cs +++ /dev/null @@ -1,38 +0,0 @@ -using System.Threading; - -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - class NvMapHandle - { - public int Handle; - public int Id; - public int Size; - public int Align; - public int Kind; - public long Address; - public bool Allocated; - public long DmaMapAddress; - - private long _dupes; - - public NvMapHandle() - { - _dupes = 1; - } - - public NvMapHandle(int size) : this() - { - Size = size; - } - - public void IncrementRefCount() - { - Interlocked.Increment(ref _dupes); - } - - public long DecrementRefCount() - { - return Interlocked.Decrement(ref _dupes); - } - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapHandleParam.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapHandleParam.cs deleted file mode 100644 index b360343c..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapHandleParam.cs +++ /dev/null @@ -1,12 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - enum NvMapHandleParam - { - Size = 1, - Align = 2, - Base = 3, - Heap = 4, - Kind = 5, - Compr = 6 - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapIoctl.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapIoctl.cs deleted file mode 100644 index d9c579a2..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapIoctl.cs +++ /dev/null @@ -1,300 +0,0 @@ -using ARMeilleure.Memory; -using Ryujinx.Common.Logging; -using Ryujinx.Graphics.Memory; -using Ryujinx.HLE.HOS.Kernel.Process; -using Ryujinx.HLE.Utilities; -using System.Collections.Concurrent; - -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - class NvMapIoctl - { - private const int FlagNotFreedYet = 1; - - private static ConcurrentDictionary<KProcess, IdDictionary> _maps; - - static NvMapIoctl() - { - _maps = new ConcurrentDictionary<KProcess, IdDictionary>(); - } - - public static int ProcessIoctl(ServiceCtx context, int cmd) - { - switch (cmd & 0xffff) - { - case 0x0101: return Create(context); - case 0x0103: return FromId(context); - case 0x0104: return Alloc (context); - case 0x0105: return Free (context); - case 0x0109: return Param (context); - case 0x010e: return GetId (context); - } - - Logger.PrintWarning(LogClass.ServiceNv, $"Unsupported Ioctl command 0x{cmd:x8}!"); - - return NvResult.NotSupported; - } - - private static int Create(ServiceCtx context) - { - long inputPosition = context.Request.GetBufferType0x21().Position; - long outputPosition = context.Request.GetBufferType0x22().Position; - - NvMapCreate args = MemoryHelper.Read<NvMapCreate>(context.Memory, inputPosition); - - if (args.Size == 0) - { - Logger.PrintWarning(LogClass.ServiceNv, $"Invalid size 0x{args.Size:x8}!"); - - return NvResult.InvalidInput; - } - - int size = IntUtils.AlignUp(args.Size, NvGpuVmm.PageSize); - - args.Handle = AddNvMap(context, new NvMapHandle(size)); - - Logger.PrintInfo(LogClass.ServiceNv, $"Created map {args.Handle} with size 0x{size:x8}!"); - - MemoryHelper.Write(context.Memory, outputPosition, args); - - return NvResult.Success; - } - - private static int FromId(ServiceCtx context) - { - long inputPosition = context.Request.GetBufferType0x21().Position; - long outputPosition = context.Request.GetBufferType0x22().Position; - - NvMapFromId args = MemoryHelper.Read<NvMapFromId>(context.Memory, inputPosition); - - NvMapHandle map = GetNvMap(context, args.Id); - - if (map == null) - { - Logger.PrintWarning(LogClass.ServiceNv, $"Invalid handle 0x{args.Handle:x8}!"); - - return NvResult.InvalidInput; - } - - map.IncrementRefCount(); - - args.Handle = args.Id; - - MemoryHelper.Write(context.Memory, outputPosition, args); - - return NvResult.Success; - } - - private static int Alloc(ServiceCtx context) - { - long inputPosition = context.Request.GetBufferType0x21().Position; - long outputPosition = context.Request.GetBufferType0x22().Position; - - NvMapAlloc args = MemoryHelper.Read<NvMapAlloc>(context.Memory, inputPosition); - - NvMapHandle map = GetNvMap(context, args.Handle); - - if (map == null) - { - Logger.PrintWarning(LogClass.ServiceNv, $"Invalid handle 0x{args.Handle:x8}!"); - - return NvResult.InvalidInput; - } - - if ((args.Align & (args.Align - 1)) != 0) - { - Logger.PrintWarning(LogClass.ServiceNv, $"Invalid alignment 0x{args.Align:x8}!"); - - return NvResult.InvalidInput; - } - - if ((uint)args.Align < NvGpuVmm.PageSize) - { - args.Align = NvGpuVmm.PageSize; - } - - int result = NvResult.Success; - - if (!map.Allocated) - { - map.Allocated = true; - - map.Align = args.Align; - map.Kind = (byte)args.Kind; - - int size = IntUtils.AlignUp(map.Size, NvGpuVmm.PageSize); - - long address = args.Address; - - if (address == 0) - { - // When the address is zero, we need to allocate - // our own backing memory for the NvMap. - // TODO: Is this allocation inside the transfer memory? - result = NvResult.OutOfMemory; - } - - if (result == NvResult.Success) - { - map.Size = size; - map.Address = address; - } - } - - MemoryHelper.Write(context.Memory, outputPosition, args); - - return result; - } - - private static int Free(ServiceCtx context) - { - long inputPosition = context.Request.GetBufferType0x21().Position; - long outputPosition = context.Request.GetBufferType0x22().Position; - - NvMapFree args = MemoryHelper.Read<NvMapFree>(context.Memory, inputPosition); - - NvMapHandle map = GetNvMap(context, args.Handle); - - if (map == null) - { - Logger.PrintWarning(LogClass.ServiceNv, $"Invalid handle 0x{args.Handle:x8}!"); - - return NvResult.InvalidInput; - } - - if (map.DecrementRefCount() <= 0) - { - DeleteNvMap(context, args.Handle); - - Logger.PrintInfo(LogClass.ServiceNv, $"Deleted map {args.Handle}!"); - - args.Address = map.Address; - args.Flags = 0; - } - else - { - args.Address = 0; - args.Flags = FlagNotFreedYet; - } - - args.Size = map.Size; - - MemoryHelper.Write(context.Memory, outputPosition, args); - - return NvResult.Success; - } - - private static int Param(ServiceCtx context) - { - long inputPosition = context.Request.GetBufferType0x21().Position; - long outputPosition = context.Request.GetBufferType0x22().Position; - - NvMapParam args = MemoryHelper.Read<NvMapParam>(context.Memory, inputPosition); - - NvMapHandle map = GetNvMap(context, args.Handle); - - if (map == null) - { - Logger.PrintWarning(LogClass.ServiceNv, $"Invalid handle 0x{args.Handle:x8}!"); - - return NvResult.InvalidInput; - } - - switch ((NvMapHandleParam)args.Param) - { - case NvMapHandleParam.Size: args.Result = map.Size; break; - case NvMapHandleParam.Align: args.Result = map.Align; break; - case NvMapHandleParam.Heap: args.Result = 0x40000000; break; - case NvMapHandleParam.Kind: args.Result = map.Kind; break; - case NvMapHandleParam.Compr: args.Result = 0; break; - - // Note: Base is not supported and returns an error. - // Any other value also returns an error. - default: return NvResult.InvalidInput; - } - - MemoryHelper.Write(context.Memory, outputPosition, args); - - return NvResult.Success; - } - - private static int GetId(ServiceCtx context) - { - long inputPosition = context.Request.GetBufferType0x21().Position; - long outputPosition = context.Request.GetBufferType0x22().Position; - - NvMapGetId args = MemoryHelper.Read<NvMapGetId>(context.Memory, inputPosition); - - NvMapHandle map = GetNvMap(context, args.Handle); - - if (map == null) - { - Logger.PrintWarning(LogClass.ServiceNv, $"Invalid handle 0x{args.Handle:x8}!"); - - return NvResult.InvalidInput; - } - - args.Id = args.Handle; - - MemoryHelper.Write(context.Memory, outputPosition, args); - - return NvResult.Success; - } - - private static int AddNvMap(ServiceCtx context, NvMapHandle map) - { - IdDictionary dict = _maps.GetOrAdd(context.Process, (key) => - { - IdDictionary newDict = new IdDictionary(); - - newDict.Add(0, new NvMapHandle()); - - return newDict; - }); - - return dict.Add(map); - } - - private static bool DeleteNvMap(ServiceCtx context, int handle) - { - if (_maps.TryGetValue(context.Process, out IdDictionary dict)) - { - return dict.Delete(handle) != null; - } - - return false; - } - - public static void InitializeNvMap(ServiceCtx context) - { - IdDictionary dict = _maps.GetOrAdd(context.Process, (key) =>new IdDictionary()); - - dict.Add(0, new NvMapHandle()); - } - - public static NvMapHandle GetNvMapWithFb(ServiceCtx context, int handle) - { - if (_maps.TryGetValue(context.Process, out IdDictionary dict)) - { - return dict.GetData<NvMapHandle>(handle); - } - - return null; - } - - public static NvMapHandle GetNvMap(ServiceCtx context, int handle) - { - if (handle != 0 && _maps.TryGetValue(context.Process, out IdDictionary dict)) - { - return dict.GetData<NvMapHandle>(handle); - } - - return null; - } - - public static void UnloadProcess(KProcess process) - { - _maps.TryRemove(process, out _); - } - } -}
\ No newline at end of file diff --git a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapParam.cs b/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapParam.cs deleted file mode 100644 index b5213efe..00000000 --- a/Ryujinx.HLE/HOS/Services/Nv/NvMap/NvMapParam.cs +++ /dev/null @@ -1,9 +0,0 @@ -namespace Ryujinx.HLE.HOS.Services.Nv.NvMap -{ - struct NvMapParam - { - public int Handle; - public int Param; - public int Result; - } -}
\ No newline at end of file |
