summaryrefslogtreecommitdiff
path: root/IntelFrameworkModulePkg/Csm/LegacyBiosDxe/Ipf/IpfThunk.i
blob: 441bb25e3d3347b3e0411b60918d21f75af3d8e8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
//// @file
//
// Copyright (c) 2006, Intel Corporation. All rights reserved.<BR>
//
// This program and the accompanying materials
// are licensed and made available under the terms and conditions
// of the BSD License which accompanies this distribution.  The
// full text of the license may be found at
// http://opensource.org/licenses/bsd-license.php
//
// THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
//
////

#define NUM_REAL_GDT_ENTRIES						3
#define LOW_STACK_SIZE								(8*1024)            // 8k?

//
// Low memory Thunk Structure
//
#define		Code									0
#define		LowReverseThunkStart					Code + 4096
#define		GdtDesc									LowReverseThunkStart + 4
#define		IdtDesc					 				GdtDesc + 6
#define		FlatSs					 				IdtDesc + 6
#define		FlatEsp					 				FlatSs + 4
#define		LowCodeSelector			 				FlatEsp + 4
#define		LowDataSelector			 				LowCodeSelector + 4
#define		LowStack			 					LowDataSelector + 4
#define		RealModeIdtDesc			 				LowStack + 4
#define		RealModeGdt								RealModeIdtDesc + 6
#define		RealModeGdtDesc							RealModeGdt + (8 * NUM_REAL_GDT_ENTRIES)
#define		RevRealDs								RealModeGdtDesc + 6
#define		RevRealSs								RevRealDs + 2
#define		RevRealEsp								RevRealSs + 2
#define		RevRealIdtDesc							RevRealEsp + 4
#define		RevFlatDataSelector						RevRealIdtDesc + 6
#define		RevFlatStack							RevFlatDataSelector + 2
#define		Stack									RevFlatStack + 4
#define		RevThunkStack							Stack + LOW_STACK_SIZE

#define		EfiToLegacy16InitTable					RevThunkStack + LOW_STACK_SIZE
#define		InitTableBiosLessThan1MB				EfiToLegacy16InitTable
#define		InitTableHiPmmMemory					InitTableBiosLessThan1MB + 4
#define		InitTablePmmMemorySizeInBytes			InitTableHiPmmMemory + 4
#define		InitTableReverseThunkCallSegment		InitTablePmmMemorySizeInBytes + 4
#define		InitTableReverseThunkCallOffset			InitTableReverseThunkCallSegment + 2
#define		InitTableNumberE820Entries				InitTableReverseThunkCallOffset + 2
#define		InitTableOsMemoryAbove1Mb				InitTableNumberE820Entries + 4
#define		InitTableThunkStart						InitTableOsMemoryAbove1Mb + 4
#define		InitTableThunkSizeInBytes				InitTableThunkStart + 4
#define		InitTable16InitTableEnd					InitTableThunkSizeInBytes + 4

#define		EfiToLegacy16BootTable					InitTable16InitTableEnd
#define		BootTableBiosLessThan1MB				EfiToLegacy16BootTable
#define		BootTableHiPmmMemory					BootTableBiosLessThan1MB + 4
#define		BootTablePmmMemorySizeInBytes			BootTableHiPmmMemory + 4
#define		BootTableReverseThunkCallSegment		BootTablePmmMemorySizeInBytes + 4
#define		BootTableReverseThunkCallOffset			BootTableReverseThunkCallSegment + 2
#define		BootTableNumberE820Entries				BootTableReverseThunkCallOffset + 2
#define		BootTableOsMemoryAbove1Mb				BootTableNumberE820Entries + 4
#define		BootTableThunkStart						BootTableOsMemoryAbove1Mb + 4
#define		BootTableThunkSizeInBytes				BootTableThunkStart + 4
#define		EfiToLegacy16BootTableEnd				BootTableThunkSizeInBytes + 4

#define		InterruptRedirectionCode				EfiToLegacy16BootTableEnd
#define		PciHandler								InterruptRedirectionCode + 32


//
// Register Sets (16 Bit)
//

#define		AX		0
#define		BX		2
#define		CX		4
#define		DX		6
#define		SI		8
#define		DI		10
#define		Flags	12
#define		ES		14
#define		CS		16
#define		SS		18
#define		DS		20
#define		BP		22