diff options
| -rw-r--r-- | src/core/hle/kernel/process_capability.cpp | 9 | ||||
| -rw-r--r-- | src/core/hle/kernel/process_capability.h | 3 |
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 | ||
| 305 | ResultCode ProcessCapabilities::HandleMapRegionFlags(u32 flags, KPageTable& page_table) { | ||
| 306 | // TODO(Lioncache): Implement once the memory manager can handle this. | ||
| 307 | return RESULT_SUCCESS; | ||
| 308 | } | ||
| 309 | |||
| 301 | ResultCode ProcessCapabilities::HandleInterruptFlags(u32 flags) { | 310 | ResultCode 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 | ||