// *++
//
// Copyright (c) 2006, 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.             
// 
// Module Name:
//
//   bm.vfr 
// 
// Abstract:
// 
//   Boot Maintenance Utility Formset
// 
// Revision History: 
// 
// --*/

#include "BdsStrDefs.h" 
#include "formguid.h"

#pragma pack(1)

//
// 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;
  UINT16                    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[100];
  UINT16                    DriverAddHandleOptionalData[100];
  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[100];

//
// Boot or Driver Option Order storage
//
  UINT8                     OptionOrder[100];
  UINT8                     DriverOptionToBeDeleted[100];

//
// Boot Option Delete storage
// 
  UINT8                     BootOptionDel[100];
  UINT8                     DriverOptionDel[100];
  
//
// This is the Terminal Attributes value storage
//
  UINT8                     COMBaudRate;
  UINT8                     COMDataRate;
  UINT8                     COMStopBits;
  UINT8                     COMParity;
  UINT8                     COMTerminalType;
  
//
// Legacy Device Order Selection Storage
//
  UINT8                     LegacyFD[100];
  UINT8                     LegacyHD[100];
  UINT8                     LegacyCD[100];
  UINT8                     LegacyNET[100];
  UINT8                     LegacyBEV[100];
} BMM_FAKE_NV_DATA;
#pragma pack()


#define FORM_MAIN_ID                         0x0001
#define FORM_BOOT_ADD_ID                     0x0002
#define FORM_BOOT_DEL_ID                     0x0003
#define FORM_BOOT_CHG_ID                     0x0004
#define FORM_DRV_ADD_ID                      0x0005
#define FORM_DRV_DEL_ID                      0x0006
#define FORM_DRV_CHG_ID                      0x0007
#define FORM_CON_MAIN_ID                     0x0008
#define FORM_CON_IN_ID                       0x0009
#define FORM_CON_OUT_ID                      0x000A
#define FORM_CON_ERR_ID                      0x000B
#define FORM_FILE_SEEK_ID                    0x000C
#define FORM_FILE_NEW_SEEK_ID                0x000D
#define FORM_DRV_ADD_FILE_ID                 0x000E
#define FORM_DRV_ADD_HANDLE_ID               0x000F
#define FORM_DRV_ADD_HANDLE_DESC_ID          0x0010
#define FORM_BOOT_NEXT_ID                    0x0011
#define FORM_TIME_OUT_ID                     0x0012
#define FORM_RESET                           0x0013
#define FORM_BOOT_SETUP_ID                   0x0014
#define FORM_DRIVER_SETUP_ID                 0x0015
#define FORM_BOOT_LEGACY_DEVICE_ID           0x0016
#define FORM_CON_COM_ID                      0x0017
#define FORM_CON_COM_SETUP_ID                0x0018
#define FORM_SET_FD_ORDER_ID                 0x0019
#define FORM_SET_HD_ORDER_ID                 0x001A
#define FORM_SET_CD_ORDER_ID                 0x001B
#define FORM_SET_NET_ORDER_ID                0x001C
#define FORM_SET_BEV_ORDER_ID                0x001D
									
#define KEY_VALUE_BOOT_FROM_FILE             0x0092

