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
|
|
);
|
|
|