It is the new checkpoint of iSCSI DevicePathToText.
The Lun display is to follow with the UEFI Spec that
"The LUN is an 8 byte array that is displayed in
hexadecimal format with byte 0 first (i.e., on the
left) and byte 7 last (i.e, on the right).

Cc: Supreeth Venkatesh <supreeth.venkat...@arm.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Eric Jin <eric....@intel.com>
---
 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h 
                          |  9 ++++++++-
 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c
 | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++--
 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c
     | 41 +++++++++++++++++++++++++++++++++--------
 
uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c 
                          |  3 ++-
 4 files changed, 94 insertions(+), 12 deletions(-)

diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h
index 41d2a8a837f5..b03903ca0971 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.h
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2016 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
@@ -400,3 +400,10 @@ extern EFI_GUID 
gDevicePathToTextBBTestFunctionAssertionGuid133;
   }
 
 extern EFI_GUID gDevicePathToTextBBTestFunctionAssertionGuid134;
+
+#define EFI_TEST_DEVICEPATHTOTEXTBBTESTFUNCTION_ASSERTION_135_GUID \
+  { \
+    0xbf73c00e, 0x5a62, 0x4a20, { 0xbe, 0x15, 0x4d, 0x83, 0x7e, 0xe5, 0x7d, 
0xdf } \
+  }
+extern EFI_GUID gDevicePathToTextBBTestFunctionAssertionGuid135;
+
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c
index c30af4345158..ee91bdfb63d3 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestCoverage.c
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2017 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
@@ -2202,7 +2202,56 @@ DevicePathToTextConvertDeviceNodeToTextCoverageTest (
     SctFreePool (Text);
   }
 
