/*++

  Copyright (c) 2004  - 2014, 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 that 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.    
                                                                                   


Module Name:

    SetupMode.h

Abstract:

    EFI Setup Mode



--*/

#ifndef _EFI_SETUP_MODE_H_
#define _EFI_SETUP_MODE_H_

//
// Global ID for the Setup Mode
//
#define EFI_PLATFORM_BOOT_MODE_GUID \
  { 0xce845704, 0x1683, 0x4d38, 0xa4, 0xf9, 0x7d, 0xb, 0x50, 0x77, 0x57, 0x93 }

#define EFI_NORMAL_SETUP_GUID \
  { 0xec87d643, 0xeba4, 0x4bb5, 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0xd, 0xa9 }

#define EFI_NORMAL_SETUP_RESET_NAME L"Reset"

enum {
  //
  // This means: "whatever reset defaults in setup does"
  //
  SetupDataResetNormal        = 0,

  //
  // This means: "the defaults built into the BIOS"
  //
  SetupDataResetStandard      = 1,

  //
  // This means: "the manufacturing mode defaults"
  //
  SetupDataResetManufacturing = 2,

  //
  // This means: "the oem defaults"
  //
  SetupDataResetOem           = 3,
};

//
// PlatformBootMode types
//
#define PLATFORM_NORMAL_MODE          0x01
#define PLATFORM_SAFE_MODE            0x02
#define PLATFORM_RECOVERY_MODE        0x04
#define PLATFORM_MANUFACTURING_MODE   0x08
#define PLATFORM_BACK_TO_BIOS_MODE    0x10

extern EFI_GUID gEfiPlatformBootModeGuid;

#define   NORMAL_SETUP_NAME                L"Setup"
#define   IN_SETUP_NAME                    L"InSetup"
#define   SYSTEM_PASSWORD_NAME             L"SystemPassword"
#define   BOOT_TIME_NAME                   L"BootTime"

extern EFI_GUID gEfiNormalSetupGuid;
extern CHAR16   gEfiNormalSetupName[];
extern CHAR16   gEfiInSetupName[];
extern CHAR16   gEfiSystemPasswordName[];

typedef struct {
  EFI_GUID    SetupGuid;
  CHAR16      SetupName[0x20];          // Maximum "Setup" Name
  UINT32      PlatformBootMode;
} EFI_PLATFORM_SETUP_ID;

#endif
