/** @file
  Variable Write Architectural Protocol as defined in PI Specification VOLUME 2 DXE

  This provides the services required to set nonvolatile environment variables.
  This protocol must be produced by a runtime DXE driver and may be consumed only
  by the DXE Foundation.

  The DXE driver that produces this protocol must be a runtime driver. This driver
  may update the SetVariable() field of the UEFI Runtime Services Table.

  After the UEFI Runtime Services Table has been initialized, the driver must
  install the EFI_VARIABLE_WRITE_ARCH_PROTOCOL_GUID on a new handle with a NULL
  interface pointer. The installation of this protocol informs the DXE Foundation
  that the write services for nonvolatile environment variables are now available
  and that the DXE Foundation must update the 32-bit CRC of the UEFI Runtime Services
  Table. The full complement of environment variable services are not available
  until both this protocol and EFI_VARIABLE_ARCH_PROTOCOL are installed. DXE drivers
  that require read-only access or read/write access to volatile environment variables
  must have the EFI_VARIABLE_WRITE_ARCH_PROTOCOL in their dependency expressions.
  DXE drivers that require write access to nonvolatile environment variables must
  have this architectural protocol in their dependency expressions.

  Copyright (c) 2006 - 2018, Intel Corporation. All rights reserved.<BR>
  SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef __ARCH_PROTOCOL_VARIABLE_WRITE_ARCH_H__
#define __ARCH_PROTOCOL_VARIABLE_WRITE_ARCH_H__

///
/// Global ID for the Variable Write Architectural Protocol
///
#define EFI_VARIABLE_WRITE_ARCH_PROTOCOL_GUID \
  { 0x6441f818, 0x6362, 0x4e44, {0xb5, 0x70, 0x7d, 0xba, 0x31, 0xdd, 0x24, 0x53 } }

extern EFI_GUID  gEfiVariableWriteArchProtocolGuid;

#endif
