summaryrefslogtreecommitdiff
path: root/EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c
diff options
context:
space:
mode:
authorqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2008-08-19 10:44:50 +0000
committerqwang12 <qwang12@6f19259b-4bc3-4df7-8a09-765794883524>2008-08-19 10:44:50 +0000
commit133a9dfb54bee02bf76aeb158da42594ffbc8a73 (patch)
treef7e2ccd8216c2cd4af7edab37c2b69fc16d666d7 /EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c
parentd37be74e1ab4655a387032027f478031b4bafa48 (diff)
downloadedk2-platforms-133a9dfb54bee02bf76aeb158da42594ffbc8a73.tar.xz
1) Add in code to sync Browser Data with the NvMapOverride that may be updated by Framework Callback.
2) Convert lang code to RFC3066 format in Framework HII's GetSring and NewString 3) Make sure the default ThunkExtractConfig is able to save the data even if it is not present initially. 4) Enable Framework HII's HiiGetGlyph and HiiGlyphToBlt. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@5689 6f19259b-4bc3-4df7-8a09-765794883524
Diffstat (limited to 'EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c')
-rw-r--r--EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c139
1 files changed, 90 insertions, 49 deletions
diff --git a/EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c b/EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c
index 88565d128c..c537a47b1c 100644
--- a/EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c
+++ b/EdkCompatibilityPkg/Compatibility/FrameworkHiiToUefiHiiThunk/ConfigAccess.c
@@ -433,7 +433,7 @@ ThunkExtractConfig (
EFI_STATUS Status;
CONFIG_ACCESS_PRIVATE *ConfigAccess;
LIST_ENTRY *Link;
- BUFFER_STORAGE_ENTRY *BufferStorage;
+ BUFFER_STORAGE_ENTRY *BufferStorage;
VOID *Data;
UINTN DataSize;
@@ -451,20 +451,31 @@ ThunkExtractConfig (
BufferStorage = BUFFER_STORAGE_ENTRY_FROM_LINK (Link);
- if (ConfigAccess->FormCallbackProtocol == NULL ||
- ConfigAccess->FormCallbackProtocol->NvRead == NULL) {
- Status = GetUefiVariable (
- BufferStorage,
- &Data,
- &DataSize
- );
+ if (ConfigAccess->ThunkContext->NvMapOverride == NULL) {
+ if (ConfigAccess->FormCallbackProtocol == NULL ||
+ ConfigAccess->FormCallbackProtocol->NvRead == NULL) {
+ Status = GetUefiVariable (
+ BufferStorage,
+ &Data,
+ &DataSize
+ );
+ } else {
+ Status = CallFormCallBack (
+ BufferStorage,
+ ConfigAccess->FormCallbackProtocol,
+ &Data,
+ &DataSize
+ );
+ }
} else {
- Status = CallFormCallBack (
- BufferStorage,
- ConfigAccess->FormCallbackProtocol,
- &Data,
- &DataSize
- );
+ DataSize = BufferStorage->Size;
+ Data = AllocateCopyPool (DataSize, ConfigAccess->ThunkContext->NvMapOverride);
+
+ if (Data != NULL) {
+ Status = EFI_SUCCESS;
+ } else {
+ Status = EFI_OUT_OF_RESOURCES;
+ }
}
if (!EFI_ERROR (Status)) {
@@ -518,7 +529,6 @@ ThunkRouteConfig (
BOOLEAN DataAllocated;
Data = NULL;
- DataAllocated = TRUE;
ConfigAccess = CONFIG_ACCESS_PRIVATE_FROM_PROTOCOL (This);
//
@@ -533,6 +543,7 @@ ThunkRouteConfig (
BufferStorage = BUFFER_STORAGE_ENTRY_FROM_LINK (Link);
DataSize2 = BufferStorage->Size;
if (ConfigAccess->ThunkContext->NvMapOverride == NULL) {
+ DataAllocated = TRUE;
if (ConfigAccess->FormCallbackProtocol == NULL ||
ConfigAccess->FormCallbackProtocol->NvRead == NULL) {
Status = GetUefiVariable (
@@ -540,8 +551,6 @@ ThunkRouteConfig (
&Data,
&DataSize
);
- ASSERT (DataSize == DataSize2);
-
} else {
Status = CallFormCallBack (
BufferStorage,
@@ -549,17 +558,20 @@ ThunkRouteConfig (
&Data,
&DataSize
);
- ASSERT (DataSize == DataSize2);
-
}
} else {
+ //
+ // ConfigToBlock will convert the Config String and update the NvMapOverride accordingly.
+ //
Status = EFI_SUCCESS;
Data = ConfigAccess->ThunkContext->NvMapOverride;
DataSize = DataSize2;
DataAllocated = FALSE;
}
- if (EFI_ERROR (Status)) {
- goto Done;
+ if (EFI_ERROR (Status) || (DataSize2 != DataSize)) {
+ if (Data == NULL) {
+ Data = AllocateZeroPool (DataSize2);
+ }
}
Status = mHiiConfigRoutingProtocol->ConfigToBlock (
@@ -573,26 +585,28 @@ ThunkRouteConfig (
goto Done;
}
- if (ConfigAccess->FormCallbackProtocol == NULL ||
- ConfigAccess->FormCallbackProtocol->NvWrite == NULL) {
- Status = gRT->SetVariable (
- BufferStorage->Name,
- &BufferStorage->Guid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- DataSize,
- Data
- );
- } else {
- Status = ConfigAccess->FormCallbackProtocol->NvWrite (
- ConfigAccess->FormCallbackProtocol,
- BufferStorage->Name,
- &BufferStorage->Guid,
- EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
- DataSize,
- Data,
- &ResetRequired
- );
-
+ if (ConfigAccess->ThunkContext->NvMapOverride == NULL) {
+ if (ConfigAccess->FormCallbackProtocol == NULL ||
+ ConfigAccess->FormCallbackProtocol->NvWrite == NULL) {
+ Status = gRT->SetVariable (
+ BufferStorage->Name,
+ &BufferStorage->Guid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+ DataSize2,
+ Data
+ );
+ } else {
+ Status = ConfigAccess->FormCallbackProtocol->NvWrite (
+ ConfigAccess->FormCallbackProtocol,
+ BufferStorage->Name,
+ &BufferStorage->Guid,
+ EFI_VARIABLE_NON_VOLATILE | EFI_VARIABLE_BOOTSERVICE_ACCESS | EFI_VARIABLE_RUNTIME_ACCESS,
+ DataSize2,
+ Data,
+ &ResetRequired
+ );
+
+ }
}
Done:
@@ -617,25 +631,27 @@ CreateIfrDataArray (
UINTN BrowserDataSize;
BUFFER_STORAGE_ENTRY *BufferStorageEntry;
LIST_ENTRY *Link;
+ EFI_STATUS Status;
IfrDataArray = AllocateZeroPool (0x100);
ASSERT (IfrDataArray != NULL);
- if (ConfigAccess->ThunkContext->NvMapOverride == NULL) {
- Link = GetFirstNode (&ConfigAccess->BufferStorageListHead);
-
- ASSERT (!IsNull (&ConfigAccess->BufferStorageListHead, Link));
-
- BufferStorageEntry = BUFFER_STORAGE_ENTRY_FROM_LINK(Link);
+ Link = GetFirstNode (&ConfigAccess->BufferStorageListHead);
+ ASSERT (!IsNull (&ConfigAccess->BufferStorageListHead, Link));
+
+ BufferStorageEntry = BUFFER_STORAGE_ENTRY_FROM_LINK(Link);
+ BrowserDataSize = BufferStorageEntry->Size;
- BrowserDataSize = BufferStorageEntry->Size;
+ if (ConfigAccess->ThunkContext->NvMapOverride == NULL) {
*NvMapAllocated = TRUE;
IfrDataArray->NvRamMap = AllocateZeroPool (BrowserDataSize);
- GetBrowserData (NULL, NULL, &BrowserDataSize, IfrDataArray->NvRamMap);
} else {
*NvMapAllocated = FALSE;
IfrDataArray->NvRamMap = ConfigAccess->ThunkContext->NvMapOverride;
}
+
+ Status = GetBrowserData (NULL, NULL, &BrowserDataSize, IfrDataArray->NvRamMap);
+ ASSERT_EFI_ERROR (Status);
IfrDataEntry = (FRAMEWORK_EFI_IFR_DATA_ENTRY *) (IfrDataArray + 1);
@@ -657,6 +673,30 @@ CreateIfrDataArray (
}
VOID
+SyncBrowserDataForNvMapOverride (
+ IN CONFIG_ACCESS_PRIVATE *ConfigAccess
+ )
+{
+ BUFFER_STORAGE_ENTRY *BufferStorageEntry;
+ LIST_ENTRY *Link;
+ EFI_STATUS Status;
+ UINTN BrowserDataSize;
+
+ if (ConfigAccess->ThunkContext->NvMapOverride != NULL) {
+
+ Link = GetFirstNode (&ConfigAccess->BufferStorageListHead);
+ ASSERT (!IsNull (&ConfigAccess->BufferStorageListHead, Link));
+
+ BufferStorageEntry = BUFFER_STORAGE_ENTRY_FROM_LINK(Link);
+ BrowserDataSize = BufferStorageEntry->Size;
+
+ Status = SetBrowserData (NULL, NULL, BrowserDataSize, ConfigAccess->ThunkContext->NvMapOverride, NULL);
+ ASSERT_EFI_ERROR (Status);
+ }
+
+}
+
+VOID
DestroyIfrDataArray (
IN FRAMEWORK_EFI_IFR_DATA_ARRAY *Array,
IN BOOLEAN NvMapAllocated
@@ -850,6 +890,7 @@ ThunkCallback (
Data,
&Packet
);
+ SyncBrowserDataForNvMapOverride (ConfigAccess);
//
// Callback require browser to perform action