+/**\r
+ Create the iSCSI configuration Keywords for each attempt. You can find the keywords\r
+ defined in the "x-UEFI-ns" namespace (http://www.uefi.org/confignamespace).\r
+\r
+ @param[in] KeywordNum The number Sets of Keywords will be created.\r
+\r
+ @retval EFI_SUCCESS The operation is completed.\r
+ @retval Others Failed to create the Keywords.\r
+\r
+**/\r
+EFI_STATUS\r
+IScsiCreateKeywords (\r
+ IN UINTN KeywordNum\r
+)\r
+{\r
+ VOID *StartOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *StartLabel;\r
+ VOID *EndOpCodeHandle;\r
+ EFI_IFR_GUID_LABEL *EndLabel;\r
+ UINTN Index;\r
+ EFI_STRING_ID StringToken;\r
+ CHAR16 StringId[64];\r
+ CHAR16 KeywordId[32];\r
+ EFI_STATUS Status;\r
+\r
+ Status = IScsiCreateOpCode (\r
+ KEYWORD_ENTRY_LABEL,\r
+ &StartOpCodeHandle,\r
+ &StartLabel,\r
+ &EndOpCodeHandle,\r
+ &EndLabel\r
+ );\r
+ if (EFI_ERROR (Status)) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ for (Index = 1; Index <= KeywordNum; Index ++) {\r
+ //\r
+ // Create iSCSIAttemptName Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_ATTEMPTT_NAME_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIAttemptName:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_ATTEMPT_NAME_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_ATTEMPT_NAME_VAR_OFFSET + ATTEMPT_NAME_SIZE * (Index - 1) * sizeof (CHAR16)),\r
+ StringToken,\r
+ StringToken,\r
+ EFI_IFR_FLAG_READ_ONLY,\r
+ 0,\r
+ 0,\r
+ ATTEMPT_NAME_SIZE,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIBootEnable Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_MODE_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIBootEnable:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_BOOTENABLE_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_BOOTENABLE_VAR_OFFSET + (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ 0,\r
+ 2,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIIpAddressType Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_IP_MODE_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIIpAddressType:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_ADDRESS_TYPE_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_ADDRESS_TYPE_VAR_OFFSET + (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ 0,\r
+ 2,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIConnectRetry Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_CONNECT_RETRY_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIConnectRetry:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_CONNECT_RETRY_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_CONNECT_RETRY_VAR_OFFSET + (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_1,\r
+ 0,\r
+ 16,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIConnectTimeout Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_CONNECT_TIMEOUT_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIConnectTimeout:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_CONNECT_TIMEOUT_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_CONNECT_TIMEOUT_VAR_OFFSET + 2 * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_2,\r
+ CONNECT_MIN_TIMEOUT,\r
+ CONNECT_MAX_TIMEOUT,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create ISID Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_ISID_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIISID:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_ISID_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_ISID_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ STRING_TOKEN (STR_ISCSI_ISID_HELP),\r
+ 0,\r
+ 0,\r
+ ISID_CONFIGURABLE_MIN_LEN,\r
+ ISID_CONFIGURABLE_STORAGE,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIInitiatorInfoViaDHCP Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_INITIATOR_VIA_DHCP_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIInitiatorInfoViaDHCP:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_INITIATOR_VIA_DHCP_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_INITIATOR_VIA_DHCP_VAR_OFFSET + (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ 1,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIInitiatorIpAddress Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_INITIATOR_IP_ADDRESS_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIInitiatorIpAddress:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_INITIATOR_IP_ADDRESS_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_INITIATOR_IP_ADDRESS_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ IP4_MIN_SIZE,\r
+ IP4_STR_MAX_SIZE,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIInitiatorNetmask Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_INITIATOR_NET_MASK_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIInitiatorNetmask:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_INITIATOR_NET_MASK_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_INITIATOR_NET_MASK_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ IP4_MIN_SIZE,\r
+ IP4_STR_MAX_SIZE,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIInitiatorGateway Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_INITIATOR_GATE_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIInitiatorGateway:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_INITIATOR_GATE_WAY_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_INITIATOR_GATE_WAY_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ IP4_MIN_SIZE,\r
+ IP4_STR_MAX_SIZE,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSITargetInfoViaDHCP Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_TARGET_VIA_DHCP_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSITargetInfoViaDHCP:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_TARGET_VIA_DHCP_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_TARGET_VIA_DHCP_VAR_OFFSET + (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ 1,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSITargetTcpPort Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_TARGET_TCP_PORT_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSITargetTcpPort:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_TARGET_TCP_PORT_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_TARGET_TCP_PORT_VAR_OFFSET + 2 * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ EFI_IFR_NUMERIC_SIZE_2,\r
+ TARGET_PORT_MIN_NUM,\r
+ TARGET_PORT_MAX_NUM,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSITargetName Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_TARGET_NAME_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSITargetName:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_TARGET_NAME_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_TARGET_NAME_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ ISCSI_NAME_IFR_MIN_SIZE,\r
+ ISCSI_NAME_IFR_MAX_SIZE,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSITargetIpAddress Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_TARGET_IP_ADDRESS_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSITargetIpAddress:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_TARGET_IP_ADDRESS_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_TARGET_IP_ADDRESS_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ IP_MIN_SIZE,\r
+ IP_STR_MAX_SIZE,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSILUN Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_LUN_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSILUN:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_LUN_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_LUN_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ LUN_MIN_SIZE,\r
+ LUN_MAX_SIZE,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIAuthenticationMethod Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_AUTHENTICATION_METHOD_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIAuthenticationMethod:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_AUTHENTICATION_METHOD_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_AUTHENTICATION_METHOD_VAR_OFFSET + (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ 1,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIChapType Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_CHARTYPE_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIChapType:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateNumericOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_CHARTYPE_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_CHARTYPE_VAR_OFFSET + (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ 1,\r
+ 0,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIChapUsername Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_CHAR_USER_NAME_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIChapUsername:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_CHAR_USER_NAME_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_CHAR_USER_NAME_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ ISCSI_CHAP_NAME_MAX_LEN,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIChapSecret Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_CHAR_SECRET_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIChapSecret:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_CHAR_SECRET_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_CHAR_SECRET_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ ISCSI_CHAP_SECRET_MIN_LEN,\r
+ ISCSI_CHAP_SECRET_MAX_LEN,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIReverseChapUsername Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_CHAR_REVERSE_USER_NAME_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIReverseChapUsername:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_CHAR_REVERSE_USER_NAME_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_CHAR_REVERSE_USER_NAME_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ 0,\r
+ ISCSI_CHAP_NAME_MAX_LEN,\r
+ NULL\r
+ );\r
+\r
+ //\r
+ // Create iSCSIReverseChapSecret Keyword.\r
+ //\r
+ UnicodeSPrint (StringId, sizeof (StringId), L"STR_ISCSI_CHAR_REVERSE_SECRET_PROMPT%d", Index);\r
+ StringToken = HiiSetString (\r
+ mCallbackInfo->RegisteredHandle,\r
+ 0,\r
+ StringId,\r
+ NULL\r
+ );\r
+ UnicodeSPrint (KeywordId, sizeof (KeywordId), L"iSCSIReverseChapSecret:%d", Index);\r
+ HiiSetString (mCallbackInfo->RegisteredHandle, StringToken, KeywordId, "x-UEFI-ns");\r
+ HiiCreateStringOpCode (\r
+ StartOpCodeHandle,\r
+ (EFI_QUESTION_ID) (ATTEMPT_CHAR_REVERSE_SECRET_QUESTION_ID + (Index - 1)),\r
+ CONFIGURATION_VARSTORE_ID,\r
+ (UINT16) (ATTEMPT_CHAR_REVERSE_SECRET_VAR_OFFSET + sizeof (KEYWORD_STR) * (Index - 1)),\r
+ StringToken,\r
+ StringToken,\r
+ 0,\r
+ 0,\r
+ ISCSI_CHAP_SECRET_MIN_LEN,\r
+ ISCSI_CHAP_SECRET_MAX_LEN,\r
+ NULL\r
+ );\r
+ }\r
+\r
+ Status = HiiUpdateForm (\r
+ mCallbackInfo->RegisteredHandle, // HII handle\r
+ &gIScsiConfigGuid, // Formset GUID\r
+ FORMID_ATTEMPT_FORM, // Form ID\r
+ StartOpCodeHandle, // Label for where to insert opcodes\r
+ EndOpCodeHandle // Replace data\r
+ );\r
+\r
+ HiiFreeOpCodeHandle (StartOpCodeHandle);\r
+ HiiFreeOpCodeHandle (EndOpCodeHandle);\r
+\r
+ return Status;\r
+}\r
+\r
+/**\r
+\r
+ Free the attempt configure data variable.\r
+\r
+**/\r
+VOID\r
+IScsiCleanAttemptVariable (\r
+ IN VOID\r
+)\r
+{\r
+ ISCSI_ATTEMPT_CONFIG_NVDATA *AttemptConfigData;\r
+ UINT8 *AttemptConfigOrder;\r
+ UINTN AttemptConfigOrderSize;\r
+ UINTN Index;\r
+\r
+ //\r
+ // Get the initialized attempt order.\r
+ //\r
+ AttemptConfigOrder = IScsiGetVariableAndSize (\r
+ L"InitialAttemptOrder",\r
+ &gIScsiConfigGuid,\r
+ &AttemptConfigOrderSize\r
+ );\r
+ if (AttemptConfigOrder == NULL || AttemptConfigOrderSize == 0) {\r
+ return;\r
+ }\r
+\r
+ for (Index = 1; Index < AttemptConfigOrderSize / sizeof (UINT8); Index++) {\r
+ UnicodeSPrint (\r
+ mPrivate->PortString,\r
+ (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
+ L"Attempt %d",\r
+ Index\r
+ );\r
+\r
+ GetVariable2 (\r
+ mPrivate->PortString,\r
+ &gEfiIScsiInitiatorNameProtocolGuid,\r
+ (VOID**)&AttemptConfigData,\r
+ NULL\r
+ );\r
+\r
+ if (AttemptConfigData != NULL) {\r
+ gRT->SetVariable (\r
+ mPrivate->PortString,\r
+ &gEfiIScsiInitiatorNameProtocolGuid,\r
+ 0,\r
+ 0,\r
+ NULL\r
+ );\r
+ }\r
+ }\r
+ return;\r
+}\r