VBoxMPCr.h revision 1c0d3d017f9a45748b4839bf6622b53e83a4f1f8
/* $Id$ */
/** @file
* VBox WDDM Miniport driver
*/
/*
* Copyright (C) 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.
*/
#ifndef ___VBoxMPCr_h__
#define ___VBoxMPCr_h__
#include <VBox/VBoxGuestLib.h>
#include <VBoxGuestR0LibCrOgl.h>
typedef struct VBOXMP_CRCTLCON
{
void VBoxMpCrCtlConInit();
bool VBoxMpCrCtlConIs3DSupported();
int VBoxMpCrCtlConCall(PVBOXMP_CRCTLCON pCrCtlCon, struct VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
int VBoxMpCrCtlConCallUserData(PVBOXMP_CRCTLCON pCrCtlCon, struct VBoxGuestHGCMCallInfo *pData, uint32_t cbData);
# include <cr_pack.h>
typedef struct VBOXMP_CRDATACON
{
{
int rc = VBoxMpCrCtlConConnect(pCtlCon, CR_PROTOCOL_VERSION_MAJOR, CR_PROTOCOL_VERSION_MINOR, &pDataCon->u32ClientID);
if (RT_SUCCESS(rc))
{
return VINF_SUCCESS;
}
return rc;
}
{
if (RT_SUCCESS(rc))
{
/* sanity */
pDataCon->u32ClientID = 0;
return VINF_SUCCESS;
}
return rc;
}
typedef struct VBOXMP_CRSHGSMICON_BUFDR
{
void *pvBuf;
typedef struct VBOXMP_CRSHGSMICON_BUFDR_CACHE
{
volatile PVBOXMP_CRSHGSMICON_BUFDR pBufDr;
typedef struct VBOXMP_CRSHGSMITRANSPORT
{
/** the rx buffer passed here is only valid in the context of the callback.
* the callee must NOT free it or use outside of the callback context.
* */
typedef DECLCALLBACK(void) FNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, void *pvRx, uint32_t cbRx, void *pvCtx);
typedef FNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION *PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEREADASYNC_COMPLETION;
typedef DECLCALLBACK(void) FNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION(PVBOXMP_CRSHGSMITRANSPORT pCon, int rc, void *pvCtx);
typedef FNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION *PFNVBOXMP_CRSHGSMITRANSPORT_SENDWRITEASYNC_COMPLETION;
void* VBoxMpCrShgsmiTransportCmdCreateWriteReadAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t u32ClientID, void *pvBuffer, uint32_t cbBuffer,
void* VBoxMpCrShgsmiTransportCmdCreateWriteAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, uint32_t u32ClientID, void *pvBuffer, uint32_t cbBuffer,
int VBoxMpCrShgsmiTransportCmdSubmitWriteReadAsync(PVBOXMP_CRSHGSMITRANSPORT pCon, void *pvContext);
typedef struct VBOXMP_CRPACKER
{
{
}
{}
DECLINLINE(void) VBoxMpCrPackerTxBufferInit(PVBOXMP_CRPACKER pPacker, void *pvBuffer, uint32_t cbBuffer, uint32_t cCommands)
{
}
DECLINLINE(CRMessageOpcodes*) vboxMpCrPackerPrependHeader( const CRPackBuffer *pBuffer, uint32_t *cbData, void **ppvPackBuffer)
{
hdr = (CRMessageOpcodes *)
return hdr;
}
DECLINLINE(void*) VBoxMpCrPackerTxBufferComplete(PVBOXMP_CRPACKER pPacker, uint32_t *pcbBuffer, void **ppvPackBuffer)
{
void *pvPackBuffer;
else
{
cbData = 0;
pvPackBuffer = NULL;
}
return pHdr;
}
{
}
{
int *pWriteback;
(*pWriteback)--;
}
{
int *pWriteback;
void *pDst;
(*pWriteback)--;
}
{
{
case CR_MESSAGE_WRITEBACK:
return VINF_SUCCESS;
case CR_MESSAGE_READBACK:
return VINF_SUCCESS;
default:
return VERR_NOT_SUPPORTED;
}
}
{
return (void*)(pRx+1);
}
{
}
/* must be called after calling VBoxMpCrCtlConIs3DSupported only */
#define VBOXMP_CRCMD_HEADER_SIZE sizeof (CRMessageOpcodes)
/* last +4 below is 4-aligned command opcode size (i.e. ((1 + 3) & ~3)) */
#endif /* #ifndef ___VBoxMPCr_h__ */