libnx/nx/source/kernel/svc.s
2022-10-11 20:18:30 -07:00

811 lines
10 KiB
ArmAsm

.macro SVC_BEGIN name
.section .text.\name, "ax", %progbits
.global \name
.type \name, %function
.align 2
.cfi_startproc
\name:
.endm
.macro SVC_END
.cfi_endproc
.endm
SVC_BEGIN svcSetHeapSize
str x0, [sp, #-16]!
svc 0x1
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcSetMemoryPermission
svc 0x2
ret
SVC_END
SVC_BEGIN svcSetMemoryAttribute
svc 0x3
ret
SVC_END
SVC_BEGIN svcMapMemory
svc 0x4
ret
SVC_END
SVC_BEGIN svcUnmapMemory
svc 0x5
ret
SVC_END
SVC_BEGIN svcQueryMemory
str x1, [sp, #-16]!
svc 0x6
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcExitProcess
svc 0x7
ret
SVC_END
SVC_BEGIN svcCreateThread
str x0, [sp, #-16]!
svc 0x8
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcStartThread
svc 0x9
ret
SVC_END
SVC_BEGIN svcExitThread
svc 0xA
ret
SVC_END
SVC_BEGIN svcSleepThread
svc 0xB
ret
SVC_END
SVC_BEGIN svcGetThreadPriority
str x0, [sp, #-16]!
svc 0xC
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcSetThreadPriority
svc 0xD
ret
SVC_END
SVC_BEGIN svcGetThreadCoreMask
stp x0, x1, [sp, #-16]!
svc 0xE
ldp x3, x4, [sp], #16
str w1, [x3]
str x2, [x4]
ret
SVC_END
SVC_BEGIN svcSetThreadCoreMask
svc 0xF
ret
SVC_END
SVC_BEGIN svcGetCurrentProcessorNumber
svc 0x10
ret
SVC_END
SVC_BEGIN svcSignalEvent
svc 0x11
ret
SVC_END
SVC_BEGIN svcClearEvent
svc 0x12
ret
SVC_END
SVC_BEGIN svcMapSharedMemory
svc 0x13
ret
SVC_END
SVC_BEGIN svcUnmapSharedMemory
svc 0x14
ret
SVC_END
SVC_BEGIN svcCreateTransferMemory
str x0, [sp, #-16]!
svc 0x15
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcCloseHandle
svc 0x16
ret
SVC_END
SVC_BEGIN svcResetSignal
svc 0x17
ret
SVC_END
SVC_BEGIN svcWaitSynchronization
str x0, [sp, #-16]!
svc 0x18
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcCancelSynchronization
svc 0x19
ret
SVC_END
SVC_BEGIN svcArbitrateLock
svc 0x1A
ret
SVC_END
SVC_BEGIN svcArbitrateUnlock
svc 0x1B
ret
SVC_END
SVC_BEGIN svcWaitProcessWideKeyAtomic
svc 0x1C
ret
SVC_END
SVC_BEGIN svcSignalProcessWideKey
svc 0x1D
ret
SVC_END
SVC_BEGIN svcGetSystemTick
svc 0x1E
ret
SVC_END
SVC_BEGIN svcConnectToNamedPort
str x0, [sp, #-16]!
svc 0x1F
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcSendSyncRequestLight
svc 0x20
ret
SVC_END
SVC_BEGIN svcSendSyncRequest
svc 0x21
ret
SVC_END
SVC_BEGIN svcSendSyncRequestWithUserBuffer
svc 0x22
ret
SVC_END
SVC_BEGIN svcSendAsyncRequestWithUserBuffer
str x0, [sp, #-16]!
svc 0x23
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcGetProcessId
str x0, [sp, #-16]!
svc 0x24
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcGetThreadId
str x0, [sp, #-16]!
svc 0x25
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcBreak
svc 0x26
ret
SVC_END
SVC_BEGIN svcOutputDebugString
svc 0x27
ret
SVC_END
SVC_BEGIN svcReturnFromException
svc 0x28
ret
SVC_END
SVC_BEGIN svcGetInfo
str x0, [sp, #-16]!
svc 0x29
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcFlushEntireDataCache
svc 0x2A
ret
SVC_END
SVC_BEGIN svcFlushDataCache
svc 0x2B
ret
SVC_END
SVC_BEGIN svcMapPhysicalMemory
svc 0x2C
ret
SVC_END
SVC_BEGIN svcUnmapPhysicalMemory
svc 0x2D
ret
SVC_END
SVC_BEGIN svcGetDebugFutureThreadInfo
stp x0, x1, [sp, #-16]!
svc 0x2E
ldp x6, x7, [sp], #16
stp x1, x2, [x6]
stp x3, x4, [x6, #16]
str x5, [x7]
ret
SVC_END
SVC_BEGIN svcGetLastThreadInfo
stp x1, x2, [sp, #-16]!
str x0, [sp, #-16]!
svc 0x2F
ldr x7, [sp], #16
stp x1, x2, [x7]
stp x3, x4, [x7, #16]
ldp x1, x2, [sp], #16
str x5, [x1]
str w6, [x2]
ret
SVC_END
SVC_BEGIN svcGetResourceLimitLimitValue
str x0, [sp, #-16]!
svc 0x30
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcGetResourceLimitCurrentValue
str x0, [sp, #-16]!
svc 0x31
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcSetThreadActivity
svc 0x32
ret
SVC_END
SVC_BEGIN svcGetThreadContext3
svc 0x33
ret
SVC_END
SVC_BEGIN svcWaitForAddress
svc 0x34
ret
SVC_END
SVC_BEGIN svcSignalToAddress
svc 0x35
ret
SVC_END
SVC_BEGIN svcSynchronizePreemptionState
svc 0x36
ret
SVC_END
SVC_BEGIN svcGetResourceLimitPeakValue
str x0, [sp, #-16]!
svc 0x37
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcCreateIoPool
str x0, [sp, #-16]!
svc 0x39
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcCreateIoRegion
str x0, [sp, #-16]!
svc 0x3A
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcDumpInfo
svc 0x3C
ret
SVC_END
SVC_BEGIN svcKernelDebug
svc 0x3C
ret
SVC_END
SVC_BEGIN svcChangeKernelTraceState
svc 0x3D
ret
SVC_END
SVC_BEGIN svcCreateSession
stp x0, x1, [sp, #-16]!
svc 0x40
ldp x3, x4, [sp], #16
str w1, [x3]
str w2, [x4]
ret
SVC_END
SVC_BEGIN svcAcceptSession
str x0, [sp, #-16]!
svc 0x41
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcReplyAndReceiveLight
svc 0x42
ret
SVC_END
SVC_BEGIN svcReplyAndReceive
str x0, [sp, #-16]!
svc 0x43
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcReplyAndReceiveWithUserBuffer
str x0, [sp, #-16]!
svc 0x44
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcCreateEvent
stp x0, x1, [sp, #-16]!
svc 0x45
ldp x3, x4, [sp], #16
str w1, [x3]
str w2, [x4]
ret
SVC_END
SVC_BEGIN svcMapIoRegion
svc 0x46
ret
SVC_END
SVC_BEGIN svcUnmapIoRegion
svc 0x47
ret
SVC_END
SVC_BEGIN svcMapPhysicalMemoryUnsafe
svc 0x48
ret
SVC_END
SVC_BEGIN svcUnmapPhysicalMemoryUnsafe
svc 0x49
ret
SVC_END
SVC_BEGIN svcSetUnsafeLimit
svc 0x4A
ret
SVC_END
SVC_BEGIN svcCreateCodeMemory
str x0, [sp, #-16]!
svc 0x4B
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcControlCodeMemory
svc 0x4C
ret
SVC_END
SVC_BEGIN svcSleepSystem
svc 0x4D
ret
SVC_END
SVC_BEGIN svcReadWriteRegister
str x0, [sp, #-16]!
svc 0x4E
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcSetProcessActivity
svc 0x4F
ret
SVC_END
SVC_BEGIN svcCreateSharedMemory
str x0, [sp, #-16]!
svc 0x50
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcMapTransferMemory
svc 0x51
ret
SVC_END
SVC_BEGIN svcUnmapTransferMemory
svc 0x52
ret
SVC_END
SVC_BEGIN svcCreateInterruptEvent
str x0, [sp, #-16]!
svc 0x53
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcQueryPhysicalAddress
str x0, [sp, #-16]!
svc 0x54
ldr x4, [sp], #16
stp x1, x2, [x4]
str x3, [x4, #16]
ret
SVC_END
SVC_BEGIN svcQueryIoMapping
stp x0, x1, [sp, #-16]!
svc 0x55
ldp x3, x4, [sp], #16
str x1, [x3]
str x2, [x4]
ret
SVC_END
SVC_BEGIN svcLegacyQueryIoMapping
str x0, [sp, #-16]!
svc 0x55
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcCreateDeviceAddressSpace
str x0, [sp, #-16]!
svc 0x56
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcAttachDeviceAddressSpace
svc 0x57
ret
SVC_END
SVC_BEGIN svcDetachDeviceAddressSpace
svc 0x58
ret
SVC_END
SVC_BEGIN svcMapDeviceAddressSpaceByForce
svc 0x59
ret
SVC_END
SVC_BEGIN svcMapDeviceAddressSpaceAligned
svc 0x5A
ret
SVC_END
SVC_BEGIN svcMapDeviceAddressSpace
str x0, [sp, #-16]!
svc 0x5B
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcUnmapDeviceAddressSpace
svc 0x5C
ret
SVC_END
SVC_BEGIN svcInvalidateProcessDataCache
svc 0x5D
ret
SVC_END
SVC_BEGIN svcStoreProcessDataCache
svc 0x5E
ret
SVC_END
SVC_BEGIN svcFlushProcessDataCache
svc 0x5F
ret
SVC_END
SVC_BEGIN svcDebugActiveProcess
str x0, [sp, #-16]!
svc 0x60
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcBreakDebugProcess
svc 0x61
ret
SVC_END
SVC_BEGIN svcTerminateDebugProcess
svc 0x62
ret
SVC_END
SVC_BEGIN svcGetDebugEvent
svc 0x63
ret
SVC_END
SVC_BEGIN svcLegacyContinueDebugEvent
svc 0x64
ret
SVC_END
SVC_BEGIN svcContinueDebugEvent
svc 0x64
ret
SVC_END
SVC_BEGIN svcGetProcessList
str x0, [sp, #-16]!
svc 0x65
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcGetThreadList
str x0, [sp, #-16]!
svc 0x66
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcGetDebugThreadContext
svc 0x67
ret
SVC_END
SVC_BEGIN svcSetDebugThreadContext
svc 0x68
ret
SVC_END
SVC_BEGIN svcQueryDebugProcessMemory
str x1, [sp, #-16]!
svc 0x69
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcReadDebugProcessMemory
svc 0x6A
ret
SVC_END
SVC_BEGIN svcWriteDebugProcessMemory
svc 0x6B
ret
SVC_END
SVC_BEGIN svcSetHardwareBreakPoint
svc 0x6C
ret
SVC_END
SVC_BEGIN svcGetDebugThreadParam
stp x0, x1, [sp, #-16]!
svc 0x6D
ldp x3, x4, [sp], #16
str x1, [x3]
str w2, [x4]
ret
SVC_END
SVC_BEGIN svcGetSystemInfo
str x0, [sp, #-16]!
svc 0x6F
ldr x2, [sp], #16
str x1, [x2]
ret
SVC_END
SVC_BEGIN svcCreatePort
stp x0, x1, [sp, #-16]!
svc 0x70
ldp x3, x4, [sp], #16
str w1, [x3]
str w2, [x4]
ret
SVC_END
SVC_BEGIN svcManageNamedPort
str x0, [sp, #-16]!
svc 0x71
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcConnectToPort
str x0, [sp, #-16]!
svc 0x72
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcSetProcessMemoryPermission
svc 0x73
ret
SVC_END
SVC_BEGIN svcMapProcessMemory
svc 0x74
ret
SVC_END
SVC_BEGIN svcUnmapProcessMemory
svc 0x75
ret
SVC_END
SVC_BEGIN svcQueryProcessMemory
str x1, [sp, #-16]!
svc 0x76
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcMapProcessCodeMemory
svc 0x77
ret
SVC_END
SVC_BEGIN svcUnmapProcessCodeMemory
svc 0x78
ret
SVC_END
SVC_BEGIN svcCreateProcess
str x0, [sp, #-16]!
svc 0x79
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcStartProcess
svc 0x7A
ret
SVC_END
SVC_BEGIN svcTerminateProcess
svc 0x7B
ret
SVC_END
SVC_BEGIN svcGetProcessInfo
str x0, [sp, #-16]!
svc 0x7C
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcCreateResourceLimit
str x0, [sp, #-16]!
svc 0x7D
ldr x2, [sp], #16
str w1, [x2]
ret
SVC_END
SVC_BEGIN svcSetResourceLimitLimitValue
svc 0x7E
ret
SVC_END
SVC_BEGIN svcCallSecureMonitor
str x0, [sp, #-16]!
mov x8, x0
ldp x0, x1, [x8]
ldp x2, x3, [x8, #0x10]
ldp x4, x5, [x8, #0x20]
ldp x6, x7, [x8, #0x30]
svc 0x7F
ldr x8, [sp], #16
stp x0, x1, [x8]
stp x2, x3, [x8, #0x10]
stp x4, x5, [x8, #0x20]
stp x6, x7, [x8, #0x30]
ret
SVC_END
SVC_BEGIN svcMapInsecureMemory
svc 0x90
ret
SVC_END
SVC_BEGIN svcUnmapInsecureMemory
svc 0x91
ret
SVC_END