summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/svc/svc_cache.cpp
diff options
context:
space:
mode:
authorMai <mai.iam2048@gmail.com>2023-02-05 08:26:52 +0100
committerGitHub <noreply@github.com>2023-02-05 08:26:52 +0100
commit037300014385d7dd25029d7aac188f325f1e5bc3 (patch)
treebe79f36453a4735088d9230e02f426792077eeb4 /src/core/hle/kernel/svc/svc_cache.cpp
parentMerge pull request #9720 from SoRadGaming/discordPresenceUpdate (diff)
parentkernel/svc: Split implementations into separate files (diff)
downloadyuzu-037300014385d7dd25029d7aac188f325f1e5bc3.tar
yuzu-037300014385d7dd25029d7aac188f325f1e5bc3.tar.gz
yuzu-037300014385d7dd25029d7aac188f325f1e5bc3.tar.bz2
yuzu-037300014385d7dd25029d7aac188f325f1e5bc3.tar.lz
yuzu-037300014385d7dd25029d7aac188f325f1e5bc3.tar.xz
yuzu-037300014385d7dd25029d7aac188f325f1e5bc3.tar.zst
yuzu-037300014385d7dd25029d7aac188f325f1e5bc3.zip
Diffstat (limited to 'src/core/hle/kernel/svc/svc_cache.cpp')
-rw-r--r--src/core/hle/kernel/svc/svc_cache.cpp31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/core/hle/kernel/svc/svc_cache.cpp b/src/core/hle/kernel/svc/svc_cache.cpp
new file mode 100644
index 000000000..42167d35b
--- /dev/null
+++ b/src/core/hle/kernel/svc/svc_cache.cpp
@@ -0,0 +1,31 @@
+// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "core/core.h"
+#include "core/hle/kernel/k_process.h"
+#include "core/hle/kernel/svc.h"
+#include "core/hle/kernel/svc_results.h"
+#include "core/hle/kernel/svc_types.h"
+
+namespace Kernel::Svc {
+
+Result FlushProcessDataCache32(Core::System& system, Handle process_handle, u64 address, u64 size) {
+ // Validate address/size.
+ R_UNLESS(size > 0, ResultInvalidSize);
+ R_UNLESS(address == static_cast<uintptr_t>(address), ResultInvalidCurrentMemory);
+ R_UNLESS(size == static_cast<size_t>(size), ResultInvalidCurrentMemory);
+
+ // Get the process from its handle.
+ KScopedAutoObject process =
+ system.Kernel().CurrentProcess()->GetHandleTable().GetObject<KProcess>(process_handle);
+ R_UNLESS(process.IsNotNull(), ResultInvalidHandle);
+
+ // Verify the region is within range.
+ auto& page_table = process->PageTable();
+ R_UNLESS(page_table.Contains(address, size), ResultInvalidCurrentMemory);
+
+ // Perform the operation.
+ R_RETURN(system.Memory().FlushDataCache(*process, address, size));
+}
+
+} // namespace Kernel::Svc