formset 
  guid = MAIN_FORMSET_GUID,
  title = STRING_TOKEN(STR_FORM_MAIN_TITLE),  // uint8 opcode, uint8 length, guid Handle, uint16 Title
  help = STRING_TOKEN(STR_NULL_STRING),
  class = 0,      
  subclass = 0,

  form formid = FORM_MAIN_ID,
       title = STRING_TOKEN(STR_FORM_MAIN_TITLE);

    goto FORM_BOOT_SETUP_ID,
         prompt = STRING_TOKEN(STR_FORM_BOOT_SETUP_TITLE),
         help = STRING_TOKEN(STR_FORM_BOOT_SETUP_HELP),
         flags = INTERACTIVE | NV_ACCESS,
         key = FORM_BOOT_SETUP_ID;

    subtitle text = STRING_TOKEN(STR_NULL_STRING);

    goto FORM_DRIVER_SETUP_ID,
         prompt = STRING_TOKEN(STR_FORM_DRIVER_SETUP_TITLE),
         help = STRING_TOKEN(STR_FORM_DRIVER_SETUP_HELP),
         flags = INTERACTIVE | NV_ACCESS,
         key = FORM_DRIVER_SETUP_ID;

    subtitle text = STRING_TOKEN(STR_NULL_STRING);

    goto FORM_CON_MAIN_ID,
         prompt = STRING_TOKEN(STR_FORM_CON_MAIN_TITLE),
         help = STRING_TOKEN(STR_FORM_CON_MAIN_HELP),
         flags = INTERACTIVE | NV_ACCESS,
         key = FORM_CON_MAIN_ID;
   
    subtitle text = STRING_TOKEN(STR_NULL_STRING);

    text 
         help   = STRING_TOKEN(STR_BOOT_FROM_FILE_HELP),  
         text   = STRING_TOKEN(STR_BOOT_FROM_FILE),
         text   = STRING_TOKEN(STR_NULL_STRING),
         flags  = INTERACTIVE | NV_ACCESS,
         key    = KEY_VALUE_BOOT_FROM_FILE;

    subtitle text = STRING_TOKEN(STR_NULL_STRING);

