+++ /dev/null
-/** @file\r
-\r
- Implements get/set firmware volume attributes.\r
-\r
- Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>\r
-\r
- SPDX-License-Identifier: BSD-2-Clause-Patent\r
-\r
-**/\r
-\r
-#include "FwVolDriver.h"\r
-\r
-/**\r
- Retrieves attributes, insures positive polarity of attribute bits, returns\r
- resulting attributes in output parameter.\r
-\r
- @param This Calling context\r
- @param Attributes output buffer which contains attributes\r
-\r
- @retval EFI_SUCCESS Successfully got volume attributes\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-FvGetVolumeAttributes (\r
- IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,\r
- OUT EFI_FV_ATTRIBUTES *Attributes\r
- )\r
-{\r
- EFI_STATUS Status;\r
- FV_DEVICE *FvDevice;\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb;\r
- EFI_FVB_ATTRIBUTES_2 FvbAttributes;\r
-\r
- FvDevice = FV_DEVICE_FROM_THIS (This);\r
- Fvb = FvDevice->Fvb;\r
-\r
- //\r
- // First get the Firmware Volume Block Attributes\r
- //\r
- Status = Fvb->GetAttributes (Fvb, &FvbAttributes);\r
- FvbAttributes &= 0xfffff0ff;\r
-\r
- *Attributes = FvbAttributes;\r
- *Attributes |= EFI_FV2_WRITE_POLICY_RELIABLE;\r
- return Status;\r
-}\r
-\r
-/**\r
- Sets current attributes for volume.\r
-\r
- @param This Calling context\r
- @param Attributes On input, FvAttributes is a pointer to\r
- an EFI_FV_ATTRIBUTES containing the\r
- desired firmware volume settings. On\r
- successful return, it contains the new\r
- settings of the firmware volume. On\r
- unsuccessful return, FvAttributes is not\r
- modified and the firmware volume\r
- settings are not changed.\r
-\r
- @retval EFI_SUCCESS The requested firmware volume attributes\r
- were set and the resulting\r
- EFI_FV_ATTRIBUTES is returned in\r
- FvAttributes.\r
- @retval EFI_ACCESS_DENIED Atrribute is locked down.\r
- @retval EFI_INVALID_PARAMETER Atrribute is not valid.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-FvSetVolumeAttributes (\r
- IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,\r
- IN OUT EFI_FV_ATTRIBUTES *Attributes\r
- )\r
-{\r
- EFI_STATUS Status;\r
- FV_DEVICE *FvDevice;\r
- EFI_FIRMWARE_VOLUME_BLOCK_PROTOCOL *Fvb;\r
- EFI_FVB_ATTRIBUTES_2 OldFvbAttributes;\r
- EFI_FVB_ATTRIBUTES_2 NewFvbAttributes;\r
- UINT64 NewStatus;\r
- UINT32 Capabilities;\r
-\r
- FvDevice = FV_DEVICE_FROM_THIS (This);\r
- Fvb = FvDevice->Fvb;\r
-\r
- //\r
- // First get the current Volume Attributes\r
- //\r
- Status = Fvb->GetAttributes (\r
- Fvb,\r
- &OldFvbAttributes\r
- );\r
-\r
- if ((OldFvbAttributes & EFI_FVB2_LOCK_STATUS) != 0) {\r
- return EFI_ACCESS_DENIED;\r
- }\r
- //\r
- // Only status attributes can be updated.\r
- //\r
- Capabilities = OldFvbAttributes & EFI_FVB2_CAPABILITIES;\r
- NewStatus = (*Attributes) & EFI_FVB2_STATUS;\r
-\r
- //\r
- // Test read disable\r
- //\r
- if ((Capabilities & EFI_FVB2_READ_DISABLED_CAP) == 0) {\r
- if ((NewStatus & EFI_FVB2_READ_STATUS) == 0) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- }\r
- //\r
- // Test read enable\r
- //\r
- if ((Capabilities & EFI_FVB2_READ_ENABLED_CAP) == 0) {\r
- if ((NewStatus & EFI_FVB2_READ_STATUS) != 0) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- }\r
- //\r
- // Test write disable\r
- //\r
- if ((Capabilities & EFI_FVB2_WRITE_DISABLED_CAP) == 0) {\r
- if ((NewStatus & EFI_FVB2_WRITE_STATUS) == 0) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- }\r
- //\r
- // Test write enable\r
- //\r
- if ((Capabilities & EFI_FVB2_WRITE_ENABLED_CAP) == 0) {\r
- if ((NewStatus & EFI_FVB2_WRITE_STATUS) != 0) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- }\r
- //\r
- // Test lock\r
- //\r
- if ((Capabilities & EFI_FVB2_LOCK_CAP) == 0) {\r
- if ((NewStatus & EFI_FVB2_LOCK_STATUS) != 0) {\r
- return EFI_INVALID_PARAMETER;\r
- }\r
- }\r
-\r
- NewFvbAttributes = OldFvbAttributes & (0xFFFFFFFF & (~EFI_FVB2_STATUS));\r
- NewFvbAttributes |= NewStatus;\r
- Status = Fvb->SetAttributes (\r
- Fvb,\r
- &NewFvbAttributes\r
- );\r
-\r
- if (EFI_ERROR (Status)) {\r
- return Status;\r
- }\r
-\r
- *Attributes = 0;\r
-\r
- This->GetVolumeAttributes (\r
- This,\r
- Attributes\r
- );\r
-\r
- return EFI_SUCCESS;\r
-}\r
-\r
-/**\r
- Return information of type InformationType for the requested firmware\r
- volume.\r
-\r
- @param This Pointer to EFI_FIRMWARE_VOLUME2_PROTOCOL.\r
- @param InformationType InformationType for requested.\r
- @param BufferSize On input, size of Buffer.On output, the amount of\r
- data returned in Buffer.\r
- @param Buffer A poniter to the data buffer to return.\r
-\r
- @return EFI_UNSUPPORTED Could not get.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-FvGetVolumeInfo (\r
- IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,\r
- IN CONST EFI_GUID *InformationType,\r
- IN OUT UINTN *BufferSize,\r
- OUT VOID *Buffer\r
- )\r
-{\r
- return EFI_UNSUPPORTED;\r
-}\r
-\r
-/**\r
- Set information with InformationType into the requested firmware volume.\r
-\r
- @param This Pointer to EFI_FIRMWARE_VOLUME2_PROTOCOL.\r
- @param InformationType InformationType for requested.\r
- @param BufferSize Size of Buffer data.\r
- @param Buffer A poniter to the data buffer to be set.\r
-\r
- @retval EFI_UNSUPPORTED Could not set.\r
-\r
-**/\r
-EFI_STATUS\r
-EFIAPI\r
-FvSetVolumeInfo (\r
- IN CONST EFI_FIRMWARE_VOLUME2_PROTOCOL *This,\r
- IN CONST EFI_GUID *InformationType,\r
- IN UINTN BufferSize,\r
- IN CONST VOID *Buffer\r
- )\r
-{\r
- return EFI_UNSUPPORTED;\r
-}\r