diff --git a/OvmfPkg/PlatformDxe/Platform.c b/OvmfPkg/PlatformDxe/Platform.c index b69f2498b8..b95326e2b5 100644 --- a/OvmfPkg/PlatformDxe/Platform.c +++ b/OvmfPkg/PlatformDxe/Platform.c @@ -185,6 +185,8 @@ RouteConfig ( OUT EFI_STRING *Progress ) { + DEBUG ((EFI_D_VERBOSE, "%a: Configuration=\"%s\"\n", __FUNCTION__, + Configuration)); return EFI_SUCCESS; } @@ -201,6 +203,26 @@ Callback ( OUT EFI_BROWSER_ACTION_REQUEST *ActionRequest ) { + DEBUG ((EFI_D_VERBOSE, "%a: Action=0x%Lx QuestionId=%d Type=%d\n", + __FUNCTION__, (UINT64) Action, QuestionId, Type)); + + if (Action != EFI_BROWSER_ACTION_CHANGED) { + return EFI_UNSUPPORTED; + } + + switch (QuestionId) { + case QUESTION_SAVE_EXIT: + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_SUBMIT_EXIT; + break; + + case QUESTION_DISCARD_EXIT: + *ActionRequest = EFI_BROWSER_ACTION_REQUEST_FORM_DISCARD_EXIT; + break; + + default: + break; + } + return EFI_SUCCESS; } diff --git a/OvmfPkg/PlatformDxe/Platform.h b/OvmfPkg/PlatformDxe/Platform.h index 6ce67ff982..432eb5bc23 100644 --- a/OvmfPkg/PlatformDxe/Platform.h +++ b/OvmfPkg/PlatformDxe/Platform.h @@ -28,6 +28,9 @@ #define LABEL_RES_NEXT 1 #define QUESTION_RES_NEXT 2 +#define QUESTION_SAVE_EXIT 3 +#define QUESTION_DISCARD_EXIT 4 + // // This structure describes the form state. Its fields relate strictly to the // visual widgets on the form. diff --git a/OvmfPkg/PlatformDxe/Platform.uni b/OvmfPkg/PlatformDxe/Platform.uni index 6ce844a664..d8d5b0bb4d 100644 Binary files a/OvmfPkg/PlatformDxe/Platform.uni and b/OvmfPkg/PlatformDxe/Platform.uni differ diff --git a/OvmfPkg/PlatformDxe/PlatformForms.vfr b/OvmfPkg/PlatformDxe/PlatformForms.vfr index 61935c386b..a254572baf 100644 --- a/OvmfPkg/PlatformDxe/PlatformForms.vfr +++ b/OvmfPkg/PlatformDxe/PlatformForms.vfr @@ -56,6 +56,19 @@ formset // We'll dynamically generate a one-of-many selection at this label. // label LABEL_RES_NEXT; + + text + help = STRING_TOKEN(STR_SAVE_EXIT), + text = STRING_TOKEN(STR_SAVE_EXIT), + flags = INTERACTIVE, + key = QUESTION_SAVE_EXIT; + + text + help = STRING_TOKEN(STR_DISCARD_EXIT), + text = STRING_TOKEN(STR_DISCARD_EXIT), + flags = INTERACTIVE, + key = QUESTION_DISCARD_EXIT; + endform; endformset;