Files
kolibrios/drivers/vboxguest/hgcm/async.inc
2026-03-04 21:16:17 +03:00

64 lines
1.6 KiB
HTML

; =============================================================================
; Модуль : HGCM Async
; Назначение : Ожидание завершения async HGCM запросов
; Файл : hgcm/async.inc
; Версия : 1.0
; Дата : 2025.01.15
; =============================================================================
; hgcm_wait_async
proc hgcm_wait_async uses ebx ecx edx esi, request_ptr:dword
mov esi, [request_ptr]
test esi, esi
jz .bad
mov ecx, HGCM_TIMEOUT_ITERS
DEBUGF __DEBUG_HGCM__, "[VBoxGuest] [HGCM] Waiting for async completion (timeout=%d iterations)\n", HGCM_TIMEOUT_ITERS
.wait_loop:
mfence
mov eax, [esi + HGCM_HEADER.flags]
test eax, VBOX_HGCM_REQ_DONE
jnz .completed
test eax, VBOX_HGCM_REQ_CANCELLED
jnz .cancelled
dec ecx
jz .timeout
; короткая задержка
push ecx
mov ecx, 1000
.delay:
pause
loop .delay
pop ecx
jmp .wait_loop
.completed:
mfence
DEBUGF __DEBUG_HGCM__, "[VBoxGuest] [HGCM] Async request completed\n"
xor eax, eax
ret
.cancelled:
DEBUGF __DEBUG_HGCM__, "[VBoxGuest] [HGCM] Async request cancelled\n"
mov eax, VERR_GENERAL_FAILURE
ret
.timeout:
DEBUGF __DEBUG_HGCM__, "[VBoxGuest] [HGCM] *** ASYNC TIMEOUT ***\n"
DEBUGF __DEBUG_HGCM__, "[VBoxGuest] [HGCM] Current flags: 0x%x\n", [esi + HGCM_HEADER.flags]
DEBUGF __DEBUG_HGCM__, "[VBoxGuest] [HGCM] Request RC: 0x%x\n", [esi + HGCM_HEADER.header.rc]
mov eax, VERR_TIMEOUT
ret
.bad:
mov eax, VERR_INVALID_POINTER
ret
endp