kernel: process_capability: Add MapRegion capability
- Used by nx-hbloader
This commit is contained in:
parent
d84a93c987
commit
ec28d3c439
2 changed files with 12 additions and 0 deletions
|
@ -22,6 +22,7 @@ enum : u32 {
|
||||||
CapabilityOffset_Syscall = 4,
|
CapabilityOffset_Syscall = 4,
|
||||||
CapabilityOffset_MapPhysical = 6,
|
CapabilityOffset_MapPhysical = 6,
|
||||||
CapabilityOffset_MapIO = 7,
|
CapabilityOffset_MapIO = 7,
|
||||||
|
CapabilityOffset_MapRegion = 10,
|
||||||
CapabilityOffset_Interrupt = 11,
|
CapabilityOffset_Interrupt = 11,
|
||||||
CapabilityOffset_ProgramType = 13,
|
CapabilityOffset_ProgramType = 13,
|
||||||
CapabilityOffset_KernelVersion = 14,
|
CapabilityOffset_KernelVersion = 14,
|
||||||
|
@ -46,6 +47,7 @@ enum class CapabilityType : u32 {
|
||||||
Syscall = (1U << CapabilityOffset_Syscall) - 1,
|
Syscall = (1U << CapabilityOffset_Syscall) - 1,
|
||||||
MapPhysical = (1U << CapabilityOffset_MapPhysical) - 1,
|
MapPhysical = (1U << CapabilityOffset_MapPhysical) - 1,
|
||||||
MapIO = (1U << CapabilityOffset_MapIO) - 1,
|
MapIO = (1U << CapabilityOffset_MapIO) - 1,
|
||||||
|
MapRegion = (1U << CapabilityOffset_MapRegion) - 1,
|
||||||
Interrupt = (1U << CapabilityOffset_Interrupt) - 1,
|
Interrupt = (1U << CapabilityOffset_Interrupt) - 1,
|
||||||
ProgramType = (1U << CapabilityOffset_ProgramType) - 1,
|
ProgramType = (1U << CapabilityOffset_ProgramType) - 1,
|
||||||
KernelVersion = (1U << CapabilityOffset_KernelVersion) - 1,
|
KernelVersion = (1U << CapabilityOffset_KernelVersion) - 1,
|
||||||
|
@ -187,6 +189,8 @@ ResultCode ProcessCapabilities::ParseSingleFlagCapability(u32& set_flags, u32& s
|
||||||
return HandleSyscallFlags(set_svc_bits, flag);
|
return HandleSyscallFlags(set_svc_bits, flag);
|
||||||
case CapabilityType::MapIO:
|
case CapabilityType::MapIO:
|
||||||
return HandleMapIOFlags(flag, page_table);
|
return HandleMapIOFlags(flag, page_table);
|
||||||
|
case CapabilityType::MapRegion:
|
||||||
|
return HandleMapRegionFlags(flag, page_table);
|
||||||
case CapabilityType::Interrupt:
|
case CapabilityType::Interrupt:
|
||||||
return HandleInterruptFlags(flag);
|
return HandleInterruptFlags(flag);
|
||||||
case CapabilityType::ProgramType:
|
case CapabilityType::ProgramType:
|
||||||
|
@ -298,6 +302,11 @@ ResultCode ProcessCapabilities::HandleMapIOFlags(u32 flags, KPageTable& page_tab
|
||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ResultCode ProcessCapabilities::HandleMapRegionFlags(u32 flags, KPageTable& page_table) {
|
||||||
|
// TODO(Lioncache): Implement once the memory manager can handle this.
|
||||||
|
return RESULT_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
ResultCode ProcessCapabilities::HandleInterruptFlags(u32 flags) {
|
ResultCode ProcessCapabilities::HandleInterruptFlags(u32 flags) {
|
||||||
constexpr u32 interrupt_ignore_value = 0x3FF;
|
constexpr u32 interrupt_ignore_value = 0x3FF;
|
||||||
const u32 interrupt0 = (flags >> 12) & 0x3FF;
|
const u32 interrupt0 = (flags >> 12) & 0x3FF;
|
||||||
|
|
|
@ -231,6 +231,9 @@ private:
|
||||||
/// Handles flags related to mapping IO pages.
|
/// Handles flags related to mapping IO pages.
|
||||||
ResultCode HandleMapIOFlags(u32 flags, KPageTable& page_table);
|
ResultCode HandleMapIOFlags(u32 flags, KPageTable& page_table);
|
||||||
|
|
||||||
|
/// Handles flags related to mapping physical memory regions.
|
||||||
|
ResultCode HandleMapRegionFlags(u32 flags, KPageTable& page_table);
|
||||||
|
|
||||||
/// Handles flags related to the interrupt capability flags.
|
/// Handles flags related to the interrupt capability flags.
|
||||||
ResultCode HandleInterruptFlags(u32 flags);
|
ResultCode HandleInterruptFlags(u32 flags);
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue