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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
/** @file
The definition of Memory Attribute.
Copyright (c) 1999 - 2015, 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.
**/
#ifndef _EFI_MEMORY_ATTRIB_H
#define _EFI_MEMORY_ATTRIB_H
extern UINT32 mUsedMtrr;
/**
@todo add description
**/
typedef struct {
UINT32 Msr;
UINT32 BaseAddress;
UINT32 Length;
} EFI_FIXED_MTRR;
/**
@todo add description
**/
typedef struct {
UINT64 BaseAddress;
UINT64 Length;
UINT64 Type;
UINT32 Msr;
BOOLEAN Valid;
} EFI_VARIABLE_MTRR;
#define EFI_MEMORY_CACHETYPE_MASK (EFI_MEMORY_UC | EFI_MEMORY_WC | EFI_MEMORY_WT | EFI_MEMORY_WB | EFI_MEMORY_UCE)
EFI_STATUS
ProgramFixedMtrr (
IN UINT64 MemoryCacheType,
IN UINT64 *Base,
IN UINT64 *Length
);
VOID
PreMtrrChange (
VOID
);
VOID
PostMtrrChange (
VOID
);
EFI_STATUS
GetMemoryAttribute (
VOID
);
BOOLEAN
CheckMemoryAttributeOverlap (
IN EFI_PHYSICAL_ADDRESS Start,
IN EFI_PHYSICAL_ADDRESS End
);
EFI_STATUS
CombineMemoryAttribute (
IN UINT64 Attribute,
IN UINT64 *Base,
IN UINT64 *Length
);
EFI_STATUS
GetDirection (
IN UINT64 Input,
IN UINTN *MtrrNumber,
IN BOOLEAN *Direction
);
UINT64
Power2MaxMemory (
IN UINT64 MemoryLength
);
EFI_STATUS
InvariableMtrr (
IN UINTN MtrrNumber,
IN UINTN Index
);
EFI_STATUS
ProgramVariableMtrr (
IN UINTN MtrrNumber,
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN UINT64 MemoryCacheType
);
EFI_STATUS
CleanupVariableMtrr (
VOID
);
UINT64
GetMemorySpaceAttributeFromMtrrType (
IN UINT8 MtrrAttribute
);
EFI_STATUS
RefreshGcdMemoryAttributes (
VOID
);
EFI_STATUS
SearchGcdMemorySpaces (
IN EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap,
IN UINTN NumberOfDescriptors,
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
OUT UINTN *StartIndex,
OUT UINTN *EndIndex
);
EFI_STATUS
SetGcdMemorySpaceAttributes (
IN EFI_GCD_MEMORY_SPACE_DESCRIPTOR *MemorySpaceMap,
IN UINTN NumberOfDescriptors,
IN EFI_PHYSICAL_ADDRESS BaseAddress,
IN UINT64 Length,
IN UINT64 Attributes
);
#endif
|