}\r
}\r
\r
- //\r
- // Free attempt is created but not saved to system.\r
- //\r
- if (mPrivate->NewAttempt != NULL) {\r
- FreePool (mPrivate->NewAttempt);\r
- mPrivate->NewAttempt = NULL;\r
+ return EFI_SUCCESS;\r
+}\r
+\r
+/**\r
+ Create and initialize the Attempts.\r
+\r
+ @param[in] AttemptNum The number of Attempts will be created.\r
+\r
+ @retval EFI_SUCCESS The Attempts have been created successfully.\r
+ @retval Others Failed to create the Attempt.\r
+\r
+**/\r
+EFI_STATUS\r
+IScsiCreateAttempts (\r
+ IN UINTN AttemptNum\r
+)\r
+{\r
+ ISCSI_ATTEMPT_CONFIG_NVDATA *AttemptConfigData;\r
+ ISCSI_SESSION_CONFIG_NVDATA *ConfigData;\r
+ UINT8 *AttemptConfigOrder;\r
+ UINTN AttemptConfigOrderSize;\r
+ UINT8 *AttemptOrderTmp;\r
+ UINTN TotalNumber;\r
+ UINT8 Index;\r
+ EFI_STATUS Status;\r
+\r
+ for (Index = 1; Index <= AttemptNum; Index ++) {\r
+ //\r
+ // Get the initialized attempt order. This is used to essure creating attempts by order.\r
+ //\r
+ AttemptConfigOrder = IScsiGetVariableAndSize (\r
+ L"InitialAttemptOrder",\r
+ &gIScsiConfigGuid,\r
+ &AttemptConfigOrderSize\r
+ );\r
+ TotalNumber = AttemptConfigOrderSize / sizeof (UINT8);\r
+ if (TotalNumber == AttemptNum) {\r
+ Status = EFI_SUCCESS;\r
+ break;\r
+ }\r
+ TotalNumber++;\r
+\r
+ //\r
+ // Append the new created attempt to the end.\r
+ //\r
+ AttemptOrderTmp = AllocateZeroPool (TotalNumber * sizeof (UINT8));\r
+ if (AttemptOrderTmp == NULL) {\r
+ if (AttemptConfigOrder != NULL) {\r
+ FreePool (AttemptConfigOrder);\r
+ }\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+\r
+ if (AttemptConfigOrder != NULL) {\r
+ CopyMem (AttemptOrderTmp, AttemptConfigOrder, AttemptConfigOrderSize);\r
+ FreePool (AttemptConfigOrder);\r
+ }\r
+\r
+ AttemptOrderTmp[TotalNumber - 1] = Index;\r
+ AttemptConfigOrder = AttemptOrderTmp;\r
+ AttemptConfigOrderSize = TotalNumber * sizeof (UINT8);\r
+\r
+ Status = gRT->SetVariable (\r
+ L"InitialAttemptOrder",\r
+ &gIScsiConfigGuid,\r
+ EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_NON_VOLATILE,\r
+ AttemptConfigOrderSize,\r
+ AttemptConfigOrder\r
+ );\r
+ FreePool (AttemptConfigOrder);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
+\r
+ //\r
+ // Create new Attempt\r
+ //\r
+ AttemptConfigData = AllocateZeroPool (sizeof (ISCSI_ATTEMPT_CONFIG_NVDATA));\r
+ if (AttemptConfigData == NULL) {\r
+ return EFI_OUT_OF_RESOURCES;\r
+ }\r
+ ConfigData = &AttemptConfigData->SessionConfigData;\r
+ ConfigData->TargetPort = ISCSI_WELL_KNOWN_PORT;\r
+ ConfigData->ConnectTimeout = CONNECT_DEFAULT_TIMEOUT;\r
+ ConfigData->ConnectRetryCount = CONNECT_MIN_RETRY;\r
+\r
+ AttemptConfigData->AuthenticationType = ISCSI_AUTH_TYPE_CHAP;\r
+ AttemptConfigData->AuthConfigData.CHAP.CHAPType = ISCSI_CHAP_UNI;\r
+ //\r
+ // Configure the Attempt index and set variable.\r
+ //\r
+ AttemptConfigData->AttemptConfigIndex = Index;\r
+\r
+ //\r
+ // Set the attempt name according to the order.\r
+ //\r
+ UnicodeSPrint (\r
+ mPrivate->PortString,\r
+ (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
+ L"Attempt %d",\r
+ (UINTN) AttemptConfigData->AttemptConfigIndex\r
+ );\r
+ UnicodeStrToAsciiStrS (mPrivate->PortString, AttemptConfigData->AttemptName, ATTEMPT_NAME_SIZE);\r
+\r
+ Status = gRT->SetVariable (\r
+ mPrivate->PortString,\r
+ &gEfiIScsiInitiatorNameProtocolGuid,\r
+ ISCSI_CONFIG_VAR_ATTR,\r
+ sizeof (ISCSI_ATTEMPT_CONFIG_NVDATA),\r
+ AttemptConfigData\r
+ );\r
+ FreePool (AttemptConfigData);\r
+ if (EFI_ERROR (Status)) {\r
+ return Status;\r
+ }\r
}\r
\r
return EFI_SUCCESS;\r
}\r
\r
+/**\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
+ StringToken,\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_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_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_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_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
\r
/**\r
Get the recorded NIC info from global structure by the Index.\r
UINTN HwAddressSize;\r
UINT16 VlanId;\r
CHAR16 MacString[ISCSI_MAX_MAC_STRING_LEN];\r
+ CHAR16 AttemptMacString[ISCSI_MAX_MAC_STRING_LEN];\r
CHAR16 AttemptName[ISCSI_NAME_IFR_MAX_SIZE];\r
\r
AttemptConfigOrder = IScsiGetVariableAndSize (\r
UnicodeSPrint (\r
AttemptName,\r
(UINTN) 128,\r
- L"%s%d",\r
- MacString,\r
+ L"Attempt %d",\r
(UINTN) AttemptConfigOrder[Index]\r
);\r
Status = GetVariable2 (\r
FreePool (AttemptTmp);\r
continue;\r
}\r
- \r
+\r
+ AsciiStrToUnicodeStrS (AttemptTmp->MacString, AttemptMacString, sizeof (AttemptMacString) / sizeof (AttemptMacString[0]));\r
+\r
+ if (AttemptTmp->Actived == ISCSI_ACTIVE_DISABLED || StrCmp (MacString, AttemptMacString)) {\r
+ continue;\r
+ }\r
+\r
if(AttemptTmp->SessionConfigData.IpMode == IP_MODE_AUTOCONFIG ||\r
AttemptTmp->SessionConfigData.InitiatorInfoFromDhcp == TRUE ||\r
AttemptTmp->SessionConfigData.TargetInfoFromDhcp == TRUE) { \r
{\r
EFI_STATUS Status;\r
CHAR16 MacString[ISCSI_MAX_MAC_STRING_LEN];\r
+ CHAR16 AttemptMacString[ISCSI_MAX_MAC_STRING_LEN];\r
UINTN Index;\r
ISCSI_NIC_INFO *NicInfo;\r
ISCSI_ATTEMPT_CONFIG_NVDATA *AttemptConfigData;\r
//\r
// Refresh the state of this attempt to NVR.\r
//\r
- AsciiStrToUnicodeStrS (AttemptTmp->MacString, MacString, ARRAY_SIZE (MacString));\r
UnicodeSPrint (\r
mPrivate->PortString,\r
(UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
- L"%s%d",\r
- MacString,\r
+ L"Attempt %d",\r
(UINTN) AttemptTmp->AttemptConfigIndex\r
);\r
\r
//\r
// Refresh the state of this attempt to NVR.\r
//\r
- AsciiStrToUnicodeStrS (AttemptTmp->MacString, MacString, ARRAY_SIZE (MacString));\r
UnicodeSPrint (\r
mPrivate->PortString,\r
(UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
- L"%s%d",\r
- MacString,\r
+ L"Attempt %d",\r
(UINTN) AttemptTmp->AttemptConfigIndex\r
);\r
\r
IScsiMacAddrToStr (&NicInfo->PermanentAddress, NicInfo->HwAddressSize, NicInfo->VlanId, MacString);\r
UnicodeSPrint (\r
mPrivate->PortString,\r
- (UINTN) 128,\r
- L"%s%d",\r
- MacString,\r
+ (UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
+ L"Attempt %d",\r
(UINTN) AttemptConfigOrder[Index]\r
);\r
\r
(VOID**)&AttemptConfigData,\r
NULL\r
);\r
+ AsciiStrToUnicodeStrS (AttemptConfigData->MacString, AttemptMacString, sizeof (AttemptMacString) / sizeof (AttemptMacString[0]));\r
\r
- if (AttemptConfigData == NULL) {\r
+ if (AttemptConfigData == NULL || AttemptConfigData->Actived == ISCSI_ACTIVE_DISABLED ||\r
+ StrCmp (MacString, AttemptMacString)) {\r
continue;\r
}\r
\r
//\r
// Refresh the state of this attempt to NVR.\r
//\r
- AsciiStrToUnicodeStrS (AttemptConfigData->MacString, MacString, ARRAY_SIZE (MacString));\r
UnicodeSPrint (\r
mPrivate->PortString,\r
(UINTN) ISCSI_NAME_IFR_MAX_SIZE,\r
- L"%s%d",\r
- MacString,\r
+ L"Attempt %d",\r
(UINTN) AttemptConfigData->AttemptConfigIndex\r
);\r
\r