Changeset 60749 in vbox for trunk/src/VBox/ValidationKit/bootsectors/bs3kit
- Timestamp:
- Apr 28, 2016 7:41:14 PM (9 years ago)
- svn:sync-xref-src-repo-rev:
- 106941
- 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 55 55 bs3-cmn-A20Disable.asm \ 56 56 bs3-cmn-A20Enable.asm \ 57 bs3-cmn-GetModeName.c \ 57 58 bs3-cmn-KbdRead.asm \ 58 59 bs3-cmn-KbdWait.asm \ … … 145 146 bs3-cmn-TestCheckRegCtxEx.c \ 146 147 bs3-cmn-TestPrintf.c \ 148 bs3-cmn-TrapReInit.c \ 147 149 bs3-cmn-TrapRmV86Init.c \ 148 150 bs3-cmn-TrapRmV86SetGate.c \ … … 161 163 bs3-cmn-UtilSetFullGdtr.asm \ 162 164 bs3-cmn-UtilSetFullIdtr.asm \ 165 bs3-cmn-TestDoModesByOneHlp.asm \ 163 166 ../../../Runtime/common/asm/ASMBitFirstClear.asm \ 164 167 ../../../Runtime/common/asm/ASMBitFirstSet.asm \ … … 281 284 bs3-mode-TrapSystemCallHandler.asm \ 282 285 bs3-mode-TestDoModes.c \ 286 bs3-mode-TestDoModesByOne.c \ 283 287 bs3-mode-TestDoModesHlp.asm \ 284 288 … … 290 294 bs3kit-rm_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 291 295 bs3-first-rm.asm \ 292 bs3-mode-CpuDetect.asm 296 bs3-mode-CpuDetect.asm \ 297 bs3-mode-TestDoModesByOneStub.asm \ 293 298 294 299 … … 300 305 bs3kit-pe16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 301 306 bs3-first-pe16.asm \ 307 bs3-mode-TestDoModesByOneStub.asm \ 302 308 # bs3-mode-CpuDetect.asm 303 309 … … 307 313 bs3kit-pe16_32_INSTTYPE = none 308 314 bs3kit-pe16_32_DEFS = TMPL_MODE=BS3_MODE_PE16_32 309 bs3kit-pe16_32_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 315 bs3kit-pe16_32_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 316 bs3-mode-TestDoModesByOneStub.asm \ 310 317 311 318 # The v86 BS3Kit library for 16-bit protected kernel+tss. … … 314 321 bs3kit-pe16_v86_INSTTYPE = none 315 322 bs3kit-pe16_v86_DEFS = TMPL_MODE=BS3_MODE_PE16_V86 316 bs3kit-pe16_v86_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 323 bs3kit-pe16_v86_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 324 bs3-mode-TestDoModesByOneStub.asm \ 317 325 318 326 # The 32-bit BS3Kit library for 32-bit protected kernel+tss. … … 328 336 bs3kit-pe32_16_INSTTYPE = none 329 337 bs3kit-pe32_16_DEFS = TMPL_MODE=BS3_MODE_PE32_16 330 bs3kit-pe32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 338 bs3kit-pe32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 339 bs3-mode-TestDoModesByOneStub.asm \ 331 340 332 341 # The v8086 BS3Kit library for 32-bit protected kernel+tss. … … 337 346 bs3kit-pev86_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 338 347 339 340 348 # The 16-bit BS3Kit library for 16-bit paged protected kernel+tss. 341 349 LIBRARIES += bs3kit-pp16 … … 344 352 bs3kit-pp16_DEFS = TMPL_MODE=BS3_MODE_PP16 345 353 bs3kit-pp16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 346 bs3-mode-CpuDetect.asm 354 bs3-mode-CpuDetect.asm \ 355 bs3-mode-TestDoModesByOneStub.asm \ 347 356 348 357 # The 32-bit BS3Kit library for 16-bit paged protected kernel+tss. … … 372 381 bs3kit-pp32_16_INSTTYPE = none 373 382 bs3kit-pp32_16_DEFS = TMPL_MODE=BS3_MODE_PP32_16 374 bs3kit-pp32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 383 bs3kit-pp32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 384 bs3-mode-TestDoModesByOneStub.asm \ 375 385 376 386 # The v8086 BS3Kit library for 32-bit paged protected kernel+tss. … … 388 398 bs3kit-pae16_DEFS = TMPL_MODE=BS3_MODE_PAE16 389 399 bs3kit-pae16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 390 bs3-mode-CpuDetect.asm 400 bs3-mode-CpuDetect.asm \ 401 bs3-mode-TestDoModesByOneStub.asm \ 391 402 392 403 # The 16-bit BS3Kit library for 16-bit PAE paged protected kernel+tss. … … 416 427 bs3kit-pae32_16_INSTTYPE = none 417 428 bs3kit-pae32_16_DEFS = TMPL_MODE=BS3_MODE_PAE32_16 418 bs3kit-pae32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 429 bs3kit-pae32_16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 430 bs3-mode-TestDoModesByOneStub.asm \ 419 431 420 432 # The v8086 BS3Kit library for 32-bit PAE paged protected kernel+tss. … … 431 443 bs3kit-lm16_INSTTYPE = none 432 444 bs3kit-lm16_DEFS = TMPL_MODE=BS3_MODE_LM16 433 bs3kit-lm16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) 445 bs3kit-lm16_SOURCES = $(VBOX_BS3KIT_MODE_SOURCES) \ 446 bs3-mode-TestDoModesByOneStub.asm \ 434 447 435 448 # The 32-bit long mode BS3Kit library. -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxRestore.asm
r60657 r60749 35 35 TMPL_BEGIN_TEXT 36 36 BS3_EXTERN_CMN Bs3Syscall 37 BS3_EXTERN_CMN Bs3Panic 37 38 TMPL_BEGIN_TEXT 38 39 … … 80 81 81 82 .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 83 90 mov si, [bp + xCB + cbCurRetAddr] 84 91 mov cx, [bp + xCB + cbCurRetAddr + 2] 85 92 mov dx, [bp + xCB + cbCurRetAddr + sCB] 86 93 mov ax, BS3_SYSCALL_RESTORE_CTX 87 %else88 mov cx, ds89 mov xSI, [xBP + xCB*2]90 movzx edx, word [xBP + xCB*3]91 mov eax, BS3_SYSCALL_RESTORE_CTX92 94 %endif 93 95 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 94 104 95 105 ; … … 115 125 %endif 116 126 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 117 135 ; The remainder must be done with interrupts disabled. 118 136 cli … … 121 139 ; Update g_bs3CurrentMode. 122 140 ; 141 %if TMPL_BITS == 64 123 142 mov al, [xBX + BS3REGCTX.bMode] 143 %endif 124 144 and al, BS3_MODE_CODE_MASK 125 145 mov ah, [BS3_ONLY_16BIT(es:) BS3_DATA16_WRT(g_bBs3CurrentMode)] -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-RegCtxSaveEx.asm
r60657 r60749 77 77 %if TMPL_BITS != 64 78 78 extern _Bs3RegCtxSave_c64 79 extern _Bs3SwitchTo%[TMPL_BITS]Bit_c64 79 80 %endif 80 81 … … 103 104 and dl, BS3_MODE_CODE_MASK 104 105 %if TMPL_BITS == 16 105 push dx ; xBP - xCB*1: save space forprevious CPU mode (16-bit)106 push dx ; bp - 2: previous CPU mode (16-bit) 106 107 %endif 107 108 … … 286 287 287 288 %if TMPL_BITS == 16 288 cmp byte [ xBP - xCB*1], BS3_MODE_CODE_16289 j ne.code_32_back_to_v86289 cmp byte [bp - 2], BS3_MODE_CODE_V86 290 je .code_32_back_to_v86 290 291 call _Bs3SwitchTo16Bit_c32 291 292 BS3_SET_BITS TMPL_BITS … … 328 329 call _Bs3RegCtxSave_c64 ; No BS3_CALL as rcx is already ready. 329 330 330 call _Bs3SwitchTo 16Bit_c32331 BS3_SET_BITS 16331 call _Bs3SwitchTo%[TMPL_BITS]Bit_c64 332 BS3_SET_BITS TMPL_BITS 332 333 jmp .return 333 334 %endif -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-SwitchTo64Bit.asm
r60527 r60749 74 74 push sAX 75 75 %if TMPL_BITS == 16 76 push dword .sixty_four_bit 76 push dword .sixty_four_bit wrt FLAT 77 77 o32 retf 78 78 %else -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-cmn-TrapReInit.c
r60739 r60749 1 1 /* $Id$ */ 2 2 /** @file 3 * BS3Kit - Bs3Trap Init3 * BS3Kit - Bs3TrapReInit 4 4 */ 5 5 … … 32 32 33 33 34 #undef Bs3Trap Init35 BS3_ MODE_DEF(void, Bs3TrapInit,(void))34 #undef Bs3TrapReInit 35 BS3_CMN_DEF(void, Bs3TrapReInit,(void)) 36 36 { 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 } 50 54 } 51 55 -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3-rm-InitAll.c
r60728 r60749 39 39 BS3_DECL(void) Bs3InitAll_rm(void) 40 40 { 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; 44 42 43 /* 44 * Detect CPU first as the memory init code will otherwise use 386 45 * instrunctions and cause trouble on older CPUs. 46 */ 45 47 Bs3CpuDetect_rm_far(); 46 48 Bs3InitMemory_rm_far(); 47 49 Bs3InitGdt_rm_far(); 48 50 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) 52 59 { 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 53 67 while (*pcTicks == cInitialTicks) 54 68 ASMHalt(); 55 *pcTicks = cInitialTicks;56 69 } 57 70 ASMIntDisable(); 58 71 Bs3PicMaskAll(); 59 72 73 /* 74 * Initialize IDTs and such. 75 */ 60 76 if (g_uBs3CpuDetected & BS3CPU_F_LONG_MODE) 61 77 Bs3Trap64Init(); … … 65 81 Bs3Trap16Init(); 66 82 Bs3TrapRmV86Init(); 83 84 /* 85 * Perform a real-mode enter to make some final environment adjustments 86 * (like installing our syscall). 87 */ 67 88 Bs3EnteredMode_rm(); 68 89 } -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-autostubs.kmk
r60686 r60749 36 36 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TestCheckRegCtxEx) 37 37 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3StrCpy) 38 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3GetModeName) 38 39 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingAlias) 39 40 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3PagingInitRootForLM) … … 105 106 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapDefaultHandler) 106 107 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapPrintFrame) 108 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapReInit) 107 109 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapRmV86Init) 108 110 $(call BS3KIT_FN_GEN_CMN_NEARSTUB,bs3kit-common-16,Bs3TrapRmV86InitEx) -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-define.h
r60686 r60749 31 31 #define Bs3A20EnableViaKbd BS3_CMN_MANGLER(Bs3A20EnableViaKbd) 32 32 #define Bs3A20EnableViaPortA BS3_CMN_MANGLER(Bs3A20EnableViaPortA) 33 #define Bs3GetModeName BS3_CMN_MANGLER(Bs3GetModeName) 33 34 #define Bs3KbdRead BS3_CMN_MANGLER(Bs3KbdRead) 34 35 #define Bs3KbdWait BS3_CMN_MANGLER(Bs3KbdWait) … … 131 132 #define Bs3TrapDefaultHandler BS3_CMN_MANGLER(Bs3TrapDefaultHandler) 132 133 #define Bs3TrapPrintFrame BS3_CMN_MANGLER(Bs3TrapPrintFrame) 134 #define Bs3TrapReInit BS3_CMN_MANGLER(Bs3TrapReInit) 133 135 #define Bs3TrapRmV86Init BS3_CMN_MANGLER(Bs3TrapRmV86Init) 134 136 #define Bs3TrapRmV86InitEx BS3_CMN_MANGLER(Bs3TrapRmV86InitEx) … … 145 147 # define Bs3CpuDetect BS3_MODE_MANGLER(Bs3CpuDetect) 146 148 # define Bs3TestDoModes BS3_MODE_MANGLER(Bs3TestDoModes) 149 # define Bs3TestDoModesByOne BS3_MODE_MANGLER(Bs3TestDoModesByOne) 147 150 # define Bs3TrapInit BS3_MODE_MANGLER(Bs3TrapInit) 148 151 #endif /* !BS3_CMN_ONLY */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit-mangling-code-undef.h
r60686 r60749 31 31 #undef Bs3A20EnableViaKbd 32 32 #undef Bs3A20EnableViaPortA 33 #undef Bs3GetModeName 33 34 #undef Bs3KbdRead 34 35 #undef Bs3KbdWait … … 131 132 #undef Bs3TrapDefaultHandler 132 133 #undef Bs3TrapPrintFrame 134 #undef Bs3TrapReInit 133 135 #undef Bs3TrapRmV86Init 134 136 #undef Bs3TrapRmV86InitEx … … 145 147 # undef Bs3CpuDetect 146 148 # undef Bs3TestDoModes 149 # undef Bs3TestDoModesByOne 147 150 # undef Bs3TrapInit 148 151 #endif /* !BS3_CMN_ONLY */ -
trunk/src/VBox/ValidationKit/bootsectors/bs3kit/bs3kit.h
r60686 r60749 1442 1442 #endif 1443 1443 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 */ 1451 BS3_CMN_PROTO_STUB(const char BS3_FAR *, Bs3GetModeName,(uint8_t bMode)); 1452 1444 1453 /** 1445 1454 * Shutdown the system, never returns. … … 2482 2491 2483 2492 /** 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 */ 2499 BS3_CMN_PROTO_STUB(void, Bs3TrapReInit,(void)); 2500 2501 /** 2484 2502 * Initializes real mode and v8086 trap handling. 2485 2503 * … … 2944 2962 FNBS3TESTDOMODE RT_CONCAT(a_BaseNm, _lm32); \ 2945 2963 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 */ 2973 typedef 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. */ 2980 typedef BS3TESTMODEBYONEENTRY const *PCBS3TESTMODEBYONEENTRY; 2946 2981 2947 2982 … … 3160 3195 BS3_MODE_PROTO_NOSB(void, Bs3TestDoModes,(PCBS3TESTMODEENTRY paEntries, size_t cEntries)); 3161 3196 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 */ 3208 BS3_MODE_PROTO_NOSB(void, Bs3TestDoModesByOne,(PCBS3TESTMODEBYONEENTRY paEntries, size_t cEntries, uint32_t fFlags)); 3209 3162 3210 3163 3211 /** @} */
Note:
See TracChangeset
for help on using the changeset viewer.