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

108 lines
5.8 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
; =============================================================================
; Модуль : HGCM Protocol Constants
; Файл : data/hgcm/constants.inc
; Назначение : HGCM (Host Guest Communication Manager) протокол константы и параметры
; =============================================================================
; =============================================================================
; HGCM Protocol Constants
; =============================================================================
VBOX_HGCM_REQ_DONE equ 0x00000001
VBOX_HGCM_REQ_CANCELLED equ 0x00000002
HGCM_SERVICE_NAME_MAX equ 128
HGCM_TIMEOUT_ITERS equ 500000 ; Количество итераций внешнего цикла ожидания
HGCM_ASYNC_DELAY_ITERS equ 1000 ; Количество pause инструкций во вложенном цикле
HGCM_LOC_TYPE_PREDEFINED equ 2
; =============================================================================
; HGCM Parameter Types (VMMDevHGCMParmType)
; Источник: include/VBox/VMMDev.h из исходного кода VirtualBox
; =============================================================================
VMMDEV_HGCM_PARM_TYPE_INVALID equ 0
VMMDEV_HGCM_PARM_TYPE_32BIT equ 1
HGCM_PARM_TYPE_32BIT equ VMMDEV_HGCM_PARM_TYPE_32BIT
VMMDEV_HGCM_PARM_TYPE_64BIT equ 2
; VMMDEV_HGCM_PARM_TYPE_PHYSADDR equ 3 ; устарел
VMMDEV_HGCM_PARM_TYPE_LINADDR equ 4 ; In and Out
HGCM_PARM_TYPE_LINADDR equ VMMDEV_HGCM_PARM_TYPE_LINADDR
VMMDEV_HGCM_PARM_TYPE_LINADDR_IN equ 5 ; Host <- Guest
HGCM_PARM_TYPE_LINADDR_IN equ VMMDEV_HGCM_PARM_TYPE_LINADDR_IN
VMMDEV_HGCM_PARM_TYPE_LINADDR_OUT equ 6 ; Host -> Guest
HGCM_PARM_TYPE_LINADDR_OUT equ VMMDEV_HGCM_PARM_TYPE_LINADDR_OUT
VMMDEV_HGCM_PARM_TYPE_LINADDR_LOCKED equ 7 ; Для VBoxGuest, а не хоста
VMMDEV_HGCM_PARM_TYPE_LINADDR_LOCKED_IN equ 8 ; Для VBoxGuest, а не хоста
VMMDEV_HGCM_PARM_TYPE_LINADDR_LOCKED_OUT equ 9 ; Для VBoxGuest, а не хоста
VMMDEV_HGCM_PARM_TYPE_PAGELIST equ 10
VMMDEV_HGCM_PARM_TYPE_EMBEDDED equ 11
VMMDEV_HGCM_PARM_TYPE_CONTIGUOUS_PAGELIST equ 12
VMMDEV_HGCM_PARM_TYPE_NO_BOUNCE_PAGELIST equ 13
VMMDEV_HGCM_PARM_TYPE_SIZE_HACK equ 0x7fffffff
; =============================================================================
; Флаги для EMBEDDED параметров (Embedded.fFlags)
; =============================================================================
VMMDEV_HGCM_EMBEDDED_FLAG_IN equ 1 ; Данные от гостя к хосту
VMMDEV_HGCM_EMBEDDED_FLAG_OUT equ 2 ; Данные от хоста к гостю
VMMDEV_HGCM_EMBEDDED_FLAG_BOTH equ 3 ; (IN | OUT)
; =============================================================================
; Дополнительные константы для проверки возможностей хоста (Host Features)
; =============================================================================
VMMDEV_HVF_HGCM_EMBEDDED_BUFFERS equ 0x00000002 ; Битовый флаг 1
; =============================================================================
; (Опционально) Для обратной совместимости с вашим текущим кодом
; =============================================================================
; Короткие алиасы для использования в коде:
HGCM_PARM_TYPE_64BIT equ VMMDEV_HGCM_PARM_TYPE_64BIT
HGCM_PARM_TYPE_LINADDR_INOUT equ VMMDEV_HGCM_PARM_TYPE_LINADDR ; = 4 (bidirectional)
HGCM_PARM_TYPE_EMBEDDED equ VMMDEV_HGCM_PARM_TYPE_EMBEDDED
HGCM_EMBED_FLAG_IN equ VMMDEV_HGCM_EMBEDDED_FLAG_IN
HGCM_EMBED_FLAG_OUT equ VMMDEV_HGCM_EMBEDDED_FLAG_OUT
HGCM_EMBED_FLAG_BOTH equ VMMDEV_HGCM_EMBEDDED_FLAG_BOTH
; Максимальный размер данных для embedded
HGCM_MAX_EMBEDDED_DATA equ 4096
; Максимальный хвост PageList (для pagelist call buffer)
HGCM_MAX_PAGELIST_TAIL equ 8192
; =============================================================================
; Константы PageList
; =============================================================================
HGCM_PARM_TYPE_PAGELIST equ 10
; Флаги направления PageList
HGCM_PL_FLAG_IN equ 1 ; guest -> host
HGCM_PL_FLAG_OUT equ 2 ; host -> guest
HGCM_PL_FLAG_BOTH equ 3
; Размеры страниц
PAGE_SIZE equ 4096
PAGE_OFFSET_MASK equ 0x0FFF
PAGE_BASE_MASK equ 0xFFFFF000
; Смещения внутри HGCMPageListInfo
HGCM_PLI_FLAGS equ 0 ; dd flags
HGCM_PLI_OFF_FIRST_PAGE equ 4 ; dw offFirstPage
HGCM_PLI_CPAGES equ 6 ; dw cPages
HGCM_PLI_APAGES equ 8 ; начало массива dq[] aPages
; =============================================================================
; Макрос FILL_HGCM_HEADER - Заполнить стандартный заголовок HGCM пакета
; Параметры:
; reg - регистр с указателем на структуру HGCM_HEADER
; size - размер пакета в байтах
; =============================================================================
macro FILL_HGCM_HEADER reg, size {
mov dword [reg + HGCM_HEADER.header.size], size
mov dword [reg + HGCM_HEADER.header.version], VMMDEV_REQUEST_HEADER_VERSION
mov dword [reg + HGCM_HEADER.header.request_type], VMMDEV_REQ_HGCM_CALL32
mov dword [reg + HGCM_HEADER.header.rc], VERR_GENERAL_FAILURE
mov dword [reg + HGCM_HEADER.header.reserved1], 0
mov dword [reg + HGCM_HEADER.header.requestor], VMMDEV_REQUESTOR_KERNEL
}