9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBox WDDM Miniport driver
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Copyright (C) 2011 Oracle Corporation
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync *
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * available from http://www.virtualbox.org. This file is free software;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * you can redistribute it and/or modify it under the terms of the GNU
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * General Public License (GPL) as published by the Free Software
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifndef ___VBoxMPCm_h___
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define ___VBoxMPCm_h___
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXVIDEOCM_MGR
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsync KSPIN_LOCK SynchLock;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* session list */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync LIST_ENTRY SessionList;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXVIDEOCM_MGR, *PVBOXVIDEOCM_MGR;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXVIDEOCM_CTX
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync LIST_ENTRY SessionEntry;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync struct VBOXVIDEOCM_SESSION *pSession;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint64_t u64UmData;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXWDDM_HTABLE AllocTable;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXVIDEOCM_CTX, *PVBOXVIDEOCM_CTX;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vboxVideoCmCtxInitEmpty(PVBOXVIDEOCM_CTX pContext);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncNTSTATUS vboxVideoCmCtxAdd(PVBOXVIDEOCM_MGR pMgr, PVBOXVIDEOCM_CTX pContext, HANDLE hUmEvent, uint64_t u64UmData);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncNTSTATUS vboxVideoCmCtxRemove(PVBOXVIDEOCM_MGR pMgr, PVBOXVIDEOCM_CTX pContext);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncNTSTATUS vboxVideoCmInit(PVBOXVIDEOCM_MGR pMgr);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncNTSTATUS vboxVideoCmTerm(PVBOXVIDEOCM_MGR pMgr);
3fa7a7e633f46a212052b510cdb8cee41f279a67vboxsyncNTSTATUS vboxVideoCmSignalEvents(PVBOXVIDEOCM_MGR pMgr);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsyncNTSTATUS vboxVideoCmCmdSubmitCompleteEvent(PVBOXVIDEOCM_CTX pContext, PKEVENT pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid* vboxVideoCmCmdCreate(PVBOXVIDEOCM_CTX pContext, uint32_t cbSize);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid* vboxVideoCmCmdReinitForContext(void *pvCmd, PVBOXVIDEOCM_CTX pContext);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vboxVideoCmCmdRetain(void *pvCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vboxVideoCmCmdRelease(void *pvCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVIDEOCM_SUBMITSIZE_DEFAULT (~0UL)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncvoid vboxVideoCmCmdSubmit(void *pvCmd, uint32_t cbSize);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsync#define VBOXVIDEOCMCMDVISITOR_RETURN_BREAK 0x00000001
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVIDEOCMCMDVISITOR_RETURN_RMCMD 0x00000002
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef DECLCALLBACK(UINT) FNVBOXVIDEOCMCMDVISITOR(PVBOXVIDEOCM_CTX pContext, PVOID pvCmd, uint32_t cbCmd, PVOID pvVisitor);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef FNVBOXVIDEOCMCMDVISITOR *PFNVBOXVIDEOCMCMDVISITOR;
3c5c04d7b0973be0757addef8ba44b9352b38386vboxsyncNTSTATUS vboxVideoCmCmdVisit(PVBOXVIDEOCM_CTX pContext, BOOLEAN bEntireSession, PFNVBOXVIDEOCMCMDVISITOR pfnVisitor, PVOID pvVisitor);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsyncNTSTATUS vboxVideoCmEscape(PVBOXVIDEOCM_CTX pContext, PVBOXDISPIFESCAPE_GETVBOXVIDEOCMCMD pCmd, uint32_t cbCmd);
eb2d4958f7faf812c3bdb2d7587d815022f0bd55vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /* #ifndef ___VBoxMPCm_h___ */