mirror of
https://github.com/switchbrew/libnx.git
synced 2025-06-20 20:22:38 +02:00
105 lines
5.0 KiB
C
105 lines
5.0 KiB
C
/**
|
|
* @file svc.h
|
|
* @brief Syscall wrappers.
|
|
* @copyright libnx Authors
|
|
*/
|
|
#pragma once
|
|
#include "../types.h"
|
|
|
|
/// Pseudo handle for the current process
|
|
#define CUR_PROCESS_HANDLE 0xFFFF8001
|
|
|
|
/// Pseudo handle for the current thread
|
|
#define CUR_THREAD_HANDLE 0xFFFF8000
|
|
|
|
typedef struct {
|
|
u64 addr;
|
|
u64 size;
|
|
u32 type;
|
|
u32 attr;
|
|
u32 perm;
|
|
u32 device_refcount;
|
|
u32 ipc_refcount;
|
|
u32 padding;
|
|
} MemoryInfo;
|
|
|
|
typedef struct {
|
|
u64 X[8];
|
|
} PACKED SecmonArgs;
|
|
|
|
typedef enum {
|
|
JitMapOperation_MapOwner=0,
|
|
JitMapOperation_MapSlave=1,
|
|
JitMapOperation_UnmapOwner=2,
|
|
JitMapOperation_UnmapSlave=3
|
|
} JitMapOperation;
|
|
|
|
Result svcSetHeapSize(void** out_addr, u64 size);
|
|
Result svcSetMemoryPermission(void* addr, u64 size, u32 perm);
|
|
Result svcSetMemoryAttribute(void* addr, u64 size, u32 val0, u32 val1);
|
|
Result svcMapMemory(void* dst_addr, void* src_addr, u64 size);
|
|
Result svcUnmapMemory(void* dst_addr, void* src_addr, u64 size);
|
|
Result svcQueryMemory(MemoryInfo* meminfo_ptr, u32 *pageinfo, u64 addr);
|
|
void NORETURN svcExitProcess(void);
|
|
Result svcCreateThread(Handle* out, void* entry, void* arg, void* stack_top, int prio, int cpuid);
|
|
Result svcStartThread(Handle handle);
|
|
void NORETURN svcExitThread(void);
|
|
Result svcSleepThread(u64 nano);
|
|
Result svcClearEvent(Handle handle);
|
|
Result svcCloseHandle(Handle handle);
|
|
Result svcResetSignal(Handle handle);
|
|
Result svcMapSharedMemory(Handle handle, void* addr, size_t size, u32 perm);
|
|
Result svcUnmapSharedMemory(Handle handle, void* addr, size_t size);
|
|
Result svcCreateTransferMemory(Handle* out, void* addr, size_t size, u32 perm);
|
|
Result svcWaitSynchronization(s32* index, const Handle* handles, s32 handleCount, u64 timeout);
|
|
Result svcCancelSynchronization(Handle thread);
|
|
Result svcArbitrateLock(u32 wait_tag, u32* tag_location, u32 self_tag);
|
|
Result svcArbitrateUnlock(u32* tag_location);
|
|
Result svcWaitProcessWideKeyAtomic(u32* key, u32* tag_location, u32 self_tag, u64 timeout);
|
|
Result svcSignalProcessWideKey(u32* key, s32 num);
|
|
Result svcConnectToNamedPort(Handle* session, const char* name);
|
|
u64 svcGetSystemTick(void);
|
|
Result svcSendSyncRequest(Handle session);
|
|
Result svcGetProcessId(u64 *processID, Handle handle);
|
|
Result svcBreak(u32 breakReason, u64 inval1, u64 inval2);
|
|
Result svcOutputDebugString(const char *str, u64 size);
|
|
Result svcGetInfo(u64* out, u64 id0, Handle handle, u64 id1);
|
|
Result svcSetThreadActivity(Handle thread, bool paused);
|
|
Result svcCreateSession(Handle *server_handle, Handle *client_handle, u32 unk0, u64 unk1);//unk* are normally 0?
|
|
Result svcAcceptSession(Handle *session_handle, Handle port_handle);
|
|
Result svcReplyAndReceive(s32* index, const Handle* handles, s32 handleCount, Handle replyTarget, u64 timeout);
|
|
Result svcCreateJitMemory(Handle* jit_handle, void* src_addr, u64 size);
|
|
Result svcMapJitMemory(Handle jit_handle, JitMapOperation op, void* dst_addr, u64 size, u64 perm);
|
|
Result svcCreateSharedMemory(Handle* out, size_t size, u32 local_perm, u32 other_perm);
|
|
Result svcMapTransferMemory(Handle tmem_handle, void* addr, size_t size, u32 perm);
|
|
Result svcUnmapTransferMemory(Handle tmem_handle, void* addr, size_t size);
|
|
Result svcQueryPhysicalAddress(u64 out[3], u64 virtaddr);
|
|
Result svcQueryIoMapping(u64* virtaddr, u64 physaddr, u64 size);
|
|
Result svcCreateDeviceAddressSpace(Handle *handle, u64 dev_addr, u64 dev_size);
|
|
Result svcAttachDeviceAddressSpace(u64 device, Handle handle);
|
|
Result svcDetachDeviceAddressSpace(u64 device, Handle handle);
|
|
Result svcMapDeviceAddressSpaceAligned(Handle handle, Handle proc_handle, u64 dev_addr, u64 dev_size, u64 map_addr, u64 perm);
|
|
Result svcUnmapDeviceAddressSpace(Handle handle, Handle proc_handle, u64 map_addr, u64 map_size, u64 perm);
|
|
Result svcDebugActiveProcess(Handle* debug, u64 processID);
|
|
Result svcBreakDebugProcess(Handle debug);
|
|
Result svcGetDebugEvent(u8* event_out, Handle* debug);
|
|
Result svcContinueDebugEvent(Handle debug, u32 flags, u64 unk);
|
|
Result svcGetDebugThreadContext(u8* out, Handle debug, u64 threadID, u32 flags);
|
|
Result svcGetProcessList(u32 *num_out, u64 *pids_out, u32 max_pids);
|
|
Result svcQueryDebugProcessMemory(MemoryInfo* meminfo_ptr, u32* pageinfo, Handle debug, u64 addr);
|
|
Result svcReadDebugProcessMemory(void* buffer, Handle debug, u64 addr, u64 size);
|
|
Result svcWriteDebugProcessMemory(Handle debug, void* buffer, u64 addr, u64 size);
|
|
Result svcManageNamedPort(Handle* portServer, const char* name, s32 maxSessions);
|
|
Result svcSetProcessMemoryPermission(Handle proc, u64 addr, u64 size, u32 perm);
|
|
Result svcMapProcessMemory(void* dst, Handle proc, u64 src, u64 size);
|
|
Result svcMapProcessCodeMemory(Handle proc, u64 dst, u64 src, u64 size);
|
|
Result svcUnmapProcessCodeMemory(Handle proc, u64 dst, u64 src, u64 size);
|
|
Result svcCreateProcess(Handle* out, void* proc_info, u32* caps, u64 cap_num);
|
|
Result svcStartProcess(Handle proc, s32 main_prio, s32 default_cpu, u32 stack_size);
|
|
u64 svcCallSecureMonitor(SecmonArgs* regs);
|
|
|
|
static inline Result svcWaitSynchronizationSingle(Handle handle, u64 timeout) {
|
|
s32 tmp;
|
|
return svcWaitSynchronization(&tmp, &handle, 1, timeout);
|
|
}
|