X-Git-Url: https://git.proxmox.com/?p=mirror_edk2.git;a=blobdiff_plain;f=NetworkPkg%2FIScsiDxe%2FIScsiConfig.c;h=eea73a8ff15361a05806ae364f8fe665459f6f82;hp=d347d8dc70c3c79afff7ddd625e81afe898b4c5c;hb=639a76d1912f8eb07e26b1a8f2393b682be65f2c;hpb=847240774030f9da79140a9d515a64ec817eb6eb diff --git a/NetworkPkg/IScsiDxe/IScsiConfig.c b/NetworkPkg/IScsiDxe/IScsiConfig.c index d347d8dc70..eea73a8ff1 100644 --- a/NetworkPkg/IScsiDxe/IScsiConfig.c +++ b/NetworkPkg/IScsiDxe/IScsiConfig.c @@ -1605,14 +1605,6 @@ IScsiConfigProcessDefault ( UINTN TotalNumber; UINTN Index; - // - // Free any attempt that is previously created but not saved to system. - // - if (mPrivate->NewAttempt != NULL) { - FreePool (mPrivate->NewAttempt); - mPrivate->NewAttempt = NULL; - } - // // Is User creating a new attempt? // @@ -1637,6 +1629,14 @@ IScsiConfigProcessDefault ( // return EFI_SUCCESS; } + + // + // Free any attempt that is previously created but not saved to system. + // + if (mPrivate->NewAttempt != NULL) { + FreePool (mPrivate->NewAttempt); + mPrivate->NewAttempt = NULL; + } if (NewAttempt) { // @@ -2103,37 +2103,75 @@ IScsiFormCallback ( return EFI_SUCCESS; } - if (Action == EFI_BROWSER_ACTION_CHANGING) { - if (This == NULL || Value == NULL || ActionRequest == NULL) { - return EFI_INVALID_PARAMETER; - } - - Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This); - + if ((Action != EFI_BROWSER_ACTION_CHANGING) && (Action != EFI_BROWSER_ACTION_CHANGED)) { // - // Retrieve uncommitted data from Browser + // All other type return unsupported. // + return EFI_UNSUPPORTED; + } - BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA); - IfrNvData = AllocateZeroPool (BufferSize); - if (IfrNvData == NULL) { - return EFI_OUT_OF_RESOURCES; - } - - IScsiName = (CHAR8 *) AllocateZeroPool (ISCSI_NAME_MAX_SIZE); - if (IScsiName == NULL) { - FreePool (IfrNvData); - return EFI_OUT_OF_RESOURCES; - } - - Status = EFI_SUCCESS; + if ((Value == NULL) || (ActionRequest == NULL)) { + return EFI_INVALID_PARAMETER; + } - ZeroMem (&OldIfrNvData, BufferSize); + Private = ISCSI_FORM_CALLBACK_INFO_FROM_FORM_CALLBACK (This); + + // + // Retrieve uncommitted data from Browser + // + + BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA); + IfrNvData = AllocateZeroPool (BufferSize); + if (IfrNvData == NULL) { + return EFI_OUT_OF_RESOURCES; + } + + IScsiName = (CHAR8 *) AllocateZeroPool (ISCSI_NAME_MAX_SIZE); + if (IScsiName == NULL) { + FreePool (IfrNvData); + return EFI_OUT_OF_RESOURCES; + } + + Status = EFI_SUCCESS; + + ZeroMem (&OldIfrNvData, BufferSize); + + HiiGetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData); + + CopyMem (&OldIfrNvData, IfrNvData, BufferSize); - HiiGetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData); + if (Action == EFI_BROWSER_ACTION_CHANGING) { + switch (QuestionId) { + case KEY_ADD_ATTEMPT: + Status = IScsiConfigAddAttempt (); + break; - CopyMem (&OldIfrNvData, IfrNvData, BufferSize); + case KEY_DELETE_ATTEMPT: + CopyMem ( + OldIfrNvData.DeleteAttemptList, + IfrNvData->DeleteAttemptList, + sizeof (IfrNvData->DeleteAttemptList) + ); + Status = IScsiConfigDisplayDeleteAttempts (IfrNvData); + break; + case KEY_ORDER_ATTEMPT_CONFIG: + // + // Order the attempt according to user input. + // + CopyMem ( + OldIfrNvData.DynamicOrderedList, + IfrNvData->DynamicOrderedList, + sizeof (IfrNvData->DynamicOrderedList) + ); + IScsiConfigDisplayOrderAttempts (); + break; + + default: + Status = IScsiConfigProcessDefault (QuestionId, IfrNvData); + break; + } + } else if (Action == EFI_BROWSER_ACTION_CHANGED) { switch (QuestionId) { case KEY_INITIATOR_NAME: UnicodeStrToAsciiStr (IfrNvData->InitiatorName, IScsiName); @@ -2151,54 +2189,34 @@ IScsiFormCallback ( *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY; break; + case KEY_ATTEMPT_NAME: + if (StrLen (IfrNvData->AttemptName) > ATTEMPT_NAME_SIZE) { + CopyMem (AttemptName, IfrNvData->AttemptName, ATTEMPT_NAME_SIZE * sizeof (CHAR16)); + CopyMem (&AttemptName[ATTEMPT_NAME_SIZE], L"...", 4 * sizeof (CHAR16)); + } else { + CopyMem ( + AttemptName, + IfrNvData->AttemptName, + (StrLen (IfrNvData->AttemptName) + 1) * sizeof (CHAR16) + ); + } - case KEY_ADD_ATTEMPT: - Status = IScsiConfigAddAttempt (); - break; + UnicodeStrToAsciiStr (IfrNvData->AttemptName, Private->Current->AttemptName); - case KEY_DELETE_ATTEMPT: - CopyMem ( - OldIfrNvData.DeleteAttemptList, - IfrNvData->DeleteAttemptList, - sizeof (IfrNvData->DeleteAttemptList) - ); - Status = IScsiConfigDisplayDeleteAttempts (IfrNvData); - break; + IScsiConfigUpdateAttempt (); - case KEY_SAVE_DELETE_ATTEMPT: - // - // Delete the Attempt Order from NVR - // - Status = IScsiConfigDeleteAttempts (IfrNvData); + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY; + break; + + case KEY_SAVE_ATTEMPT_CONFIG: + Status = IScsiConvertIfrNvDataToAttemptConfigData (IfrNvData, Private->Current); if (EFI_ERROR (Status)) { break; } - IScsiConfigUpdateAttempt (); *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY; break; - case KEY_IGNORE_DELETE_ATTEMPT: - CopyMem ( - IfrNvData->DeleteAttemptList, - OldIfrNvData.DeleteAttemptList, - sizeof (IfrNvData->DeleteAttemptList) - ); - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD; - break; - - case KEY_ORDER_ATTEMPT_CONFIG: - // - // Order the attempt according to user input. - // - CopyMem ( - OldIfrNvData.DynamicOrderedList, - IfrNvData->DynamicOrderedList, - sizeof (IfrNvData->DynamicOrderedList) - ); - IScsiConfigDisplayOrderAttempts (); - break; - case KEY_SAVE_ORDER_CHANGES: // // Sync the Attempt Order to NVR. @@ -2209,7 +2227,7 @@ IScsiFormCallback ( } IScsiConfigUpdateAttempt (); - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY; + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; break; case KEY_IGNORE_ORDER_CHANGES: @@ -2218,26 +2236,29 @@ IScsiFormCallback ( OldIfrNvData.DynamicOrderedList, sizeof (IfrNvData->DynamicOrderedList) ); - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD; + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; break; - case KEY_ATTEMPT_NAME: - if (StrLen (IfrNvData->AttemptName) > ATTEMPT_NAME_SIZE) { - CopyMem (AttemptName, IfrNvData->AttemptName, ATTEMPT_NAME_SIZE * sizeof (CHAR16)); - CopyMem (&AttemptName[ATTEMPT_NAME_SIZE], L"...", 4 * sizeof (CHAR16)); - } else { - CopyMem ( - AttemptName, - IfrNvData->AttemptName, - (StrLen (IfrNvData->AttemptName) + 1) * sizeof (CHAR16) - ); + case KEY_SAVE_DELETE_ATTEMPT: + // + // Delete the Attempt Order from NVR + // + Status = IScsiConfigDeleteAttempts (IfrNvData); + if (EFI_ERROR (Status)) { + break; } - UnicodeStrToAsciiStr (IfrNvData->AttemptName, Private->Current->AttemptName); - IScsiConfigUpdateAttempt (); + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; + break; - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY; + case KEY_IGNORE_DELETE_ATTEMPT: + CopyMem ( + IfrNvData->DeleteAttemptList, + OldIfrNvData.DeleteAttemptList, + sizeof (IfrNvData->DeleteAttemptList) + ); + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; break; case KEY_IP_MODE: @@ -2409,38 +2430,23 @@ IScsiFormCallback ( break; - case KEY_SAVE_ATTEMPT_CONFIG: - Status = IScsiConvertIfrNvDataToAttemptConfigData (IfrNvData, Private->Current); - if (EFI_ERROR (Status)) { - break; - } - - *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_APPLY; - break; - default: - Status = IScsiConfigProcessDefault (QuestionId, IfrNvData); break; } + } - if (!EFI_ERROR (Status)) { - // - // Pass changed uncommitted data back to Form Browser. - // - BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA); - HiiSetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData, NULL); - } - - FreePool (IfrNvData); - FreePool (IScsiName); - - return Status; + if (!EFI_ERROR (Status)) { + // + // Pass changed uncommitted data back to Form Browser. + // + BufferSize = sizeof (ISCSI_CONFIG_IFR_NVDATA); + HiiSetBrowserData (NULL, NULL, BufferSize, (UINT8 *) IfrNvData, NULL); } - // - // All other action return unsupported. - // - return EFI_UNSUPPORTED; + FreePool (IfrNvData); + FreePool (IScsiName); + + return Status; }