124 lines
4.2 KiB
C
124 lines
4.2 KiB
C
/**
|
|
* @file pmapp.h
|
|
* @brief PM (Process Manager) application service.
|
|
*/
|
|
#pragma once
|
|
|
|
#include <3ds/services/fs.h>
|
|
#include <3ds/exheader.h>
|
|
|
|
/// Launch flags for PM launch commands.
|
|
enum {
|
|
PMLAUNCHFLAG_NORMAL_APPLICATION = BIT(0),
|
|
PMLAUNCHFLAG_LOAD_DEPENDENCIES = BIT(1),
|
|
PMLAUNCHFLAG_NOTIFY_TERMINATION = BIT(2),
|
|
PMLAUNCHFLAG_QUEUE_DEBUG_APPLICATION = BIT(3),
|
|
PMLAUNCHFLAG_TERMINATION_NOTIFICATION_MASK = 0xF0,
|
|
PMLAUNCHFLAG_FORCE_USE_O3DS_APP_MEM = BIT(8), ///< Forces the usage of the O3DS system mode app memory setting even if N3DS system mode is not "Legacy". Dev4 and Dev5 not supported. N3DS only.
|
|
PMLAUNCHFLAG_FORCE_USE_O3DS_MAX_APP_MEM = BIT(9), ///< In conjunction with the above, forces the 96MB app memory setting. N3DS only.
|
|
PMLAUNCHFLAG_USE_UPDATE_TITLE = BIT(16),
|
|
};
|
|
|
|
/// Initializes pm:app.
|
|
Result pmAppInit(void);
|
|
|
|
/// Exits pm:app.
|
|
void pmAppExit(void);
|
|
|
|
/**
|
|
* @brief Gets the current pm:app session handle.
|
|
* @return The current pm:app session handle.
|
|
*/
|
|
Handle *pmAppGetSessionHandle(void);
|
|
|
|
/**
|
|
* @brief Launches a title.
|
|
* @param programInfo Program information of the title.
|
|
* @param launchFlags Flags to launch the title with.
|
|
*/
|
|
Result PMAPP_LaunchTitle(const FS_ProgramInfo *programInfo, u32 launchFlags);
|
|
|
|
/**
|
|
* @brief Launches a title, applying patches.
|
|
* @param programInfo Program information of the title.
|
|
* @param programInfoUpdate Program information of the update title.
|
|
* @param launchFlags Flags to launch the title with.
|
|
*/
|
|
Result PMAPP_LaunchTitleUpdate(const FS_ProgramInfo *programInfo, const FS_ProgramInfo *programInfoUpdate, u32 launchFlags);
|
|
|
|
/**
|
|
* @brief Gets a title's ExHeader Arm11CoreInfo and SystemInfo flags.
|
|
* @param[out] outCoreInfo Pointer to write the ExHeader Arm11CoreInfo to.
|
|
* @param[out] outSiFlags Pointer to write the ExHeader SystemInfo flags to.
|
|
* @param programInfo Program information of the title.
|
|
*/
|
|
Result PMAPP_GetTitleExheaderFlags(ExHeader_Arm11CoreInfo* outCoreInfo, ExHeader_SystemInfoFlags* outSiFlags, const FS_ProgramInfo *programInfo);
|
|
|
|
/**
|
|
* @brief Sets the current FIRM launch parameters.
|
|
* @param size Size of the FIRM launch parameter buffer.
|
|
* @param in Buffer to retrieve the launch parameters from.
|
|
*/
|
|
Result PMAPP_SetFIRMLaunchParams(u32 size, const void* in);
|
|
|
|
/**
|
|
* @brief Gets the current FIRM launch parameters.
|
|
* @param size Size of the FIRM launch parameter buffer.
|
|
* @param[out] out Buffer to write the launch parameters to.
|
|
*/
|
|
Result PMAPP_GetFIRMLaunchParams(void *out, u32 size);
|
|
|
|
/**
|
|
* @brief Sets the current FIRM launch parameters.
|
|
* @param firmTidLow Low Title ID of the FIRM title to launch.
|
|
* @param size Size of the FIRM launch parameter buffer.
|
|
* @param in Buffer to retrieve the launch parameters from.
|
|
*/
|
|
Result PMAPP_LaunchFIRMSetParams(u32 firmTidLow, u32 size, const void* in);
|
|
|
|
/**
|
|
* @brief Terminate most processes, to prepare for a reboot or a shutdown.
|
|
* @param timeout Time limit in ns for process termination, after which the remaining processes are killed.
|
|
*/
|
|
Result PMAPP_PrepareForReboot(s64 timeout);
|
|
|
|
/**
|
|
* @brief Terminates the current Application
|
|
* @param timeout Timeout in nanoseconds
|
|
*/
|
|
Result PMAPP_TerminateCurrentApplication(s64 timeout);
|
|
|
|
/**
|
|
* @brief Terminates the processes having the specified titleId.
|
|
* @param titleId Title ID of the processes to terminate
|
|
* @param timeout Timeout in nanoseconds
|
|
*/
|
|
Result PMAPP_TerminateTitle(u64 titleId, s64 timeout);
|
|
|
|
/**
|
|
* @brief Terminates the specified process
|
|
* @param pid Process-ID of the process to terminate
|
|
* @param timeout Timeout in nanoseconds
|
|
*/
|
|
Result PMAPP_TerminateProcess(u32 pid, s64 timeout);
|
|
|
|
/**
|
|
* @brief Unregisters a process
|
|
* @param tid TitleID of the process to unregister
|
|
*/
|
|
Result PMAPP_UnregisterProcess(u64 tid);
|
|
|
|
/**
|
|
* @brief Sets the APPLICATION cputime reslimit.
|
|
* @param cpuTime Reslimit value.
|
|
* @note cpuTime can be no higher than reslimitdesc[0] & 0x7F in exheader (or 80 if the latter is 0).
|
|
*/
|
|
Result PMAPP_SetAppResourceLimit(s64 cpuTime);
|
|
|
|
/**
|
|
* @brief Gets the APPLICATION cputime reslimit.
|
|
* @param[out] cpuTime Pointer to write the reslimit value to.
|
|
*/
|
|
Result PMAPP_GetAppResourceLimit(s64 *outCpuTime);
|
|
|