https://bugzilla.tianocore.org/show_bug.cgi?id=1373 Replace BSD 2-Clause License with BSD+Patent License. This change is based on the following emails: https://lists.01.org/pipermail/edk2-devel/2019-February/036260.html https://lists.01.org/pipermail/edk2-devel/2018-October/030385.html RFCs with detailed process for the license change: V3: https://lists.01.org/pipermail/edk2-devel/2019-March/038116.html V2: https://lists.01.org/pipermail/edk2-devel/2019-March/037669.html V1: https://lists.01.org/pipermail/edk2-devel/2019-March/037500.html Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Michael D Kinney <michael.d.kinney@intel.com> Reviewed-by: Bob Feng <bob.c.feng@intel.com>
		
			
				
	
	
		
			195 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			195 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /** @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;
 | |
| }
 |