123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194 |
- /** @file
- Definition for Device Path Tool.
- Copyright (c) 2017 - 2018, Intel Corporation. All rights reserved.<BR>
- SPDX-License-Identifier: BSD-2-Clause-Patent
- **/
- #include "UefiDevicePathLib.h"
- //
- // Utility Name
- //
- #define UTILITY_NAME "DevicePath"
- //
- // Utility version information
- //
- #define UTILITY_MAJOR_VERSION 0
- #define UTILITY_MINOR_VERSION 1
- EFI_GUID gEfiDebugPortProtocolGuid = DEVICE_PATH_MESSAGING_DEBUGPORT;
- EFI_GUID gEfiPcAnsiGuid = EFI_PC_ANSI_GUID;
- EFI_GUID gEfiVT100Guid = EFI_VT_100_GUID;
- EFI_GUID gEfiVT100PlusGuid = EFI_VT_100_PLUS_GUID;
- EFI_GUID gEfiVTUTF8Guid = EFI_VT_UTF8_GUID;
- EFI_GUID gEfiUartDevicePathGuid = EFI_UART_DEVICE_PATH_GUID;
- EFI_GUID gEfiSasDevicePathGuid = EFI_SAS_DEVICE_PATH_GUID;
- EFI_GUID gEfiVirtualDiskGuid = EFI_VIRTUAL_DISK_GUID;
- EFI_GUID gEfiVirtualCdGuid = EFI_VIRTUAL_CD_GUID;
- EFI_GUID gEfiPersistentVirtualDiskGuid = EFI_PERSISTENT_VIRTUAL_DISK_GUID;
- EFI_GUID gEfiPersistentVirtualCdGuid = EFI_PERSISTENT_VIRTUAL_CD_GUID;
- STATIC
- VOID
- Version (
- VOID
- )
- /*++
- Routine Description:
- Displays the standard utility information to SDTOUT
- Arguments:
- None
- Returns:
- None
- --*/
- {
- fprintf (stdout, "%s Version %d.%d %s \n", UTILITY_NAME, UTILITY_MAJOR_VERSION, UTILITY_MINOR_VERSION, __BUILD_VERSION);
- }
- STATIC
- VOID
- Usage (
- VOID
- )
- /*++
- Routine Description:
- Displays the utility usage syntax to STDOUT
- Arguments:
- None
- Returns:
- None
- --*/
- {
- //
- // Summary usage
- //
- fprintf (stdout, "\nUsage: %s [options]\n\n", UTILITY_NAME);
- //
- // Copyright declaration
- //
- fprintf (stdout, "Copyright (c) 2017, Intel Corporation. All rights reserved.\n\n");
- //
- // Details Option
- //
- fprintf (stdout, "Options:\n");
- fprintf (stdout, " DevicePathString Device Path string is specified, no space character.\n"
- " Example: \"PciRoot(0)/Pci(0,0)\"\n");
- fprintf (stdout, " --version Show program's version number and exit.\n");
- fprintf (stdout, " -h, --help Show this help message and exit.\n");
- }
- STATIC
- VOID
- PrintMem (
- CONST VOID *Buffer,
- UINTN Count
- )
- {
- CONST UINT8 *Bytes;
- UINTN Idx;
- Bytes = Buffer;
- for (Idx = 0; Idx < Count; Idx++) {
- printf("0x%02x ", Bytes[Idx]);
- }
- }
- VOID
- Ascii2UnicodeString (
- CHAR8 *String,
- CHAR16 *UniString
- )
- /*++
- Routine Description:
- Write ascii string as unicode string format to FILE
- Arguments:
- String - Pointer to string that is written to FILE.
- UniString - Pointer to unicode string
- Returns:
- NULL
- --*/
- {
- while (*String != '\0') {
- *(UniString++) = (CHAR16) *(String++);
- }
- //
- // End the UniString with a NULL.
- //
- *UniString = '\0';
- }
- int main(int argc, CHAR8 *argv[])
- {
- CHAR8 * Str;
- CHAR16* Str16;
- EFI_DEVICE_PATH_PROTOCOL *DevicePath;
- if (argc == 1) {
- Error (NULL, 0, 1001, "Missing options", "No input options specified.");
- Usage ();
- return STATUS_ERROR;
- }
- if ((stricmp (argv[1], "-h") == 0) || (stricmp (argv[1], "--help") == 0)) {
- Version ();
- Usage ();
- return STATUS_SUCCESS;
- }
- if (stricmp (argv[1], "--version") == 0) {
- Version ();
- return STATUS_SUCCESS;
- }
- Str = argv[1];
- if (Str == NULL) {
- fprintf(stderr, "Invalid option value, Device Path can't be NULL");
- return STATUS_ERROR;
- }
- Str16 = (CHAR16 *)malloc(1024);
- if (Str16 == NULL) {
- fprintf(stderr, "Resource, memory cannot be allocated");
- return STATUS_ERROR;
- }
- Ascii2UnicodeString(Str, Str16);
- DevicePath = UefiDevicePathLibConvertTextToDevicePath(Str16);
- if (DevicePath == NULL) {
- fprintf(stderr, "Convert fail, Cannot convert text to a device path");
- free(Str16);
- return STATUS_ERROR;
- }
- while (!((DevicePath->Type == END_DEVICE_PATH_TYPE) && (DevicePath->SubType == END_ENTIRE_DEVICE_PATH_SUBTYPE)) )
- {
- PrintMem (DevicePath, DevicePath->Length[0] | DevicePath->Length[1] << 8);
- DevicePath = (EFI_DEVICE_PATH_PROTOCOL *)((UINT8 *)DevicePath + (DevicePath->Length[0] | DevicePath->Length[1] << 8));
- }
- PrintMem (DevicePath, DevicePath->Length[0] | DevicePath->Length[1] << 8);
- putchar('\n');
- free(Str16);
- return STATUS_SUCCESS;
- }
|