VirtualBox

Ignore:
Timestamp:
Apr 28, 2016 7:41:14 PM (9 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
106941
Message:

bs3kit: updates

Location:
trunk/src/VBox/ValidationKit/bootsectors/bs3kit
Files:
4 added
9 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/Makefile.kmk

    r60686 r60749  
    5555        bs3-cmn-A20Disable.asm \
    5656        bs3-cmn-A20Enable.asm \
     57        bs3-cmn-GetModeName.c \
    5758        bs3-cmn-KbdRead.asm \
    5859        bs3-cmn-KbdWait.asm \
     
    145146        bs3-cmn-TestCheckRegCtxEx.c \
    146147        bs3-cmn-TestPrintf.c \
     148        bs3-cmn-TrapReInit.c \
    147149        bs3-cmn-TrapRmV86Init.c \
    148150        bs3-cmn-TrapRmV86SetGate.c \
     
    161163       bs3-cmn-UtilSetFullGdtr.asm \
    162164       bs3-cmn-UtilSetFullIdtr.asm \
     165       bs3-cmn-TestDoModesByOneHlp.asm \
    163166       ../../../Runtime/common/asm/ASMBitFirstClear.asm \
    164167       ../../../Runtime/common/asm/ASMBitFirstSet.asm \
     
    281284        bs3-mode-TrapSystemCallHandler.asm \
    282285        bs3-mode-TestDoModes.c \
     286        bs3-mode-TestDoModesByOne.c \
    283287        bs3-mode-TestDoModesHlp.asm \
    284288
     
    290294bs3kit-rm_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
    291295        bs3-first-rm.asm \
    292         bs3-mode-CpuDetect.asm
     296        bs3-mode-CpuDetect.asm \
     297        bs3-mode-TestDoModesByOneStub.asm \
    293298
    294299
     
    300305bs3kit-pe16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
    301306        bs3-first-pe16.asm \
     307        bs3-mode-TestDoModesByOneStub.asm \
    302308#       bs3-mode-CpuDetect.asm
    303309
     
    307313bs3kit-pe16_32_INSTTYPE = none
    308314bs3kit-pe16_32_DEFS     = TMPL_MODE=BS3_MODE_PE16_32
    309 bs3kit-pe16_32_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES)
     315bs3kit-pe16_32_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
     316        bs3-mode-TestDoModesByOneStub.asm \
    310317
    311318# The v86 BS3Kit library for 16-bit protected kernel+tss.
     
    314321bs3kit-pe16_v86_INSTTYPE = none
    315322bs3kit-pe16_v86_DEFS     = TMPL_MODE=BS3_MODE_PE16_V86
    316 bs3kit-pe16_v86_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES)
     323bs3kit-pe16_v86_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
     324        bs3-mode-TestDoModesByOneStub.asm \
    317325
    318326# The 32-bit BS3Kit library for 32-bit protected kernel+tss.
     
    328336bs3kit-pe32_16_INSTTYPE = none
    329337bs3kit-pe32_16_DEFS     = TMPL_MODE=BS3_MODE_PE32_16
    330 bs3kit-pe32_16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES)
     338bs3kit-pe32_16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
     339        bs3-mode-TestDoModesByOneStub.asm \
    331340
    332341# The v8086 BS3Kit library for 32-bit protected kernel+tss.
     
    337346bs3kit-pev86_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES)
    338347
    339 
    340348# The 16-bit BS3Kit library for 16-bit paged protected kernel+tss.
    341349LIBRARIES += bs3kit-pp16
     
    344352bs3kit-pp16_DEFS     = TMPL_MODE=BS3_MODE_PP16
    345353bs3kit-pp16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
    346         bs3-mode-CpuDetect.asm
     354        bs3-mode-CpuDetect.asm \
     355        bs3-mode-TestDoModesByOneStub.asm \
    347356
    348357# The 32-bit BS3Kit library for 16-bit paged protected kernel+tss.
     
    372381bs3kit-pp32_16_INSTTYPE = none
    373382bs3kit-pp32_16_DEFS     = TMPL_MODE=BS3_MODE_PP32_16
    374 bs3kit-pp32_16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES)
     383bs3kit-pp32_16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
     384        bs3-mode-TestDoModesByOneStub.asm \
    375385
    376386# The v8086 BS3Kit library for 32-bit paged protected kernel+tss.
     
    388398bs3kit-pae16_DEFS     = TMPL_MODE=BS3_MODE_PAE16
    389399bs3kit-pae16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
    390         bs3-mode-CpuDetect.asm
     400        bs3-mode-CpuDetect.asm \
     401        bs3-mode-TestDoModesByOneStub.asm \
    391402
    392403# The 16-bit BS3Kit library for 16-bit PAE paged protected kernel+tss.
     
    416427bs3kit-pae32_16_INSTTYPE = none
    417428bs3kit-pae32_16_DEFS     = TMPL_MODE=BS3_MODE_PAE32_16
    418 bs3kit-pae32_16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES)
     429bs3kit-pae32_16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
     430        bs3-mode-TestDoModesByOneStub.asm \
    419431
    420432# The v8086 BS3Kit library for 32-bit PAE paged protected kernel+tss.
     
    431443bs3kit-lm16_INSTTYPE = none
    432444bs3kit-lm16_DEFS     = TMPL_MODE=BS3_MODE_LM16
    433 bs3kit-lm16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES)
     445bs3kit-lm16_SOURCES  = $(VBOX_BS3KIT_MODE_SOURCES) \
     446        bs3-mode-TestDoModesByOneStub.asm \
    434447
    435448# The 32-bit long mode BS3Kit library.
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxRestore.asm

    r60657 r60749  
    3535TMPL_BEGIN_TEXT
    3636BS3_EXTERN_CMN Bs3Syscall
     37BS3_EXTERN_CMN Bs3Panic
    3738TMPL_BEGIN_TEXT
    3839
     
    8081
    8182.do_syscall_restore_ctx:
    82 %if TMPL_BITS == 16
     83%if TMPL_BITS != 16
     84.do_syscall_restore_ctx_restore_ds:
     85        mov     cx, ds
     86        mov     xSI, [xBP + xCB*2]
     87        movzx   edx, word [xBP + xCB*3]
     88        mov     eax, BS3_SYSCALL_RESTORE_CTX
     89%else
    8390        mov     si, [bp + xCB + cbCurRetAddr]
    8491        mov     cx, [bp + xCB + cbCurRetAddr + 2]
    8592        mov     dx, [bp + xCB + cbCurRetAddr + sCB]
    8693        mov     ax, BS3_SYSCALL_RESTORE_CTX
    87 %else
    88         mov     cx, ds
    89         mov     xSI, [xBP + xCB*2]
    90         movzx   edx, word [xBP + xCB*3]
    91         mov     eax, BS3_SYSCALL_RESTORE_CTX
    9294%endif
    9395        call    Bs3Syscall
     96        call    Bs3Panic
     97
     98%if TMPL_BITS == 16
     99.do_syscall_restore_ctx_restore_ds:
     100        push    es
     101        pop     ds
     102        jmp     .do_syscall_restore_ctx
     103%endif
    94104
    95105        ;
     
    115125%endif
    116126
     127
     128%if TMPL_BITS != 64
     129        ; Restoring a 64-bit context is best done from 64-bit code.
     130        mov     al, [xBX + BS3REGCTX.bMode]
     131        test    al, BS3_MODE_CODE_64
     132        jnz     .do_syscall_restore_ctx_restore_ds
     133%endif
     134
    117135        ; The remainder must be done with interrupts disabled.
    118136        cli
     
    121139        ; Update g_bs3CurrentMode.
    122140        ;
     141%if TMPL_BITS == 64
    123142        mov     al, [xBX + BS3REGCTX.bMode]
     143%endif
    124144        and     al, BS3_MODE_CODE_MASK
    125145        mov     ah, [BS3_ONLY_16BIT(es:) BS3_DATA16_WRT(g_bBs3CurrentMode)]
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxSaveEx.asm

    r60657 r60749  
    7777%if TMPL_BITS != 64
    7878extern              _Bs3RegCtxSave_c64
     79extern              _Bs3SwitchTo%[TMPL_BITS]Bit_c64
    7980%endif
    8081
     
    103104        and     dl, BS3_MODE_CODE_MASK
    104105%if TMPL_BITS == 16
    105         push    dx                          ; xBP - xCB*1: save space for previous CPU mode (16-bit)
     106        push    dx                          ; bp - 2: previous CPU mode (16-bit)
    106107%endif
    107108
     
    286287
    287288 %if TMPL_BITS == 16
    288         cmp     byte [xBP - xCB*1], BS3_MODE_CODE_16
    289         jne     .code_32_back_to_v86
     289        cmp     byte [bp - 2], BS3_MODE_CODE_V86
     290        je      .code_32_back_to_v86
    290291        call    _Bs3SwitchTo16Bit_c32
    291292        BS3_SET_BITS TMPL_BITS
     
    328329        call    _Bs3RegCtxSave_c64          ; No BS3_CALL as rcx is already ready.
    329330
    330         call    _Bs3SwitchTo16Bit_c32
    331         BS3_SET_BITS 16
     331        call    _Bs3SwitchTo%[TMPL_BITS]Bit_c64
     332        BS3_SET_BITS TMPL_BITS
    332333        jmp     .return
    333334%endif
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo64Bit.asm

    r60527 r60749  
    7474        push    sAX
    7575 %if TMPL_BITS == 16
    76         push    dword .sixty_four_bit
     76        push    dword .sixty_four_bit wrt FLAT
    7777        o32 retf
    7878 %else
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TrapReInit.c

    r60739 r60749  
    11/* $Id$ */
    22/** @file
    3  * BS3Kit - Bs3TrapInit
     3 * BS3Kit - Bs3TrapReInit
    44 */
    55
     
    3232
    3333
    34 #undef Bs3TrapInit
    35 BS3_MODE_DEF(void, Bs3TrapInit,(void))
     34#undef Bs3TrapReInit
     35BS3_CMN_DEF(void, Bs3TrapReInit,(void))
    3636{
    37 #if BS3_MODE_IS_RM_SYS(TMPL_MODE)
    38     Bs3TrapRmV86Init();
    39 #elif BS3_MODE_IS_16BIT_SYS(TMPL_MODE)
    40     Bs3TrapRmV86Init();
    41     Bs3Trap16Init();
    42 #elif BS3_MODE_IS_32BIT_SYS(TMPL_MODE)
    43     Bs3TrapRmV86Init();
    44     Bs3Trap32Init();
    45 #elif BS3_MODE_IS_64BIT_SYS(TMPL_MODE)
    46     Bs3Trap64Init();
    47 #else
    48 # error "TMPL_MODE"
    49 #endif
     37    if (BS3_MODE_IS_RM_SYS(g_bBs3CurrentMode))
     38        Bs3TrapRmV86Init();
     39    else if (BS3_MODE_IS_16BIT_SYS(g_bBs3CurrentMode))
     40    {
     41        Bs3TrapRmV86Init();
     42        Bs3Trap16Init();
     43    }
     44    else if (BS3_MODE_IS_32BIT_SYS(g_bBs3CurrentMode))
     45    {
     46        Bs3TrapRmV86Init();
     47        Bs3Trap32Init();
     48    }
     49    else
     50    {
     51        BS3_ASSERT(BS3_MODE_IS_64BIT_SYS(g_bBs3CurrentMode));
     52        Bs3Trap64Init();
     53    }
    5054}
    5155
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-rm-InitAll.c

    r60728 r60749  
    3939BS3_DECL(void) Bs3InitAll_rm(void)
    4040{
    41     uint32_t volatile BS3_FAR *pcTicks = (uint32_t volatile BS3_FAR *)BS3_FP_MAKE(0x40, 0x6c);
    42     uint32_t                   cInitialTicks = *pcTicks;
    43     int                        i = 3;
     41    uint8_t volatile BS3_FAR  *pcTicksFlpyOff;
    4442
     43    /*
     44     * Detect CPU first as the memory init code will otherwise use 386
     45     * instrunctions and cause trouble on older CPUs.
     46     */
    4547    Bs3CpuDetect_rm_far();
    4648    Bs3InitMemory_rm_far();
    4749    Bs3InitGdt_rm_far();
    4850
    49     /* For for floppy to stop (a couple of ticks), then disable interrupts. */
    50     ASMIntEnable();
    51     while (i-- > 0)
     51    /*
     52     * Before we disable all interrupts, try convince the BIOS to stop the
     53     * floppy motor, as it is kind of disturbing when the floppy light remains
     54     * on for the whole testcase execution.
     55     */
     56    ASMIntDisable(); /* (probably already disabled, but no guarantees) */
     57    pcTicksFlpyOff = (uint8_t volatile BS3_FAR *)BS3_FP_MAKE(0x40, 0x40);
     58    if (*pcTicksFlpyOff)
    5259    {
     60        uint32_t volatile BS3_FAR *pcTicks = (uint32_t volatile BS3_FAR *)BS3_FP_MAKE(0x40, 0x6c);
     61        uint32_t cInitialTicks;
     62
     63        *pcTicksFlpyOff = 1;            /* speed up the countdown, don't want to wait for two seconds here. */
     64        cInitialTicks   = *pcTicks;
     65        ASMIntEnable();
     66
    5367        while (*pcTicks == cInitialTicks)
    5468            ASMHalt();
    55         *pcTicks = cInitialTicks;
    5669    }
    5770    ASMIntDisable();
    5871    Bs3PicMaskAll();
    5972
     73    /*
     74     * Initialize IDTs and such.
     75     */
    6076    if (g_uBs3CpuDetected & BS3CPU_F_LONG_MODE)
    6177        Bs3Trap64Init();
     
    6581        Bs3Trap16Init();
    6682    Bs3TrapRmV86Init();
     83
     84    /*
     85     * Perform a real-mode enter to make some final environment adjustments
     86     * (like installing our syscall).
     87     */
    6788    Bs3EnteredMode_rm();
    6889}
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-autostubs.kmk

    r60686 r60749  
    3636$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TestCheckRegCtxEx)
    3737$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3StrCpy)
     38$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3GetModeName)
    3839$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingAlias)
    3940$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingInitRootForLM)
     
    105106$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapDefaultHandler)
    106107$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapPrintFrame)
     108$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapReInit)
    107109$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapRmV86Init)
    108110$(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapRmV86InitEx)
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h

    r60686 r60749  
    3131#define Bs3A20EnableViaKbd BS3_CMN_MANGLER(Bs3A20EnableViaKbd)
    3232#define Bs3A20EnableViaPortA BS3_CMN_MANGLER(Bs3A20EnableViaPortA)
     33#define Bs3GetModeName BS3_CMN_MANGLER(Bs3GetModeName)
    3334#define Bs3KbdRead BS3_CMN_MANGLER(Bs3KbdRead)
    3435#define Bs3KbdWait BS3_CMN_MANGLER(Bs3KbdWait)
     
    131132#define Bs3TrapDefaultHandler BS3_CMN_MANGLER(Bs3TrapDefaultHandler)
    132133#define Bs3TrapPrintFrame BS3_CMN_MANGLER(Bs3TrapPrintFrame)
     134#define Bs3TrapReInit BS3_CMN_MANGLER(Bs3TrapReInit)
    133135#define Bs3TrapRmV86Init BS3_CMN_MANGLER(Bs3TrapRmV86Init)
    134136#define Bs3TrapRmV86InitEx BS3_CMN_MANGLER(Bs3TrapRmV86InitEx)
     
    145147# define Bs3CpuDetect BS3_MODE_MANGLER(Bs3CpuDetect)
    146148# define Bs3TestDoModes BS3_MODE_MANGLER(Bs3TestDoModes)
     149# define Bs3TestDoModesByOne BS3_MODE_MANGLER(Bs3TestDoModesByOne)
    147150# define Bs3TrapInit BS3_MODE_MANGLER(Bs3TrapInit)
    148151#endif /* !BS3_CMN_ONLY */
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h

    r60686 r60749  
    3131#undef Bs3A20EnableViaKbd
    3232#undef Bs3A20EnableViaPortA
     33#undef Bs3GetModeName
    3334#undef Bs3KbdRead
    3435#undef Bs3KbdWait
     
    131132#undef Bs3TrapDefaultHandler
    132133#undef Bs3TrapPrintFrame
     134#undef Bs3TrapReInit
    133135#undef Bs3TrapRmV86Init
    134136#undef Bs3TrapRmV86InitEx
     
    145147# undef Bs3CpuDetect
    146148# undef Bs3TestDoModes
     149# undef Bs3TestDoModesByOne
    147150# undef Bs3TrapInit
    148151#endif /* !BS3_CMN_ONLY */
  • trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h

    r60686 r60749  
    14421442#endif
    14431443
     1444
     1445/**
     1446 * Translate a mode into a string.
     1447 *
     1448 * @returns Pointer to read-only mode name string.
     1449 * @param   bMode       The mode value (BS3_MODE_XXX).
     1450 */
     1451BS3_CMN_PROTO_STUB(const char BS3_FAR *, Bs3GetModeName,(uint8_t bMode));
     1452
    14441453/**
    14451454 * Shutdown the system, never returns.
     
    24822491
    24832492/**
     2493 * Re-initializes the trap handling for the current mode.
     2494 *
     2495 * Useful after a test that messes with the IDT/IVT.
     2496 *
     2497 * @sa      Bs3TrapInit
     2498 */
     2499BS3_CMN_PROTO_STUB(void, Bs3TrapReInit,(void));
     2500
     2501/**
    24842502 * Initializes real mode and v8086 trap handling.
    24852503 *
     
    29442962    FNBS3TESTDOMODE   RT_CONCAT(a_BaseNm, _lm32); \
    29452963    FNBS3TESTDOMODE   RT_CONCAT(a_BaseNm, _lm64)
     2964
     2965
     2966/**
     2967 * One worker drives all modes.
     2968 *
     2969 * This is an alternative to BS3TESTMODEENTRY where one worker, typically
     2970 * 16-bit, does all the test driver work.  It's called repeatedly from all
     2971 * the modes being tested.
     2972 */
     2973typedef struct BS3TESTMODEBYONEENTRY
     2974{
     2975    const char * BS3_FAR    pszSubTest;
     2976    PFNBS3TESTDOMODE        pfnWorker;
     2977    uint32_t                u32Reserved;
     2978} BS3TESTMODEBYONEENTRY;
     2979/** Pointer to a mode-by-one sub-test entry. */
     2980typedef BS3TESTMODEBYONEENTRY const *PCBS3TESTMODEBYONEENTRY;
    29462981
    29472982
     
    31603195BS3_MODE_PROTO_NOSB(void, Bs3TestDoModes,(PCBS3TESTMODEENTRY paEntries, size_t cEntries));
    31613196
     3197/**
     3198 * Executes the array of tests in every possibly mode, unitifed driver.
     3199 *
     3200 * This requires much less code space than Bs3TestDoModes as there is only one
     3201 * instace of each sub-test driver code, instead of 3 (cmn) or 22 (per-mode)
     3202 * copies.
     3203 *
     3204 * @param   paEntries       The mode sub-test-by-one entries.
     3205 * @param   cEntries        The number of sub-test-by-one entries.
     3206 * @param   fFlags          Reserved for the future, MBZ.
     3207 */
     3208BS3_MODE_PROTO_NOSB(void, Bs3TestDoModesByOne,(PCBS3TESTMODEBYONEENTRY paEntries, size_t cEntries, uint32_t fFlags));
     3209
    31623210
    31633211/** @} */
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