1. Add TCG MOR (Memory Overwrite request) definition from TCG Platform Reset Attack...
[efi/edk2/.git] / edk2 / MdePkg / Include / Uefi / UefiMultiPhase.h
1 /** @file\r
2   This includes some definitions introduced in UEFI that will be used in both PEI and DXE phases.\r
3 \r
4   Copyright (c) 2006 - 2009, Intel Corporation                                                         \r
5   All rights reserved. This program and the accompanying materials                          \r
6   are licensed and made available under the terms and conditions of the BSD License         \r
7   which accompanies this distribution.  The full text of the license may be found at        \r
8   http://opensource.org/licenses/bsd-license.php                                            \r
9 \r
10   THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     \r
11   WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             \r
12 \r
13 **/\r
14 \r
15 #ifndef __UEFI_MULTIPHASE_H__\r
16 #define __UEFI_MULTIPHASE_H__\r
17 \r
18 #include <Guid/WinCertificate.h>\r
19 ///\r
20 /// Enumeration of memory types introduced in UEFI.\r
21 /// \r
22 typedef enum {\r
23   ///\r
24   /// Not used.\r
25   ///\r
26   EfiReservedMemoryType,\r
27   ///\r
28   /// The code portions of a loaded application. \r
29   /// (Note that UEFI OS loaders are UEFI applications.)\r
30   ///\r
31   EfiLoaderCode,\r
32   ///\r
33   /// The data portions of a loaded application and the default data allocation\r
34   /// type used by an application to allocate pool memory.\r
35   ///\r
36   EfiLoaderData,\r
37   ///\r
38   /// The code portions of a loaded Boot Services Driver\r
39   ///\r
40   EfiBootServicesCode,\r
41   ///\r
42   /// The data portions of a loaded Boot Serves Driver, and the default data\r
43   /// allocation type used by a Boot Services Driver to allocate pool memory.\r
44   ///\r
45   EfiBootServicesData,\r
46   ///\r
47   /// The code portions of a loaded Runtime Services Driver.\r
48   ///\r
49   EfiRuntimeServicesCode,\r
50   ///\r
51   /// The data portions of a loaded Runtime Services Driver and the default\r
52   /// data allocation type used by a Runtime Services Driver to allocate pool memory.\r
53   ///\r
54   EfiRuntimeServicesData,\r
55   ///\r
56   /// Free (unallocated) memory.\r
57   ///\r
58   EfiConventionalMemory,\r
59   ///\r
60   /// Memory in which errors have been detected.\r
61   ///\r
62   EfiUnusableMemory,\r
63   ///\r
64   /// Memory that holds the ACPI tables.\r
65   ///\r
66   EfiACPIReclaimMemory,\r
67   ///\r
68   /// Address space reserved for use by the firmware.\r
69   ///\r
70   EfiACPIMemoryNVS,\r
71   ///\r
72   /// Used by system firmware to request that a memory-mapped IO region\r
73   /// be mapped by the OS to a virtual address so it can be accessed by EFI runtime services.\r
74   ///\r
75   EfiMemoryMappedIO,\r
76   ///\r
77   /// System memory-mapped IO region that is used to translate memory\r
78   /// cycles to IO cycles by the processor.\r
79   ///\r
80   EfiMemoryMappedIOPortSpace,\r
81   ///\r
82   /// Address space reserved by the firmware for code that is part of the processor.\r
83   ///\r
84   EfiPalCode,\r
85   EfiMaxMemoryType\r
86 } EFI_MEMORY_TYPE;\r
87 \r
88 ///\r
89 /// Data structure that precedes all of the standard EFI table types.\r
90 /// \r
91 typedef struct {\r
92   ///\r
93   /// A 64-bit signature that identifies the type of table that follows.\r
94   /// Unique signatures have been generated for the EFI System Table,\r
95   /// the EFI Boot Services Table, and the EFI Runtime Services Table.\r
96   ///\r
97   UINT64  Signature;\r
98   ///\r
99   /// The revision of the EFI Specification to which this table\r
100   /// conforms. The upper 16 bits of this field contain the major\r
101   /// revision value, and the lower 16 bits contain the minor revision\r
102   /// value. The minor revision values are limited to the range of 00..99.\r
103   ///\r
104   UINT32  Revision;\r
105   ///\r
106   /// The size, in bytes, of the entire table including the EFI_TABLE_HEADER.\r
107   ///\r
108   UINT32  HeaderSize;\r
109   ///\r
110   /// The 32-bit CRC for the entire table. This value is computed by\r
111   /// setting this field to 0, and computing the 32-bit CRC for HeaderSize bytes.\r
112   ///\r
113   UINT32  CRC32;\r
114   ///\r
115   /// Reserved field that must be set to 0.\r
116   ///\r
117   UINT32  Reserved;\r
118 } EFI_TABLE_HEADER;\r
119 \r
120 ///\r
121 /// Attributes of variable.\r
122 /// \r
123 #define EFI_VARIABLE_NON_VOLATILE                 0x00000001\r
124 #define EFI_VARIABLE_BOOTSERVICE_ACCESS           0x00000002\r
125 #define EFI_VARIABLE_RUNTIME_ACCESS               0x00000004\r
126 #define EFI_VARIABLE_HARDWARE_ERROR_RECORD        0x00000008\r
127 \r
128 ///\r
129 /// This attribute is identified by the mnemonic 'HR' \r
130 /// elsewhere in this specification.\r
131 /// \r
132 #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS   0x00000010\r
133 \r
134 ///   \r
135 /// AuthInfo is a WIN_CERTIFICATE using the wCertificateType\r
136 /// WIN_CERTIFICATE_UEFI_GUID and the CertType\r
137 /// EFI_CERT_TYPE_RSA2048_SHA256. If the attribute specifies\r
138 /// authenticated access, then the Data buffer should begin with an\r
139 /// authentication descriptor prior to the data payload and DataSize\r
140 /// should reflect the the data.and descriptor size. The caller\r
141 /// shall digest the Monotonic Count value and the associated data\r
142 /// for the variable update using the SHA-256 1-way hash algorithm.\r
143 /// The ensuing the 32-byte digest will be signed using the private\r
144 /// key associated w/ the public/private 2048-bit RSA key-pair. The\r
145 /// WIN_CERTIFICATE shall be used to describe the signature of the\r
146 /// Variable data *Data. In addition, the signature will also\r
147 /// include the MonotonicCount value to guard against replay attacks\r
148 ///  \r
149 typedef struct {\r
150   ///\r
151   /// Included in the signature of        \r
152   /// AuthInfo.Used to ensure freshness/no\r
153   /// replay. Incremented during each     \r
154   /// "Write" access.   \r
155   ///                  \r
156   UINT64                      MonotonicCount;\r
157   ///\r
158   /// Provides the authorization for the variable \r
159   /// access. It is a signature across the        \r
160   /// variable data and the  Monotonic Count      \r
161   /// value. Caller uses Private key that is      \r
162   /// associated with a public key that has been  \r
163   /// provisioned via the key exchange.           \r
164   ///\r
165   WIN_CERTIFICATE_UEFI_GUID   AuthInfo;\r
166 } EFI_VARIABLE_AUTHENTICATION;\r
167 \r
168 #endif\r
169 \r