/** @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

**/

#pragma once

#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;
