/** @file
Formset guids, form id and VarStore data structure for Boot Maintenance Manager.

Copyright (c) 2004 - 2018, Intel Corporation. All rights reserved.<BR>
SPDX-License-Identifier: BSD-2-Clause-Patent

**/

#ifndef _FORM_GUID_H_
#define _FORM_GUID_H_

#define BOOT_MAINT_FORMSET_GUID \
  { \
  0x642237c7, 0x35d4, 0x472d, {0x83, 0x65, 0x12, 0xe0, 0xcc, 0xf2, 0x7a, 0x22} \
  }

#define FORM_MAIN_ID                         0x1001
#define FORM_BOOT_ADD_ID                     0x1002
#define FORM_BOOT_DEL_ID                     0x1003
#define FORM_BOOT_CHG_ID                     0x1004
#define FORM_DRV_ADD_ID                      0x1005
#define FORM_DRV_DEL_ID                      0x1006
#define FORM_DRV_CHG_ID                      0x1007
#define FORM_CON_MAIN_ID                     0x1008
#define FORM_CON_IN_ID                       0x1009
#define FORM_CON_OUT_ID                      0x100A
#define FORM_CON_ERR_ID                      0x100B
#define FORM_FILE_SEEK_ID                    0x100C
#define FORM_FILE_NEW_SEEK_ID                0x100D
#define FORM_DRV_ADD_FILE_ID                 0x100E
#define FORM_DRV_ADD_HANDLE_ID               0x100F
#define FORM_DRV_ADD_HANDLE_DESC_ID          0x1010
#define FORM_BOOT_NEXT_ID                    0x1011
#define FORM_TIME_OUT_ID                     0x1012
#define FORM_BOOT_SETUP_ID                   0x1014
#define FORM_DRIVER_SETUP_ID                 0x1015
#define FORM_BOOT_LEGACY_DEVICE_ID           0x1016
#define FORM_CON_COM_ID                      0x1017
#define FORM_CON_COM_SETUP_ID                0x1018
#define FORM_BOOT_ADD_DESCRIPTION_ID         0x101F
#define FORM_DRIVER_ADD_FILE_DESCRIPTION_ID  0x1020
#define FORM_CON_MODE_ID                     0x1021
#define FORM_BOOT_FROM_FILE_ID               0x1024

#define MAXIMUM_FORM_ID  0x10FF

#define KEY_VALUE_COM_SET_BAUD_RATE         0x1101
#define KEY_VALUE_COM_SET_DATA_BITS         0x1102
#define KEY_VALUE_COM_SET_STOP_BITS         0x1103
#define KEY_VALUE_COM_SET_PARITY            0x1104
#define KEY_VALUE_COM_SET_TERMI_TYPE        0x1105
#define KEY_VALUE_MAIN_BOOT_NEXT            0x1106
#define KEY_VALUE_BOOT_ADD_DESC_DATA        0x1107
#define KEY_VALUE_BOOT_ADD_OPT_DATA         0x1108
#define KEY_VALUE_DRIVER_ADD_DESC_DATA      0x1109
#define KEY_VALUE_DRIVER_ADD_OPT_DATA       0x110A
#define KEY_VALUE_SAVE_AND_EXIT             0x110B
#define KEY_VALUE_NO_SAVE_AND_EXIT          0x110C
#define KEY_VALUE_BOOT_FROM_FILE            0x110D
#define FORM_RESET                          0x110E
#define KEY_VALUE_BOOT_DESCRIPTION          0x110F
#define KEY_VALUE_BOOT_OPTION               0x1110
#define KEY_VALUE_DRIVER_DESCRIPTION        0x1111
#define KEY_VALUE_DRIVER_OPTION             0x1112
#define KEY_VALUE_SAVE_AND_EXIT_BOOT        0x1113
#define KEY_VALUE_NO_SAVE_AND_EXIT_BOOT     0x1114
#define KEY_VALUE_SAVE_AND_EXIT_DRIVER      0x1115
#define KEY_VALUE_NO_SAVE_AND_EXIT_DRIVER   0x1116
#define KEY_VALUE_TRIGGER_FORM_OPEN_ACTION  0x1117

#define MAXIMUM_NORMAL_KEY_VALUE  0x11FF

//
// Varstore ID defined for Buffer Storage
//
#define VARSTORE_ID_BOOT_MAINT  0x1000

//
// End Label
//
#define LABEL_FORM_MAIN_START  0xfffc
#define LABEL_FORM_MAIN_END    0xfffd

