Files
VBoxGuest/core/ports.inc
2026-03-04 22:03:47 +03:00

55 lines
1.7 KiB
HTML

; =============================================================================
; Модуль : VMMDev I/O Ports
; Назначение : Операции через I/O порты VMMDev (fast request/events)
; Файл : core/ports.inc
; =============================================================================
; -----------------------------------------------------------------------------
; vmmdev_send_request — отправка физического адреса VMMDev-запроса в I/O порт
;
; Вход : phys_addr — физ. адрес VMMDev-пакета
; Выход: —
; -----------------------------------------------------------------------------
proc vmmdev_send_request uses edx, phys_addr:dword
mov eax, [phys_addr]
mov dx, [vbox_device.port]
out dx, eax
; Спин-ожидание (~1ms): даёт хосту время на обработку запроса
mov ecx, 1000000
.wait:
xor eax, eax
loop .wait
ret
endp
; -----------------------------------------------------------------------------
; ports_init — проверка, что порт задан
;
; Выход: eax = 0 успех / VERR_INVALID_PARAMETER
; -----------------------------------------------------------------------------
proc ports_init
movzx eax, word [vbox_device.port]
test eax, eax
jz .bad
xor eax, eax
ret
.bad:
mov eax, VERR_INVALID_PARAMETER
ret
endp
; ports_read_fast_events — прочитать pending mask через FAST порт
;
; Выход: eax = маска событий
proc ports_read_fast_events uses edx
mov dx, [vbox_device.port]
add dx, VMMDEV_PORT_OFF_REQUEST_FAST
in eax, dx
ret
endp