; @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
\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
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