/** @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. 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 
