#pragma once

#include "utils.h"
#include "kernel.h"
#include "svc.h"

/// Operations for svcControlProcess
typedef enum ProcessOp
{
    PROCESSOP_GET_ALL_HANDLES,  ///< List all handles of the process, varg3 can be either 0 to fetch all handles, or token of the type to fetch
                                ///< svcControlProcess(handle, PROCESSOP_GET_ALL_HANDLES, (u32)&outBuf, 0)
    PROCESSOP_SET_MMU_TO_RWX,   ///< Set the whole memory of the process with rwx access
                                ///< svcControlProcess(handle, PROCESSOP_SET_MMU_TO_RWX, 0, 0)
    PROCESSOP_GET_ON_MEMORY_CHANGE_EVENT,
    PROCESSOP_GET_ON_EXIT_EVENT,
    PROCESSOP_GET_PA_FROM_VA,   ///< Get the physical address of the va within the process
                                ///< svcControlProcess(handle, PROCESSOP_GET_PA_FROM_VA, (u32)&outPa, va)
    PROCESSOP_SCHEDULE_THREADS,
} ProcessOp;

Result  ControlProcess(Handle process, ProcessOp op, u32 varg2, u32 varg3);