mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-21 12:32:40 +02:00
ncm/pm: Added NcmProgramLocation, which is now used by pmshellLaunchProgram (which was renamed). Updated pm names to match wiki. Adjusted order in pm.c/pm.h / minor changes.
This commit is contained in:
parent
0d5e51757d
commit
a808c53efc
@ -132,6 +132,13 @@ typedef struct {
|
||||
u8 pad[7]; ///< [3.0.0+]
|
||||
} NcmRightsId;
|
||||
|
||||
/// ProgramLocation
|
||||
typedef struct {
|
||||
u64 titleID;
|
||||
u8 storageID; ///< \ref FsStorageId
|
||||
u8 pad[7];
|
||||
} NcmProgramLocation;
|
||||
|
||||
Result ncmInitialize(void);
|
||||
void ncmExit(void);
|
||||
Service* ncmGetServiceSession(void);
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include "../types.h"
|
||||
#include "../kernel/event.h"
|
||||
#include "../sf/service.h"
|
||||
#include "../services/ncm.h"
|
||||
|
||||
/// LaunchFlag
|
||||
typedef enum {
|
||||
@ -76,28 +77,6 @@ void pmbmExit();
|
||||
|
||||
Service* pmbmGetServiceSession(void);
|
||||
|
||||
Result pmdmntGetDebugProcesses(u32* out_count, u64* out_pids, size_t max_pids);
|
||||
Result pmdmntStartProcess(u64 pid);
|
||||
Result pmdmntGetTitlePid(u64* pid_out, u64 title_id);
|
||||
Result pmdmntEnableDebugForTitleId(Event* out, u64 title_id);
|
||||
Result pmdmntGetApplicationPid(u64* pid_out);
|
||||
Result pmdmntEnableDebugForApplication(Event* out);
|
||||
Result pmdmntDisableDebug(u32 which);
|
||||
|
||||
Result pminfoGetTitleId(u64* title_id_out, u64 pid);
|
||||
|
||||
Result pmshellLaunchProcess(u32 launch_flags, u64 titleID, u64 storageID, u64 *pid);
|
||||
Result pmshellTerminateProcessByProcessId(u64 processID);
|
||||
Result pmshellTerminateProcessByTitleId(u64 titleID);
|
||||
Result pmshellGetProcessEvent(Event* out); // Autoclear for pmshellProcessEvent is always true.
|
||||
Result pmshellGetProcessEventInfo(PmProcessEventInfo* out);
|
||||
Result pmshellFinalizeDeadProcess(u64 pid);
|
||||
Result pmshellClearProcessExceptionOccurred(u64 pid);
|
||||
Result pmshellNotifyBootFinished(void);
|
||||
Result pmshellGetApplicationPid(u64* pid_out);
|
||||
Result pmshellBoostSystemMemoryResourceLimit(u64 boost_size);
|
||||
Result pmshellBoostSystemThreadResourceLimit(void);
|
||||
|
||||
/**
|
||||
* @brief Gets the \ref PmBootMode.
|
||||
* @param[out] out \ref PmBootMode
|
||||
@ -108,3 +87,25 @@ Result pmbmGetBootMode(PmBootMode *out);
|
||||
* @brief Sets the \ref PmBootMode to ::PmBootMode_Maintenance.
|
||||
*/
|
||||
Result pmbmSetMaintenanceBoot(void);
|
||||
|
||||
Result pmdmntGetJitDebugProcessIdList(u32* out_count, u64* out_pids, size_t max_pids);
|
||||
Result pmdmntStartProcess(u64 pid);
|
||||
Result pmdmntGetProcessId(u64* pid_out, u64 title_id);
|
||||
Result pmdmntHookToCreateProcess(Event* out, u64 title_id);
|
||||
Result pmdmntGetApplicationProcessId(u64* pid_out);
|
||||
Result pmdmntHookToCreateApplicationProcess(Event* out);
|
||||
Result pmdmntClearHook(u32 which);
|
||||
|
||||
Result pminfoGetProgramId(u64* title_id_out, u64 pid);
|
||||
|
||||
Result pmshellLaunchProgram(u32 launch_flags, NcmProgramLocation *location, u64 *pid);
|
||||
Result pmshellTerminateProcess(u64 processID);
|
||||
Result pmshellTerminateProgram(u64 titleID);
|
||||
Result pmshellGetProcessEventHandle(Event* out); // Autoclear for pmshellProcessEvent is always true.
|
||||
Result pmshellGetProcessEventInfo(PmProcessEventInfo* out);
|
||||
Result pmshellCleanupProcess(u64 pid);
|
||||
Result pmshellClearJitDebugOccured(u64 pid);
|
||||
Result pmshellNotifyBootFinished(void);
|
||||
Result pmshellGetApplicationProcessIdForShell(u64* pid_out);
|
||||
Result pmshellBoostSystemMemoryResourceLimit(u64 boost_size);
|
||||
Result pmshellBoostSystemThreadResourceLimit(void);
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include "service_guard.h"
|
||||
#include "runtime/hosversion.h"
|
||||
#include "services/pm.h"
|
||||
#include "services/ncm.h"
|
||||
|
||||
#define PM_GENERATE_SERVICE_INIT(name) \
|
||||
static Service g_pm##name##Srv; \
|
||||
@ -26,7 +27,20 @@ PM_GENERATE_SERVICE_INIT(shell);
|
||||
PM_GENERATE_SERVICE_INIT(info);
|
||||
PM_GENERATE_SERVICE_INIT(bm);
|
||||
|
||||
Result pmdmntGetDebugProcesses(u32* out_count, u64* out_pids, size_t max_pids) {
|
||||
// pmbm
|
||||
|
||||
Result pmbmGetBootMode(PmBootMode *out) {
|
||||
_Static_assert(sizeof(*out) == sizeof(u32), "PmBootMode");
|
||||
return serviceDispatchOut(&g_pmbmSrv, 0, *out);
|
||||
}
|
||||
|
||||
Result pmbmSetMaintenanceBoot(void) {
|
||||
return serviceDispatch(&g_pmbmSrv, 1);
|
||||
}
|
||||
|
||||
// pmdmnt
|
||||
|
||||
Result pmdmntGetJitDebugProcessIdList(u32* out_count, u64* out_pids, size_t max_pids) {
|
||||
const u64 cmd_id = hosversionAtLeast(5,0,0) ? 0 : 1;
|
||||
return serviceDispatchOut(&g_pmdmntSrv, cmd_id, *out_count,
|
||||
.buffer_attrs = {
|
||||
@ -43,12 +57,12 @@ Result pmdmntStartProcess(u64 pid) {
|
||||
return serviceDispatchIn(&g_pmdmntSrv, cmd_id, pid);
|
||||
}
|
||||
|
||||
Result pmdmntGetTitlePid(u64* pid_out, u64 title_id) {
|
||||
Result pmdmntGetProcessId(u64* pid_out, u64 title_id) {
|
||||
const u64 cmd_id = hosversionAtLeast(5,0,0) ? 2 : 3;
|
||||
return serviceDispatchInOut(&g_pmdmntSrv, cmd_id, title_id, *pid_out);
|
||||
}
|
||||
|
||||
Result pmdmntEnableDebugForTitleId(Event* out_event, u64 title_id) {
|
||||
Result pmdmntHookToCreateProcess(Event* out_event, u64 title_id) {
|
||||
const u64 cmd_id = hosversionAtLeast(5,0,0) ? 3 : 4;
|
||||
Handle event = INVALID_HANDLE;
|
||||
Result rc = serviceDispatchIn(&g_pmdmntSrv, cmd_id, title_id,
|
||||
@ -60,12 +74,12 @@ Result pmdmntEnableDebugForTitleId(Event* out_event, u64 title_id) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result pmdmntGetApplicationPid(u64* pid_out) {
|
||||
Result pmdmntGetApplicationProcessId(u64* pid_out) {
|
||||
const u64 cmd_id = hosversionAtLeast(5,0,0) ? 4 : 5;
|
||||
return serviceDispatchOut(&g_pmdmntSrv, cmd_id, *pid_out);
|
||||
}
|
||||
|
||||
Result pmdmntEnableDebugForApplication(Event* out_event) {
|
||||
Result pmdmntHookToCreateApplicationProcess(Event* out_event) {
|
||||
const u64 cmd_id = hosversionAtLeast(5,0,0) ? 5 : 6;
|
||||
Handle event = INVALID_HANDLE;
|
||||
Result rc = serviceDispatch(&g_pmdmntSrv, cmd_id,
|
||||
@ -77,29 +91,37 @@ Result pmdmntEnableDebugForApplication(Event* out_event) {
|
||||
return rc;
|
||||
}
|
||||
|
||||
Result pmdmntDisableDebug(u32 which) {
|
||||
Result pmdmntClearHook(u32 which) {
|
||||
if (hosversionBefore(6,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||
return serviceDispatchIn(&g_pmdmntSrv, 6, which);
|
||||
}
|
||||
|
||||
Result pmshellLaunchProcess(u32 launch_flags, u64 titleID, u64 storageID, u64 *pid) {
|
||||
// pminfo
|
||||
|
||||
Result pminfoGetProgramId(u64* title_id_out, u64 pid) {
|
||||
return serviceDispatchInOut(&g_pminfoSrv, 0, pid, *title_id_out);
|
||||
}
|
||||
|
||||
// pmshell
|
||||
|
||||
Result pmshellLaunchProgram(u32 launch_flags, NcmProgramLocation *location, u64 *pid) {
|
||||
const struct {
|
||||
u32 launch_flags;
|
||||
u64 titleID;
|
||||
u64 storageID;
|
||||
} in = { launch_flags, titleID, storageID };
|
||||
u32 pad;
|
||||
NcmProgramLocation location;
|
||||
} in = { launch_flags, 0, *location };
|
||||
return serviceDispatchInOut(&g_pmshellSrv, 0, in, *pid);
|
||||
}
|
||||
|
||||
Result pmshellTerminateProcessByProcessId(u64 processID) {
|
||||
Result pmshellTerminateProcess(u64 processID) {
|
||||
return serviceDispatchIn(&g_pmshellSrv, 1, processID);
|
||||
}
|
||||
|
||||
Result pmshellTerminateProcessByTitleId(u64 titleID) {
|
||||
Result pmshellTerminateProgram(u64 titleID) {
|
||||
return serviceDispatchIn(&g_pmshellSrv, 2, titleID);
|
||||
}
|
||||
|
||||
Result pmshellGetProcessEvent(Event* out_event) {
|
||||
Result pmshellGetProcessEventHandle(Event* out_event) {
|
||||
Handle event = INVALID_HANDLE;
|
||||
Result rc = serviceDispatch(&g_pmshellSrv, 3,
|
||||
.out_handle_attrs = { SfOutHandleAttr_HipcCopy },
|
||||
@ -115,12 +137,12 @@ Result pmshellGetProcessEventInfo(PmProcessEventInfo* out) {
|
||||
return serviceDispatchOut(&g_pmshellSrv, 4, *out);
|
||||
}
|
||||
|
||||
Result pmshellFinalizeDeadProcess(u64 pid) {
|
||||
Result pmshellCleanupProcess(u64 pid) {
|
||||
if (hosversionAtLeast(5,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||
return serviceDispatchIn(&g_pmshellSrv, 5, pid);
|
||||
}
|
||||
|
||||
Result pmshellClearProcessExceptionOccurred(u64 pid) {
|
||||
Result pmshellClearJitDebugOccured(u64 pid) {
|
||||
if (hosversionAtLeast(5,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||
return serviceDispatchIn(&g_pmshellSrv, 6, pid);
|
||||
}
|
||||
@ -130,7 +152,7 @@ Result pmshellNotifyBootFinished(void) {
|
||||
return serviceDispatch(&g_pmshellSrv, cmd_id);
|
||||
}
|
||||
|
||||
Result pmshellGetApplicationPid(u64* pid_out) {
|
||||
Result pmshellGetApplicationProcessIdForShell(u64* pid_out) {
|
||||
const u64 cmd_id = hosversionAtLeast(5,0,0) ? 6 : 8;
|
||||
return serviceDispatchOut(&g_pmshellSrv, cmd_id, *pid_out);
|
||||
}
|
||||
@ -145,16 +167,3 @@ Result pmshellBoostSystemThreadResourceLimit(void) {
|
||||
if (hosversionBefore(7,0,0)) return MAKERESULT(Module_Libnx, LibnxError_IncompatSysVer);
|
||||
return serviceDispatch(&g_pmshellSrv, 8);
|
||||
}
|
||||
|
||||
Result pminfoGetTitleId(u64* title_id_out, u64 pid) {
|
||||
return serviceDispatchInOut(&g_pminfoSrv, 0, pid, *title_id_out);
|
||||
}
|
||||
|
||||
Result pmbmGetBootMode(PmBootMode *out) {
|
||||
_Static_assert(sizeof(*out) == sizeof(u32), "PmBootMode");
|
||||
return serviceDispatchOut(&g_pmbmSrv, 0, *out);
|
||||
}
|
||||
|
||||
Result pmbmSetMaintenanceBoot(void) {
|
||||
return serviceDispatch(&g_pmbmSrv, 1);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user