]> git.proxmox.com Git - mirror_edk2.git/blame - UefiCpuPkg/PiSmmCpuDxeSmm/Ia32/SmmInit.asm
MdePkg/BaseLib: add PatchInstructionX86()
[mirror_edk2.git] / UefiCpuPkg / PiSmmCpuDxeSmm / Ia32 / SmmInit.asm
CommitLineData
7947da3c
MK
1;------------------------------------------------------------------------------ ;\r
2; Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
3; This program and the accompanying materials\r
4; are licensed and made available under the terms and conditions of the BSD License\r
5; which accompanies this distribution. The full text of the license may be found at\r
6; http://opensource.org/licenses/bsd-license.php.\r
7;\r
8; THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,\r
9; WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.\r
10;\r
11; Module Name:\r
12;\r
13; SmmInit.Asm\r
14;\r
15; Abstract:\r
16;\r
17; Functions for relocating SMBASE's for all processors\r
18;\r
19;-------------------------------------------------------------------------------\r
20\r
21 .686p\r
22 .xmm\r
23 .model flat,C\r
24\r
25SmmInitHandler PROTO C\r
26\r
27EXTERNDEF C gSmmCr0:DWORD\r
28EXTERNDEF C gSmmCr3:DWORD\r
29EXTERNDEF C gSmmCr4:DWORD\r
30EXTERNDEF C gcSmmInitTemplate:BYTE\r
31EXTERNDEF C gcSmmInitSize:WORD\r
32EXTERNDEF C gSmmJmpAddr:QWORD\r
33EXTERNDEF C mRebasedFlag:PTR BYTE\r
34EXTERNDEF C mSmmRelocationOriginalAddress:DWORD\r
35EXTERNDEF C gSmmInitStack:DWORD\r
36EXTERNDEF C gcSmiInitGdtr:FWORD\r
37\r
38PROTECT_MODE_CS EQU 08h\r
39PROTECT_MODE_DS EQU 20h\r
40\r
41 .code\r
42\r
43gcSmiInitGdtr LABEL FWORD\r
44 DW 0\r
45 DQ 0\r
46\r
47SmmStartup PROC\r
48 DB 66h, 0b8h\r
49gSmmCr3 DD ?\r
50 mov cr3, eax\r
51 DB 67h, 66h\r
52 lgdt fword ptr cs:[ebp + (offset gcSmiInitGdtr - SmmStartup)]\r
53 DB 66h, 0b8h\r
54gSmmCr4 DD ?\r
55 mov cr4, eax\r
56 DB 66h, 0b8h\r
57gSmmCr0 DD ?\r
58 DB 0bfh, PROTECT_MODE_DS, 0 ; mov di, PROTECT_MODE_DS\r
59 mov cr0, eax\r
60 DB 66h, 0eah ; jmp far [ptr48]\r
61gSmmJmpAddr LABEL QWORD\r
62 DD @32bit\r
63 DW PROTECT_MODE_CS\r
64@32bit:\r
65 mov ds, edi\r
66 mov es, edi\r
67 mov fs, edi\r
68 mov gs, edi\r
69 mov ss, edi\r
70 DB 0bch ; mov esp, imm32\r
71gSmmInitStack DD ?\r
72 call SmmInitHandler\r
73 rsm\r
74SmmStartup ENDP\r
75\r
76gcSmmInitTemplate LABEL BYTE\r
77\r
78_SmmInitTemplate PROC\r
79 DB 66h\r
80 mov ebp, SmmStartup\r
81 DB 66h, 81h, 0edh, 00h, 00h, 03h, 00 ; sub ebp, 30000h\r
82 jmp bp ; jmp ebp actually\r
83_SmmInitTemplate ENDP\r
84\r
85gcSmmInitSize DW $ - gcSmmInitTemplate\r
86\r
87SmmRelocationSemaphoreComplete PROC\r
88 push eax\r
89 mov eax, mRebasedFlag\r
90 mov byte ptr [eax], 1\r
91 pop eax\r
92 jmp [mSmmRelocationOriginalAddress]\r
93SmmRelocationSemaphoreComplete ENDP\r
94 END\r