cf25f919d659bf00f73e1551230cd6165961061dvboxsync/** @file
cf25f919d659bf00f73e1551230cd6165961061dvboxsync *
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * VBox Host Guest Shared Memory Interface (HGSMI).
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * OS-independent guest structures.
cf25f919d659bf00f73e1551230cd6165961061dvboxsync */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
cf25f919d659bf00f73e1551230cd6165961061dvboxsync/*
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Copyright (C) 2006-2012 Oracle Corporation
cf25f919d659bf00f73e1551230cd6165961061dvboxsync *
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * available from http://www.virtualbox.org. This file is free software;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * General Public License (GPL) as published by the Free Software
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
cf25f919d659bf00f73e1551230cd6165961061dvboxsync *
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * The contents of this file may alternatively be used under the terms
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * of the Common Development and Distribution License Version 1.0
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * VirtualBox OSE distribution, in which case the provisions of the
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * CDDL are applicable instead of those of the GPL.
cf25f919d659bf00f73e1551230cd6165961061dvboxsync *
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * You may elect to license modified versions of this file under the
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * terms and conditions of either the GPL or the CDDL or both.
cf25f919d659bf00f73e1551230cd6165961061dvboxsync */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
cf25f919d659bf00f73e1551230cd6165961061dvboxsync#ifndef __HGSMI_GUEST_h__
cf25f919d659bf00f73e1551230cd6165961061dvboxsync#define __HGSMI_GUEST_h__
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
cf25f919d659bf00f73e1551230cd6165961061dvboxsync#include <VBox/HGSMI/HGSMI.h>
cf25f919d659bf00f73e1551230cd6165961061dvboxsync#include <VBox/HGSMI/HGSMIChSetup.h>
97803398b9554900b4dd45f88b2eb2056e2c606bvboxsync#include <VBox/VBoxVideo.h>
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#ifdef VBOX_XPDM_MINIPORT
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRT_C_DECLS_BEGIN
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync# include "miniport.h"
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync# include "ntddvdeo.h"
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync# include <Video.h>
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRT_C_DECLS_END
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync#elif defined VBOX_GUESTR3XORGMOD
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync# include <compiler.h>
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#else
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync# include <iprt/asm-amd64-x86.h>
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#endif
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync#ifdef VBOX_WDDM_MINIPORT
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync# include "wddm/VBoxMPShgsmi.h"
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync typedef VBOXSHGSMI HGSMIGUESTCMDHEAP;
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync# define HGSMIGUESTCMDHEAP_GET(_p) (&(_p)->Heap)
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync#else
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync typedef HGSMIHEAP HGSMIGUESTCMDHEAP;
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync# define HGSMIGUESTCMDHEAP_GET(_p) (_p)
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync#endif
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRT_C_DECLS_BEGIN
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
cf25f919d659bf00f73e1551230cd6165961061dvboxsync/**
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * Structure grouping the context needed for submitting commands to the host
04b02ffb8824a60fd37777bc1f7d2f35104a274cvboxsync * via HGSMI
cf25f919d659bf00f73e1551230cd6165961061dvboxsync */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsynctypedef struct HGSMIGUESTCOMMANDCONTEXT
cf25f919d659bf00f73e1551230cd6165961061dvboxsync{
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** Information about the memory heap located in VRAM from which data
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * structures to be sent to the host are allocated. */
dc959f60f6d3e0cba86f7da4d39aa475913a7e10vboxsync HGSMIGUESTCMDHEAP heapCtx;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** The I/O port used for submitting commands to the host by writing their
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * offsets into the heap. */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync RTIOPORT port;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync} HGSMIGUESTCOMMANDCONTEXT, *PHGSMIGUESTCOMMANDCONTEXT;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
cf25f919d659bf00f73e1551230cd6165961061dvboxsync/**
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * Structure grouping the context needed for receiving commands from the host
04b02ffb8824a60fd37777bc1f7d2f35104a274cvboxsync * via HGSMI
cf25f919d659bf00f73e1551230cd6165961061dvboxsync */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsynctypedef struct HGSMIHOSTCOMMANDCONTEXT
cf25f919d659bf00f73e1551230cd6165961061dvboxsync{
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** Information about the memory area located in VRAM in which the host
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * places data structures to be read by the guest. */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync HGSMIAREA areaCtx;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** Convenience structure used for matching host commands to handlers. */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** @todo handlers are registered individually in code rather than just
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * passing a static structure in order to gain extra flexibility. There is
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * currently no expected usage case for this though. Is the additional
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * complexity really justified? */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync HGSMICHANNELINFO channels;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** Flag to indicate that one thread is currently processing the command
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * queue. */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync volatile bool fHostCmdProcessing;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /* Pointer to the VRAM location where the HGSMI host flags are kept. */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync volatile HGSMIHOSTFLAGS *pfHostFlags;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** The I/O port used for receiving commands from the host as offsets into
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * the memory area and sending back confirmations (command completion,
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * IRQ acknowlegement). */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync RTIOPORT port;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync} HGSMIHOSTCOMMANDCONTEXT, *PHGSMIHOSTCOMMANDCONTEXT;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync/**
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync * Structure grouping the context needed for sending graphics acceleration
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync * information to the host via VBVA. Each screen has its own VBVA buffer.
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsynctypedef struct VBVABUFFERCONTEXT
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync{
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** Offset of the buffer in the VRAM section for the screen */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync uint32_t offVRAMBuffer;
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** Length of the buffer in bytes */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync uint32_t cbBuffer;
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** This flag is set if we wrote to the buffer faster than the host could
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync * read it. */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync bool fHwBufferOverflow;
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** The VBVA record that we are currently preparing for the host, NULL if
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync * none. */
aef51041e0fe31e8ea903dd7e67fe12cef645654vboxsync struct VBVARECORD *pRecord;
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** Pointer to the VBVA buffer mapped into the current address space. Will
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync * be NULL if VBVA is not enabled. */
aef51041e0fe31e8ea903dd7e67fe12cef645654vboxsync struct VBVABUFFER *pVBVA;
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync} VBVABUFFERCONTEXT, *PVBVABUFFERCONTEXT;
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** @name Helper functions
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * @{ */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Write an 8-bit value to an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(void) VBoxVideoCmnPortWriteUchar(RTIOPORT Port, uint8_t Value)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync{
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#ifdef VBOX_XPDM_MINIPORT
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync VideoPortWritePortUchar((PUCHAR)Port, Value);
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync#elif defined VBOX_GUESTR3XORGMOD
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync outb(Port, Value);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#else /** @todo make these explicit */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync ASMOutU8(Port, Value);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#endif
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync}
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Write a 16-bit value to an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(void) VBoxVideoCmnPortWriteUshort(RTIOPORT Port, uint16_t Value)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync{
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#ifdef VBOX_XPDM_MINIPORT
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync VideoPortWritePortUshort((PUSHORT)Port,Value);
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync#elif defined VBOX_GUESTR3XORGMOD
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync outw(Port, Value);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#else
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync ASMOutU16(Port, Value);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#endif
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync}
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Write a 32-bit value to an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(void) VBoxVideoCmnPortWriteUlong(RTIOPORT Port, uint32_t Value)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync{
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#ifdef VBOX_XPDM_MINIPORT
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync VideoPortWritePortUlong((PULONG)Port,Value);
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync#elif defined VBOX_GUESTR3XORGMOD
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync outl(Port, Value);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#else
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync ASMOutU32(Port, Value);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#endif
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync}
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Read an 8-bit value from an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(uint8_t) VBoxVideoCmnPortReadUchar(RTIOPORT Port)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync{
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#ifdef VBOX_XPDM_MINIPORT
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync return VideoPortReadPortUchar((PUCHAR)Port);
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync#elif defined VBOX_GUESTR3XORGMOD
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync return inb(Port);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#else
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync return ASMInU8(Port);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#endif
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync}
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Read a 16-bit value from an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(uint16_t) VBoxVideoCmnPortReadUshort(RTIOPORT Port)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync{
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#ifdef VBOX_XPDM_MINIPORT
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync return VideoPortReadPortUshort((PUSHORT)Port);
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync#elif defined VBOX_GUESTR3XORGMOD
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync return inw(Port);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#else
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync return ASMInU16(Port);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#endif
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync}
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Read a 32-bit value from an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(uint32_t) VBoxVideoCmnPortReadUlong(RTIOPORT Port)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync{
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#ifdef VBOX_XPDM_MINIPORT
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync return VideoPortReadPortUlong((PULONG)Port);
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync#elif defined VBOX_GUESTR3XORGMOD
d64e2716b25a516483892cc873b2b2a7ebf05d8evboxsync return inl(Port);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#else
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync return ASMInU32(Port);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#endif
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync}
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** @} */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** @name Base HGSMI APIs
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * @{ */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Acknowlege an IRQ. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(void) VBoxHGSMIClearIrq(PHGSMIHOSTCOMMANDCONTEXT pCtx)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync{
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync VBoxVideoCmnPortWriteUlong(pCtx->port, HGSMIOFFSET_VOID);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync}
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIHostCmdComplete(PHGSMIHOSTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync void *pvMem);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIProcessHostQueue(PHGSMIHOSTCOMMANDCONTEXT pCtx);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(bool) VBoxHGSMIIsSupported(void);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void *) VBoxHGSMIBufferAlloc(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync HGSMISIZE cbData,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint8_t u8Ch,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint16_t u16Op);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIBufferFree(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync void *pvBuffer);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(int) VBoxHGSMIBufferSubmit(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync void *pvBuffer);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIGetBaseMappingInfo(uint32_t cbVRAM,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t *poffVRAMBaseMapping,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t *pcbMapping,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t *poffGuestHeapMemory,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t *pcbGuestHeapMemory,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t *poffHostFlags);
97803398b9554900b4dd45f88b2eb2056e2c606bvboxsyncRTDECL(int) VBoxHGSMISendCapsInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
97803398b9554900b4dd45f88b2eb2056e2c606bvboxsync uint32_t fCaps);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** @todo we should provide a cleanup function too as part of the API */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(int) VBoxHGSMISetupGuestContext(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync void *pvGuestHeapMemory,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cbGuestHeapMemory,
32b1164f35483be483177be7b5235002a4a5afbevboxsync uint32_t offVRAMGuestHeapMemory,
32b1164f35483be483177be7b5235002a4a5afbevboxsync const HGSMIENV *pEnv);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIGetHostAreaMapping(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cbVRAM,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t offVRAMBaseMapping,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t *poffVRAMHostArea,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t *pcbHostArea);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMISetupHostContext(PHGSMIHOSTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync void *pvBaseMapping,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t offHostFlags,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync void *pvHostAreaMapping,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t offVRAMHostArea,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cbHostArea);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(int) VBoxHGSMISendHostCtxInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync HGSMIOFFSET offVRAMFlagsLocation,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t fCaps,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t offVRAMHostArea,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cbHostArea);
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(int) VBoxQueryConfHGSMI(PHGSMIGUESTCOMMANDCONTEXT pCtx,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint32_t u32Index, uint32_t *pulValue);
d90a4d0b255342cd5bb146b0ec1f47e66bddb77fvboxsyncRTDECL(int) VBoxHGSMIUpdatePointerShape(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t fFlags,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cHotX,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cHotY,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cWidth,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cHeight,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint8_t *pPixels,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync uint32_t cbLength);
c87c6e10b608762972b76bfc734daaec9070b50bvboxsyncRTDECL(int) VBoxHGSMICursorPosition(PHGSMIGUESTCOMMANDCONTEXT pCtx, bool fReportPosition, uint32_t x, uint32_t y,
c87c6e10b608762972b76bfc734daaec9070b50bvboxsync uint32_t *pxHost, uint32_t *pyHost);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** @} */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync/** @name VBVA APIs
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync * @{ */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(bool) VBoxVBVAEnable(PVBVABUFFERCONTEXT pCtx,
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
25be0b1daccd180b98ac7bd0a81e2acb75db6146vboxsync struct VBVABUFFER *pVBVA, int32_t cScreen);
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(void) VBoxVBVADisable(PVBVABUFFERCONTEXT pCtx,
25be0b1daccd180b98ac7bd0a81e2acb75db6146vboxsync PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
25be0b1daccd180b98ac7bd0a81e2acb75db6146vboxsync int32_t cScreen);
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(bool) VBoxVBVABufferBeginUpdate(PVBVABUFFERCONTEXT pCtx,
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx);
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(void) VBoxVBVABufferEndUpdate(PVBVABUFFERCONTEXT pCtx);
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(bool) VBoxVBVAWrite(PVBVABUFFERCONTEXT pCtx,
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync PHGSMIGUESTCOMMANDCONTEXT pHGSMICtx,
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync const void *pv, uint32_t cb);
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(bool) VBoxVBVAOrderSupported(PVBVABUFFERCONTEXT pCtx, unsigned code);
25be0b1daccd180b98ac7bd0a81e2acb75db6146vboxsyncRTDECL(void) VBoxVBVASetupBufferContext(PVBVABUFFERCONTEXT pCtx,
25be0b1daccd180b98ac7bd0a81e2acb75db6146vboxsync uint32_t offVRAMBuffer,
25be0b1daccd180b98ac7bd0a81e2acb75db6146vboxsync uint32_t cbBuffer);
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync/** @} */
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync/** @name Modesetting APIs
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * @{ */
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(uint32_t) VBoxHGSMIGetMonitorCount(PHGSMIGUESTCOMMANDCONTEXT pCtx);
29a65fa8b740a860f86812328cf900b8d68d93bevboxsyncRTDECL(uint32_t) VBoxVideoGetVRAMSize(void);
29a65fa8b740a860f86812328cf900b8d68d93bevboxsyncRTDECL(bool) VBoxVideoAnyWidthAllowed(void);
e6e6613fd415747d105a4f857c5aa2ecfd203359vboxsyncRTDECL(uint16_t) VBoxHGSMIGetScreenFlags(PHGSMIGUESTCOMMANDCONTEXT pCtx);
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncstruct VBVAINFOVIEW;
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync/**
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * Callback funtion called from @a VBoxHGSMISendViewInfo to initialise
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * the @a VBVAINFOVIEW structure for each screen.
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync *
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * @returns iprt status code
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * @param pvData context data for the callback, passed to @a
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * VBoxHGSMISendViewInfo along with the callback
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * @param pInfo array of @a VBVAINFOVIEW structures to be filled in
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * @todo explicitly pass the array size
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync */
54d13d84f69d613c39bf7672d4095c8d863176efvboxsynctypedef DECLCALLBACK(int) FNHGSMIFILLVIEWINFO(void *pvData,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync struct VBVAINFOVIEW *pInfo,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint32_t cViews);
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync/** Pointer to a FNHGSMIFILLVIEWINFO callback */
54d13d84f69d613c39bf7672d4095c8d863176efvboxsynctypedef FNHGSMIFILLVIEWINFO *PFNHGSMIFILLVIEWINFO;
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(int) VBoxHGSMISendViewInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint32_t u32Count,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync PFNHGSMIFILLVIEWINFO pfnFill,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync void *pvData);
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(void) VBoxVideoSetModeRegisters(uint16_t cWidth, uint16_t cHeight,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint16_t cVirtWidth, uint16_t cBPP,
9bd6fee3d1017cb014d0de810b8ff269b7a12f2evboxsync uint16_t fFlags,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint16_t cx, uint16_t cy);
9bd6fee3d1017cb014d0de810b8ff269b7a12f2evboxsyncRTDECL(bool) VBoxVideoGetModeRegisters(uint16_t *pcWidth,
9bd6fee3d1017cb014d0de810b8ff269b7a12f2evboxsync uint16_t *pcHeight,
9bd6fee3d1017cb014d0de810b8ff269b7a12f2evboxsync uint16_t *pcVirtWidth,
9bd6fee3d1017cb014d0de810b8ff269b7a12f2evboxsync uint16_t *pcBPP,
9bd6fee3d1017cb014d0de810b8ff269b7a12f2evboxsync uint16_t *pfFlags);
9bd6fee3d1017cb014d0de810b8ff269b7a12f2evboxsyncRTDECL(void) VBoxVideoDisableVBE(void);
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(void) VBoxHGSMIProcessDisplayInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint32_t cDisplay,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync int32_t cOriginX,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync int32_t cOriginY,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint32_t offStart,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint32_t cbPitch,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint32_t cWidth,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync uint32_t cHeight,
daf1b2aee694fc8aca9e056e825b3359170ecf37vboxsync uint16_t cBPP,
daf1b2aee694fc8aca9e056e825b3359170ecf37vboxsync uint16_t fFlags);
c87c6e10b608762972b76bfc734daaec9070b50bvboxsyncRTDECL(int) VBoxHGSMIUpdateInputMapping(PHGSMIGUESTCOMMANDCONTEXT pCtx, int32_t cOriginX, int32_t cOriginY,
c87c6e10b608762972b76bfc734daaec9070b50bvboxsync uint32_t cWidth, uint32_t cHeight);
97803398b9554900b4dd45f88b2eb2056e2c606bvboxsyncRTDECL(int) VBoxHGSMIGetModeHints(PHGSMIGUESTCOMMANDCONTEXT pCtx,
97803398b9554900b4dd45f88b2eb2056e2c606bvboxsync unsigned cScreens, VBVAMODEHINT *paHints);
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync/** @} */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRT_C_DECLS_END
cf25f919d659bf00f73e1551230cd6165961061dvboxsync
cf25f919d659bf00f73e1551230cd6165961061dvboxsync#endif /* __HGSMI_GUEST_h__*/