cf25f919d659bf00f73e1551230cd6165961061dvboxsync * VBox Host Guest Shared Memory Interface (HGSMI).
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * OS-independent guest structures.
c58f1213e628a545081c70e26c6b67a841cff880vboxsync * Copyright (C) 2006-2012 Oracle Corporation
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 * 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 * 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 * Structure grouping the context needed for submitting commands to the host
04b02ffb8824a60fd37777bc1f7d2f35104a274cvboxsync * via HGSMI
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** Information about the memory heap located in VRAM from which data
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * structures to be sent to the host are allocated. */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** The I/O port used for submitting commands to the host by writing their
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * offsets into the heap. */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync} HGSMIGUESTCOMMANDCONTEXT, *PHGSMIGUESTCOMMANDCONTEXT;
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * Structure grouping the context needed for receiving commands from the host
04b02ffb8824a60fd37777bc1f7d2f35104a274cvboxsync * via HGSMI
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /** Information about the memory area located in VRAM in which the host
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * places data structures to be read by the guest. */
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 /** Flag to indicate that one thread is currently processing the command
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * queue. */
cf25f919d659bf00f73e1551230cd6165961061dvboxsync /* Pointer to the VRAM location where the HGSMI host flags are kept. */
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} HGSMIHOSTCOMMANDCONTEXT, *PHGSMIHOSTCOMMANDCONTEXT;
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 /** Offset of the buffer in the VRAM section for the screen */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** Length of the buffer in bytes */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** This flag is set if we wrote to the buffer faster than the host could
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync * read it. */
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** The VBVA record that we are currently preparing for the host, NULL if
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync /** Pointer to the VBVA buffer mapped into the current address space. Will
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync * be NULL if VBVA is not enabled. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** @name Helper functions
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Write an 8-bit value to an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(void) VBoxVideoCmnPortWriteUchar(RTIOPORT Port, uint8_t Value)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync#else /** @todo make these explicit */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Write a 16-bit value to an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(void) VBoxVideoCmnPortWriteUshort(RTIOPORT Port, uint16_t Value)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Write a 32-bit value to an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(void) VBoxVideoCmnPortWriteUlong(RTIOPORT Port, uint32_t Value)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Read an 8-bit value from an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(uint8_t) VBoxVideoCmnPortReadUchar(RTIOPORT Port)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Read a 16-bit value from an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(uint16_t) VBoxVideoCmnPortReadUshort(RTIOPORT Port)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Read a 32-bit value from an I/O port. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(uint32_t) VBoxVideoCmnPortReadUlong(RTIOPORT Port)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** @name Base HGSMI APIs
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Acknowlege an IRQ. */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncDECLINLINE(void) VBoxHGSMIClearIrq(PHGSMIHOSTCOMMANDCONTEXT pCtx)
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync VBoxVideoCmnPortWriteUlong(pCtx->port, HGSMIOFFSET_VOID);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIHostCmdComplete(PHGSMIHOSTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIProcessHostQueue(PHGSMIHOSTCOMMANDCONTEXT pCtx);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void *) VBoxHGSMIBufferAlloc(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIBufferFree(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(int) VBoxHGSMIBufferSubmit(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIGetBaseMappingInfo(uint32_t cbVRAM,
97803398b9554900b4dd45f88b2eb2056e2c606bvboxsyncRTDECL(int) VBoxHGSMISendCapsInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** @todo we should provide a cleanup function too as part of the API */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(int) VBoxHGSMISetupGuestContext(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIGetHostAreaMapping(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMISetupHostContext(PHGSMIHOSTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(int) VBoxHGSMISendHostCtxInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(int) VBoxQueryConfHGSMI(PHGSMIGUESTCOMMANDCONTEXT pCtx,
d90a4d0b255342cd5bb146b0ec1f47e66bddb77fvboxsyncRTDECL(int) VBoxHGSMIUpdatePointerShape(PHGSMIGUESTCOMMANDCONTEXT pCtx,
c87c6e10b608762972b76bfc734daaec9070b50bvboxsyncRTDECL(int) VBoxHGSMICursorPosition(PHGSMIGUESTCOMMANDCONTEXT pCtx, bool fReportPosition, uint32_t x, uint32_t y,
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsync/** @name VBVA APIs
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(bool) VBoxVBVAEnable(PVBVABUFFERCONTEXT pCtx,
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(void) VBoxVBVADisable(PVBVABUFFERCONTEXT pCtx,
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(bool) VBoxVBVABufferBeginUpdate(PVBVABUFFERCONTEXT pCtx,
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(void) VBoxVBVABufferEndUpdate(PVBVABUFFERCONTEXT pCtx);
b0ba81213264a60e4207772639b53f5f4cbe4cc7vboxsyncRTDECL(bool) VBoxVBVAOrderSupported(PVBVABUFFERCONTEXT pCtx, unsigned code);
25be0b1daccd180b98ac7bd0a81e2acb75db6146vboxsyncRTDECL(void) VBoxVBVASetupBufferContext(PVBVABUFFERCONTEXT pCtx,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync/** @name Modesetting APIs
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(uint32_t) VBoxHGSMIGetMonitorCount(PHGSMIGUESTCOMMANDCONTEXT pCtx);
e6e6613fd415747d105a4f857c5aa2ecfd203359vboxsyncRTDECL(uint16_t) VBoxHGSMIGetScreenFlags(PHGSMIGUESTCOMMANDCONTEXT pCtx);
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * Callback funtion called from @a VBoxHGSMISendViewInfo to initialise
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync * the @a VBVAINFOVIEW structure for each screen.
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
54d13d84f69d613c39bf7672d4095c8d863176efvboxsynctypedef DECLCALLBACK(int) FNHGSMIFILLVIEWINFO(void *pvData,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsync/** Pointer to a FNHGSMIFILLVIEWINFO callback */
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(int) VBoxHGSMISendViewInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(void) VBoxVideoSetModeRegisters(uint16_t cWidth, uint16_t cHeight,
9bd6fee3d1017cb014d0de810b8ff269b7a12f2evboxsyncRTDECL(bool) VBoxVideoGetModeRegisters(uint16_t *pcWidth,
54d13d84f69d613c39bf7672d4095c8d863176efvboxsyncRTDECL(void) VBoxHGSMIProcessDisplayInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
c87c6e10b608762972b76bfc734daaec9070b50bvboxsyncRTDECL(int) VBoxHGSMIUpdateInputMapping(PHGSMIGUESTCOMMANDCONTEXT pCtx, int32_t cOriginX, int32_t cOriginY,
97803398b9554900b4dd45f88b2eb2056e2c606bvboxsyncRTDECL(int) VBoxHGSMIGetModeHints(PHGSMIGUESTCOMMANDCONTEXT pCtx,
cf25f919d659bf00f73e1551230cd6165961061dvboxsync#endif /* __HGSMI_GUEST_h__*/