#include <Library/UefiRuntimeServicesTableLib.h>\r
#include <Library/PrintLib.h>\r
\r
-\r
-#define HII_DATABASE_NOTIFY_GUID \\r
- { \\r
- 0xc1c76, 0xd79e, 0x42fe, {0x86, 0xb, 0x8b, 0xe8, 0x7b, 0x3e, 0x7a, 0x78} \\r
- }\r
-\r
#define MAX_STRING_LENGTH 1024\r
#define MAX_FONT_NAME_LEN 256\r
#define NARROW_BASELINE 15\r
LIST_ENTRY Entry; // Link to VarStorage\r
EFI_GUID Guid;\r
CHAR16 *Name;\r
- EFI_VARSTORE_ID VarStoreId;\r
UINT16 Size;\r
+ UINT8 Type;\r
LIST_ENTRY BlockEntry; // Link to its Block array\r
} IFR_VARSTORAGE_DATA;\r
\r
UINT8 OpCode;\r
UINT8 Scope;\r
LIST_ENTRY DefaultValueEntry; // Link to its default value array\r
+ CHAR16 *Name;\r
} IFR_BLOCK_DATA;\r
\r
+//\r
+// Get default value from IFR data.\r
+//\r
+typedef enum {\r
+ DefaultValueFromDefault = 0, // Get from the minimum or first one when not set default value.\r
+ DefaultValueFromFlag, // Get default value from the defalut flag.\r
+ DefaultValueFromOpcode // Get default value from default opcode, highest priority.\r
+} DEFAULT_VALUE_TYPE;\r
+\r
typedef struct {\r
LIST_ENTRY Entry;\r
- UINT8 OpCode;\r
+ DEFAULT_VALUE_TYPE Type;\r
+ BOOLEAN Cleaned; // Whether this value is cleaned\r
+ // TRUE Cleaned, the value can't be used\r
+ // FALSE Not cleaned, the value can be used.\r
UINT16 DefaultId;\r
- UINT64 Value;\r
+ EFI_IFR_TYPE_VALUE Value;\r
} IFR_DEFAULT_DATA;\r
\r
//\r
// Storage types\r
//\r
-#define EFI_HII_VARSTORE_BUFFER 0\r
-#define EFI_HII_VARSTORE_NAME_VALUE 1\r
-#define EFI_HII_VARSTORE_EFI_VARIABLE 2\r
+#define EFI_HII_VARSTORE_BUFFER 0\r
+#define EFI_HII_VARSTORE_NAME_VALUE 1\r
+#define EFI_HII_VARSTORE_EFI_VARIABLE 2\r
+#define EFI_HII_VARSTORE_EFI_VARIABLE_BUFFER 3\r
\r
#define HII_FORMSET_STORAGE_SIGNATURE SIGNATURE_32 ('H', 'S', 'T', 'G')\r
typedef struct {\r
with the first font. On return, points to the\r
returned font handle or points to NULL if there\r
are no more matching fonts.\r
- @param StringInfoIn Upon entry, points to the font to return\r
- information about. If NULL, then the information about the system default \r
- font will be returned.\r
- @param StringInfoOut Upon return, contains the matching font's\r
- information. If NULL, then no information is\r
- returned. It's caller's responsibility to free\r
- this buffer.\r
+ @param StringInfoIn Upon entry, points to the font to return information\r
+ about. If NULL, then the information about the system\r
+ default font will be returned.\r
+ @param StringInfoOut Upon return, contains the matching font's information.\r
+ If NULL, then no information is returned. This buffer\r
+ is allocated with a call to the Boot Service AllocatePool().\r
+ It is the caller's responsibility to call the Boot \r
+ Service FreePool() when the caller no longer requires\r
+ the contents of StringInfoOut.\r
@param String Points to the string which will be tested to\r
determine if all characters are available. If\r
NULL, then any font is acceptable.\r
@retval EFI_SUCCESS Matching font returned successfully.\r
@retval EFI_NOT_FOUND No matching font was found.\r
@retval EFI_INVALID_PARAMETER StringInfoIn is NULL.\r
- @retval EFI_INVALID_PARAMETER StringInfoIn->FontInfoMask is an invalid combination.\r
+ @retval EFI_INVALID_PARAMETER StringInfoIn->FontInfoMask is an invalid combination.\r
@retval EFI_OUT_OF_RESOURCES There were insufficient resources to complete the\r
request.\r
**/\r
@retval EFI_SUCCESS The string was returned successfully.\r
@retval EFI_NOT_FOUND The string specified by StringId is not\r
available.\r
- @retval EFI_NOT_FOUND The string specified by StringId is available but\r
- not in the specified language.\r
- The specified PackageList is not in the database.\r
- @retval EFI_INVALID_LANGUAGE - The string specified by StringId is available but\r
+ The specified PackageList is not in the database.\r
+ @retval EFI_INVALID_LANGUAGE The string specified by StringId is available but\r
+ not in the specified language.\r
@retval EFI_BUFFER_TOO_SMALL The buffer specified by StringSize is too small\r
to hold the string.\r
- @retval EFI_INVALID_PARAMETER The String or Language or StringSize was NULL.\r
+ @retval EFI_INVALID_PARAMETER The Language or StringSize was NULL.\r
+ @retval EFI_INVALID_PARAMETER The value referenced by StringSize was not zero\r
+ and String was NULL.\r
@retval EFI_OUT_OF_RESOURCES There were insufficient resources to complete the\r
request.\r
\r
points to the length of Languages, in bytes.\r
\r
@retval EFI_SUCCESS The languages were returned successfully.\r
- @retval EFI_INVALID_PARAMETER The Languages or LanguagesSize was NULL.\r
+ @retval EFI_INVALID_PARAMETER The LanguagesSize was NULL.\r
+ @retval EFI_INVALID_PARAMETER The value referenced by LanguagesSize is not zero and Languages is NULL.\r
@retval EFI_BUFFER_TOO_SMALL The LanguagesSize is too small to hold the list\r
of supported languages. LanguageSize is updated\r
to contain the required size.\r
in bytes.\r
\r
@retval EFI_SUCCESS Secondary languages were correctly returned.\r
- @retval EFI_INVALID_PARAMETER PrimaryLanguage or SecondaryLanguages or\r
- SecondaryLanguagesSize was NULL.\r
+ @retval EFI_INVALID_PARAMETER PrimaryLanguage or SecondaryLanguagesSize was NULL.\r
+ @retval EFI_INVALID_PARAMETER The value referenced by SecondaryLanguagesSize is not\r
+ zero and SecondaryLanguages is NULL.\r
@retval EFI_BUFFER_TOO_SMALL The buffer specified by SecondaryLanguagesSize is\r
too small to hold the returned information.\r
SecondaryLanguageSize is updated to hold the size of\r
the buffer required.\r
@retval EFI_INVALID_LANGUAGE The language specified by PrimaryLanguage is not\r
present in the specified package list.\r
- @retval EFI_NOT_FOUND The specified PackageList is not in the Database. \r
+ @retval EFI_NOT_FOUND The specified PackageList is not in the Database.\r
\r
**/\r
EFI_STATUS\r
@param Handle An array of EFI_HII_HANDLE instances returned.\r
\r
@retval EFI_SUCCESS The matching handles are outputed successfully.\r
- HandleBufferLength is updated with the actual length.\r
+ HandleBufferLength is updated with the actual length.\r
@retval EFI_BUFFER_TO_SMALL The HandleBufferLength parameter indicates that\r
Handle is too small to support the number of\r
handles. HandleBufferLength is updated with a\r
value that will enable the data to fit.\r
@retval EFI_NOT_FOUND No matching handle could not be found in\r
database.\r
- @retval EFI_INVALID_PARAMETER Handle or HandleBufferLength was NULL.\r
- @retval EFI_INVALID_PARAMETER PackageType is not a EFI_HII_PACKAGE_TYPE_GUID but\r
- PackageGuid is not NULL, PackageType is a EFI_HII_\r
- PACKAGE_TYPE_GUID but PackageGuid is NULL.\r
- \r
+ @retval EFI_INVALID_PARAMETER HandleBufferLength was NULL.\r
+ @retval EFI_INVALID_PARAMETER The value referenced by HandleBufferLength was not\r
+ zero and Handle was NULL.\r
+ @retval EFI_INVALID_PARAMETER PackageType is not a EFI_HII_PACKAGE_TYPE_GUID but\r
+ PackageGuid is not NULL, PackageType is a EFI_HII_\r
+ PACKAGE_TYPE_GUID but PackageGuid is NULL.\r
\r
**/\r
EFI_STATUS\r
a value that will enable the data to fit.\r
@retval EFI_NOT_FOUND The specifiecd Handle could not be found in the\r
current database.\r
- @retval EFI_INVALID_PARAMETER Handle or Buffer or BufferSize was NULL.\r
+ @retval EFI_INVALID_PARAMETER BufferSize was NULL.\r
+ @retval EFI_INVALID_PARAMETER The value referenced by BufferSize was not zero \r
+ and Buffer was NULL.\r
\r
**/\r
EFI_STATUS\r
number of GUIDs. KeyGuidBufferLength is\r
updated with a value that will enable the data to\r
fit.\r
- @retval EFI_INVALID_PARAMETER The KeyGuidBuffer or KeyGuidBufferLength was\r
- NULL.\r
+ @retval EFI_INVALID_PARAMETER The KeyGuidBufferLength is NULL.\r
+ @retval EFI_INVALID_PARAMETER The value referenced by KeyGuidBufferLength is not\r
+ zero and KeyGuidBuffer is NULL.\r
@retval EFI_NOT_FOUND There was no keyboard layout.\r
\r
**/\r
instance.\r
@param Results Null-terminated Unicode string in\r
<MultiConfigAltResp> format which has all values\r
- filled in for the names in the Request string.\r
- String to be allocated by the called function.\r
- De-allocation is up to the caller.\r
+ filled in for the entirety of the current HII \r
+ database. String to be allocated by the called \r
+ function. De-allocation is up to the caller.\r
\r
@retval EFI_SUCCESS The Results string is filled with the values\r
corresponding to all requested names.\r
(see below) is returned.\r
@param BlockSize The length of the Block in units of UINT8. On\r
input, this is the size of the Block. On output,\r
- if successful, contains the index of the last\r
- modified byte in the Block.\r
+ if successful, contains the largest index of the\r
+ modified byte in the Block, or the required buffer\r
+ size if the Block is not large enough.\r
@param Progress On return, points to an element of the ConfigResp\r
string filled in with the offset of the most\r
recent '&' before the first failing name / value\r
value pair. Block is left updated and\r
Progress points at the '&' preceding the first\r
non-<BlockName>.\r
+ @retval EFI_BUFFER_TOO_SMALL Block not large enough. Progress undefined. \r
+ BlockSize is updated with the required buffer size.\r
\r
**/\r
EFI_STATUS\r