33cba804084fe86c32094f622129013b94aaec59vboxsync/** @file
33cba804084fe86c32094f622129013b94aaec59vboxsync *
33cba804084fe86c32094f622129013b94aaec59vboxsync * VBox Host Guest Shared Memory Interface (HGSMI).
33cba804084fe86c32094f622129013b94aaec59vboxsync * Host part.
33cba804084fe86c32094f622129013b94aaec59vboxsync */
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/*
dfc68b62b28c82701524c03873d326a99ebaa6cfvboxsync * Copyright (C) 2006-2015 Oracle Corporation
33cba804084fe86c32094f622129013b94aaec59vboxsync *
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * available from http://www.virtualbox.org. This file is free software;
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * you can redistribute it and/or modify it under the terms of the GNU
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * General Public License (GPL) as published by the Free Software
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cf5f6bf2704d4fff443139e10bccc6a0a7fa4b85vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
33cba804084fe86c32094f622129013b94aaec59vboxsync */
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync
8f1c8e96fab0c5f5a8dcabeb4e20a56a8b4cea18vboxsync#ifndef ___HGSMIHost_h
8f1c8e96fab0c5f5a8dcabeb4e20a56a8b4cea18vboxsync#define ___HGSMIHost_h
33cba804084fe86c32094f622129013b94aaec59vboxsync
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync#include <VBox/vmm/vm.h>
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync#include <VBox/HGSMI/HGSMI.h>
33cba804084fe86c32094f622129013b94aaec59vboxsync#include <VBox/HGSMI/HGSMIChSetup.h>
33cba804084fe86c32094f622129013b94aaec59vboxsync
11714fa5e3442abaf03717461da17648a9c1cb88vboxsyncstruct HGSMIINSTANCE;
11714fa5e3442abaf03717461da17648a9c1cb88vboxsynctypedef struct HGSMIINSTANCE *PHGSMIINSTANCE;
33cba804084fe86c32094f622129013b94aaec59vboxsync
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync/* Callback for the guest notification about a new host buffer. */
33cba804084fe86c32094f622129013b94aaec59vboxsynctypedef DECLCALLBACK(void) FNHGSMINOTIFYGUEST(void *pvCallback);
33cba804084fe86c32094f622129013b94aaec59vboxsynctypedef FNHGSMINOTIFYGUEST *PFNHGSMINOTIFYGUEST;
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/*
33cba804084fe86c32094f622129013b94aaec59vboxsync * Public Host API for virtual devices.
33cba804084fe86c32094f622129013b94aaec59vboxsync */
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMICreate (PHGSMIINSTANCE *ppIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync PVM pVM,
33cba804084fe86c32094f622129013b94aaec59vboxsync const char *pszName,
33cba804084fe86c32094f622129013b94aaec59vboxsync HGSMIOFFSET offBase,
33cba804084fe86c32094f622129013b94aaec59vboxsync uint8_t *pu8MemBase,
33cba804084fe86c32094f622129013b94aaec59vboxsync HGSMISIZE cbMem,
33cba804084fe86c32094f622129013b94aaec59vboxsync PFNHGSMINOTIFYGUEST pfnNotifyGuest,
33cba804084fe86c32094f622129013b94aaec59vboxsync void *pvNotifyGuest,
33cba804084fe86c32094f622129013b94aaec59vboxsync size_t cbContext);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncvoid HGSMIDestroy (PHGSMIINSTANCE pIns);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncvoid *HGSMIContext (PHGSMIINSTANCE pIns);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncvoid *HGSMIOffsetToPointerHost (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync HGSMIOFFSET offBuffer);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncHGSMIOFFSET HGSMIPointerToOffsetHost (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync const void *pv);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMIHostChannelRegister (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync uint8_t u8Channel,
33cba804084fe86c32094f622129013b94aaec59vboxsync PFNHGSMICHANNELHANDLER pfnChannelHandler,
dfc68b62b28c82701524c03873d326a99ebaa6cfvboxsync void *pvChannelHandler);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMIChannelRegisterName (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync const char *pszChannel,
33cba804084fe86c32094f622129013b94aaec59vboxsync PFNHGSMICHANNELHANDLER pfnChannelHandler,
33cba804084fe86c32094f622129013b94aaec59vboxsync void *pvChannelHandler,
dfc68b62b28c82701524c03873d326a99ebaa6cfvboxsync uint8_t *pu8Channel);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMISetupHostHeap (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync HGSMIOFFSET offHeap,
33cba804084fe86c32094f622129013b94aaec59vboxsync HGSMISIZE cbHeap);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMISaveStateExec (PHGSMIINSTANCE pIns, PSSMHANDLE pSSM);
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMILoadStateExec (PHGSMIINSTANCE pIns, PSSMHANDLE pSSM);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/*
33cba804084fe86c32094f622129013b94aaec59vboxsync * Virtual hardware IO handlers.
33cba804084fe86c32094f622129013b94aaec59vboxsync */
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/* Guests passes a new command buffer to the host. */
33cba804084fe86c32094f622129013b94aaec59vboxsyncvoid HGSMIGuestWrite (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync HGSMIOFFSET offBuffer);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/* Guest reads information about guest buffers. */
33cba804084fe86c32094f622129013b94aaec59vboxsyncHGSMIOFFSET HGSMIGuestRead (PHGSMIINSTANCE pIns);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/* Guest reads the host FIFO to get a command. */
33cba804084fe86c32094f622129013b94aaec59vboxsyncHGSMIOFFSET HGSMIHostRead (PHGSMIINSTANCE pIns);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/* Guest reports that the command at this offset has been processed. */
33cba804084fe86c32094f622129013b94aaec59vboxsyncvoid HGSMIHostWrite (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync HGSMIOFFSET offBuffer);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncvoid HGSMISetHostGuestFlags(PHGSMIINSTANCE pIns, uint32_t flags);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncvoid HGSMIClearHostGuestFlags(PHGSMIINSTANCE pIns, uint32_t flags);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/*
33cba804084fe86c32094f622129013b94aaec59vboxsync * Low level interface for submitting buffers to the guest.
33cba804084fe86c32094f622129013b94aaec59vboxsync *
33cba804084fe86c32094f622129013b94aaec59vboxsync * These functions are not directly available for anyone but the
33cba804084fe86c32094f622129013b94aaec59vboxsync * virtual hardware device.
33cba804084fe86c32094f622129013b94aaec59vboxsync */
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsync/* Allocate a buffer in the host heap. */
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMIHostCommandAlloc (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync void **ppvMem,
33cba804084fe86c32094f622129013b94aaec59vboxsync HGSMISIZE cbMem,
33cba804084fe86c32094f622129013b94aaec59vboxsync uint8_t u8Channel,
33cba804084fe86c32094f622129013b94aaec59vboxsync uint16_t u16ChannelInfo);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMIHostCommandProcess (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync void *pvMem);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMIHostCommandProcessAndFreeAsynch (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync void *pvMem,
33cba804084fe86c32094f622129013b94aaec59vboxsync bool bDoIrq);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMIHostCommandFree (PHGSMIINSTANCE pIns,
33cba804084fe86c32094f622129013b94aaec59vboxsync void *pvMem);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMIHostLoadStateExec (PHGSMIINSTANCE pIns, PSSMHANDLE pSSM, uint32_t u32Version);
33cba804084fe86c32094f622129013b94aaec59vboxsync
33cba804084fe86c32094f622129013b94aaec59vboxsyncint HGSMIHostSaveStateExec (PHGSMIINSTANCE pIns, PSSMHANDLE pSSM);
33cba804084fe86c32094f622129013b94aaec59vboxsync
e068057c82b010bc7cc663e8f57ac3ef1890a33cvboxsync#ifdef VBOX_WITH_WDDM
4d6b317d67ba577744e53cdfa0c7472d4223db5avboxsyncint HGSMICompleteGuestCommand(PHGSMIINSTANCE pIns, void *pvMem, bool bDoIrq);
33cba804084fe86c32094f622129013b94aaec59vboxsync#endif
33cba804084fe86c32094f622129013b94aaec59vboxsync
8f1c8e96fab0c5f5a8dcabeb4e20a56a8b4cea18vboxsync#endif /* !___HGSMIHost_h*/
8f1c8e96fab0c5f5a8dcabeb4e20a56a8b4cea18vboxsync