types.h revision c1ec0862a43a7fbb25c5e1f3243f67c1f787d4eb
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * InnoTek Portable Runtime - Types.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Copyright (C) 2006 InnoTek Systemberatung GmbH
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * available from http://www.virtualbox.org. This file is free software;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * you can redistribute it and/or modify it under the terms of the GNU
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * General Public License as published by the Free Software Foundation,
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * in version 2 as it comes in the "COPYING" file of the VirtualBox OSE
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * distribution. VirtualBox OSE is distributed in the hope that it will
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * be useful, but WITHOUT ANY WARRANTY of any kind.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * If you received this file as part of a commercial VirtualBox
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * distribution, then only the terms of your commercial VirtualBox
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * license agreement apply instead of the previous paragraph.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Include standard C types.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# if !defined(__DARWIN__) || !defined(KERNEL) /* Klugde for the darwin kernel. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# else /* DARWIN && KERNEL */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# endif /* DARWIN && KERNEL */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# if defined(__LINUX__) && defined(__KERNEL__) /* Klugde for the linux kernel. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# ifndef bool /* Linux 2.6.19 C++ nightmare */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# define false false_type
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# define _Bool int
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/* Define any types missing from sys/types.h on windows. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync#else /* no crt */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# if defined(__GNUC__)
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# if defined(__X86__)
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync typedef unsigned int size_t;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# if defined(__X86__)
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync typedef int ssize_t;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# else /* !__GNUC__ */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# endif /* !__GNUC__ */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync#endif /* no crt */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @defgroup grp_rt_types InnoTek Portable Runtime Base Types
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/* define wchar_t, we don't wanna include all the wcsstuff to get this. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync typedef unsigned short wchar_t;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @todo wchar_t on GNUC */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * C doesn't have bool.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef unsigned char bool;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# ifndef true
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# define true (1)
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# ifndef false
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# define false (0)
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * 128-bit unsigned integer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef struct uint128_s
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * 128-bit signed integer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef struct int128_s
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * 16-bit unsigned interger union.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** natural view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 16-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 8-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 16-bit hi/lo view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a 16-bit unsigned interger union. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a const 32-bit unsigned interger union. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * 32-bit unsigned interger union.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** natural view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Hi/Low view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Word view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 32-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 16-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 8-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a 32-bit unsigned interger union. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a const 32-bit unsigned interger union. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * 64-bit unsigned interger union.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Natural view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Hi/Low view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Double-Word view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Word view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 64-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 32-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 16-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 8-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a 64-bit unsigned interger union. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a const 64-bit unsigned interger union. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * 128-bit unsigned interger union.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Natural view.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * WARNING! This member depends on compiler supporing 128-bit stuff. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Hi/Low view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Quad-Word view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Double-Word view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** Word view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 64-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 32-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 16-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** 8-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a 64-bit unsigned interger union. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a const 64-bit unsigned interger union. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Generic function type.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @see PFNRT
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Generic function pointer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * With -pedantic, gcc-4 complains when casting a function to a data object, for example
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * void foo(void)
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * void *bar = (void *)foo;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * The compiler would warn with "ISO C++ forbids casting between pointer-to-function and
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * pointer-to-object". The purpose of this warning is not to bother the programmer but to
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * point out that he is probably doing something dangerous, assigning a pointer to executable
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * code to a data object.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @defgroup grp_rt_types_both Common Guest and Host Context Basic Types
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @ingroup grp_rt_types
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** @def ARCH_BITS
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * Defines the bit count of the current context.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync# if defined(__x86_64__) || defined(__amd64__) /** @todo MSC */ /** @todo get this right with gcc32. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** @def HC_ARCH_BITS
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * Defines the host architechture bit count.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def R3_ARCH_BITS
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Defines the host ring-3 architechture bit count.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def R0_ARCH_BITS
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Defines the host ring-0 architechture bit count.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def GC_ARCH_BITS
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Defines the guest architechture bit count.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Signed integer which can contain both GC and HC pointers. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to signed integer which can contain both GC and HC pointers. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer const to signed integer which can contain both GC and HC pointers. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer which can contain both GC and HC pointers. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync# error Unsupported HC_ARCH_BITS and/or GC_ARCH_BITS values.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned integer which can contain both GC and HC pointers. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer const to unsigned integer which can contain both GC and HC pointers. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Signed integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to signed integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const signed integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const unsigned integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** A file offset / size (off_t). */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a file offset / size. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** File mode (see iprt/fs.h). */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to file mode. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Device unix number. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a device unix number. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** i-node number. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a i-node number. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** User id. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a user id. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** NIL user id.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @todo check this for portability! */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Group id. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a group id. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** NIL group id.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @todo check this for portability! */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** I/O Port. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to I/O Port. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const I/O Port. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Selector. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to selector. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const selector. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Far 16-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef struct RTFAR16
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to Far 16-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const Far 16-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Far 32-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef struct RTFAR32
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to Far 32-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const Far 32-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Far 64-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef struct RTFAR64
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to Far 64-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const Far 64-bit pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @defgroup grp_rt_types_hc Host Context Basic Types
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @ingroup grp_rt_types
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** HC Natural signed integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to HC Natural signed integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const HC Natural signed integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** HC Natural unsigned integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to HC Natural unsigned integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const HC Natural unsigned integer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Signed integer which can contain a HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to signed interger which can contain a HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const signed interger which can contain a HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Signed integer which can contain a HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to signed interger which can contain a HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const signed interger which can contain a HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Signed integer which can contain a HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to signed interger which can contain a HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const signed interger which can contain a HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer which can contain a HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned interger which can contain a HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned interger which can contain a HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer which can contain a HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned interger which can contain a HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned interger which can contain a HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer which can contain a HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned interger which can contain a HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned interger which can contain a HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Host Physical Memory Address.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @todo This should be configurable at compile time too...
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to Host Physical Memory Address. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const Host Physical Memory Address. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def NIL_RTHCPHYS
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * NIL HC Physical Address.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * NIL_RTHCPHYS is used to signal an invalid physical address, similar
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * to the NULL pointer.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync#define NIL_RTHCPHYS ((RTHCPHYS)~0U) /** @todo change this to (~(VBOXHCPHYS)0) */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef void * RTHCPTR;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const HC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def NIL_RTHCPTR
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * NIL HC pointer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef void * RTR3PTR;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const HC ring-3 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def NIL_RTR3PTR
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * NIL HC ring-3 pointer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef void * RTR0PTR;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const HC ring-0 pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def NIL_RTR0PTR
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * NIL HC ring-0 pointer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer register in the host context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to an unsigned integer register in the host context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a const unsigned integer register in the host context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer register in the host ring-3 context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to an unsigned integer register in the host ring-3 context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a const unsigned integer register in the host ring-3 context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer register in the host ring-3 context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to an unsigned integer register in the host ring-3 context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a const unsigned integer register in the host ring-3 context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @defgroup grp_rt_types_gc Guest Context Basic Types
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @ingroup grp_rt_types
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Natural signed integer in the GC. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to natural signed interger in GC. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const natural signed interger in GC. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Natural signed uninteger in the GC. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to natural unsigned interger in GC. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const natural unsigned interger in GC. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Signed integer which can contain a GC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to signed interger which can contain a GC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const signed interger which can contain a GC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer which can contain a GC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned interger which can contain a GC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to unsigned interger which can contain a GC pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Guest Physical Memory Address.*/
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to Guest Physical Memory Address. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const Guest Physical Memory Address. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** @def NIL_RTGCPHYS
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * NIL GC Physical Address.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * NIL_RTGCPHYS is used to signal an invalid physical address, similar
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * to the NULL pointer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync#define NIL_RTGCPHYS ((RTGCPHYS)~0U) /** @todo change this to (~(RTGCPHYS)0) */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Guest context pointer.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * Keep in mind that this type is an unsigned integer in
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * HC and void pointer in GC.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsynctypedef void *RTGCPTR;
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a guest context pointer. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a const guest context pointer. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def NIL_RTGCPTR
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * NIL GC pointer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer register in the guest context. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to an unsigned integer register in the guest context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a const unsigned integer register in the guest context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @defgroup grp_rt_types_cc Current Context Basic Types
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @ingroup grp_rt_types
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Current Context Physical Memory Address.*/
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to Current Context Physical Memory Address. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const Current Context Physical Memory Address. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @def NIL_RTCCPHYS
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * NIL CC Physical Address.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * NIL_RTCCPHYS is used to signal an invalid physical address, similar
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * to the NULL pointer.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Unsigned integer register in the current context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to an unsigned integer register in the current context. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a const unsigned integer register in the current context. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @deprecated */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @deprecated */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @deprecated */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** File handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to file handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Nil file handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Loader module handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsynctypedef HCPTRTYPE(struct RTLDRMODINTERNAL *) RTLDRMOD;
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a loader module handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Nil loader module handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Ring-0 memory object handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef R0PTRTYPE(struct RTR0MEMOBJINTERNAL *) RTR0MEMOBJ;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a Ring-0 memory object handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Nil ring-0 memory object handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Native thread handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to an native thread handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Nil native thread handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Process handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a process handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Nil process handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** @typedef RTSEMEVENT
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * Event Semaphore handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsynctypedef HCPTRTYPE(struct RTSEMEVENTINTERNAL *) RTSEMEVENT;
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to an event semaphore handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Nil event semaphore handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** @typedef RTSEMEVENTMULTI
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * Event Multiple Release Semaphore handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsynctypedef HCPTRTYPE(struct RTSEMEVENTMULTIINTERNAL *) RTSEMEVENTMULTI;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to an event multiple release semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Nil multiple release event semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @typedef RTSEMFASTMUTEX
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Fast mutex Semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef HCPTRTYPE(struct RTSEMFASTMUTEXINTERNAL *) RTSEMFASTMUTEX;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a mutex semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Nil fast mutex semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @typedef RTSEMMUTEX
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Mutex Semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef HCPTRTYPE(struct RTSEMMUTEXINTERNAL *) RTSEMMUTEX;
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a mutex semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Nil mutex semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** @typedef RTSEMRW
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Read/Write Semaphore handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsynctypedef HCPTRTYPE(struct RTSEMRWINTERNAL *) RTSEMRW;
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a read/write semaphore handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Nil read/write semaphore handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Spinlock handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef HCPTRTYPE(struct RTSPINLOCKINTERNAL *) RTSPINLOCK;
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a spinlock handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Nil spinlock handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Socket handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to socket handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Nil socket handle. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Thread handle.*/
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to thread handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Nil thread handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * UUID data type.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsynctypedef union RTUUID
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync /** 8-bit view. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync /** 16-bit view. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync /** 32-bit view. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync /** 64-bit view. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** The way the UUID is declared by the ext2 guys. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync /** @deprecated */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to UUID data. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to readonly UUID data. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * UUID string maximum length.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Compression handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Decompressor handle. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * Unicode Code Point.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to an Unicode Code Point. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to an Unicode Code Point. */
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * UTF-16 character.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @remark wchar_t is not usable since it's compiler defined.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @remark When we use the term character we're not talking about unicode code point, but
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * the basic unit of the string encoding. Thus cuc - count of unicode chars - means
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * count of RTUTF16. And cch means count of the typedef 'char', which is assumed
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * to be an octet.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a UTF-16 character. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to a const UTF-16 character. */
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * UCS-2 character.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * @remark wchar_t is not usable since it's compiler defined.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * @deprecated Use RTUTF16!
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync/** Pointer to UCS-2 character.
92473d1de9ab080ff886ad61a4d908f7c3429608vboxsync * @deprecated Use PRTUTF16!
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to const UCS-2 character.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @deprecated Use PCRTUTF16!
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Wait for ever if we have to.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * Generic process callback.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @returns VBox status code. Failure will cancel the operation.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @param uPercentage The percentage of the operation which has been completed.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync * @param pvUser The user specified argument.
de6ba1989c812829372828f1801b232b3e7f09bfvboxsynctypedef DECLCALLBACK(int) FNRTPROGRESS(unsigned uPrecentage, void *pvUser);
de6ba1989c812829372828f1801b232b3e7f09bfvboxsync/** Pointer to a generic progress callback function, FNRTPROCESS(). */