2 UEFI variable support functions for Firmware Management Protocol based
5 Copyright (c) 2016, Microsoft Corporation. All rights reserved.<BR>
6 Copyright (c) 2018 - 2019, Intel Corporation. All rights reserved.<BR>
8 SPDX-License-Identifier: BSD-2-Clause-Patent
13 #include "VariableSupport.h"
16 Retrieve the value of a 32-bit UEFI Variable specified by VariableName and
17 a GUID of gEfiCallerIdGuid.
19 @param[in] VariableName Pointer to the UEFI Variable name to retrieve.
20 @param[out] Valid Set to TRUE if UEFI Variable is present and the size
21 of the UEFI Variable value is 32-bits. Otherwise
23 @param[out] Value If Valid is set to TRUE, then the 32-bit value of
24 the UEFI Variable. Otherwise 0.
29 IN CHAR16
*VariableName
,
42 Status
= GetVariable2 (
48 if (!EFI_ERROR (Status
) && Size
== sizeof (*Value
) && Buffer
!= NULL
) {
58 Delete the UEFI Variable with name specified by VariableName and GUID of
59 gEfiCallerIdGuid. If the variable can not be deleted, then print a
62 @param[in] VariableName Pointer to the UEFI Variable name to delete.
67 IN CHAR16
*VariableName
74 GetFmpVariable (VariableName
, &Valid
, &Value
);
76 Status
= gRT
->SetVariable (VariableName
, &gEfiCallerIdGuid
, 0, 0, NULL
);
77 if (EFI_ERROR (Status
)) {
78 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to delete variable %s. Status = %r\n", mImageIdName
, VariableName
, Status
));
80 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Deleted variable %s\n", mImageIdName
, VariableName
));
86 Retrieve the FMP Controller State UEFI Variable value. Return NULL if
87 the variable does not exist or if the size of the UEFI Variable is not the
88 size of FMP_CONTROLLER_STATE. The buffer for the UEFI Variable value
89 if allocated using the UEFI Boot Service AllocatePool().
91 @param[in] Private Private context structure for the managed controller.
93 @return Pointer to the allocated FMP Controller State. Returns NULL
94 if the variable does not exist or is a different size than expected.
97 FMP_CONTROLLER_STATE
*
98 GetFmpControllerState (
99 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
103 FMP_CONTROLLER_STATE
*FmpControllerState
;
106 FmpControllerState
= NULL
;
108 Status
= GetVariable2 (
109 Private
->FmpStateVariableName
,
111 (VOID
**)&FmpControllerState
,
114 if (EFI_ERROR (Status
) || FmpControllerState
== NULL
) {
115 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to get the controller state. Status = %r\n", mImageIdName
, Status
));
117 if (Size
== sizeof (*FmpControllerState
)) {
118 return FmpControllerState
;
120 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Getting controller state returned a size different than expected. Size = 0x%x\n", mImageIdName
, Size
));
122 if (FmpControllerState
!= NULL
) {
123 FreePool (FmpControllerState
);
129 Generates a Null-terminated Unicode string UEFI Variable name from a base name
130 and a hardware instance. If the hardware instance value is 0, then the base
131 name is returned. If the hardware instance value is non-zero, then the 64-bit
132 hardware instance value is converted to a 16 character hex string and appended
133 to base name. The UEFI Variable name returned is allocated using the UEFI
134 Boot Service AllocatePool().
136 @param[in] HardwareInstance 64-bit hardware instance value.
137 @param[in] BaseVariableName Null-terminated Unicode string that is the base
138 name of the UEFI Variable.
140 @return Pointer to the allocated UEFI Variable name. Returns NULL if the
141 UEFI Variable can not be allocated.
145 GenerateFmpVariableName (
146 IN UINT64 HardwareInstance
,
147 IN CHAR16
*BaseVariableName
150 CHAR16
*VariableName
;
152 VariableName
= CatSPrint (NULL
, BaseVariableName
);
153 if (VariableName
== NULL
) {
154 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to generate variable name %s.\n", mImageIdName
, BaseVariableName
));
157 if (HardwareInstance
== 0) {
160 VariableName
= CatSPrint (VariableName
, L
"%016lx", HardwareInstance
);
161 if (VariableName
== NULL
) {
162 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to generate variable name %s.\n", mImageIdName
, BaseVariableName
));
168 Generate the names of the UEFI Variables used to store state information for
169 a managed controller. The UEFI Variables names are a combination of a base
170 name and an optional hardware instance value as a 16 character hex value. If
171 the hardware instance value is 0, then the 16 character hex value is not
172 included. These storage for the UEFI Variable names are allocated using the
173 UEFI Boot Service AllocatePool() and the pointers are stored in the Private.
174 The following are examples of variable names produces for hardware instance
175 value 0 and value 0x1234567812345678.
183 FmpVersion1234567812345678
184 FmpLsv1234567812345678
185 LastAttemptStatus1234567812345678
186 LastAttemptVersion1234567812345678
187 FmpState1234567812345678
189 @param[in,out] Private Private context structure for the managed controller.
192 GenerateFmpVariableNames (
193 IN OUT FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
198 FMP_CONTROLLER_STATE FmpControllerState
;
200 if (Private
->VersionVariableName
!= NULL
) {
201 FreePool (Private
->VersionVariableName
);
203 if (Private
->LsvVariableName
!= NULL
) {
204 FreePool (Private
->LsvVariableName
);
206 if (Private
->LastAttemptStatusVariableName
!= NULL
) {
207 FreePool (Private
->LastAttemptStatusVariableName
);
209 if (Private
->LastAttemptVersionVariableName
!= NULL
) {
210 FreePool (Private
->LastAttemptVersionVariableName
);
212 if (Private
->FmpStateVariableName
!= NULL
) {
213 FreePool (Private
->FmpStateVariableName
);
216 Private
->VersionVariableName
= GenerateFmpVariableName (
217 Private
->Descriptor
.HardwareInstance
,
220 Private
->LsvVariableName
= GenerateFmpVariableName (
221 Private
->Descriptor
.HardwareInstance
,
224 Private
->LastAttemptStatusVariableName
= GenerateFmpVariableName (
225 Private
->Descriptor
.HardwareInstance
,
226 VARNAME_LASTATTEMPTSTATUS
228 Private
->LastAttemptVersionVariableName
= GenerateFmpVariableName (
229 Private
->Descriptor
.HardwareInstance
,
230 VARNAME_LASTATTEMPTVERSION
232 Private
->FmpStateVariableName
= GenerateFmpVariableName (
233 Private
->Descriptor
.HardwareInstance
,
237 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->VersionVariableName
));
238 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->LsvVariableName
));
239 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->LastAttemptStatusVariableName
));
240 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->LastAttemptVersionVariableName
));
241 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Variable %g %s\n", mImageIdName
, &gEfiCallerIdGuid
, Private
->FmpStateVariableName
));
243 Buffer
= GetFmpControllerState (Private
);
244 if (Buffer
!= NULL
) {
246 // FMP Controller State was found with correct size.
247 // Delete old variables if they exist.
250 DeleteFmpVariable (Private
->VersionVariableName
);
251 DeleteFmpVariable (Private
->LsvVariableName
);
252 DeleteFmpVariable (Private
->LastAttemptStatusVariableName
);
253 DeleteFmpVariable (Private
->LastAttemptVersionVariableName
);
258 // FMP Controller State was either not found or is wrong size.
259 // Create a new FMP Controller State variable with the correct size.
261 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Create controller state\n", mImageIdName
));
263 Private
->VersionVariableName
,
264 &FmpControllerState
.VersionValid
,
265 &FmpControllerState
.Version
268 Private
->LsvVariableName
,
269 &FmpControllerState
.LsvValid
,
270 &FmpControllerState
.Lsv
273 Private
->LastAttemptStatusVariableName
,
274 &FmpControllerState
.LastAttemptStatusValid
,
275 &FmpControllerState
.LastAttemptStatus
278 Private
->LastAttemptVersionVariableName
,
279 &FmpControllerState
.LastAttemptVersionValid
,
280 &FmpControllerState
.LastAttemptVersion
282 Status
= gRT
->SetVariable (
283 Private
->FmpStateVariableName
,
285 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
286 sizeof (FmpControllerState
),
289 if (EFI_ERROR (Status
)) {
291 // Failed to create FMP Controller State. In this case, do not
292 // delete the individual variables. They can be used again on next boot
293 // to create the FMP Controller State.
295 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to create controller state. Status = %r\n", mImageIdName
, Status
));
297 DeleteFmpVariable (Private
->VersionVariableName
);
298 DeleteFmpVariable (Private
->LsvVariableName
);
299 DeleteFmpVariable (Private
->LastAttemptStatusVariableName
);
300 DeleteFmpVariable (Private
->LastAttemptVersionVariableName
);
305 Returns the value used to fill in the Version field of the
306 EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
307 service of the Firmware Management Protocol. The value is read from a UEFI
308 variable. If the UEFI variables does not exist, then a default version value
311 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
313 @param[in] Private Private context structure for the managed controller.
315 @return The version of the firmware image in the firmware device.
318 GetVersionFromVariable (
319 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
322 FMP_CONTROLLER_STATE
*FmpControllerState
;
325 Value
= DEFAULT_VERSION
;
326 FmpControllerState
= GetFmpControllerState (Private
);
327 if (FmpControllerState
!= NULL
) {
328 if (FmpControllerState
->VersionValid
) {
329 Value
= FmpControllerState
->Version
;
330 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Get variable %g %s Version %08x\n",
333 Private
->FmpStateVariableName
,
337 FreePool (FmpControllerState
);
343 Returns the value used to fill in the LowestSupportedVersion field of the
344 EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
345 service of the Firmware Management Protocol. The value is read from a UEFI
346 variable. If the UEFI variables does not exist, then a default lowest
347 supported version value is returned.
349 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
351 @param[in] Private Private context structure for the managed controller.
353 @return The lowest supported version of the firmware image in the firmware
357 GetLowestSupportedVersionFromVariable (
358 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
361 FMP_CONTROLLER_STATE
*FmpControllerState
;
364 Value
= DEFAULT_LOWESTSUPPORTEDVERSION
;
365 FmpControllerState
= GetFmpControllerState (Private
);
366 if (FmpControllerState
!= NULL
) {
367 if (FmpControllerState
->LsvValid
) {
368 Value
= FmpControllerState
->Lsv
;
369 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Get variable %g %s LowestSupportedVersion %08x\n",
372 Private
->FmpStateVariableName
,
376 FreePool (FmpControllerState
);
382 Returns the value used to fill in the LastAttemptStatus field of the
383 EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
384 service of the Firmware Management Protocol. The value is read from a UEFI
385 variable. If the UEFI variables does not exist, then a default last attempt
386 status value is returned.
388 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
390 @param[in] Private Private context structure for the managed controller.
392 @return The last attempt status value for the most recent capsule update.
395 GetLastAttemptStatusFromVariable (
396 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
399 FMP_CONTROLLER_STATE
*FmpControllerState
;
402 Value
= DEFAULT_LASTATTEMPTSTATUS
;
403 FmpControllerState
= GetFmpControllerState (Private
);
404 if (FmpControllerState
!= NULL
) {
405 if (FmpControllerState
->LastAttemptStatusValid
) {
406 Value
= FmpControllerState
->LastAttemptStatus
;
407 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Get variable %g %s LastAttemptStatus %08x\n",
410 Private
->FmpStateVariableName
,
414 FreePool (FmpControllerState
);
420 Returns the value used to fill in the LastAttemptVersion field of the
421 EFI_FIRMWARE_IMAGE_DESCRIPTOR structure that is returned by the GetImageInfo()
422 service of the Firmware Management Protocol. The value is read from a UEFI
423 variable. If the UEFI variables does not exist, then a default last attempt
424 version value is returned.
426 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
428 @param[in] Private Private context structure for the managed controller.
430 @return The last attempt version value for the most recent capsule update.
433 GetLastAttemptVersionFromVariable (
434 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
437 FMP_CONTROLLER_STATE
*FmpControllerState
;
440 Value
= DEFAULT_LASTATTEMPTVERSION
;
441 FmpControllerState
= GetFmpControllerState (Private
);
442 if (FmpControllerState
!= NULL
) {
443 if (FmpControllerState
->LastAttemptVersionValid
) {
444 Value
= FmpControllerState
->LastAttemptVersion
;
445 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Get variable %g %s LastAttemptVersion %08x\n",
448 Private
->FmpStateVariableName
,
452 FreePool (FmpControllerState
);
458 Saves the version current of the firmware image in the firmware device to a
461 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
463 @param[in] Private Private context structure for the managed controller.
464 @param[in] Version The version of the firmware image in the firmware device.
467 SetVersionInVariable (
468 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
,
473 FMP_CONTROLLER_STATE
*FmpControllerState
;
476 FmpControllerState
= GetFmpControllerState (Private
);
477 if (FmpControllerState
== NULL
) {
479 // Can not update value if FMP Controller State does not exist.
480 // This variable is guaranteed to be created by GenerateFmpVariableNames().
486 if (!FmpControllerState
->VersionValid
) {
489 if (FmpControllerState
->Version
!= Version
) {
493 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): No need to update controller state. Same value as before.\n", mImageIdName
));
495 FmpControllerState
->VersionValid
= TRUE
;
496 FmpControllerState
->Version
= Version
;
497 Status
= gRT
->SetVariable (
498 Private
->FmpStateVariableName
,
500 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
501 sizeof (*FmpControllerState
),
504 if (EFI_ERROR (Status
)) {
505 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to update controller state. Status = %r\n", mImageIdName
, Status
));
507 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Set variable %g %s Version %08x\n",
510 Private
->FmpStateVariableName
,
515 FreePool (FmpControllerState
);
519 Saves the lowest supported version current of the firmware image in the
520 firmware device to a UEFI variable.
522 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
524 @param[in] Private Private context structure for the managed
526 @param[in] LowestSupportedVersion The lowest supported version of the
527 firmware image in the firmware device.
530 SetLowestSupportedVersionInVariable (
531 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
,
532 IN UINT32 LowestSupportedVersion
536 FMP_CONTROLLER_STATE
*FmpControllerState
;
539 FmpControllerState
= GetFmpControllerState (Private
);
540 if (FmpControllerState
== NULL
) {
542 // Can not update value if FMP Controller State does not exist.
543 // This variable is guaranteed to be created by GenerateFmpVariableNames().
549 if (!FmpControllerState
->LsvValid
) {
552 if (FmpControllerState
->Lsv
< LowestSupportedVersion
) {
556 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): No need to update controller state. Same value as before.\n", mImageIdName
));
558 FmpControllerState
->LsvValid
= TRUE
;
559 FmpControllerState
->Lsv
= LowestSupportedVersion
;
560 Status
= gRT
->SetVariable (
561 Private
->FmpStateVariableName
,
563 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
564 sizeof (*FmpControllerState
),
567 if (EFI_ERROR (Status
)) {
568 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to update controller state. Status = %r\n", mImageIdName
, Status
));
570 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Set variable %g %s LowestSupportedVersion %08x\n",
573 Private
->FmpStateVariableName
,
574 LowestSupportedVersion
578 FreePool (FmpControllerState
);
582 Saves the last attempt status value of the most recent FMP capsule update to a
585 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
587 @param[in] Private Private context structure for the managed
589 @param[in] LastAttemptStatus The last attempt status of the most recent FMP
593 SetLastAttemptStatusInVariable (
594 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
,
595 IN UINT32 LastAttemptStatus
599 FMP_CONTROLLER_STATE
*FmpControllerState
;
602 FmpControllerState
= GetFmpControllerState (Private
);
603 if (FmpControllerState
== NULL
) {
605 // Can not update value if FMP Controller State does not exist.
606 // This variable is guaranteed to be created by GenerateFmpVariableNames().
612 if (!FmpControllerState
->LastAttemptStatusValid
) {
615 if (FmpControllerState
->LastAttemptStatus
!= LastAttemptStatus
) {
619 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): No need to update controller state. Same value as before.\n", mImageIdName
));
621 FmpControllerState
->LastAttemptStatusValid
= TRUE
;
622 FmpControllerState
->LastAttemptStatus
= LastAttemptStatus
;
623 Status
= gRT
->SetVariable (
624 Private
->FmpStateVariableName
,
626 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
627 sizeof (*FmpControllerState
),
630 if (EFI_ERROR (Status
)) {
631 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to update controller state. Status = %r\n", mImageIdName
, Status
));
633 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Set variable %g %s LastAttemptStatus %08x\n",
636 Private
->FmpStateVariableName
,
641 FreePool (FmpControllerState
);
645 Saves the last attempt version value of the most recent FMP capsule update to
648 UEFI Variable accessed: GUID = gEfiCallerIdGuid, Name = L"FmpState"
650 @param[in] Private Private context structure for the managed
652 @param[in] LastAttemptVersion The last attempt version value of the most
653 recent FMP capsule update.
656 SetLastAttemptVersionInVariable (
657 IN FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
,
658 IN UINT32 LastAttemptVersion
662 FMP_CONTROLLER_STATE
*FmpControllerState
;
665 FmpControllerState
= GetFmpControllerState (Private
);
666 if (FmpControllerState
== NULL
) {
668 // Can not update value if FMP Controller State does not exist.
669 // This variable is guaranteed to be created by GenerateFmpVariableNames().
675 if (!FmpControllerState
->LastAttemptVersionValid
) {
678 if (FmpControllerState
->LastAttemptVersion
!= LastAttemptVersion
) {
682 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): No need to update controller state. Same value as before.\n", mImageIdName
));
684 FmpControllerState
->LastAttemptVersionValid
= TRUE
;
685 FmpControllerState
->LastAttemptVersion
= LastAttemptVersion
;
686 Status
= gRT
->SetVariable (
687 Private
->FmpStateVariableName
,
689 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
690 sizeof (*FmpControllerState
),
693 if (EFI_ERROR (Status
)) {
694 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to update controller state. Status = %r\n", mImageIdName
, Status
));
696 DEBUG ((DEBUG_INFO
, "FmpDxe(%s): Set variable %g %s LastAttemptVersion %08x\n",
699 Private
->FmpStateVariableName
,
704 FreePool (FmpControllerState
);
708 Attempts to lock a single UEFI Variable propagating the error state of the
709 first lock attempt that fails. Uses gEfiCallerIdGuid as the variable GUID.
711 @param[in] PreviousStatus The previous UEFI Variable lock attempt status.
712 @param[in] VariableLock The EDK II Variable Lock Protocol instance.
713 @param[in] VariableName The name of the UEFI Variable to lock.
715 @retval EFI_SUCCESS The UEFI Variable was locked and the previous variable
716 lock attempt also succeeded.
717 @retval Other The UEFI Variable could not be locked or the previous
718 variable lock attempt failed.
723 IN EFI_STATUS PreviousStatus
,
724 IN EDKII_VARIABLE_LOCK_PROTOCOL
*VariableLock
,
725 IN CHAR16
*VariableName
730 Status
= VariableLock
->RequestToLock (
735 if (!EFI_ERROR (Status
)) {
736 return PreviousStatus
;
739 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to lock variable %g %s. Status = %r\n",
746 if (EFI_ERROR (PreviousStatus
)) {
747 return PreviousStatus
;
753 Locks all the UEFI Variables that use gEfiCallerIdGuid of the currently
756 @param[in] Private Private context structure for the managed controller.
758 @retval EFI_SUCCESS All UEFI variables are locked.
759 @retval EFI_UNSUPPORTED Variable Lock Protocol not found.
760 @retval Other One of the UEFI variables could not be locked.
763 LockAllFmpVariables (
764 FIRMWARE_MANAGEMENT_PRIVATE_DATA
*Private
768 EDKII_VARIABLE_LOCK_PROTOCOL
*VariableLock
;
771 Status
= gBS
->LocateProtocol (
772 &gEdkiiVariableLockProtocolGuid
,
774 (VOID
**)&VariableLock
776 if (EFI_ERROR (Status
) || VariableLock
== NULL
) {
777 DEBUG ((DEBUG_ERROR
, "FmpDxe(%s): Failed to locate Variable Lock Protocol (%r).\n", mImageIdName
, Status
));
778 return EFI_UNSUPPORTED
;
781 Status
= EFI_SUCCESS
;
782 Status
= LockFmpVariable (Status
, VariableLock
, Private
->VersionVariableName
);
783 Status
= LockFmpVariable (Status
, VariableLock
, Private
->LsvVariableName
);
784 Status
= LockFmpVariable (Status
, VariableLock
, Private
->LastAttemptStatusVariableName
);
785 Status
= LockFmpVariable (Status
, VariableLock
, Private
->LastAttemptVersionVariableName
);
786 Status
= LockFmpVariable (Status
, VariableLock
, Private
->FmpStateVariableName
);