The GCD services are used to manage the memory and I/O regions that\r
are accessible to the CPU that is executing the DXE core.\r
\r
-Copyright (c) 2006 - 2014, Intel Corporation. All rights reserved.<BR>\r
+Copyright (c) 2006 - 2015, Intel Corporation. All rights reserved.<BR>\r
This program and the accompanying materials\r
are licensed and made available under the terms and conditions of the BSD License\r
which accompanies this distribution. The full text of the license may be found at\r
EFI_RESOURCE_ATTRIBUTE_READ_PROTECTED | \\r
EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTED | \\r
EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED | \\r
+ EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTED | \\r
EFI_RESOURCE_ATTRIBUTE_16_BIT_IO | \\r
EFI_RESOURCE_ATTRIBUTE_32_BIT_IO | \\r
- EFI_RESOURCE_ATTRIBUTE_64_BIT_IO )\r
+ EFI_RESOURCE_ATTRIBUTE_64_BIT_IO | \\r
+ EFI_RESOURCE_ATTRIBUTE_PERSISTENT )\r
\r
#define TESTED_MEMORY_ATTRIBUTES (EFI_RESOURCE_ATTRIBUTE_PRESENT | \\r
EFI_RESOURCE_ATTRIBUTE_INITIALIZED | \\r
{ EFI_RESOURCE_ATTRIBUTE_READ_PROTECTABLE, EFI_MEMORY_RP, TRUE },\r
{ EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE, EFI_MEMORY_WP, TRUE },\r
{ EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE, EFI_MEMORY_XP, TRUE },\r
+ { EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTABLE, EFI_MEMORY_RO, TRUE },\r
{ EFI_RESOURCE_ATTRIBUTE_PRESENT, EFI_MEMORY_PRESENT, FALSE },\r
{ EFI_RESOURCE_ATTRIBUTE_INITIALIZED, EFI_MEMORY_INITIALIZED, FALSE },\r
{ EFI_RESOURCE_ATTRIBUTE_TESTED, EFI_MEMORY_TESTED, FALSE },\r
+ { EFI_RESOURCE_ATTRIBUTE_PERSISTABLE, EFI_MEMORY_NV, TRUE },\r
{ 0, 0, FALSE }\r
};\r
\r
"Reserved ", // EfiGcdMemoryTypeReserved\r
"SystemMem", // EfiGcdMemoryTypeSystemMemory\r
"MMIO ", // EfiGcdMemoryTypeMemoryMappedIo\r
+ "PersistentMem",// EfiGcdMemoryTypePersistentMemory\r
"Unknown " // EfiGcdMemoryTypeMaximum\r
};\r
\r
((Attributes & EFI_RESOURCE_ATTRIBUTE_WRITE_PROTECTABLE) != 0));\r
ASSERT (((Attributes & EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTED) == 0) ||\r
((Attributes & EFI_RESOURCE_ATTRIBUTE_EXECUTION_PROTECTABLE) != 0));\r
+ ASSERT (((Attributes & EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTED) == 0) ||\r
+ ((Attributes & EFI_RESOURCE_ATTRIBUTE_READ_ONLY_PROTECTABLE) != 0));\r
+ ASSERT (((Attributes & EFI_RESOURCE_ATTRIBUTE_PERSISTENT) == 0) ||\r
+ ((Attributes & EFI_RESOURCE_ATTRIBUTE_PERSISTABLE) != 0));\r
}\r
\r
/**\r
goto Done;\r
}\r
break;\r
- //
- // Set capabilities operation
- //
- case GCD_SET_CAPABILITIES_MEMORY_OPERATION:
- if ((BaseAddress & EFI_PAGE_MASK) != 0 || (Length & EFI_PAGE_MASK) != 0) {
- Status = EFI_INVALID_PARAMETER;
-
- goto Done;
+ //\r
+ // Set capabilities operation\r
+ //\r
+ case GCD_SET_CAPABILITIES_MEMORY_OPERATION:\r
+ if ((BaseAddress & EFI_PAGE_MASK) != 0 || (Length & EFI_PAGE_MASK) != 0) {\r
+ Status = EFI_INVALID_PARAMETER;\r
+\r
+ goto Done;\r
}\r
- //
+ //\r
// Current attributes must still be supported with new capabilities\r
- //
- if ((Capabilities & Entry->Attributes) != Entry->Attributes) {
- Status = EFI_UNSUPPORTED;
- goto Done;
- }
+ //\r
+ if ((Capabilities & Entry->Attributes) != Entry->Attributes) {\r
+ Status = EFI_UNSUPPORTED;\r
+ goto Done;\r
+ }\r
break;\r
}\r
Link = Link->ForwardLink;\r
//\r
// Set capabilities operation\r
//\r
- case GCD_SET_CAPABILITIES_MEMORY_OPERATION:
- Entry->Capabilities = Capabilities;
+ case GCD_SET_CAPABILITIES_MEMORY_OPERATION:\r
+ Entry->Capabilities = Capabilities;\r
break;\r
}\r
Link = Link->ForwardLink;\r
IN UINT64 Capabilities\r
)\r
{\r
- EFI_STATUS Status;
-
+ EFI_STATUS Status;\r
+\r
DEBUG ((DEBUG_GCD, "GCD:CoreSetMemorySpaceCapabilities(Base=%016lx,Length=%016lx)\n", BaseAddress, Length));\r
- DEBUG ((DEBUG_GCD, " Capabilities = %016lx\n", Capabilities));
-
- Status = CoreConvertSpace (GCD_SET_CAPABILITIES_MEMORY_OPERATION, (EFI_GCD_MEMORY_TYPE) 0, (EFI_GCD_IO_TYPE) 0, BaseAddress, Length, Capabilities, 0);
+ DEBUG ((DEBUG_GCD, " Capabilities = %016lx\n", Capabilities));\r
+\r
+ Status = CoreConvertSpace (GCD_SET_CAPABILITIES_MEMORY_OPERATION, (EFI_GCD_MEMORY_TYPE) 0, (EFI_GCD_IO_TYPE) 0, BaseAddress, Length, Capabilities, 0);\r
if (!EFI_ERROR(Status)) {\r
- CoreUpdateMemoryAttributes(BaseAddress, RShiftU64(Length, EFI_PAGE_SHIFT), Capabilities);
- }
-
+ CoreUpdateMemoryAttributes(BaseAddress, RShiftU64(Length, EFI_PAGE_SHIFT), Capabilities);\r
+ }\r
+\r
return Status;\r
}\r
\r
if ((ResourceHob->ResourceAttribute & MEMORY_ATTRIBUTE_MASK) == PRESENT_MEMORY_ATTRIBUTES) {\r
GcdMemoryType = EfiGcdMemoryTypeReserved;\r
}\r
+ if ((ResourceHob->ResourceAttribute & EFI_RESOURCE_ATTRIBUTE_PERSISTENT) == EFI_RESOURCE_ATTRIBUTE_PERSISTENT) {\r
+ GcdMemoryType = EfiGcdMemoryTypePersistentMemory;\r
+ }\r
break;\r
case EFI_RESOURCE_MEMORY_MAPPED_IO:\r
case EFI_RESOURCE_FIRMWARE_DEVICE:\r