forked from KolibriOS/kolibrios
108 lines
5.8 KiB
HTML
108 lines
5.8 KiB
HTML
; =============================================================================
|
||
; Модуль : 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
|
||
}
|