VBoxMPIOCTL.cpp revision 2888816fbcb216a2dbc97a95fa5a50b6caa09e32
/* $Id$ */
/** @file
* VBox XPDM Miniport IOCTL handlers
*/
/*
* Copyright (C) 2011-2012 Oracle Corporation
*
* This file is part of VirtualBox Open Source Edition (OSE), as
* available from http://www.virtualbox.org. This file is free software;
* General Public License (GPL) as published by the Free Software
* Foundation, in version 2 as it comes in the "COPYING" file of the
* VirtualBox OSE distribution. VirtualBox OSE is distributed in the
* hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
*/
#include "VBoxMPInternal.h"
#include "common/VBoxMPCommon.h"
#include <VBox/VBoxGuestLib.h>
#include <VBox/VBoxVideo.h>
* That means we can't read anything from the input one after first write to the output.
* Defines below are somewhat silly way to catch possible misuse at compile time.
*/
#define VBOXMPIOCTL_HIDE(_var) \
{ \
#define VBOXMPIOCTL_UNHIDE() \
}
/* Called for IOCTL_VIDEO_RESET_DEVICE.
* Reset device to a state it comes at system boot time.
* @todo It doesn't do anythyng at the moment, but it looks like the same as VBoxDrvResetHW.
*/
{
LOGF_ENTER();
{
return TRUE;
}
#if 0
/* Don't disable the extended video mode. This would only switch the video mode
* to <current width> x <current height> x 0 bpp which is not what we want. And
* even worse, it causes an disturbing additional mode switch */
#endif
/* Tell the host that we no longer support graphics in the additions */
/* @todo VBoxMPSetGraphicsCap(FALSE); */
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_MAP_VIDEO_MEMORY.
* Maps FrameBuffer and video RAM to a caller's virtual adress space.
*/
{
{
/* Save the new framebuffer size */
}
LOGF_LEAVE();
}
/* Called for IOCTL_VIDEO_UNMAP_VIDEO_MEMORY.
* Unmaps previously mapped FrameBuffer and video RAM from caller's virtual adress space.
*/
BOOLEAN VBoxMPUnmapVideoMemory(PVBOXMP_DEVEXT pExt, PVIDEO_MEMORY VideoMemory, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_SHARE_VIDEO_MEMORY.
* Maps FrameBuffer as a linear frame buffer to a caller's virtual adress space. (obsolete).
*/
{
LOGF_ENTER();
{
return FALSE;
}
{
}
LOGF_LEAVE();
}
/* Called for IOCTL_VIDEO_UNSHARE_VIDEO_MEMORY.
* Unmaps framebuffer previously mapped with IOCTL_VIDEO_SHARE_VIDEO_MEMORY.
*/
BOOLEAN VBoxMPUnshareVideoMemory(PVBOXMP_DEVEXT pExt, PVIDEO_SHARE_MEMORY pMem, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_SET_CURRENT_MODE.
* Sets adapter video mode.
*/
{
/* Get requested mode info */
{
WARN(("ignoring set VIDEO_MODE_NO_ZERO_MEMORY or VIDEO_MODE_MAP_MEM_LINEAR"));
}
if (!pModeInfo)
{
return FALSE;
}
LOG(("screen [%d] mode %d width %d, height %d, bpp %d",
pExt->iDevice, pModeInfo->ModeIndex, pModeInfo->VisScreenWidth, pModeInfo->VisScreenHeight, pModeInfo->BitsPerPlane));
/* Update device info */
{
return TRUE;
}
/* Perform actual mode switch */
/*@todo read back from port to check if mode switch was successful */
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_QUERY_CURRENT_MODE.
* Returns information about current video mode.
*/
BOOLEAN VBoxMPQueryCurrentMode(PVBOXMP_DEVEXT pExt, PVIDEO_MODE_INFORMATION pModeInfo, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_QUERY_NUM_AVAIL_MODES.
* Returns count of supported video modes and structure size in bytes,
* used by the following IOCTL_VIDEO_QUERY_AVAIL_MODES.
*/
BOOLEAN VBoxMPQueryNumAvailModes(PVBOXMP_DEVEXT pExt, PVIDEO_NUM_MODES pNumModes, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_QUERY_AVAIL_MODES.
* Returns information about supported video modes.
*/
BOOLEAN VBoxMPQueryAvailModes(PVBOXMP_DEVEXT pExt, PVIDEO_MODE_INFORMATION pModes, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_SET_COLOR_REGISTERS.
* Sets adapter's color registers.
*/
{
LOGF_ENTER();
{
return FALSE;
}
{
}
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_SET_POINTER_ATTR.
* Sets pointer attributes.
*/
BOOLEAN VBoxMPSetPointerAttr(PVBOXMP_DEVEXT pExt, PVIDEO_POINTER_ATTRIBUTES pPointerAttrs, uint32_t cbLen, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
if (VBoxQueryHostWantsAbsolute())
{
}
else
{
LOG(("Fallback to sw pointer."));
}
LOGF_LEAVE();
return bRC;
}
/* Called for IOCTL_VIDEO_ENABLE_POINTER/IOCTL_VIDEO_DISABLE_POINTER.
* Hides pointer or makes it visible depending on bEnable value passed.
*/
{
LOGF_ENTER();
if (VBoxQueryHostWantsAbsolute())
{
/* Check if it's not shown already. */
{
/* Visible and No Shape means show the pointer, 0 means hide pointer.
* It's enough to init only this field.
*/
/* Pass info to the host. */
if (bRC)
{
/* Update device state. */
}
}
}
else
{
}
LOGF_LEAVE();
return bRC;
}
/* Called for IOCTL_VIDEO_QUERY_POINTER_POSITION.
* Query pointer position.
*/
BOOLEAN VBoxMPQueryPointerPosition(PVBOXMP_DEVEXT pExt, PVIDEO_POINTER_POSITION pPos, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
{
/* map from 0xFFFF to the current resolution */
}
else
{
}
LOGF_LEAVE();
return bRC;
}
/* Called for IOCTL_VIDEO_QUERY_POINTER_CAPABILITIES.
* Query supported hardware pointer feaures.
* Note: we always return all caps we could ever support,
* related functions will return errors if host doesn't accept pointer integration
* and force display driver to enter software fallback codepath.
*/
BOOLEAN VBoxMPQueryPointerCapabilities(PVBOXMP_DEVEXT pExt, PVIDEO_POINTER_CAPABILITIES pCaps, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
/* Up to 64x64 shapes */
/* Not used by our display driver */
LOGF_LEAVE();
return TRUE;
}
/* Called for IOCTL_VIDEO_VBVA_ENABLE.
* Display driver is ready to switch to VBVA operation mode.
*/
BOOLEAN VBoxMPVBVAEnable(PVBOXMP_DEVEXT pExt, BOOLEAN bEnable, VBVAENABLERESULT *pResult, PSTATUS_BLOCK pStatus)
{
int rc;
LOGF_ENTER();
if (RT_SUCCESS(rc))
{
}
else
{
}
LOGF_LEAVE();
return bRC;
}
/* Called for IOCTL_VIDEO_VBOX_SETVISIBLEREGION.
* Sends visible regions information to the host.
*/
{
int rc;
LOGF_ENTER();
rc = VbglGRAlloc((VMMDevRequestHeader **)&req, sizeof(VMMDevVideoSetVisibleRegion) + (cRects-1)*sizeof(RTRECT),
if (RT_SUCCESS(rc))
{
if (RT_SUCCESS(rc))
{
}
}
else
{
}
if (!bRC)
{
}
LOGF_LEAVE();
return bRC;
}
/* Called for IOCTL_VIDEO_HGSMI_QUERY_PORTPROCS.
* Returns video port api function pointers.
*/
BOOLEAN VBoxMPHGSMIQueryPortProcs(PVBOXMP_DEVEXT pExt, HGSMIQUERYCPORTPROCS *pProcs, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
{
}
else
{
}
LOGF_LEAVE();
return bRC;
}
/* Called for IOCTL_VIDEO_HGSMI_QUERY_CALLBACKS.
* Returns HGSMI related callbacks.
*/
BOOLEAN VBoxMPHGSMIQueryCallbacks(PVBOXMP_DEVEXT pExt, HGSMIQUERYCALLBACKS *pCallbacks, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
{
}
else
{
}
LOGF_LEAVE();
return bRC;
}
/* Called for IOCTL_VIDEO_QUERY_HGSMI_INFO.
* Returns hgsmi info for this adapter.
*/
{
LOGF_ENTER();
{
}
else
{
}
LOGF_LEAVE();
return bRC;
}
/* Called for IOCTL_VIDEO_HGSMI_HANDLER_ENABLE.
* Enables HGSMI miniport channel.
*/
BOOLEAN VBoxMPHgsmiHandlerEnable(PVBOXMP_DEVEXT pExt, HGSMIHANDLERENABLE *pChannel, PSTATUS_BLOCK pStatus)
{
LOGF_ENTER();
{
int rc = VBoxVbvaChannelDisplayEnable(VBoxCommonFromDeviceExt(pExt), pExt->iDevice, pChannel->u8Channel);
if (RT_FAILURE(rc))
{
}
}
else
{
}
LOGF_LEAVE();
return bRC;
}
#ifdef VBOX_WITH_VIDEOHWACCEL
/* Called for IOCTL_VIDEO_VHWA_QUERY_INFO.
* Returns framebuffer offset.
*/
{
LOGF_ENTER();
{
}
else
{
}
LOGF_LEAVE();
return bRC;
}
#endif
{
LOGF_ENTER();
{
{
u32Flags = 0;
}
}
LOGF_LEAVE();
return bRC;
}