/** @file
  Variable Architectural Protocol as defined in PI Specification VOLUME 2 DXE

  This provides the services required to get and set 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 is responsible for initializing the GetVariable(), 
  GetNextVariableName(), and SetVariable() fields of the UEFI Runtime Services Table.

  After the three fields of the UEFI Runtime Services Table have been initialized, 
  the driver must install the EFI_VARIABLE_ARCH_PROTOCOL_GUID on a new handle with 
  a NULL interface pointer. The installation of this protocol informs the DXE Foundation 
  that the read-only and the volatile environment variable related services 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_WRITE_ARCH_PROTOCOL are 
  installed. DXE drivers that require read-only access or read/write access to volatile 
  environment variables must have this architectural protocol in their dependency 
  expressions. DXE drivers that require write access to nonvolatile environment 
  variables must have the EFI_VARIABLE_WRITE_ARCH_PROTOCOL in their dependency 
  expressions.

  Copyright (c) 2006 - 2008, Intel Corporation. All rights reserved.<BR>
  This program and the accompanying materials                          
  are licensed and made available under the terms and conditions of the BSD License         
  which accompanies this distribution.  The full text of the license may be found at        
  http://opensource.org/licenses/bsd-license.php                                            

  THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,                     
  WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.             

**/

#ifndef __ARCH_PROTOCOL_VARIABLE_ARCH_H__
#define __ARCH_PROTOCOL_VARIABLE_ARCH_H__

///
/// Global ID for the Variable Architectural Protocol
///
#define EFI_VARIABLE_ARCH_PROTOCOL_GUID \
  { 0x1e5668e2, 0x8481, 0x11d4, {0xbc, 0xf1, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } }

extern EFI_GUID gEfiVariableArchProtocolGuid;

#endif 
