SUPDrvIOC.h revision bebdae9c9a445d6ab7b704db95d9e5bb08805447
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/* $Revision$ */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @file
c11f819521ac699ff05361aa39f2a6e7342aacaevboxsync * VirtualBox Support Driver - IOCtl definitions.
c11f819521ac699ff05361aa39f2a6e7342aacaevboxsync */
c11f819521ac699ff05361aa39f2a6e7342aacaevboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/*
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Copyright (C) 2006-2007 Sun Microsystems, Inc.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
ef0576b151f3ad77ecefe5f4641d5d7f0caedafcvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * available from http://www.virtualbox.org. This file is free software;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * you can redistribute it and/or modify it under the terms of the GNU
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * General Public License (GPL) as published by the Free Software
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * The contents of this file may alternatively be used under the terms
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * of the Common Development and Distribution License Version 1.0
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * VirtualBox OSE distribution, in which case the provisions of the
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * CDDL are applicable instead of those of the GPL.
b450d7a1747c5f4fb7c917a8ec1f9ce8440d7ffevboxsync *
b450d7a1747c5f4fb7c917a8ec1f9ce8440d7ffevboxsync * You may elect to license modified versions of this file under the
b450d7a1747c5f4fb7c917a8ec1f9ce8440d7ffevboxsync * terms and conditions of either the GPL or the CDDL or both.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
b450d7a1747c5f4fb7c917a8ec1f9ce8440d7ffevboxsync * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Clara, CA 95054 USA or visit http://www.sun.com if you need
b450d7a1747c5f4fb7c917a8ec1f9ce8440d7ffevboxsync * additional information or have any questions.
b450d7a1747c5f4fb7c917a8ec1f9ce8440d7ffevboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync#ifndef ___SUPDrvIOC_h___
b450d7a1747c5f4fb7c917a8ec1f9ce8440d7ffevboxsync#define ___SUPDrvIOC_h___
b450d7a1747c5f4fb7c917a8ec1f9ce8440d7ffevboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/*
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Basic types.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#include <iprt/stdint.h>
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/*
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync * IOCtl numbers.
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync * We're using the Win32 type of numbers here, thus the macros below.
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync * The SUP_IOCTL_FLAG macro is used to separate requests from 32-bit
43747b1f0bc8302a238fb35e55857a5e9aa1933dvboxsync * and 64-bit processes.
d6ec942234269e5c8ddc45e26473fd575ade6fbcvboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#ifdef RT_ARCH_AMD64
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# define SUP_IOCTL_FLAG 128
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#elif defined(RT_ARCH_X86)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# define SUP_IOCTL_FLAG 0
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#else
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# error "dunno which arch this is!"
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#endif
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#ifdef RT_OS_WINDOWS
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# ifndef CTL_CODE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# include <Windows.h>
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# endif
9ee86050975427444ed8f68e502d2aa9ddcbff1cvboxsync /* Automatic buffering, size not encoded. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# define SUP_CTL_CODE_SIZE(Function, Size) CTL_CODE(FILE_DEVICE_UNKNOWN, (Function) | SUP_IOCTL_FLAG, METHOD_BUFFERED, FILE_WRITE_ACCESS)
c0fa6fe4a52eff9785fdf7a79cf3bc149eecd937vboxsync# define SUP_CTL_CODE_BIG(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, (Function) | SUP_IOCTL_FLAG, METHOD_BUFFERED, FILE_WRITE_ACCESS)
f5e53763b0a581b0299e98028c6c52192eb06785vboxsync# define SUP_CTL_CODE_FAST(Function) CTL_CODE(FILE_DEVICE_UNKNOWN, (Function) | SUP_IOCTL_FLAG, METHOD_NEITHER, FILE_WRITE_ACCESS)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# define SUP_CTL_CODE_NO_SIZE(uIOCtl) (uIOCtl)
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync#elif defined(RT_OS_SOLARIS)
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync /* No automatic buffering, size limited to 255 bytes. */
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync# include <sys/ioccom.h>
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync# define SUP_CTL_CODE_SIZE(Function, Size) _IOWRN('V', (Function) | SUP_IOCTL_FLAG, sizeof(SUPREQHDR))
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync# define SUP_CTL_CODE_BIG(Function) _IOWRN('V', (Function) | SUP_IOCTL_FLAG, sizeof(SUPREQHDR))
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync# define SUP_CTL_CODE_FAST(Function) _IO( 'V', (Function) | SUP_IOCTL_FLAG)
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync# define SUP_CTL_CODE_NO_SIZE(uIOCtl) (uIOCtl)
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync#elif defined(RT_OS_OS2)
25866675a2cd68211a7a90bc0abd32c40235d07dvboxsync /* No automatic buffering, size not encoded. */
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync# define SUP_CTL_CATEGORY 0xc0
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync# define SUP_CTL_CODE_SIZE(Function, Size) ((unsigned char)(Function))
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync# define SUP_CTL_CODE_BIG(Function) ((unsigned char)(Function))
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync# define SUP_CTL_CATEGORY_FAST 0xc1
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync# define SUP_CTL_CODE_FAST(Function) ((unsigned char)(Function))
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync# define SUP_CTL_CODE_NO_SIZE(uIOCtl) (uIOCtl)
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync#elif defined(RT_OS_LINUX)
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync /* No automatic buffering, size limited to 16KB. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# include <linux/ioctl.h>
6a795f9e75e30c7f1d75cd45e5de233c71662f58vboxsync# define SUP_CTL_CODE_SIZE(Function, Size) _IOC(_IOC_READ | _IOC_WRITE, 'V', (Function) | SUP_IOCTL_FLAG, (Size))
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync# define SUP_CTL_CODE_BIG(Function) _IO('V', (Function) | SUP_IOCTL_FLAG)
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync# define SUP_CTL_CODE_FAST(Function) _IO('V', (Function) | SUP_IOCTL_FLAG)
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync# define SUP_CTL_CODE_NO_SIZE(uIOCtl) ((uIOCtl) & ~IOCSIZE_MASK)
73ae72ef2c54d514301f3efda669dc6db5f28da5vboxsync
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync#elif defined(RT_OS_L4)
1c14b7525891c8c3bbc9767497792894596a00f7vboxsync /* Implemented in suplib, no worries. */
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync# define SUP_CTL_CODE_SIZE(Function, Size) (Function)
152d786a21a506f9e2a2e16ba8efdc2bcae133abvboxsync# define SUP_CTL_CODE_BIG(Function) (Function)
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync# define SUP_CTL_CODE_FAST(Function) (Function)
6a795f9e75e30c7f1d75cd45e5de233c71662f58vboxsync# define SUP_CTL_CODE_NO_SIZE(uIOCtl) (uIOCtl)
6a795f9e75e30c7f1d75cd45e5de233c71662f58vboxsync
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync#else /* BSD Like */
1c14b7525891c8c3bbc9767497792894596a00f7vboxsync /* Automatic buffering, size limited to 4KB on *BSD and 8KB on Darwin - commands the limit, 4KB. */
1c14b7525891c8c3bbc9767497792894596a00f7vboxsync# include <sys/ioccom.h>
1c14b7525891c8c3bbc9767497792894596a00f7vboxsync# define SUP_CTL_CODE_SIZE(Function, Size) _IOC(IOC_INOUT, 'V', (Function) | SUP_IOCTL_FLAG, (Size))
1c14b7525891c8c3bbc9767497792894596a00f7vboxsync# define SUP_CTL_CODE_BIG(Function) _IO('V', (Function) | SUP_IOCTL_FLAG)
f11eaffbbd9153a62d2c6eb3ec1810947c956802vboxsync# define SUP_CTL_CODE_FAST(Function) _IO('V', (Function) | SUP_IOCTL_FLAG)
f11eaffbbd9153a62d2c6eb3ec1810947c956802vboxsync# define SUP_CTL_CODE_NO_SIZE(uIOCtl) ( (uIOCtl) & ~_IOC(0,0,0,IOCPARM_MASK) )
9ee86050975427444ed8f68e502d2aa9ddcbff1cvboxsync#endif
f11eaffbbd9153a62d2c6eb3ec1810947c956802vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Fast path IOCtl: VMMR0_DO_RAW_RUN */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_FAST_DO_RAW_RUN SUP_CTL_CODE_FAST(64)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Fast path IOCtl: VMMR0_DO_HWACC_RUN */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_FAST_DO_HWACC_RUN SUP_CTL_CODE_FAST(65)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Just a NOP call for profiling the latency of a fast ioctl call to VMMR0. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_FAST_DO_NOP SUP_CTL_CODE_FAST(66)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/*******************************************************************************
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync* Structures and Typedefs *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync*******************************************************************************/
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#ifdef RT_ARCH_AMD64
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# pragma pack(8) /* paranoia. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#else
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync# pragma pack(4) /* paranoia. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#endif
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/**
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Common In/Out header.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPREQHDR
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync /** Cookie. */
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync uint32_t u32Cookie;
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync /** Session cookie. */
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync uint32_t u32SessionCookie;
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync /** The size of the input. */
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync uint32_t cbIn;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The size of the output. */
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync uint32_t cbOut;
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync /** Flags. See SUPREQHDR_FLAGS_* for details and values. */
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync uint32_t fFlags;
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync /** The VBox status code of the operation, out direction only. */
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync int32_t rc;
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync} SUPREQHDR;
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync/** Pointer to a IOC header. */
152d786a21a506f9e2a2e16ba8efdc2bcae133abvboxsynctypedef SUPREQHDR *PSUPREQHDR;
152d786a21a506f9e2a2e16ba8efdc2bcae133abvboxsync
152d786a21a506f9e2a2e16ba8efdc2bcae133abvboxsync/** @name SUPREQHDR::fFlags values
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync * @{ */
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync/** Masks out the magic value. */
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync#define SUPREQHDR_FLAGS_MAGIC_MASK UINT32_C(0xff0000ff)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync/** The generic mask. */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUPREQHDR_FLAGS_GEN_MASK UINT32_C(0x0000ff00)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync/** The request specific mask. */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUPREQHDR_FLAGS_REQ_MASK UINT32_C(0x00ff0000)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** There is extra input that needs copying on some platforms. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPREQHDR_FLAGS_EXTRA_IN UINT32_C(0x00000100)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** There is extra output that needs copying on some platforms. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPREQHDR_FLAGS_EXTRA_OUT UINT32_C(0x00000200)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** The magic value. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPREQHDR_FLAGS_MAGIC UINT32_C(0x42000042)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** The default value. Use this when no special stuff is requested. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPREQHDR_FLAGS_DEFAULT SUPREQHDR_FLAGS_MAGIC
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
6308f6770d7f8fb842b437338e31554e913e6773vboxsync/** @name SUP_IOCTL_COOKIE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Negotiate cookie. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_COOKIE SUP_CTL_CODE_SIZE(1, SUP_IOCTL_COOKIE_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** The request size. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_COOKIE_SIZE sizeof(SUPCOOKIE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** The SUPREQHDR::cbIn value. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_COOKIE_SIZE_IN sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPCOOKIE, u.In)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** The SUPREQHDR::cbOut value. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_COOKIE_SIZE_OUT sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPCOOKIE, u.Out)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** SUPCOOKIE_IN magic word. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPCOOKIE_MAGIC "The Magic Word!"
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** The initial cookie. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPCOOKIE_INITIAL_COOKIE 0x69726f74 /* 'tori' */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Current interface version.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * The upper 16-bit is the major version, the the lower the minor version.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * When incompatible changes are made, the upper major number has to be changed.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @todo Pending work on next major version change:
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * - Eliminate supdrvPageWasLockedByPageAlloc and supdrvPageGetPhys.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * - Remove SUPR0PageAlloc in favor of SUPR0PageAllocEx, removing
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * and renaming the related IOCtls too.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPDRV_IOC_VERSION 0x000c0002
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** SUP_IOCTL_COOKIE. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPCOOKIE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * u32Cookie must be set to SUPCOOKIE_INITIAL_COOKIE.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * u32SessionCookie should be set to some random value. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
267957dcacbf753410d79dc1ef9fc0834131ddcdvboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Magic word. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync char szMagic[16];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The requested interface version number. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t u32ReqVersion;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The minimum interface version number. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t u32MinVersion;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Cookie. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t u32Cookie;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Session cookie. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t u32SessionCookie;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Interface version for this session. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t u32SessionVersion;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The actual interface version in the driver. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t u32DriverVersion;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Number of functions available for the SUP_IOCTL_QUERY_FUNCS request. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t cFunctions;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Session handle. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync R0PTRTYPE(PSUPDRVSESSION) pSession;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPCOOKIE, *PSUPCOOKIE;
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsync/** @} */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsync
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsync/** @name SUP_IOCTL_QUERY_FUNCS
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsync * Query SUPR0 functions.
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsync * @{
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsync */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_QUERY_FUNCS(cFuncs) SUP_CTL_CODE_BIG(2)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_QUERY_FUNCS_SIZE(cFuncs) RT_UOFFSETOF(SUPQUERYFUNCS, u.Out.aFunctions[(cFuncs)])
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_QUERY_FUNCS_SIZE_IN sizeof(SUPREQHDR)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_QUERY_FUNCS_SIZE_OUT(cFuncs) SUP_IOCTL_QUERY_FUNCS_SIZE(cFuncs)
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsync
6308f6770d7f8fb842b437338e31554e913e6773vboxsync/** A function. */
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsynctypedef struct SUPFUNC
4946f90c5c7016131555f0c925091d4ede6bdde0vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Name - mangled. */
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync char szName[32];
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync /** Address. */
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync RTR0PTR pfn;
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync} SUPFUNC, *PSUPFUNC;
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsynctypedef struct SUPQUERYFUNCS
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync{
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync /** The header. */
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync SUPREQHDR Hdr;
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync union
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync {
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync struct
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync {
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync /** Number of functions returned. */
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync uint32_t cFunctions;
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync /** Array of functions. */
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync SUPFUNC aFunctions[1];
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync } Out;
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync } u;
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync} SUPQUERYFUNCS, *PSUPQUERYFUNCS;
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync/** @} */
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync/** @name SUP_IOCTL_IDT_INSTALL
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync * Install IDT patch for calling processor.
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync * @{
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync */
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync#define SUP_IOCTL_IDT_INSTALL SUP_CTL_CODE_SIZE(3, SUP_IOCTL_IDT_INSTALL_SIZE)
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync#define SUP_IOCTL_IDT_INSTALL_SIZE sizeof(SUPIDTINSTALL)
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync#define SUP_IOCTL_IDT_INSTALL_SIZE_IN sizeof(SUPREQHDR)
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync#define SUP_IOCTL_IDT_INSTALL_SIZE_OUT sizeof(SUPIDTINSTALL)
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsynctypedef struct SUPIDTINSTALL
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync{
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync /** The header. */
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync SUPREQHDR Hdr;
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync union
6308f6770d7f8fb842b437338e31554e913e6773vboxsync {
b32cbfd89d5d933a6c86fc4d24ffae4d27976af3vboxsync struct
267957dcacbf753410d79dc1ef9fc0834131ddcdvboxsync {
267957dcacbf753410d79dc1ef9fc0834131ddcdvboxsync /** The IDT entry number. */
b32cbfd89d5d933a6c86fc4d24ffae4d27976af3vboxsync uint8_t u8Idt;
b32cbfd89d5d933a6c86fc4d24ffae4d27976af3vboxsync } Out;
b32cbfd89d5d933a6c86fc4d24ffae4d27976af3vboxsync } u;
b32cbfd89d5d933a6c86fc4d24ffae4d27976af3vboxsync} SUPIDTINSTALL, *PSUPIDTINSTALL;
b32cbfd89d5d933a6c86fc4d24ffae4d27976af3vboxsync/** @} */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_IDT_REMOVE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Remove IDT patch for calling processor.
6308f6770d7f8fb842b437338e31554e913e6773vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync#define SUP_IOCTL_IDT_REMOVE SUP_CTL_CODE_SIZE(4, SUP_IOCTL_IDT_REMOVE_SIZE)
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync#define SUP_IOCTL_IDT_REMOVE_SIZE sizeof(SUPIDTREMOVE)
3b5486d99a3b391015873e5524bb1974d6dd3935vboxsync#define SUP_IOCTL_IDT_REMOVE_SIZE_IN sizeof(SUPIDTREMOVE)
3b5486d99a3b391015873e5524bb1974d6dd3935vboxsync#define SUP_IOCTL_IDT_REMOVE_SIZE_OUT sizeof(SUPIDTREMOVE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPIDTREMOVE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPIDTREMOVE, *PSUPIDTREMOVE;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @}*/
ad27e1d5e48ca41245120c331cc88b50464813cevboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync/** @name SUP_IOCTL_LDR_OPEN
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync * Open an image.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_LDR_OPEN SUP_CTL_CODE_SIZE(5, SUP_IOCTL_LDR_OPEN_SIZE)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_LDR_OPEN_SIZE sizeof(SUPLDROPEN)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_LDR_OPEN_SIZE_IN sizeof(SUPLDROPEN)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_LDR_OPEN_SIZE_OUT (sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPLDROPEN, u.Out))
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPLDROPEN
824104c3b60b9c8d5c03c40658e33ecd6c4fa9e8vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Size of the image we'll be loading. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t cbImage;
6308f6770d7f8fb842b437338e31554e913e6773vboxsync /** Image name.
6308f6770d7f8fb842b437338e31554e913e6773vboxsync * This is the NAME of the image, not the file name. It is used
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync * to share code with other processes. (Max len is 32 chars!) */
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync char szName[32];
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync } In;
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync struct
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync {
a5d319fc6b17a28a8d6738e6f872d66244601cebvboxsync /** The base address of the image. */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync RTR0PTR pvImageBase;
6308f6770d7f8fb842b437338e31554e913e6773vboxsync /** Indicate whether or not the image requires loading. */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync bool fNeedsLoading;
6308f6770d7f8fb842b437338e31554e913e6773vboxsync } Out;
6308f6770d7f8fb842b437338e31554e913e6773vboxsync } u;
6308f6770d7f8fb842b437338e31554e913e6773vboxsync} SUPLDROPEN, *PSUPLDROPEN;
6308f6770d7f8fb842b437338e31554e913e6773vboxsync/** @} */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync
6308f6770d7f8fb842b437338e31554e913e6773vboxsync
6308f6770d7f8fb842b437338e31554e913e6773vboxsync/** @name SUP_IOCTL_LDR_LOAD
6308f6770d7f8fb842b437338e31554e913e6773vboxsync * Upload the image bits.
6308f6770d7f8fb842b437338e31554e913e6773vboxsync * @{
6308f6770d7f8fb842b437338e31554e913e6773vboxsync */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_LDR_LOAD SUP_CTL_CODE_BIG(6)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_LDR_LOAD_SIZE(cbImage) RT_UOFFSETOF(SUPLDRLOAD, u.In.achImage[cbImage])
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_LDR_LOAD_SIZE_IN(cbImage) RT_UOFFSETOF(SUPLDRLOAD, u.In.achImage[cbImage])
6308f6770d7f8fb842b437338e31554e913e6773vboxsync#define SUP_IOCTL_LDR_LOAD_SIZE_OUT sizeof(SUPREQHDR)
6308f6770d7f8fb842b437338e31554e913e6773vboxsync
6308f6770d7f8fb842b437338e31554e913e6773vboxsync/**
6308f6770d7f8fb842b437338e31554e913e6773vboxsync * Module initialization callback function.
6308f6770d7f8fb842b437338e31554e913e6773vboxsync * This is called once after the module has been loaded.
6308f6770d7f8fb842b437338e31554e913e6773vboxsync *
6308f6770d7f8fb842b437338e31554e913e6773vboxsync * @returns 0 on success.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @returns Appropriate error code on failure.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef DECLCALLBACK(int) FNR0MODULEINIT(void);
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Pointer to a FNR0MODULEINIT(). */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef R0PTRTYPE(FNR0MODULEINIT *) PFNR0MODULEINIT;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/**
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Module termination callback function.
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync * This is called once right before the module is being unloaded.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef DECLCALLBACK(void) FNR0MODULETERM(void);
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Pointer to a FNR0MODULETERM(). */
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsynctypedef R0PTRTYPE(FNR0MODULETERM *) PFNR0MODULETERM;
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync/**
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync * Symbol table entry.
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync */
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsynctypedef struct SUPLDRSYM
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Offset into of the string table. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t offName;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Offset of the symbol relative to the image load address. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t offSymbol;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPLDRSYM;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Pointer to a symbol table entry. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef SUPLDRSYM *PSUPLDRSYM;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Pointer to a const symbol table entry. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef SUPLDRSYM const *PCSUPLDRSYM;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/**
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * SUPLDRLOAD::u::In::EP type.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef enum SUPLDRLOADEP
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPLDRLOADEP_NOTHING = 0,
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPLDRLOADEP_VMMR0,
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPLDRLOADEP_SERVICE,
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPLDRLOADEP_32BIT_HACK = 0x7fffffff
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync} SUPLDRLOADEP;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPLDRLOAD
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
23631945c9cb3df68ca51c69ed0b77e90164b402vboxsync /** The address of module initialization function. Similar to _DLL_InitTerm(hmod, 0). */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync PFNR0MODULEINIT pfnModuleInit;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The address of module termination function. Similar to _DLL_InitTerm(hmod, 1). */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync PFNR0MODULETERM pfnModuleTerm;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Special entry points. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** SUPLDRLOADEP_VMMR0. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The module handle (i.e. address). */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvVMMR0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Address of VMMR0EntryInt function. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvVMMR0EntryInt;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Address of VMMR0EntryFast function. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvVMMR0EntryFast;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync /** Address of VMMR0EntryEx function. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvVMMR0EntryEx;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } VMMR0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** SUPLDRLOADEP_SERVICE. */
73ae72ef2c54d514301f3efda669dc6db5f28da5vboxsync struct
73ae72ef2c54d514301f3efda669dc6db5f28da5vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The service request handler.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * (PFNR0SERVICEREQHANDLER isn't defined yet.) */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pfnServiceReq;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Reserved, must be NIL. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR apvReserved[3];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Service;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } EP;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Address. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvImageBase;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Entry point type. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPLDRLOADEP eEPType;
4ae37290cb50a39ea45112540ac89f0b12b172b8vboxsync /** The offset of the symbol table. */
4ae37290cb50a39ea45112540ac89f0b12b172b8vboxsync uint32_t offSymbols;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The number of entries in the symbol table. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t cSymbols;
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync /** The offset of the string table. */
46a78ba0ce1d037aaed54f3df16ebd9c0b70ed39vboxsync uint32_t offStrTab;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync /** Size of the string table. */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync uint32_t cbStrTab;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync /** Size of image (including string and symbol tables). */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync uint32_t cbImage;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync /** The image data. */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync char achImage[1];
73ae72ef2c54d514301f3efda669dc6db5f28da5vboxsync } In;
73ae72ef2c54d514301f3efda669dc6db5f28da5vboxsync } u;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync} SUPLDRLOAD, *PSUPLDRLOAD;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync/** @} */
d6ec942234269e5c8ddc45e26473fd575ade6fbcvboxsync
d6ec942234269e5c8ddc45e26473fd575ade6fbcvboxsync
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync/** @name SUP_IOCTL_LDR_FREE
73ae72ef2c54d514301f3efda669dc6db5f28da5vboxsync * Free an image.
73ae72ef2c54d514301f3efda669dc6db5f28da5vboxsync * @{
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync#define SUP_IOCTL_LDR_FREE SUP_CTL_CODE_SIZE(7, SUP_IOCTL_LDR_FREE_SIZE)
e18d16f31765f000e2a4a111a3df6d211cd825f1vboxsync#define SUP_IOCTL_LDR_FREE_SIZE sizeof(SUPLDRFREE)
e18d16f31765f000e2a4a111a3df6d211cd825f1vboxsync#define SUP_IOCTL_LDR_FREE_SIZE_IN sizeof(SUPLDRFREE)
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync#define SUP_IOCTL_LDR_FREE_SIZE_OUT sizeof(SUPREQHDR)
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsynctypedef struct SUPLDRFREE
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync{
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync /** The header. */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync SUPREQHDR Hdr;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync union
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync {
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync struct
b6a171211dc56d6a805da5f43dcb6b3eb73c7e8avboxsync {
b6a171211dc56d6a805da5f43dcb6b3eb73c7e8avboxsync /** Address. */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync RTR0PTR pvImageBase;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync } In;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync } u;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync} SUPLDRFREE, *PSUPLDRFREE;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync/** @} */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync/** @name SUP_IOCTL_LDR_GET_SYMBOL
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync * Get address of a symbol within an image.
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync * @{
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync#define SUP_IOCTL_LDR_GET_SYMBOL SUP_CTL_CODE_SIZE(8, SUP_IOCTL_LDR_GET_SYMBOL_SIZE)
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync#define SUP_IOCTL_LDR_GET_SYMBOL_SIZE sizeof(SUPLDRGETSYMBOL)
3d40799173fcdd842291c870033d85379d731a4avboxsync#define SUP_IOCTL_LDR_GET_SYMBOL_SIZE_IN sizeof(SUPLDRGETSYMBOL)
3d40799173fcdd842291c870033d85379d731a4avboxsync#define SUP_IOCTL_LDR_GET_SYMBOL_SIZE_OUT (sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPLDRGETSYMBOL, u.Out))
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsynctypedef struct SUPLDRGETSYMBOL
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync{
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync /** The header. */
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync SUPREQHDR Hdr;
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync union
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync {
3d40799173fcdd842291c870033d85379d731a4avboxsync struct
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync {
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync /** Address. */
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync RTR0PTR pvImageBase;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync /** The symbol name. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync char szSymbol[64];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The symbol address. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvSymbol;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPLDRGETSYMBOL, *PSUPLDRGETSYMBOL;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_CALL_VMMR0
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Call the R0 VMM Entry point.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @todo Might have to convert this to a big request...
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CALL_VMMR0(cbReq) SUP_CTL_CODE_SIZE(9, SUP_IOCTL_CALL_VMMR0_SIZE(cbReq))
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CALL_VMMR0_SIZE(cbReq) RT_UOFFSETOF(SUPCALLVMMR0, abReqPkt[cbReq])
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CALL_VMMR0_SIZE_IN(cbReq) SUP_IOCTL_CALL_VMMR0_SIZE(cbReq)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CALL_VMMR0_SIZE_OUT(cbReq) SUP_IOCTL_CALL_VMMR0_SIZE(cbReq)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPCALLVMMR0
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync SUPREQHDR Hdr;
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The VM handle. */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync PVMR0 pVMR0;
6da7ae3144a7be1443dd37052b24370bf210fda1vboxsync /** VCPU id. */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync uint32_t idCpu;
c0fa6fe4a52eff9785fdf7a79cf3bc149eecd937vboxsync /** Which operation to execute. */
c0fa6fe4a52eff9785fdf7a79cf3bc149eecd937vboxsync uint32_t uOperation;
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync /** Argument to use when no request packet is supplied. */
d6ec942234269e5c8ddc45e26473fd575ade6fbcvboxsync uint64_t u64Arg;
d6ec942234269e5c8ddc45e26473fd575ade6fbcvboxsync } In;
d6ec942234269e5c8ddc45e26473fd575ade6fbcvboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The VMMR0Entry request packet. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint8_t abReqPkt[1];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPCALLVMMR0, *PSUPCALLVMMR0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_LOW_ALLOC
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Allocate memory below 4GB (physically).
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOW_ALLOC SUP_CTL_CODE_BIG(10)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOW_ALLOC_SIZE(cPages) ((uint32_t)RT_UOFFSETOF(SUPLOWALLOC, u.Out.aPages[cPages]))
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOW_ALLOC_SIZE_IN (sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPLOWALLOC, u.In))
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOW_ALLOC_SIZE_OUT(cPages) SUP_IOCTL_LOW_ALLOC_SIZE(cPages)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPLOWALLOC
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync {
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync /** Number of pages to allocate. */
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync uint32_t cPages;
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync } In;
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync struct
75ef08b33f9c67a8dd50748ece1117aed8098d51vboxsync {
8f8c8ff0bfe182cff047f8c028b2546b25087d44vboxsync /** The ring-3 address of the allocated memory. */
8f8c8ff0bfe182cff047f8c028b2546b25087d44vboxsync RTR3PTR pvR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The ring-0 address of the allocated memory. */
543fd530ce618a1b55531ea76a785c7add7d072cvboxsync RTR0PTR pvR0;
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync /** Array of pages. */
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync RTHCPHYS aPages[1];
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync} SUPLOWALLOC, *PSUPLOWALLOC;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_LOW_FREE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Free low memory.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOW_FREE SUP_CTL_CODE_SIZE(11, SUP_IOCTL_LOW_FREE_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOW_FREE_SIZE sizeof(SUPLOWFREE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOW_FREE_SIZE_IN sizeof(SUPLOWFREE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOW_FREE_SIZE_OUT sizeof(SUPREQHDR)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPLOWFREE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync /** The ring-3 address of the memory to free. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync} SUPLOWFREE, *PSUPLOWFREE;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
55d7f78467f8aefc7dff60f188bdf0f80523862cvboxsync
55d7f78467f8aefc7dff60f188bdf0f80523862cvboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_PAGE_ALLOC
d5d8a18c82ced223ee7d069cdb1ba074c80449d8vboxsync * Allocate memory and map into the user process.
d5d8a18c82ced223ee7d069cdb1ba074c80449d8vboxsync * The memory is of course locked.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_ALLOC SUP_CTL_CODE_BIG(12)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_ALLOC_SIZE(cPages) RT_UOFFSETOF(SUPPAGEALLOC, u.Out.aPages[cPages])
3e4bc3e32bc6ac59335fae7115d09f7a2ca9dc4bvboxsync#define SUP_IOCTL_PAGE_ALLOC_SIZE_IN (sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPPAGEALLOC, u.In))
3e4bc3e32bc6ac59335fae7115d09f7a2ca9dc4bvboxsync#define SUP_IOCTL_PAGE_ALLOC_SIZE_OUT(cPages) SUP_IOCTL_PAGE_ALLOC_SIZE(cPages)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPPAGEALLOC
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Number of pages to allocate */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t cPages;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Returned ring-3 address. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The physical addresses of the allocated pages. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTHCPHYS aPages[1];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
3e4bc3e32bc6ac59335fae7115d09f7a2ca9dc4bvboxsync } u;
3e4bc3e32bc6ac59335fae7115d09f7a2ca9dc4bvboxsync} SUPPAGEALLOC, *PSUPPAGEALLOC;
3e4bc3e32bc6ac59335fae7115d09f7a2ca9dc4bvboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_PAGE_FREE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Free memory allocated with SUP_IOCTL_PAGE_ALLOC or SUP_IOCTL_PAGE_ALLOC_EX.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_FREE SUP_CTL_CODE_SIZE(13, SUP_IOCTL_PAGE_FREE_SIZE_IN)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_FREE_SIZE sizeof(SUPPAGEFREE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_FREE_SIZE_IN sizeof(SUPPAGEFREE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_FREE_SIZE_OUT sizeof(SUPREQHDR)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPPAGEFREE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Address of memory range to free. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPPAGEFREE, *PSUPPAGEFREE;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_PAGE_LOCK
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Pin down physical pages.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_LOCK SUP_CTL_CODE_BIG(14)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_LOCK_SIZE(cPages) (RT_MAX((size_t)SUP_IOCTL_PAGE_LOCK_SIZE_IN, (size_t)SUP_IOCTL_PAGE_LOCK_SIZE_OUT(cPages)))
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_LOCK_SIZE_IN (sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPPAGELOCK, u.In))
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_LOCK_SIZE_OUT(cPages) RT_UOFFSETOF(SUPPAGELOCK, u.Out.aPages[cPages])
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPPAGELOCK
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Start of page range. Must be PAGE aligned. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
8b82f5ce032cb07de31804c998483b0988530aebvboxsync /** The range size given as a page count. */
8b82f5ce032cb07de31804c998483b0988530aebvboxsync uint32_t cPages;
8b82f5ce032cb07de31804c998483b0988530aebvboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
f4f1486a0ea478a9cf75ad985f1d25915fa1f3a4vboxsync struct
c4e862df22b8c582055b945e086a51957e913e6bvboxsync {
c4e862df22b8c582055b945e086a51957e913e6bvboxsync /** Array of pages. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTHCPHYS aPages[1];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPPAGELOCK, *PSUPPAGELOCK;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_PAGE_UNLOCK
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Unpin physical pages.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{ */
9083f76e8c5709604766d0215a380de516e781eevboxsync#define SUP_IOCTL_PAGE_UNLOCK SUP_CTL_CODE_SIZE(15, SUP_IOCTL_PAGE_UNLOCK_SIZE)
9083f76e8c5709604766d0215a380de516e781eevboxsync#define SUP_IOCTL_PAGE_UNLOCK_SIZE sizeof(SUPPAGEUNLOCK)
ad8fb8c920c36650d5ead020ef8e05b681dd4375vboxsync#define SUP_IOCTL_PAGE_UNLOCK_SIZE_IN sizeof(SUPPAGEUNLOCK)
6a0b15b171dc10f072ec82f498d7b20d7c0eec6cvboxsync#define SUP_IOCTL_PAGE_UNLOCK_SIZE_OUT sizeof(SUPREQHDR)
6a0b15b171dc10f072ec82f498d7b20d7c0eec6cvboxsynctypedef struct SUPPAGEUNLOCK
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync{
926975f2c06340117f6b3d218e38fe2d4c446d23vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
3649373f921ada8549bf86c6edb03b340f2d214avboxsync struct
3649373f921ada8549bf86c6edb03b340f2d214avboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Start of page range of a range previuosly pinned. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
c4e862df22b8c582055b945e086a51957e913e6bvboxsync} SUPPAGEUNLOCK, *PSUPPAGEUNLOCK;
c4e862df22b8c582055b945e086a51957e913e6bvboxsync/** @} */
c4e862df22b8c582055b945e086a51957e913e6bvboxsync
c4e862df22b8c582055b945e086a51957e913e6bvboxsync
d6ec942234269e5c8ddc45e26473fd575ade6fbcvboxsync/** @name SUP_IOCTL_CONT_ALLOC
d6ec942234269e5c8ddc45e26473fd575ade6fbcvboxsync * Allocate contious memory.
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync * @{
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync */
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync#define SUP_IOCTL_CONT_ALLOC SUP_CTL_CODE_SIZE(16, SUP_IOCTL_CONT_ALLOC_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CONT_ALLOC_SIZE sizeof(SUPCONTALLOC)
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync#define SUP_IOCTL_CONT_ALLOC_SIZE_IN (sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPCONTALLOC, u.In))
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsync#define SUP_IOCTL_CONT_ALLOC_SIZE_OUT sizeof(SUPCONTALLOC)
ee4d840f54fd2dcea8a73b1b86d5ec0db370b05dvboxsynctypedef struct SUPCONTALLOC
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The allocation size given as a page count. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t cPages;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The address of the ring-0 mapping of the allocated memory. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvR0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The address of the ring-3 mapping of the allocated memory. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The physical address of the allocation. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTHCPHYS HCPhys;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPCONTALLOC, *PSUPCONTALLOC;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_CONT_FREE Input.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Free contious memory. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CONT_FREE SUP_CTL_CODE_SIZE(17, SUP_IOCTL_CONT_FREE_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CONT_FREE_SIZE sizeof(SUPCONTFREE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CONT_FREE_SIZE_IN sizeof(SUPCONTFREE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CONT_FREE_SIZE_OUT sizeof(SUPREQHDR)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPCONTFREE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The ring-3 address of the memory to free. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPCONTFREE, *PSUPCONTFREE;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_GET_PAGING_MODE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Get the host paging mode.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GET_PAGING_MODE SUP_CTL_CODE_SIZE(18, SUP_IOCTL_GET_PAGING_MODE_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GET_PAGING_MODE_SIZE sizeof(SUPGETPAGINGMODE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GET_PAGING_MODE_SIZE_IN sizeof(SUPREQHDR)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GET_PAGING_MODE_SIZE_OUT sizeof(SUPGETPAGINGMODE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPGETPAGINGMODE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The paging mode. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPPAGINGMODE enmMode;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPGETPAGINGMODE, *PSUPGETPAGINGMODE;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_SET_VM_FOR_FAST
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Set the VM handle for doing fast call ioctl calls.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_SET_VM_FOR_FAST SUP_CTL_CODE_SIZE(19, SUP_IOCTL_SET_VM_FOR_FAST_SIZE)
b8d7fd85fc9270b7ad49b0e1af2cafec0b9ec818vboxsync#define SUP_IOCTL_SET_VM_FOR_FAST_SIZE sizeof(SUPSETVMFORFAST)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_SET_VM_FOR_FAST_SIZE_IN sizeof(SUPSETVMFORFAST)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_SET_VM_FOR_FAST_SIZE_OUT sizeof(SUPREQHDR)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPSETVMFORFAST
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The ring-0 VM handle (pointer). */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync PVMR0 pVMR0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPSETVMFORFAST, *PSUPSETVMFORFAST;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_GIP_MAP
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Map the GIP into user space.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GIP_MAP SUP_CTL_CODE_SIZE(20, SUP_IOCTL_GIP_MAP_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GIP_MAP_SIZE sizeof(SUPGIPMAP)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GIP_MAP_SIZE_IN sizeof(SUPREQHDR)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GIP_MAP_SIZE_OUT sizeof(SUPGIPMAP)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPGIPMAP
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The physical address of the GIP. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTHCPHYS HCPhysGip;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Pointer to the read-only usermode GIP mapping for this session. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync R3PTRTYPE(PSUPGLOBALINFOPAGE) pGipR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Pointer to the supervisor mode GIP mapping. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync R0PTRTYPE(PSUPGLOBALINFOPAGE) pGipR0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPGIPMAP, *PSUPGIPMAP;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_GIP_UNMAP
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Unmap the GIP.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GIP_UNMAP SUP_CTL_CODE_SIZE(21, SUP_IOCTL_GIP_UNMAP_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GIP_UNMAP_SIZE sizeof(SUPGIPUNMAP)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GIP_UNMAP_SIZE_IN sizeof(SUPGIPUNMAP)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_GIP_UNMAP_SIZE_OUT sizeof(SUPGIPUNMAP)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPGIPUNMAP
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPGIPUNMAP, *PSUPGIPUNMAP;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_CALL_SERVICE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Call the a ring-0 service.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @todo Might have to convert this to a big request, just like
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * SUP_IOCTL_CALL_VMMR0
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CALL_SERVICE(cbReq) SUP_CTL_CODE_SIZE(22, SUP_IOCTL_CALL_SERVICE_SIZE(cbReq))
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CALL_SERVICE_SIZE(cbReq) RT_UOFFSETOF(SUPCALLSERVICE, abReqPkt[cbReq])
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CALL_SERVICE_SIZE_IN(cbReq) SUP_IOCTL_CALL_SERVICE_SIZE(cbReq)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_CALL_SERVICE_SIZE_OUT(cbReq) SUP_IOCTL_CALL_SERVICE_SIZE(cbReq)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPCALLSERVICE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The service name. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync char szName[28];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Which operation to execute. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t uOperation;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Argument to use when no request packet is supplied. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint64_t u64Arg;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The request packet passed to SUP. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint8_t abReqPkt[1];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPCALLSERVICE, *PSUPCALLSERVICE;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_PAGE_ALLOC_EX
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Allocate memory and map it into kernel and/or user space. The memory is of
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * course locked. This is an extended version of SUP_IOCTL_PAGE_ALLOC and the
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * result should be freed using SUP_IOCTL_PAGE_FREE.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @remarks Allocations without a kernel mapping may fail with
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * VERR_NOT_SUPPORTED on some platforms just like with
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * SUP_IOCTL_PAGE_ALLOC.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_ALLOC_EX SUP_CTL_CODE_BIG(23)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_ALLOC_EX_SIZE(cPages) RT_UOFFSETOF(SUPPAGEALLOCEX, u.Out.aPages[cPages])
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync#define SUP_IOCTL_PAGE_ALLOC_EX_SIZE_IN (sizeof(SUPREQHDR) + RT_SIZEOFMEMB(SUPPAGEALLOCEX, u.In))
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync#define SUP_IOCTL_PAGE_ALLOC_EX_SIZE_OUT(cPages) SUP_IOCTL_PAGE_ALLOC_EX_SIZE(cPages)
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsynctypedef struct SUPPAGEALLOCEX
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync{
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync /** The header. */
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync SUPREQHDR Hdr;
e2ebb3d022edb845fd1158d6338e3def1d0e2159vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Number of pages to allocate */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t cPages;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Whether it should have kernel mapping. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync bool fKernelMapping;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Whether it should have a user mapping. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync bool fUserMapping;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Reserved. Must be false. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync bool fReserved0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Reserved. Must be false. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync bool fReserved1;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Returned ring-3 address. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Returned ring-0 address. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvR0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The physical addresses of the allocated pages. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTHCPHYS aPages[1];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync} SUPPAGEALLOCEX, *PSUPPAGEALLOCEX;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
6308f6770d7f8fb842b437338e31554e913e6773vboxsync
6308f6770d7f8fb842b437338e31554e913e6773vboxsync
6308f6770d7f8fb842b437338e31554e913e6773vboxsync/** @name SUP_IOCTL_PAGE_MAP_KERNEL
6308f6770d7f8fb842b437338e31554e913e6773vboxsync * Maps a portion of memory allocated by SUP_IOCTL_PAGE_ALLOC_EX /
0a3599702f0cfe19a23070ff9eddbcec0ae71298vboxsync * SUPR0PageAllocEx into kernel space for use by a device or similar.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * The mapping will be freed together with the ring-3 mapping when
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * SUP_IOCTL_PAGE_FREE or SUPR0PageFree is called.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @remarks Not necessarily supported on all platforms.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync *
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
cab115cfa31c584def7069312a1e23c3fc88533bvboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_MAP_KERNEL SUP_CTL_CODE_SIZE(24, SUP_IOCTL_PAGE_MAP_KERNEL_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_MAP_KERNEL_SIZE sizeof(SUPPAGEMAPKERNEL)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_MAP_KERNEL_SIZE_IN sizeof(SUPPAGEMAPKERNEL)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_PAGE_MAP_KERNEL_SIZE_OUT sizeof(SUPPAGEMAPKERNEL)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPPAGEMAPKERNEL
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The pointer of to the previously allocated memory. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR3PTR pvR3;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The offset to start mapping from. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t offSub;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Size of the section to map. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t cbSub;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Flags reserved for future fun. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t fFlags;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The ring-0 address corresponding to pvR3 + offSub. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync RTR0PTR pvR0;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } Out;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPPAGEMAPKERNEL, *PSUPPAGEMAPKERNEL;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_LOGGER_SETTINGS
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Changes the ring-0 release or debug logger settings.
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOGGER_SETTINGS(cbStrTab) SUP_CTL_CODE_SIZE(25, SUP_IOCTL_LOGGER_SETTINGS_SIZE(cbStrTab))
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOGGER_SETTINGS_SIZE(cbStrTab) RT_UOFFSETOF(SUPLOGGERSETTINGS, u.In.szStrings[cbStrTab])
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOGGER_SETTINGS_SIZE_IN(cbStrTab) RT_UOFFSETOF(SUPLOGGERSETTINGS, u.In.szStrings[cbStrTab])
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_LOGGER_SETTINGS_SIZE_OUT sizeof(SUPREQHDR)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsynctypedef struct SUPLOGGERSETTINGS
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
5e403442588989687ee8fb66dd921dd08199bfd0vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Which logger. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t fWhich;
b4dc9a151c850935f866da241db86e6ae33c45a2vboxsync /** What to do with it. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t fWhat;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** Offset of the flags setting string. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t offFlags;
b4dc9a151c850935f866da241db86e6ae33c45a2vboxsync /** Offset of the groups setting string. */
b4dc9a151c850935f866da241db86e6ae33c45a2vboxsync uint32_t offGroups;
b4dc9a151c850935f866da241db86e6ae33c45a2vboxsync /** Offset of the destination setting string. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t offDestination;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The string table. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync char szStrings[1];
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } u;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync} SUPLOGGERSETTINGS, *PSUPLOGGERSETTINGS;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Debug logger. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPLOGGERSETTINGS_WHICH_DEBUG 0
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Release logger. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPLOGGERSETTINGS_WHICH_RELEASE 1
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Change the settings. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPLOGGERSETTINGS_WHAT_SETTINGS 0
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** Create the logger instance. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPLOGGERSETTINGS_WHAT_CREATE 1
5e403442588989687ee8fb66dd921dd08199bfd0vboxsync/** Destroy the logger instance. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUPLOGGERSETTINGS_WHAT_DESTROY 2
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name Semaphore Types
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * @{ */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_SEM_TYPE_EVENT 0
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_SEM_TYPE_EVENT_MULTI 1
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @} */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync/** @name SUP_IOCTL_SEM_CREATE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync * Create a semaphore
5e403442588989687ee8fb66dd921dd08199bfd0vboxsync * @{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_SEM_CREATE SUP_CTL_CODE_SIZE(26, SUP_IOCTL_SEM_CREATE_SIZE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_SEM_CREATE_SIZE sizeof(SUPSEMCREATE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_SEM_CREATE_SIZE_IN sizeof(SUPSEMCREATE)
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync#define SUP_IOCTL_SEM_CREATE_SIZE_OUT sizeof(SUPSEMCREATE)
b4dc9a151c850935f866da241db86e6ae33c45a2vboxsynctypedef struct SUPSEMCREATE
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync{
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The header. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync SUPREQHDR Hdr;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync union
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync struct
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The semaphore type. */
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync uint32_t uType;
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync } In;
fe869d55b000b5b3445dcf7077ac443434ff3ec3vboxsync struct
fe869d55b000b5b3445dcf7077ac443434ff3ec3vboxsync {
9dca051a5f8ff457ef1692990f6ecfa280daf265vboxsync /** The handle of the created semaphore. */
051b18f951bde6348786628efc9298a2595e3494vboxsync uint32_t hSem;
051b18f951bde6348786628efc9298a2595e3494vboxsync } Out;
051b18f951bde6348786628efc9298a2595e3494vboxsync } u;
051b18f951bde6348786628efc9298a2595e3494vboxsync} SUPSEMCREATE, *PSUPSEMCREATE;
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync/** @} */
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync/** @name SUP_IOCTL_SEM_OP
051b18f951bde6348786628efc9298a2595e3494vboxsync * Semaphore operations.
051b18f951bde6348786628efc9298a2595e3494vboxsync * @{
051b18f951bde6348786628efc9298a2595e3494vboxsync */
051b18f951bde6348786628efc9298a2595e3494vboxsync#define SUP_IOCTL_SEM_OP SUP_CTL_CODE_SIZE(27, SUP_IOCTL_SEM_OP_SIZE)
051b18f951bde6348786628efc9298a2595e3494vboxsync#define SUP_IOCTL_SEM_OP_SIZE sizeof(SUPSEMOP)
051b18f951bde6348786628efc9298a2595e3494vboxsync#define SUP_IOCTL_SEM_OP_SIZE_IN sizeof(SUPSEMOP)
051b18f951bde6348786628efc9298a2595e3494vboxsync#define SUP_IOCTL_SEM_OP_SIZE_OUT sizeof(SUPREQHDR)
051b18f951bde6348786628efc9298a2595e3494vboxsynctypedef struct SUPSEMOP
051b18f951bde6348786628efc9298a2595e3494vboxsync{
051b18f951bde6348786628efc9298a2595e3494vboxsync /** The header. */
051b18f951bde6348786628efc9298a2595e3494vboxsync SUPREQHDR Hdr;
051b18f951bde6348786628efc9298a2595e3494vboxsync union
051b18f951bde6348786628efc9298a2595e3494vboxsync {
051b18f951bde6348786628efc9298a2595e3494vboxsync struct
051b18f951bde6348786628efc9298a2595e3494vboxsync {
051b18f951bde6348786628efc9298a2595e3494vboxsync /** The semaphore type. */
051b18f951bde6348786628efc9298a2595e3494vboxsync uint32_t uType;
051b18f951bde6348786628efc9298a2595e3494vboxsync /** The semaphore handle. */
051b18f951bde6348786628efc9298a2595e3494vboxsync uint32_t hSem;
051b18f951bde6348786628efc9298a2595e3494vboxsync /** The operation. */
051b18f951bde6348786628efc9298a2595e3494vboxsync uint32_t uOp;
051b18f951bde6348786628efc9298a2595e3494vboxsync /** The number of milliseconds to wait if it's a wait operation. */
051b18f951bde6348786628efc9298a2595e3494vboxsync uint32_t cMillies;
051b18f951bde6348786628efc9298a2595e3494vboxsync } In;
051b18f951bde6348786628efc9298a2595e3494vboxsync } u;
051b18f951bde6348786628efc9298a2595e3494vboxsync} SUPSEMOP, *PSUPSEMOP;
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync/** Wait for a number of millisecons. */
051b18f951bde6348786628efc9298a2595e3494vboxsync#define SUPSEMOP_WAIT 0
051b18f951bde6348786628efc9298a2595e3494vboxsync/** Signal the semaphore. */
051b18f951bde6348786628efc9298a2595e3494vboxsync#define SUPSEMOP_SIGNAL 1
051b18f951bde6348786628efc9298a2595e3494vboxsync/** Reset the sempahore (only applicable to SUP_SEM_TYPE_EVENT_MULTI). */
051b18f951bde6348786628efc9298a2595e3494vboxsync#define SUPSEMOP_RESET 2
051b18f951bde6348786628efc9298a2595e3494vboxsync/** Close the semaphore handle. */
051b18f951bde6348786628efc9298a2595e3494vboxsync#define SUPSEMOP_CLOSE 3
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync/** @} */
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync#pragma pack() /* paranoia */
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync#endif
051b18f951bde6348786628efc9298a2595e3494vboxsync
051b18f951bde6348786628efc9298a2595e3494vboxsync