]> git.proxmox.com Git - mirror_edk2.git/blobdiff - OvmfPkg/ResetVector/Ia16/16RealTo32Flat.asm
OVMF ResetVector: Modify interface with SEC module
[mirror_edk2.git] / OvmfPkg / ResetVector / Ia16 / 16RealTo32Flat.asm
index d030c0b52b5aab26287ff0f095f778db1e6cb3d2..47e3c6d9297abbb363982df90e559b3f16b90cb8 100644 (file)
@@ -1,6 +1,8 @@
 ;------------------------------------------------------------------------------\r
+; @file\r
+; Transition from 16 bit real mode into 32 bit flat protected mode\r
 ;\r
-; Copyright (c) 2008, Intel Corporation\r
+; Copyright (c) 2008 - 2009, Intel Corporation\r
 ; All rights reserved. This program and the accompanying materials\r
 ; are licensed and made available under the terms and conditions of the BSD License\r
 ; which accompanies this distribution.  The full text of the license may be found at\r
@@ -9,14 +11,6 @@
 ; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
 ; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
 ;\r
-; Module Name:\r
-;\r
-;   16RealTo32Flat.asm\r
-;\r
-; Abstract:\r
-;\r
-;   Transition from 16 bit real mode into 32 bit flat protected mode\r
-;\r
 ;------------------------------------------------------------------------------\r
 \r
 %define SEC_DEFAULT_CR0  0x40000023\r
 \r
 BITS    16\r
 \r
-to32BitFlat:\r
+;\r
+; Modified:  EAX, EBX\r
+;\r
+TransitionFromReal16To32BitFlat:\r
 \r
-    writeToSerialPort '1'\r
-    writeToSerialPort '6'\r
-    writeToSerialPort ' '\r
+    debugShowPostCode POSTCODE_16BIT_MODE\r
 \r
     cli\r
 \r
@@ -42,10 +37,6 @@ o32 lgdt    [bx]
     mov     eax, SEC_DEFAULT_CR0\r
     mov     cr0, eax\r
 \r
-;    mov     eax, cr0\r
-;    or      al, 1\r
-;    mov     cr0, eax\r
-\r
     jmp     LINEAR_CODE_SEL:dword ADDR_OF(jumpTo32BitAndLandHere)\r
 BITS    32\r
 jumpTo32BitAndLandHere:\r
@@ -53,18 +44,16 @@ jumpTo32BitAndLandHere:
     mov     eax, SEC_DEFAULT_CR4\r
     mov     cr4, eax\r
 \r
-    writeToSerialPort '3'\r
-    writeToSerialPort '2'\r
-    writeToSerialPort ' '\r
+    debugShowPostCode POSTCODE_32BIT_MODE\r
 \r
-    mov ax, LINEAR_SEL\r
-    mov ds, ax\r
-    mov es, ax\r
-    mov fs, ax\r
-    mov gs, ax\r
-    mov ss, ax\r
+    mov     ax, LINEAR_SEL\r
+    mov     ds, ax\r
+    mov     es, ax\r
+    mov     fs, ax\r
+    mov     gs, ax\r
+    mov     ss, ax\r
 \r
-    jmp     TransitionFrom16RealTo32FlatComplete\r
+    OneTimeCallRet TransitionFromReal16To32BitFlat\r
 \r
 ALIGN   2\r
 \r
@@ -77,75 +66,75 @@ ALIGN   16
 GDT_BASE:\r
 ; null descriptor\r
 NULL_SEL            equ $-GDT_BASE\r
-        dw 0            ; limit 15:0\r
-        dw 0            ; base 15:0\r
-        db 0            ; base 23:16\r
-        db 0            ; type\r
-        db 0            ; limit 19:16, flags\r
-        db 0            ; base 31:24\r
+    dw      0            ; limit 15:0\r
+    dw      0            ; base 15:0\r
+    db      0            ; base 23:16\r
+    db      0            ; type\r
+    db      0            ; limit 19:16, flags\r
+    db      0            ; base 31:24\r
 \r
 ; linear data segment descriptor\r
 LINEAR_SEL      equ $-GDT_BASE\r
