\r
#include <Guid/PcAnsi.h>\r
#include <IndustryStandard/Bluetooth.h>\r
+#include <IndustryStandard/Acpi60.h>\r
+\r
///\r
/// Device Path protocol.\r
///\r
UINT64 EndingOffset;\r
} MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH;\r
\r
+///\r
+/// This GUID defines a RAM Disk supporting a raw disk format in volatile memory.\r
+///\r
+#define EFI_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE\r
+\r
+extern EFI_GUID gEfiVirtualDiskGuid;\r
+\r
+///\r
+/// This GUID defines a RAM Disk supporting an ISO image in volatile memory.\r
+///\r
+#define EFI_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE\r
+\r
+extern EFI_GUID gEfiVirtualCdGuid;\r
+\r
+///\r
+/// This GUID defines a RAM Disk supporting a raw disk format in persistent memory.\r
+///\r
+#define EFI_PERSISTENT_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT\r
+\r
+extern EFI_GUID gEfiPersistentVirtualDiskGuid;\r
+\r
+///\r
+/// This GUID defines a RAM Disk supporting an ISO image in persistent memory.\r
+///\r
+#define EFI_PERSISTENT_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT\r
+\r
+extern EFI_GUID gEfiPersistentVirtualCdGuid;\r
+\r
+///\r
+/// Media ram disk device path.\r
+///\r
+#define MEDIA_RAM_DISK_DP 0x09\r
+\r
+///\r
+/// Used to describe the ram disk device path.\r
+///\r
+typedef struct {\r
+ EFI_DEVICE_PATH_PROTOCOL Header;\r
+ ///\r
+ /// Starting Memory Address.\r
+ ///\r
+ UINT32 StartingAddr[2];\r
+ ///\r
+ /// Ending Memory Address.\r
+ ///\r
+ UINT32 EndingAddr[2];\r
+ ///\r
+ /// GUID that defines the type of the RAM Disk.\r
+ ///\r
+ EFI_GUID TypeGuid;\r
+ ///\r
+ /// RAM Diskinstance number, if supported. The default value is zero.\r
+ ///\r
+ UINT16 Instance;\r
+} MEDIA_RAM_DISK_DEVICE_PATH;\r
+\r
///\r
/// BIOS Boot Specification Device Path.\r
///\r
MEDIA_FW_VOL_DEVICE_PATH FirmwareVolume;\r
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FirmwareFile;\r
MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH Offset;\r
-\r
+ MEDIA_RAM_DISK_DEVICE_PATH RamDisk;\r
BBS_BBS_DEVICE_PATH Bbs;\r
} EFI_DEV_PATH;\r
\r
MEDIA_FW_VOL_DEVICE_PATH *FirmwareVolume;\r
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FirmwareFile;\r
MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *Offset;\r
-\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
BBS_BBS_DEVICE_PATH *Bbs;\r
UINT8 *Raw;\r
} EFI_DEV_PATH_PTR;\r
return (EFI_DEVICE_PATH_PROTOCOL *) Offset;\r
}\r
\r
+/**\r
+ Converts a text device path node to text ram disk device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created Text device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextRamDisk (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *TypeGuidStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+ TypeGuidStr = GetNextParamStr (&TextDeviceNode);\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ StrToGuid (TypeGuidStr, &RamDisk->TypeGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
+\r
+/**\r
+ Converts a text device path node to text virtual disk device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created Text device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextVirtualDisk (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ CopyGuid (&RamDisk->TypeGuid, &gEfiVirtualDiskGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
+\r
+/**\r
+ Converts a text device path node to text virtual cd device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created Text device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextVirtualCd (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ CopyGuid (&RamDisk->TypeGuid, &gEfiVirtualCdGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
+\r
+/**\r
+ Converts a text device path node to text persistent virtual disk device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created Text device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextPersistentVirtualDisk (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ CopyGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualDiskGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
+\r
+/**\r
+ Converts a text device path node to text persistent virtual cd device path structure.\r
+\r
+ @param TextDeviceNode The input Text device path node.\r
+\r
+ @return A pointer to the newly-created Text device path structure.\r
+\r
+**/\r
+EFI_DEVICE_PATH_PROTOCOL *\r
+DevPathFromTextPersistentVirtualCd (\r
+ IN CHAR16 *TextDeviceNode\r
+ )\r
+{\r
+ CHAR16 *StartingAddrStr;\r
+ CHAR16 *EndingAddrStr;\r
+ CHAR16 *InstanceStr;\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+ UINT64 StartingAddr;\r
+ UINT64 EndingAddr;\r
+\r
+ StartingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ EndingAddrStr = GetNextParamStr (&TextDeviceNode);\r
+ InstanceStr = GetNextParamStr (&TextDeviceNode);\r
+\r
+ RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (\r
+ MEDIA_DEVICE_PATH,\r
+ MEDIA_RAM_DISK_DP,\r
+ (UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)\r
+ );\r
+\r
+ Strtoi64 (StartingAddrStr, &StartingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);\r
+ Strtoi64 (EndingAddrStr, &EndingAddr);\r
+ WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);\r
+ RamDisk->Instance = (UINT16) Strtoi (InstanceStr);\r
+ CopyGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualCdGuid);\r
+\r
+ return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;\r
+}\r
\r
/**\r
Converts a BBS text device path node to BBS device path structure.\r
{L"Fv", DevPathFromTextFv },\r
{L"FvFile", DevPathFromTextFvFile },\r
{L"Offset", DevPathFromTextRelativeOffsetRange },\r
+ {L"RamDisk", DevPathFromTextRamDisk },\r
+ {L"VirtualDisk", DevPathFromTextVirtualDisk },\r
+ {L"VirtualCD", DevPathFromTextVirtualCd },\r
+ {L"PersistentVirtualDisk", DevPathFromTextPersistentVirtualDisk },\r
+ {L"PersistentVirtualCD", DevPathFromTextPersistentVirtualCd },\r
\r
{L"BbsPath", DevPathFromTextBbsPath },\r
{L"BBS", DevPathFromTextBBS },\r
);\r
}\r
\r
+/**\r
+ Converts a Ram Disk device path structure to its string representative.\r
+\r
+ @param Str The string representative of input device.\r
+ @param DevPath The input device path structure.\r
+ @param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation\r
+ of the display node is used, where applicable. If DisplayOnly\r
+ is FALSE, then the longer text representation of the display node\r
+ is used.\r
+ @param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text\r
+ representation for a device node can be used, where applicable.\r
+\r
+**/\r
+VOID\r
+DevPathToTextRamDisk (\r
+ IN OUT POOL_PRINT *Str,\r
+ IN VOID *DevPath,\r
+ IN BOOLEAN DisplayOnly,\r
+ IN BOOLEAN AllowShortcuts\r
+ )\r
+{\r
+ MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;\r
+\r
+ RamDisk = DevPath;\r
+\r
+ if (CompareGuid (&RamDisk->TypeGuid, &gEfiVirtualDiskGuid)) {\r
+ UefiDevicePathLibCatPrint (\r
+ Str,\r
+ L"VirtualDisk(0x%lx,0x%lx,%d)",\r
+ RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],\r
+ RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],\r
+ RamDisk->Instance\r
+ );\r
+ } else if (CompareGuid (&RamDisk->TypeGuid, &gEfiVirtualCdGuid)) {\r
+ UefiDevicePathLibCatPrint (\r
+ Str,\r
+ L"VirtualCD(0x%lx,0x%lx,%d)",\r
+ RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],\r
+ RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],\r
+ RamDisk->Instance\r
+ );\r
+ } else if (CompareGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualDiskGuid)) {\r
+ UefiDevicePathLibCatPrint (\r
+ Str,\r
+ L"PersistentVirtualDisk(0x%lx,0x%lx,%d)",\r
+ RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],\r
+ RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],\r
+ RamDisk->Instance\r
+ );\r
+ } else if (CompareGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualCdGuid)) {\r
+ UefiDevicePathLibCatPrint (\r
+ Str,\r
+ L"PersistentVirtualCD(0x%lx,0x%lx,%d)",\r
+ RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],\r
+ RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],\r
+ RamDisk->Instance\r
+ );\r
+ } else {\r
+ UefiDevicePathLibCatPrint (\r
+ Str,\r
+ L"RamDisk(0x%lx,0x%lx,%d,%g)",\r
+ RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],\r
+ RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],\r
+ RamDisk->Instance,\r
+ &RamDisk->TypeGuid\r
+ );\r
+ }\r
+}\r
+\r
/**\r
Converts a BIOS Boot Specification device path structure to its string representative.\r
\r
{MEDIA_DEVICE_PATH, MEDIA_PIWG_FW_VOL_DP, DevPathToTextFv },\r
{MEDIA_DEVICE_PATH, MEDIA_PIWG_FW_FILE_DP, DevPathToTextFvFile },\r
{MEDIA_DEVICE_PATH, MEDIA_RELATIVE_OFFSET_RANGE_DP, DevPathRelativeOffsetRange },\r
+ {MEDIA_DEVICE_PATH, MEDIA_RAM_DISK_DP, DevPathToTextRamDisk },\r
{BBS_DEVICE_PATH, BBS_BBS_DP, DevPathToTextBBS },\r
{END_DEVICE_PATH_TYPE, END_INSTANCE_DEVICE_PATH_SUBTYPE, DevPathToTextEndInstance },\r
{0, 0, NULL}\r
gEfiUartDevicePathGuid\r
## SOMETIMES_CONSUMES ## GUID\r
gEfiSasDevicePathGuid\r
+ ## SOMETIMES_CONSUMES ## GUID\r
+ gEfiVirtualDiskGuid\r
+ ## SOMETIMES_CONSUMES ## GUID\r
+ gEfiVirtualCdGuid\r
+ ## SOMETIMES_CONSUMES ## GUID\r
+ gEfiPersistentVirtualDiskGuid\r
+ ## SOMETIMES_CONSUMES ## GUID\r
+ gEfiPersistentVirtualCdGuid\r
\r
[Protocols]\r
gEfiDevicePathProtocolGuid ## SOMETIMES_CONSUMES\r
gEfiBootManagerPolicyNetworkGuid = { 0xD04159DC, 0xE15F, 0x11E3, { 0xB2, 0x61, 0xB8, 0xE8, 0x56, 0x2C, 0xBA, 0xFA }}\r
gEfiBootManagerPolicyConnectAllGuid = { 0x113B2126, 0xFC8A, 0x11E3, { 0xBD, 0x6C, 0xB8, 0xE8, 0x56, 0x2C, 0xBA, 0xFA }}\r
\r
+ ## Include/Protocol/DevicePath.h\r
+ gEfiVirtualDiskGuid = { 0x77AB535A, 0x45FC, 0x624B, {0x55, 0x60, 0xF7, 0xB2, 0x81, 0xD1, 0xF9, 0x6E }}\r
+ gEfiVirtualCdGuid = { 0x3D5ABD30, 0x4175, 0x87CE, {0x6D, 0x64, 0xD2, 0xAD, 0xE5, 0x23, 0xC4, 0xBB }}\r
+ gEfiPersistentVirtualDiskGuid = { 0x5CEA02C9, 0x4D07, 0x69D3, {0x26, 0x9F ,0x44, 0x96, 0xFB, 0xE0, 0x96, 0xF9 }}\r
+ gEfiPersistentVirtualCdGuid = { 0x08018188, 0x42CD, 0xBB48, {0x10, 0x0F, 0x53, 0x87, 0xD5, 0x3D, 0xED, 0x3D }}\r
+\r
#\r
# GUID defined in PI1.0\r
#\r