|
|
/*++
Module Name:
nvrio.h
Abstract:
Access function to r/w environment variables from NVRAM
Author:
Mudit Vats (v-muditv) 12-13-99
Revision History:
--*/ #define MAXBOOTVARS 30
#define MAXBOOTVARSIZE 1024
#ifndef ANYSIZE_ARRAY
#define ANYSIZE_ARRAY 1 // winnt
#endif
#define DEBUG_PACK 0
#if DEBUG_PACK
VOID DisplayELOFromLoadOption( IN UINT32 OptionNum );
VOID DisplayELO( char* elo, UINT64 eloSize );
#endif
enum OptionalDataFields { OSLOADFILENAME, OSLOADOPTIONS, OSLOADPATH };
enum EfiLoadOptionFields { ATTRIBUTE = 10, FILEPATHLISTLENGTH, DESCRIPTION, EFIFILEPATHLIST, OSFILEPATHLIST, OPTIONALDATA };
//
// from EFI spec, ch. 17
//
typedef struct _EFI_LOAD_OPTION { UINT32 Attributes; UINT16 FilePathListLength; CHAR16 Description[1]; //EFI_DEVICE_PATH FilePath[];
//UINT8 OptionalData[];
} EFI_LOAD_OPTION, *PEFI_LOAD_OPTION;
typedef struct _WINDOWS_OS_OPTIONS { UINT8 Signature[8]; UINT32 Version; UINT32 Length; UINT32 OsLoadPathOffset; CHAR16 OsLoadOptions[ANYSIZE_ARRAY]; //FILE_PATH OsLoadPath;
} WINDOWS_OS_OPTIONS, *PWINDOWS_OS_OPTIONS;
typedef struct _FILE_PATH { UINT32 Version; UINT32 Length; UINT32 Type; CHAR8 FilePath[ANYSIZE_ARRAY]; } FILE_PATH, *PFILE_PATH;
#define FILE_PATH_TYPE_ARC 1
#define FILE_PATH_TYPE_ARC_SIGNATURE 2
#define FILE_PATH_TYPE_NT 3
#define FILE_PATH_TYPE_EFI 4
//
// from public/sdk/inc/ntexapi.h
//
/*
typedef struct _WINDOWS_OS_OPTIONS { UCHAR Signature[8]; ULONG Version; ULONG Length; ULONG OsLoadPathOffset; WCHAR OsLoadOptions[ANYSIZE_ARRAY]; //FILE_PATH OsLoadPath;
} WINDOWS_OS_OPTIONS, *PWINDOWS_OS_OPTIONS; */
#define WINDOWS_OS_OPTIONS_SIGNATURE "WINDOWS"
#define WINDOWS_OS_OPTIONS_VERSION 1
/*
** BUGBUG: temp prototypes - move to efilib.h later */ VOID RUNTIMEFUNCTION StrCpyA ( IN CHAR8 *Dest, IN CHAR8 *Src );
VOID RUNTIMEFUNCTION StrCatA ( IN CHAR8 *Dest, IN CHAR8 *Src );
UINTN RUNTIMEFUNCTION StrLenA ( IN CHAR8 *s1 );
UINTN RUNTIMEFUNCTION StrSizeA ( IN CHAR8 *s1 );
CHAR8 * RUNTIMEFUNCTION StrDuplicateA ( IN CHAR8 *Src ); // temp protos end
VOID GetBootManagerVars( );
BOOLEAN EraseOsBootOption( UINTN BootVarNum );
BOOLEAN EraseAllOsBootOptions( );
BOOLEAN PushToTop( IN UINT32 BootVarNum );
UINT64 GetBootOrderCount( );
UINT64 GetOsBootOptionsCount( );
VOID InsertString( IN OUT char* Dest, IN UINT32 Start, IN UINT32 End, IN char* InsertString );
VOID SubString( IN OUT char* Dest, IN UINT32 Start, IN UINT32 End, IN char* Src );
VOID SetEnvVar( IN CHAR16* szVarName, IN CHAR16* szVarValue, IN UINT32 deleteFlag );
BOOLEAN GetLoadIdentifier( IN UINT32 BootVarNum, OUT CHAR16* LoadIdentifier );
VOID GetOptionalDataValue( IN UINT32 BootVarNum, IN UINT32 Selection, OUT char* OptionalDataValue );
BOOLEAN GetOsLoadOptionVars( IN UINT32 BootVarNum, OUT CHAR16* LoadIdentifier, OUT char* OsLoadOptions, OUT char* EfiFilePath, OUT char* OsFilePath );
VOID PackLoadOption( IN UINT32 BootVarNum, IN CHAR16* LoadIdentifier, IN CHAR16* OsLoadOptions, IN char* EfiFilePath, IN char* OsLoadPath );
VOID SetFieldFromLoadOption( IN UINT32 BootVarNum, IN UINT32 FieldType, IN VOID* Data );
VOID GetFieldFromLoadOption( IN UINT32 OptionNum, IN UINT32 FieldType, OUT VOID* Data, OUT UINT64* DataSize );
VOID FreeBootManagerVars( );
BOOLEAN CopyVar( IN UINT32 VarNum );
VOID SetBootManagerVars( );
VOID GetFilePathShort( EFI_DEVICE_PATH *FilePath, CHAR16 *FilePathShort );
VOID SetFilePathFromShort( EFI_DEVICE_PATH *FilePath, CHAR16* FilePathShort );
UINTN GetDevPathSize( IN EFI_DEVICE_PATH *DevPath );
CHAR16 FindFreeBootOption( );
UINT32 GetPartitions( );
EFI_HANDLE GetDeviceHandleForPartition( );
VOID DisplayOsOptions( char* osOptions );
BOOLEAN isWindowsOsBootOption( char* elo, UINT64 eloSize );
char* GetAlignedOsOptions( char* elo, UINT64 eloSize );
|