MdePkg: Add UEFI2.5 Ramdisk device path definition

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Feng Tian <feng.tian@intel.com>
Reviewed-by: Star Zeng <star.zeng@intel.com>

git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@17878 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
Feng Tian 2015-07-08 05:49:07 +00:00 committed by erictian
parent a51ee14463
commit 6a46c1a2a6
5 changed files with 349 additions and 2 deletions

View File

@ -21,6 +21,8 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
#include <Guid/PcAnsi.h>
#include <IndustryStandard/Bluetooth.h>
#include <IndustryStandard/Acpi60.h>
///
/// Device Path protocol.
///
@ -1075,6 +1077,62 @@ typedef struct {
UINT64 EndingOffset;
} MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH;
///
/// This GUID defines a RAM Disk supporting a raw disk format in volatile memory.
///
#define EFI_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_VOLATILE
extern EFI_GUID gEfiVirtualDiskGuid;
///
/// This GUID defines a RAM Disk supporting an ISO image in volatile memory.
///
#define EFI_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_VOLATILE
extern EFI_GUID gEfiVirtualCdGuid;
///
/// This GUID defines a RAM Disk supporting a raw disk format in persistent memory.
///
#define EFI_PERSISTENT_VIRTUAL_DISK_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_DISK_REGION_PERSISTENT
extern EFI_GUID gEfiPersistentVirtualDiskGuid;
///
/// This GUID defines a RAM Disk supporting an ISO image in persistent memory.
///
#define EFI_PERSISTENT_VIRTUAL_CD_GUID EFI_ACPI_6_0_NFIT_GUID_RAM_DISK_SUPPORTING_VIRTUAL_CD_REGION_PERSISTENT
extern EFI_GUID gEfiPersistentVirtualCdGuid;
///
/// Media ram disk device path.
///
#define MEDIA_RAM_DISK_DP 0x09
///
/// Used to describe the ram disk device path.
///
typedef struct {
EFI_DEVICE_PATH_PROTOCOL Header;
///
/// Starting Memory Address.
///
UINT32 StartingAddr[2];
///
/// Ending Memory Address.
///
UINT32 EndingAddr[2];
///
/// GUID that defines the type of the RAM Disk.
///
EFI_GUID TypeGuid;
///
/// RAM Diskinstance number, if supported. The default value is zero.
///
UINT16 Instance;
} MEDIA_RAM_DISK_DEVICE_PATH;
///
/// BIOS Boot Specification Device Path.
///
@ -1169,7 +1227,7 @@ typedef union {
MEDIA_FW_VOL_DEVICE_PATH FirmwareVolume;
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH FirmwareFile;
MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH Offset;
MEDIA_RAM_DISK_DEVICE_PATH RamDisk;
BBS_BBS_DEVICE_PATH Bbs;
} EFI_DEV_PATH;
@ -1224,7 +1282,7 @@ typedef union {
MEDIA_FW_VOL_DEVICE_PATH *FirmwareVolume;
MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FirmwareFile;
MEDIA_RELATIVE_OFFSET_RANGE_DEVICE_PATH *Offset;
MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;
BBS_BBS_DEVICE_PATH *Bbs;
UINT8 *Raw;
} EFI_DEV_PATH_PTR;

View File