//    label FORM_MAIN_ID;

    goto FORM_BOOT_NEXT_ID,
         prompt = STRING_TOKEN(STR_FORM_BOOT_NEXT_TITLE),
         help = STRING_TOKEN(STR_FORM_BOOT_NEXT_HELP),
         flags = INTERACTIVE | NV_ACCESS,
         key = FORM_BOOT_NEXT_ID;            

    goto FORM_TIME_OUT_ID,
         prompt = STRING_TOKEN(STR_FORM_TIME_OUT_TITLE),
         help = STRING_TOKEN(STR_FORM_TIME_OUT_HELP),
         flags = INTERACTIVE | NV_ACCESS,
         key = FORM_TIME_OUT_ID;
         
    subtitle text = STRING_TOKEN(STR_NULL_STRING);

    goto FORM_MAIN_ID,
         prompt = STRING_TOKEN(STR_RESET),
         help = STRING_TOKEN(STR_RESET),
         flags = INTERACTIVE | NV_ACCESS,
         key = FORM_RESET;
         
  endform;       

  form formid = FORM_BOOT_SETUP_ID,
       title = STRING_TOKEN(STR_FORM_BOOT_SETUP_TITLE);

       goto FORM_MAIN_ID,
            prompt = STRING_TOKEN(STR_FORM_GOTO_MAIN),
            help = STRING_TOKEN(STR_FORM_GOTO_MAIN),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_MAIN_ID;

       goto FORM_BOOT_ADD_ID,
            prompt = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE),
            help = STRING_TOKEN(STR_FORM_BOOT_ADD_HELP),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_BOOT_ADD_ID;
      
       goto FORM_BOOT_DEL_ID,
            prompt = STRING_TOKEN(STR_FORM_BOOT_DEL_TITLE),
            help = STRING_TOKEN(STR_FORM_NEXT_BOOT_HELP),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_BOOT_DEL_ID;
       
       goto FORM_BOOT_CHG_ID,
            prompt = STRING_TOKEN(STR_FORM_BOOT_CHG_TITLE),
            help = STRING_TOKEN(STR_FORM_NEXT_BOOT_HELP),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_BOOT_CHG_ID;

       subtitle text = STRING_TOKEN(STR_NULL_STRING);
       //
	   // We will add "Select Legacy Boot Floppy Drive" and "Select Legacy Boot Hard Drive" 
	   // here dynamically
	   //
       label FORM_BOOT_LEGACY_DEVICE_ID;

  endform;       

  form formid = FORM_DRIVER_SETUP_ID,
       title = STRING_TOKEN(STR_FORM_DRIVER_SETUP_TITLE);

       goto FORM_MAIN_ID,
            prompt = STRING_TOKEN(STR_FORM_GOTO_MAIN),
            help = STRING_TOKEN(STR_FORM_GOTO_MAIN),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_MAIN_ID;

       goto FORM_DRV_ADD_ID,
            prompt = STRING_TOKEN(STR_FORM_DRV_ADD_TITLE),
            help = STRING_TOKEN(STR_FORM_DRV_ADD_HELP),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_DRV_ADD_ID;
     
       goto FORM_DRV_DEL_ID,
            prompt = STRING_TOKEN(STR_FORM_DRV_DEL_TITLE),
            help = STRING_TOKEN(STR_FORM_NEXT_BOOT_HELP),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_DRV_DEL_ID;
       
       goto FORM_DRV_CHG_ID,
            prompt = STRING_TOKEN(STR_FORM_DRV_CHG_TITLE),
            help = STRING_TOKEN(STR_FORM_NEXT_BOOT_HELP),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_DRV_CHG_ID;
  endform;       

  form formid = FORM_BOOT_ADD_ID,
       title = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE);

       label FORM_BOOT_ADD_ID;
  endform;

  form formid = FORM_BOOT_DEL_ID,
       title = STRING_TOKEN(STR_FORM_BOOT_DEL_TITLE);

       label FORM_BOOT_DEL_ID;
  endform;

  form formid = FORM_BOOT_CHG_ID,
       title = STRING_TOKEN(STR_FORM_BOOT_CHG_TITLE);

       label FORM_BOOT_CHG_ID;
       
       //
       // This tag is added for bypassing issue of setup browser
       // setup browser could not support dynamic form very well.
       //
       checkbox varid    = BMM_FAKE_NV_DATA.OptionOrder[0],
           prompt   = STRING_TOKEN(STR_FORM_BOOT_CHG_TITLE),
           help     = STRING_TOKEN(STR_FORM_BOOT_CHG_TITLE),  
           flags    = 1,
           key      = 0,
       endcheckbox;
      
  endform;

  form formid = FORM_BOOT_NEXT_ID,
       title = STRING_TOKEN(STR_FORM_BOOT_NEXT_TITLE);

       label FORM_BOOT_NEXT_ID;
  endform;
  
  form formid = FORM_TIME_OUT_ID,
       title = STRING_TOKEN(STR_FORM_TIME_OUT_TITLE);
       
       label FORM_TIME_OUT_ID;
  endform;
  
  form formid = FORM_DRV_ADD_ID,
       title = STRING_TOKEN(STR_FORM_DRV_ADD_TITLE);

       goto FORM_MAIN_ID,
            prompt = STRING_TOKEN(STR_FORM_GOTO_MAIN),
            help = STRING_TOKEN(STR_FORM_GOTO_MAIN),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_MAIN_ID;
              
       goto FORM_DRV_ADD_FILE_ID,
            prompt = STRING_TOKEN(STR_FORM_DRV_ADD_FILE_TITLE),
            help = STRING_TOKEN(STR_FORM_DRV_ADD_FILE_TITLE),
            flags = INTERACTIVE | NV_ACCESS,
            key = FORM_DRV_ADD_FILE_ID;

  endform;

  form formid = FORM_DRV_DEL_ID,
       title = STRING_TOKEN(STR_FORM_DRV_DEL_TITLE);

       label FORM_DRV_DEL_ID;

  endform;

  form formid = FORM_DRV_CHG_ID,
       title = STRING_TOKEN(STR_FORM_DRV_CHG_TITLE);

       label FORM_DRV_CHG_ID;
      
       //
       // This tag is added for bypassing issue of setup browser
       // setup browser could not support dynamic form very well.
       //
       checkbox varid    = BMM_FAKE_NV_DATA.OptionOrder[0],
           prompt   = STRING_TOKEN(STR_FORM_DRV_CHG_TITLE),
           help     = STRING_TOKEN(STR_FORM_DRV_CHG_TITLE),  
           flags    = 1,
           key      = 0,
       endcheckbox;
       
  endform;

  form formid = FORM_CON_MAIN_ID,
       title = STRING_TOKEN(STR_FORM_CON_MAIN_TITLE);

       goto FORM_MAIN_ID,
       prompt = STRING_TOKEN(STR_FORM_GOTO_MAIN),
       help = STRING_TOKEN(STR_FORM_GOTO_MAIN),
       flags = INTERACTIVE | NV_ACCESS,
       key = FORM_MAIN_ID;

       goto FORM_CON_IN_ID,
       prompt = STRING_TOKEN(STR_FORM_CON_IN_TITLE),
       help = STRING_TOKEN(STR_FORM_CON_IN_HELP),
       flags = INTERACTIVE | NV_ACCESS,
       key = FORM_CON_IN_ID;

       goto FORM_CON_OUT_ID,
       prompt = STRING_TOKEN(STR_FORM_CON_OUT_TITLE),
       help = STRING_TOKEN(STR_FORM_CON_OUT_HELP),
       flags = INTERACTIVE | NV_ACCESS,
       key = FORM_CON_OUT_ID;
  
       goto FORM_CON_ERR_ID,
       prompt = STRING_TOKEN(STR_FORM_STD_ERR_TITLE),
       help = STRING_TOKEN(STR_FORM_STD_ERR_HELP),
       flags = INTERACTIVE | NV_ACCESS,
       key = FORM_CON_ERR_ID;

       goto FORM_CON_COM_ID,
       prompt = STRING_TOKEN(STR_FORM_COM_TITLE),
       help = STRING_TOKEN(STR_FORM_COM_HELP),
       flags = INTERACTIVE | NV_ACCESS,
       key = FORM_CON_COM_ID;
  endform;

  form formid = FORM_CON_COM_ID,
       title = STRING_TOKEN(STR_FORM_COM_TITLE);

       label FORM_CON_COM_ID;
  endform;

  form formid = FORM_CON_COM_SETUP_ID,
       title = STRING_TOKEN(STR_CON_COM_SETUP);

       label FORM_CON_COM_SETUP_ID;
  endform;

  form formid = FORM_FILE_SEEK_ID,
       title = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE);

       label FORM_FILE_SEEK_ID;
  endform;

  form formid = FORM_FILE_NEW_SEEK_ID,
       title = STRING_TOKEN(STR_FORM_BOOT_ADD_TITLE);

       label FORM_FILE_NEW_SEEK_ID;
  endform;

  form formid = FORM_DRV_ADD_FILE_ID,
       title = STRING_TOKEN(STR_FORM_DRV_ADD_FILE_TITLE);

       label FORM_DRV_ADD_FILE_ID;
  endform;

  form formid = FORM_DRV_ADD_HANDLE_ID,
       title = STRING_TOKEN(STR_FORM_DRV_ADD_HANDLE_TITLE);

       label FORM_DRV_ADD_HANDLE_ID;
  endform;     

  form formid = FORM_DRV_ADD_HANDLE_DESC_ID,
       title = STRING_TOKEN(STR_FORM_DRV_ADD_DESC_TITLE);

       label FORM_DRV_ADD_HANDLE_DESC_ID;

  endform;

  form formid = FORM_CON_IN_ID,
       title = STRING_TOKEN(STR_FORM_CON_IN_TITLE);

       label FORM_CON_IN_ID;

  endform;

  form formid = FORM_CON_OUT_ID,
       title = STRING_TOKEN(STR_FORM_CON_OUT_TITLE);

       label FORM_CON_OUT_ID;

  endform;

  form formid = FORM_CON_ERR_ID,
       title = STRING_TOKEN(STR_FORM_STD_ERR_TITLE);

       label FORM_CON_ERR_ID;

  endform;

  form formid = FORM_SET_FD_ORDER_ID,
       title = STRING_TOKEN(STR_FORM_SET_FD_ORDER_TITLE);

       label FORM_SET_FD_ORDER_ID;
  endform;
  
  form formid = FORM_SET_HD_ORDER_ID,
       title = STRING_TOKEN(STR_FORM_SET_HD_ORDER_TITLE);

       label FORM_SET_HD_ORDER_ID;
  endform;

  form formid = FORM_SET_CD_ORDER_ID,
       title = STRING_TOKEN(STR_FORM_SET_CD_ORDER_TITLE);

       label FORM_SET_CD_ORDER_ID;
  endform;

  form formid = FORM_SET_NET_ORDER_ID,
       title = STRING_TOKEN(STR_FORM_SET_NET_ORDER_TITLE);

       label FORM_SET_NET_ORDER_ID;
  endform;

  form formid = FORM_SET_BEV_ORDER_ID,
       title = STRING_TOKEN(STR_FORM_SET_BEV_ORDER_TITLE);

       label FORM_SET_BEV_ORDER_ID;
  endform;

endformset;
