]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdePkg/Library/BaseLib/x64/Thunk16.asm
Rename dirs
[mirror_edk2.git] / MdePkg / Library / BaseLib / x64 / Thunk16.asm
diff --git a/MdePkg/Library/BaseLib/x64/Thunk16.asm b/MdePkg/Library/BaseLib/x64/Thunk16.asm
deleted file mode 100644 (file)
index f3e8084..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-;------------------------------------------------------------------------------\r
-;\r
-; Copyright (c) 2006, 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
-; http://opensource.org/licenses/bsd-license.php\r
-;\r
-; 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
-;   Thunk.asm\r
-;\r
-; Abstract:\r
-;\r
-;   Real mode thunk\r
-;\r
-;------------------------------------------------------------------------------\r
-\r
-    .data\r
-\r
-NullSegSel      DQ      0\r
-_16CsSegSel     LABEL   QWORD\r
-                DW      -1\r
-                DW      0\r
-                DB      0\r
-                DB      9bh\r
-                DB      8fh             ; 16-bit segment\r
-                DB      0\r
-_16BitDsSel     LABEL   QWORD\r
-                DW      -1\r
-                DW      0\r
-                DB      0\r
-                DB      93h\r
-                DB      8fh             ; 16-bit segment\r
-                DB      0\r
-GdtEnd          LABEL   QWORD\r
-\r
-    .const\r
-\r
-_16Gdtr         LABEL   FWORD\r
-                DW      offset GdtEnd - offset NullSegSel - 1\r
-                DQ      offset NullSegSel\r
-\r
-_16Idtr         FWORD   (1 SHL 10) - 1\r
-\r
-    .code\r
-\r
-IA32_REGS   STRUC   4t\r
-_EDI        DD      ?\r
-_ESI        DD      ?\r
-_EBP        DD      ?\r
-_ESP        DD      ?\r
-_EBX        DD      ?\r
-_EDX        DD      ?\r
-_ECX        DD      ?\r
-_EAX        DD      ?\r
-_DS         DW      ?\r
-_ES         DW      ?\r
-_FS         DW      ?\r
-_GS         DW      ?\r
-_RFLAGS     DQ      ?\r
-_EIP        DD      ?\r
-_CS         DW      ?\r
-_SS         DW      ?\r
-IA32_REGS   ENDS\r
-\r
-InternalAsmThunk16  PROC    USES    rbp rbx rsi rdi r12 r13 r14 r15\r
-    mov     eax, ds\r
-    push    rax\r
-    mov     eax, es\r
-    push    rax\r
-    push    fs\r
-    push    gs\r
-    mov     rsi, rcx                    ; rsi <- RegSet\r
-    push    sizeof (IA32_REGS)\r
-    pop     rcx\r
-    movzx   r8, (IA32_REGS ptr [rsi])._SS\r
-    xor     rdi, rdi\r
-    mov     edi, (IA32_REGS ptr [rsi])._ESP\r
-    sub     rdi, rcx                    ; reserve space on realmode stack\r
-    push    rdi                         ; save stack offset\r
-    imul    rax, r8, 16\r
-    add     rdi, rax                    ; rdi <- linear address of 16-bit stack\r
-    rep     movsb                       ; copy RegSet\r
-    mov     rsi, r8                     ; si <- 16-bit stack segment\r
-    pop     rbx                         ; rbx <- 16-bit stack offset\r
-    mov     rdi, rdx                    ; rdi <- realmode patch\r
-    lea     eax, @BackToThunk           ; rax <- address to back from real mode\r
-    push    rax                         ; use in a far return\r
-    mov     eax, cs\r
-    mov     [rsp + 4], eax              ; save CS\r
-    lea     eax, @16Return              ; thus @Return must < 4GB\r
-    stosd                               ; set ret address offset\r
-    xor     eax, eax\r
-    stosw                               ; set ret CS base to 0\r
-    mov     eax, esp\r
-    stosd                               ; rsp must < 4GB\r
-    mov     eax, ss\r
-    stosd\r
-    mov     rax, cr0\r
-    mov     ecx, eax                    ; ecx <- CR0\r
-    and     ecx, 7ffffffeh              ; clear PE, PG bits\r
-    stosd\r
-    mov     rax, cr4\r
-    mov     ebp, eax\r
-    and     ebp, 300h                   ; clear all but PCE and OSFXSR bits\r
-    stosd\r
-    sidt    fword ptr [rsp + 70h]       ; use parameter space to save IDTR\r
-    sgdt    fword ptr [rdi]\r
-    lea     edi, _16Idtr\r
-    lea     eax, @16Start               ; rax <- seg:offset of @16Start\r
-    push    rax\r
-    mov     dword ptr [rsp + 4], 8\r
-    push    10h\r
-    pop     rax                         ; rax <- 10h as dataseg selector\r
-    lgdt    _16Gdtr\r
-    retf\r
-@16Start:                               ; 16-bit starts here\r
-    mov     ss, eax                     ; set SS to be a 16-bit segment\r
-    mov     cr0, rcx                    ; disable protected mode\r
-    mov     cr4, rbp\r
-    DB      66h\r
-    mov     ecx, 0c0000080h\r
-    rdmsr\r
-    and     ah, NOT 1                   ; clear LME\r
-    wrmsr\r
-    mov     ss, esi                     ; set up 16-bit stack\r
-    mov     sp, bx                      ; mov esp, ebx actually\r
-    lidt    fword ptr [edi]\r
-    DB      66h, 61h                    ; popad\r
-    DB      1fh                         ; pop ds\r
-    DB      7                           ; pop es\r
-    pop     fs\r
-    pop     gs\r
-    add     sp, 8                       ; skip _RFLAGS\r
-    DB      66h\r
-    retf                                ; transfer control to 16-bit code\r
-@16Return:\r
-    DB      66h\r
-    push    0                           ; high order 32 bits of rflags\r
-    pushf                               ; pushfd actually\r
-    push    gs\r
-    push    fs\r
-    DB      6                           ; push es\r
-    DB      1eh                         ; push ds\r
-    DB      66h, 60h                    ; pushad\r
-    DB      67h, 66h, 0c5h, 74h, 24h, 30h   ; lds esi, [esp + 12*4]\r
-    DB      66h\r
-    mov     eax, [esi + 12]\r
-    mov     cr4, rax                    ; restore CR4\r
-    DB      66h\r
-    lgdt    fword ptr [esi + 16]\r
-    DB      66h\r
-    mov     ecx, 0c0000080h\r
-    rdmsr\r
-    or      ah, 1                       ; set LME\r
-    wrmsr\r
-    DB      66h\r
-    mov     eax, [esi + 8]\r
-    mov     cr0, rax                    ; restore CR0\r
-    xor     ax, ax                      ; xor eax, eax actually\r
-    mov     eax, ss\r
-    mov     dword ptr (IA32_REGS ptr [esp])._SS, eax\r
-    shl     ax, 4                       ; shl eax, 4 actually\r
-    add     ax, sp                      ; add eax, esp actually\r
-    add     sp, sizeof (IA32_REGS)      ; add esp, sizeof (IA32_REGS)\r
-    DB      66h\r
-    mov     dword ptr (IA32_REGS ptr [esp - sizeof (IA32_REGS)])._ESP, esp\r
-    DB      66h\r
-    lss     esp, fword ptr [esi]        ; restore protected mode stack\r
-    DB      66h\r
-    retf                                ; go back to protected mode\r
-@BackToThunk:\r
-    lidt    fword ptr [rsp + 68h]       ; restore protected mode IDTR\r
-    shl     rax, 32\r
-    shr     rax, 32                     ; clear high order 32 bits of RAX\r
-    pop     gs\r
-    pop     fs\r
-    pop     rcx\r
-    mov     es, ecx\r
-    pop     rcx\r
-    mov     ds, ecx\r
-    ret\r
-InternalAsmThunk16  ENDP\r
-\r
-    END\r