2025-04-14 13:21:27 +03:00

63 lines
1.6 KiB
NASM

;------------------------------------------------------------------------------
; Copyright (c) 2024 - 2025, Mikhail Krichanov. All rights reserved.
; SPDX-License-Identifier: BSD-3-Clause
;------------------------------------------------------------------------------
#include <Uefi/UefiSpec.h>
extern ASM_PFX(UserSpaceCall)
DEFAULT REL
SECTION .text
;------------------------------------------------------------------------------
; EFI_STATUS
; EFIAPI
; SysCall (
; IN UINT8 Type,
; IN UINT8 NumberOfArguments,
; ...
; );
;------------------------------------------------------------------------------
global ASM_PFX(SysCall)
ASM_PFX(SysCall):
push ebx
mov edx, esp
mov ecx, [esp + 4*2] ; Type
mov ebx, [esp + 4*3] ; NumberOfArguments
lea eax, [userReturnAddress]
; Fixup NumberOfArguments.
cmp ecx, SC_FREE_PAGES
je fixup
cmp ecx, SC_BLOCK_IO_READ
je fixup
cmp ecx, SC_BLOCK_IO_WRITE
je fixup
cmp ecx, SC_DISK_IO_READ
je fixup
cmp ecx, SC_DISK_IO_WRITE
je fixup
jmp makecall
fixup:
add ebx, 1
makecall:
sysenter
userReturnAddress:
pop ebx
ret
;------------------------------------------------------------------------------
; VOID
; EFIAPI
; UserSpaceEntryPoint (
; IN USER_SPACE_CALL_DATA *Data
; );
;
; (eax) Data
;------------------------------------------------------------------------------
global ASM_PFX(UserSpaceEntryPoint)
ASM_PFX(UserSpaceEntryPoint):
push eax
call ASM_PFX(UserSpaceCall)