@ -3111,6 +3111,206 @@ DevPathFromTextRelativeOffsetRange (
return (EFI_DEVICE_PATH_PROTOCOL *) Offset;
}
/**
Converts a text device path node to text ram disk device path structure.
@param TextDeviceNode The input Text device path node.
@return A pointer to the newly-created Text device path structure.
**/
EFI_DEVICE_PATH_PROTOCOL *
DevPathFromTextRamDisk (
IN CHAR16 *TextDeviceNode
)
{
CHAR16 *StartingAddrStr;
CHAR16 *EndingAddrStr;
CHAR16 *TypeGuidStr;
CHAR16 *InstanceStr;
MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;
UINT64 StartingAddr;
UINT64 EndingAddr;
StartingAddrStr = GetNextParamStr (&TextDeviceNode);
EndingAddrStr = GetNextParamStr (&TextDeviceNode);
InstanceStr = GetNextParamStr (&TextDeviceNode);
TypeGuidStr = GetNextParamStr (&TextDeviceNode);
RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (
MEDIA_DEVICE_PATH,
MEDIA_RAM_DISK_DP,
(UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)
);
Strtoi64 (StartingAddrStr, &StartingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);
Strtoi64 (EndingAddrStr, &EndingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);
RamDisk->Instance = (UINT16) Strtoi (InstanceStr);
StrToGuid (TypeGuidStr, &RamDisk->TypeGuid);
return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;
}
/**
Converts a text device path node to text virtual disk device path structure.
@param TextDeviceNode The input Text device path node.
@return A pointer to the newly-created Text device path structure.
**/
EFI_DEVICE_PATH_PROTOCOL *
DevPathFromTextVirtualDisk (
IN CHAR16 *TextDeviceNode
)
{
CHAR16 *StartingAddrStr;
CHAR16 *EndingAddrStr;
CHAR16 *InstanceStr;
MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;
UINT64 StartingAddr;
UINT64 EndingAddr;
StartingAddrStr = GetNextParamStr (&TextDeviceNode);
EndingAddrStr = GetNextParamStr (&TextDeviceNode);
InstanceStr = GetNextParamStr (&TextDeviceNode);
RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (
MEDIA_DEVICE_PATH,
MEDIA_RAM_DISK_DP,
(UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)
);
Strtoi64 (StartingAddrStr, &StartingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);
Strtoi64 (EndingAddrStr, &EndingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);
RamDisk->Instance = (UINT16) Strtoi (InstanceStr);
CopyGuid (&RamDisk->TypeGuid, &gEfiVirtualDiskGuid);
return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;
}
/**
Converts a text device path node to text virtual cd device path structure.
@param TextDeviceNode The input Text device path node.
@return A pointer to the newly-created Text device path structure.
**/
EFI_DEVICE_PATH_PROTOCOL *
DevPathFromTextVirtualCd (
IN CHAR16 *TextDeviceNode
)
{
CHAR16 *StartingAddrStr;
CHAR16 *EndingAddrStr;
CHAR16 *InstanceStr;
MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;
UINT64 StartingAddr;
UINT64 EndingAddr;
StartingAddrStr = GetNextParamStr (&TextDeviceNode);
EndingAddrStr = GetNextParamStr (&TextDeviceNode);
InstanceStr = GetNextParamStr (&TextDeviceNode);
RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (
MEDIA_DEVICE_PATH,
MEDIA_RAM_DISK_DP,
(UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)
);
Strtoi64 (StartingAddrStr, &StartingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);
Strtoi64 (EndingAddrStr, &EndingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);
RamDisk->Instance = (UINT16) Strtoi (InstanceStr);
CopyGuid (&RamDisk->TypeGuid, &gEfiVirtualCdGuid);
return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;
}
/**
Converts a text device path node to text persistent virtual disk device path structure.
@param TextDeviceNode The input Text device path node.
@return A pointer to the newly-created Text device path structure.
**/
EFI_DEVICE_PATH_PROTOCOL *
DevPathFromTextPersistentVirtualDisk (
IN CHAR16 *TextDeviceNode
)
{
CHAR16 *StartingAddrStr;
CHAR16 *EndingAddrStr;
CHAR16 *InstanceStr;
MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;
UINT64 StartingAddr;
UINT64 EndingAddr;
StartingAddrStr = GetNextParamStr (&TextDeviceNode);
EndingAddrStr = GetNextParamStr (&TextDeviceNode);
InstanceStr = GetNextParamStr (&TextDeviceNode);
RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (
MEDIA_DEVICE_PATH,
MEDIA_RAM_DISK_DP,
(UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)
);
Strtoi64 (StartingAddrStr, &StartingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);
Strtoi64 (EndingAddrStr, &EndingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);
RamDisk->Instance = (UINT16) Strtoi (InstanceStr);
CopyGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualDiskGuid);
return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;
}
/**
Converts a text device path node to text persistent virtual cd device path structure.
@param TextDeviceNode The input Text device path node.
@return A pointer to the newly-created Text device path structure.
**/
EFI_DEVICE_PATH_PROTOCOL *
DevPathFromTextPersistentVirtualCd (
IN CHAR16 *TextDeviceNode
)
{
CHAR16 *StartingAddrStr;
CHAR16 *EndingAddrStr;
CHAR16 *InstanceStr;
MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;
UINT64 StartingAddr;
UINT64 EndingAddr;
StartingAddrStr = GetNextParamStr (&TextDeviceNode);
EndingAddrStr = GetNextParamStr (&TextDeviceNode);
InstanceStr = GetNextParamStr (&TextDeviceNode);
RamDisk = (MEDIA_RAM_DISK_DEVICE_PATH *) CreateDeviceNode (
MEDIA_DEVICE_PATH,
MEDIA_RAM_DISK_DP,
(UINT16) sizeof (MEDIA_RAM_DISK_DEVICE_PATH)
);
Strtoi64 (StartingAddrStr, &StartingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->StartingAddr[0]), StartingAddr);
Strtoi64 (EndingAddrStr, &EndingAddr);
WriteUnaligned64 ((UINT64 *) &(RamDisk->EndingAddr[0]), EndingAddr);
RamDisk->Instance = (UINT16) Strtoi (InstanceStr);
CopyGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualCdGuid);
return (EFI_DEVICE_PATH_PROTOCOL *) RamDisk;
}
/**
Converts a BBS text device path node to BBS device path structure.
@ -3292,6 +3492,11 @@ GLOBAL_REMOVE_IF_UNREFERENCED DEVICE_PATH_FROM_TEXT_TABLE mUefiDevicePathLibDevP
{L"Fv", DevPathFromTextFv },
{L"FvFile", DevPathFromTextFvFile },
{L"Offset", DevPathFromTextRelativeOffsetRange },
{L"RamDisk", DevPathFromTextRamDisk },
{L"VirtualDisk", DevPathFromTextVirtualDisk },
{L"VirtualCD", DevPathFromTextVirtualCd },
{L"PersistentVirtualDisk", DevPathFromTextPersistentVirtualDisk },
{L"PersistentVirtualCD", DevPathFromTextPersistentVirtualCd },
{L"BbsPath", DevPathFromTextBbsPath },
{L"BBS", DevPathFromTextBBS },

View File

@ -1857,6 +1857,75 @@ DevPathRelativeOffsetRange (
);
}
/**
Converts a Ram Disk device path structure to its string representative.
@param Str The string representative of input device.
@param DevPath The input device path structure.
@param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation
of the display node is used, where applicable. If DisplayOnly
is FALSE, then the longer text representation of the display node
is used.
@param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text
representation for a device node can be used, where applicable.
**/
VOID
DevPathToTextRamDisk (
IN OUT POOL_PRINT *Str,
IN VOID *DevPath,
IN BOOLEAN DisplayOnly,
IN BOOLEAN AllowShortcuts
)
{
MEDIA_RAM_DISK_DEVICE_PATH *RamDisk;
RamDisk = DevPath;
if (CompareGuid (&RamDisk->TypeGuid, &gEfiVirtualDiskGuid)) {
UefiDevicePathLibCatPrint (
Str,
L"VirtualDisk(0x%lx,0x%lx,%d)",
RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],
RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],
RamDisk->Instance
);
} else if (CompareGuid (&RamDisk->TypeGuid, &gEfiVirtualCdGuid)) {
UefiDevicePathLibCatPrint (
Str,
L"VirtualCD(0x%lx,0x%lx,%d)",
RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],
RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],
RamDisk->Instance
);
} else if (CompareGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualDiskGuid)) {
UefiDevicePathLibCatPrint (
Str,
L"PersistentVirtualDisk(0x%lx,0x%lx,%d)",
RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],
RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],
RamDisk->Instance
);
} else if (CompareGuid (&RamDisk->TypeGuid, &gEfiPersistentVirtualCdGuid)) {
UefiDevicePathLibCatPrint (
Str,
L"PersistentVirtualCD(0x%lx,0x%lx,%d)",
RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],
RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],
RamDisk->Instance
);
} else {
UefiDevicePathLibCatPrint (
Str,
L"RamDisk(0x%lx,0x%lx,%d,%g)",
RShiftU64 ((UINT64)RamDisk->StartingAddr[1], 32) | RamDisk->StartingAddr[0],
RShiftU64 ((UINT64)RamDisk->EndingAddr[1], 32) | RamDisk->EndingAddr[0],
RamDisk->Instance,
&RamDisk->TypeGuid
);
}
}
/**
Converts a BIOS Boot Specification device path structure to its string representative.
@ -2057,6 +2126,7 @@ GLOBAL_REMOVE_IF_UNREFERENCED const DEVICE_PATH_TO_TEXT_TABLE mUefiDevicePathLib
{MEDIA_DEVICE_PATH, MEDIA_PIWG_FW_VOL_DP, DevPathToTextFv },
{MEDIA_DEVICE_PATH, MEDIA_PIWG_FW_FILE_DP, DevPathToTextFvFile },
{MEDIA_DEVICE_PATH, MEDIA_RELATIVE_OFFSET_RANGE_DP, DevPathRelativeOffsetRange },
{MEDIA_DEVICE_PATH, MEDIA_RAM_DISK_DP, DevPathToTextRamDisk },
{BBS_DEVICE_PATH, BBS_BBS_DP, DevPathToTextBBS },
{END_DEVICE_PATH_TYPE, END_INSTANCE_DEVICE_PATH_SUBTYPE, DevPathToTextEndInstance },
{0, 0, NULL}

View File

@ -61,6 +61,14 @@
gEfiUartDevicePathGuid
## SOMETIMES_CONSUMES ## GUID
gEfiSasDevicePathGuid
## SOMETIMES_CONSUMES ## GUID
gEfiVirtualDiskGuid
## SOMETIMES_CONSUMES ## GUID
gEfiVirtualCdGuid
## SOMETIMES_CONSUMES ## GUID
gEfiPersistentVirtualDiskGuid
## SOMETIMES_CONSUMES ## GUID
gEfiPersistentVirtualCdGuid
[Protocols]
gEfiDevicePathProtocolGuid ## SOMETIMES_CONSUMES

View File

@ -598,6 +598,12 @@
gEfiBootManagerPolicyNetworkGuid = { 0xD04159DC, 0xE15F, 0x11E3, { 0xB2, 0x61, 0xB8, 0xE8, 0x56, 0x2C, 0xBA, 0xFA }}
gEfiBootManagerPolicyConnectAllGuid = { 0x113B2126, 0xFC8A, 0x11E3, { 0xBD, 0x6C, 0xB8, 0xE8, 0x56, 0x2C, 0xBA, 0xFA }}
## Include/Protocol/DevicePath.h
gEfiVirtualDiskGuid = { 0x77AB535A, 0x45FC, 0x624B, {0x55, 0x60, 0xF7, 0xB2, 0x81, 0xD1, 0xF9, 0x6E }}
gEfiVirtualCdGuid = { 0x3D5ABD30, 0x4175, 0x87CE, {0x6D, 0x64, 0xD2, 0xAD, 0xE5, 0x23, 0xC4, 0xBB }}
gEfiPersistentVirtualDiskGuid = { 0x5CEA02C9, 0x4D07, 0x69D3, {0x26, 0x9F ,0x44, 0x96, 0xFB, 0xE0, 0x96, 0xF9 }}
gEfiPersistentVirtualCdGuid = { 0x08018188, 0x42CD, 0xBB48, {0x10, 0x0F, 0x53, 0x87, 0xD5, 0x3D, 0xED, 0x3D }}
#
# GUID defined in PI1.0
#