]> git.proxmox.com Git - mirror_edk2.git/commitdiff
ShellPkg: Add optional extended decode for Vendor Device Nodes for consistent map...
authorjaben carsey <jaben.carsey@intel.com>
Mon, 24 Nov 2014 14:50:14 +0000 (14:50 +0000)
committerjcarsey <jcarsey@Edk2>
Mon, 24 Nov 2014 14:50:14 +0000 (14:50 +0000)
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: jaben carsey <jaben.carsey@intel.com>
Reviewed-by: Joe Peterson <joe.peterson@intel.com>
Reviewed-by: Tapan Shah <tapandshah@hp.com>
git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@16420 6f19259b-4bc3-4df7-8a09-765794883524

ShellPkg/Library/UefiShellCommandLib/ConsistMapping.c
ShellPkg/Library/UefiShellCommandLib/UefiShellCommandLib.inf
ShellPkg/ShellPkg.dec

index 4e03666a467d84e5eb4182a996960961f97bc2b2..a42a045d52d48341f1ed43c27a100d15f5fe6d26 100644 (file)
@@ -14,6 +14,7 @@
 #include "UefiShellCommandLib.h"\r
 #include <Library/DevicePathLib.h>\r
 #include <Library/SortLib.h>\r
+#include <Library/UefiLib.h>\r
 \r
 typedef enum {\r
   MTDTypeUnknown,\r
@@ -575,6 +576,9 @@ DevPathSerialVendor (
 {\r
   VENDOR_DEVICE_PATH  *Vendor;\r
   SAS_DEVICE_PATH     *Sas;\r
+  UINTN               TargetNameLength;\r
+  UINTN               Index;\r
+  CHAR16              *Buffer;\r
 \r
   if (DevicePathNode == NULL || MappingItem == NULL) {\r
     return;\r
@@ -589,6 +593,32 @@ DevPathSerialVendor (
     AppendCSDNum (MappingItem, Sas->Lun);\r
     AppendCSDNum (MappingItem, Sas->DeviceTopology);\r
     AppendCSDNum (MappingItem, Sas->RelativeTargetPort);\r
+  } else {\r
+    TargetNameLength = MIN(DevicePathNodeLength (DevicePathNode) - sizeof (VENDOR_DEVICE_PATH), PcdGet32(PcdShellVendorExtendedDecode));\r
+    if (TargetNameLength != 0) {\r
+      //\r
+      // String is 2 chars per data byte, plus NULL terminator\r
+      //\r
+      Buffer = AllocateZeroPool (((TargetNameLength * 2) + 1) * sizeof(CHAR16));\r
+      ASSERT(Buffer != NULL);\r
+      if (Buffer == NULL) {\r
+        return;\r
+      }\r
+\r
+      //\r
+      // Build the string data\r
+      //\r
+      for (Index = 0; Index < TargetNameLength; Index++) {\r
+        Buffer = CatSPrint (Buffer, L"%02x", *((UINT8*)Vendor + sizeof (VENDOR_DEVICE_PATH) + Index));\r
+      }\r
+\r
+      //\r
+      // Append the new data block\r
+      //\r
+      AppendCSDStr (MappingItem, Buffer);\r
+\r
+      FreePool(Buffer);\r
+    }\r
   }\r
 }\r
 \r
index 5ef82c64d717679ea62bdeebc8e020e48c16cfe8..655069071307f063b4a6646e265c8c6d230a5539 100644 (file)
@@ -61,6 +61,7 @@
   gEfiShellPkgTokenSpaceGuid.PcdShellSupportLevel         ## ALWAYS_CONSUMED\r
   gEfiShellPkgTokenSpaceGuid.PcdShellMapNameLength        ## ALWAYS_CONSUMED\r
   gEfiShellPkgTokenSpaceGuid.PcdShellDecodeIScsiMapNames  ## SOMETIMES_CONSUMED\r
+  gEfiShellPkgTokenSpaceGuid.PcdShellVendorExtendedDecode ## SOMETIMES_CONSUMED\r
 \r
 [Depex]\r
   gEfiUnicodeCollation2ProtocolGuid\r
index 254c5b46cb30e8c99ad3b303a57389a52ffcad94..df847d31bb7854fcb53cb6678fe43daf70d6d800 100644 (file)
   ## Do iSCSI decode for map names.\r
   # This is disabled by default due to the length of generated strings\r
   gEfiShellPkgTokenSpaceGuid.PcdShellDecodeIScsiMapNames|FALSE|BOOLEAN|0x00000012\r
+\r
+  ## Controls Extended decode for Vendor device path nodes for map names.\r
+  # Up to this many bytes of vendor specific data will be used. Default is 0\r
+  # (disabled).\r
+  gEfiShellPkgTokenSpaceGuid.PcdShellVendorExtendedDecode|0|UINT32|0x00000013\r