083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync/* $Id$ */
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync/** @file
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync * VBoxGuestR3Lib - Ring-3 Support Library for VirtualBox guest additions, GR.
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync */
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync/*
c7814cf6e1240a519cbec0441e033d0e2470ed00vboxsync * Copyright (C) 2007-2010 Oracle Corporation
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync *
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync * available from http://www.virtualbox.org. This file is free software;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync * you can redistribute it and/or modify it under the terms of the GNU
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync * General Public License (GPL) as published by the Free Software
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
1c94c0a63ba68be1a7b2c640e70d7a06464e4fcavboxsync *
aba0e602e244ae7c4f11b50fc6d2440f5a762038vboxsync * The contents of this file may alternatively be used under the terms
aba0e602e244ae7c4f11b50fc6d2440f5a762038vboxsync * of the Common Development and Distribution License Version 1.0
aba0e602e244ae7c4f11b50fc6d2440f5a762038vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
aba0e602e244ae7c4f11b50fc6d2440f5a762038vboxsync * VirtualBox OSE distribution, in which case the provisions of the
aba0e602e244ae7c4f11b50fc6d2440f5a762038vboxsync * CDDL are applicable instead of those of the GPL.
aba0e602e244ae7c4f11b50fc6d2440f5a762038vboxsync *
aba0e602e244ae7c4f11b50fc6d2440f5a762038vboxsync * You may elect to license modified versions of this file under the
aba0e602e244ae7c4f11b50fc6d2440f5a762038vboxsync * terms and conditions of either the GPL or the CDDL or both.
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync */
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync/*******************************************************************************
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync* Header Files *
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync*******************************************************************************/
208aaecb51db539a2f7f3d25f38dd2efd0f014a3vboxsync#include <iprt/mem.h>
208aaecb51db539a2f7f3d25f38dd2efd0f014a3vboxsync#include <iprt/assert.h>
208aaecb51db539a2f7f3d25f38dd2efd0f014a3vboxsync#include <iprt/string.h>
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync#include <iprt/err.h>
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync#include "VBGLR3Internal.h"
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
0c1bdc5adae416967cb64e09f8ec81a5b77fe31dvboxsyncint vbglR3GRAlloc(VMMDevRequestHeader **ppReq, uint32_t cb, VMMDevRequestType enmReqType)
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync{
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync VMMDevRequestHeader *pReq;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync AssertPtrReturn(ppReq, VERR_INVALID_PARAMETER);
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync AssertMsgReturn(cb >= sizeof(VMMDevRequestHeader), ("%#x vs %#zx\n", cb, sizeof(VMMDevRequestHeader)),
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync VERR_INVALID_PARAMETER);
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync pReq = (VMMDevRequestHeader *)RTMemTmpAlloc(cb);
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync if (RT_UNLIKELY(!pReq))
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync return VERR_NO_MEMORY;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync pReq->size = cb;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync pReq->version = VMMDEV_REQUEST_HEADER_VERSION;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync pReq->requestType = enmReqType;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync pReq->rc = VERR_GENERAL_FAILURE;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync pReq->reserved1 = 0;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync pReq->reserved2 = 0;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync *ppReq = pReq;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync return VINF_SUCCESS;
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync}
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
0c1bdc5adae416967cb64e09f8ec81a5b77fe31dvboxsyncVBGLR3DECL(int) vbglR3GRPerform(VMMDevRequestHeader *pReq)
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync{
55f72d08ca2ada22d085555ae1d6fafcdf82a320vboxsync return vbglR3DoIOCtl(VBOXGUEST_IOCTL_VMMREQUEST(pReq->size), pReq, pReq->size);
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync}
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync
0c1bdc5adae416967cb64e09f8ec81a5b77fe31dvboxsyncvoid vbglR3GRFree(VMMDevRequestHeader *pReq)
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync{
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync RTMemTmpFree(pReq);
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync}
083dd76e9fd7a829b1ed67ffc9003276643e7db1vboxsync