VirtualBox

Changeset 13375 in vbox


Ignore:
Timestamp:
Oct 17, 2008 2:18:29 PM (17 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
38101
Message:

some (disabled) VMI bits

Location:
trunk
Files:
16 edited

Legend:

Unmodified
Added
Removed
  • trunk/include/VBox/em.h

    r13351 r13375  
    5656    /** Hardware accelerated raw-mode execution. */
    5757    EMSTATE_HWACC,
     58    /** PARAV function. */
     59    EMSTATE_PARAV,
    5860    /** Recompiled mode execution. */
    5961    EMSTATE_REM,
  • trunk/include/VBox/err.h

    r12079 r13375  
    154154 * interrupts having changed the EIP. */
    155155#define VINF_EM_RESCHEDULE                  1117
     156/** PARAV call */
     157#define VINF_EM_RESCHEDULE_PARAV            1118
    156158/** Last scheduling related status code. (inclusive) */
    157 #define VINF_EM_LAST                        1117
     159#define VINF_EM_LAST                        1118
    158160
    159161/** Reason for leaving GC: Guest trap which couldn't be handled in GC.
     
    12741276/** @} */
    12751277
     1278
     1279/** @name VBox PARAV Status Codes
     1280 * @{
     1281 */
     1282/** Switch back to host */
     1283#define VINF_PARAV_SWITCH_TO_HOST                     4400
     1284
     1285/** @} */
     1286
    12761287/* SED-END */
    12771288
  • trunk/include/VBox/mm.h

    r12989 r13375  
    162162    MM_TAG_MM_LOOKUP_VIRT,
    163163    MM_TAG_MM_PAGE,
     164
     165    MM_TAG_PARAV,
    164166
    165167    MM_TAG_PATM,
  • trunk/include/VBox/vm.h

    r13350 r13375  
    487487     * This is placed here for performance reasons. */
    488488    bool                fHWACCMEnabled;
     489
     490    /** PARAV enabled flag. */
     491    bool                fPARAVEnabled;
    489492    /** @} */
    490493
     
    632635    } csam;
    633636
     637    /** PARAV part. */
     638    union
     639    {
     640#ifdef ___PARAVInternal_h
     641        struct PARAV s;
     642#endif
     643        char        padding[128];
     644    } parav;
     645
    634646    /** EM part. */
    635647    union
  • trunk/src/VBox/Devices/Makefile.kmk

    r13057 r13375  
    197197#
    198198VBoxDD2_TEMPLATE        = VBOXR3
    199 VBoxDD2_DEFS            = IN_VBOXDD2
     199VBoxDD2_DEFS            = IN_VBOXDD2 \
     200                          $(if $(VBOX_WITH_VMI),VBOX_WITH_VMI,)
    200201VBoxDD2_INCS           := \
    201202        $(PATH_SUB_CURRENT)
  • trunk/src/VBox/VMM/EM.cpp

    r13343 r13375  
    4242#include <VBox/em.h>
    4343#include <VBox/vmm.h>
     44#ifdef VBOX_WITH_VMI
     45#include <VBox/parav.h>
     46#endif
    4447#include <VBox/patm.h>
    4548#include <VBox/csam.h>
     
    531534        case EMSTATE_HWACC:             return "EMSTATE_HWACC";
    532535        case EMSTATE_REM:               return "EMSTATE_REM";
     536#ifdef VBOX_WITH_VMI
     537        case EMSTATE_PARAV:             return "EMSTATE_PARAV";
     538#endif
    533539        case EMSTATE_HALTED:            return "EMSTATE_HALTED";
    534540        case EMSTATE_SUSPENDED:         return "EMSTATE_SUSPENDED";
     
    21552161            AssertReleaseMsgFailed(("%Vrc handling is not yet implemented\n", rc));
    21562162            break;
     2163
     2164#ifdef VBOX_WITH_VMI
     2165        /*
     2166         * PARAV function.
     2167         */
     2168        case VINF_EM_RESCHEDULE_PARAV:
     2169            rc = PARAVCallFunction(pVM);
     2170            break;
     2171#endif
    21572172
    21582173        /*
     
    33163331                    break;
    33173332
     3333#ifdef VBOX_WITH_VMI
     3334                /*
     3335                 * Reschedule - parav call.
     3336                 */
     3337                case VINF_EM_RESCHEDULE_PARAV:
     3338                    Log2(("EMR3ExecuteVM: VINF_EM_RESCHEDULE_PARAV: %d -> %d (EMSTATE_PARAV)\n", pVM->em.s.enmState, EMSTATE_PARAV));
     3339                    pVM->em.s.enmState = EMSTATE_PARAV;
     3340                    break;
     3341#endif
     3342
    33183343                /*
    33193344                 * Resume.
     
    34673492                    break;
    34683493
     3494#ifdef VBOX_WITH_VMI
     3495                /*
     3496                 * Execute PARAV function.
     3497                 */
     3498                case EMSTATE_PARAV:
     3499                    rc = PARAVCallFunction(pVM);
     3500                    pVM->em.s.enmState = EMSTATE_REM;
     3501                    break;
     3502#endif
     3503
    34693504                /*
    34703505                 * hlt - execution halted until interrupt.
  • trunk/src/VBox/VMM/MMHeap.cpp

    r12989 r13375  
    753753        TAG2STR(MM_PAGE);
    754754
     755        TAG2STR(PARAV);
     756
    755757        TAG2STR(PATM);
    756758        TAG2STR(PATM_PATCH);
  • trunk/src/VBox/VMM/Makefile.kmk

    r13306 r13375  
    138138        VMMSwitcher/AMD64ToPAE.asm
    139139
     140ifdef VBOX_WITH_VMI
     141VMMR3_DEFS += \
     142        VBOX_WITH_VMI
     143VMMR3_INCS += \
     144        PARAV
     145VMMR3_SOURCES += \
     146        PARAV/PARAV.cpp \
     147        PARAV/PARAVAll.cpp
     148endif
     149
    140150ifdef VBOX_WITH_USB
    141151VMMR3_DEFS += VBOX_WITH_USB
     
    338348endif
    339349
     350ifdef VBOX_WITH_VMI
     351VMMGC_DEFS += \
     352        VBOX_WITH_VMI
     353VMMGC_SOURCES += \
     354        PARAV/PARAV.cpp \
     355        PARAV/PARAVAll.cpp
     356endif
     357
    340358# the very last one.
    341359VMMGC_SOURCES += VMMGC/VMMGC99.asm
  • trunk/src/VBox/VMM/VM.cpp

    r13146 r13375  
    4141#include <VBox/stam.h>
    4242#include <VBox/patm.h>
     43#ifdef VBOX_WITH_VMI
     44#include <VBox/parav.h>
     45#endif
    4346#include <VBox/csam.h>
    4447#include <VBox/iom.h>
     
    613616                                            if (VBOX_SUCCESS(rc))
    614617                                            {
    615                                                 rc = IOMR3Init(pVM);
     618#ifdef VBOX_WITH_VMI
     619                                                rc = PARAVR3Init(pVM);
    616620                                                if (VBOX_SUCCESS(rc))
    617621                                                {
    618                                                     rc = EMR3Init(pVM);
     622#endif
     623                                                    rc = IOMR3Init(pVM);
    619624                                                    if (VBOX_SUCCESS(rc))
    620625                                                    {
    621                                                         rc = DBGFR3Init(pVM);
     626                                                        rc = EMR3Init(pVM);
    622627                                                        if (VBOX_SUCCESS(rc))
    623628                                                        {
    624                                                             rc = PDMR3Init(pVM);
     629                                                            rc = DBGFR3Init(pVM);
    625630                                                            if (VBOX_SUCCESS(rc))
    626631                                                            {
    627                                                                 rc = PGMR3InitDynMap(pVM);
    628                                                                 if (VBOX_SUCCESS(rc))
    629                                                                     rc = MMR3HyperInitFinalize(pVM);
    630                                                                 if (VBOX_SUCCESS(rc))
    631                                                                     rc = PATMR3InitFinalize(pVM);
    632                                                                 if (VBOX_SUCCESS(rc))
    633                                                                     rc = PGMR3InitFinalize(pVM);
    634                                                                 if (VBOX_SUCCESS(rc))
    635                                                                     rc = SELMR3InitFinalize(pVM);
    636                                                                 if (VBOX_SUCCESS(rc))
    637                                                                     rc = TMR3InitFinalize(pVM);
    638                                                                 if (VBOX_SUCCESS(rc))
    639                                                                     rc = VMMR3InitFinalize(pVM);
    640                                                                 if (VBOX_SUCCESS(rc))
    641                                                                     rc = vmR3InitDoCompleted(pVM, VMINITCOMPLETED_RING3);
     632                                                                rc = PDMR3Init(pVM);
    642633                                                                if (VBOX_SUCCESS(rc))
    643634                                                                {
    644                                                                     LogFlow(("vmR3InitRing3: returns %Vrc\n", VINF_SUCCESS));
    645                                                                     return VINF_SUCCESS;
     635                                                                    rc = PGMR3InitDynMap(pVM);
     636                                                                    if (VBOX_SUCCESS(rc))
     637                                                                        rc = MMR3HyperInitFinalize(pVM);
     638                                                                    if (VBOX_SUCCESS(rc))
     639                                                                        rc = PATMR3InitFinalize(pVM);
     640                                                                    if (VBOX_SUCCESS(rc))
     641                                                                        rc = PGMR3InitFinalize(pVM);
     642                                                                    if (VBOX_SUCCESS(rc))
     643                                                                        rc = SELMR3InitFinalize(pVM);
     644                                                                    if (VBOX_SUCCESS(rc))
     645                                                                        rc = TMR3InitFinalize(pVM);
     646                                                                    if (VBOX_SUCCESS(rc))
     647                                                                        rc = VMMR3InitFinalize(pVM);
     648                                                                    if (VBOX_SUCCESS(rc))
     649                                                                        rc = vmR3InitDoCompleted(pVM, VMINITCOMPLETED_RING3);
     650                                                                    if (VBOX_SUCCESS(rc))
     651                                                                    {
     652                                                                        LogFlow(("vmR3InitRing3: returns %Vrc\n", VINF_SUCCESS));
     653                                                                        return VINF_SUCCESS;
     654                                                                    }
     655                                                                    int rc2 = PDMR3Term(pVM);
     656                                                                    AssertRC(rc2);
    646657                                                                }
    647                                                                 int rc2 = PDMR3Term(pVM);
     658                                                                int rc2 = DBGFR3Term(pVM);
    648659                                                                AssertRC(rc2);
    649660                                                            }
    650                                                             int rc2 = DBGFR3Term(pVM);
     661                                                            int rc2 = EMR3Term(pVM);
    651662                                                            AssertRC(rc2);
    652663                                                        }
    653                                                         int rc2 = EMR3Term(pVM);
     664                                                        int rc2 = IOMR3Term(pVM);
    654665                                                        AssertRC(rc2);
    655666                                                    }
    656                                                     int rc2 = IOMR3Term(pVM);
     667#ifdef VBOX_WITH_VMI
     668                                                    int rc2 = PARAVR3Term(pVM);
    657669                                                    AssertRC(rc2);
    658670                                                }
     671#endif
    659672                                                int rc2 = PATMR3Term(pVM);
    660673                                                AssertRC(rc2);
  • trunk/src/VBox/VMM/testcase/Makefile.kmk

    r12989 r13375  
    9494tstVMStructSize_TEMPLATE= VBOXR3AUTOTST
    9595tstVMStructSize_DEFS    = IN_VMM_R3 IN_DIS
    96 ifdef VBOX_WITH_IDT_PATCHING
    97 tstVMStructSize_DEFS   += VBOX_WITH_IDT_PATCHING
    98 endif
    9996tstVMStructSize_INCS    = $(VBOX_PATH_VMM_SRC) $(VBOX_PATH_VMM_SRC)/PATM $(VBOX_VMM_TESTCASE_OUT_DIR)
    10097tstVMStructSize_SOURCES = tstVMStructSize.cpp
    10198tstVMStructSize.cpp_DEPS= $(VBOX_VMM_TESTCASE_OUT_DIR)/tstVMStructGC.h
     99ifdef VBOX_WITH_IDT_PATCHING
     100tstVMStructSize_DEFS   += VBOX_WITH_IDT_PATCHING
     101endif
     102ifdef VBOX_WITH_VMI
     103tstVMStructSize_DEFS   += VBOX_WITH_VMI
     104tstVMStructSize_INCS   += $(VBOX_PATH_VMM_SRC)/PARAV
     105endif
    102106
    103107tstAsmStructs_TEMPLATE  = VBOXR3AUTOTST
  • trunk/src/VBox/VMM/testcase/tstVMStructSize.cpp

    r13062 r13375  
    4747#include "HWACCMInternal.h"
    4848#include "PATMInternal.h"
     49#ifdef VBOX_WITH_VMI
     50#include "PARAVInternal.h"
     51#endif
    4952#include "VMMInternal.h"
    5053#include "DBGFInternal.h"
  • trunk/src/recompiler/Makefile.kmk

    r13363 r13375  
    104104# The VBoxREM.[dll|so|..] or VBoxREM2.rel.
    105105#
    106 $(REM_MOD)_DEFS             = IN_REM_R3 REM_INCLUDE_CPU_H
    107 $(REM_MOD)_DEFS            += REM_PHYS_ADDR_IN_TLB
     106$(REM_MOD)_DEFS             = \
     107        IN_REM_R3 REM_INCLUDE_CPU_H REM_PHYS_ADDR_IN_TLB \
     108        $(if $(VBOX_WITH_VMI),VBOX_WITH_VMI,)
     109
    108110#$(REM_MOD)_DEFS          += DEBUG_ALL_LOGGING DEBUG_DISAS DEBUG_PCALL DEBUG_EXEC DEBUG_FLUSH DEBUG_IOPORT DEBUG_SIGNAL DEBUG_TLB_CHECK DEBUG_TB_INVALIDATE DEBUG_TLB  # Enables huge amounts of debug logging.
    109111
  • trunk/src/recompiler/VBoxREMWrapper.cpp

    r13306 r13375  
    624624    { REMPARMDESC_FLAGS_INT,        sizeof(uint32_t *), NULL }
    625625};
     626#ifdef VBOX_WITH_VMI
     627static const REMPARMDESC g_aArgsPARAVIsBiosCall[] =
     628{
     629    { REMPARMDESC_FLAGS_INT,        sizeof(PVM), NULL },
     630    { REMPARMDESC_FLAGS_GCPTR,      sizeof(RTGCPTR), NULL },
     631    { REMPARMDESC_FLAGS_INT,        sizeof(uint32_t), NULL }
     632};
     633#endif
    626634static const REMPARMDESC g_aArgsPDMApicGetBase[] =
    627635{
     
    10751083    { "PATMR3QueryPatchMemGC",                  (void *)(uintptr_t)&PATMR3QueryPatchMemGC,          &g_aArgsPATMR3QueryPatchMem[0],             RT_ELEMENTS(g_aArgsPATMR3QueryPatchMem),               REMFNDESC_FLAGS_RET_INT,    sizeof(RTGCPTR),    NULL },
    10761084    { "PATMR3QueryPatchMemHC",                  (void *)(uintptr_t)&PATMR3QueryPatchMemHC,          &g_aArgsPATMR3QueryPatchMem[0],             RT_ELEMENTS(g_aArgsPATMR3QueryPatchMem),               REMFNDESC_FLAGS_RET_INT,    sizeof(void *),     NULL },
     1085#ifdef VBOX_WITH_VMI
     1086    { "PARAVIsBiosCall",                        (void *)(uintptr_t)&PARAVIsBiosCall,                &g_aArgsPARAVIsBiosCall[0],                 RT_ELEMENTS(g_aArgsPARAVIsBiosCall),                   REMFNDESC_FLAGS_RET_INT,    sizeof(bool),       NULL },
     1087#endif
    10771088    { "PDMApicGetBase",                         (void *)(uintptr_t)&PDMApicGetBase,                 &g_aArgsPDMApicGetBase[0],                  RT_ELEMENTS(g_aArgsPDMApicGetBase),                    REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
    10781089    { "PDMApicGetTPR",                          (void *)(uintptr_t)&PDMApicGetTPR,                  &g_aArgsPDMApicGetTPR[0],                   RT_ELEMENTS(g_aArgsPDMApicGetTPR),                     REMFNDESC_FLAGS_RET_INT,    sizeof(int),        NULL },
  • trunk/src/recompiler/VBoxRecompiler.c

    r13185 r13375  
    10701070            rc = VINF_EM_RESCHEDULE_HWACC;
    10711071            break;
     1072
     1073#ifdef VBOX_WITH_VMI
     1074        /*
     1075         *
     1076         */
     1077        case EXCP_PARAV_CALL:
     1078            Log2(("REMR3Run: cpu_exec -> EXCP_PARAV_CALL\n"));
     1079            rc = VINF_EM_RESCHEDULE_PARAV;
     1080            break;
     1081#endif
    10721082
    10731083        /*
  • trunk/src/recompiler/cpu-defs.h

    r11982 r13375  
    9090#define EXCP_SINGLE_INSTR   0x11026 /* executed single instruction. */
    9191#define EXCP_RC             0x11027 /* a EM rc was raised (VMR3Reset/Suspend/PowerOff). */
     92#ifdef VBOX
     93#define EXCP_PARAV_CALL     0x11028 /* VMI BIOS call */
     94#endif
    9295#endif /* VBOX */
    9396#define MAX_BREAKPOINTS 32
  • trunk/src/recompiler/target-i386/helper.c

    r13117 r13375  
    2929#ifdef VBOX
    3030# include <VBox/err.h>
     31# include <VBox/parav.h>
    3132#endif
    3233#include "exec.h"
     
    625626
    626627#ifdef VBOX
     628# ifdef VBOX_WITH_VMI
     629    if (   intno == 6
     630        && PARAVIsBiosCall(env->pVM, (RTRCPTR)next_eip, env->regs[R_EAX]))
     631    {
     632        env->exception_index = EXCP_PARAV_CALL;
     633        cpu_loop_exit();
     634    }
     635# endif
    627636    if (remR3NotifyTrap(env, intno, error_code, next_eip) != VINF_SUCCESS)
    628637        cpu_loop_exit();
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette