]>
Commit | Line | Data |
---|---|---|
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 | |
25 | SmmInitHandler PROTO C\r | |
26 | \r | |
27 | EXTERNDEF C gSmmCr0:DWORD\r | |
28 | EXTERNDEF C gSmmCr3:DWORD\r | |
29 | EXTERNDEF C gSmmCr4:DWORD\r | |
30 | EXTERNDEF C gcSmmInitTemplate:BYTE\r | |
31 | EXTERNDEF C gcSmmInitSize:WORD\r | |
32 | EXTERNDEF C gSmmJmpAddr:QWORD\r | |
33 | EXTERNDEF C mRebasedFlag:PTR BYTE\r | |
34 | EXTERNDEF C mSmmRelocationOriginalAddress:DWORD\r | |
35 | EXTERNDEF C gSmmInitStack:DWORD\r | |
36 | EXTERNDEF C gcSmiInitGdtr:FWORD\r | |
37 | \r | |
38 | PROTECT_MODE_CS EQU 08h\r | |
39 | PROTECT_MODE_DS EQU 20h\r | |
40 | \r | |
41 | .code\r | |
42 | \r | |
43 | gcSmiInitGdtr LABEL FWORD\r | |
44 | DW 0\r | |
45 | DQ 0\r | |
46 | \r | |
47 | SmmStartup PROC\r | |
48 | DB 66h, 0b8h\r | |
49 | gSmmCr3 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 | |
54 | gSmmCr4 DD ?\r | |
55 | mov cr4, eax\r | |
56 | DB 66h, 0b8h\r | |
57 | gSmmCr0 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 | |
61 | gSmmJmpAddr 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 | |
71 | gSmmInitStack DD ?\r | |
72 | call SmmInitHandler\r | |
73 | rsm\r | |
74 | SmmStartup ENDP\r | |
75 | \r | |
76 | gcSmmInitTemplate 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 | |
85 | gcSmmInitSize DW $ - gcSmmInitTemplate\r | |
86 | \r | |
87 | SmmRelocationSemaphoreComplete 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 | |
93 | SmmRelocationSemaphoreComplete ENDP\r | |
94 | END\r |