kernel/process_capability: Handle program capability flags
This commit is contained in:
		
							parent
							
								
									0f216d20e3
								
							
						
					
					
						commit
						010bc677f3
					
				@ -31,6 +31,7 @@ constexpr ResultCode ERR_NOT_FOUND{ErrorModule::Kernel, 121};
 | 
			
		||||
constexpr ResultCode ERR_ALREADY_REGISTERED{ErrorModule::Kernel, 122};
 | 
			
		||||
constexpr ResultCode ERR_SESSION_CLOSED_BY_REMOTE{ErrorModule::Kernel, 123};
 | 
			
		||||
constexpr ResultCode ERR_INVALID_STATE{ErrorModule::Kernel, 125};
 | 
			
		||||
constexpr ResultCode ERR_RESERVED_VALUE{ErrorModule::Kernel, 126};
 | 
			
		||||
constexpr ResultCode ERR_RESOURCE_LIMIT_EXCEEDED{ErrorModule::Kernel, 132};
 | 
			
		||||
 | 
			
		||||
} // namespace Kernel
 | 
			
		||||
 | 
			
		||||
@ -200,6 +200,8 @@ void ProcessCapabilities::Clear() {
 | 
			
		||||
    handle_table_size = 0;
 | 
			
		||||
    kernel_version = 0;
 | 
			
		||||
 | 
			
		||||
    program_type = ProgramType::SysModule;
 | 
			
		||||
 | 
			
		||||
    is_debuggable = false;
 | 
			
		||||
    can_force_debug = false;
 | 
			
		||||
}
 | 
			
		||||
@ -303,7 +305,12 @@ ResultCode ProcessCapabilities::HandleInterruptFlags(u32 flags) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
ResultCode ProcessCapabilities::HandleProgramTypeFlags(u32 flags) {
 | 
			
		||||
    // TODO: Implement
 | 
			
		||||
    const u32 reserved = flags >> 17;
 | 
			
		||||
    if (reserved != 0) {
 | 
			
		||||
        return ERR_RESERVED_VALUE;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    program_type = static_cast<ProgramType>((flags >> 14) & 0b111);
 | 
			
		||||
    return RESULT_SUCCESS;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -14,6 +14,14 @@ namespace Kernel {
 | 
			
		||||
 | 
			
		||||
class VMManager;
 | 
			
		||||
 | 
			
		||||
/// The possible types of programs that may be indicated
 | 
			
		||||
/// by the program type capability descriptor.
 | 
			
		||||
enum class ProgramType {
 | 
			
		||||
    SysModule,
 | 
			
		||||
    Application,
 | 
			
		||||
    Applet,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/// Handles kernel capability descriptors that are provided by
 | 
			
		||||
/// application metadata. These descriptors provide information
 | 
			
		||||
/// that alters certain parameters for kernel process instance
 | 
			
		||||
@ -137,6 +145,16 @@ public:
 | 
			
		||||
        return svc_capabilities;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Gets the valid interrupt bits.
 | 
			
		||||
    const InterruptCapabilities& GetInterruptCapabilities() const {
 | 
			
		||||
        return interrupt_capabilities;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /// Gets the program type for this process.
 | 
			
		||||
    ProgramType GetProgramType() const {
 | 
			
		||||
        return program_type;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    /// Attempts to parse a given sequence of capability descriptors.
 | 
			
		||||
    ///
 | 
			
		||||
@ -215,7 +233,8 @@ private:
 | 
			
		||||
 | 
			
		||||
    u32 handle_table_size = 0;
 | 
			
		||||
    u32 kernel_version = 0;
 | 
			
		||||
    u32 program_type = 0;
 | 
			
		||||
 | 
			
		||||
    ProgramType program_type = ProgramType::SysModule;
 | 
			
		||||
 | 
			
		||||
    bool is_debuggable = false;
 | 
			
		||||
    bool can_force_debug = false;
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user