types.h revision 21974606707d360439c47381c6ed866e18631feb
42576743851c3c956ad7e867e74df1084c30d434vboxsync * VirtualBox - Types.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Copyright (C) 2006-2007 Oracle Corporation
42576743851c3c956ad7e867e74df1084c30d434vboxsync * This file is part of VirtualBox Open Source Edition (OSE), as
42576743851c3c956ad7e867e74df1084c30d434vboxsync * available from http://www.virtualbox.org. This file is free software;
42576743851c3c956ad7e867e74df1084c30d434vboxsync * you can redistribute it and/or modify it under the terms of the GNU
42576743851c3c956ad7e867e74df1084c30d434vboxsync * General Public License (GPL) as published by the Free Software
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Foundation, in version 2 as it comes in the "COPYING" file of the
42576743851c3c956ad7e867e74df1084c30d434vboxsync * VirtualBox OSE distribution. VirtualBox OSE is distributed in the
42576743851c3c956ad7e867e74df1084c30d434vboxsync * hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * The contents of this file may alternatively be used under the terms
42576743851c3c956ad7e867e74df1084c30d434vboxsync * of the Common Development and Distribution License Version 1.0
42576743851c3c956ad7e867e74df1084c30d434vboxsync * (CDDL) only, as it comes in the "COPYING.CDDL" file of the
42576743851c3c956ad7e867e74df1084c30d434vboxsync * VirtualBox OSE distribution, in which case the provisions of the
42576743851c3c956ad7e867e74df1084c30d434vboxsync * CDDL are applicable instead of those of the GPL.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * You may elect to license modified versions of this file under the
42576743851c3c956ad7e867e74df1084c30d434vboxsync * terms and conditions of either the GPL or the CDDL or both.
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** @defgroup grp_types Basic VBox Types
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** @defgroup grp_types_both Common Guest and Host Context Basic Types
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * @ingroup grp_types
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** @defgroup grp_types_hc Host Context Basic Types
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * @ingroup grp_types_both
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** @defgroup grp_types_gc Guest Context Basic Types
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync * @ingroup grp_types_both
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to per support driver session data.
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync * (The data is a R0 entity and private to the the R0 SUP part. All
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync * other should consider this a sort of handle.) */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsynctypedef R0PTRTYPE(struct SUPDRVSESSION *) PSUPDRVSESSION;
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to a VM. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to a VM - Ring-0 Ptr. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to a VM - Ring-3 Ptr. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to a VM - RC Ptr. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a virtual CPU structure. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a virtual CPU structure - Ring-3 Ptr. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a virtual CPU structure - Ring-0 Ptr. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to a virtual CPU structure - RC Ptr. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a ring-0 (global) VM structure. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a ring-3 (user mode) VM structure. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a ring-3 (user mode) VMCPU structure. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Virtual CPU ID. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Pointer to a virtual CPU ID. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** @name Special CPU ID values.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Most of these are for request scheduling.
a5af4f8add719046631d3d68734b9b6d9ca9d046vboxsync/** All virtual CPUs. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** All virtual CPUs, descending order. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Any virtual CPU.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Intended for scheduling a VM request or some other task. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Any virtual CPU; always queue for future execution.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Intended for scheduling a VM request or some other task. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** The NIL value. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Virtual CPU set.
42576743851c3c956ad7e867e74df1084c30d434vboxsynctypedef struct VMCPUSET
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** The bitmap data. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to a Virtual CPU set. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a const Virtual CPU set. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Tests if a valid CPU ID is present in the set.. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync#define VMCPUSET_IS_PRESENT(pSet, idCpu) ASMBitTest( &(pSet)->au32Bitmap, (idCpu))
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Adds a CPU to the set. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync#define VMCPUSET_ADD(pSet, idCpu) ASMBitSet( &(pSet)->au32Bitmap, (idCpu))
a5af4f8add719046631d3d68734b9b6d9ca9d046vboxsync/** Deletes a CPU from the set. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync#define VMCPUSET_DEL(pSet, idCpu) ASMBitClear(&(pSet)->au32Bitmap, (idCpu))
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Empties the set. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync#define VMCPUSET_EMPTY(pSet) memset(&(pSet)->au32Bitmap[0], '\0', sizeof((pSet)->au32Bitmap))
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Filles the set. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync#define VMCPUSET_FILL(pSet) memset(&(pSet)->au32Bitmap[0], 0xff, sizeof((pSet)->au32Bitmap))
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Filles the set. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync#define VMCPUSET_IS_EQUAL(pSet1, pSet2) (memcmp(&(pSet1)->au32Bitmap[0], &(pSet2)->au32Bitmap[0], sizeof((pSet1)->au32Bitmap)) == 0)
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** The VM is being created. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** The VM is created. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** The VM state is being loaded from file. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** The VM is being powered on */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** The VM is being resumed. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** The VM is runnning. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Live save: The VM is running and the state is being saved. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** The VM is being reset. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Live save: The VM is being reset and immediately suspended. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** The VM is being suspended. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Live save: The VM is being suspended during a live save operation, either as
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync * part of the normal flow or VMR3Reset. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Live save: The VM is being suspended by VMR3Suspend during live save. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** The VM is suspended. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Live save: The VM has been suspended and is waiting for the live save
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync * operation to move on. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Live save: The VM has been suspended by VMR3Suspend during a live save. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** The VM is suspended and its state is being saved by EMT(0). (See SSM) */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** The VM is being debugged. (See DBGF.) */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Live save: The VM is being debugged while the live phase is going on. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** The VM is being powered off. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Live save: The VM is being powered off and the save cancelled. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** The VM is switched off, awaiting destruction. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Live save: Waiting for cancellation and transition to VMSTATE_OFF. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** The VM is powered off because of a fatal error. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Live save: Waiting for cancellation and transition to FatalError. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** The VM is in guru meditation over a fatal failure. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Live save: Waiting for cancellation and transition to GuruMeditation. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** The VM is screwed because of a failed state loading. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** The VM is being destroyed. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Terminated. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** hack forcing the size of the enum to 32-bits. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** @def VBOXSTRICTRC_STRICT_ENABLED
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * Indicates that VBOXSTRICTRC is in strict mode.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync#if defined(__cplusplus) \
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync && ARCH_BITS == 64 /* cdecl requires classes and structs as hidden params. */ \
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync && !defined(_MSC_VER) /* trouble similar to 32-bit gcc. */ \
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync && ( defined(RT_STRICT) \
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync || defined(VBOX_STRICT) \
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync || defined(DEBUG) \
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync/** We need RTERR_STRICT_RC. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync#if defined(VBOXSTRICTRC_STRICT_ENABLED) && !defined(RTERR_STRICT_RC)
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync * Strict VirtualBox status code.
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync * This is normally an 32-bit integer and the only purpose of the type is to
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync * highlight the special handling that is required. But in strict build it is a
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync * class that causes compilation and runtime errors for some of the incorrect
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync * handling.
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** The status code. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Default constructor setting the status to VERR_IPE_UNINITIALIZED_STATUS. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Constructor for normal integer status codes. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Getter that VBOXSTRICTRC_VAL can use. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** @name Comparison operators
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync bool operator==(int32_t rc) const { return m_rc == rc; }
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync bool operator!=(int32_t rc) const { return m_rc != rc; }
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync bool operator<=(int32_t rc) const { return m_rc <= rc; }
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync bool operator>=(int32_t rc) const { return m_rc >= rc; }
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync bool operator<(int32_t rc) const { return m_rc < rc; }
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync bool operator>(int32_t rc) const { return m_rc > rc; }
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** Special automatic cast for RT_SUCCESS_NP. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync operator RTErrStrictType2() const { return RTErrStrictType2(m_rc); }
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync /** @name Constructors that will prevent some of the bad types.
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync VBOXSTRICTRC(uint8_t rc) : m_rc(-999) { NOREF(rc); }
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync VBOXSTRICTRC(uint16_t rc) : m_rc(-999) { NOREF(rc); }
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync VBOXSTRICTRC(uint32_t rc) : m_rc(-999) { NOREF(rc); }
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync VBOXSTRICTRC(uint64_t rc) : m_rc(-999) { NOREF(rc); }
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync VBOXSTRICTRC(int8_t rc) : m_rc(-999) { NOREF(rc); }
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync VBOXSTRICTRC(int16_t rc) : m_rc(-999) { NOREF(rc); }
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync VBOXSTRICTRC(int64_t rc) : m_rc(-999) { NOREF(rc); }
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** @def VBOXSTRICTRC_VAL
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * Explicit getter.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * @param rcStrict The strict VirtualBox status code.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync# define VBOXSTRICTRC_VAL(rcStrict) ( (rcStrict).getValue() )
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** @def VBOXSTRICTRC_TODO
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * Returns that needs dealing with.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * @param rcStrict The strict VirtualBox status code.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync#define VBOXSTRICTRC_TODO(rcStrict) VBOXSTRICTRC_VAL(rcStrict)
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a PDM Base Interface. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a pointer to a PDM Base Interface. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a PDM Device Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a pointer to a PDM Device Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** R3 pointer to a PDM Device Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** R0 pointer to a PDM Device Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** RC pointer to a PDM Device Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a PDM USB Device Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a pointer to a PDM USB Device Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a PDM Driver Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a pointer to a PDM Driver Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** R3 pointer to a PDM Driver Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** R0 pointer to a PDM Driver Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** RC pointer to a PDM Driver Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a PDM Service Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a pointer to a PDM Service Instance. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a PDM critical section. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a const PDM critical section. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** R3 pointer to a timer. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync/** Pointer to a R3 pointer to a timer. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync/** R0 pointer to a timer. */
2d0371c5f4b5bf0651da37a13cd3ae7479dd0432vboxsync/** Pointer to a R3 pointer to a timer. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** RC pointer to a timer. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a RC pointer to a timer. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a timer. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a pointer to a timer. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** SSM Operation handle. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a const SSM stream method table. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a CPUMCTX. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a const CPUMCTX. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a CPU context core. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a const CPU context core. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to selector hidden registers. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** Pointer to const selector hidden registers. */
42576743851c3c956ad7e867e74df1084c30d434vboxsynctypedef const struct CPUMSELREGHID *PCCPUMSELREGHID;
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** @defgroup grp_types_idt Interrupt Descriptor Table Entry.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * @ingroup grp_types
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * @todo This all belongs in x86.h!
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** @todo VBOXIDT -> VBOXDESCIDT, skip the complex variations. We'll never use them. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** IDT Entry, Task Gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Reserved. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Task Segment Selector. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** More reserved. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Fixed value bit 0 - Set to 1. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Busy bit. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Fixed value bit 2 - Set to 1. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 3 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 4 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Descriptor Privilege level. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Present flag. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Reserved. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to IDT Entry, Task gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** IDT Entry, Intertupt gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Low offset word. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Segment Selector. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Reserved. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 0 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 1 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 2 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 3 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 4 - Set to 1. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 5 - Set to 1. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Gate size, 1 = 32 bits, 0 = 16 bits. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 5 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Descriptor Privilege level. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Present flag. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** High offset word. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to IDT Entry, Interrupt gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsynctypedef VBOXIDTE_INTERRUPTGATE *PVBOXIDTE_INTERRUPTGATE;
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** IDT Entry, Trap Gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Low offset word. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Segment Selector. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Reserved. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 0 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 1 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 2 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 3 - Set to 1. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 4 - Set to 1. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 5 - Set to 1. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Gate size, 1 = 32 bits, 0 = 16 bits. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Fixed value bit 5 - Set to 0. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Descriptor Privilege level. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Present flag. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** High offset word. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to IDT Entry, Trap Gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** IDT Entry Generic view. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Low offset word. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Segment Selector. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Reserved. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** IDT Type part one (not used for task gate). */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** IDT Type part two. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Descriptor Privilege level. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** Present flag. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** High offset word. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to IDT Entry Generic view. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** IDT Type1 value. (Reserved for task gate!) */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** IDT Type2 value - Task gate. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** IDT Type2 value - 16 bit interrupt gate. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** IDT Type2 value - 32 bit interrupt gate. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** IDT Type2 value - 16 bit trap gate. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** IDT Type2 value - 32 bit trap gate. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** IDT Entry. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsynctypedef union VBOXIDTE
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Task gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Trap gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Interrupt gate view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Generic IDT view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 8 bit unsigned integer view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 16 bit unsigned integer view. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 32 bit unsigned integer view. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** 64 bit unsigned integer view. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to IDT Entry. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync/** Pointer to IDT Entry. */
42576743851c3c956ad7e867e74df1084c30d434vboxsynctypedef struct VBOXIDTR
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Size of the IDT. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Address of the IDT. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** IDTR from version 1.6 */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Size of the IDT. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Address of the IDT. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync/** @def VBOXIDTE_OFFSET
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Return the offset of an IDT entry.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsynctypedef struct VBOXGDTR
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Size of the GDT. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Address of the GDT. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to GDTR. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** GDTR from version 1.6 */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Size of the GDT. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Address of the GDT. */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync * 32-bit Task Segment used in raw mode.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * @todo Move this to SELM! Use X86TSS32 instead.
42576743851c3c956ad7e867e74df1084c30d434vboxsynctypedef struct VBOXTSS
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** 0x00 - Back link to previous task. (static) */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** 0x04 - Ring-0 stack pointer. (static) */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** 0x08 - Ring-0 stack segment. (static) */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** 0x0c - Ring-1 stack pointer. (static) */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** 0x10 - Ring-1 stack segment. (static) */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** 0x14 - Ring-2 stack pointer. (static) */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** 0x18 - Ring-2 stack segment. (static) */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** 0x1c - Page directory for the task. (static) */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** 0x20 - EIP before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x24 - EFLAGS before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x28 - EAX before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x2c - ECX before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x30 - EDX before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x34 - EBX before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x38 - ESP before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x3c - EBP before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x40 - ESI before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x44 - EDI before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x48 - ES before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x4c - CS before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x50 - SS before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x54 - DS before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x58 - FS before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x5c - GS before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x60 - LDTR before task switch. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x64 - Debug trap flag */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x66 - Offset relative to the TSS of the start of the I/O Bitmap
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * and the end of the interrupt redirection bitmap. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** 0x68 - 32 bytes for the virtual interrupt redirection bitmap. (VME) */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to task segment. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to const task segment. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * Data transport buffer (scatter/gather)
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsynctypedef struct PDMDATASEG
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Length of buffer in entry. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Pointer to the start of the buffer. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a data transport segment. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a const data transport segment. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Forms of generic segment offloading.
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Invalid zero value. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** TCP/IPv6 over IPv4 tunneling - no CWR/ECE encoding.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * The header offsets and sizes relates to IPv4 and TCP, the IPv6 header is
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * figured out as needed.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * @todo Needs checking against facts, this is just an outline of the idea. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** UDP/IPv6 over IPv4 tunneling.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * The header offsets and sizes relates to IPv4 and UDP, the IPv6 header is
42576743851c3c956ad7e867e74df1084c30d434vboxsync * figured out as needed.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * @todo Needs checking against facts, this is just an outline of the idea. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** The end of valid GSO types. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * Generic segment offloading context.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * We generally follow the E1000 specs wrt to which header fields we change.
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * However the GSO type implies where the checksum fields are and that they are
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * always updated from scratch (no half done pseudo checksums).
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * @remarks This is part of the internal network GSO packets. Take great care
42576743851c3c956ad7e867e74df1084c30d434vboxsync * when making changes. The size is expected to be exactly 8 bytes.
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** The type of segmentation offloading we're performing (PDMNETWORKGSOTYPE). */
02f73b88a6e96b7f1b8ab0bbb98cfb798b566fbdvboxsync /** The total header size. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** The max segment size (MSS) to apply. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Offset of the first header (IPv4 / IPv6). 0 if not not needed. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Offset of the second header (TCP / UDP). 0 if not not needed. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync /** Unused. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a GSO context. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync/** Pointer to a const GSO context. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * The current ROM page protection.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * @remarks This is part of the saved state.
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** The customary invalid value. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Read from the virgin ROM page, ignore writes.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Map the virgin page, use write access handler to ignore writes. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Read from the virgin ROM page, write to the shadow RAM.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Map the virgin page, use write access handler change the RAM. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Read from the shadow ROM page, ignore writes.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Map the shadow page read-only, use write access handler to ignore writes. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** Read from the shadow ROM page, ignore writes.
42576743851c3c956ad7e867e74df1084c30d434vboxsync * Map the shadow page read-write, disabled write access handler. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** The end of valid values. */
42576743851c3c956ad7e867e74df1084c30d434vboxsync /** The usual 32-bit type size hack. */
cdcfac625bb49f1d4b67aaf8fb8b1cdb69fe49c2vboxsync * Page mapping lock.
typedef struct PGMPAGEMAPLOCK
void *pvMap;
typedef enum CPUMMODE
CPUMMODE_INVALID = 0,
} CPUMMODE;