9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBox video port functions header
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2011-2012 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 VBOXVIDEOPORTAPI_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVIDEOPORTAPI_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* To maintain binary backward compatibility with older windows versions
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * we query at runtime for video port functions which are not present in NT 4.0
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Those could used in the display driver also.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*Basic datatypes*/
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef long VBOXVP_STATUS;
7519a1c4323fa86fbb19a36a91cd25abfd7af714vboxsync#ifndef VBOX_USING_W2K3DDK
7519a1c4323fa86fbb19a36a91cd25abfd7af714vboxsynctypedef struct _ENG_EVENT *VBOXPEVENT;
7519a1c4323fa86fbb19a36a91cd25abfd7af714vboxsync#else
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VIDEO_PORT_EVENT *VBOXPEVENT;
7519a1c4323fa86fbb19a36a91cd25abfd7af714vboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VIDEO_PORT_SPIN_LOCK *VBOXPSPIN_LOCK;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef union _LARGE_INTEGER *VBOXPLARGE_INTEGER;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef enum VBOXVP_POOL_TYPE
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxVpNonPagedPool,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxVpPagedPool,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxVpNonPagedPoolCacheAligned = 4,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBoxVpPagedPoolCacheAligned
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXVP_POOL_TYPE;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXNOTIFICATION_EVENT 0x00000001UL
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXNO_ERROR 0x00000000UL
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/*VideoPort API functions*/
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef VBOXVP_STATUS (*PFNWAITFORSINGLEOBJECT) (void* HwDeviceExtension, void* Object, VBOXPLARGE_INTEGER Timeout);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef long (*PFNSETEVENT) (void* HwDeviceExtension, VBOXPEVENT pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef void (*PFNCLEAREVENT) (void* HwDeviceExtension, VBOXPEVENT pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef VBOXVP_STATUS (*PFNCREATEEVENT) (void* HwDeviceExtension, unsigned long EventFlag, void* Unused, VBOXPEVENT *ppEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef VBOXVP_STATUS (*PFNDELETEEVENT) (void* HwDeviceExtension, VBOXPEVENT pEvent);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef void* (*PFNALLOCATEPOOL) (void* HwDeviceExtension, VBOXVP_POOL_TYPE PoolType, size_t NumberOfBytes, unsigned long Tag);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef void (*PFNFREEPOOL) (void* HwDeviceExtension, void* Ptr);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef unsigned char (*PFNQUEUEDPC) (void* HwDeviceExtension, void (*CallbackRoutine)(void* HwDeviceExtension, void *Context), void *Context);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef VBOXVP_STATUS (*PFNCREATESECONDARYDISPLAY)(void* HwDeviceExtension, void* SecondaryDeviceExtension, unsigned long ulFlag);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* pfn*Event and pfnWaitForSingleObject functions are available */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVIDEOPORTPROCS_EVENT 0x00000002
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* pfn*Pool functions are available */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVIDEOPORTPROCS_POOL 0x00000004
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* pfnQueueDpc function is available */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVIDEOPORTPROCS_DPC 0x00000008
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* pfnCreateSecondaryDisplay function is available */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVIDEOPORTPROCS_CSD 0x00000010
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct VBOXVIDEOPORTPROCS
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* ored VBOXVIDEOPORTPROCS_xxx constants describing the supported functionality */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t fSupportedTypes;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNWAITFORSINGLEOBJECT pfnWaitForSingleObject;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNSETEVENT pfnSetEvent;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNCLEAREVENT pfnClearEvent;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNCREATEEVENT pfnCreateEvent;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNDELETEEVENT pfnDeleteEvent;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNALLOCATEPOOL pfnAllocatePool;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNFREEPOOL pfnFreePool;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNQUEUEDPC pfnQueueDpc;
b0a3d0ec5780199a2f379da63c59ccf48f1a73b9vboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNCREATESECONDARYDISPLAY pfnCreateSecondaryDisplay;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBOXVIDEOPORTPROCS;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOXVIDEOPORTAPI_H*/