FreeRTOS-Kernel/portable/GCC/XEN_x86/x86-64/asm_src/syscall.asm

298 lines
9.9 KiB
NASM

; syscall
;
; Copyright (C) 2025 Advanced Micro Devices, Inc. or its affiliates. All Rights Reserved.
;
; SPDX-License-Identifier: MIT
;
; Permission is hereby granted, free of charge, to any person obtaining a copy of
; this software and associated documentation files (the "Software"), to deal in
; the Software without restriction, including without limitation the rights to
; use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
; the Software, and to permit persons to whom the Software is furnished to do so,
; subject to the following conditions:
;
; The above copyright notice and this permission notice shall be included in all
; copies or substantial portions of the Software.
;
; THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
; IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
; FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
; COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
; IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
; CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
;
section freertos_system_calls
%define SYSCALL_NUM_writec 0
%define SYSCALL_NUM_xTaskGetTickCount 1
%define SYSCALL_NUM_xTaskDelayUntil 2
%define SYSCALL_NUM_xQueueGenericSend 3
%define SYSCALL_NUM_xQueueReceive 4
%define SYSCALL_NUM_xTimerGenericCommandFromTask 5
%define SYSCALL_NUM_eTaskGetState 6
%define SYSCALL_NUM_pcQueueGetName 7
%define SYSCALL_NUM_pcTimerGetName 8
%define SYSCALL_NUM_pvTimerGetTimerID 9
%define SYSCALL_NUM_ulTaskGenericNotifyTake 10
%define SYSCALL_NUM_ulTaskGenericNotifyValueClear 11
%define SYSCALL_NUM_uxQueueMessagesWaiting 12
%define SYSCALL_NUM_uxQueueSpacesAvailable 13
%define SYSCALL_NUM_uxTaskGetNumberOfTasks 14
%define SYSCALL_NUM_uxTaskGetSystemState 15
%define SYSCALL_NUM_uxTaskPriorityGet 16
%define SYSCALL_NUM_uxTimerGetReloadMode 17
%define SYSCALL_NUM_vQueueAddToRegistry 18
%define SYSCALL_NUM_vQueueUnregisterQueue 19
%define SYSCALL_NUM_vTaskDelay 20
%define SYSCALL_NUM_vTaskGetInfo 21
%define SYSCALL_NUM_vTaskResume 22
%define SYSCALL_NUM_vTaskSetTimeOutState 23
%define SYSCALL_NUM_vTaskSuspend 24
%define SYSCALL_NUM_vTaskSuspendAll 25
%define SYSCALL_NUM_vTimerSetReloadMode 26
%define SYSCALL_NUM_vTimerSetTimerID 27
%define SYSCALL_NUM_xQueueAddToSet 28
%define SYSCALL_NUM_xQueueGiveMutexRecursive 29
%define SYSCALL_NUM_xQueuePeek 30
%define SYSCALL_NUM_xQueueRemoveFromSet 31
%define SYSCALL_NUM_xQueueSelectFromSet 32
%define SYSCALL_NUM_xQueueSemaphoreTake 33
%define SYSCALL_NUM_xQueueTakeMutexRecursive 34
%define SYSCALL_NUM_xTaskCheckForTimeOut 35
%define SYSCALL_NUM_xTaskGenericNotify 36
%define SYSCALL_NUM_xTaskGenericNotifyStateClear 37
%define SYSCALL_NUM_xTaskGenericNotifyWait 38
%define SYSCALL_NUM_xTaskGetCurrentTaskHandle 39
%define SYSCALL_NUM_xTaskGetSchedulerState 40
%define SYSCALL_NUM_xTimerGetExpiryTime 41
%define SYSCALL_NUM_xTimerGetPeriod 42
%define SYSCALL_NUM_xTimerGetTimerDaemonTaskHandle 43
%define SYSCALL_NUM_xTimerIsTimerActive 44
%define SYSCALL_NUM_xTaskAbortDelay 45
%define SYSCALL_NUM_xTaskGetHandle 46
%define SYSCALL_NUM_xEventGroupCreate 47
%define SYSCALL_NUM_xEventGroupWaitBits 48
%define SYSCALL_NUM_vEventGroupDelete 49
%define SYSCALL_NUM_xStreamBufferGenericCreate 50
%define SYSCALL_NUM_xStreamBufferReceive 51
%define SYSCALL_NUM_vStreamBufferDelete 52
%define SYSCALL_NUM_xQueueGetMutexHolder 53
%define SYSCALL_NUM_xEventGroupSync 54
%define SYSCALL_NUM_xEventGroupSetBits 55
%define SYSCALL_NUM_xEventGroupClearBits 56
%define SYSCALL_NUM_xStreamBufferSend 57
%define SYSCALL_NUM_xStreamBufferIsEmpty 58
%define SYSCALL_NUM_xStreamBufferNextMessageLengthBytes 59
%define SYSCALL_NUM_xStreamBufferIsFull 60
%define SYSCALL_NUM_xStreamBufferSpacesAvailable 61
%define SYSCALL_NUM_xStreamBufferReset 62
%define SYSCALL_NUM_xStreamBufferBytesAvailable 64
%macro SYSCALL_0 2
global %1
%1:
mov eax,%2
mov rdi,0
mov rsi,rsp
int 0x80
ret
%endmacro
%macro SYSCALL_1 2
global %1
%1:
sub rsp,8
mov eax, %2
mov [rsp],rdi
mov rdi,1
mov rsi,rsp
int 0x80
add rsp,8
ret
%endmacro
%macro SYSCALL_2 2
global %1
%1:
sub rsp,16
mov eax, %2
mov [rsp],rdi
mov [rsp+8],rsi
mov rdi,2
mov rsi,rsp
int 0x80
add rsp,16
ret
%endmacro
%macro SYSCALL_3 2
global %1
%1:
sub rsp,24
mov eax, %2
mov [rsp],rdi
mov [rsp+8],rsi
mov [rsp+16],rdx
mov rdi,3
mov rsi,rsp
int 0x80
add rsp,24
ret
%endmacro
%macro SYSCALL_4 2
global %1
%1:
sub rsp, 32
mov eax, %2
mov [rsp],rdi
mov [rsp+8],rsi
mov [rsp+16],rdx
mov [rsp+24],rcx
mov rdi,4
mov rsi,rsp
int 0x80
add rsp,32
ret
%endmacro
%macro SYSCALL_5 2
global %1
%1:
sub rsp, 40
mov eax, %2
mov [rsp],rdi
mov [rsp+8],rsi
mov [rsp+16],rdx
mov [rsp+24],rcx
mov [rsp+32],r8
mov rdi,5
mov rsi,rsp
int 0x80
add rsp,40
ret
%endmacro
%macro SYSCALL_6 2
global %1
%1:
sub rsp, 48
mov eax, %2
mov [rsp],rdi
mov [rsp+8],rsi
mov [rsp+16],rdx
mov [rsp+24],rcx
mov [rsp+32],r8
mov [rsp+40],r9
mov rdi,6
mov rsi,rsp
int 0x80
add rsp,48
ret
%endmacro
%macro SYSCALL_7 2
global %1
%1:
sub rsp, 56
mov eax, %7
mov [rsp],rdi
mov [rsp+8],rsi
mov [rsp+16],rdx
mov [rsp+24],rcx
mov [rsp+32],r8
mov [rsp+40],r9
mov rdi,6
mov rsi,rsp
int 0x80
add rsp,56
ret
%endmacro
SYSCALL_1 syscall_writec, SYSCALL_NUM_writec
SYSCALL_0 syscall_xTaskGetTickCount, SYSCALL_NUM_xTaskGetTickCount
SYSCALL_2 syscall_xTaskDelayUntil, SYSCALL_NUM_xTaskDelayUntil
SYSCALL_4 syscall_xQueueGenericSend, SYSCALL_NUM_xQueueGenericSend
SYSCALL_3 syscall_xQueueReceive, SYSCALL_NUM_xQueueReceive
SYSCALL_5 syscall_xTimerGenericCommandFromTask, SYSCALL_NUM_xQueueGenericSend
SYSCALL_1 syscall_eTaskGetState, SYSCALL_NUM_eTaskGetState
SYSCALL_1 syscall_pcQueueGetName, SYSCALL_NUM_pcQueueGetName
SYSCALL_1 syscall_pcTimerGetName, SYSCALL_NUM_pcTimerGetName
SYSCALL_1 syscall_pvTimerGetTimerID, SYSCALL_NUM_pvTimerGetTimerID
SYSCALL_3 syscall_ulTaskGenericNotifyTake, SYSCALL_NUM_ulTaskGenericNotifyTake
SYSCALL_3 syscall_ulTaskGenericNotifyValueClear, SYSCALL_NUM_ulTaskGenericNotifyValueClear
SYSCALL_1 syscall_uxQueueMessagesWaiting, SYSCALL_NUM_uxQueueMessagesWaiting
SYSCALL_1 syscall_uxQueueSpacesAvailable, SYSCALL_NUM_uxQueueSpacesAvailable
SYSCALL_0 syscall_uxTaskGetNumberOfTasks, SYSCALL_NUM_uxTaskGetNumberOfTasks
SYSCALL_3 syscall_uxTaskGetSystemState, SYSCALL_NUM_uxTaskGetSystemState
SYSCALL_1 syscall_uxTaskPriorityGet, SYSCALL_NUM_uxTaskPriorityGet
SYSCALL_1 syscall_uxTimerGetReloadMode, SYSCALL_NUM_uxTimerGetReloadMode
SYSCALL_2 syscall_vQueueAddToRegistry, SYSCALL_NUM_vQueueAddToRegistry
SYSCALL_1 syscall_vQueueUnregisterQueue, SYSCALL_NUM_vQueueUnregisterQueue
SYSCALL_1 syscall_vTaskDelay, SYSCALL_NUM_vTaskDelay
SYSCALL_4 syscall_vTaskGetInfo, SYSCALL_NUM_vTaskGetInfo
SYSCALL_1 syscall_vTaskResume, SYSCALL_NUM_vTaskResume
SYSCALL_1 syscall_vTaskSetTimeOutState, SYSCALL_NUM_vTaskSetTimeOutState
SYSCALL_1 syscall_vTaskSuspend, SYSCALL_NUM_vTaskSuspend
SYSCALL_0 syscall_vTaskSuspendAll, SYSCALL_NUM_vTaskSuspendAll
SYSCALL_2 syscall_vTimerSetReloadMode, SYSCALL_NUM_vTimerSetReloadMode
SYSCALL_2 syscall_vTimerSetTimerID, SYSCALL_NUM_vTimerSetTimerID
SYSCALL_2 syscall_xQueueAddToSet, SYSCALL_NUM_xQueueAddToSet
SYSCALL_1 syscall_xQueueGiveMutexRecursive, SYSCALL_NUM_xQueueGiveMutexRecursive
SYSCALL_3 syscall_xQueuePeek, SYSCALL_NUM_xQueuePeek
SYSCALL_2 syscall_xQueueRemoveFromSet, SYSCALL_NUM_xQueueRemoveFromSet
SYSCALL_2 syscall_xQueueSelectFromSet, SYSCALL_NUM_xQueueSelectFromSet
SYSCALL_2 syscall_xQueueSemaphoreTake, SYSCALL_NUM_xQueueSemaphoreTake
SYSCALL_2 syscall_xQueueTakeMutexRecursive, SYSCALL_NUM_xQueueTakeMutexRecursive
SYSCALL_2 syscall_xTaskCheckForTimeOut, SYSCALL_NUM_xTaskCheckForTimeOut
SYSCALL_5 syscall_xTaskGenericNotify, SYSCALL_NUM_xTaskGenericNotify
SYSCALL_2 syscall_xTaskGenericNotifyStateClear, SYSCALL_NUM_xTaskGenericNotifyStateClear
SYSCALL_5 syscall_xTaskGenericNotifyWait, SYSCALL_NUM_xTaskGenericNotifyWait
SYSCALL_0 syscall_xTaskGetCurrentTaskHandle, SYSCALL_NUM_xTaskGetCurrentTaskHandle
SYSCALL_0 syscall_xTaskGetSchedulerState, SYSCALL_NUM_xTaskGetSchedulerState
SYSCALL_1 syscall_xTimerGetExpiryTime, SYSCALL_NUM_xTimerGetExpiryTime
SYSCALL_1 syscall_xTimerGetPeriod, SYSCALL_NUM_xTimerGetPeriod
SYSCALL_0 syscall_xTimerGetTimerDaemonTaskHandle, SYSCALL_NUM_xTimerGetTimerDaemonTaskHandle
SYSCALL_1 syscall_xTimerIsTimerActive, SYSCALL_NUM_xTimerIsTimerActive
SYSCALL_1 syscall_xTaskAbortDelay, SYSCALL_NUM_xTaskAbortDelay
SYSCALL_1 syscall_xTaskGetHandle, SYSCALL_NUM_xTaskGetHandle
SYSCALL_0 syscall_xEventGroupCreate, SYSCALL_NUM_xEventGroupCreate
SYSCALL_5 syscall_xEventGroupWaitBits, SYSCALL_NUM_xEventGroupWaitBits
SYSCALL_1 syscall_vEventGroupDelete, SYSCALL_NUM_vEventGroupDelete
SYSCALL_5 syscall_xStreamBufferGenericCreate, SYSCALL_NUM_xStreamBufferGenericCreate
SYSCALL_4 syscall_xStreamBufferReceive, SYSCALL_NUM_xStreamBufferReceive
SYSCALL_1 syscall_vStreamBufferDelete, SYSCALL_NUM_vStreamBufferDelete
SYSCALL_1 syscall_xQueueGetMutexHolder, SYSCALL_NUM_xQueueGetMutexHolder
SYSCALL_4 syscall_xEventGroupSync, SYSCALL_NUM_xEventGroupSync
SYSCALL_2 syscall_xEventGroupSetBits, SYSCALL_NUM_xEventGroupSetBits
SYSCALL_2 syscall_xEventGroupClearBits, SYSCALL_NUM_xEventGroupClearBits
SYSCALL_2 syscall_xStreamBufferSend, SYSCALL_NUM_xStreamBufferSend
SYSCALL_1 syscall_xStreamBufferIsEmpty, SYSCALL_NUM_xStreamBufferIsEmpty
SYSCALL_1 syscall_xStreamBufferNextMessageLengthBytes, SYSCALL_NUM_xStreamBufferNextMessageLengthBytes
SYSCALL_1 syscall_xStreamBufferIsFull, SYSCALL_NUM_xStreamBufferIsFull
SYSCALL_1 syscall_xStreamBufferSpacesAvailable, SYSCALL_NUM_xStreamBufferSpacesAvailable
SYSCALL_1 syscall_xStreamBufferReset, SYSCALL_NUM_xStreamBufferReset
SYSCALL_1 syscall_xStreamBufferBytesAvailable, SYSCALL_NUM_xStreamBufferBytesAvailable