9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* $Id$ */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/** @file
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * VBox Miniport IOCTL related header
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 VBOXVIDEOIOCTL_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define VBOXVIDEOIOCTL_H
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include <VBox/VMMDev.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#include <VBox/HGSMI/HGSMI.h>
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* ==================== Virtual Box specific VRP's ==================== */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Called by the display driver when it is ready to
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * switch to VBVA operation mode.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Successful return means that VBVA can be used and
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * output buffer contains VBVAENABLERESULT data.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * An error means that VBVA can not be used
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * (disabled or not supported by the host).
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define IOCTL_VIDEO_VBVA_ENABLE \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync CTL_CODE(FILE_DEVICE_VIDEO, 0x400, METHOD_BUFFERED, FILE_ANY_ACCESS)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Called to get video port api function pointers */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define IOCTL_VIDEO_HGSMI_QUERY_PORTPROCS \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync CTL_CODE(FILE_DEVICE_VIDEO, 0x434, METHOD_BUFFERED, FILE_ANY_ACCESS)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Called to get HGSMI related callbacks */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync CTL_CODE(FILE_DEVICE_VIDEO, 0x431, METHOD_BUFFERED, FILE_ANY_ACCESS)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Called to get adapter's HGSMI information */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define IOCTL_VIDEO_QUERY_HGSMI_INFO \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync CTL_CODE(FILE_DEVICE_VIDEO, 0x430, METHOD_BUFFERED, FILE_ANY_ACCESS)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Called to enable HGSMI miniport channel */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define IOCTL_VIDEO_HGSMI_HANDLER_ENABLE \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync CTL_CODE(FILE_DEVICE_VIDEO, 0x432, METHOD_BUFFERED, FILE_ANY_ACCESS)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Called to disable HGSMI miniport channel */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define IOCTL_VIDEO_HGSMI_HANDLER_DISABLE \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync CTL_CODE(FILE_DEVICE_VIDEO, 0x433, METHOD_BUFFERED, FILE_ANY_ACCESS)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Called to get framebuffer offset */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#define IOCTL_VIDEO_VHWA_QUERY_INFO \
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync CTL_CODE(FILE_DEVICE_VIDEO, 0x435, METHOD_BUFFERED, FILE_ANY_ACCESS)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync/* Called to get adapter's generic information */
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync#define IOCTL_VIDEO_QUERY_VBOXVIDEO_INFO \
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync CTL_CODE(FILE_DEVICE_VIDEO, 0x436, METHOD_BUFFERED, FILE_ANY_ACCESS)
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* ==================== Data structures used by Virtual Box VRPS's ==================== */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef void* HVBOXVIDEOHGSMI;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Complete host commands addressed to the display */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef DECLCALLBACK(void) FNVBOXVIDEOHGSMICOMPLETION(HVBOXVIDEOHGSMI hHGSMI, struct VBVAHOSTCMD * pCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef FNVBOXVIDEOHGSMICOMPLETION *PFNVBOXVIDEOHGSMICOMPLETION;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* request the host commands addressed to the display */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef DECLCALLBACK(int) FNVBOXVIDEOHGSMICOMMANDS(HVBOXVIDEOHGSMI hHGSMI, uint8_t u8Channel, uint32_t iDevice, struct VBVAHOSTCMD ** ppCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef FNVBOXVIDEOHGSMICOMMANDS *PFNVBOXVIDEOHGSMICOMMANDS;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* post guest command (offset) to the host */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef DECLCALLBACK(void) FNVBOXVIDEOHGSMIPOSTCOMMAND(HVBOXVIDEOHGSMI hHGSMI, HGSMIOFFSET offCmd);
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef FNVBOXVIDEOHGSMIPOSTCOMMAND *PFNVBOXVIDEOHGSMIPOSTCOMMAND;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#pragma pack(1)
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Data returned by IOCTL_VIDEO_VBVA_ENABLE. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VBVAENABLERESULT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Pointer to VBVAMemory part of VMMDev memory region. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBVAMEMORY *pVbvaMemory;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Called to force the host to process VBVA memory,
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * when there is no more free space in VBVA memory.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * Normally this never happens.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync *
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * The other purpose is to perform a synchronous command.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync * But the goal is to have no such commands at all.
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync DECLR0CALLBACKMEMBER(void, pfnFlush, (void *pvFlush));
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Pointer required by the pfnFlush callback. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync void *pvFlush;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VBVAENABLERESULT;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Data returned by IOCTL_VIDEO_HGSMI_QUERY_PORTPROCS. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _HGSMIQUERYCPORTPROCS
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PVOID pContext;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync VBOXVIDEOPORTPROCS VideoPortProcs;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} HGSMIQUERYCPORTPROCS;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Data returned by IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _HGSMIQUERYCALLBACKS
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HVBOXVIDEOHGSMI hContext;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNVBOXVIDEOHGSMICOMPLETION pfnCompletionHandler;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync PFNVBOXVIDEOHGSMICOMMANDS pfnRequestCommandsHandler;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} HGSMIQUERYCALLBACKS;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Data returned by IOCTL_VIDEO_QUERY_HGSMI_INFO. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _QUERYHGSMIRESULT
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Device index (0 for primary) */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG iDevice;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Flags. Currently none are defined and the field must be initialized to 0. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG ulFlags;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Describes VRAM chunk for this display device. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync HGSMIAREA areaDisplay;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Size of the display information area. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t u32DisplayInfoSize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* Minimum size of the VBVA buffer. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint32_t u32MinVBVABufferSize;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync /* IO port to submit guest HGSMI commands. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync RTIOPORT IOPortGuestCommand;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} QUERYHGSMIRESULT;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Data passed to IOCTL_VIDEO_HGSMI_HANDLER_ENABLE. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _HGSMIHANDLERENABLE
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync uint8_t u8Channel;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} HGSMIHANDLERENABLE;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#ifdef VBOX_WITH_VIDEOHWACCEL
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync/* Data returned by IOCTL_VIDEO_VHWA_QUERY_INFO. */
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsynctypedef struct _VHWAQUERYINFO
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync{
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync ULONG_PTR offVramBase;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync} VHWAQUERYINFO;
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#pragma pack()
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync/* IOCTL_VIDEO_QUERY_INFO */
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync#define VBOXVIDEO_INFO_LEVEL_REGISTRY_FLAGS 1
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync#define VBOXVIDEO_REGISTRY_FLAGS_DISABLE_BITMAP_CACHE 0x00000001
3d5847db3882b6af81db232f55ee404b22141e5dvboxsync
9055f61bb57d2a625c6434d55beac7565c3b3c0dvboxsync#endif /*VBOXVIDEOIOCTL_H*/