VirtualBox

Changeset 13375

Show
Ignore:
Timestamp:
10/17/08 16:18:29 (3 months ago)
Author:
vboxsync
Message:

some (disabled) VMI bits

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • 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(); 

© 2008 Sun Microsystems, Inc.
ContactPrivacy policy