]> git.proxmox.com Git - mirror_edk2.git/blobdiff - UefiCpuPkg/ResetVector/Vtf0/Ia16/Real16ToFlat32.asm
UefiCpuPkg: Supporting S3 in 64bit PEI
[mirror_edk2.git] / UefiCpuPkg / ResetVector / Vtf0 / Ia16 / Real16ToFlat32.asm
index 0e79a3984b168fa435e4186e046eb5451a58dac2..f59fc6ead4ba2751011acd063c09065c40794860 100644 (file)
@@ -2,7 +2,7 @@
 ; @file\r
 ; Transition from 16 bit real mode into 32 bit flat protected mode\r
 ;\r
-; Copyright (c) 2008 - 2010, Intel Corporation. All rights reserved.<BR>\r
+; Copyright (c) 2008 - 2022, Intel Corporation. All rights reserved.<BR>\r
 ; SPDX-License-Identifier: BSD-2-Clause-Patent\r
 ;\r
 ;------------------------------------------------------------------------------\r
@@ -92,7 +92,7 @@ ALIGN   16
 \r
 GDT_BASE:\r
 ; null descriptor\r
-NULL_SEL            equ $-GDT_BASE\r
+NULL_SEL            equ $-GDT_BASE    ; Selector [0x0]\r
     DW      0            ; limit 15:0\r
     DW      0            ; base 15:0\r
     DB      0            ; base 23:16\r
@@ -100,42 +100,67 @@ NULL_SEL            equ $-GDT_BASE
     DB      0            ; limit 19:16, flags\r
     DB      0            ; base 31:24\r
 \r
+; Spare segment descriptor\r
+SPARE1_SEL          equ $-GDT_BASE    ; Selector [0x8]\r
+    DW      0            ; limit 15:0\r
+    DW      0            ; base 15:0\r
+    DB      0            ; base 23:16\r
+    DB      0            ; sys flag, dpl, type\r
+    DB      0            ; limit 19:16, flags\r
+    DB      0            ; base 31:24\r
+\r
+; linear code segment descriptor\r
+LINEAR_CODE_SEL     equ $-GDT_BASE    ; Selector [0x10]\r
+    DW      0xffff       ; limit 15:0\r
+    DW      0            ; base 15:0\r
+    DB      0            ; base 23:16\r
+    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE32_TYPE)           ; 09Bh\r
+    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(1)|CODE64_FLAG(0)|UPPER_LIMIT(0xf)  ; 0CFh\r
+    DB      0            ; base 31:24\r
+\r
 ; linear data segment descriptor\r
-LINEAR_SEL          equ $-GDT_BASE\r
+LINEAR_SEL          equ $-GDT_BASE    ; Selector [0x18]\r
     DW      0xffff       ; limit 15:0\r
     DW      0            ; base 15:0\r
     DB      0            ; base 23:16\r
-    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(DATA32_TYPE)\r
-    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(1)|CODE64_FLAG(0)|UPPER_LIMIT(0xf)\r
+    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(DATA32_TYPE)           ; 093h\r
+    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(1)|CODE64_FLAG(0)|UPPER_LIMIT(0xf)  ; 0CFh\r
     DB      0            ; base 31:24\r
 \r
-; linear code segment descriptor\r
-LINEAR_CODE_SEL     equ $-GDT_BASE\r
+; Spare segment descriptor\r
+SPARE2_SEL          equ $-GDT_BASE    ; Selector [0x20]\r
+    DW      0            ; limit 15:0\r
+    DW      0            ; base 15:0\r
+    DB      0            ; base 23:16\r
+    DB      0            ; sys flag, dpl, type\r
+    DB      0            ; limit 19:16, flags\r
+    DB      0            ; base 31:24\r
+\r
+; linear code (16-bit) segment descriptor\r
+LINEAR_CODE16_SEL   equ $-GDT_BASE    ; Selector [0x28]\r
     DW      0xffff       ; limit 15:0\r
     DW      0            ; base 15:0\r
     DB      0            ; base 23:16\r
-    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE32_TYPE)\r
-    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(1)|CODE64_FLAG(0)|UPPER_LIMIT(0xf)\r
+    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE32_TYPE)           ; 09Bh\r
+    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(0)|CODE64_FLAG(0)|UPPER_LIMIT(0xf)  ; 08Fh\r
     DB      0            ; base 31:24\r
 \r
-%ifdef ARCH_X64\r
-; linear code (64-bit) segment descriptor\r
-LINEAR_CODE64_SEL   equ $-GDT_BASE\r
+; linear data (16-bit) segment descriptor\r
+LINEAR_DATA16_SEL   equ $-GDT_BASE    ; Selector [0x30]\r
     DW      0xffff       ; limit 15:0\r
     DW      0            ; base 15:0\r
     DB      0            ; base 23:16\r
-    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE64_TYPE)\r
-    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(0)|CODE64_FLAG(1)|UPPER_LIMIT(0xf)\r
+    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(DATA32_TYPE)           ; 093h\r
+    DB      0\r
     DB      0            ; base 31:24\r
-%endif\r
 \r
-; linear code segment descriptor\r
-LINEAR_CODE16_SEL     equ $-GDT_BASE\r
+; linear code (64-bit) segment descriptor\r
+LINEAR_CODE64_SEL   equ $-GDT_BASE    ; Selector [0x38]\r
     DW      0xffff       ; limit 15:0\r
     DW      0            ; base 15:0\r
     DB      0            ; base 23:16\r
-    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE32_TYPE)\r
-    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(0)|CODE64_FLAG(0)|UPPER_LIMIT(0xf)\r
+    DB      PRESENT_FLAG(1)|DPL(0)|SYSTEM_FLAG(1)|DESC_TYPE(CODE64_TYPE)           ; 09Bh\r
+    DB      GRANULARITY_FLAG(1)|DEFAULT_SIZE32(0)|CODE64_FLAG(1)|UPPER_LIMIT(0xf)  ; 0AFh\r
     DB      0            ; base 31:24\r
 \r
 GDT_END:\r