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