mirror of https://github.com/acidanthera/audk.git
566 lines
13 KiB
C
566 lines
13 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 2004 - 2007, Intel Corporation
|
||
|
All rights reserved. This program and the accompanying materials
|
||
|
are licensed and made available under the terms and conditions of the BSD License
|
||
|
which accompanies this distribution. The full text of the license may be found at
|
||
|
http://opensource.org/licenses/bsd-license.php
|
||
|
|
||
|
THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS,
|
||
|
WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
GenericBdsLib.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
Generic BDS library definition, include the file and data structure
|
||
|
|
||
|
--*/
|
||
|
|
||
|
#ifndef _GENERIC_BDS_LIB_H_
|
||
|
#define _GENERIC_BDS_LIB_H_
|
||
|
|
||
|
//
|
||
|
// WQBugBug: These Macro will be handled properly later.
|
||
|
//
|
||
|
//#undef EFI_SPECIFICATION_VERSION
|
||
|
//#define EFI_SPECIFICATION_VERSION 0x0002000A
|
||
|
|
||
|
#define PI_SPECIFICATION_VERSION 0x00010000
|
||
|
|
||
|
#include <PiDxe.h>
|
||
|
#include <Protocol/HiiDatabase.h>
|
||
|
#include <IndustryStandard/PeImage.h>
|
||
|
|
||
|
|
||
|
extern EFI_HANDLE mBdsImageHandle;
|
||
|
|
||
|
//
|
||
|
// Constants which are variable names used to access variables
|
||
|
//
|
||
|
#define VarLegacyDevOrder L"LegacyDevOrder"
|
||
|
|
||
|
//
|
||
|
// Data structures and defines
|
||
|
//
|
||
|
#define FRONT_PAGE_QUESTION_ID 0x0000
|
||
|
#define FRONT_PAGE_DATA_WIDTH 0x01
|
||
|
|
||
|
//
|
||
|
// ConnectType
|
||
|
//
|
||
|
#define CONSOLE_OUT 0x00000001
|
||
|
#define STD_ERROR 0x00000002
|
||
|
#define CONSOLE_IN 0x00000004
|
||
|
#define CONSOLE_ALL (CONSOLE_OUT | CONSOLE_IN | STD_ERROR)
|
||
|
|
||
|
//
|
||
|
// Load Option Attributes defined in EFI Specification
|
||
|
//
|
||
|
#define LOAD_OPTION_ACTIVE 0x00000001
|
||
|
#define LOAD_OPTION_FORCE_RECONNECT 0x00000002
|
||
|
|
||
|
#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
|
||
|
#define LOAD_OPTION_HIDDEN 0x00000008
|
||
|
#define LOAD_OPTION_CATEGORY 0x00001F00
|
||
|
|
||
|
#define LOAD_OPTION_CATEGORY_BOOT 0x00000000
|
||
|
#define LOAD_OPTION_CATEGORY_APP 0x00000100
|
||
|
|
||
|
#define EFI_BOOT_OPTION_SUPPORT_KEY 0x00000001
|
||
|
#define EFI_BOOT_OPTION_SUPPORT_APP 0x00000002
|
||
|
#endif
|
||
|
|
||
|
#define IS_LOAD_OPTION_TYPE(_c, _Mask) (BOOLEAN) (((_c) & (_Mask)) != 0)
|
||
|
|
||
|
//
|
||
|
// Define Maxmim characters that will be accepted
|
||
|
//
|
||
|
#define MAX_CHAR 480
|
||
|
#define MAX_CHAR_SIZE (MAX_CHAR * 2)
|
||
|
|
||
|
#define MIN_ALIGNMENT_SIZE 4
|
||
|
#define ALIGN_SIZE(a) ((a % MIN_ALIGNMENT_SIZE) ? MIN_ALIGNMENT_SIZE - (a % MIN_ALIGNMENT_SIZE) : 0)
|
||
|
|
||
|
//
|
||
|
// Define maximum characters for boot option variable "BootXXXX"
|
||
|
//
|
||
|
#define BOOT_OPTION_MAX_CHAR 10
|
||
|
|
||
|
//
|
||
|
// This data structure is the part of BDS_CONNECT_ENTRY that we can hard code.
|
||
|
//
|
||
|
#define BDS_LOAD_OPTION_SIGNATURE EFI_SIGNATURE_32 ('B', 'd', 'C', 'O')
|
||
|
|
||
|
typedef struct {
|
||
|
|
||
|
UINTN Signature;
|
||
|
LIST_ENTRY Link;
|
||
|
|
||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||
|
|
||
|
CHAR16 *OptionName;
|
||
|
UINTN OptionNumber;
|
||
|
UINT16 BootCurrent;
|
||
|
UINT32 Attribute;
|
||
|
CHAR16 *Description;
|
||
|
VOID *LoadOptions;
|
||
|
UINT32 LoadOptionsSize;
|
||
|
CHAR16 *StatusString;
|
||
|
|
||
|
} BDS_COMMON_OPTION;
|
||
|
|
||
|
typedef struct {
|
||
|
EFI_DEVICE_PATH_PROTOCOL *DevicePath;
|
||
|
UINTN ConnectType;
|
||
|
} BDS_CONSOLE_CONNECT_ENTRY;
|
||
|
|
||
|
//
|
||
|
// Lib Functions
|
||
|
//
|
||
|
|
||
|
//
|
||
|
// Bds boot relate lib functions
|
||
|
//
|
||
|
EFI_STATUS
|
||
|
BdsLibUpdateBootOrderList (
|
||
|
IN LIST_ENTRY *BdsOptionList,
|
||
|
IN CHAR16 *VariableName
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
BdsLibBootNext (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibBootViaBootOption (
|
||
|
IN BDS_COMMON_OPTION * Option,
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL * DevicePath,
|
||
|
OUT UINTN *ExitDataSize,
|
||
|
OUT CHAR16 **ExitData OPTIONAL
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibEnumerateAllBootOption (
|
||
|
IN OUT LIST_ENTRY *BdsBootOptionList
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
BdsLibBuildOptionFromHandle (
|
||
|
IN EFI_HANDLE Handle,
|
||
|
IN LIST_ENTRY *BdsBootOptionList,
|
||
|
IN CHAR16 *String
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
BdsLibBuildOptionFromShell (
|
||
|
IN EFI_HANDLE Handle,
|
||
|
IN LIST_ENTRY *BdsBootOptionList
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Bds misc lib functions
|
||
|
//
|
||
|
UINT16
|
||
|
BdsLibGetTimeout (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibGetBootMode (
|
||
|
OUT EFI_BOOT_MODE *BootMode
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
BdsLibLoadDrivers (
|
||
|
IN LIST_ENTRY *BdsDriverLists
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibBuildOptionFromVar (
|
||
|
IN LIST_ENTRY *BdsCommonOptionList,
|
||
|
IN CHAR16 *VariableName
|
||
|
);
|
||
|
|
||
|
VOID *
|
||
|
BdsLibGetVariableAndSize (
|
||
|
IN CHAR16 *Name,
|
||
|
IN EFI_GUID *VendorGuid,
|
||
|
OUT UINTN *VariableSize
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibOutputStrings (
|
||
|
IN EFI_SIMPLE_TEXT_OUTPUT_PROTOCOL *ConOut,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
BDS_COMMON_OPTION *
|
||
|
BdsLibVariableToOption (
|
||
|
IN OUT LIST_ENTRY *BdsCommonOptionList,
|
||
|
IN CHAR16 *VariableName
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibRegisterNewOption (
|
||
|
IN LIST_ENTRY *BdsOptionList,
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath,
|
||
|
IN CHAR16 *String,
|
||
|
IN CHAR16 *VariableName
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Bds connect or disconnect driver lib funcion
|
||
|
//
|
||
|
VOID
|
||
|
BdsLibConnectAllDriversToAllControllers (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
BdsLibConnectAll (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibConnectDevicePath (
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePathToConnect
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibConnectAllEfi (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibDisconnectAllEfi (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Bds console relate lib functions
|
||
|
//
|
||
|
VOID
|
||
|
BdsLibConnectAllConsoles (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibConnectAllDefaultConsoles (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibUpdateConsoleVariable (
|
||
|
IN CHAR16 *ConVarName,
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *CustomizedConDevicePath,
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *ExclusiveDevicePath
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibConnectConsoleVariable (
|
||
|
IN CHAR16 *ConVarName
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Bds device path relate lib functions
|
||
|
//
|
||
|
EFI_DEVICE_PATH_PROTOCOL *
|
||
|
BdsLibUnpackDevicePath (
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *DevPath
|
||
|
);
|
||
|
|
||
|
EFI_DEVICE_PATH_PROTOCOL *
|
||
|
BdsLibDelPartMatchInstance (
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *Multi,
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *Single
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
BdsLibMatchDevicePaths (
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *Multi,
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *Single
|
||
|
);
|
||
|
|
||
|
CHAR16 *
|
||
|
DevicePathToStr (
|
||
|
EFI_DEVICE_PATH_PROTOCOL *DevPath
|
||
|
);
|
||
|
|
||
|
VOID *
|
||
|
EfiLibGetVariable (
|
||
|
IN CHAR16 *Name,
|
||
|
IN EFI_GUID *VendorGuid
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Internal definitions
|
||
|
//
|
||
|
typedef struct {
|
||
|
CHAR16 *str;
|
||
|
UINTN len;
|
||
|
UINTN maxlen;
|
||
|
} POOL_PRINT;
|
||
|
|
||
|
typedef struct {
|
||
|
UINT8 Type;
|
||
|
UINT8 SubType;
|
||
|
VOID (*Function) (POOL_PRINT *, VOID *);
|
||
|
} DEVICE_PATH_STRING_TABLE;
|
||
|
|
||
|
extern EFI_GUID mEfiDevicePathMessagingUartFlowControlGuid;
|
||
|
|
||
|
typedef struct {
|
||
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
||
|
EFI_GUID Guid;
|
||
|
UINT8 VendorDefinedData[1];
|
||
|
} VENDOR_DEVICE_PATH_WITH_DATA;
|
||
|
|
||
|
#if (EFI_SPECIFICATION_VERSION >= 0x00020000)
|
||
|
|
||
|
extern EFI_GUID mEfiDevicePathMessagingSASGuid;
|
||
|
|
||
|
typedef struct {
|
||
|
EFI_DEVICE_PATH_PROTOCOL Header;
|
||
|
UINT16 NetworkProtocol;
|
||
|
UINT16 LoginOption;
|
||
|
UINT64 Lun;
|
||
|
UINT16 TargetPortalGroupTag;
|
||
|
CHAR16 iSCSITargetName[1];
|
||
|
} ISCSI_DEVICE_PATH_WITH_NAME;
|
||
|
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// Internal functions
|
||
|
//
|
||
|
EFI_STATUS
|
||
|
BdsBootByDiskSignatureAndPartition (
|
||
|
IN BDS_COMMON_OPTION * Option,
|
||
|
IN HARDDRIVE_DEVICE_PATH * HardDriveDevicePath,
|
||
|
IN UINT32 LoadOptionsSize,
|
||
|
IN VOID *LoadOptions,
|
||
|
OUT UINTN *ExitDataSize,
|
||
|
OUT CHAR16 **ExitData OPTIONAL
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Notes: EFI 64 shadow all option rom
|
||
|
//
|
||
|
#if defined (MDE_CPU_IPF)
|
||
|
#define EFI64_SHADOW_ALL_LEGACY_ROM() ShadowAllOptionRom ();
|
||
|
VOID
|
||
|
ShadowAllOptionRom();
|
||
|
#else
|
||
|
#define EFI64_SHADOW_ALL_LEGACY_ROM()
|
||
|
#endif
|
||
|
|
||
|
//
|
||
|
// BBS support macros and functions
|
||
|
//
|
||
|
|
||
|
#if defined(MDE_CPU_IA32) || defined(MDE_CPU_X64)
|
||
|
#define REFRESH_LEGACY_BOOT_OPTIONS \
|
||
|
BdsDeleteAllInvalidLegacyBootOptions ();\
|
||
|
BdsAddNonExistingLegacyBootOptions (); \
|
||
|
BdsUpdateLegacyDevOrder ()
|
||
|
#else
|
||
|
#define REFRESH_LEGACY_BOOT_OPTIONS
|
||
|
#endif
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsDeleteAllInvalidLegacyBootOptions (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsAddNonExistingLegacyBootOptions (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsUpdateLegacyDevOrder (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsRefreshBbsTableForBoot (
|
||
|
IN BDS_COMMON_OPTION *Entry
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsDeleteBootOption (
|
||
|
IN UINTN OptionNumber,
|
||
|
IN OUT UINT16 *BootOrder,
|
||
|
IN OUT UINTN *BootOrderSize
|
||
|
);
|
||
|
|
||
|
//
|
||
|
//The interface functions relate with Setup Browser Reset Reminder feature
|
||
|
//
|
||
|
VOID
|
||
|
EnableResetReminderFeature (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DisableResetReminderFeature (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
EnableResetRequired (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DisableResetRequired (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
IsResetReminderFeatureEnable (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
IsResetRequired (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
SetupResetReminder (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibGetImageHeader (
|
||
|
IN EFI_HANDLE Device,
|
||
|
IN CHAR16 *FileName,
|
||
|
OUT EFI_IMAGE_DOS_HEADER *DosHeader,
|
||
|
OUT EFI_IMAGE_OPTIONAL_HEADER_PTR_UNION Hdr
|
||
|
)
|
||
|
;
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibGetHiiHandles (
|
||
|
#if (EFI_SPECIFICATION_VERSION >= 0x0002000A)
|
||
|
IN EFI_HII_DATABASE_PROTOCOL *HiiDatabase,
|
||
|
#else
|
||
|
IN EFI_HII_PROTOCOL *Hii,
|
||
|
#endif
|
||
|
IN OUT UINT16 *HandleBufferLength,
|
||
|
OUT EFI_HII_HANDLE **HiiHandleBuffer
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// Define the boot type which to classify the boot option type
|
||
|
// Different boot option type could have different boot behavior
|
||
|
// Use their device path node (Type + SubType) as type value
|
||
|
// The boot type here can be added according to requirement
|
||
|
//
|
||
|
//
|
||
|
// ACPI boot type. For ACPI device, cannot use sub-type to distinguish device, so hardcode their value
|
||
|
//
|
||
|
#define BDS_EFI_ACPI_FLOPPY_BOOT 0x0201
|
||
|
//
|
||
|
// Message boot type
|
||
|
// If a device path of boot option only point to a message node, the boot option is message boot type
|
||
|
//
|
||
|
#define BDS_EFI_MESSAGE_ATAPI_BOOT 0x0301 // Type 03; Sub-Type 01
|
||
|
#define BDS_EFI_MESSAGE_SCSI_BOOT 0x0302 // Type 03; Sub-Type 02
|
||
|
#define BDS_EFI_MESSAGE_USB_DEVICE_BOOT 0x0305 // Type 03; Sub-Type 05
|
||
|
#define BDS_EFI_MESSAGE_MISC_BOOT 0x03FF
|
||
|
//
|
||
|
// Media boot type
|
||
|
// If a device path of boot option contain a media node, the boot option is media boot type
|
||
|
//
|
||
|
#define BDS_EFI_MEDIA_HD_BOOT 0x0401 // Type 04; Sub-Type 01
|
||
|
#define BDS_EFI_MEDIA_CDROM_BOOT 0x0402 // Type 04; Sub-Type 02
|
||
|
//
|
||
|
// BBS boot type
|
||
|
// If a device path of boot option contain a BBS node, the boot option is BBS boot type
|
||
|
//
|
||
|
#define BDS_LEGACY_BBS_BOOT 0x0501 // Type 05; Sub-Type 01
|
||
|
|
||
|
#define BDS_EFI_UNSUPPORT 0xFFFF
|
||
|
|
||
|
//
|
||
|
// USB host controller Programming Interface.
|
||
|
//
|
||
|
#define PCI_CLASSC_PI_UHCI 0x00
|
||
|
#define PCI_CLASSC_PI_EHCI 0x20
|
||
|
|
||
|
BOOLEAN
|
||
|
MatchPartitionDevicePathNode (
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *BlockIoDevicePath,
|
||
|
IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
|
||
|
);
|
||
|
|
||
|
EFI_DEVICE_PATH_PROTOCOL *
|
||
|
BdsExpandPartitionPartialDevicePathToFull (
|
||
|
IN HARDDRIVE_DEVICE_PATH *HardDriveDevicePath
|
||
|
);
|
||
|
|
||
|
EFI_HANDLE
|
||
|
BdsLibGetBootableHandle (
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||
|
);
|
||
|
|
||
|
BOOLEAN
|
||
|
BdsLibIsValidEFIBootOptDevicePath (
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *DevPath,
|
||
|
IN BOOLEAN CheckMedia
|
||
|
);
|
||
|
|
||
|
UINT32
|
||
|
BdsGetBootTypeFromDevicePath (
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *DevicePath
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
EFIAPI
|
||
|
BdsLibSaveMemoryTypeInformation (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
EFIAPI
|
||
|
BdsLibUpdateFvFileDevicePath (
|
||
|
IN OUT EFI_DEVICE_PATH_PROTOCOL ** DevicePath,
|
||
|
IN EFI_GUID *FileGuid
|
||
|
);
|
||
|
|
||
|
EFI_STATUS
|
||
|
BdsLibConnectUsbDevByShortFormDP (
|
||
|
IN CHAR8 HostControllerPI,
|
||
|
IN EFI_DEVICE_PATH_PROTOCOL *RemainingDevicePath
|
||
|
);
|
||
|
|
||
|
EFI_TPL
|
||
|
BdsLibGetCurrentTpl (
|
||
|
VOID
|
||
|
);
|
||
|
|
||
|
//
|
||
|
// The implementation of this function is provided by Platform code.
|
||
|
//
|
||
|
VOID
|
||
|
DevPathVendor (
|
||
|
IN OUT POOL_PRINT *Str,
|
||
|
IN VOID *DevPath
|
||
|
)
|
||
|
;
|
||
|
|
||
|
CHAR16 *
|
||
|
CatPrint (
|
||
|
IN OUT POOL_PRINT *Str,
|
||
|
IN CHAR16 *fmt,
|
||
|
...
|
||
|
)
|
||
|
;
|
||
|
#endif // _BDS_LIB_H_
|