summaryrefslogtreecommitdiff
path: root/BraswellPlatformPkg/Common/Silicon/IntelSiliconBasic/CpuInit/MemoryAttribute.h
blob: b20546b8907be8f8ee8c6bf72114b17a2beb7903 (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
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