aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Sdb
diff options
context:
space:
mode:
authorAc_K <Acoustik666@gmail.com>2019-09-19 02:45:11 +0200
committerjduncanator <1518948+jduncanator@users.noreply.github.com>2019-09-19 10:45:11 +1000
commita0720b5681852f3d786d77bd3793b0359dea321c (patch)
tree9d8f61e540d1d1d827999902dad95e5c0c1e076e /Ryujinx.HLE/HOS/Services/Sdb
parent4af3101b22e6957d6aa48a2768566d658699f4ed (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/Sdb')
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Avm/IAvmService.cs8
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Mii/IImageDatabaseService.cs8
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Mii/IStaticService.cs9
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Pdm/INotifyService.cs8
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Pdm/IQueryService.cs8
-rw-r--r--Ryujinx.HLE/HOS/Services/Sdb/Pl/ISharedFontManager.cs128
6 files changed, 169 insertions, 0 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Avm/IAvmService.cs b/Ryujinx.HLE/HOS/Services/Sdb/Avm/IAvmService.cs
new file mode 100644
index 00000000..d65c8bba
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Sdb/Avm/IAvmService.cs
@@ -0,0 +1,8 @@
+namespace Ryujinx.HLE.HOS.Services.Am.Tcap
+{
+ [Service("avm")] // 6.0.0+
+ class IAvmService : IpcService
+ {
+ public IAvmService(ServiceCtx context) { }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Mii/IImageDatabaseService.cs b/Ryujinx.HLE/HOS/Services/Sdb/Mii/IImageDatabaseService.cs
new file mode 100644
index 00000000..b084714c
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Sdb/Mii/IImageDatabaseService.cs
@@ -0,0 +1,8 @@
+namespace Ryujinx.HLE.HOS.Services.Sdb.Mii
+{
+ [Service("miiimg")] // 5.0.0+
+ class IImageDatabaseService : IpcService
+ {
+ public IImageDatabaseService(ServiceCtx context) { }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Mii/IStaticService.cs b/Ryujinx.HLE/HOS/Services/Sdb/Mii/IStaticService.cs
new file mode 100644
index 00000000..6c156d94
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Sdb/Mii/IStaticService.cs
@@ -0,0 +1,9 @@
+namespace Ryujinx.HLE.HOS.Services.Sdb.Mii
+{
+ [Service("mii:e")]
+ [Service("mii:u")]
+ class IStaticService : IpcService
+ {
+ public IStaticService(ServiceCtx context) { }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Pdm/INotifyService.cs b/Ryujinx.HLE/HOS/Services/Sdb/Pdm/INotifyService.cs
new file mode 100644
index 00000000..5247a238
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Sdb/Pdm/INotifyService.cs
@@ -0,0 +1,8 @@
+namespace Ryujinx.HLE.HOS.Services.Sdb.Pdm
+{
+ [Service("pdm:ntfy")]
+ class INotifyService : IpcService
+ {
+ public INotifyService(ServiceCtx context) { }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Pdm/IQueryService.cs b/Ryujinx.HLE/HOS/Services/Sdb/Pdm/IQueryService.cs
new file mode 100644
index 00000000..61b26b8c
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Sdb/Pdm/IQueryService.cs
@@ -0,0 +1,8 @@
+namespace Ryujinx.HLE.HOS.Services.Sdb.Pdm
+{
+ [Service("pdm:qry")]
+ class IQueryService : IpcService
+ {
+ public IQueryService(ServiceCtx context) { }
+ }
+} \ No newline at end of file
diff --git a/Ryujinx.HLE/HOS/Services/Sdb/Pl/ISharedFontManager.cs b/Ryujinx.HLE/HOS/Services/Sdb/Pl/ISharedFontManager.cs
new file mode 100644
index 00000000..4560d954
--- /dev/null
+++ b/Ryujinx.HLE/HOS/Services/Sdb/Pl/ISharedFontManager.cs
@@ -0,0 +1,128 @@
+using Ryujinx.HLE.HOS.Font;
+using Ryujinx.HLE.HOS.Ipc;
+using Ryujinx.HLE.HOS.Kernel.Common;
+using System;
+
+namespace Ryujinx.HLE.HOS.Services.Sdb.Pl
+{
+ [Service("pl:u")]
+ [Service("pl:s")] // 9.0.0+
+ class ISharedFontManager : IpcService
+ {
+ public ISharedFontManager(ServiceCtx context) { }
+
+ [Command(0)]
+ // RequestLoad(u32)
+ public ResultCode RequestLoad(ServiceCtx context)
+ {
+ SharedFontType fontType = (SharedFontType)context.RequestData.ReadInt32();
+
+ // We don't need to do anything here because we do lazy initialization
+ // on SharedFontManager (the font is loaded when necessary).
+ return ResultCode.Success;
+ }
+
+ [Command(1)]
+ // GetLoadState(u32) -> u32
+ public ResultCode GetLoadState(ServiceCtx context)
+ {
+ SharedFontType fontType = (SharedFontType)context.RequestData.ReadInt32();
+
+ // 1 (true) indicates that the font is already loaded.
+ // All fonts are already loaded.
+ context.ResponseData.Write(1);
+
+ return ResultCode.Success;
+ }
+
+ [Command(2)]
+ // GetFontSize(u32) -> u32
+ public ResultCode GetFontSize(ServiceCtx context)
+ {
+ SharedFontType fontType = (SharedFontType)context.RequestData.ReadInt32();
+
+ context.ResponseData.Write(context.Device.System.Font.GetFontSize(fontType));
+
+ return ResultCode.Success;
+ }
+
+ [Command(3)]
+ // GetSharedMemoryAddressOffset(u32) -> u32
+ public ResultCode GetSharedMemoryAddressOffset(ServiceCtx context)
+ {
+ SharedFontType fontType = (SharedFontType)context.RequestData.ReadInt32();
+
+ context.ResponseData.Write(context.Device.System.Font.GetSharedMemoryAddressOffset(fontType));
+
+ return ResultCode.Success;
+ }
+
+ [Command(4)]
+ // GetSharedMemoryNativeHandle() -> handle<copy>
+ public ResultCode GetSharedMemoryNativeHandle(ServiceCtx context)
+ {
+ context.Device.System.Font.EnsureInitialized(context.Device.System.ContentManager);
+
+ if (context.Process.HandleTable.GenerateHandle(context.Device.System.FontSharedMem, out int handle) != KernelResult.Success)
+ {
+ throw new InvalidOperationException("Out of handles!");
+ }
+
+ context.Response.HandleDesc = IpcHandleDesc.MakeCopy(handle);
+
+ return ResultCode.Success;
+ }
+
+ [Command(5)]
+ // GetSharedFontInOrderOfPriority(bytes<8, 1>) -> (u8, u32, buffer<unknown, 6>, buffer<unknown, 6>, buffer<unknown, 6>)
+ public ResultCode GetSharedFontInOrderOfPriority(ServiceCtx context)
+ {
+ long languageCode = context.RequestData.ReadInt64();
+ int loadedCount = 0;
+
+ for (SharedFontType type = 0; type < SharedFontType.Count; type++)
+ {
+ int offset = (int)type * 4;
+
+ if (!AddFontToOrderOfPriorityList(context, type, offset))
+ {
+ break;
+ }
+
+ loadedCount++;
+ }
+
+ context.ResponseData.Write(loadedCount);
+ context.ResponseData.Write((int)SharedFontType.Count);
+
+ return ResultCode.Success;
+ }
+
+ private bool AddFontToOrderOfPriorityList(ServiceCtx context, SharedFontType fontType, int offset)
+ {
+ long typesPosition = context.Request.ReceiveBuff[0].Position;
+ long typesSize = context.Request.ReceiveBuff[0].Size;
+
+ long offsetsPosition = context.Request.ReceiveBuff[1].Position;
+ long offsetsSize = context.Request.ReceiveBuff[1].Size;
+
+ long fontSizeBufferPosition = context.Request.ReceiveBuff[2].Position;
+ long fontSizeBufferSize = context.Request.ReceiveBuff[2].Size;
+
+ if ((uint)offset + 4 > (uint)typesSize ||
+ (uint)offset + 4 > (uint)offsetsSize ||
+ (uint)offset + 4 > (uint)fontSizeBufferSize)
+ {
+ return false;
+ }
+
+ context.Memory.WriteInt32(typesPosition + offset, (int)fontType);
+
+ context.Memory.WriteInt32(offsetsPosition + offset, context.Device.System.Font.GetSharedMemoryAddressOffset(fontType));
+
+ context.Memory.WriteInt32(fontSizeBufferPosition + offset, context.Device.System.Font.GetFontSize(fontType));
+
+ return true;
+ }
+ }
+} \ No newline at end of file