BootMaint.h revision 13078b3fadb4aaae2d6975ab96a7ad649017589f
15c08e1173703234cc2913757f237ee916087498aklu/** @file
25c08e1173703234cc2913757f237ee916087498aklu  Header file for boot maintenance module.
35c08e1173703234cc2913757f237ee916087498aklu
413078b3fadb4aaae2d6975ab96a7ad649017589fkluCopyright (c) 2004 - 2009, Intel Corporation. <BR>
55c08e1173703234cc2913757f237ee916087498akluAll rights reserved. This program and the accompanying materials
65c08e1173703234cc2913757f237ee916087498akluare licensed and made available under the terms and conditions of the BSD License
75c08e1173703234cc2913757f237ee916087498akluwhich accompanies this distribution.  The full text of the license may be found at
85c08e1173703234cc2913757f237ee916087498akluhttp://opensource.org/licenses/bsd-license.php
95c08e1173703234cc2913757f237ee916087498aklu
105c08e1173703234cc2913757f237ee916087498akluTHE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
115c08e1173703234cc2913757f237ee916087498akluWITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
125c08e1173703234cc2913757f237ee916087498aklu
135c08e1173703234cc2913757f237ee916087498aklu**/
145c08e1173703234cc2913757f237ee916087498aklu
155c08e1173703234cc2913757f237ee916087498aklu#ifndef _BOOT_MAINT_H_
165c08e1173703234cc2913757f237ee916087498aklu#define _BOOT_MAINT_H_
175c08e1173703234cc2913757f237ee916087498aklu
185c08e1173703234cc2913757f237ee916087498aklu#include "Bds.h"
195c08e1173703234cc2913757f237ee916087498aklu#include "BBSsupport.h"
205c08e1173703234cc2913757f237ee916087498aklu#include "FormGuid.h"
215c08e1173703234cc2913757f237ee916087498aklu#include "FrontPage.h"
225c08e1173703234cc2913757f237ee916087498aklu
235c08e1173703234cc2913757f237ee916087498aklu//
245c08e1173703234cc2913757f237ee916087498aklu// Constants which are variable names used to access variables
255c08e1173703234cc2913757f237ee916087498aklu//
265c08e1173703234cc2913757f237ee916087498aklu#define VAR_LEGACY_DEV_ORDER L"LegacyDevOrder"
275c08e1173703234cc2913757f237ee916087498aklu
285c08e1173703234cc2913757f237ee916087498aklu#define VAR_CON_OUT_MODE L"ConOutMode"
295c08e1173703234cc2913757f237ee916087498aklu
305c08e1173703234cc2913757f237ee916087498aklu///
315c08e1173703234cc2913757f237ee916087498aklu/// Guid of a NV Variable which store the information about the
325c08e1173703234cc2913757f237ee916087498aklu/// FD/HD/CD/NET/BEV order
335c08e1173703234cc2913757f237ee916087498aklu///
345c08e1173703234cc2913757f237ee916087498aklu#define EFI_LEGACY_DEV_ORDER_VARIABLE_GUID \
355c08e1173703234cc2913757f237ee916087498aklu  { \
365c08e1173703234cc2913757f237ee916087498aklu  0xa56074db, 0x65fe, 0x45f7, {0xbd, 0x21, 0x2d, 0x2b, 0xdd, 0x8e, 0x96, 0x52} \
375c08e1173703234cc2913757f237ee916087498aklu  }
385c08e1173703234cc2913757f237ee916087498aklu
395c08e1173703234cc2913757f237ee916087498aklu//
405c08e1173703234cc2913757f237ee916087498aklu// String Contant
415c08e1173703234cc2913757f237ee916087498aklu//
425c08e1173703234cc2913757f237ee916087498aklu#define STR_FLOPPY       L"Floppy Drive #%02x"
435c08e1173703234cc2913757f237ee916087498aklu#define STR_HARDDISK     L"HardDisk Drive #%02x"
445c08e1173703234cc2913757f237ee916087498aklu#define STR_CDROM        L"ATAPI CDROM Drive #%02x"
455c08e1173703234cc2913757f237ee916087498aklu#define STR_NET          L"NET Drive #%02x"
465c08e1173703234cc2913757f237ee916087498aklu#define STR_BEV          L"BEV Drive #%02x"
475c08e1173703234cc2913757f237ee916087498aklu#define STR_FLOPPY_HELP   L"Select Floppy Drive #%02x"
485c08e1173703234cc2913757f237ee916087498aklu#define STR_HARDDISK_HELP L"Select HardDisk Drive #%02x"
495c08e1173703234cc2913757f237ee916087498aklu#define STR_CDROM_HELP    L"Select ATAPI CDROM Drive #%02x"
505c08e1173703234cc2913757f237ee916087498aklu#define STR_NET_HELP      L"NET Drive #%02x"
515c08e1173703234cc2913757f237ee916087498aklu#define STR_BEV_HELP      L"BEV Drive #%02x"
525c08e1173703234cc2913757f237ee916087498aklu
535c08e1173703234cc2913757f237ee916087498aklu//
545c08e1173703234cc2913757f237ee916087498aklu// Variable created with this flag will be "Efi:...."
555c08e1173703234cc2913757f237ee916087498aklu//
565c08e1173703234cc2913757f237ee916087498aklu#define VAR_FLAG  EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS | EFI_VARIABLE_NON_VOLATILE
575c08e1173703234cc2913757f237ee916087498aklu
585c08e1173703234cc2913757f237ee916087498aklu//
595c08e1173703234cc2913757f237ee916087498aklu// Define Maxmim characters that will be accepted
605c08e1173703234cc2913757f237ee916087498aklu//
615c08e1173703234cc2913757f237ee916087498aklu#define MAX_CHAR      480
625c08e1173703234cc2913757f237ee916087498aklu#define MAX_CHAR_SIZE (MAX_CHAR * 2)
635c08e1173703234cc2913757f237ee916087498aklu
645c08e1173703234cc2913757f237ee916087498akluextern EFI_GUID mBootMaintGuid;
655c08e1173703234cc2913757f237ee916087498akluextern EFI_GUID mFileExplorerGuid;
6675bf9d0ecca38dfec9b645a6eb1119c025892304lgaoextern CHAR16   mFileExplorerStorageName[];
67dedfc3bbc97e726e259bfadbdf22502133faa8a8lgaoextern CHAR16   mBootMaintStorageName[];
685c08e1173703234cc2913757f237ee916087498aklu//
695c08e1173703234cc2913757f237ee916087498aklu// These are the VFR compiler generated data representing our VFR data.
705c08e1173703234cc2913757f237ee916087498aklu//
715c08e1173703234cc2913757f237ee916087498akluextern UINT8    BmBin[];
725c08e1173703234cc2913757f237ee916087498akluextern UINT8    FEBin[];
735c08e1173703234cc2913757f237ee916087498aklu
745c08e1173703234cc2913757f237ee916087498aklu//
755c08e1173703234cc2913757f237ee916087498aklu// Below are the number of options in Baudrate, Databits,
765c08e1173703234cc2913757f237ee916087498aklu// Parity and Stopbits selection for serial ports.
775c08e1173703234cc2913757f237ee916087498aklu//
785c08e1173703234cc2913757f237ee916087498aklu#define BM_COM_ATTR_BUADRATE  19
795c08e1173703234cc2913757f237ee916087498aklu#define BM_COM_ATTR_DATABITS  4
805c08e1173703234cc2913757f237ee916087498aklu#define BM_COM_ATTR_PARITY    5
815c08e1173703234cc2913757f237ee916087498aklu#define BM_COM_ATTR_STOPBITS  3
825c08e1173703234cc2913757f237ee916087498aklu
835c08e1173703234cc2913757f237ee916087498aklu//
845c08e1173703234cc2913757f237ee916087498aklu// Callback function helper
855c08e1173703234cc2913757f237ee916087498aklu//
865c08e1173703234cc2913757f237ee916087498aklu#define BMM_CALLBACK_DATA_SIGNATURE     SIGNATURE_32 ('C', 'b', 'c', 'k')
875c08e1173703234cc2913757f237ee916087498aklu#define BMM_CALLBACK_DATA_FROM_THIS(a)  CR (a, BMM_CALLBACK_DATA, BmmConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
885c08e1173703234cc2913757f237ee916087498aklu
895c08e1173703234cc2913757f237ee916087498aklu#define FE_CALLBACK_DATA_FROM_THIS(a)   CR (a, BMM_CALLBACK_DATA, FeConfigAccess, BMM_CALLBACK_DATA_SIGNATURE)
905c08e1173703234cc2913757f237ee916087498aklu
915c08e1173703234cc2913757f237ee916087498aklu//
925c08e1173703234cc2913757f237ee916087498aklu// Enumeration type definition
935c08e1173703234cc2913757f237ee916087498aklu//
945c08e1173703234cc2913757f237ee916087498aklutypedef UINT8 BBS_TYPE;
955c08e1173703234cc2913757f237ee916087498aklu
9613078b3fadb4aaae2d6975ab96a7ad649017589fklutypedef enum _TYPE_OF_TERMINAL {
9713078b3fadb4aaae2d6975ab96a7ad649017589fklu  TerminalTypePcAnsi                             = 0,
9813078b3fadb4aaae2d6975ab96a7ad649017589fklu  TerminalTypeVt100,
9913078b3fadb4aaae2d6975ab96a7ad649017589fklu  TerminalTypeVt100Plus,
10013078b3fadb4aaae2d6975ab96a7ad649017589fklu  TerminalTypeVtUtf8
1015c08e1173703234cc2913757f237ee916087498aklu} TYPE_OF_TERMINAL;
1025c08e1173703234cc2913757f237ee916087498aklu
10313078b3fadb4aaae2d6975ab96a7ad649017589fklutypedef enum _FILE_EXPLORER_STATE {
10413078b3fadb4aaae2d6975ab96a7ad649017589fklu  FileExplorerStateInActive                      = 0,
10513078b3fadb4aaae2d6975ab96a7ad649017589fklu  FileExplorerStateBootFromFile,
10613078b3fadb4aaae2d6975ab96a7ad649017589fklu  FileExplorerStateAddBootOption,
10713078b3fadb4aaae2d6975ab96a7ad649017589fklu  FileExplorerStateAddDriverOptionState,
10813078b3fadb4aaae2d6975ab96a7ad649017589fklu  FileExplorerStateUnknown
1095c08e1173703234cc2913757f237ee916087498aklu} FILE_EXPLORER_STATE;
1105c08e1173703234cc2913757f237ee916087498aklu
11113078b3fadb4aaae2d6975ab96a7ad649017589fklutypedef enum _FILE_EXPLORER_DISPLAY_CONTEXT {
11213078b3fadb4aaae2d6975ab96a7ad649017589fklu  FileExplorerDisplayFileSystem,
11313078b3fadb4aaae2d6975ab96a7ad649017589fklu  FileExplorerDisplayDirectory,
11413078b3fadb4aaae2d6975ab96a7ad649017589fklu  FileExplorerDisplayUnknown
1155c08e1173703234cc2913757f237ee916087498aklu} FILE_EXPLORER_DISPLAY_CONTEXT;
1165c08e1173703234cc2913757f237ee916087498aklu
1175c08e1173703234cc2913757f237ee916087498aklu//
1185c08e1173703234cc2913757f237ee916087498aklu// All of the signatures that will be used in list structure
1195c08e1173703234cc2913757f237ee916087498aklu//
1205c08e1173703234cc2913757f237ee916087498aklu#define BM_MENU_OPTION_SIGNATURE      SIGNATURE_32 ('m', 'e', 'n', 'u')
1215c08e1173703234cc2913757f237ee916087498aklu#define BM_LOAD_OPTION_SIGNATURE      SIGNATURE_32 ('l', 'o', 'a', 'd')
1225c08e1173703234cc2913757f237ee916087498aklu#define BM_CONSOLE_OPTION_SIGNATURE   SIGNATURE_32 ('c', 'n', 's', 'l')
1235c08e1173703234cc2913757f237ee916087498aklu#define BM_FILE_OPTION_SIGNATURE      SIGNATURE_32 ('f', 'i', 'l', 'e')
1245c08e1173703234cc2913757f237ee916087498aklu#define BM_HANDLE_OPTION_SIGNATURE    SIGNATURE_32 ('h', 'n', 'd', 'l')
1255c08e1173703234cc2913757f237ee916087498aklu#define BM_TERMINAL_OPTION_SIGNATURE  SIGNATURE_32 ('t', 'r', 'm', 'l')
1265c08e1173703234cc2913757f237ee916087498aklu#define BM_MENU_ENTRY_SIGNATURE       SIGNATURE_32 ('e', 'n', 't', 'r')
1275c08e1173703234cc2913757f237ee916087498aklu
1285c08e1173703234cc2913757f237ee916087498aklu#define BM_LOAD_CONTEXT_SELECT        0x0
1295c08e1173703234cc2913757f237ee916087498aklu#define BM_CONSOLE_CONTEXT_SELECT     0x1
1305c08e1173703234cc2913757f237ee916087498aklu#define BM_FILE_CONTEXT_SELECT        0x2
1315c08e1173703234cc2913757f237ee916087498aklu#define BM_HANDLE_CONTEXT_SELECT      0x3
1325c08e1173703234cc2913757f237ee916087498aklu#define BM_TERMINAL_CONTEXT_SELECT    0x5
1335c08e1173703234cc2913757f237ee916087498aklu
1345c08e1173703234cc2913757f237ee916087498aklu#define BM_CONSOLE_IN_CONTEXT_SELECT  0x6
1355c08e1173703234cc2913757f237ee916087498aklu#define BM_CONSOLE_OUT_CONTEXT_SELECT 0x7
1365c08e1173703234cc2913757f237ee916087498aklu#define BM_CONSOLE_ERR_CONTEXT_SELECT 0x8
1375c08e1173703234cc2913757f237ee916087498aklu#define BM_LEGACY_DEV_CONTEXT_SELECT  0x9
1385c08e1173703234cc2913757f237ee916087498aklu
1395c08e1173703234cc2913757f237ee916087498aklu//
1405c08e1173703234cc2913757f237ee916087498aklu// Buffer size for update data
1415c08e1173703234cc2913757f237ee916087498aklu//
1425c08e1173703234cc2913757f237ee916087498aklu#define UPDATE_DATA_SIZE        0x100000
1435c08e1173703234cc2913757f237ee916087498aklu
1445c08e1173703234cc2913757f237ee916087498aklu//
1455c08e1173703234cc2913757f237ee916087498aklu// Namespace of callback keys used in display and file system navigation
1465c08e1173703234cc2913757f237ee916087498aklu//
1475c08e1173703234cc2913757f237ee916087498aklu#define MAX_BBS_OFFSET          0xE000
1485c08e1173703234cc2913757f237ee916087498aklu#define NET_OPTION_OFFSET       0xD800
1495c08e1173703234cc2913757f237ee916087498aklu#define BEV_OPTION_OFFSET       0xD000
1505c08e1173703234cc2913757f237ee916087498aklu#define FD_OPTION_OFFSET        0xC000
1515c08e1173703234cc2913757f237ee916087498aklu#define HD_OPTION_OFFSET        0xB000
1525c08e1173703234cc2913757f237ee916087498aklu#define CD_OPTION_OFFSET        0xA000
1535c08e1173703234cc2913757f237ee916087498aklu#define FILE_OPTION_OFFSET      0x8000
1545c08e1173703234cc2913757f237ee916087498aklu#define FILE_OPTION_MASK        0x7FFF
1555c08e1173703234cc2913757f237ee916087498aklu#define HANDLE_OPTION_OFFSET    0x7000
1565c08e1173703234cc2913757f237ee916087498aklu#define CONSOLE_OPTION_OFFSET   0x6000
1575c08e1173703234cc2913757f237ee916087498aklu#define TERMINAL_OPTION_OFFSET  0x5000
1585c08e1173703234cc2913757f237ee916087498aklu#define CONFIG_OPTION_OFFSET    0x1200
1595c08e1173703234cc2913757f237ee916087498aklu#define KEY_VALUE_OFFSET        0x1100
1605c08e1173703234cc2913757f237ee916087498aklu#define FORM_ID_OFFSET          0x1000
1615c08e1173703234cc2913757f237ee916087498aklu
1625c08e1173703234cc2913757f237ee916087498aklu//
1635c08e1173703234cc2913757f237ee916087498aklu// VarOffset that will be used to create question
1645c08e1173703234cc2913757f237ee916087498aklu// all these values are computed from the structure
1655c08e1173703234cc2913757f237ee916087498aklu// defined below
1665c08e1173703234cc2913757f237ee916087498aklu//
1675c08e1173703234cc2913757f237ee916087498aklu#define VAR_OFFSET(Field)              ((UINT16) ((UINTN) &(((BMM_FAKE_NV_DATA *) 0)->Field)))
1685c08e1173703234cc2913757f237ee916087498aklu
1695c08e1173703234cc2913757f237ee916087498aklu//
1705c08e1173703234cc2913757f237ee916087498aklu// Question Id of Zero is invalid, so add an offset to it
1715c08e1173703234cc2913757f237ee916087498aklu//
1725c08e1173703234cc2913757f237ee916087498aklu#define QUESTION_ID(Field)             (VAR_OFFSET (Field) + CONFIG_OPTION_OFFSET)
1735c08e1173703234cc2913757f237ee916087498aklu
1745c08e1173703234cc2913757f237ee916087498aklu#define BOOT_TIME_OUT_VAR_OFFSET        VAR_OFFSET (BootTimeOut)
1755c08e1173703234cc2913757f237ee916087498aklu#define BOOT_NEXT_VAR_OFFSET            VAR_OFFSET (BootNext)
1765c08e1173703234cc2913757f237ee916087498aklu#define COM1_BAUD_RATE_VAR_OFFSET       VAR_OFFSET (COM1BaudRate)
1775c08e1173703234cc2913757f237ee916087498aklu#define COM1_DATA_RATE_VAR_OFFSET       VAR_OFFSET (COM1DataRate)
1785c08e1173703234cc2913757f237ee916087498aklu#define COM1_STOP_BITS_VAR_OFFSET       VAR_OFFSET (COM1StopBits)
1795c08e1173703234cc2913757f237ee916087498aklu#define COM1_PARITY_VAR_OFFSET          VAR_OFFSET (COM1Parity)
1805c08e1173703234cc2913757f237ee916087498aklu#define COM1_TERMINAL_VAR_OFFSET        VAR_OFFSET (COM2TerminalType)
1815c08e1173703234cc2913757f237ee916087498aklu#define COM2_BAUD_RATE_VAR_OFFSET       VAR_OFFSET (COM2BaudRate)
1825c08e1173703234cc2913757f237ee916087498aklu#define COM2_DATA_RATE_VAR_OFFSET       VAR_OFFSET (COM2DataRate)
1835c08e1173703234cc2913757f237ee916087498aklu#define COM2_STOP_BITS_VAR_OFFSET       VAR_OFFSET (COM2StopBits)
1845c08e1173703234cc2913757f237ee916087498aklu#define COM2_PARITY_VAR_OFFSET          VAR_OFFSET (COM2Parity)
1855c08e1173703234cc2913757f237ee916087498aklu#define COM2_TERMINAL_VAR_OFFSET        VAR_OFFSET (COM2TerminalType)
1865c08e1173703234cc2913757f237ee916087498aklu#define DRV_ADD_HANDLE_DESC_VAR_OFFSET  VAR_OFFSET (DriverAddHandleDesc)
1875c08e1173703234cc2913757f237ee916087498aklu#define DRV_ADD_ACTIVE_VAR_OFFSET       VAR_OFFSET (DriverAddActive)
1885c08e1173703234cc2913757f237ee916087498aklu#define DRV_ADD_RECON_VAR_OFFSET        VAR_OFFSET (DriverAddForceReconnect)
1895c08e1173703234cc2913757f237ee916087498aklu#define CON_IN_COM1_VAR_OFFSET          VAR_OFFSET (ConsoleInputCOM1)
1905c08e1173703234cc2913757f237ee916087498aklu#define CON_IN_COM2_VAR_OFFSET          VAR_OFFSET (ConsoleInputCOM2)
1915c08e1173703234cc2913757f237ee916087498aklu#define CON_OUT_COM1_VAR_OFFSET         VAR_OFFSET (ConsoleOutputCOM1)
1925c08e1173703234cc2913757f237ee916087498aklu#define CON_OUT_COM2_VAR_OFFSET         VAR_OFFSET (ConsoleOutputCOM2)
1935c08e1173703234cc2913757f237ee916087498aklu#define CON_ERR_COM1_VAR_OFFSET         VAR_OFFSET (ConsoleErrorCOM1)
1945c08e1173703234cc2913757f237ee916087498aklu#define CON_ERR_COM2_VAR_OFFSET         VAR_OFFSET (ConsoleErrorCOM2)
1955c08e1173703234cc2913757f237ee916087498aklu#define CON_MODE_VAR_OFFSET             VAR_OFFSET (ConsoleOutMode)
1965c08e1173703234cc2913757f237ee916087498aklu#define CON_DEVICE_VAR_OFFSET           VAR_OFFSET (ConsoleCheck)
1975c08e1173703234cc2913757f237ee916087498aklu#define OPTION_ORDER_VAR_OFFSET         VAR_OFFSET (OptionOrder)
1985c08e1173703234cc2913757f237ee916087498aklu#define DRIVER_OPTION_ORDER_VAR_OFFSET  VAR_OFFSET (DriverOptionToBeDeleted)
1995c08e1173703234cc2913757f237ee916087498aklu#define BOOT_OPTION_DEL_VAR_OFFSET      VAR_OFFSET (BootOptionDel)
2005c08e1173703234cc2913757f237ee916087498aklu#define DRIVER_OPTION_DEL_VAR_OFFSET    VAR_OFFSET (DriverOptionDel)
2015c08e1173703234cc2913757f237ee916087498aklu#define DRIVER_ADD_OPTION_VAR_OFFSET    VAR_OFFSET (DriverAddHandleOptionalData)
2025c08e1173703234cc2913757f237ee916087498aklu#define COM_BAUD_RATE_VAR_OFFSET        VAR_OFFSET (COMBaudRate)
2035c08e1173703234cc2913757f237ee916087498aklu#define COM_DATA_RATE_VAR_OFFSET        VAR_OFFSET (COMDataRate)
2045c08e1173703234cc2913757f237ee916087498aklu#define COM_STOP_BITS_VAR_OFFSET        VAR_OFFSET (COMStopBits)
2055c08e1173703234cc2913757f237ee916087498aklu#define COM_PARITY_VAR_OFFSET           VAR_OFFSET (COMParity)
2065c08e1173703234cc2913757f237ee916087498aklu#define COM_TERMINAL_VAR_OFFSET         VAR_OFFSET (COMTerminalType)
2075c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_FD_VAR_OFFSET            VAR_OFFSET (LegacyFD)
2085c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_HD_VAR_OFFSET            VAR_OFFSET (LegacyHD)
2095c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_CD_VAR_OFFSET            VAR_OFFSET (LegacyCD)
2105c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_NET_VAR_OFFSET           VAR_OFFSET (LegacyNET)
2115c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_BEV_VAR_OFFSET           VAR_OFFSET (LegacyBEV)
2125c08e1173703234cc2913757f237ee916087498aklu
2135c08e1173703234cc2913757f237ee916087498aklu#define BOOT_TIME_OUT_QUESTION_ID       QUESTION_ID (BootTimeOut)
2145c08e1173703234cc2913757f237ee916087498aklu#define BOOT_NEXT_QUESTION_ID           QUESTION_ID (BootNext)
2155c08e1173703234cc2913757f237ee916087498aklu#define COM1_BAUD_RATE_QUESTION_ID      QUESTION_ID (COM1BaudRate)
2165c08e1173703234cc2913757f237ee916087498aklu#define COM1_DATA_RATE_QUESTION_ID      QUESTION_ID (COM1DataRate)
2175c08e1173703234cc2913757f237ee916087498aklu#define COM1_STOP_BITS_QUESTION_ID      QUESTION_ID (COM1StopBits)
2185c08e1173703234cc2913757f237ee916087498aklu#define COM1_PARITY_QUESTION_ID         QUESTION_ID (COM1Parity)
2195c08e1173703234cc2913757f237ee916087498aklu#define COM1_TERMINAL_QUESTION_ID       QUESTION_ID (COM2TerminalType)
2205c08e1173703234cc2913757f237ee916087498aklu#define COM2_BAUD_RATE_QUESTION_ID      QUESTION_ID (COM2BaudRate)
2215c08e1173703234cc2913757f237ee916087498aklu#define COM2_DATA_RATE_QUESTION_ID      QUESTION_ID (COM2DataRate)
2225c08e1173703234cc2913757f237ee916087498aklu#define COM2_STOP_BITS_QUESTION_ID      QUESTION_ID (COM2StopBits)
2235c08e1173703234cc2913757f237ee916087498aklu#define COM2_PARITY_QUESTION_ID         QUESTION_ID (COM2Parity)
2245c08e1173703234cc2913757f237ee916087498aklu#define COM2_TERMINAL_QUESTION_ID       QUESTION_ID (COM2TerminalType)
2255c08e1173703234cc2913757f237ee916087498aklu#define DRV_ADD_HANDLE_DESC_QUESTION_ID QUESTION_ID (DriverAddHandleDesc)
2265c08e1173703234cc2913757f237ee916087498aklu#define DRV_ADD_ACTIVE_QUESTION_ID      QUESTION_ID (DriverAddActive)
2275c08e1173703234cc2913757f237ee916087498aklu#define DRV_ADD_RECON_QUESTION_ID       QUESTION_ID (DriverAddForceReconnect)
2285c08e1173703234cc2913757f237ee916087498aklu#define CON_IN_COM1_QUESTION_ID         QUESTION_ID (ConsoleInputCOM1)
2295c08e1173703234cc2913757f237ee916087498aklu#define CON_IN_COM2_QUESTION_ID         QUESTION_ID (ConsoleInputCOM2)
2305c08e1173703234cc2913757f237ee916087498aklu#define CON_OUT_COM1_QUESTION_ID        QUESTION_ID (ConsoleOutputCOM1)
2315c08e1173703234cc2913757f237ee916087498aklu#define CON_OUT_COM2_QUESTION_ID        QUESTION_ID (ConsoleOutputCOM2)
2325c08e1173703234cc2913757f237ee916087498aklu#define CON_ERR_COM1_QUESTION_ID        QUESTION_ID (ConsoleErrorCOM1)
2335c08e1173703234cc2913757f237ee916087498aklu#define CON_ERR_COM2_QUESTION_ID        QUESTION_ID (ConsoleErrorCOM2)
2345c08e1173703234cc2913757f237ee916087498aklu#define CON_MODE_QUESTION_ID            QUESTION_ID (ConsoleOutMode)
2355c08e1173703234cc2913757f237ee916087498aklu#define CON_DEVICE_QUESTION_ID          QUESTION_ID (ConsoleCheck)
2365c08e1173703234cc2913757f237ee916087498aklu#define OPTION_ORDER_QUESTION_ID        QUESTION_ID (OptionOrder)
2375c08e1173703234cc2913757f237ee916087498aklu#define DRIVER_OPTION_ORDER_QUESTION_ID QUESTION_ID (DriverOptionToBeDeleted)
2385c08e1173703234cc2913757f237ee916087498aklu#define BOOT_OPTION_DEL_QUESTION_ID     QUESTION_ID (BootOptionDel)
2395c08e1173703234cc2913757f237ee916087498aklu#define DRIVER_OPTION_DEL_QUESTION_ID   QUESTION_ID (DriverOptionDel)
2405c08e1173703234cc2913757f237ee916087498aklu#define DRIVER_ADD_OPTION_QUESTION_ID   QUESTION_ID (DriverAddHandleOptionalData)
2415c08e1173703234cc2913757f237ee916087498aklu#define COM_BAUD_RATE_QUESTION_ID       QUESTION_ID (COMBaudRate)
2425c08e1173703234cc2913757f237ee916087498aklu#define COM_DATA_RATE_QUESTION_ID       QUESTION_ID (COMDataRate)
2435c08e1173703234cc2913757f237ee916087498aklu#define COM_STOP_BITS_QUESTION_ID       QUESTION_ID (COMStopBits)
2445c08e1173703234cc2913757f237ee916087498aklu#define COM_PARITY_QUESTION_ID          QUESTION_ID (COMParity)
2455c08e1173703234cc2913757f237ee916087498aklu#define COM_TERMINAL_QUESTION_ID        QUESTION_ID (COMTerminalType)
2465c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_FD_QUESTION_ID           QUESTION_ID (LegacyFD)
2475c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_HD_QUESTION_ID           QUESTION_ID (LegacyHD)
2485c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_CD_QUESTION_ID           QUESTION_ID (LegacyCD)
2495c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_NET_QUESTION_ID          QUESTION_ID (LegacyNET)
2505c08e1173703234cc2913757f237ee916087498aklu#define LEGACY_BEV_QUESTION_ID          QUESTION_ID (LegacyBEV)
2515c08e1173703234cc2913757f237ee916087498aklu
2525c08e1173703234cc2913757f237ee916087498aklu#define STRING_DEPOSITORY_NUMBER        8
2535c08e1173703234cc2913757f237ee916087498aklu
2545c08e1173703234cc2913757f237ee916087498aklu///
2555c08e1173703234cc2913757f237ee916087498aklu/// Serial Ports attributes, first one is the value for
2565c08e1173703234cc2913757f237ee916087498aklu/// return from callback function, stringtoken is used to
2575c08e1173703234cc2913757f237ee916087498aklu/// display the value properly
2585c08e1173703234cc2913757f237ee916087498aklu///
2595c08e1173703234cc2913757f237ee916087498aklutypedef struct {
2605c08e1173703234cc2913757f237ee916087498aklu  UINTN   Value;
2615c08e1173703234cc2913757f237ee916087498aklu  UINT16  StringToken;
2625c08e1173703234cc2913757f237ee916087498aklu} COM_ATTR;
2635c08e1173703234cc2913757f237ee916087498aklu
2645c08e1173703234cc2913757f237ee916087498aklu#pragma pack(1)
2655c08e1173703234cc2913757f237ee916087498aklutypedef struct {
2665c08e1173703234cc2913757f237ee916087498aklu  BBS_TYPE  BbsType;
2675c08e1173703234cc2913757f237ee916087498aklu  ///
2685c08e1173703234cc2913757f237ee916087498aklu  /// Length = sizeof (UINT16) + SIZEOF (Data)
2695c08e1173703234cc2913757f237ee916087498aklu  ///
2705c08e1173703234cc2913757f237ee916087498aklu  UINT16    Length;
2715c08e1173703234cc2913757f237ee916087498aklu  UINT16    *Data;
2725c08e1173703234cc2913757f237ee916087498aklu} BM_LEGACY_DEV_ORDER_CONTEXT;
2735c08e1173703234cc2913757f237ee916087498aklu#pragma pack()
2745c08e1173703234cc2913757f237ee916087498aklu
2755c08e1173703234cc2913757f237ee916087498aklutypedef struct {
2765c08e1173703234cc2913757f237ee916087498aklu  UINT64                    BaudRate;
2775c08e1173703234cc2913757f237ee916087498aklu  UINT8                     DataBits;
2785c08e1173703234cc2913757f237ee916087498aklu  UINT8                     Parity;
2795c08e1173703234cc2913757f237ee916087498aklu  UINT8                     StopBits;
2805c08e1173703234cc2913757f237ee916087498aklu
2815c08e1173703234cc2913757f237ee916087498aklu  UINT8                     BaudRateIndex;
2825c08e1173703234cc2913757f237ee916087498aklu  UINT8                     DataBitsIndex;
2835c08e1173703234cc2913757f237ee916087498aklu  UINT8                     ParityIndex;
2845c08e1173703234cc2913757f237ee916087498aklu  UINT8                     StopBitsIndex;
2855c08e1173703234cc2913757f237ee916087498aklu
2865c08e1173703234cc2913757f237ee916087498aklu  UINT8                     IsConIn;
2875c08e1173703234cc2913757f237ee916087498aklu  UINT8                     IsConOut;
2885c08e1173703234cc2913757f237ee916087498aklu  UINT8                     IsStdErr;
2895c08e1173703234cc2913757f237ee916087498aklu  UINT8                     TerminalType;
2905c08e1173703234cc2913757f237ee916087498aklu
2915c08e1173703234cc2913757f237ee916087498aklu  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
2925c08e1173703234cc2913757f237ee916087498aklu} BM_TERMINAL_CONTEXT;
2935c08e1173703234cc2913757f237ee916087498aklu
2945c08e1173703234cc2913757f237ee916087498aklutypedef struct {
2955c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                   IsBootNext;
2965c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                   LoadOptionModified;
2975c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                   Deleted;
2985c08e1173703234cc2913757f237ee916087498aklu
2995c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                   IsLegacy;
3005c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                   IsActive;
3015c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                   ForceReconnect;
3025c08e1173703234cc2913757f237ee916087498aklu  UINTN                     OptionalDataSize;
3035c08e1173703234cc2913757f237ee916087498aklu
3045c08e1173703234cc2913757f237ee916087498aklu  UINTN                     LoadOptionSize;
3055c08e1173703234cc2913757f237ee916087498aklu  UINT8                     *LoadOption;
3065c08e1173703234cc2913757f237ee916087498aklu
3075c08e1173703234cc2913757f237ee916087498aklu  UINT32                    Attributes;
3085c08e1173703234cc2913757f237ee916087498aklu  UINT16                    FilePathListLength;
3095c08e1173703234cc2913757f237ee916087498aklu  UINT16                    *Description;
3105c08e1173703234cc2913757f237ee916087498aklu  EFI_DEVICE_PATH_PROTOCOL  *FilePathList;
3115c08e1173703234cc2913757f237ee916087498aklu  UINT8                     *OptionalData;
3125c08e1173703234cc2913757f237ee916087498aklu
3135c08e1173703234cc2913757f237ee916087498aklu  UINT16                    BbsIndex;
3145c08e1173703234cc2913757f237ee916087498aklu} BM_LOAD_CONTEXT;
3155c08e1173703234cc2913757f237ee916087498aklu
3165c08e1173703234cc2913757f237ee916087498aklutypedef struct {
3175c08e1173703234cc2913757f237ee916087498aklu  BBS_TABLE *BbsTable;
3185c08e1173703234cc2913757f237ee916087498aklu  UINTN     Index;
3195c08e1173703234cc2913757f237ee916087498aklu  UINTN     BbsCount;
3205c08e1173703234cc2913757f237ee916087498aklu  UINT16    *Description;
3215c08e1173703234cc2913757f237ee916087498aklu} BM_LEGACY_DEVICE_CONTEXT;
3225c08e1173703234cc2913757f237ee916087498aklu
3235c08e1173703234cc2913757f237ee916087498aklutypedef struct {
3245c08e1173703234cc2913757f237ee916087498aklu
3255c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                   IsActive;
3265c08e1173703234cc2913757f237ee916087498aklu
3275c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                   IsTerminal;
3285c08e1173703234cc2913757f237ee916087498aklu
3295c08e1173703234cc2913757f237ee916087498aklu  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
3305c08e1173703234cc2913757f237ee916087498aklu} BM_CONSOLE_CONTEXT;
3315c08e1173703234cc2913757f237ee916087498aklu
3325c08e1173703234cc2913757f237ee916087498aklutypedef struct {
3335c08e1173703234cc2913757f237ee916087498aklu  UINTN   Column;
3345c08e1173703234cc2913757f237ee916087498aklu  UINTN   Row;
3355c08e1173703234cc2913757f237ee916087498aklu} CONSOLE_OUT_MODE;
3365c08e1173703234cc2913757f237ee916087498aklu
3375c08e1173703234cc2913757f237ee916087498aklutypedef struct {
3385c08e1173703234cc2913757f237ee916087498aklu  EFI_HANDLE                        Handle;
3395c08e1173703234cc2913757f237ee916087498aklu  EFI_DEVICE_PATH_PROTOCOL          *DevicePath;
3405c08e1173703234cc2913757f237ee916087498aklu  EFI_FILE_HANDLE                   FHandle;
3415c08e1173703234cc2913757f237ee916087498aklu  UINT16                            *FileName;
3425c08e1173703234cc2913757f237ee916087498aklu  EFI_FILE_SYSTEM_VOLUME_LABEL      *Info;
3435c08e1173703234cc2913757f237ee916087498aklu
3445c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                           IsRoot;
3455c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                           IsDir;
3465c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                           IsRemovableMedia;
3475c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                           IsLoadFile;
3485c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                           IsBootLegacy;
3495c08e1173703234cc2913757f237ee916087498aklu} BM_FILE_CONTEXT;
3505c08e1173703234cc2913757f237ee916087498aklu
3515c08e1173703234cc2913757f237ee916087498aklutypedef struct {
3525c08e1173703234cc2913757f237ee916087498aklu  EFI_HANDLE                Handle;
3535c08e1173703234cc2913757f237ee916087498aklu  EFI_DEVICE_PATH_PROTOCOL  *DevicePath;
3545c08e1173703234cc2913757f237ee916087498aklu} BM_HANDLE_CONTEXT;
3555c08e1173703234cc2913757f237ee916087498aklu
3565c08e1173703234cc2913757f237ee916087498aklutypedef struct {
3575c08e1173703234cc2913757f237ee916087498aklu  UINTN           Signature;
3585c08e1173703234cc2913757f237ee916087498aklu  LIST_ENTRY      Head;
3595c08e1173703234cc2913757f237ee916087498aklu  UINTN           MenuNumber;
3605c08e1173703234cc2913757f237ee916087498aklu} BM_MENU_OPTION;
3615c08e1173703234cc2913757f237ee916087498aklu
3625c08e1173703234cc2913757f237ee916087498aklutypedef struct {
3635c08e1173703234cc2913757f237ee916087498aklu  UINTN           Signature;
3645c08e1173703234cc2913757f237ee916087498aklu  LIST_ENTRY      Link;
3655c08e1173703234cc2913757f237ee916087498aklu  UINTN           OptionNumber;
3665c08e1173703234cc2913757f237ee916087498aklu  UINT16          *DisplayString;
3675c08e1173703234cc2913757f237ee916087498aklu  UINT16          *HelpString;
3685c08e1173703234cc2913757f237ee916087498aklu  EFI_STRING_ID   DisplayStringToken;
3695c08e1173703234cc2913757f237ee916087498aklu  EFI_STRING_ID   HelpStringToken;
3705c08e1173703234cc2913757f237ee916087498aklu  UINTN           ContextSelection;
3715c08e1173703234cc2913757f237ee916087498aklu  VOID            *VariableContext;
3725c08e1173703234cc2913757f237ee916087498aklu} BM_MENU_ENTRY;
3735c08e1173703234cc2913757f237ee916087498aklu
3745c08e1173703234cc2913757f237ee916087498aklutypedef struct {
3755c08e1173703234cc2913757f237ee916087498aklu  //
3765c08e1173703234cc2913757f237ee916087498aklu  // Shared callback data.
3775c08e1173703234cc2913757f237ee916087498aklu  //
3785c08e1173703234cc2913757f237ee916087498aklu  UINTN                          Signature;
3795c08e1173703234cc2913757f237ee916087498aklu
3805c08e1173703234cc2913757f237ee916087498aklu  BM_MENU_ENTRY                  *MenuEntry;
3815c08e1173703234cc2913757f237ee916087498aklu  BM_HANDLE_CONTEXT              *HandleContext;
3825c08e1173703234cc2913757f237ee916087498aklu  BM_FILE_CONTEXT                *FileContext;
3835c08e1173703234cc2913757f237ee916087498aklu  BM_LOAD_CONTEXT                *LoadContext;
3845c08e1173703234cc2913757f237ee916087498aklu  BM_TERMINAL_CONTEXT            *TerminalContext;
3855c08e1173703234cc2913757f237ee916087498aklu  UINTN                          CurrentTerminal;
3865c08e1173703234cc2913757f237ee916087498aklu  BBS_TYPE                       BbsType;
3875c08e1173703234cc2913757f237ee916087498aklu
3885c08e1173703234cc2913757f237ee916087498aklu  //
3895c08e1173703234cc2913757f237ee916087498aklu  // BMM main formset callback data.
3905c08e1173703234cc2913757f237ee916087498aklu  //
3915c08e1173703234cc2913757f237ee916087498aklu  EFI_HII_HANDLE                 BmmHiiHandle;
3925c08e1173703234cc2913757f237ee916087498aklu  EFI_HANDLE                     BmmDriverHandle;
3935c08e1173703234cc2913757f237ee916087498aklu  EFI_HII_CONFIG_ACCESS_PROTOCOL BmmConfigAccess;
3945c08e1173703234cc2913757f237ee916087498aklu  EFI_FORM_ID                    BmmCurrentPageId;
3955c08e1173703234cc2913757f237ee916087498aklu  EFI_FORM_ID                    BmmPreviousPageId;
3965c08e1173703234cc2913757f237ee916087498aklu  BOOLEAN                        BmmAskSaveOrNot;
3975c08e1173703234cc2913757f237ee916087498aklu  BMM_FAKE_NV_DATA               BmmFakeNvData;
3985c08e1173703234cc2913757f237ee916087498aklu  BMM_FAKE_NV_DATA               BmmOldFakeNVData;
3995c08e1173703234cc2913757f237ee916087498aklu
4005c08e1173703234cc2913757f237ee916087498aklu  //
4015c08e1173703234cc2913757f237ee916087498aklu  // File explorer formset callback data.
4025c08e1173703234cc2913757f237ee916087498aklu  //
4035c08e1173703234cc2913757f237ee916087498aklu  EFI_HII_HANDLE                 FeHiiHandle;
4045c08e1173703234cc2913757f237ee916087498aklu  EFI_HANDLE                     FeDriverHandle;
4055c08e1173703234cc2913757f237ee916087498aklu  EFI_HII_CONFIG_ACCESS_PROTOCOL FeConfigAccess;
4065c08e1173703234cc2913757f237ee916087498aklu  FILE_EXPLORER_STATE            FeCurrentState;
4075c08e1173703234cc2913757f237ee916087498aklu  FILE_EXPLORER_DISPLAY_CONTEXT  FeDisplayContext;
4085c08e1173703234cc2913757f237ee916087498aklu  FILE_EXPLORER_NV_DATA          FeFakeNvData;
4095c08e1173703234cc2913757f237ee916087498aklu} BMM_CALLBACK_DATA;
4105c08e1173703234cc2913757f237ee916087498aklu
41113078b3fadb4aaae2d6975ab96a7ad649017589fklutypedef struct _STRING_LIST_NODE STRING_LIST_NODE;
41213078b3fadb4aaae2d6975ab96a7ad649017589fklu
41313078b3fadb4aaae2d6975ab96a7ad649017589fklustruct _STRING_LIST_NODE {
4145c08e1173703234cc2913757f237ee916087498aklu  EFI_STRING_ID             StringToken;
41513078b3fadb4aaae2d6975ab96a7ad649017589fklu  STRING_LIST_NODE          *Next;
41613078b3fadb4aaae2d6975ab96a7ad649017589fklu};
4175c08e1173703234cc2913757f237ee916087498aklu
4185c08e1173703234cc2913757f237ee916087498aklutypedef struct _STRING_DEPOSITORY {
4195c08e1173703234cc2913757f237ee916087498aklu  UINTN             TotalNodeNumber;
4205c08e1173703234cc2913757f237ee916087498aklu  STRING_LIST_NODE  *CurrentNode;
4215c08e1173703234cc2913757f237ee916087498aklu  STRING_LIST_NODE  *ListHead;
4225c08e1173703234cc2913757f237ee916087498aklu} STRING_DEPOSITORY;
4235c08e1173703234cc2913757f237ee916087498aklu
4245c08e1173703234cc2913757f237ee916087498aklu//
4255c08e1173703234cc2913757f237ee916087498aklu// #pragma pack()
4265c08e1173703234cc2913757f237ee916087498aklu//
4275c08e1173703234cc2913757f237ee916087498aklu// For initializing File System menu
4285c08e1173703234cc2913757f237ee916087498aklu//
4295c08e1173703234cc2913757f237ee916087498aklu
4305c08e1173703234cc2913757f237ee916087498aklu/**
4315c08e1173703234cc2913757f237ee916087498aklu  This function build the FsOptionMenu list which records all
4325c08e1173703234cc2913757f237ee916087498aklu  available file system in the system. They includes all instances
4335c08e1173703234cc2913757f237ee916087498aklu  of EFI_SIMPLE_FILE_SYSTEM_PROTOCOL, all instances of EFI_LOAD_FILE_SYSTEM
4345c08e1173703234cc2913757f237ee916087498aklu  and all type of legacy boot device.
4355c08e1173703234cc2913757f237ee916087498aklu
4365c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    BMM context data
4375c08e1173703234cc2913757f237ee916087498aklu
4385c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS             Success find the file system
4395c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_OUT_OF_RESOURCES    Can not create menu entry
4405c08e1173703234cc2913757f237ee916087498aklu
4415c08e1173703234cc2913757f237ee916087498aklu**/
4425c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
4435c08e1173703234cc2913757f237ee916087498akluBOpt_FindFileSystem (
4445c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA          *CallbackData
4455c08e1173703234cc2913757f237ee916087498aklu  );
4465c08e1173703234cc2913757f237ee916087498aklu
4475c08e1173703234cc2913757f237ee916087498aklu/**
4485c08e1173703234cc2913757f237ee916087498aklu  Find files under current directory
4495c08e1173703234cc2913757f237ee916087498aklu  All files and sub-directories in current directory
4505c08e1173703234cc2913757f237ee916087498aklu  will be stored in DirectoryMenu for future use.
4515c08e1173703234cc2913757f237ee916087498aklu
4525c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData  The BMM context data.
4535c08e1173703234cc2913757f237ee916087498aklu  @param MenuEntry     The Menu Entry.
4545c08e1173703234cc2913757f237ee916087498aklu
4555c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS         Get files from current dir successfully.
4565c08e1173703234cc2913757f237ee916087498aklu  @return Other value if can't get files from current dir.
4575c08e1173703234cc2913757f237ee916087498aklu
4585c08e1173703234cc2913757f237ee916087498aklu**/
4595c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
4605c08e1173703234cc2913757f237ee916087498akluBOpt_FindFiles (
4615c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA          *CallbackData,
4625c08e1173703234cc2913757f237ee916087498aklu  IN BM_MENU_ENTRY              *MenuEntry
4635c08e1173703234cc2913757f237ee916087498aklu  );
4645c08e1173703234cc2913757f237ee916087498aklu
4655c08e1173703234cc2913757f237ee916087498aklu/**
4665c08e1173703234cc2913757f237ee916087498aklu
4675c08e1173703234cc2913757f237ee916087498aklu  Find drivers that will be added as Driver#### variables from handles
4685c08e1173703234cc2913757f237ee916087498aklu  in current system environment
4695c08e1173703234cc2913757f237ee916087498aklu  All valid handles in the system except those consume SimpleFs, LoadFile
4705c08e1173703234cc2913757f237ee916087498aklu  are stored in DriverMenu for future use.
4715c08e1173703234cc2913757f237ee916087498aklu
4725c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS The function complets successfully.
4735c08e1173703234cc2913757f237ee916087498aklu  @return Other value if failed to build the DriverMenu.
4745c08e1173703234cc2913757f237ee916087498aklu
4755c08e1173703234cc2913757f237ee916087498aklu**/
4765c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
4775c08e1173703234cc2913757f237ee916087498akluBOpt_FindDrivers (
4785c08e1173703234cc2913757f237ee916087498aklu  VOID
4795c08e1173703234cc2913757f237ee916087498aklu  );
4805c08e1173703234cc2913757f237ee916087498aklu
4815c08e1173703234cc2913757f237ee916087498aklu/**
4825c08e1173703234cc2913757f237ee916087498aklu
4835c08e1173703234cc2913757f237ee916087498aklu  Build the BootOptionMenu according to BootOrder Variable.
4845c08e1173703234cc2913757f237ee916087498aklu  This Routine will access the Boot#### to get EFI_LOAD_OPTION.
4855c08e1173703234cc2913757f237ee916087498aklu
4865c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData The BMM context data.
4875c08e1173703234cc2913757f237ee916087498aklu
4885c08e1173703234cc2913757f237ee916087498aklu  @return The number of the Var Boot####.
4895c08e1173703234cc2913757f237ee916087498aklu
4905c08e1173703234cc2913757f237ee916087498aklu**/
4915c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
4925c08e1173703234cc2913757f237ee916087498akluBOpt_GetBootOptions (
4935c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_CALLBACK_DATA         *CallbackData
4945c08e1173703234cc2913757f237ee916087498aklu  );
4955c08e1173703234cc2913757f237ee916087498aklu
4965c08e1173703234cc2913757f237ee916087498aklu/**
4975c08e1173703234cc2913757f237ee916087498aklu
4985c08e1173703234cc2913757f237ee916087498aklu  Build up all DriverOptionMenu
4995c08e1173703234cc2913757f237ee916087498aklu
5005c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData The BMM context data.
5015c08e1173703234cc2913757f237ee916087498aklu
5025c08e1173703234cc2913757f237ee916087498aklu  @return EFI_SUCESS The functin completes successfully.
5035c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_OUT_OF_RESOURCES Not enough memory to compete the operation.
5045c08e1173703234cc2913757f237ee916087498aklu
5055c08e1173703234cc2913757f237ee916087498aklu
5065c08e1173703234cc2913757f237ee916087498aklu**/
5075c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
5085c08e1173703234cc2913757f237ee916087498akluBOpt_GetDriverOptions (
5095c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_CALLBACK_DATA         *CallbackData
5105c08e1173703234cc2913757f237ee916087498aklu  );
5115c08e1173703234cc2913757f237ee916087498aklu
5125c08e1173703234cc2913757f237ee916087498aklu
5135c08e1173703234cc2913757f237ee916087498aklu/**
5145c08e1173703234cc2913757f237ee916087498aklu  Build the LegacyFDMenu LegacyHDMenu LegacyCDMenu according to LegacyBios.GetBbsInfo().
5155c08e1173703234cc2913757f237ee916087498aklu
5165c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS The function complete successfully.
5175c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_OUT_OF_RESOURCES No enough memory to complete this function.
5185c08e1173703234cc2913757f237ee916087498aklu
5195c08e1173703234cc2913757f237ee916087498aklu**/
5205c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
5215c08e1173703234cc2913757f237ee916087498akluBOpt_GetLegacyOptions (
5225c08e1173703234cc2913757f237ee916087498aklu  VOID
5235c08e1173703234cc2913757f237ee916087498aklu  );
5245c08e1173703234cc2913757f237ee916087498aklu
5255c08e1173703234cc2913757f237ee916087498aklu/**
5265c08e1173703234cc2913757f237ee916087498aklu  Free out resouce allocated from Legacy Boot Options.
5275c08e1173703234cc2913757f237ee916087498aklu
5285c08e1173703234cc2913757f237ee916087498aklu**/
5295c08e1173703234cc2913757f237ee916087498akluVOID
5305c08e1173703234cc2913757f237ee916087498akluBOpt_FreeLegacyOptions (
5315c08e1173703234cc2913757f237ee916087498aklu  VOID
5325c08e1173703234cc2913757f237ee916087498aklu  );
5335c08e1173703234cc2913757f237ee916087498aklu
5345c08e1173703234cc2913757f237ee916087498aklu/**
5355c08e1173703234cc2913757f237ee916087498aklu  Free resources allocated in Allocate Rountine.
5365c08e1173703234cc2913757f237ee916087498aklu
5375c08e1173703234cc2913757f237ee916087498aklu  @param FreeMenu        Menu to be freed
5385c08e1173703234cc2913757f237ee916087498aklu
5395c08e1173703234cc2913757f237ee916087498aklu**/
5405c08e1173703234cc2913757f237ee916087498akluVOID
5415c08e1173703234cc2913757f237ee916087498akluBOpt_FreeMenu (
5425c08e1173703234cc2913757f237ee916087498aklu  BM_MENU_OPTION        *FreeMenu
5435c08e1173703234cc2913757f237ee916087498aklu  );
5445c08e1173703234cc2913757f237ee916087498aklu
5455c08e1173703234cc2913757f237ee916087498aklu
5465c08e1173703234cc2913757f237ee916087498aklu/**
5475c08e1173703234cc2913757f237ee916087498aklu
5485c08e1173703234cc2913757f237ee916087498aklu  Append file name to existing file name.
5495c08e1173703234cc2913757f237ee916087498aklu
5505c08e1173703234cc2913757f237ee916087498aklu  @param Str1  The existing file name
5515c08e1173703234cc2913757f237ee916087498aklu  @param Str2  The file name to be appended
5525c08e1173703234cc2913757f237ee916087498aklu
5535c08e1173703234cc2913757f237ee916087498aklu  @return Allocate a new string to hold the appended result.
5545c08e1173703234cc2913757f237ee916087498aklu          Caller is responsible to free the returned string.
5555c08e1173703234cc2913757f237ee916087498aklu
5565c08e1173703234cc2913757f237ee916087498aklu**/
5575c08e1173703234cc2913757f237ee916087498akluCHAR16*
5585c08e1173703234cc2913757f237ee916087498akluBOpt_AppendFileName (
5595c08e1173703234cc2913757f237ee916087498aklu  IN  CHAR16  *Str1,
5605c08e1173703234cc2913757f237ee916087498aklu  IN  CHAR16  *Str2
5615c08e1173703234cc2913757f237ee916087498aklu  );
5625c08e1173703234cc2913757f237ee916087498aklu
5635c08e1173703234cc2913757f237ee916087498aklu/**
5645c08e1173703234cc2913757f237ee916087498aklu
5655c08e1173703234cc2913757f237ee916087498aklu  Check whether current FileName point to a valid
5665c08e1173703234cc2913757f237ee916087498aklu  Efi Image File.
5675c08e1173703234cc2913757f237ee916087498aklu
5685c08e1173703234cc2913757f237ee916087498aklu  @param FileName  File need to be checked.
5695c08e1173703234cc2913757f237ee916087498aklu
5705c08e1173703234cc2913757f237ee916087498aklu  @retval TRUE  Is Efi Image
5715c08e1173703234cc2913757f237ee916087498aklu  @retval FALSE Not a valid Efi Image
5725c08e1173703234cc2913757f237ee916087498aklu
5735c08e1173703234cc2913757f237ee916087498aklu**/
5745c08e1173703234cc2913757f237ee916087498akluBOOLEAN
5755c08e1173703234cc2913757f237ee916087498akluBOpt_IsEfiImageName (
5765c08e1173703234cc2913757f237ee916087498aklu  IN UINT16  *FileName
5775c08e1173703234cc2913757f237ee916087498aklu  );
5785c08e1173703234cc2913757f237ee916087498aklu
5795c08e1173703234cc2913757f237ee916087498aklu/**
5805c08e1173703234cc2913757f237ee916087498aklu
5815c08e1173703234cc2913757f237ee916087498aklu  Check whether current FileName point to a valid Efi Application
5825c08e1173703234cc2913757f237ee916087498aklu
5835c08e1173703234cc2913757f237ee916087498aklu  @param Dir       Pointer to current Directory
5845c08e1173703234cc2913757f237ee916087498aklu  @param FileName  Pointer to current File name.
5855c08e1173703234cc2913757f237ee916087498aklu
5865c08e1173703234cc2913757f237ee916087498aklu  @retval TRUE      Is a valid Efi Application
5875c08e1173703234cc2913757f237ee916087498aklu  @retval FALSE     not a valid Efi Application
5885c08e1173703234cc2913757f237ee916087498aklu
5895c08e1173703234cc2913757f237ee916087498aklu**/
5905c08e1173703234cc2913757f237ee916087498akluBOOLEAN
5915c08e1173703234cc2913757f237ee916087498akluBOpt_IsEfiApp (
5925c08e1173703234cc2913757f237ee916087498aklu  IN EFI_FILE_HANDLE Dir,
5935c08e1173703234cc2913757f237ee916087498aklu  IN UINT16          *FileName
5945c08e1173703234cc2913757f237ee916087498aklu  );
5955c08e1173703234cc2913757f237ee916087498aklu
5965c08e1173703234cc2913757f237ee916087498aklu/**
5975c08e1173703234cc2913757f237ee916087498aklu
5985c08e1173703234cc2913757f237ee916087498aklu  Get the Option Number that has not been allocated for use.
5995c08e1173703234cc2913757f237ee916087498aklu
6005c08e1173703234cc2913757f237ee916087498aklu  @return The available Option Number.
6015c08e1173703234cc2913757f237ee916087498aklu
6025c08e1173703234cc2913757f237ee916087498aklu**/
6035c08e1173703234cc2913757f237ee916087498akluUINT16
6045c08e1173703234cc2913757f237ee916087498akluBOpt_GetBootOptionNumber (
6055c08e1173703234cc2913757f237ee916087498aklu  VOID
6065c08e1173703234cc2913757f237ee916087498aklu  );
6075c08e1173703234cc2913757f237ee916087498aklu
6085c08e1173703234cc2913757f237ee916087498aklu/**
6095c08e1173703234cc2913757f237ee916087498aklu
6105c08e1173703234cc2913757f237ee916087498aklu  Get the Option Number that is not in use.
6115c08e1173703234cc2913757f237ee916087498aklu
6125c08e1173703234cc2913757f237ee916087498aklu  @return The unused Option Number.
6135c08e1173703234cc2913757f237ee916087498aklu
6145c08e1173703234cc2913757f237ee916087498aklu**/
6155c08e1173703234cc2913757f237ee916087498akluUINT16
6165c08e1173703234cc2913757f237ee916087498akluBOpt_GetDriverOptionNumber (
6175c08e1173703234cc2913757f237ee916087498aklu  VOID
6185c08e1173703234cc2913757f237ee916087498aklu  );
6195c08e1173703234cc2913757f237ee916087498aklu
6205c08e1173703234cc2913757f237ee916087498aklu/**
6215c08e1173703234cc2913757f237ee916087498aklu  Create a menu entry give a Menu type.
6225c08e1173703234cc2913757f237ee916087498aklu
6235c08e1173703234cc2913757f237ee916087498aklu  @param MenuType        The Menu type to be created.
6245c08e1173703234cc2913757f237ee916087498aklu
6255c08e1173703234cc2913757f237ee916087498aklu
6265c08e1173703234cc2913757f237ee916087498aklu  @retval NULL           If failed to create the menu.
6275c08e1173703234cc2913757f237ee916087498aklu  @return                The menu.
6285c08e1173703234cc2913757f237ee916087498aklu
6295c08e1173703234cc2913757f237ee916087498aklu**/
6305c08e1173703234cc2913757f237ee916087498akluBM_MENU_ENTRY                     *
6315c08e1173703234cc2913757f237ee916087498akluBOpt_CreateMenuEntry (
6325c08e1173703234cc2913757f237ee916087498aklu  UINTN           MenuType
6335c08e1173703234cc2913757f237ee916087498aklu  );
6345c08e1173703234cc2913757f237ee916087498aklu
6355c08e1173703234cc2913757f237ee916087498aklu/**
6365c08e1173703234cc2913757f237ee916087498aklu  Free up all resource allocated for a BM_MENU_ENTRY.
6375c08e1173703234cc2913757f237ee916087498aklu
6385c08e1173703234cc2913757f237ee916087498aklu  @param MenuEntry   A pointer to BM_MENU_ENTRY.
6395c08e1173703234cc2913757f237ee916087498aklu
6405c08e1173703234cc2913757f237ee916087498aklu**/
6415c08e1173703234cc2913757f237ee916087498akluVOID
6425c08e1173703234cc2913757f237ee916087498akluBOpt_DestroyMenuEntry (
6435c08e1173703234cc2913757f237ee916087498aklu  BM_MENU_ENTRY         *MenuEntry
6445c08e1173703234cc2913757f237ee916087498aklu  );
6455c08e1173703234cc2913757f237ee916087498aklu
6465c08e1173703234cc2913757f237ee916087498aklu/**
6475c08e1173703234cc2913757f237ee916087498aklu  Get the Menu Entry from the list in Menu Entry List.
6485c08e1173703234cc2913757f237ee916087498aklu
6495c08e1173703234cc2913757f237ee916087498aklu  If MenuNumber is great or equal to the number of Menu
6505c08e1173703234cc2913757f237ee916087498aklu  Entry in the list, then ASSERT.
6515c08e1173703234cc2913757f237ee916087498aklu
6525c08e1173703234cc2913757f237ee916087498aklu  @param MenuOption      The Menu Entry List to read the menu entry.
6535c08e1173703234cc2913757f237ee916087498aklu  @param MenuNumber      The index of Menu Entry.
6545c08e1173703234cc2913757f237ee916087498aklu
6555c08e1173703234cc2913757f237ee916087498aklu  @return The Menu Entry.
6565c08e1173703234cc2913757f237ee916087498aklu
6575c08e1173703234cc2913757f237ee916087498aklu**/
6585c08e1173703234cc2913757f237ee916087498akluBM_MENU_ENTRY                     *
6595c08e1173703234cc2913757f237ee916087498akluBOpt_GetMenuEntry (
6605c08e1173703234cc2913757f237ee916087498aklu  BM_MENU_OPTION      *MenuOption,
6615c08e1173703234cc2913757f237ee916087498aklu  UINTN               MenuNumber
6625c08e1173703234cc2913757f237ee916087498aklu  );
6635c08e1173703234cc2913757f237ee916087498aklu
6645c08e1173703234cc2913757f237ee916087498aklu//
6655c08e1173703234cc2913757f237ee916087498aklu// Locate all serial io devices for console
6665c08e1173703234cc2913757f237ee916087498aklu//
6675c08e1173703234cc2913757f237ee916087498aklu/**
6685c08e1173703234cc2913757f237ee916087498aklu  Build a list containing all serial devices.
6695c08e1173703234cc2913757f237ee916087498aklu
6705c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS The function complete successfully.
6715c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_UNSUPPORTED No serial ports present.
6725c08e1173703234cc2913757f237ee916087498aklu
6735c08e1173703234cc2913757f237ee916087498aklu**/
6745c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
6755c08e1173703234cc2913757f237ee916087498akluLocateSerialIo (
6765c08e1173703234cc2913757f237ee916087498aklu  VOID
6775c08e1173703234cc2913757f237ee916087498aklu  );
6785c08e1173703234cc2913757f237ee916087498aklu
6795c08e1173703234cc2913757f237ee916087498aklu//
6805c08e1173703234cc2913757f237ee916087498aklu// Initializing Console menu
6815c08e1173703234cc2913757f237ee916087498aklu//
6825c08e1173703234cc2913757f237ee916087498aklu/**
6835c08e1173703234cc2913757f237ee916087498aklu  Build up ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu
6845c08e1173703234cc2913757f237ee916087498aklu
6855c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS    The function always complete successfully.
6865c08e1173703234cc2913757f237ee916087498aklu
6875c08e1173703234cc2913757f237ee916087498aklu**/
6885c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
6895c08e1173703234cc2913757f237ee916087498akluGetAllConsoles(
6905c08e1173703234cc2913757f237ee916087498aklu  VOID
6915c08e1173703234cc2913757f237ee916087498aklu  );
6925c08e1173703234cc2913757f237ee916087498aklu
6935c08e1173703234cc2913757f237ee916087498aklu//
6945c08e1173703234cc2913757f237ee916087498aklu// Get current mode information
6955c08e1173703234cc2913757f237ee916087498aklu//
6965c08e1173703234cc2913757f237ee916087498aklu/**
6975c08e1173703234cc2913757f237ee916087498aklu  Get mode number according to column and row
6985c08e1173703234cc2913757f237ee916087498aklu
6995c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
7005c08e1173703234cc2913757f237ee916087498aklu**/
7015c08e1173703234cc2913757f237ee916087498akluVOID
7025c08e1173703234cc2913757f237ee916087498akluGetConsoleOutMode (
7035c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_CALLBACK_DATA    *CallbackData
7045c08e1173703234cc2913757f237ee916087498aklu  );
7055c08e1173703234cc2913757f237ee916087498aklu
7065c08e1173703234cc2913757f237ee916087498aklu//
7075c08e1173703234cc2913757f237ee916087498aklu// Cleaning up console menu
7085c08e1173703234cc2913757f237ee916087498aklu//
7095c08e1173703234cc2913757f237ee916087498aklu/**
7105c08e1173703234cc2913757f237ee916087498aklu  Free ConsoleOutMenu, ConsoleInpMenu and ConsoleErrMenu
7115c08e1173703234cc2913757f237ee916087498aklu
7125c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS    The function always complete successfully.
7135c08e1173703234cc2913757f237ee916087498aklu**/
7145c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
7155c08e1173703234cc2913757f237ee916087498akluFreeAllConsoles (
7165c08e1173703234cc2913757f237ee916087498aklu  VOID
7175c08e1173703234cc2913757f237ee916087498aklu  );
7185c08e1173703234cc2913757f237ee916087498aklu
7195c08e1173703234cc2913757f237ee916087498aklu/**
7205c08e1173703234cc2913757f237ee916087498aklu  Update the device path that describing a terminal device
7215c08e1173703234cc2913757f237ee916087498aklu  based on the new BaudRate, Data Bits, parity and Stop Bits
7225c08e1173703234cc2913757f237ee916087498aklu  set.
7235c08e1173703234cc2913757f237ee916087498aklu
7245c08e1173703234cc2913757f237ee916087498aklu  @param DevicePath     The devicepath protocol instance wanted to be updated.
7255c08e1173703234cc2913757f237ee916087498aklu
7265c08e1173703234cc2913757f237ee916087498aklu**/
7275c08e1173703234cc2913757f237ee916087498akluVOID
7285c08e1173703234cc2913757f237ee916087498akluChangeVariableDevicePath (
7295c08e1173703234cc2913757f237ee916087498aklu  IN OUT EFI_DEVICE_PATH_PROTOCOL  *DevicePath
7305c08e1173703234cc2913757f237ee916087498aklu  );
7315c08e1173703234cc2913757f237ee916087498aklu
7325c08e1173703234cc2913757f237ee916087498aklu/**
7335c08e1173703234cc2913757f237ee916087498aklu  Update the multi-instance device path of Terminal Device based on
7345c08e1173703234cc2913757f237ee916087498aklu  the global TerminalMenu. If ChangeTernimal is TRUE, the terminal
7355c08e1173703234cc2913757f237ee916087498aklu  device path in the Terminal Device in TerminalMenu is also updated.
7365c08e1173703234cc2913757f237ee916087498aklu
7375c08e1173703234cc2913757f237ee916087498aklu  @param DevicePath      The multi-instance device path.
7385c08e1173703234cc2913757f237ee916087498aklu  @param ChangeTerminal  TRUE, then device path in the Terminal Device
7395c08e1173703234cc2913757f237ee916087498aklu                         in TerminalMenu is also updated; FALSE, no update.
7405c08e1173703234cc2913757f237ee916087498aklu
7415c08e1173703234cc2913757f237ee916087498aklu  @return EFI_SUCCESS    The function completes successfully.
7425c08e1173703234cc2913757f237ee916087498aklu
7435c08e1173703234cc2913757f237ee916087498aklu**/
7445c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
7455c08e1173703234cc2913757f237ee916087498akluChangeTerminalDevicePath (
7465c08e1173703234cc2913757f237ee916087498aklu  IN OUT EFI_DEVICE_PATH_PROTOCOL  *DevicePath,
7475c08e1173703234cc2913757f237ee916087498aklu  IN BOOLEAN                   ChangeTerminal
7485c08e1173703234cc2913757f237ee916087498aklu  );
7495c08e1173703234cc2913757f237ee916087498aklu
7505c08e1173703234cc2913757f237ee916087498aklu//
7515c08e1173703234cc2913757f237ee916087498aklu// Variable operation by menu selection
7525c08e1173703234cc2913757f237ee916087498aklu//
7535c08e1173703234cc2913757f237ee916087498aklu/**
7545c08e1173703234cc2913757f237ee916087498aklu  This function create a currently loaded Boot Option from
7555c08e1173703234cc2913757f237ee916087498aklu  the BMM. It then appends this Boot Option to the end of
7565c08e1173703234cc2913757f237ee916087498aklu  the "BootOrder" list. It also append this Boot Opotion to the end
7575c08e1173703234cc2913757f237ee916087498aklu  of BootOptionMenu.
7585c08e1173703234cc2913757f237ee916087498aklu
7595c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData           The BMM context data.
7605c08e1173703234cc2913757f237ee916087498aklu  @param NvRamMap               The file explorer formset internal state.
7615c08e1173703234cc2913757f237ee916087498aklu
7625c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_OUT_OF_RESOURCES  If not enought memory to complete the operation.
7635c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS           If function completes successfully.
7645c08e1173703234cc2913757f237ee916087498aklu
7655c08e1173703234cc2913757f237ee916087498aklu**/
7665c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
7675c08e1173703234cc2913757f237ee916087498akluVar_UpdateBootOption (
7685c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_CALLBACK_DATA                   *CallbackData,
7695c08e1173703234cc2913757f237ee916087498aklu  IN  FILE_EXPLORER_NV_DATA               *NvRamMap
7705c08e1173703234cc2913757f237ee916087498aklu  );
7715c08e1173703234cc2913757f237ee916087498aklu
7725c08e1173703234cc2913757f237ee916087498aklu/**
7735c08e1173703234cc2913757f237ee916087498aklu  Delete Boot Option that represent a Deleted state in BootOptionMenu.
7745c08e1173703234cc2913757f237ee916087498aklu  After deleting this boot option, call Var_ChangeBootOrder to
7755c08e1173703234cc2913757f237ee916087498aklu  make sure BootOrder is in valid state.
7765c08e1173703234cc2913757f237ee916087498aklu
7775c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS   If all boot load option EFI Variables corresponding to
7785c08e1173703234cc2913757f237ee916087498aklu                        BM_LOAD_CONTEXT marked for deletion is deleted
7795c08e1173703234cc2913757f237ee916087498aklu  @return Others        If failed to update the "BootOrder" variable after deletion.
7805c08e1173703234cc2913757f237ee916087498aklu
7815c08e1173703234cc2913757f237ee916087498aklu**/
7825c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
7835c08e1173703234cc2913757f237ee916087498akluVar_DelBootOption (
7845c08e1173703234cc2913757f237ee916087498aklu  VOID
7855c08e1173703234cc2913757f237ee916087498aklu  );
7865c08e1173703234cc2913757f237ee916087498aklu
7875c08e1173703234cc2913757f237ee916087498aklu/**
7885c08e1173703234cc2913757f237ee916087498aklu  After any operation on Boot####, there will be a discrepancy in BootOrder.
7895c08e1173703234cc2913757f237ee916087498aklu  Since some are missing but in BootOrder, while some are present but are
7905c08e1173703234cc2913757f237ee916087498aklu  not reflected by BootOrder. Then a function rebuild BootOrder from
7915c08e1173703234cc2913757f237ee916087498aklu  scratch by content from BootOptionMenu is needed.
7925c08e1173703234cc2913757f237ee916087498aklu
7935c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS  The boot order is updated successfully.
7945c08e1173703234cc2913757f237ee916087498aklu  @return  other than EFI_SUCCESS if failed to change the "BootOrder" EFI Variable.
7955c08e1173703234cc2913757f237ee916087498aklu
7965c08e1173703234cc2913757f237ee916087498aklu**/
7975c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
7985c08e1173703234cc2913757f237ee916087498akluVar_ChangeBootOrder (
7995c08e1173703234cc2913757f237ee916087498aklu  VOID
8005c08e1173703234cc2913757f237ee916087498aklu  );
8015c08e1173703234cc2913757f237ee916087498aklu
8025c08e1173703234cc2913757f237ee916087498aklu/**
8035c08e1173703234cc2913757f237ee916087498aklu  This function create a currently loaded Drive Option from
8045c08e1173703234cc2913757f237ee916087498aklu  the BMM. It then appends this Driver Option to the end of
8055c08e1173703234cc2913757f237ee916087498aklu  the "DriverOrder" list. It append this Driver Opotion to the end
8065c08e1173703234cc2913757f237ee916087498aklu  of DriverOptionMenu.
8075c08e1173703234cc2913757f237ee916087498aklu
8085c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
8095c08e1173703234cc2913757f237ee916087498aklu  @param HiiHandle       The HII handle associated with the BMM formset.
8105c08e1173703234cc2913757f237ee916087498aklu  @param DescriptionData The description of this driver option.
8115c08e1173703234cc2913757f237ee916087498aklu  @param OptionalData    The optional load option.
8125c08e1173703234cc2913757f237ee916087498aklu  @param ForceReconnect  If to force reconnect.
8135c08e1173703234cc2913757f237ee916087498aklu
8145c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_OUT_OF_RESOURCES If not enought memory to complete the operation.
8155c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS          If function completes successfully.
8165c08e1173703234cc2913757f237ee916087498aklu
8175c08e1173703234cc2913757f237ee916087498aklu**/
8185c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
8195c08e1173703234cc2913757f237ee916087498akluVar_UpdateDriverOption (
8205c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_CALLBACK_DATA         *CallbackData,
8215c08e1173703234cc2913757f237ee916087498aklu  IN  EFI_HII_HANDLE            HiiHandle,
8225c08e1173703234cc2913757f237ee916087498aklu  IN  UINT16                    *DescriptionData,
8235c08e1173703234cc2913757f237ee916087498aklu  IN  UINT16                    *OptionalData,
8245c08e1173703234cc2913757f237ee916087498aklu  IN  UINT8                     ForceReconnect
8255c08e1173703234cc2913757f237ee916087498aklu  );
8265c08e1173703234cc2913757f237ee916087498aklu
8275c08e1173703234cc2913757f237ee916087498aklu/**
8285c08e1173703234cc2913757f237ee916087498aklu  Delete Load Option that represent a Deleted state in BootOptionMenu.
8295c08e1173703234cc2913757f237ee916087498aklu  After deleting this Driver option, call Var_ChangeDriverOrder to
8305c08e1173703234cc2913757f237ee916087498aklu  make sure DriverOrder is in valid state.
8315c08e1173703234cc2913757f237ee916087498aklu
8325c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS Load Option is successfully updated.
8335c08e1173703234cc2913757f237ee916087498aklu  @return Other value than EFI_SUCCESS if failed to update "Driver Order" EFI
8345c08e1173703234cc2913757f237ee916087498aklu          Variable.
8355c08e1173703234cc2913757f237ee916087498aklu
8365c08e1173703234cc2913757f237ee916087498aklu**/
8375c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
8385c08e1173703234cc2913757f237ee916087498akluVar_DelDriverOption (
8395c08e1173703234cc2913757f237ee916087498aklu  VOID
8405c08e1173703234cc2913757f237ee916087498aklu  );
8415c08e1173703234cc2913757f237ee916087498aklu
8425c08e1173703234cc2913757f237ee916087498aklu/**
8435c08e1173703234cc2913757f237ee916087498aklu  After any operation on Driver####, there will be a discrepancy in
8445c08e1173703234cc2913757f237ee916087498aklu  DriverOrder. Since some are missing but in DriverOrder, while some
8455c08e1173703234cc2913757f237ee916087498aklu  are present but are not reflected by DriverOrder. Then a function
8465c08e1173703234cc2913757f237ee916087498aklu  rebuild DriverOrder from scratch by content from DriverOptionMenu is
8475c08e1173703234cc2913757f237ee916087498aklu  needed.
8485c08e1173703234cc2913757f237ee916087498aklu
8495c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS  The driver order is updated successfully.
8505c08e1173703234cc2913757f237ee916087498aklu  @return  other than EFI_SUCCESS if failed to set the "DriverOrder" EFI Variable.
8515c08e1173703234cc2913757f237ee916087498aklu
8525c08e1173703234cc2913757f237ee916087498aklu**/
8535c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
8545c08e1173703234cc2913757f237ee916087498akluVar_ChangeDriverOrder (
8555c08e1173703234cc2913757f237ee916087498aklu  VOID
8565c08e1173703234cc2913757f237ee916087498aklu  );
8575c08e1173703234cc2913757f237ee916087498aklu
8585c08e1173703234cc2913757f237ee916087498aklu/**
8595c08e1173703234cc2913757f237ee916087498aklu  This function delete and build multi-instance device path ConIn
8605c08e1173703234cc2913757f237ee916087498aklu  console device.
8615c08e1173703234cc2913757f237ee916087498aklu
8625c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS    The function complete successfully.
8635c08e1173703234cc2913757f237ee916087498aklu  @return The EFI variable can not be saved. See gRT->SetVariable for detail return information.
8645c08e1173703234cc2913757f237ee916087498aklu**/
8655c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
8665c08e1173703234cc2913757f237ee916087498akluVar_UpdateConsoleInpOption (
8675c08e1173703234cc2913757f237ee916087498aklu  VOID
8685c08e1173703234cc2913757f237ee916087498aklu  );
8695c08e1173703234cc2913757f237ee916087498aklu
8705c08e1173703234cc2913757f237ee916087498aklu/**
8715c08e1173703234cc2913757f237ee916087498aklu  This function delete and build multi-instance device path ConOut console device.
8725c08e1173703234cc2913757f237ee916087498aklu
8735c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS    The function complete successfully.
8745c08e1173703234cc2913757f237ee916087498aklu  @return The EFI variable can not be saved. See gRT->SetVariable for detail return information.
8755c08e1173703234cc2913757f237ee916087498aklu**/
8765c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
8775c08e1173703234cc2913757f237ee916087498akluVar_UpdateConsoleOutOption (
8785c08e1173703234cc2913757f237ee916087498aklu  VOID
8795c08e1173703234cc2913757f237ee916087498aklu  );
8805c08e1173703234cc2913757f237ee916087498aklu
8815c08e1173703234cc2913757f237ee916087498aklu/**
8825c08e1173703234cc2913757f237ee916087498aklu  This function delete and build multi-instance device path ErrOut console device.
8835c08e1173703234cc2913757f237ee916087498aklu
8845c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS    The function complete successfully.
8855c08e1173703234cc2913757f237ee916087498aklu  @return The EFI variable can not be saved. See gRT->SetVariable for detail return information.
8865c08e1173703234cc2913757f237ee916087498aklu**/
8875c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
8885c08e1173703234cc2913757f237ee916087498akluVar_UpdateErrorOutOption (
8895c08e1173703234cc2913757f237ee916087498aklu  VOID
8905c08e1173703234cc2913757f237ee916087498aklu  );
8915c08e1173703234cc2913757f237ee916087498aklu
8925c08e1173703234cc2913757f237ee916087498aklu/**
8935c08e1173703234cc2913757f237ee916087498aklu  Update the device path of "ConOut", "ConIn" and "ErrOut" based on the new BaudRate, Data Bits,
8945c08e1173703234cc2913757f237ee916087498aklu  parity and stop Bits set.
8955c08e1173703234cc2913757f237ee916087498aklu
8965c08e1173703234cc2913757f237ee916087498aklu**/
8975c08e1173703234cc2913757f237ee916087498akluVOID
8985c08e1173703234cc2913757f237ee916087498akluVar_UpdateAllConsoleOption (
8995c08e1173703234cc2913757f237ee916087498aklu  VOID
9005c08e1173703234cc2913757f237ee916087498aklu  );
9015c08e1173703234cc2913757f237ee916087498aklu
9025c08e1173703234cc2913757f237ee916087498aklu/**
9035c08e1173703234cc2913757f237ee916087498aklu  This function update the "BootNext" EFI Variable. If there is no "BootNex" specified in BMM,
9045c08e1173703234cc2913757f237ee916087498aklu  this EFI Variable is deleted.
9055c08e1173703234cc2913757f237ee916087498aklu  It also update the BMM context data specified the "BootNext" value.
9065c08e1173703234cc2913757f237ee916087498aklu
9075c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
9085c08e1173703234cc2913757f237ee916087498aklu
9095c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS    The function complete successfully.
9105c08e1173703234cc2913757f237ee916087498aklu  @return The EFI variable can not be saved. See gRT->SetVariable for detail return information.
9115c08e1173703234cc2913757f237ee916087498aklu
9125c08e1173703234cc2913757f237ee916087498aklu**/
9135c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
9145c08e1173703234cc2913757f237ee916087498akluVar_UpdateBootNext (
9155c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA            *CallbackData
9165c08e1173703234cc2913757f237ee916087498aklu  );
9175c08e1173703234cc2913757f237ee916087498aklu
9185c08e1173703234cc2913757f237ee916087498aklu/**
9195c08e1173703234cc2913757f237ee916087498aklu  This function update the "BootOrder" EFI Variable based on BMM Formset's NV map. It then refresh
9205c08e1173703234cc2913757f237ee916087498aklu  BootOptionMenu with the new "BootOrder" list.
9215c08e1173703234cc2913757f237ee916087498aklu
9225c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData           The BMM context data.
9235c08e1173703234cc2913757f237ee916087498aklu
9245c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS           The function complete successfully.
9255c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_OUT_OF_RESOURCES  Not enough memory to complete the function.
9265c08e1173703234cc2913757f237ee916087498aklu  @return not The EFI variable can not be saved. See gRT->SetVariable for detail return information.
9275c08e1173703234cc2913757f237ee916087498aklu
9285c08e1173703234cc2913757f237ee916087498aklu**/
9295c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
9305c08e1173703234cc2913757f237ee916087498akluVar_UpdateBootOrder (
9315c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA            *CallbackData
9325c08e1173703234cc2913757f237ee916087498aklu  );
9335c08e1173703234cc2913757f237ee916087498aklu
9345c08e1173703234cc2913757f237ee916087498aklu/**
9355c08e1173703234cc2913757f237ee916087498aklu  This function update the "DriverOrder" EFI Variable based on
9365c08e1173703234cc2913757f237ee916087498aklu  BMM Formset's NV map. It then refresh DriverOptionMenu
9375c08e1173703234cc2913757f237ee916087498aklu  with the new "DriverOrder" list.
9385c08e1173703234cc2913757f237ee916087498aklu
9395c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
9405c08e1173703234cc2913757f237ee916087498aklu
9415c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS           The function complete successfully.
9425c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_OUT_OF_RESOURCES  Not enough memory to complete the function.
9435c08e1173703234cc2913757f237ee916087498aklu  @return The EFI variable can not be saved. See gRT->SetVariable for detail return information.
9445c08e1173703234cc2913757f237ee916087498aklu
9455c08e1173703234cc2913757f237ee916087498aklu**/
9465c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
9475c08e1173703234cc2913757f237ee916087498akluVar_UpdateDriverOrder (
9485c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA            *CallbackData
9495c08e1173703234cc2913757f237ee916087498aklu  );
9505c08e1173703234cc2913757f237ee916087498aklu
9515c08e1173703234cc2913757f237ee916087498aklu/**
9525c08e1173703234cc2913757f237ee916087498aklu  Update the legacy BBS boot option. L"LegacyDevOrder" and EfiLegacyDevOrderGuid EFI Variable
9535c08e1173703234cc2913757f237ee916087498aklu  is udpated with the new Legacy Boot order. The EFI Variable of "Boot####" and gEfiGlobalVariableGuid
9545c08e1173703234cc2913757f237ee916087498aklu  is also updated.
9555c08e1173703234cc2913757f237ee916087498aklu
9565c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The context data for BMM.
9575c08e1173703234cc2913757f237ee916087498aklu
9585c08e1173703234cc2913757f237ee916087498aklu  @return EFI_SUCCESS    The function completed successfully.
9595c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_NOT_FOUND  If L"LegacyDevOrder" and EfiLegacyDevOrderGuid EFI Variable can not be found.
9605c08e1173703234cc2913757f237ee916087498aklu
9615c08e1173703234cc2913757f237ee916087498aklu**/
9625c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
9635c08e1173703234cc2913757f237ee916087498akluVar_UpdateBBSOption (
9645c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA            *CallbackData
9655c08e1173703234cc2913757f237ee916087498aklu  );
9665c08e1173703234cc2913757f237ee916087498aklu
9675c08e1173703234cc2913757f237ee916087498aklu/**
9685c08e1173703234cc2913757f237ee916087498aklu  Update the Text Mode of Console.
9695c08e1173703234cc2913757f237ee916087498aklu
9705c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData  The context data for BMM.
9715c08e1173703234cc2913757f237ee916087498aklu
9725c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCSS If the Text Mode of Console is updated.
9735c08e1173703234cc2913757f237ee916087498aklu  @return Other value if the Text Mode of Console is not updated.
9745c08e1173703234cc2913757f237ee916087498aklu
9755c08e1173703234cc2913757f237ee916087498aklu**/
9765c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
9775c08e1173703234cc2913757f237ee916087498akluVar_UpdateConMode (
9785c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA            *CallbackData
9795c08e1173703234cc2913757f237ee916087498aklu  );
9805c08e1173703234cc2913757f237ee916087498aklu
9815c08e1173703234cc2913757f237ee916087498aklu//
9825c08e1173703234cc2913757f237ee916087498aklu// Following are page create and refresh functions
9835c08e1173703234cc2913757f237ee916087498aklu//
9845c08e1173703234cc2913757f237ee916087498aklu/**
9855c08e1173703234cc2913757f237ee916087498aklu  Refresh the global UpdateData structure.
9865c08e1173703234cc2913757f237ee916087498aklu
9875c08e1173703234cc2913757f237ee916087498aklu**/
9885c08e1173703234cc2913757f237ee916087498akluVOID
9895c08e1173703234cc2913757f237ee916087498akluRefreshUpdateData (
9905c08e1173703234cc2913757f237ee916087498aklu  VOID
9915c08e1173703234cc2913757f237ee916087498aklu  );
9925c08e1173703234cc2913757f237ee916087498aklu
9935c08e1173703234cc2913757f237ee916087498aklu/**
9945c08e1173703234cc2913757f237ee916087498aklu  Clean up the dynamic opcode at label and form specified by
9955c08e1173703234cc2913757f237ee916087498aklu  both LabelId.
9965c08e1173703234cc2913757f237ee916087498aklu
9975c08e1173703234cc2913757f237ee916087498aklu  @param LabelId         It is both the Form ID and Label ID for
9985c08e1173703234cc2913757f237ee916087498aklu                         opcode deletion.
9995c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10005c08e1173703234cc2913757f237ee916087498aklu
10015c08e1173703234cc2913757f237ee916087498aklu**/
10025c08e1173703234cc2913757f237ee916087498akluVOID
10035c08e1173703234cc2913757f237ee916087498akluCleanUpPage (
10045c08e1173703234cc2913757f237ee916087498aklu  IN UINT16                           LabelId,
10055c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10065c08e1173703234cc2913757f237ee916087498aklu  );
10075c08e1173703234cc2913757f237ee916087498aklu
10085c08e1173703234cc2913757f237ee916087498aklu/**
10095c08e1173703234cc2913757f237ee916087498aklu  Create a lit of boot option from global BootOptionMenu. It
10105c08e1173703234cc2913757f237ee916087498aklu  allow user to delete the boot option.
10115c08e1173703234cc2913757f237ee916087498aklu
10125c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10135c08e1173703234cc2913757f237ee916087498aklu
10145c08e1173703234cc2913757f237ee916087498aklu**/
10155c08e1173703234cc2913757f237ee916087498akluVOID
10165c08e1173703234cc2913757f237ee916087498akluUpdateBootDelPage (
10175c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10185c08e1173703234cc2913757f237ee916087498aklu  );
10195c08e1173703234cc2913757f237ee916087498aklu
10205c08e1173703234cc2913757f237ee916087498aklu/**
10215c08e1173703234cc2913757f237ee916087498aklu  Create a lit of driver option from global DriverMenu.
10225c08e1173703234cc2913757f237ee916087498aklu
10235c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10245c08e1173703234cc2913757f237ee916087498aklu**/
10255c08e1173703234cc2913757f237ee916087498akluVOID
10265c08e1173703234cc2913757f237ee916087498akluUpdateDrvAddHandlePage (
10275c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10285c08e1173703234cc2913757f237ee916087498aklu  );
10295c08e1173703234cc2913757f237ee916087498aklu
10305c08e1173703234cc2913757f237ee916087498aklu/**
10315c08e1173703234cc2913757f237ee916087498aklu  Create a lit of driver option from global DriverOptionMenu. It
10325c08e1173703234cc2913757f237ee916087498aklu  allow user to delete the driver option.
10335c08e1173703234cc2913757f237ee916087498aklu
10345c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10355c08e1173703234cc2913757f237ee916087498aklu**/
10365c08e1173703234cc2913757f237ee916087498akluVOID
10375c08e1173703234cc2913757f237ee916087498akluUpdateDrvDelPage (
10385c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10395c08e1173703234cc2913757f237ee916087498aklu  );
10405c08e1173703234cc2913757f237ee916087498aklu
10415c08e1173703234cc2913757f237ee916087498aklu/**
10425c08e1173703234cc2913757f237ee916087498aklu  Prepare the page to allow user to add description for a Driver Option.
10435c08e1173703234cc2913757f237ee916087498aklu
10445c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10455c08e1173703234cc2913757f237ee916087498aklu**/
10465c08e1173703234cc2913757f237ee916087498akluVOID
10475c08e1173703234cc2913757f237ee916087498akluUpdateDriverAddHandleDescPage (
10485c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10495c08e1173703234cc2913757f237ee916087498aklu  );
10505c08e1173703234cc2913757f237ee916087498aklu
10515c08e1173703234cc2913757f237ee916087498aklu/**
10525c08e1173703234cc2913757f237ee916087498aklu  Dispatch the correct update page function to call based on the UpdatePageId.
10535c08e1173703234cc2913757f237ee916087498aklu
10545c08e1173703234cc2913757f237ee916087498aklu  @param UpdatePageId    The form ID.
10555c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10565c08e1173703234cc2913757f237ee916087498aklu**/
10575c08e1173703234cc2913757f237ee916087498akluVOID
10585c08e1173703234cc2913757f237ee916087498akluUpdatePageBody (
10595c08e1173703234cc2913757f237ee916087498aklu  IN UINT16                           UpdatePageId,
10605c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10615c08e1173703234cc2913757f237ee916087498aklu  );
10625c08e1173703234cc2913757f237ee916087498aklu
10635c08e1173703234cc2913757f237ee916087498aklu/**
10645c08e1173703234cc2913757f237ee916087498aklu  Create the dynamic page to allow user to set the "BootNext" vaule.
10655c08e1173703234cc2913757f237ee916087498aklu
10665c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10675c08e1173703234cc2913757f237ee916087498aklu**/
10685c08e1173703234cc2913757f237ee916087498akluVOID
10695c08e1173703234cc2913757f237ee916087498akluUpdateBootNextPage (
10705c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10715c08e1173703234cc2913757f237ee916087498aklu  );
10725c08e1173703234cc2913757f237ee916087498aklu
10735c08e1173703234cc2913757f237ee916087498aklu/**
10745c08e1173703234cc2913757f237ee916087498aklu  Create the dynamic page to allow user to set the "TimeOut" vaule.
10755c08e1173703234cc2913757f237ee916087498aklu
10765c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10775c08e1173703234cc2913757f237ee916087498aklu**/
10785c08e1173703234cc2913757f237ee916087498akluVOID
10795c08e1173703234cc2913757f237ee916087498akluUpdateTimeOutPage (
10805c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10815c08e1173703234cc2913757f237ee916087498aklu  );
10825c08e1173703234cc2913757f237ee916087498aklu
10835c08e1173703234cc2913757f237ee916087498aklu/**
10845c08e1173703234cc2913757f237ee916087498aklu  Create the dynamic page which allows user to set the property such as Baud Rate, Data Bits,
10855c08e1173703234cc2913757f237ee916087498aklu  Parity, Stop Bits, Terminal Type.
10865c08e1173703234cc2913757f237ee916087498aklu
10875c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10885c08e1173703234cc2913757f237ee916087498aklu**/
10895c08e1173703234cc2913757f237ee916087498akluVOID
10905c08e1173703234cc2913757f237ee916087498akluUpdateTerminalPage (
10915c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
10925c08e1173703234cc2913757f237ee916087498aklu  );
10935c08e1173703234cc2913757f237ee916087498aklu
10945c08e1173703234cc2913757f237ee916087498aklu/**
10955c08e1173703234cc2913757f237ee916087498aklu  Refresh the text mode page
10965c08e1173703234cc2913757f237ee916087498aklu
10975c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
10985c08e1173703234cc2913757f237ee916087498aklu**/
10995c08e1173703234cc2913757f237ee916087498akluVOID
11005c08e1173703234cc2913757f237ee916087498akluUpdateConModePage (
11015c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
11025c08e1173703234cc2913757f237ee916087498aklu  );
11035c08e1173703234cc2913757f237ee916087498aklu
11045c08e1173703234cc2913757f237ee916087498aklu/**
11055c08e1173703234cc2913757f237ee916087498aklu  Create a list of Goto Opcode for all terminal devices logged
11065c08e1173703234cc2913757f237ee916087498aklu  by TerminaMenu. This list will be inserted to form FORM_CON_COM_SETUP_ID.
11075c08e1173703234cc2913757f237ee916087498aklu
11085c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
11095c08e1173703234cc2913757f237ee916087498aklu**/
11105c08e1173703234cc2913757f237ee916087498akluVOID
11115c08e1173703234cc2913757f237ee916087498akluUpdateConCOMPage (
11125c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
11135c08e1173703234cc2913757f237ee916087498aklu  );
11145c08e1173703234cc2913757f237ee916087498aklu
11155c08e1173703234cc2913757f237ee916087498aklu/**
11165c08e1173703234cc2913757f237ee916087498aklu  Create a dynamic page so that Legacy Device boot order
11175c08e1173703234cc2913757f237ee916087498aklu  can be set for specified device type.
11185c08e1173703234cc2913757f237ee916087498aklu
11195c08e1173703234cc2913757f237ee916087498aklu  @param UpdatePageId    The form ID. It also spefies the legacy device type.
11205c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
11215c08e1173703234cc2913757f237ee916087498aklu**/
11225c08e1173703234cc2913757f237ee916087498akluVOID
11235c08e1173703234cc2913757f237ee916087498akluUpdateSetLegacyDeviceOrderPage (
11245c08e1173703234cc2913757f237ee916087498aklu  IN UINT16                           UpdatePageId,
11255c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData
11265c08e1173703234cc2913757f237ee916087498aklu  );
11275c08e1173703234cc2913757f237ee916087498aklu
11285c08e1173703234cc2913757f237ee916087498aklu
11295c08e1173703234cc2913757f237ee916087498aklu/**
11305c08e1173703234cc2913757f237ee916087498aklu  Function opens and returns a file handle to the root directory of a volume.
11315c08e1173703234cc2913757f237ee916087498aklu
11325c08e1173703234cc2913757f237ee916087498aklu  @param DeviceHandle    A handle for a device
11335c08e1173703234cc2913757f237ee916087498aklu  @return A valid file handle or NULL is returned
11345c08e1173703234cc2913757f237ee916087498aklu**/
11355c08e1173703234cc2913757f237ee916087498akluEFI_FILE_HANDLE
11365c08e1173703234cc2913757f237ee916087498akluEfiLibOpenRoot (
11375c08e1173703234cc2913757f237ee916087498aklu  IN EFI_HANDLE       DeviceHandle
11385c08e1173703234cc2913757f237ee916087498aklu  );
11395c08e1173703234cc2913757f237ee916087498aklu
11405c08e1173703234cc2913757f237ee916087498aklu/**
11415c08e1173703234cc2913757f237ee916087498aklu  Function gets the file system information from an open file descriptor,
11425c08e1173703234cc2913757f237ee916087498aklu  and stores it in a buffer allocated from pool.
11435c08e1173703234cc2913757f237ee916087498aklu
11445c08e1173703234cc2913757f237ee916087498aklu  @param FHand           The file handle.
11455c08e1173703234cc2913757f237ee916087498aklu
11465c08e1173703234cc2913757f237ee916087498aklu  @return                A pointer to a buffer with file information.
11475c08e1173703234cc2913757f237ee916087498aklu                         NULL is returned if failed to get Vaolume Label Info.
11485c08e1173703234cc2913757f237ee916087498aklu**/
11495c08e1173703234cc2913757f237ee916087498akluEFI_FILE_SYSTEM_VOLUME_LABEL *
11505c08e1173703234cc2913757f237ee916087498akluEfiLibFileSystemVolumeLabelInfo (
11515c08e1173703234cc2913757f237ee916087498aklu  IN EFI_FILE_HANDLE      FHand
11525c08e1173703234cc2913757f237ee916087498aklu  );
11535c08e1173703234cc2913757f237ee916087498aklu
11545c08e1173703234cc2913757f237ee916087498aklu/**
11555c08e1173703234cc2913757f237ee916087498aklu
11565c08e1173703234cc2913757f237ee916087498aklu  Function gets the file information from an open file descriptor, and stores it
11575c08e1173703234cc2913757f237ee916087498aklu  in a buffer allocated from pool.
11585c08e1173703234cc2913757f237ee916087498aklu
11595c08e1173703234cc2913757f237ee916087498aklu  @param FHand           File Handle.
11605c08e1173703234cc2913757f237ee916087498aklu
11615c08e1173703234cc2913757f237ee916087498aklu  @return                A pointer to a buffer with file information or NULL is returned
11625c08e1173703234cc2913757f237ee916087498aklu
11635c08e1173703234cc2913757f237ee916087498aklu**/
11645c08e1173703234cc2913757f237ee916087498akluEFI_FILE_INFO *
11655c08e1173703234cc2913757f237ee916087498akluEfiLibFileInfo (
11665c08e1173703234cc2913757f237ee916087498aklu  IN EFI_FILE_HANDLE      FHand
11675c08e1173703234cc2913757f237ee916087498aklu  );
11685c08e1173703234cc2913757f237ee916087498aklu
11695c08e1173703234cc2913757f237ee916087498aklu/**
11705c08e1173703234cc2913757f237ee916087498aklu  Find the first instance of this Protocol in the system and return it's interface.
11715c08e1173703234cc2913757f237ee916087498aklu
11725c08e1173703234cc2913757f237ee916087498aklu  @param ProtocolGuid    Provides the protocol to search for
11735c08e1173703234cc2913757f237ee916087498aklu  @param Interface       On return, a pointer to the first interface
11745c08e1173703234cc2913757f237ee916087498aklu                         that matches ProtocolGuid
11755c08e1173703234cc2913757f237ee916087498aklu
11765c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS      A protocol instance matching ProtocolGuid was found
11775c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_NOT_FOUND    No protocol instances were found that match ProtocolGuid
11785c08e1173703234cc2913757f237ee916087498aklu
11795c08e1173703234cc2913757f237ee916087498aklu**/
11805c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
11815c08e1173703234cc2913757f237ee916087498akluEfiLibLocateProtocol (
11825c08e1173703234cc2913757f237ee916087498aklu  IN  EFI_GUID        *ProtocolGuid,
11835c08e1173703234cc2913757f237ee916087498aklu  OUT VOID            **Interface
11845c08e1173703234cc2913757f237ee916087498aklu  );
11855c08e1173703234cc2913757f237ee916087498aklu
11865c08e1173703234cc2913757f237ee916087498aklu/**
11875c08e1173703234cc2913757f237ee916087498aklu  Adjusts the size of a previously allocated buffer.
11885c08e1173703234cc2913757f237ee916087498aklu
11895c08e1173703234cc2913757f237ee916087498aklu  @param OldPool         A pointer to the buffer whose size is being adjusted.
11905c08e1173703234cc2913757f237ee916087498aklu  @param OldSize         The size of the current buffer.
11915c08e1173703234cc2913757f237ee916087498aklu  @param NewSize         The size of the new buffer.
11925c08e1173703234cc2913757f237ee916087498aklu
11935c08e1173703234cc2913757f237ee916087498aklu  @return   The newly allocated buffer. if NULL, allocation failed.
11945c08e1173703234cc2913757f237ee916087498aklu
11955c08e1173703234cc2913757f237ee916087498aklu**/
11965c08e1173703234cc2913757f237ee916087498akluVOID*
11975c08e1173703234cc2913757f237ee916087498akluEfiReallocatePool (
11985c08e1173703234cc2913757f237ee916087498aklu  IN VOID                 *OldPool,
11995c08e1173703234cc2913757f237ee916087498aklu  IN UINTN                OldSize,
12005c08e1173703234cc2913757f237ee916087498aklu  IN UINTN                NewSize
12015c08e1173703234cc2913757f237ee916087498aklu  );
12025c08e1173703234cc2913757f237ee916087498aklu
12035c08e1173703234cc2913757f237ee916087498aklu/**
12045c08e1173703234cc2913757f237ee916087498aklu  Function deletes the variable specified by VarName and VarGuid.
12055c08e1173703234cc2913757f237ee916087498aklu
12065c08e1173703234cc2913757f237ee916087498aklu
12075c08e1173703234cc2913757f237ee916087498aklu  @param VarName            A Null-terminated Unicode string that is
12085c08e1173703234cc2913757f237ee916087498aklu                            the name of the vendor's variable.
12095c08e1173703234cc2913757f237ee916087498aklu
12105c08e1173703234cc2913757f237ee916087498aklu  @param VarGuid            A unique identifier for the vendor.
12115c08e1173703234cc2913757f237ee916087498aklu
12125c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS           The variable was found and removed
12135c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_UNSUPPORTED       The variable store was inaccessible
12145c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_OUT_OF_RESOURCES  The temporary buffer was not available
12155c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_NOT_FOUND         The variable was not found
12165c08e1173703234cc2913757f237ee916087498aklu
12175c08e1173703234cc2913757f237ee916087498aklu**/
12185c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
12195c08e1173703234cc2913757f237ee916087498akluEfiLibDeleteVariable (
12205c08e1173703234cc2913757f237ee916087498aklu  IN CHAR16   *VarName,
12215c08e1173703234cc2913757f237ee916087498aklu  IN EFI_GUID *VarGuid
12225c08e1173703234cc2913757f237ee916087498aklu  );
12235c08e1173703234cc2913757f237ee916087498aklu
12245c08e1173703234cc2913757f237ee916087498aklu/**
12255c08e1173703234cc2913757f237ee916087498aklu  Duplicate a string.
12265c08e1173703234cc2913757f237ee916087498aklu
12275c08e1173703234cc2913757f237ee916087498aklu  @param Src             The source.
12285c08e1173703234cc2913757f237ee916087498aklu
12295c08e1173703234cc2913757f237ee916087498aklu  @return A new string which is duplicated copy of the source.
12305c08e1173703234cc2913757f237ee916087498aklu  @retval NULL If there is not enough memory.
12315c08e1173703234cc2913757f237ee916087498aklu
12325c08e1173703234cc2913757f237ee916087498aklu**/
12335c08e1173703234cc2913757f237ee916087498akluCHAR16                            *
12345c08e1173703234cc2913757f237ee916087498akluEfiStrDuplicate (
12355c08e1173703234cc2913757f237ee916087498aklu  IN CHAR16   *Src
12365c08e1173703234cc2913757f237ee916087498aklu  );
12375c08e1173703234cc2913757f237ee916087498aklu
12385c08e1173703234cc2913757f237ee916087498aklu/**
12395c08e1173703234cc2913757f237ee916087498aklu  Function is used to determine the number of device path instances
12405c08e1173703234cc2913757f237ee916087498aklu  that exist in a device path.
12415c08e1173703234cc2913757f237ee916087498aklu
12425c08e1173703234cc2913757f237ee916087498aklu
12435c08e1173703234cc2913757f237ee916087498aklu  @param DevicePath      A pointer to a device path data structure.
12445c08e1173703234cc2913757f237ee916087498aklu
12455c08e1173703234cc2913757f237ee916087498aklu  @return This function counts and returns the number of device path instances
12465c08e1173703234cc2913757f237ee916087498aklu          in DevicePath.
12475c08e1173703234cc2913757f237ee916087498aklu
12485c08e1173703234cc2913757f237ee916087498aklu**/
12495c08e1173703234cc2913757f237ee916087498akluUINTN
12505c08e1173703234cc2913757f237ee916087498akluEfiDevicePathInstanceCount (
12515c08e1173703234cc2913757f237ee916087498aklu  IN EFI_DEVICE_PATH_PROTOCOL      *DevicePath
12525c08e1173703234cc2913757f237ee916087498aklu  );
12535c08e1173703234cc2913757f237ee916087498aklu
12545c08e1173703234cc2913757f237ee916087498aklu/**
12555c08e1173703234cc2913757f237ee916087498aklu  Create string tokens for a menu from its help strings and display strings
12565c08e1173703234cc2913757f237ee916087498aklu
12575c08e1173703234cc2913757f237ee916087498aklu
12585c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
12595c08e1173703234cc2913757f237ee916087498aklu  @param HiiHandle       Hii Handle of the package to be updated.
12605c08e1173703234cc2913757f237ee916087498aklu  @param MenuOption      The Menu whose string tokens need to be created
12615c08e1173703234cc2913757f237ee916087498aklu
12625c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS      string tokens created successfully
12635c08e1173703234cc2913757f237ee916087498aklu  @retval  others           contain some errors
12645c08e1173703234cc2913757f237ee916087498aklu
12655c08e1173703234cc2913757f237ee916087498aklu**/
12665c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
12675c08e1173703234cc2913757f237ee916087498akluCreateMenuStringToken (
12685c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA                *CallbackData,
12695c08e1173703234cc2913757f237ee916087498aklu  IN EFI_HII_HANDLE                   HiiHandle,
12705c08e1173703234cc2913757f237ee916087498aklu  IN BM_MENU_OPTION                   *MenuOption
12715c08e1173703234cc2913757f237ee916087498aklu  );
12725c08e1173703234cc2913757f237ee916087498aklu
12735c08e1173703234cc2913757f237ee916087498aklu/**
12745c08e1173703234cc2913757f237ee916087498aklu  Get a string from the Data Hub record based on
12755c08e1173703234cc2913757f237ee916087498aklu  a device path.
12765c08e1173703234cc2913757f237ee916087498aklu
12775c08e1173703234cc2913757f237ee916087498aklu  @param DevPath         The device Path.
12785c08e1173703234cc2913757f237ee916087498aklu
12795c08e1173703234cc2913757f237ee916087498aklu  @return A string located from the Data Hub records based on
12805c08e1173703234cc2913757f237ee916087498aklu          the device path.
12815c08e1173703234cc2913757f237ee916087498aklu  @retval NULL  If failed to get the String from Data Hub.
12825c08e1173703234cc2913757f237ee916087498aklu
12835c08e1173703234cc2913757f237ee916087498aklu**/
12845c08e1173703234cc2913757f237ee916087498akluUINT16 *
12855c08e1173703234cc2913757f237ee916087498akluEfiLibStrFromDatahub (
12865c08e1173703234cc2913757f237ee916087498aklu  IN EFI_DEVICE_PATH_PROTOCOL                 *DevPath
12875c08e1173703234cc2913757f237ee916087498aklu  );
12885c08e1173703234cc2913757f237ee916087498aklu
12895c08e1173703234cc2913757f237ee916087498aklu/**
12905c08e1173703234cc2913757f237ee916087498aklu  Get the index number (#### in Boot####) for the boot option pointed to a BBS legacy device type
12915c08e1173703234cc2913757f237ee916087498aklu  specified by DeviceType.
12925c08e1173703234cc2913757f237ee916087498aklu
12935c08e1173703234cc2913757f237ee916087498aklu  @param DeviceType      The legacy device type. It can be floppy, network, harddisk, cdrom,
12945c08e1173703234cc2913757f237ee916087498aklu                         etc.
12955c08e1173703234cc2913757f237ee916087498aklu  @param OptionIndex     Returns the index number (#### in Boot####).
12965c08e1173703234cc2913757f237ee916087498aklu  @param OptionSize      Return the size of the Boot### variable.
12975c08e1173703234cc2913757f237ee916087498aklu
12985c08e1173703234cc2913757f237ee916087498aklu**/
12995c08e1173703234cc2913757f237ee916087498akluVOID *
13005c08e1173703234cc2913757f237ee916087498akluGetLegacyBootOptionVar (
13015c08e1173703234cc2913757f237ee916087498aklu  IN  UINTN                            DeviceType,
13025c08e1173703234cc2913757f237ee916087498aklu  OUT UINTN                            *OptionIndex,
13035c08e1173703234cc2913757f237ee916087498aklu  OUT UINTN                            *OptionSize
13045c08e1173703234cc2913757f237ee916087498aklu  );
13055c08e1173703234cc2913757f237ee916087498aklu
13065c08e1173703234cc2913757f237ee916087498aklu/**
13075c08e1173703234cc2913757f237ee916087498aklu  Initialize the Boot Maintenance Utitliy.
13085c08e1173703234cc2913757f237ee916087498aklu
13095c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS      utility ended successfully.
13105c08e1173703234cc2913757f237ee916087498aklu  @retval  others           contain some errors.
13115c08e1173703234cc2913757f237ee916087498aklu
13125c08e1173703234cc2913757f237ee916087498aklu**/
13135c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
13145c08e1173703234cc2913757f237ee916087498akluInitializeBM (
13155c08e1173703234cc2913757f237ee916087498aklu  VOID
13165c08e1173703234cc2913757f237ee916087498aklu  );
13175c08e1173703234cc2913757f237ee916087498aklu
13185c08e1173703234cc2913757f237ee916087498aklu/**
13195c08e1173703234cc2913757f237ee916087498aklu  Start boot maintenance manager
13205c08e1173703234cc2913757f237ee916087498aklu
13215c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS If BMM is invoked successfully.
13225c08e1173703234cc2913757f237ee916087498aklu  @return Other value if BMM return unsuccessfully.
13235c08e1173703234cc2913757f237ee916087498aklu
13245c08e1173703234cc2913757f237ee916087498aklu**/
13255c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
13265c08e1173703234cc2913757f237ee916087498akluBdsStartBootMaint (
13275c08e1173703234cc2913757f237ee916087498aklu  VOID
13285c08e1173703234cc2913757f237ee916087498aklu  );
13295c08e1173703234cc2913757f237ee916087498aklu
13305c08e1173703234cc2913757f237ee916087498aklu/**
13315c08e1173703234cc2913757f237ee916087498aklu  Intialize all the string depositories.
13325c08e1173703234cc2913757f237ee916087498aklu
13335c08e1173703234cc2913757f237ee916087498aklu**/
13345c08e1173703234cc2913757f237ee916087498akluVOID
13355c08e1173703234cc2913757f237ee916087498akluInitializeStringDepository (
13365c08e1173703234cc2913757f237ee916087498aklu  VOID
13375c08e1173703234cc2913757f237ee916087498aklu  );
13385c08e1173703234cc2913757f237ee916087498aklu
13395c08e1173703234cc2913757f237ee916087498aklu/**
13405c08e1173703234cc2913757f237ee916087498aklu  Fetch a usable string node from the string depository and return the string token.
13415c08e1173703234cc2913757f237ee916087498aklu
13425c08e1173703234cc2913757f237ee916087498aklu
13435c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData       The BMM context data.
13445c08e1173703234cc2913757f237ee916087498aklu  @param StringDepository   Pointer of the string depository.
13455c08e1173703234cc2913757f237ee916087498aklu
13465c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_STRING_ID    String token.
13475c08e1173703234cc2913757f237ee916087498aklu
13485c08e1173703234cc2913757f237ee916087498aklu**/
13495c08e1173703234cc2913757f237ee916087498akluEFI_STRING_ID
13505c08e1173703234cc2913757f237ee916087498akluGetStringTokenFromDepository (
13515c08e1173703234cc2913757f237ee916087498aklu  IN   BMM_CALLBACK_DATA     *CallbackData,
13525c08e1173703234cc2913757f237ee916087498aklu  IN   STRING_DEPOSITORY     *StringDepository
13535c08e1173703234cc2913757f237ee916087498aklu  );
13545c08e1173703234cc2913757f237ee916087498aklu
13555c08e1173703234cc2913757f237ee916087498aklu/**
13565c08e1173703234cc2913757f237ee916087498aklu  Reclaim string depositories by moving the current node pointer to list head..
13575c08e1173703234cc2913757f237ee916087498aklu**/
13585c08e1173703234cc2913757f237ee916087498akluVOID
13595c08e1173703234cc2913757f237ee916087498akluReclaimStringDepository (
13605c08e1173703234cc2913757f237ee916087498aklu  VOID
13615c08e1173703234cc2913757f237ee916087498aklu  );
13625c08e1173703234cc2913757f237ee916087498aklu
13635c08e1173703234cc2913757f237ee916087498aklu/**
13645c08e1173703234cc2913757f237ee916087498aklu  Release resource for all the string depositories.
13655c08e1173703234cc2913757f237ee916087498aklu
13665c08e1173703234cc2913757f237ee916087498aklu**/
13675c08e1173703234cc2913757f237ee916087498akluVOID
13685c08e1173703234cc2913757f237ee916087498akluCleanUpStringDepository (
13695c08e1173703234cc2913757f237ee916087498aklu  VOID
13705c08e1173703234cc2913757f237ee916087498aklu  );
13715c08e1173703234cc2913757f237ee916087498aklu
13725c08e1173703234cc2913757f237ee916087498aklu/**
13735c08e1173703234cc2913757f237ee916087498aklu  Function handling request to apply changes for BMM pages.
13745c08e1173703234cc2913757f237ee916087498aklu
13755c08e1173703234cc2913757f237ee916087498aklu  @param Private            Pointer to callback data buffer.
13765c08e1173703234cc2913757f237ee916087498aklu  @param CurrentFakeNVMap   Pointer to buffer holding data of various values used by BMM
13775c08e1173703234cc2913757f237ee916087498aklu  @param FormId             ID of the form which has sent the request to apply change.
13785c08e1173703234cc2913757f237ee916087498aklu
13795c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS      Change successfully applied.
13805c08e1173703234cc2913757f237ee916087498aklu  @retval  Other            Error occurs while trying to apply changes.
13815c08e1173703234cc2913757f237ee916087498aklu
13825c08e1173703234cc2913757f237ee916087498aklu**/
13835c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
13845c08e1173703234cc2913757f237ee916087498akluApplyChangeHandler (
13855c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_CALLBACK_DATA               *Private,
13865c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_FAKE_NV_DATA                *CurrentFakeNVMap,
13875c08e1173703234cc2913757f237ee916087498aklu  IN  EFI_FORM_ID                     FormId
13885c08e1173703234cc2913757f237ee916087498aklu  );
13895c08e1173703234cc2913757f237ee916087498aklu
13905c08e1173703234cc2913757f237ee916087498aklu/**
13915c08e1173703234cc2913757f237ee916087498aklu  Discard all changes done to the BMM pages such as Boot Order change,
13925c08e1173703234cc2913757f237ee916087498aklu  Driver order change.
13935c08e1173703234cc2913757f237ee916087498aklu
13945c08e1173703234cc2913757f237ee916087498aklu  @param Private         The BMM context data.
13955c08e1173703234cc2913757f237ee916087498aklu  @param CurrentFakeNVMap The current Fack NV Map.
13965c08e1173703234cc2913757f237ee916087498aklu
13975c08e1173703234cc2913757f237ee916087498aklu**/
13985c08e1173703234cc2913757f237ee916087498akluVOID
13995c08e1173703234cc2913757f237ee916087498akluDiscardChangeHandler (
14005c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_CALLBACK_DATA               *Private,
14015c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_FAKE_NV_DATA                *CurrentFakeNVMap
14025c08e1173703234cc2913757f237ee916087498aklu  );
14035c08e1173703234cc2913757f237ee916087498aklu
14045c08e1173703234cc2913757f237ee916087498aklu/**
14055c08e1173703234cc2913757f237ee916087498aklu  Dispatch the display to the next page based on NewPageId.
14065c08e1173703234cc2913757f237ee916087498aklu
14075c08e1173703234cc2913757f237ee916087498aklu  @param Private         The BMM context data.
14085c08e1173703234cc2913757f237ee916087498aklu  @param NewPageId       The original page ID.
14095c08e1173703234cc2913757f237ee916087498aklu
14105c08e1173703234cc2913757f237ee916087498aklu**/
14115c08e1173703234cc2913757f237ee916087498akluVOID
14125c08e1173703234cc2913757f237ee916087498akluUpdatePageId (
14135c08e1173703234cc2913757f237ee916087498aklu  BMM_CALLBACK_DATA              *Private,
14145c08e1173703234cc2913757f237ee916087498aklu  UINT16                         NewPageId
14155c08e1173703234cc2913757f237ee916087498aklu  );
14165c08e1173703234cc2913757f237ee916087498aklu
14175c08e1173703234cc2913757f237ee916087498aklu/**
14185c08e1173703234cc2913757f237ee916087498aklu  Boot a file selected by user at File Expoloer of BMM.
14195c08e1173703234cc2913757f237ee916087498aklu
14205c08e1173703234cc2913757f237ee916087498aklu  @param FileContext     The file context data, which contains the device path
14215c08e1173703234cc2913757f237ee916087498aklu                         of the file to be boot from.
14225c08e1173703234cc2913757f237ee916087498aklu
14235c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS    The function completed successfull.
14245c08e1173703234cc2913757f237ee916087498aklu  @return                 Other value if the boot from the file fails.
14255c08e1173703234cc2913757f237ee916087498aklu
14265c08e1173703234cc2913757f237ee916087498aklu**/
14275c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
14285c08e1173703234cc2913757f237ee916087498akluBootThisFile (
14295c08e1173703234cc2913757f237ee916087498aklu  IN BM_FILE_CONTEXT                   *FileContext
14305c08e1173703234cc2913757f237ee916087498aklu  );
14315c08e1173703234cc2913757f237ee916087498aklu
14325c08e1173703234cc2913757f237ee916087498aklu/**
14335c08e1173703234cc2913757f237ee916087498aklu  Update the file explower page with the refershed file system.
14345c08e1173703234cc2913757f237ee916087498aklu
14355c08e1173703234cc2913757f237ee916087498aklu
14365c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    BMM context data
14375c08e1173703234cc2913757f237ee916087498aklu  @param KeyValue        Key value to identify the type of data to expect.
14385c08e1173703234cc2913757f237ee916087498aklu
14395c08e1173703234cc2913757f237ee916087498aklu  @retval  TRUE           Inform the caller to create a callback packet to exit file explorer.
14405c08e1173703234cc2913757f237ee916087498aklu  @retval  FALSE          Indicate that there is no need to exit file explorer.
14415c08e1173703234cc2913757f237ee916087498aklu
14425c08e1173703234cc2913757f237ee916087498aklu**/
14435c08e1173703234cc2913757f237ee916087498akluBOOLEAN
14445c08e1173703234cc2913757f237ee916087498akluUpdateFileExplorer (
14455c08e1173703234cc2913757f237ee916087498aklu  IN BMM_CALLBACK_DATA            *CallbackData,
14465c08e1173703234cc2913757f237ee916087498aklu  IN UINT16                       KeyValue
14475c08e1173703234cc2913757f237ee916087498aklu  );
14485c08e1173703234cc2913757f237ee916087498aklu
14495c08e1173703234cc2913757f237ee916087498aklu/**
14505c08e1173703234cc2913757f237ee916087498aklu  This function processes the results of changes in configuration.
14515c08e1173703234cc2913757f237ee916087498aklu  When user select a interactive opcode, this callback will be triggered.
14525c08e1173703234cc2913757f237ee916087498aklu  Based on the Question(QuestionId) that triggers the callback, the corresponding
14535c08e1173703234cc2913757f237ee916087498aklu  actions is performed. It handles:
14545c08e1173703234cc2913757f237ee916087498aklu
14555c08e1173703234cc2913757f237ee916087498aklu  1) the addition of boot option.
14565c08e1173703234cc2913757f237ee916087498aklu  2) the addition of driver option.
14575c08e1173703234cc2913757f237ee916087498aklu  3) exit from file browser
14585c08e1173703234cc2913757f237ee916087498aklu  4) update of file content if a dir is selected.
14595c08e1173703234cc2913757f237ee916087498aklu  5) boot the file if a file is selected in "boot from file"
14605c08e1173703234cc2913757f237ee916087498aklu
14615c08e1173703234cc2913757f237ee916087498aklu
14625c08e1173703234cc2913757f237ee916087498aklu  @param This            Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
14635c08e1173703234cc2913757f237ee916087498aklu  @param Action          Specifies the type of action taken by the browser.
14645c08e1173703234cc2913757f237ee916087498aklu  @param QuestionId      A unique value which is sent to the original exporting driver
14655c08e1173703234cc2913757f237ee916087498aklu                         so that it can identify the type of data to expect.
14665c08e1173703234cc2913757f237ee916087498aklu  @param Type            The type of value for the question.
14675c08e1173703234cc2913757f237ee916087498aklu  @param Value           A pointer to the data being sent to the original exporting driver.
14685c08e1173703234cc2913757f237ee916087498aklu  @param ActionRequest   On return, points to the action requested by the callback function.
14695c08e1173703234cc2913757f237ee916087498aklu
14705c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_SUCCESS           The callback successfully handled the action.
14715c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_OUT_OF_RESOURCES  Not enough storage is available to hold the variable and its data.
14725c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_DEVICE_ERROR      The variable could not be saved.
14735c08e1173703234cc2913757f237ee916087498aklu  @retval  EFI_UNSUPPORTED       The specified Action is not supported by the callback.
14745c08e1173703234cc2913757f237ee916087498aklu
14755c08e1173703234cc2913757f237ee916087498aklu**/
14765c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
14775c08e1173703234cc2913757f237ee916087498akluEFIAPI
14785c08e1173703234cc2913757f237ee916087498akluFileExplorerCallback (
14795c08e1173703234cc2913757f237ee916087498aklu  IN  CONST EFI_HII_CONFIG_ACCESS_PROTOCOL   *This,
14805c08e1173703234cc2913757f237ee916087498aklu  IN  EFI_BROWSER_ACTION                     Action,
14815c08e1173703234cc2913757f237ee916087498aklu  IN  EFI_QUESTION_ID                        QuestionId,
14825c08e1173703234cc2913757f237ee916087498aklu  IN  UINT8                                  Type,
14835c08e1173703234cc2913757f237ee916087498aklu  IN  EFI_IFR_TYPE_VALUE                     *Value,
14845c08e1173703234cc2913757f237ee916087498aklu  OUT EFI_BROWSER_ACTION_REQUEST             *ActionRequest
14855c08e1173703234cc2913757f237ee916087498aklu  );
14865c08e1173703234cc2913757f237ee916087498aklu
14875c08e1173703234cc2913757f237ee916087498aklu/**
14885c08e1173703234cc2913757f237ee916087498aklu  Dispatch BMM formset and FileExplorer formset.
14895c08e1173703234cc2913757f237ee916087498aklu
14905c08e1173703234cc2913757f237ee916087498aklu
14915c08e1173703234cc2913757f237ee916087498aklu  @param CallbackData    The BMM context data.
14925c08e1173703234cc2913757f237ee916087498aklu
14935c08e1173703234cc2913757f237ee916087498aklu  @retval EFI_SUCCESS If function complete successfully.
14945c08e1173703234cc2913757f237ee916087498aklu  @return Other value if the Setup Browser process BMM's pages and
14955c08e1173703234cc2913757f237ee916087498aklu           return unsuccessfully.
14965c08e1173703234cc2913757f237ee916087498aklu
14975c08e1173703234cc2913757f237ee916087498aklu**/
14985c08e1173703234cc2913757f237ee916087498akluEFI_STATUS
14995c08e1173703234cc2913757f237ee916087498akluFormSetDispatcher (
15005c08e1173703234cc2913757f237ee916087498aklu  IN  BMM_CALLBACK_DATA    *CallbackData
15015c08e1173703234cc2913757f237ee916087498aklu  );
15025c08e1173703234cc2913757f237ee916087498aklu
15035c08e1173703234cc2913757f237ee916087498aklu/**
15045c08e1173703234cc2913757f237ee916087498aklu  Function returns the value of the specified variable.
15055c08e1173703234cc2913757f237ee916087498aklu
15065c08e1173703234cc2913757f237ee916087498aklu  @param Name            A Null-terminated Unicode string that is
15075c08e1173703234cc2913757f237ee916087498aklu                         the name of the vendor's variable.
15085c08e1173703234cc2913757f237ee916087498aklu  @param VendorGuid      A unique identifier for the vendor.
15095c08e1173703234cc2913757f237ee916087498aklu
15105c08e1173703234cc2913757f237ee916087498aklu  @return               The payload of the variable.
15115c08e1173703234cc2913757f237ee916087498aklu  @retval NULL          If the variable can't be read.
15125c08e1173703234cc2913757f237ee916087498aklu
15135c08e1173703234cc2913757f237ee916087498aklu**/
15145c08e1173703234cc2913757f237ee916087498akluVOID *
15155c08e1173703234cc2913757f237ee916087498akluEfiLibGetVariable (
15165c08e1173703234cc2913757f237ee916087498aklu  IN CHAR16               *Name,
15175c08e1173703234cc2913757f237ee916087498aklu  IN EFI_GUID             *VendorGuid
15185c08e1173703234cc2913757f237ee916087498aklu  );
15195c08e1173703234cc2913757f237ee916087498aklu
15205c08e1173703234cc2913757f237ee916087498aklu//
15215c08e1173703234cc2913757f237ee916087498aklu// Global variable in this program (defined in data.c)
15225c08e1173703234cc2913757f237ee916087498aklu//
15235c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             BootOptionMenu;
15245c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             DriverOptionMenu;
15255c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             FsOptionMenu;
15265c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             ConsoleInpMenu;
15275c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             ConsoleOutMenu;
15285c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             ConsoleErrMenu;
15295c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             DirectoryMenu;
15305c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             DriverMenu;
15315c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             TerminalMenu;
15325c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             LegacyFDMenu;
15335c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             LegacyHDMenu;
15345c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             LegacyCDMenu;
15355c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             LegacyNETMenu;
15365c08e1173703234cc2913757f237ee916087498akluextern BM_MENU_OPTION             LegacyBEVMenu;
15375c08e1173703234cc2913757f237ee916087498akluextern UINT16                     TerminalType[];
15385c08e1173703234cc2913757f237ee916087498akluextern COM_ATTR                   BaudRateList[19];
15395c08e1173703234cc2913757f237ee916087498akluextern COM_ATTR                   DataBitsList[4];
15405c08e1173703234cc2913757f237ee916087498akluextern COM_ATTR                   ParityList[5];
15415c08e1173703234cc2913757f237ee916087498akluextern COM_ATTR                   StopBitsList[3];
15425c08e1173703234cc2913757f237ee916087498akluextern EFI_GUID                   TerminalTypeGuid[4];
15435c08e1173703234cc2913757f237ee916087498akluextern STRING_DEPOSITORY          *FileOptionStrDepository;
15445c08e1173703234cc2913757f237ee916087498akluextern STRING_DEPOSITORY          *ConsoleOptionStrDepository;
15455c08e1173703234cc2913757f237ee916087498akluextern STRING_DEPOSITORY          *BootOptionStrDepository;
15465c08e1173703234cc2913757f237ee916087498akluextern STRING_DEPOSITORY          *BootOptionHelpStrDepository;
15475c08e1173703234cc2913757f237ee916087498akluextern STRING_DEPOSITORY          *DriverOptionStrDepository;
15485c08e1173703234cc2913757f237ee916087498akluextern STRING_DEPOSITORY          *DriverOptionHelpStrDepository;
15495c08e1173703234cc2913757f237ee916087498akluextern STRING_DEPOSITORY          *TerminalStrDepository;
15505c08e1173703234cc2913757f237ee916087498akluextern EFI_DEVICE_PATH_PROTOCOL   EndDevicePath[];
15515c08e1173703234cc2913757f237ee916087498akluextern EFI_GUID                   EfiLegacyDevOrderGuid;
15525c08e1173703234cc2913757f237ee916087498aklu
155375bf9d0ecca38dfec9b645a6eb1119c025892304lgao//
155475bf9d0ecca38dfec9b645a6eb1119c025892304lgao// Shared IFR form update data
155575bf9d0ecca38dfec9b645a6eb1119c025892304lgao//
155675bf9d0ecca38dfec9b645a6eb1119c025892304lgaoextern VOID                        *mStartOpCodeHandle;
155775bf9d0ecca38dfec9b645a6eb1119c025892304lgaoextern VOID                        *mEndOpCodeHandle;
155875bf9d0ecca38dfec9b645a6eb1119c025892304lgaoextern EFI_IFR_GUID_LABEL          *mStartLabel;
155975bf9d0ecca38dfec9b645a6eb1119c025892304lgaoextern EFI_IFR_GUID_LABEL          *mEndLabel;
156075bf9d0ecca38dfec9b645a6eb1119c025892304lgao
15615c08e1173703234cc2913757f237ee916087498aklu#endif
1562