From 141815f3c71f5a3d21a4e34aa1386d28fe63923c Mon Sep 17 00:00:00 2001 From: jljusten Date: Mon, 4 Jan 2010 16:18:09 +0000 Subject: [PATCH] OVMF VTF0 Reset Vector: Cleanup Global Descriptor Table (GDT) git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@9676 6f19259b-4bc3-4df7-8a09-765794883524 --- .../Bin/ResetVector.ia32.port80.raw | Bin 548 -> 500 bytes OvmfPkg/ResetVector/Bin/ResetVector.ia32.raw | Bin 532 -> 484 bytes .../Bin/ResetVector.ia32.serial.raw | Bin 932 -> 884 bytes .../Bin/ResetVector.x64.port80.raw | Bin 28676 -> 28676 bytes OvmfPkg/ResetVector/Bin/ResetVector.x64.raw | Bin 28676 -> 28676 bytes .../Bin/ResetVector.x64.serial.raw | Bin 28676 -> 28676 bytes OvmfPkg/ResetVector/Ia16/16RealTo32Flat.asm | 123 +++++++++--------- 7 files changed, 58 insertions(+), 65 deletions(-) diff --git a/OvmfPkg/ResetVector/Bin/ResetVector.ia32.port80.raw b/OvmfPkg/ResetVector/Bin/ResetVector.ia32.port80.raw index ad5f156b972b931cafc11047324764c98ce08d95..c071f1afaf8ca65796a93ea1feecabf486f188e8 100644 GIT binary patch delta 153 zcmZ3&@`ZUq5@X`TftWy4`@iU62?NDZ5aNt)ukoL;u|Ns923_Bdy7#R4K z9&9jr){wS?gQ4$6-+{gdeJ}bhyi8_bV3=UfP%ychQL*Cxe;{x2c?K{&8%D1O3ZjDj zP64mE_d5o>W=rcl@{*b1<@f(DWB$Js{rCU>%OW7r`QZPv2}t1eWe5jkN?3>+13%~M IJxJ0M02(7#y8r+H diff --git a/OvmfPkg/ResetVector/Bin/ResetVector.ia32.raw b/OvmfPkg/ResetVector/Bin/ResetVector.ia32.raw index 5761a75af6c3d4ab52182a74dea5a139791b1405..97e639ab7005626950c3519df2186788b6de42e1 100644 GIT binary patch delta 126 zcmbQj@`QOp6l3JX=p?4!3={X)3HAI><7X64+o8vr5B@)!00ggZgUAUJ TfO;9iLfjbmIbR=vh(JgH6YV;f delta 174 zcmaFDJcVUK6l3GW=p-g(#)Yck!vuSV zg2}~519_9rGl1#YFnT>u5Eblq3V6-E-!b4dTUzIlm&^<=zyE(3^Z%vlzyJSV gRso652mhZC&^>ej delta 178 zcmeyuwuF6xETij0x$BIT6TdxToIUv_<94CA|7rY;;%PgS85kV+l@6r6VxGK+DTY0p zfq}uEp<^9*2mHjG{m6hsC4odRC-?RN}#&6(DDkGd@Q0oR}iNxsx0O|Mt>2?3<_5J_<=~Djx|LHB0#&149{yzu+ delta 145 zcmZp9z}WJDal@3{$y;*c7*9?X&dXv{&on_6!M=i}Up+Ps|rK0&-Eney4!f n-1{8^UbCfj9(l>k@bdfrm!bb(Uj6(3|4XBPK!SJjv3xrK0o^^1 diff --git a/OvmfPkg/ResetVector/Bin/ResetVector.x64.raw b/OvmfPkg/ResetVector/Bin/ResetVector.x64.raw index b93599e17461a24f9ed583dfc72123de23c21604..4b98137b1dfa6752d00b826ef32c8a89941b9e28 100644 GIT binary patch delta 147 zcmV;E0Brw+-~oi-0kE`flOSLqleBGC0g;mnZejs5lWuOJM>7Ba{}=%2jsO4v`nv$| zj@!F%|7H&X7iPF4002M_BEV+qRsaA05CFJ91^@sLBH(7Y2mp@Qj=+xKj_8ii=|%tm z03QH=lUHvlC7Z7Rzd}&!3%@~7>jq|t#OVV7>G%KXf&b|h{{R2!YX1NK={=LiZ$6>J BMcV)X delta 160 zcmZp9z}WJDal@9}$yaj27&lJV&P!qpp4^wW$X)3F|Nj~cFV`_JF#Ouh@S*Sa?tuSk z{EXshJCqq19Qc(Eq`fi)DiL7V;lRegz_0WmZ3hQK-;KTleGmFx^j&zF2GnTJkTAJC zUu*Kjd|@LX7X|Eh3V6-E-!b4dTUzIlm&^<=zyE)k`2XeCzyJTg^!f)RWG5fXw*vrM C)J8x6 diff --git a/OvmfPkg/ResetVector/Bin/ResetVector.x64.serial.raw b/OvmfPkg/ResetVector/Bin/ResetVector.x64.serial.raw index b7726e3a87815ba0e51601698b19a965f98dcd6f..dfbb4f46d3ba9124e2dbe04646fa27263ed23b5b 100644 GIT binary patch delta 134 zcmV;10D1p}-~oi-0kGt2lOSLqljLg|0hN>fYu5qElh$nF0_y>jx^1Baeg6Od7?WUb zLIDPoqi#YIbpK`#0T*VtBLDzE4KOl%_-j`Fw#OYA{=>q`i^#ADz|LI-)|NrSS{r~^zg_Fr|I~0aM`~Uy| delta 147 zcmZp9z}WJDal@1B$t*dNj9VwmccIr&@8BPMR9$+vPBvc~@V|6gNrL!J|(+T_D| zPQoGo)A$+1({?B`FgWll9Y}li^)J diff --git a/OvmfPkg/ResetVector/Ia16/16RealTo32Flat.asm b/OvmfPkg/ResetVector/Ia16/16RealTo32Flat.asm index d4416ce85e..adf049cf77 100644 --- a/OvmfPkg/ResetVector/Ia16/16RealTo32Flat.asm +++ b/OvmfPkg/ResetVector/Ia16/16RealTo32Flat.asm @@ -63,78 +63,71 @@ gdtr: ALIGN 16 +; +; Macros for GDT entries +; + +%define PRESENT_FLAG(p) (p << 7) +%define DPL(dpl) (dpl << 5) +%define SYSTEM_FLAG(s) (s << 4) +%define DESC_TYPE(t) (t) + +; Type: data, expand-up, writable, accessed +%define DATA32_TYPE 3 + +; Type: execute, readable, expand-up, accessed +%define CODE32_TYPE 0xb + +; Type: execute, readable, expand-up, accessed +%define CODE64_TYPE 0xb + +%define GRANULARITY_FLAG(g) (g << 7) +%define DEFAULT_SIZE32(d) (d << 6) +%define CODE64_FLAG(l) (l << 5) +%define UPPER_LIMIT(l) (l) + +; +; The Global Descriptor Table (GDT) +; + GDT_BASE: ; null descriptor NULL_SEL equ $-GDT_BASE - dw 0 ; limit 15:0 - dw 0 ; base 15:0 - db 0 ; base 23:16 - db 0 ; type - db 0 ; limit 19:16, flags - db 0 ; base 31:24 + DW 0 ; limit 15:0 + DW 0 ; base 15:0 + DB 0 ; base 23:16 + DB 0 ; sys flag, dpl, type + DB 0 ; limit 19:16, flags + DB 0 ; base 31:24 ; linear data segment descriptor -LINEAR_SEL equ $-GDT_BASE - dw 0FFFFh ; limit 0xFFFFF - dw 0 ; base 0 - db 0 - db 093h ; present, ring 0, data, expand-up, writable, accessed - db 0CFh ; page-granular, 32-bit - db 0 +LINEAR_SEL equ $-GDT_BASE + DW 0xffff ; limit 15:0 + DW 0 ; base 15:0 + DB 0 ; base 23:16 + DB PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(DATA32_TYPE) + DB GRANULARITY_FLAG(1)|DEFAULT_SIZE32(1)|CODE64_FLAG(0)|UPPER_LIMIT(0xf) + DB 0 ; base 31:24 ; linear code segment descriptor -LINEAR_CODE_SEL equ $-GDT_BASE - dw 0FFFFh ; limit 0xFFFFF - dw 0 ; base 0 - db 0 - db 09Bh ; present, ring 0, data, expand-up, writable, accessed - db 0CFh ; page-granular, 32-bit - db 0 - -; system data segment descriptor -SYS_DATA_SEL equ $-GDT_BASE - dw 0FFFFh ; limit 0xFFFFF - dw 0 ; base 0 - db 0 - db 093h ; present, ring 0, data, expand-up, writable, accessed - db 0CFh ; page-granular, 32-bit - db 0 - -; system code segment descriptor -SYS_CODE_SEL equ $-GDT_BASE - dw 0FFFFh ; limit 0xFFFFF - dw 0 ; base 0 - db 0 - db 09Bh ; present, ring 0, data, expand-up, writable, accessed - db 0CFh ; page-granular, 32-bit - db 0 - -; spare segment descriptor -LINEAR_CODE64_SEL equ $-GDT_BASE - DW -1 ; LimitLow - DW 0 ; BaseLow - DB 0 ; BaseMid - DB 9bh - DB 0afh ; LimitHigh (CS.L=1, CS.D=0) - DB 0 ; BaseHigh - -; spare segment descriptor -SPARE4_SEL equ $-GDT_BASE - dw 0 ; limit 0xFFFFF - dw 0 ; base 0 - db 0 - db 0 ; present, ring 0, data, expand-up, writable - db 0 ; page-granular, 32-bit - db 0 - -; spare segment descriptor -SPARE5_SEL equ $-GDT_BASE - dw 0 ; limit 0xFFFFF - dw 0 ; base 0 - db 0 - db 0 ; present, ring 0, data, expand-up, writable - db 0 ; page-granular, 32-bit - db 0 +LINEAR_CODE_SEL equ $-GDT_BASE + DW 0xffff ; limit 15:0 + DW 0 ; base 15:0 + DB 0 ; base 23:16 + DB PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE32_TYPE) + DB GRANULARITY_FLAG(1)|DEFAULT_SIZE32(1)|CODE64_FLAG(0)|UPPER_LIMIT(0xf) + DB 0 ; base 31:24 + +%ifdef ARCH_X64 +; linear code (64-bit) segment descriptor +LINEAR_CODE64_SEL equ $-GDT_BASE + DW 0xffff ; limit 15:0 + DW 0 ; base 15:0 + DB 0 ; base 23:16 + DB PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE64_TYPE) + DB GRANULARITY_FLAG(1)|DEFAULT_SIZE32(0)|CODE64_FLAG(1)|UPPER_LIMIT(0xf) + DB 0 ; base 31:24 +%endif GDT_END: -- 2.39.2