#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
{\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
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
IN DEVICE_CONSIST_MAPPING_INFO *MappingItem\r
)\r
{\r
-///@todo make this a PCD\r
-//\r
-// As Csd of ISCSI node is quite long, we comment\r
-// the code below to keep the consistent mapping\r
-// short. Uncomment if you really need it.\r
-//\r
-/*\r
ISCSI_DEVICE_PATH *IScsi;\r
UINT8 *IScsiTargetName;\r
CHAR16 *TargetName;\r
ASSERT(DevicePathNode != NULL);\r
ASSERT(MappingItem != NULL);\r
\r
- IScsi = (ISCSI_DEVICE_PATH *) DevicePathNode;\r
- AppendCSDNum (MappingItem, IScsi->NetworkProtocol);\r
- AppendCSDNum (MappingItem, IScsi->LoginOption);\r
- AppendCSDNum (MappingItem, IScsi->Lun);\r
- AppendCSDNum (MappingItem, IScsi->TargetPortalGroupTag);\r
- TargetNameLength = DevicePathNodeLength (DevicePathNode) - sizeof (ISCSI_DEVICE_PATH);\r
- if (TargetNameLength > 0) {\r
- TargetName = AllocateZeroPool ((TargetNameLength + 1) * sizeof (CHAR16));\r
- if (TargetName != NULL) {\r
- IScsiTargetName = (UINT8 *) (IScsi + 1);\r
- for (Index = 0; Index < TargetNameLength; Index++) {\r
- TargetName[Index] = (CHAR16) IScsiTargetName[Index];\r
+ if (PcdGetBool(PcdShellDecodeIScsiMapNames)) {\r
+ IScsi = (ISCSI_DEVICE_PATH *) DevicePathNode;\r
+ AppendCSDNum (MappingItem, IScsi->NetworkProtocol);\r
+ AppendCSDNum (MappingItem, IScsi->LoginOption);\r
+ AppendCSDNum (MappingItem, IScsi->Lun);\r
+ AppendCSDNum (MappingItem, IScsi->TargetPortalGroupTag);\r
+ TargetNameLength = DevicePathNodeLength (DevicePathNode) - sizeof (ISCSI_DEVICE_PATH);\r
+ if (TargetNameLength > 0) {\r
+ TargetName = AllocateZeroPool ((TargetNameLength + 1) * sizeof (CHAR16));\r
+ if (TargetName != NULL) {\r
+ IScsiTargetName = (UINT8 *) (IScsi + 1);\r
+ for (Index = 0; Index < TargetNameLength; Index++) {\r
+ TargetName[Index] = (CHAR16) IScsiTargetName[Index];\r
+ }\r
+ AppendCSDStr (MappingItem, TargetName);\r
+ FreePool (TargetName);\r
}\r
- AppendCSDStr (MappingItem, TargetName);\r
- FreePool (TargetName);\r
}\r
}\r
- */\r
}\r
\r
/**\r