forked from eden-emu/eden
		
	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…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Morph
						Morph