299 lines
4.3 KiB
C
299 lines
4.3 KiB
C
|
/*++
|
||
|
|
||
|
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
|
||
|
);
|
||
|
|