VMMDevState.h revision 7c2633a7824da3125c092340cd7eabc5a1c8d7dc
26456d1900aba0e903e6e1beec552396618322e2vboxsync/* $Id$ */
26456d1900aba0e903e6e1beec552396618322e2vboxsync/** @file
26456d1900aba0e903e6e1beec552396618322e2vboxsync * VMMDev - Guest <-> VMM/Host communication device, internal header.
26456d1900aba0e903e6e1beec552396618322e2vboxsync */
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync/*
26456d1900aba0e903e6e1beec552396618322e2vboxsync * Copyright (C) 2006-2007 Oracle Corporation
26456d1900aba0e903e6e1beec552396618322e2vboxsync *
26456d1900aba0e903e6e1beec552396618322e2vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
26456d1900aba0e903e6e1beec552396618322e2vboxsync * available from http://www.virtualbox.org. This file is free software;
26456d1900aba0e903e6e1beec552396618322e2vboxsync * you can redistribute it and/or modify it under the terms of the GNU
26456d1900aba0e903e6e1beec552396618322e2vboxsync * General Public License (GPL) as published by the Free Software
26456d1900aba0e903e6e1beec552396618322e2vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
26456d1900aba0e903e6e1beec552396618322e2vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
26456d1900aba0e903e6e1beec552396618322e2vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
26456d1900aba0e903e6e1beec552396618322e2vboxsync */
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync#ifndef ___VMMDev_VMMDevState_h
26456d1900aba0e903e6e1beec552396618322e2vboxsync#define ___VMMDev_VMMDevState_h
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync#include <VBox/VMMDev.h>
26456d1900aba0e903e6e1beec552396618322e2vboxsync#include <VBox/pdmdev.h>
26456d1900aba0e903e6e1beec552396618322e2vboxsync#include <VBox/pdmifs.h>
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync#define TIMESYNC_BACKDOOR
742ee7392dfc0ce0b48216189ce26534208b3f48vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsynctypedef struct DISPLAYCHANGEINFO
26456d1900aba0e903e6e1beec552396618322e2vboxsync{
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t xres;
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t yres;
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t bpp;
742ee7392dfc0ce0b48216189ce26534208b3f48vboxsync uint32_t display;
742ee7392dfc0ce0b48216189ce26534208b3f48vboxsync} DISPLAYCHANGEINFO;
742ee7392dfc0ce0b48216189ce26534208b3f48vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsynctypedef struct DISPLAYCHANGEREQUEST
26456d1900aba0e903e6e1beec552396618322e2vboxsync{
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fPending;
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool afAlignment[3];
26456d1900aba0e903e6e1beec552396618322e2vboxsync DISPLAYCHANGEINFO displayChangeRequest;
26456d1900aba0e903e6e1beec552396618322e2vboxsync DISPLAYCHANGEINFO lastReadDisplayChangeRequest;
26456d1900aba0e903e6e1beec552396618322e2vboxsync} DISPLAYCHANGEREQUEST;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsynctypedef struct DISPLAYCHANGEDATA
26456d1900aba0e903e6e1beec552396618322e2vboxsync{
26456d1900aba0e903e6e1beec552396618322e2vboxsync /* Which monitor is being reported to the guest. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync int iCurrentMonitor;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** true if the guest responded to VMMDEV_EVENT_DISPLAY_CHANGE_REQUEST at least once */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fGuestSentChangeEventAck;
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool afAlignment[3];
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync DISPLAYCHANGEREQUEST aRequests[64]; // @todo maxMonitors
26456d1900aba0e903e6e1beec552396618322e2vboxsync} DISPLAYCHANGEDATA;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync/**
26456d1900aba0e903e6e1beec552396618322e2vboxsync * Credentials for automatic guest logon and host configured logon (?).
26456d1900aba0e903e6e1beec552396618322e2vboxsync *
26456d1900aba0e903e6e1beec552396618322e2vboxsync * This is not stored in the same block as the instance data in order to make it
26456d1900aba0e903e6e1beec552396618322e2vboxsync * harder to access.
26456d1900aba0e903e6e1beec552396618322e2vboxsync */
26456d1900aba0e903e6e1beec552396618322e2vboxsynctypedef struct VMMDEVCREDS
26456d1900aba0e903e6e1beec552396618322e2vboxsync{
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** credentials for guest logon purposes */
26456d1900aba0e903e6e1beec552396618322e2vboxsync struct
26456d1900aba0e903e6e1beec552396618322e2vboxsync {
26456d1900aba0e903e6e1beec552396618322e2vboxsync char szUserName[VMMDEV_CREDENTIALS_SZ_SIZE];
26456d1900aba0e903e6e1beec552396618322e2vboxsync char szPassword[VMMDEV_CREDENTIALS_SZ_SIZE];
26456d1900aba0e903e6e1beec552396618322e2vboxsync char szDomain[VMMDEV_CREDENTIALS_SZ_SIZE];
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fAllowInteractiveLogon;
26456d1900aba0e903e6e1beec552396618322e2vboxsync } Logon;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** credentials for verification by guest */
26456d1900aba0e903e6e1beec552396618322e2vboxsync struct
26456d1900aba0e903e6e1beec552396618322e2vboxsync {
26456d1900aba0e903e6e1beec552396618322e2vboxsync char szUserName[VMMDEV_CREDENTIALS_SZ_SIZE];
26456d1900aba0e903e6e1beec552396618322e2vboxsync char szPassword[VMMDEV_CREDENTIALS_SZ_SIZE];
26456d1900aba0e903e6e1beec552396618322e2vboxsync char szDomain[VMMDEV_CREDENTIALS_SZ_SIZE];
26456d1900aba0e903e6e1beec552396618322e2vboxsync } Judge;
26456d1900aba0e903e6e1beec552396618322e2vboxsync} VMMDEVCREDS;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync/** device structure containing all state information */
26456d1900aba0e903e6e1beec552396618322e2vboxsynctypedef struct VMMDevState
26456d1900aba0e903e6e1beec552396618322e2vboxsync{
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** The PCI device structure. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync PCIDevice dev;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** The critical section for this device. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync PDMCRITSECT CritSect;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** hypervisor address space size */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t hypervisorSize;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** mouse capabilities of host and guest */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t mouseCapabilities;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** absolute mouse position in pixels */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t mouseXAbs;
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t mouseYAbs;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Does the guest currently want the host pointer to be shown? */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t fHostCursorRequested;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Alignment padding. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32Alignment0;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Pointer to device instance. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync PPDMDEVINSR3 pDevIns;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** LUN\#0 + Status: VMMDev port base interface. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync PDMIBASE IBase;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** LUN\#0: VMMDev port interface. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync PDMIVMMDEVPORT IPort;
26456d1900aba0e903e6e1beec552396618322e2vboxsync#ifdef VBOX_WITH_HGCM
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** LUN\#0: HGCM port interface. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync PDMIHGCMPORT IHGCMPort;
26456d1900aba0e903e6e1beec552396618322e2vboxsync#endif
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Pointer to base interface of the driver. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync R3PTRTYPE(PPDMIBASE) pDrvBase;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** VMMDev connector interface */
26456d1900aba0e903e6e1beec552396618322e2vboxsync R3PTRTYPE(PPDMIVMMDEVCONNECTOR) pDrv;
26456d1900aba0e903e6e1beec552396618322e2vboxsync#ifdef VBOX_WITH_HGCM
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** HGCM connector interface */
26456d1900aba0e903e6e1beec552396618322e2vboxsync R3PTRTYPE(PPDMIHGCMCONNECTOR) pHGCMDrv;
26456d1900aba0e903e6e1beec552396618322e2vboxsync#endif
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Alignment padding. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync RTR3PTR PtrR3Alignment1;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** message buffer for backdoor logging. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync char szMsg[512];
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** message buffer index. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t iMsg;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Base port in the assigned I/O space. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync RTIOPORT PortBase;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Alignment padding. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync RTIOPORT PortAlignment2;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** IRQ number assigned to the device */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t irq;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Current host side event flags */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32HostEventFlags;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Mask of events guest is interested in. Note that the HGCM events
26456d1900aba0e903e6e1beec552396618322e2vboxsync * are enabled automatically by the VMMDev device when guest issues
26456d1900aba0e903e6e1beec552396618322e2vboxsync * HGCM commands.
26456d1900aba0e903e6e1beec552396618322e2vboxsync */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32GuestFilterMask;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Delayed mask of guest events */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32NewGuestFilterMask;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Flag whether u32NewGuestFilterMask is valid */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fNewGuestFilterMask;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Alignment padding. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool afAlignment3[3];
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** GC physical address of VMMDev RAM area */
26456d1900aba0e903e6e1beec552396618322e2vboxsync RTGCPHYS32 GCPhysVMMDevRAM;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** R3 pointer to VMMDev RAM area */
26456d1900aba0e903e6e1beec552396618322e2vboxsync R3PTRTYPE(VMMDevMemory *) pVMMDevRAMR3;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** R3 pointer to VMMDev Heap RAM area
26456d1900aba0e903e6e1beec552396618322e2vboxsync */
26456d1900aba0e903e6e1beec552396618322e2vboxsync R3PTRTYPE(VMMDevMemory *) pVMMDevHeapR3;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** GC physical address of VMMDev Heap RAM area */
26456d1900aba0e903e6e1beec552396618322e2vboxsync RTGCPHYS32 GCPhysVMMDevHeap;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Information reported by guest via VMMDevReportGuestInfo generic request.
26456d1900aba0e903e6e1beec552396618322e2vboxsync * Until this information is reported the VMMDev refuses any other requests.
26456d1900aba0e903e6e1beec552396618322e2vboxsync */
26456d1900aba0e903e6e1beec552396618322e2vboxsync VBoxGuestInfo guestInfo;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Information reported by guest via VMMDevReportGuestCapabilities. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t guestCaps;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** "Additions are Ok" indicator, set to true after processing VMMDevReportGuestInfo,
26456d1900aba0e903e6e1beec552396618322e2vboxsync * if additions version is compatible. This flag is here to avoid repeated comparing
26456d1900aba0e903e6e1beec552396618322e2vboxsync * of the version in guestInfo.
26456d1900aba0e903e6e1beec552396618322e2vboxsync */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t fu32AdditionsOk;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Video acceleration status set by guest. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32VideoAccelEnabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync DISPLAYCHANGEDATA displayChangeData;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Pointer to the credentials. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync R3PTRTYPE(VMMDEVCREDS *) pCredentials;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool afAlignment4[HC_ARCH_BITS == 32 ? 3 : 7];
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /* memory balloon change request */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32MemoryBalloonSize, u32LastMemoryBalloonSize;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /* guest ram size */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint64_t cbGuestRAM;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /* unique session id; the id will be different after each start, reset or restore of the VM. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint64_t idSession;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /* statistics interval change request */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32StatIntervalSize, u32LastStatIntervalSize;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /* seamless mode change request */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fLastSeamlessEnabled, fSeamlessEnabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool afAlignment5[1];
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fVRDPEnabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32VRDPExperienceLevel;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync#ifdef TIMESYNC_BACKDOOR
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint64_t hostTime;
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fTimesyncBackdoorLo;
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool afAlignment6[3];
26456d1900aba0e903e6e1beec552396618322e2vboxsync#endif
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Set if GetHostTime should fail.
26456d1900aba0e903e6e1beec552396618322e2vboxsync * Loaded from the GetHostTimeDisabled configuration value. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fGetHostTimeDisabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Set if backdoor logging should be disabled (output will be ignored then) */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fBackdoorLogDisabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Don't clear credentials */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fKeepCredentials;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Heap enabled. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fHeapEnabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync#ifdef VBOX_WITH_HGCM
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** List of pending HGCM requests, used for saving the HGCM state. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync R3PTRTYPE(PVBOXHGCMCMD) pHGCMCmdList;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Critical section to protect the list. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync RTCRITSECT critsectHGCMCmdList;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Whether the HGCM events are already automatically enabled. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32HGCMEnabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Alignment padding. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32Alignment7;
26456d1900aba0e903e6e1beec552396618322e2vboxsync#endif /* VBOX_WITH_HGCM */
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Status LUN: Shared folders LED */
26456d1900aba0e903e6e1beec552396618322e2vboxsync struct
26456d1900aba0e903e6e1beec552396618322e2vboxsync {
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** The LED. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync PDMLED Led;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** The LED ports. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync PDMILEDPORTS ILeds;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Partner of ILeds. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync R3PTRTYPE(PPDMILEDCONNECTORS) pLedsConnector;
26456d1900aba0e903e6e1beec552396618322e2vboxsync } SharedFolders;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** FLag whether CPU hotplug events are monitored */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fCpuHotPlugEventsEnabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Alignment padding. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool afPadding8[3];
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** CPU hotplug event */
26456d1900aba0e903e6e1beec552396618322e2vboxsync VMMDevCpuEventType enmCpuHotPlugEvent;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Core id of the CPU to change */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t idCpuCore;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Package id of the CPU to changhe */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t idCpuPackage;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t StatMemBalloonChunks;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Set if RC/R0 is enabled. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fRZEnabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Set if testing is enabled. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool fTestingEnabled;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** Alignment padding. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync bool afPadding9[HC_ARCH_BITS == 32 ? 2 : 6];
26456d1900aba0e903e6e1beec552396618322e2vboxsync#ifndef VBOX_WITHOUT_TESTING_FEATURES
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** The high timestamp value. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32TestingHighTimestamp;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** The current testing command (VMMDEV_TESTING_CMD_XXX). */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32TestingCmd;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** The testing data offset (command specific). */
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t offTestingData;
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** For buffering the what comes in over the testing data port. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync union
26456d1900aba0e903e6e1beec552396618322e2vboxsync {
26456d1900aba0e903e6e1beec552396618322e2vboxsync char padding[1024];
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** VMMDEV_TESTING_CMD_INIT, VMMDEV_TESTING_CMD_SUB_NEW,
26456d1900aba0e903e6e1beec552396618322e2vboxsync * VMMDEV_TESTING_CMD_FAILED. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync struct
26456d1900aba0e903e6e1beec552396618322e2vboxsync {
26456d1900aba0e903e6e1beec552396618322e2vboxsync char sz[1024];
26456d1900aba0e903e6e1beec552396618322e2vboxsync } String, Init, SubNew, Failed;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** VMMDEV_TESTING_CMD_TERM, VMMDEV_TESTING_CMD_SUB_DONE. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync struct
26456d1900aba0e903e6e1beec552396618322e2vboxsync {
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t c;
26456d1900aba0e903e6e1beec552396618322e2vboxsync } Error, Term, SubDone;
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync /** VMMDEV_TESTING_CMD_VALUE. */
26456d1900aba0e903e6e1beec552396618322e2vboxsync struct
26456d1900aba0e903e6e1beec552396618322e2vboxsync {
26456d1900aba0e903e6e1beec552396618322e2vboxsync RTUINT64U u64Value;
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32Unit;
26456d1900aba0e903e6e1beec552396618322e2vboxsync char szName[1024 - 8 - 4];
26456d1900aba0e903e6e1beec552396618322e2vboxsync } Value;
26456d1900aba0e903e6e1beec552396618322e2vboxsync } TestingData;
26456d1900aba0e903e6e1beec552396618322e2vboxsync#endif /* !VBOX_WITHOUT_TESTING_FEATURES */
26456d1900aba0e903e6e1beec552396618322e2vboxsync} VMMDevState;
26456d1900aba0e903e6e1beec552396618322e2vboxsyncAssertCompileMemberAlignment(VMMDevState, CritSect, 8);
26456d1900aba0e903e6e1beec552396618322e2vboxsyncAssertCompileMemberAlignment(VMMDevState, cbGuestRAM, 8);
26456d1900aba0e903e6e1beec552396618322e2vboxsyncAssertCompileMemberAlignment(VMMDevState, enmCpuHotPlugEvent, 4);
26456d1900aba0e903e6e1beec552396618322e2vboxsync#ifndef VBOX_WITHOUT_TESTING_FEATURES
26456d1900aba0e903e6e1beec552396618322e2vboxsyncAssertCompileMemberAlignment(VMMDevState, TestingData.Value.u64Value, 8);
26456d1900aba0e903e6e1beec552396618322e2vboxsync#endif
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsyncvoid VMMDevNotifyGuest (VMMDevState *pVMMDevState, uint32_t u32EventMask);
26456d1900aba0e903e6e1beec552396618322e2vboxsyncvoid VMMDevCtlSetGuestFilterMask (VMMDevState *pVMMDevState,
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32OrMask,
26456d1900aba0e903e6e1beec552396618322e2vboxsync uint32_t u32NotMask);
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync#endif /* !___VMMDev_VMMDevState_h */
26456d1900aba0e903e6e1beec552396618322e2vboxsync
26456d1900aba0e903e6e1beec552396618322e2vboxsync