VBoxVideoGuest.h revision a0cebf7fbe7defe88df7dcb64e51af63480b7ab0
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * VBox Host Guest Shared Memory Interface (HGSMI).
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * OS-independent guest structures.
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * Copyright (C) 2006-2008 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
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * 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
cf25f919d659bf00f73e1551230cd6165961061dvboxsync * 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;
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,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * Callback funtion called from @a VBoxHGSMISendViewInfo to initialise
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * the @a VBVAINFOVIEW structure for each screen.
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * @returns iprt status code
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * @param pvData context data for the callback, passed to @a
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * VBoxHGSMISendViewInfo along with the callback
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * @param pInfo array of @a VBVAINFOVIEW structures to be filled in
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync * @todo explicitly pass the array size
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsynctypedef DECLCALLBACK(int) FNHGSMIFILLVIEWINFO (void *pvData,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsync/** Pointer to a FNHGSMIFILLVIEWINFO callback */
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(int) VBoxHGSMISendViewInfo(PHGSMIGUESTCOMMANDCONTEXT pCtx,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(void) VBoxHGSMIGetBaseMappingInfo(uint32_t cbVRAM,
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,
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(uint32_t) VBoxHGSMIGetMonitorCount(PHGSMIGUESTCOMMANDCONTEXT pCtx);
a0cebf7fbe7defe88df7dcb64e51af63480b7ab0vboxsyncRTDECL(bool) VBoxHGSMIUpdatePointerShape(PHGSMIGUESTCOMMANDCONTEXT pCtx,
cf25f919d659bf00f73e1551230cd6165961061dvboxsync#endif /* __HGSMI_GUEST_h__*/