-        dw 0FFFFh       ; limit 0xFFFFF\r
-        dw 0            ; base 0\r
-        db 0\r
-        db 092h         ; present, ring 0, data, expand-up, writable\r
-        db 0CFh                 ; page-granular, 32-bit\r
-        db 0\r
+    dw      0FFFFh       ; limit 0xFFFFF\r
+    dw      0            ; base 0\r
+    db      0\r
+    db      092h         ; present, ring 0, data, expand-up, writable\r
+    db      0CFh         ; page-granular, 32-bit\r
+    db      0\r
 \r
 ; linear code segment descriptor\r
 LINEAR_CODE_SEL equ $-GDT_BASE\r
-        dw 0FFFFh       ; limit 0xFFFFF\r
-        dw 0            ; base 0\r
-        db 0\r
-        db 09Ah         ; present, ring 0, data, expand-up, writable\r
-        db 0CFh                 ; page-granular, 32-bit\r
-        db 0\r
+    dw      0FFFFh       ; limit 0xFFFFF\r
+    dw      0            ; base 0\r
+    db      0\r
+    db      09Ah         ; present, ring 0, data, expand-up, writable\r
+    db      0CFh         ; page-granular, 32-bit\r
+    db      0\r
 \r
 ; system data segment descriptor\r
 SYS_DATA_SEL    equ $-GDT_BASE\r
-        dw 0FFFFh       ; limit 0xFFFFF\r
-        dw 0            ; base 0\r
-        db 0\r
-        db 092h         ; present, ring 0, data, expand-up, writable\r
-        db 0CFh                 ; page-granular, 32-bit\r
-        db 0\r
+    dw      0FFFFh       ; limit 0xFFFFF\r
+    dw      0            ; base 0\r
+    db      0\r
+    db      092h         ; present, ring 0, data, expand-up, writable\r
+    db      0CFh         ; page-granular, 32-bit\r
+    db      0\r
 \r
 ; system code segment descriptor\r
 SYS_CODE_SEL    equ $-GDT_BASE\r
-        dw 0FFFFh       ; limit 0xFFFFF\r
-        dw 0            ; base 0\r
-        db 0\r
-        db 09Ah         ; present, ring 0, data, expand-up, writable\r
-        db 0CFh                 ; page-granular, 32-bit\r
-        db 0\r
+    dw      0FFFFh       ; limit 0xFFFFF\r
+    dw      0            ; base 0\r
+    db      0\r
+    db      09Ah         ; present, ring 0, data, expand-up, writable\r
+    db      0CFh         ; page-granular, 32-bit\r
+    db      0\r
 \r
 ; spare segment descriptor\r
 LINEAR_CODE64_SEL  equ $-GDT_BASE\r
-    DW      -1                  ; LimitLow\r
-    DW      0                   ; BaseLow\r
-    DB      0                   ; BaseMid\r
+    DW      -1           ; LimitLow\r
+    DW      0            ; BaseLow\r
+    DB      0            ; BaseMid\r
     DB      9bh\r
-    DB      0afh                ; LimitHigh   (CS.L=1, CS.D=0)\r
-    DB      0                   ; BaseHigh\r
+    DB      0afh         ; LimitHigh   (CS.L=1, CS.D=0)\r
+    DB      0            ; BaseHigh\r
 \r
 ; spare segment descriptor\r
 SPARE4_SEL  equ $-GDT_BASE\r
-        dw 0            ; limit 0xFFFFF\r
-        dw 0            ; base 0\r
-        db 0\r
-        db 0            ; present, ring 0, data, expand-up, writable\r
-        db 0            ; page-granular, 32-bit\r
-        db 0\r
+    dw      0            ; limit 0xFFFFF\r
+    dw      0            ; base 0\r
+    db      0\r
+    db      0            ; present, ring 0, data, expand-up, writable\r
+    db      0            ; page-granular, 32-bit\r
+    db      0\r
 \r
 ; spare segment descriptor\r
 SPARE5_SEL  equ $-GDT_BASE\r
-        dw 0            ; limit 0xFFFFF\r
-        dw 0            ; base 0\r
-        db 0\r
-        db 0            ; present, ring 0, data, expand-up, writable\r
-        db 0            ; page-granular, 32-bit\r
-        db 0\r
+    dw      0            ; limit 0xFFFFF\r
+    dw      0            ; base 0\r
+    db      0\r
+    db      0            ; present, ring 0, data, expand-up, writable\r
+    db      0            ; page-granular, 32-bit\r
+    db      0\r
 \r
 GDT_END:\r
 \r