//********************************************************************** //********************************************************************** //** ** //** (C)Copyright 1985-2012, American Megatrends, Inc. ** //** ** //** All Rights Reserved. ** //** ** //** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** //** ** //** Phone: (770)-246-8600 ** //** ** //********************************************************************** //********************************************************************** //********************************************************************** // $Header: /Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-DT_Crb_1AQQW/Include/BootOptions.h 2 10/30/13 6:49a Ireneyang $ // // $Revision: 2 $ // // $Date: 10/30/13 6:49a $ //********************************************************************** // Revision History // ---------------- // $Log: /Alaska/Projects/Intel/Haswell/LynxPoint_SharkBay-DT_Crb_1AQQW/Include/BootOptions.h $ // // 2 10/30/13 6:49a Ireneyang // - Fix Setup menu erroneously shows multiple instances of // the same bootable device for EIP139412 // // 6 5/20/13 4:35p Artems // [TAG] EIP N/A // [Category] Improvement // [Description] Implement ORPHAN_BOOT_POLICY_KEEP for legacy groups // [Files] BootOptions.h BootOptions.c BdsBoard.c // // 5 7/19/12 4:10p Felixp // Enhancement: // AMI_BOOT_OPTION_SIGNATURE macro is updated to start with a couple of // zeroes. // Some EFI applications (for example UEFI Shell) treats optional data // as a command line string. // These applications will treat a signature constructed by the // AMI_BOOT_OPTION_SIGNATURE macro // as an empty Unicode string. // // 4 5/23/12 4:08p Artems // [TAG] EIP N/A // [Category] Improvement // [Description] Added AMI-style header and footer // [Files] bootoptions.h // // //********************************************************************** // // // Name: // // Description: Boot options infrastructure definitions // // //********************************************************************** #ifndef __BOOT_OPTIONS_H__ #define __BOOT_OPTIONS_H__ #ifdef __cplusplus extern "C" { #endif #include #include #include #include #include #include #include #include #ifdef CSM_SUPPORT #include #endif #ifndef CSM_SUPPORT typedef VOID BBS_TABLE; #endif typedef struct{ DLINK Link; UINT32 Attributes; CHAR16 *Description; EFI_DEVICE_PATH_PROTOCOL *FilePathList; UINTN FilePathListLength; UINT8 *OptionalData; UINTN OptionalDataSize; UINT16 BootOptionNumber; UINT32 Priority; UINT32 Tag; // Just a number. Devices with the same number have something in common; // Can be used as a sort key. EFI_HANDLE DeviceHandle; UINT16 BbsIndex; BBS_TABLE *BbsEntry; BOOLEAN FwBootOption; BOOLEAN GroupHeader; } BOOT_OPTION; typedef struct{ DLINK Link; EFI_HANDLE DeviceHandle; UINT16 BbsIndex; BBS_TABLE *BbsEntry; } BOOT_DEVICE; typedef BOOLEAN (DEVICE_PATH_TO_DEVICE_MATCH_TEST)( EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath, BOOT_DEVICE *Device ); typedef BOOLEAN (BOOT_OPTION_TO_DEVICE_MATCH_TEST)( BOOT_OPTION *Option, BOOT_DEVICE *Device ); typedef BOOLEAN (FILTER_BOOT_DEVICE_TEST)(BOOT_DEVICE *Device); typedef UINTN (CONSTRUCT_BOOT_OPTION_NAME)( BOOT_OPTION *Option, CHAR16 *Name, UINTN NameSize ); typedef UINT16 (GET_BBS_ENTRY_DEVICE_TYPE)(BBS_TABLE *BbsEntry); typedef BOOLEAN (BUILD_BOOT_OPTION_FILE_PATH_LIST)(BOOT_OPTION *Option); #pragma pack(push,1) typedef struct{ UINT32 Signature; UINT32 Size; EFI_LOAD_OPTION Option; } NESTED_BOOT_OPTION; typedef struct{ // Guid = AMI_BBS_DEVICE_PATH_GUID VENDOR_DEVICE_PATH Header; UINT8 Bus; UINT8 Device; UINT8 Function; UINT8 Class; UINT8 SubClass; UINT8 Instance; }AMI_BBS_DEVICE_PATH; typedef struct{ // Guid = AMI_DEVICE_NAME_DEVICE_PATH_GUID VENDOR_DEVICE_PATH Header; // UINT8 DeviceName[n] // n = - sizeof(AMI_DEVICE_NAME_DEVICE_PATH) }AMI_DEVICE_NAME_DEVICE_PATH; #pragma pack(pop) typedef INT32 ( *COMPARE_FUNCTION ) (DLINK *p, DLINK *q); typedef VOID (BDS_CONTROL_FLOW_FUNCTION)(); #define INVALID_HANDLE NULL #define INVALID_BBS_INDEX 0xFFFF #define INVALID_BOOT_OPTION_NUMBER 0xFFFF #define LOWEST_BOOT_OPTION_PRIORITY 0xFFFFFFFF #define UNASSIGNED_LOWEST_TAG 0 #define UNASSIGNED_HIGHEST_TAG 0xFFFFFFFF #define INVALID_STR_TOKEN 0xFFFF // The upper two bytes of the signature must be zeroes. // Some EFI applications (for example UEFI Shell) treats optional data // as a command line string. // These applications will treat this signature as an empty Unicode string. #define AMI_BOOT_OPTION_SIGNATURE(Letter) (('O'<<24)+((Letter)<<16)) #define GetBaseTag(Tag) ((Tag)&0xFFFF) #define BootOptionTag(BaseTag,Priority) ((BaseTag)|((Priority)<<16)) #define AMI_SIMPLE_BOOT_OPTION_SIGNATURE AMI_BOOT_OPTION_SIGNATURE('B')//'AMBO' #define AMI_GROUP_BOOT_OPTION_SIGNATURE AMI_BOOT_OPTION_SIGNATURE('G')//'AMGO' #define AMI_NESTED_BOOT_OPTION_SIGNATURE AMI_BOOT_OPTION_SIGNATURE('N')//'AMNO' #define AMI_NESTED_BOOT_OPTION_HEADER_SIZE EFI_FIELD_OFFSET(NESTED_BOOT_OPTION,Option) #define STARTING_BOOT_OPTION_PRIORITY 0x100 #define DEFAULT_PRIORITY_INCREMENT 0x100 #define GetNextBootOptionPriority(CurrentPriority) ((CurrentPriority)+DEFAULT_PRIORITY_INCREMENT) #define IndexToBootPriority(Index) (STARTING_BOOT_OPTION_PRIORITY+(Index)*DEFAULT_PRIORITY_INCREMENT) #define IsLegacyBootOption(Option) (\ ((Option)->FilePathList==NULL) ? (Option)->BbsEntry!=NULL : (Option)->FilePathList->Type==BBS_DEVICE_PATH\ ) #define IsBootOptionWithDevice(Option) ((Option)->BbsEntry!=NULL || (Option)->DeviceHandle!=INVALID_HANDLE) #define BOOT_VARIABLE_ATTRIBUTES \ (EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS) #define AMI_BBS_DEVICE_PATH_GUID \ { 0x1db184ae, 0x81f5, 0x4e72, { 0x85, 0x44, 0x2b, 0xab, 0xc, 0x2c, 0xac, 0x5c } } #define AMI_MASKED_DEVICE_PATH_GUID \ { 0x99e275e7, 0x75a0, 0x4b37, { 0xa2, 0xe6, 0xc5, 0x38, 0x5e, 0x6c, 0x0, 0xcb } } #define AMI_DEVICE_NAME_DEVICE_PATH_GUID \ { 0x2d6447ef, 0x3bc9, 0x41a0, { 0xac, 0x19, 0x4d, 0x51, 0xd0, 0x1b, 0x4c, 0xe6 } } #define SHELL_GUID \ {0Xc57ad6b7,0X0515,0X40a8,{0X9d,0X21,0X55,0X16,0X52,0X85,0X4e,0X37}} #define AMI_MEDIA_DEVICE_PATH_GUID \ { 0x5023b95c, 0xdb26, 0x429b, { 0xa6, 0x48, 0xbd, 0x47, 0x66, 0x4c, 0x80, 0x12 } } #define FOR_EACH_LIST_ELEMENT(FirstLinkPtr,LinkPtr,ElementPtr,ELEMENT_TYPE)\ for( LinkPtr=(FirstLinkPtr)\ ; LinkPtr!=NULL\ && (ElementPtr=OUTTER(LinkPtr,Link,ELEMENT_TYPE),LinkPtr=LinkPtr->pNext,TRUE)\ ;\ ) #define FOR_EACH_BOOT_OPTION(List,Link,Element)\ FOR_EACH_LIST_ELEMENT((List)->pHead,Link,Element,BOOT_OPTION) #define FOR_EACH_BOOT_DEVICE(List,Link,Element)\ FOR_EACH_LIST_ELEMENT((List)->pHead,Link,Element,BOOT_DEVICE) #define NUMBER_OF_BBS_DEVICE_TYPES 8 #define BBS_DEVICE_TYPE_TO_INDEX(DeviceType)\ ( (DeviceType)<=BBS_EMBED_NETWORK && (DeviceType)!=0\ ? (DeviceType)-1\ : (DeviceType)==BBS_BEV_DEVICE\ ? NUMBER_OF_BBS_DEVICE_TYPES-2\ : NUMBER_OF_BBS_DEVICE_TYPES-1\ ) #ifdef EFI_DEBUG #define DUMP_BOOT_OPTION_LIST(List,Caption) DumpBootOptionList(List,Caption) #else #define DUMP_BOOT_OPTION_LIST(List,Caption) #endif #define ORPHAN_BOOT_OPTIONS_POLICY_KEEP 0 #define ORPHAN_BOOT_OPTIONS_POLICY_DELETE 1 #define ORPHAN_BOOT_OPTIONS_POLICY_DISABLE 2 #define ORPHAN_BOOT_OPTIONS_POLICY_HIDE 3 extern EFI_GUID EfiVariableGuid; extern EFI_GUID AmiBbsDevicePathGuid; extern EFI_GUID AmiMaskedDevicePathGuid; extern DEVICE_PATH_TO_DEVICE_MATCH_TEST *DpMatchingFunction[]; extern BOOT_OPTION_TO_DEVICE_MATCH_TEST *MatchingFunction[]; extern FILTER_BOOT_DEVICE_TEST *FilteringFunction[]; extern CONSTRUCT_BOOT_OPTION_NAME *BuildNameFunctions[]; extern BUILD_BOOT_OPTION_FILE_PATH_LIST *BuildFilePathFunctions[]; extern EFI_HII_HANDLE HiiHandle; extern const STRING_REF UnknownDeviceToken; extern CONSTRUCT_BOOT_OPTION_NAME *ConstructBootOptionNamePrefix; extern CONSTRUCT_BOOT_OPTION_NAME *ConstructBootOptionNameSuffix; extern GET_BBS_ENTRY_DEVICE_TYPE *GetBbsEntryDeviceType; extern BOOLEAN NormalizeBootOptionName; extern BOOLEAN NormalizeBootOptionDevicePath; extern DLIST *BootOptionList; extern DLIST *BootDeviceList; #ifdef CSM_SUPPORT #define LEGACY_DEV_ORDER_GUID \ { 0xA56074DB, 0x65FE, 0x45F7, 0xBD, 0x21, 0x2D, 0x2B, 0xDD, 0x8E, 0x96, 0x52 } typedef struct{ UINT32 Type; UINT16 Length; UINT16 Device[1]; } LEGACY_DEVICE_ORDER; extern EFI_GUID LegacyDevOrderGuid; #endif //defined in BootOptions.c VOID SortList(DLIST *List, COMPARE_FUNCTION Compare); INT32 CompareTagThenPriority(DLINK *Link1, DLINK *Link2); INT32 ComparePriorityThenBootOptionNumber(DLINK *Link1, DLINK *Link2); BOOT_OPTION* CreateBootOption(DLIST *BootOptionList); VOID DeleteBootOption(DLIST *BootOptionList, BOOT_OPTION *Option); BOOT_DEVICE* CreateBootDevice( DLIST *BootDeviceList, EFI_HANDLE DeviceHandle, UINT16 BbsIndex, BBS_TABLE *BbsEntry ); VOID DeleteBootDevice(DLIST *BootDeviceList, BOOT_DEVICE* Device); VOID UpdateBootOptionWithBootDeviceInfo( BOOT_OPTION *Option, BOOT_DEVICE* Device ); BOOLEAN IsUefiHddBootDevice(BOOT_DEVICE *Device); BOOLEAN IsGroupOrphan(BOOT_OPTION *Option); BOOLEAN LocateDevicePathTest( EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath, BOOT_DEVICE *Device ); BOOLEAN PartitionDevicePathTest( EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath, BOOT_DEVICE *Device ); #ifdef CSM_SUPPORT BOOLEAN BbsDevicePathTest( EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath, BOOT_DEVICE *Device ); BOOLEAN AmiBbsDevicePathTest( EFI_DEVICE_PATH_PROTOCOL *OptionDevicePath, BOOT_DEVICE *Device ); #endif UINTN ConstructBootOptionNameByHandle( BOOT_OPTION *Option, CHAR16 *Name, UINTN NameSize ); #ifdef CSM_SUPPORT UINTN ConstructBootOptionNameByBbsDescription( BOOT_OPTION *Option, CHAR16 *Name, UINTN NameSize ); VOID BuildLegacyDevOrderBuffer( LEGACY_DEVICE_ORDER **DevOrderBuffer, UINTN *BufferSize ); #endif UINTN ConstructBootOptionNameByHandleDevicePath( BOOT_OPTION *Option, CHAR16 *Name, UINTN NameSize ); UINTN ConstructBootOptionNameByFilePathList( BOOT_OPTION *Option, CHAR16 *Name, UINTN NameSize ); UINTN ConstructBootOptionName(BOOT_OPTION *Option); BOOLEAN BuildLegacyFilePath(BOOT_OPTION *Option); BOOLEAN BuildEfiFilePath(BOOT_OPTION *Option); BOOLEAN BuildBootOptionFilePath(BOOT_OPTION *Option); VOID DumpBootOptionList(DLIST *BootOptionList, CHAR8 *ListCaption); VOID MaskFilePathList(BOOT_OPTION *Option); //defined in BdsBoard.c UINT16 GetLegacyDevOrderType(BOOT_OPTION *Option); STRING_REF DevicePathNodeToStrRef(EFI_DEVICE_PATH_PROTOCOL *Dp); VOID ApplyOrphanBootOptionPolicy( DLIST *BootOptionList, BOOT_OPTION *Option, const int Policy ); /****** DO NOT WRITE BELOW THIS LINE *******/ #ifdef __cplusplus } #endif #endif //********************************************************************** //********************************************************************** //** ** //** (C)Copyright 1985-2012, American Megatrends, Inc. ** //** ** //** All Rights Reserved. ** //** ** //** 5555 Oakbrook Parkway, Suite 200, Norcross, GA 30093 ** //** ** //** Phone: (770)-246-8600 ** //** ** //********************************************************************** //**********************************************************************