summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorGravatar Mai M2021-05-25 03:26:22 -0400
committerGravatar GitHub2021-05-25 03:26:22 -0400
commitb6b73d9a5a2adc02ac9671907d66a99eb0f5fd47 (patch)
treef0cd9430f3c5ff5eb5ad8b0372b5fd85e2538928 /src
parentMerge pull request #6357 from lioncash/compression (diff)
parentkernel: process_capability: Add MapRegion capability (diff)
downloadyuzu-b6b73d9a5a2adc02ac9671907d66a99eb0f5fd47.tar.gz
yuzu-b6b73d9a5a2adc02ac9671907d66a99eb0f5fd47.tar.xz
yuzu-b6b73d9a5a2adc02ac9671907d66a99eb0f5fd47.zip
Merge pull request #6358 from Morph1984/k_map_region
kernel: process_capability: Add MapRegion capability
Diffstat (limited to 'src')
-rw-r--r--src/core/hle/kernel/process_capability.cpp9
-rw-r--r--src/core/hle/kernel/process_capability.h3
2 files changed, 12 insertions, 0 deletions
diff --git a/src/core/hle/kernel/process_capability.cpp b/src/core/hle/kernel/process_capability.cpp
index fcb8b1ea5..b2ceeceb3 100644
--- a/src/core/hle/kernel/process_capability.cpp
+++ b/src/core/hle/kernel/process_capability.cpp
@@ -22,6 +22,7 @@ enum : u32 {
22 CapabilityOffset_Syscall = 4, 22 CapabilityOffset_Syscall = 4,
23 CapabilityOffset_MapPhysical = 6, 23 CapabilityOffset_MapPhysical = 6,
24 CapabilityOffset_MapIO = 7, 24 CapabilityOffset_MapIO = 7,
25 CapabilityOffset_MapRegion = 10,
25 CapabilityOffset_Interrupt = 11, 26 CapabilityOffset_Interrupt = 11,
26 CapabilityOffset_ProgramType = 13, 27 CapabilityOffset_ProgramType = 13,
27 CapabilityOffset_KernelVersion = 14, 28 CapabilityOffset_KernelVersion = 14,
@@ -46,6 +47,7 @@ enum class CapabilityType : u32 {
46 Syscall = (1U << CapabilityOffset_Syscall) - 1, 47 Syscall = (1U << CapabilityOffset_Syscall) - 1,
47 MapPhysical = (1U << CapabilityOffset_MapPhysical) - 1, 48 MapPhysical = (1U << CapabilityOffset_MapPhysical) - 1,
48 MapIO = (1U << CapabilityOffset_MapIO) - 1, 49 MapIO = (1U << CapabilityOffset_MapIO) - 1,
50 MapRegion = (1U << CapabilityOffset_MapRegion) - 1,
49 Interrupt = (1U << CapabilityOffset_Interrupt) - 1, 51 Interrupt = (1U << CapabilityOffset_Interrupt) - 1,
50 ProgramType = (1U << CapabilityOffset_ProgramType) - 1, 52 ProgramType = (1U << CapabilityOffset_ProgramType) - 1,
51 KernelVersion = (1U << CapabilityOffset_KernelVersion) - 1, 53 KernelVersion = (1U << CapabilityOffset_KernelVersion) - 1,
@@ -187,6 +189,8 @@ ResultCode ProcessCapabilities::ParseSingleFlagCapability(u32& set_flags, u32& s
187 return HandleSyscallFlags(set_svc_bits, flag); 189 return HandleSyscallFlags(set_svc_bits, flag);
188 case CapabilityType::MapIO: 190 case CapabilityType::MapIO:
189 return HandleMapIOFlags(flag, page_table); 191 return HandleMapIOFlags(flag, page_table);
192 case CapabilityType::MapRegion:
193 return HandleMapRegionFlags(flag, page_table);
190 case CapabilityType::Interrupt: 194 case CapabilityType::Interrupt:
191 return HandleInterruptFlags(flag); 195 return HandleInterruptFlags(flag);
192 case CapabilityType::ProgramType: 196 case CapabilityType::ProgramType:
@@ -298,6 +302,11 @@ ResultCode ProcessCapabilities::HandleMapIOFlags(u32 flags, KPageTable& page_tab
298 return RESULT_SUCCESS; 302 return RESULT_SUCCESS;
299} 303}
300 304
305ResultCode ProcessCapabilities::HandleMapRegionFlags(u32 flags, KPageTable& page_table) {
306 // TODO(Lioncache): Implement once the memory manager can handle this.
307 return RESULT_SUCCESS;
308}
309
301ResultCode ProcessCapabilities::HandleInterruptFlags(u32 flags) { 310ResultCode ProcessCapabilities::HandleInterruptFlags(u32 flags) {
302 constexpr u32 interrupt_ignore_value = 0x3FF; 311 constexpr u32 interrupt_ignore_value = 0x3FF;
303 const u32 interrupt0 = (flags >> 12) & 0x3FF; 312 const u32 interrupt0 = (flags >> 12) & 0x3FF;
diff --git a/src/core/hle/kernel/process_capability.h b/src/core/hle/kernel/process_capability.h
index b7a9b2e45..2a7bf5505 100644
--- a/src/core/hle/kernel/process_capability.h
+++ b/src/core/hle/kernel/process_capability.h
@@ -231,6 +231,9 @@ private:
231 /// Handles flags related to mapping IO pages. 231 /// Handles flags related to mapping IO pages.
232 ResultCode HandleMapIOFlags(u32 flags, KPageTable& page_table); 232 ResultCode HandleMapIOFlags(u32 flags, KPageTable& page_table);
233 233
234 /// Handles flags related to mapping physical memory regions.
235 ResultCode HandleMapRegionFlags(u32 flags, KPageTable& page_table);
236
234 /// Handles flags related to the interrupt capability flags. 237 /// Handles flags related to the interrupt capability flags.
235 ResultCode HandleInterruptFlags(u32 flags); 238 ResultCode HandleInterruptFlags(u32 flags);
236 239