From d1a093e5ca736228b96364539b8dc1522c9a0928 Mon Sep 17 00:00:00 2001
From: gdkchan <gab.dark.100@gmail.com>
Date: Thu, 15 Feb 2024 15:48:22 -0300
Subject: Stub VSMS related ioctls (#6313)

* Stub VSMS related ioctls

* Clean up usings
---
 .../NvHostCtrlGpu/NvHostCtrlGpuDeviceFile.cs       | 33 ++++++++++++++++++++++
 .../NvHostCtrlGpu/Types/NumVsmsArguments.cs        | 11 ++++++++
 .../NvHostCtrlGpu/Types/VsmsMappingArguments.cs    | 13 +++++++++
 3 files changed, 57 insertions(+)
 create mode 100644 src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/NumVsmsArguments.cs
 create mode 100644 src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/VsmsMappingArguments.cs

(limited to 'src')

diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/NvHostCtrlGpuDeviceFile.cs b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/NvHostCtrlGpuDeviceFile.cs
index d287c6d9..29198617 100644
--- a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/NvHostCtrlGpuDeviceFile.cs
+++ b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/NvHostCtrlGpuDeviceFile.cs
@@ -50,6 +50,12 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu
                     case 0x06:
                         result = CallIoctlMethod<GetTpcMasksArguments>(GetTpcMasks, arguments);
                         break;
+                    case 0x12:
+                        result = CallIoctlMethod<NumVsmsArguments>(NumVsms, arguments);
+                        break;
+                    case 0x13:
+                        result = CallIoctlMethod<VsmsMappingArguments>(VsmsMapping, arguments);
+                        break;
                     case 0x14:
                         result = CallIoctlMethod<GetActiveSlotMaskArguments>(GetActiveSlotMask, arguments);
                         break;
@@ -76,6 +82,12 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu
                     case 0x06:
                         result = CallIoctlMethod<GetTpcMasksArguments, int>(GetTpcMasks, arguments, inlineOutBuffer);
                         break;
+                    case 0x12:
+                        result = CallIoctlMethod<NumVsmsArguments>(NumVsms, arguments);
+                        break;
+                    case 0x13:
+                        result = CallIoctlMethod<VsmsMappingArguments>(VsmsMapping, arguments);
+                        break;
                 }
             }
 
@@ -216,6 +228,27 @@ namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu
             return NvInternalResult.Success;
         }
 
+        private NvInternalResult NumVsms(ref NumVsmsArguments arguments)
+        {
+            Logger.Stub?.PrintStub(LogClass.ServiceNv);
+
+            arguments.NumVsms = 2;
+
+            return NvInternalResult.Success;
+        }
+
+        private NvInternalResult VsmsMapping(ref VsmsMappingArguments arguments)
+        {
+            Logger.Stub?.PrintStub(LogClass.ServiceNv);
+
+            arguments.Sm0GpcIndex = 0;
+            arguments.Sm0TpcIndex = 0;
+            arguments.Sm1GpcIndex = 0;
+            arguments.Sm1TpcIndex = 1;
+
+            return NvInternalResult.Success;
+        }
+
         private NvInternalResult GetActiveSlotMask(ref GetActiveSlotMaskArguments arguments)
         {
             Logger.Stub?.PrintStub(LogClass.ServiceNv);
diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/NumVsmsArguments.cs b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/NumVsmsArguments.cs
new file mode 100644
index 00000000..fb5013a7
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/NumVsmsArguments.cs
@@ -0,0 +1,11 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu.Types
+{
+    [StructLayout(LayoutKind.Sequential)]
+    struct NumVsmsArguments
+    {
+        public uint NumVsms;
+        public uint Reserved;
+    }
+}
diff --git a/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/VsmsMappingArguments.cs b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/VsmsMappingArguments.cs
new file mode 100644
index 00000000..1b56fcc4
--- /dev/null
+++ b/src/Ryujinx.HLE/HOS/Services/Nv/NvDrvServices/NvHostCtrlGpu/Types/VsmsMappingArguments.cs
@@ -0,0 +1,13 @@
+using System.Runtime.InteropServices;
+
+namespace Ryujinx.HLE.HOS.Services.Nv.NvDrvServices.NvHostCtrlGpu.Types
+{
+    [StructLayout(LayoutKind.Sequential)]
+    struct VsmsMappingArguments
+    {
+        public byte Sm0GpcIndex;
+        public byte Sm0TpcIndex;
+        public byte Sm1GpcIndex;
+        public byte Sm1TpcIndex;
+    }
+}
-- 
cgit v1.2.3-70-g09d2