+\r
+/**\r
+ Parse IsId in string format and convert it to binary.\r
+\r
+ @param[in] String The buffer of the string to be parsed.\r
+ @param[in, out] IsId The buffer to store IsId.\r
+\r
+ @retval EFI_SUCCESS The operation finished successfully.\r
+ @retval EFI_INVALID_PARAMETER Any input parameter is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+IScsiParseIsIdFromString (\r
+ IN CONST CHAR16 *String,\r
+ IN OUT UINT8 *IsId\r
+ )\r
+{\r
+ UINT8 Index;\r
+ CHAR16 *IsIdStr;\r
+ CHAR16 TempStr[3];\r
+ UINTN NodeVal;\r
+ CHAR16 PortString[ISCSI_NAME_IFR_MAX_SIZE];\r
+ EFI_INPUT_KEY Key;\r
+\r
+ if ((String == NULL) || (IsId == NULL)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ IsIdStr = (CHAR16 *) String;\r
+\r
+ if (StrLen (IsIdStr) != 6) {\r
+ UnicodeSPrint (\r
+ PortString,\r
+ (UINTN) sizeof (PortString),\r
+ L"Error! Input is incorrect, please input 6 hex numbers!\n"\r
+ );\r
+\r
+ CreatePopUp (\r
+ EFI_LIGHTGRAY | EFI_BACKGROUND_BLUE,\r
+ &Key,\r
+ PortString,\r
+ NULL\r
+ );\r
+\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ for (Index = 3; Index < 6; Index++) {\r
+ CopyMem (TempStr, IsIdStr, sizeof (TempStr));\r
+ TempStr[2] = L'\0';\r
+\r
+ //\r
+ // Convert the string to IsId. StrHexToUintn stops at the first character\r
+ // that is not a valid hex character, '\0' here.\r
+ //\r
+ NodeVal = StrHexToUintn (TempStr);\r
+\r
+ IsId[Index] = (UINT8) NodeVal;\r
+\r
+ IsIdStr = IsIdStr + 2;\r
+ }\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Convert IsId from binary to string format.\r
+\r
+ @param[out] String The buffer to store the converted string.\r
+ @param[in] IsId The buffer to store IsId.\r
+\r
+ @retval EFI_SUCCESS The string converted successfully.\r
+ @retval EFI_INVALID_PARAMETER Any input parameter is invalid.\r
+\r
+**/\r
+EFI_STATUS\r
+IScsiConvertIsIdToString (\r
+ OUT CHAR16 *String,\r
+ IN UINT8 *IsId\r
+ )\r
+{\r
+ UINT8 Index;\r
+ UINTN Number;\r
+\r
+ if ((String == NULL) || (IsId == NULL)) {\r
+ return EFI_INVALID_PARAMETER;\r
+ }\r
+\r
+ for (Index = 0; Index < 6; Index++) {\r
+ if (IsId[Index] <= 0xF) {\r
+ Number = UnicodeSPrint (\r
+ String,\r
+ 2 * ISID_CONFIGURABLE_STORAGE,\r
+ L"0%X",\r
+ (UINTN) IsId[Index]\r
+ );\r
+ } else {\r
+ Number = UnicodeSPrint (\r
+ String,\r
+ 2 * ISID_CONFIGURABLE_STORAGE,\r
+ L"%X",\r
+ (UINTN) IsId[Index]\r
+ );\r
+\r
+ }\r
+\r
+ String = String + Number;\r
+ }\r
+\r
+ *String = L'\0';\r
+\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+\r