-  
+  //
+  // The stardand Text in spec is iSCSI(TargetName, PortalGroup, LUN, 
HeaderDigest, DataDigest, Authentication, Protocol)
+  // The test use 
iSCSI(Name,0x12AB,0x0000005678000000,CRC32C,None,CHAP_BI,TCP) as the input to 
check binary/text convertion
+  //
+  // sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + 4 is the length of iSCSI Device 
Path Node plus Target Name
+  // The Targat Name is "Name" in this case
+  // The default protocol used by iSCSI is TCP(0), and 1+ is reserved in UEFI 
2.7 spec
+  // The combination of HeaderDigest, DataDigest and Authentication in this 
case is 0002
+  // The Lun is 0x0000007856000000 in this case to detect the possible display 
order issue
+  // please refer to section 10.3.5.21 and Table 102 of UEFI 2.7 Spec for 
detail.
+  //
+  pDeviceNode1 = DevicePathUtilities->CreateDeviceNode (0x3, 0x13, sizeof 
(ISCSI_DEVICE_PATH_WITH_NAME) + 4);
+  ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->NetworkProtocol = 0x0;
+  ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->LoginOption = 0x0002;
+  ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->Lun = 0x0000007856000000;
+  ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->TargetPortalGroupTag = 0x12AB;
+  ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->iSCSITargetName[0] = 'N';
+  ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->iSCSITargetName[1] = 'a';
+  ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->iSCSITargetName[2] = 'm';
+  ((ISCSI_DEVICE_PATH_WITH_NAME *)pDeviceNode1)->iSCSITargetName[3] = 'e';
+
+  Text = DevicePathToText->ConvertDeviceNodeToText (pDeviceNode1, FALSE, 
FALSE);
+  pDeviceNode2 = SctConvertTextToDeviceNode(Text);
+
+  if ((pDeviceNode2 != NULL) && (SctCompareMem (pDeviceNode2, pDeviceNode1, 
SctDevicePathNodeLength(pDeviceNode1)) == 0)) {
+    AssertionType = EFI_TEST_ASSERTION_PASSED;
+  } else {
+    AssertionType = EFI_TEST_ASSERTION_FAILED;
+  }
+
+  StandardLib->RecordAssertion (
+                StandardLib,
+                AssertionType,
+                gDevicePathToTextBBTestFunctionAssertionGuid135,
+                L"EFI_DEVICE_PATH_FROM_TEXT_PROTOCOL - ConvertDeviceNodeToText 
must correctly recover the converting ConvertTextToDeviceNode has acted on the 
device node string",
+                L"%a:%d: Convert result: %s - 
Expected:iSCSI(MyTargetName,0x12AB,0x0000005678000000,CRC32C,None,CHAP_BI,TCP)",
+                __FILE__,
+                (UINTN)__LINE__,
+                Text
+                );
+  if (pDeviceNode1 != NULL) {
+    SctFreePool (pDeviceNode1);
+  }
+  if (pDeviceNode2 != NULL) {
+    SctFreePool (pDeviceNode2);
+  }
+  if (Text != NULL) {
+    SctFreePool (Text);
+  }
+
   return EFI_SUCCESS;
 }
 
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c
index 41cf217b5f88..d08097769391 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/DevicePathToTextBBTestMain.c
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2017 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
@@ -2437,34 +2437,40 @@ BuildiSCSIDeviceNode (
   CHAR16                         *LunStr;
   UINT16                         Options;
   UINT64                         LunNum;
+  UINT64                         TempLunNum;
 
   Status = GetNextRequiredParam(&TextDeviceNode, L"TargetName", 
&ParamIdentifierStr, &ParamIdentifierVal);
   if ((!EFI_ERROR(Status)) && (ParamIdentifierVal != NULL)) {
     NameStr = ParamIdentifierVal;
   } else {
-       return NULL;
+    return NULL;
   }
 
   Status = GetNextRequiredParam(&TextDeviceNode, L"PortalGroup", 
&ParamIdentifierStr, &ParamIdentifierVal);
   if ((!EFI_ERROR(Status)) && (ParamIdentifierVal != NULL)) {
     PortalGroupStr = ParamIdentifierVal;
   } else {
-       return NULL;
+    return NULL;
   }
 
   Status = GetNextRequiredParam(&TextDeviceNode, L"LUN", &ParamIdentifierStr, 
&ParamIdentifierVal);
   if ((!EFI_ERROR(Status)) && (ParamIdentifierVal != NULL)) {
     LunStr = ParamIdentifierVal;
   } else {
-       return NULL;
+    return NULL;
   }
 
-  Length = sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + (UINT16) (SctStrLen 
(NameStr) * 2 + 2);
+  Length = sizeof (ISCSI_DEVICE_PATH_WITH_NAME) + (UINT16) (SctStrLen 
(NameStr));
   iSCSI = (ISCSI_DEVICE_PATH_WITH_NAME *) CreateDeviceNode (0x3, 0x13, Length);
   if (iSCSI == NULL) {
-       return NULL;
+    return NULL;
   }
 
+
+  //
+  // The iSCSI Device Node Options describe iSCSI login options for the key 
values
+  // Please refer to the section 10.3.5.21 of the UEFI 2.7 spec for the detail
+  //
   Options = 0x0000;
 
   for (OptionalParamIndex = 0;OptionalParamIndex < 5; OptionalParamIndex++) {
@@ -2499,7 +2505,7 @@ BuildiSCSIDeviceNode (
         if (SctStrCmp (ParamIdentifierVal, L"CRC32C") == 0) {
           Options |= 0x0002;
         }
-               break;
+        break;
 
       case 1:  // DataDigest
         if (SctStrCmp (ParamIdentifierVal, L"CRC32C") == 0) {
@@ -2514,6 +2520,9 @@ BuildiSCSIDeviceNode (
         if (SctStrCmp (ParamIdentifierVal, L"CHAP_UNI") == 0) {
           Options |= 0x1000;
         }
+        if (SctStrCmp (ParamIdentifierVal, L"CHAP_BI") == 0) {
+          Options |= 0x0000;
+        }
         break;
 
       case 3:  // Protocol
@@ -2533,8 +2542,24 @@ BuildiSCSIDeviceNode (
 
   SctUnicodeToAscii (iSCSI->iSCSITargetName, NameStr, SctStrLen (NameStr));
   iSCSI->TargetPortalGroupTag = (UINT16) SctStrToUInt (PortalGroupStr);
-  SctStrToUInt64 (LunStr, &LunNum);
+
+  //
+  // The LUN is an 8 byte array that is displayed in hexadecimal format with 
byte
+  // 0 first (i.e., on the left) and byte 7 last (i.e, on the right), and is 
required.
+  //
+  SctStrToUInt64 (LunStr, &TempLunNum);
+  LunNum = 0;
+
+  LunNum = SctLShiftU64((TempLunNum & 0x00000000000000FF), 56);;
+  LunNum = LunNum | SctLShiftU64((TempLunNum & 0x000000000000FF00), 40);
+  LunNum = LunNum | SctLShiftU64((TempLunNum & 0x0000000000FF0000), 24);
+  LunNum = LunNum | SctLShiftU64((TempLunNum & 0x00000000FF000000), 8);
+  LunNum = LunNum | SctRShiftU64((TempLunNum & 0x000000FF00000000), 8);
+  LunNum = LunNum | SctRShiftU64((TempLunNum & 0x0000FF0000000000), 24);
+  LunNum = LunNum | SctRShiftU64((TempLunNum & 0x00FF000000000000), 40);
+  LunNum = LunNum | SctRShiftU64((TempLunNum & 0xFF00000000000000), 56);
   iSCSI->Lun = LunNum;
+
   iSCSI->LoginOption = (UINT16) Options;
 
   return (EFI_DEVICE_PATH_PROTOCOL *) iSCSI;
diff --git 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c
 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c
index 9cad8d31d384..1eeb3552093f 100644
--- 
a/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c
+++ 
b/uefi-sct/SctPkg/TestCase/UEFI/EFI/Protocol/DevicePathToText/BlackBoxTest/Guid.c
@@ -1,7 +1,7 @@
 /** @file
 
   Copyright 2006 - 2015 Unified EFI, Inc.<BR>
-  Copyright (c) 2010 - 2018, Intel Corporation. All rights reserved.<BR>
+  Copyright (c) 2010 - 2019, Intel Corporation. All rights reserved.<BR>
 
   This program and the accompanying materials
   are licensed and made available under the terms and conditions of the BSD 
License
@@ -136,3 +136,4 @@ EFI_GUID  gDevicePathToTextBBTestFunctionAssertionGuid133 = 
EFI_TEST_DEVICEPATHT
 
 EFI_GUID  gDevicePathToTextBBTestFunctionAssertionGuid134 = 
EFI_TEST_DEVICEPATHTOTEXTBBTESTFUNCTION_ASSERTION_134_GUID;
 
+EFI_GUID  gDevicePathToTextBBTestFunctionAssertionGuid135 = 
EFI_TEST_DEVICEPATHTOTEXTBBTESTFUNCTION_ASSERTION_135_GUID;
-- 
2.20.0.windows.1

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to