f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/** @file
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync *
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * VirtualBox 3D host inter-components interfaces
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/*
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * Copyright (C) 2011-2012 Oracle Corporation
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync *
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * available from http://www.virtualbox.org. This file is free software;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * you can redistribute it and/or modify it under the terms of the GNU
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * General Public License (GPL) as published by the Free Software
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync *
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * The contents of this file may alternatively be used under the terms
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * of the Common Development and Distribution License Version 1.0
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * VirtualBox OSE distribution, in which case the provisions of the
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * CDDL are applicable instead of those of the GPL.
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync *
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * You may elect to license modified versions of this file under the
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * terms and conditions of either the GPL or the CDDL or both.
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync#ifndef ___VBox_VBoxVideoHost3D_h
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync#define ___VBox_VBoxVideoHost3D_h
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync#include <iprt/cdefs.h>
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync#include <VBox/VBoxVideo.h>
615d20b796ec1f656ad30397ab8e4a29e900897avboxsync#include <VBox/hgcmsvc.h>
f102b1e193666a8b1009b39a65eb9d84f9c0e793vboxsync#include <VBox/vmm/pdmifs.h>
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync#include <iprt/list.h>
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/* screen update instance */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef struct PDMIDISPLAYCONNECTOR *HVBOXCRCMDCLTSCR;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsyncstruct VBVACMDHDR;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef struct VBOXCMDVBVA_HDR *PVBOXCMDVBVA_HDR;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_BEGIN)(HVBOXCRCMDCLTSCR hClt, unsigned u32Screen);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_END)(HVBOXCRCMDCLTSCR hClt, unsigned uScreenId, int32_t x, int32_t y, uint32_t cx, uint32_t cy);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(void, PFNVBOXCRCMD_CLTSCR_UPDATE_PROCESS)(HVBOXCRCMDCLTSCR hClt, unsigned u32Screen, struct VBVACMDHDR *pCmd, size_t cbCmd);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/*client callbacks to be used by the server
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * when working in the CrCmd mode */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef struct VBOXCRCMD_SVRENABLE_INFO
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync{
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync HVBOXCRCMDCLTSCR hCltScr;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_CLTSCR_UPDATE_BEGIN pfnCltScrUpdateBegin;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_CLTSCR_UPDATE_PROCESS pfnCltScrUpdateProcess;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_CLTSCR_UPDATE_END pfnCltScrUpdateEnd;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync} VBOXCRCMD_SVRENABLE_INFO;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsynctypedef struct VBOXVDMAHOST * HVBOXCRCLIENT;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsyncstruct VBOXCRCMDCTL_CALLOUT_LISTENTRY;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsynctypedef DECLCALLBACKPTR(void, PFNVBOXCRCMDCTL_CALLOUT_CB)(struct VBOXCRCMDCTL_CALLOUT_LISTENTRY *pEntry);
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync#pragma pack(1)
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsynctypedef struct VBOXCRCMDCTL_CALLOUT_LISTENTRY
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync{
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync RTLISTNODE Node;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync PFNVBOXCRCMDCTL_CALLOUT_CB pfnCb;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync} VBOXCRCMDCTL_CALLOUT_LISTENTRY;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsynctypedef struct VBOXCRCMDCTL_CALLOUT_LIST
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync{
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync RTLISTANCHOR List;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync} VBOXCRCMDCTL_CALLOUT_LIST;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync#pragma pack()
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsyncstruct VBOXCRCMDCTL;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCLIENT_CALLOUT)(HVBOXCRCLIENT hClient, struct VBOXCRCMDCTL* pCmd, VBOXCRCMDCTL_CALLOUT_LISTENTRY *pEntry, PFNVBOXCRCMDCTL_CALLOUT_CB pfnCb);
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsynctypedef struct VBOXCRCLIENT_INFO
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync{
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync HVBOXCRCLIENT hClient;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync PFNVBOXCRCLIENT_CALLOUT pfnCallout;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync} VBOXCRCLIENT_INFO;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef void * HVBOXCRCMDSVR;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/* enables the CrCmd interface, thus the hgcm interface gets disabled.
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * all subsequent calls will be done in the thread Enable was done,
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync * until the Disable is called */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_ENABLE)(HVBOXCRCMDSVR hSvr, VBOXCRCMD_SVRENABLE_INFO *pInfo);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/* Opposite to Enable (see above) */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_DISABLE)(HVBOXCRCMDSVR hSvr);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/* process command */
775247134cd742acfd3ddecc523a5ae1d1369644vboxsynctypedef DECLCALLBACKPTR(int8_t, PFNVBOXCRCMD_SVR_CMD)(HVBOXCRCMDSVR hSvr, const VBOXCMDVBVA_HDR *pCmd, uint32_t cbCmd);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/* process host control */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_HOSTCTL)(HVBOXCRCMDSVR hSvr, uint8_t* pCtl, uint32_t cbCmd);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/* process guest control */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_GUESTCTL)(HVBOXCRCMDSVR hSvr, uint8_t* pCtl, uint32_t cbCmd);
bdbed0b8e7fb553d01417fdc976a76f3b287dbe2vboxsync/* screen resize */
359416647a711739d1b14addbf399178949a1a60vboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_RESIZE)(HVBOXCRCMDSVR hSvr, const struct VBVAINFOSCREEN *pScreen, const uint32_t *pTargetMap);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/* process SaveState */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_SAVESTATE)(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync/* process LoadState */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCMD_SVR_LOADSTATE)(HVBOXCRCMDSVR hSvr, PSSMHANDLE pSSM, uint32_t u32Version);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef struct VBOXCRCMD_SVRINFO
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync{
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync HVBOXCRCMDSVR hSvr;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_SVR_ENABLE pfnEnable;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_SVR_DISABLE pfnDisable;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_SVR_CMD pfnCmd;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_SVR_HOSTCTL pfnHostCtl;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_SVR_GUESTCTL pfnGuestCtl;
bdbed0b8e7fb553d01417fdc976a76f3b287dbe2vboxsync PFNVBOXCRCMD_SVR_RESIZE pfnResize;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_SVR_SAVESTATE pfnSaveState;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMD_SVR_LOADSTATE pfnLoadState;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync} VBOXCRCMD_SVRINFO;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef struct VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync{
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync VBOXVDMACMD_CHROMIUM_CTL Hdr;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync union
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync {
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync void *pvVRamBase;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync uint64_t uAlignment;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync };
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync uint64_t cbVRam;
f102b1e193666a8b1009b39a65eb9d84f9c0e793vboxsync PPDMLED pLed;
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync VBOXCRCLIENT_INFO CrClientInfo;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync /* out */
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync struct VBOXCRCMD_SVRINFO CrCmdServerInfo;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync} VBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP, *PVBOXVDMACMD_CHROMIUM_CTL_CRHGSMI_SETUP;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef enum
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync{
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync VBOXCRCMDCTL_TYPE_HGCM = 1,
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync VBOXCRCMDCTL_TYPE_DISABLE,
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync VBOXCRCMDCTL_TYPE_ENABLE,
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync VBOXCRCMDCTL_TYPE_32bit = 0x7fffffff
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync} VBOXCRCMDCTL_TYPE;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
85efcf5db294b3bbec492bead239bafc89007ff9vboxsync#pragma pack(1)
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef struct VBOXCRCMDCTL
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync{
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync VBOXCRCMDCTL_TYPE enmType;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync uint32_t u32Function;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync /* not to be used by clients */
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync VBOXCRCMDCTL_CALLOUT_LIST CalloutList;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync union
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync {
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync void(*pfnInternal)();
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync void* pvInternal;
615d20b796ec1f656ad30397ab8e4a29e900897avboxsync } u;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync} VBOXCRCMDCTL;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync#define VBOXCRCMDCTL_IS_CALLOUT_AVAILABLE(_pCtl) (!!((_pCtl)->CalloutList.List.pNext))
5414e69c0f099d0a46301eb9c20cb1536ab1e71avboxsync
615d20b796ec1f656ad30397ab8e4a29e900897avboxsynctypedef struct VBOXCRCMDCTL_HGCM
615d20b796ec1f656ad30397ab8e4a29e900897avboxsync{
615d20b796ec1f656ad30397ab8e4a29e900897avboxsync VBOXCRCMDCTL Hdr;
615d20b796ec1f656ad30397ab8e4a29e900897avboxsync VBOXHGCMSVCPARM aParms[1];
615d20b796ec1f656ad30397ab8e4a29e900897avboxsync} VBOXCRCMDCTL_HGCM;
85efcf5db294b3bbec492bead239bafc89007ff9vboxsync#pragma pack()
615d20b796ec1f656ad30397ab8e4a29e900897avboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsynctypedef struct VBOXVDMAHOST * HVBOXCRCMDCTL_REMAINING_HOST_COMMAND;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
bd24d3f8bb5e3d164be5d9ce49d07d80587e6d7cvboxsynctypedef DECLCALLBACKPTR(uint8_t*, PFNVBOXCRCMDCTL_REMAINING_HOST_COMMAND)(HVBOXCRCMDCTL_REMAINING_HOST_COMMAND hClient, uint32_t *pcbCtl, int prevCmdRc);
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsynctypedef struct VBOXCRCMDCTL_HGCMENABLE_DATA
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync{
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync HVBOXCRCMDCTL_REMAINING_HOST_COMMAND hRHCmd;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync PFNVBOXCRCMDCTL_REMAINING_HOST_COMMAND pfnRHCmd;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync} VBOXCRCMDCTL_HGCMENABLE_DATA;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsynctypedef struct VBOXVDMAHOST * HVBOXCRCMDCTL_NOTIFY_TERMINATING;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsynctypedef DECLCALLBACKPTR(int, PFNVBOXCRCMDCTL_NOTIFY_TERMINATING)(HVBOXCRCMDCTL_NOTIFY_TERMINATING hClient, VBOXCRCMDCTL_HGCMENABLE_DATA *pHgcmEnableData);
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsynctypedef DECLCALLBACKPTR(void, PFNVBOXCRCMDCTL_NOTIFY_TERMINATING_DONE)(HVBOXCRCMDCTL_NOTIFY_TERMINATING hClient);
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsynctypedef struct VBOXCRCMDCTL_HGCMDISABLE_DATA
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync{
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync HVBOXCRCMDCTL_NOTIFY_TERMINATING hNotifyTerm;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync PFNVBOXCRCMDCTL_NOTIFY_TERMINATING pfnNotifyTerm;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync PFNVBOXCRCMDCTL_NOTIFY_TERMINATING_DONE pfnNotifyTermDone;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync} VBOXCRCMDCTL_HGCMDISABLE_DATA;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync
85efcf5db294b3bbec492bead239bafc89007ff9vboxsync#pragma pack(1)
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsynctypedef struct VBOXCRCMDCTL_ENABLE
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync{
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync VBOXCRCMDCTL Hdr;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync VBOXCRCMDCTL_HGCMENABLE_DATA Data;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync} VBOXCRCMDCTL_ENABLE;
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsynctypedef struct VBOXCRCMDCTL_DISABLE
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync{
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync VBOXCRCMDCTL Hdr;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync VBOXCRCMDCTL_HGCMDISABLE_DATA Data;
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync} VBOXCRCMDCTL_DISABLE;
85efcf5db294b3bbec492bead239bafc89007ff9vboxsync#pragma pack()
c2e22ad3bb703daa53362d626dd2b4965e511142vboxsync
f9a98d418b7c0ffabbea254558583e51b8a7df0evboxsync#endif /*#ifndef ___VBox_VBoxVideoHost3D_h*/