Files
kolibrios/drivers/vboxguest/data/hgcm/structs.inc
lex ab59015ded
Some checks failed
Build system / Check kernel codestyle (pull_request) Has been cancelled
Build system / Build (pull_request) Has been cancelled
Add VBoxGuest driver code
2026-03-04 21:16:17 +03:00

70 lines
2.7 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.
; =============================================================================
; VBoxGuest Driver for KolibriOS - Structures HGCM
; =============================================================================
; =============================================================================
; HGCM Structures
; =============================================================================
struct HGCM_HEADER
header VMMDEV_HEADER
flags dd ?
result dd ?
ends ; 32 байта
struct HGCM_CONNECT
header HGCM_HEADER
location_type dd ?
service_name rb HGCM_SERVICE_NAME_MAX ; имя сервиса
client_id dd ?
ends
struct HGCM_DISCONNECT
header HGCM_HEADER
client_id dd ?
ends
struct HGCM_CALL
header HGCM_HEADER ; 32
client_id dd ? ; +4 = 36 // ID клиента
function dd ? ; +4 = 40 // Номер функции (1=MSG_OLD_GET_WAIT и т.д.)
param_count dd ? ; +4 = 44 // Количество параметров
; params[0] начинаются с offset 44
; Далее идут параметры: struct vmmdev_hgcm_function_parameter params[parm_count];
ends
struct HGCM_PARM
type dd ? ; тип параметра (VMMDevHGCMParmType)
u rb 8 ; union { uint32_t value32; RTGCPTR pointer; }
ends
HGCM_PARM.u.value32 equ HGCM_PARM.u
HGCM_PARM.u.value_or_size equ HGCM_PARM.u
HGCM_PARM.u.value64_lo equ HGCM_PARM.u
HGCM_PARM.u.value64_hi equ HGCM_PARM.u+4
HGCM_PARM.u.LinAddr.size equ HGCM_PARM.u
HGCM_PARM.u.LinAddr.offset equ HGCM_PARM.u+4
HGCM_PARM.value_or_size equ HGCM_PARM.u
HGCM_PARM.offset_or_addr equ HGCM_PARM.u+4
; sizeof(vmmdev_request_header) = 24
; sizeof(vmmdev_hgcmreq_header) = 32 // header(24) + flags(4) + result(4)
; sizeof(vmmdev_hgcm_call) = 44 // header(32) + client_id(4) + function(4) + parm_count(4)
; sizeof(vmmdev_hgcm_function_parameter) = 12
; sizeof(vmmdev_hgcm_pagelist) = 16 + (cPages * 8)
; struct vmmdev_hgcm_pagelist {
; u32 flags; // Direction flags (1,2,3)
; u16 offFirstPage; // Смещение в первой странице
; u16 cPages; // Количество страниц
; u64 pages[1]; // Массив физических адресов страниц (RTGCPHYS64)
; };
; Размер буфера для PageList HGCM вызовов
; = sizeof.HGCM_CALL(44) + 32*sizeof.HGCM_PARM(12) + 8192 = 8620 → 3 страницы
HGCM_PL_BUF_SIZE equ sizeof.HGCM_CALL + (VMMDEV_MAX_HGCM_PARMS * sizeof.HGCM_PARM) + HGCM_MAX_PAGELIST_TAIL