#define LABEL_BMM_PLATFORM_INFORMATION  0xfffe
#define LABEL_END                       0xffff
#define MAX_MENU_NUMBER                 100

///
/// This is the structure that will be used to store the
/// question's current value. Use it at initialize time to
/// set default value for each question. When using at run
/// time, this map is returned by the callback function,
/// so dynamically changing the question's value will be
/// possible through this mechanism
///
typedef struct {
  //
  // Three questions displayed at the main page
  // for Timeout, BootNext, Variables respectively
  //
  UINT16     BootTimeOut;
  UINT32     BootNext;

  //
  // This is the COM1 Attributes value storage
  //
  UINT8      COM1BaudRate;
  UINT8      COM1DataRate;
  UINT8      COM1StopBits;
  UINT8      COM1Parity;
  UINT8      COM1TerminalType;

  //
  // This is the COM2 Attributes value storage
  //
  UINT8      COM2BaudRate;
  UINT8      COM2DataRate;
  UINT8      COM2StopBits;
  UINT8      COM2Parity;
  UINT8      COM2TerminalType;

  //
  // Driver Option Add Handle page storage
  //
  UINT16     DriverAddHandleDesc[MAX_MENU_NUMBER];
  UINT16     DriverAddHandleOptionalData[MAX_MENU_NUMBER];
  UINT8      DriverAddActive;
  UINT8      DriverAddForceReconnect;

  //
  // Console Input/Output/Errorout using COM port check storage
  //
  UINT8      ConsoleInputCOM1;
  UINT8      ConsoleInputCOM2;
  UINT8      ConsoleOutputCOM1;
  UINT8      ConsoleOutputCOM2;
  UINT8      ConsoleErrorCOM1;
  UINT8      ConsoleErrorCOM2;

  //
  // At most 100 input/output/errorout device for console storage
  //
  UINT8      ConsoleCheck[MAX_MENU_NUMBER];

  //
  // At most 100 input/output/errorout device for console storage
  //
  UINT8      ConsoleInCheck[MAX_MENU_NUMBER];
  UINT8      ConsoleOutCheck[MAX_MENU_NUMBER];
  UINT8      ConsoleErrCheck[MAX_MENU_NUMBER];

  //
  // Boot or Driver Option Order storage
  // The value is the OptionNumber+1 because the order list value cannot be 0
  // Use UINT32 to hold the potential value 0xFFFF+1=0x10000
  //
  UINT32     BootOptionOrder[MAX_MENU_NUMBER];
  UINT32     DriverOptionOrder[MAX_MENU_NUMBER];
  //
  // Boot or Driver Option Delete storage
  //
  BOOLEAN    BootOptionDel[MAX_MENU_NUMBER];
  BOOLEAN    DriverOptionDel[MAX_MENU_NUMBER];
  BOOLEAN    BootOptionDelMark[MAX_MENU_NUMBER];
  BOOLEAN    DriverOptionDelMark[MAX_MENU_NUMBER];

  //
  // This is the Terminal Attributes value storage
  //
  UINT8      COMBaudRate[MAX_MENU_NUMBER];
  UINT8      COMDataRate[MAX_MENU_NUMBER];
  UINT8      COMStopBits[MAX_MENU_NUMBER];
  UINT8      COMParity[MAX_MENU_NUMBER];
  UINT8      COMTerminalType[MAX_MENU_NUMBER];
  UINT8      COMFlowControl[MAX_MENU_NUMBER];

  //
  // We use DisableMap array to record the enable/disable state of each boot device
  // It should be taken as a bit array, from left to right there are totally 256 bits
  // the most left one stands for BBS table item 0, and the most right one stands for item 256
  // If the bit is 1, it means the boot device has been disabled.
  //
  UINT8      DisableMap[32];

  //
  // Console Output Text Mode
  //
  UINT16     ConsoleOutMode;

  //
  //  UINT16                    PadArea[10];
  //

  UINT16     BootDescriptionData[MAX_MENU_NUMBER];
  UINT16     BootOptionalData[127];
  UINT16     DriverDescriptionData[MAX_MENU_NUMBER];
  UINT16     DriverOptionalData[127];
  BOOLEAN    BootOptionChanged;
  BOOLEAN    DriverOptionChanged;
  UINT8      Active;
  UINT8      ForceReconnect;
} BMM_FAKE_NV_DATA;

#endif
