3 Copyright (c) 2004 - 2014, Intel Corporation. All rights reserved.<BR>
5 SPDX-License-Identifier: BSD-2-Clause-Patent
13 #include "PlatformSetupDxe.h"
14 #include "Guid/SetupVariable.h"
15 #include <Protocol/FormBrowserEx2.h>
18 #define EFI_CALLBACK_INFO_SIGNATURE SIGNATURE_32 ('C', 'l', 'b', 'k')
19 #define EFI_CALLBACK_INFO_FROM_THIS(a) CR (a, EFI_CALLBACK_INFO, ConfigAccess, EFI_CALLBACK_INFO_SIGNATURE)
23 EFI_HANDLE DriverHandle
;
24 EFI_HII_HANDLE RegisteredHandle
;
25 SYSTEM_CONFIGURATION FakeNvData
;
26 SYSTEM_CONFIGURATION BackupNvData
;
27 EFI_HII_CONFIG_ROUTING_PROTOCOL
*HiiConfigRouting
;
28 EFI_HII_CONFIG_ACCESS_PROTOCOL ConfigAccess
;
34 // HII specific Vendor Device Path definition.
37 VENDOR_DEVICE_PATH VendorDevicePath
;
38 EFI_DEVICE_PATH_PROTOCOL End
;
39 } HII_VENDOR_DEVICE_PATH
;
44 // uni string and Vfr Binary data.
46 extern UINT8 VfrBin
[];
47 extern UINT8 PlatformSetupDxeStrings
[];
49 EFI_HANDLE mImageHandle
;
54 #define EFI_NORMAL_SETUP_GUID \
55 { 0xec87d643, 0xeba4, 0x4bb5, 0xa1, 0xe5, 0x3f, 0x3e, 0x36, 0xb2, 0xd, 0xa9 }
57 EFI_GUID mNormalSetupGuid
= EFI_NORMAL_SETUP_GUID
;
59 EFI_GUID mSystemConfigGuid
= SYSTEM_CONFIGURATION_GUID
;
60 CHAR16 mVariableName
[] = L
"Setup";
61 CHAR16 mSetupName
[] = L
"Setup";
62 EFI_CALLBACK_INFO
*mCallbackInfo
;
63 BOOLEAN GlobalReset
=FALSE
;
65 HII_VENDOR_DEVICE_PATH mHiiVendorDevicePath
= {
71 (UINT8
) (sizeof (VENDOR_DEVICE_PATH
)),
72 (UINT8
) ((sizeof (VENDOR_DEVICE_PATH
)) >> 8)
79 END_ENTIRE_DEVICE_PATH_SUBTYPE
,
81 (UINT8
) (END_DEVICE_PATH_LENGTH
),
82 (UINT8
) ((END_DEVICE_PATH_LENGTH
) >> 8)
88 This function allows a caller to extract the current configuration for one
89 or more named elements from the target driver.
91 @param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
92 @param Request A null-terminated Unicode string in <ConfigRequest> format.
93 @param Progress On return, points to a character in the Request string.
94 Points to the string's null terminator if request was successful.
95 Points to the most recent '&' before the first failing name/value
96 pair (or the beginning of the string if the failure is in the
97 first name/value pair) if the request was not successful.
98 @param Results A null-terminated Unicode string in <ConfigAltResp> format which
99 has all values filled in for the names in the Request string.
100 String to be allocated by the called function.
102 @retval EFI_SUCCESS The Results is filled with the requested values.
103 @retval EFI_OUT_OF_RESOURCES Not enough memory to store the results.
104 @retval EFI_INVALID_PARAMETER Request is NULL, illegal syntax, or unknown name.
105 @retval EFI_NOT_FOUND Routing data doesn't match any storage in this driver.
110 CheckSystemConfigLoad(SYSTEM_CONFIGURATION
*SystemConfigPtr
);
113 CheckSystemConfigSave(SYSTEM_CONFIGURATION
*SystemConfigPtr
);
116 ConfirmSecureBootTest();
119 LoadLpssDefaultValues (
120 IN EFI_CALLBACK_INFO
*Private
124 // Load LPSS and SCC default configurations for Android
126 Private
->FakeNvData
.LpsseMMCEnabled
= FALSE
;
127 Private
->FakeNvData
.LpssSdioEnabled
= TRUE
;
128 Private
->FakeNvData
.LpssSdcardEnabled
= TRUE
;
129 Private
->FakeNvData
.LpssSdCardSDR25Enabled
= FALSE
;
130 Private
->FakeNvData
.LpssSdCardDDR50Enabled
= TRUE
;
131 Private
->FakeNvData
.LpssMipiHsi
= FALSE
;
132 Private
->FakeNvData
.LpsseMMC45Enabled
= TRUE
;
133 Private
->FakeNvData
.LpsseMMC45DDR50Enabled
= TRUE
;
134 Private
->FakeNvData
.LpsseMMC45HS200Enabled
= FALSE
;
135 Private
->FakeNvData
.LpsseMMC45RetuneTimerValue
= 8;
136 Private
->FakeNvData
.eMMCBootMode
= 1; // Auto Detect
138 Private
->FakeNvData
.GOPEnable
= TRUE
;
139 Private
->FakeNvData
.SecureBoot
= TRUE
;
140 Private
->FakeNvData
.UsbAutoMode
= TRUE
;
141 Private
->FakeNvData
.UsbXhciSupport
= TRUE
;
142 Private
->FakeNvData
.PchUsb30Mode
= TRUE
;
143 Private
->FakeNvData
.LegacyUSBBooting
= FALSE
;
144 Private
->FakeNvData
.PchUsb20
= FALSE
;
150 SystemConfigExtractConfig (
151 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL
*This
,
152 IN CONST EFI_STRING Request
,
153 OUT EFI_STRING
*Progress
,
154 OUT EFI_STRING
*Results
158 EFI_CALLBACK_INFO
*Private
;
159 EFI_HII_CONFIG_ROUTING_PROTOCOL
*HiiConfigRouting
;
160 EFI_STRING ConfigRequestHdr
;
161 EFI_STRING ConfigRequest
;
162 BOOLEAN AllocatedRequest
;
165 VOID
*SystemConfigPtr
;
168 if (Progress
== NULL
|| Results
== NULL
) {
169 return EFI_INVALID_PARAMETER
;
173 if ((Request
!= NULL
) && !HiiIsConfigHdrMatch (Request
, &mSystemConfigGuid
, mVariableName
)) {
174 return EFI_NOT_FOUND
;
177 ConfigRequestHdr
= NULL
;
178 ConfigRequest
= NULL
;
180 AllocatedRequest
= FALSE
;
182 Private
= EFI_CALLBACK_INFO_FROM_THIS (This
);
186 HiiConfigRouting
= Private
->HiiConfigRouting
;
187 ConfigRequest
= Request
;
188 if ((Request
== NULL
) || (StrStr (Request
, L
"OFFSET") == NULL
)) {
190 // Request has no request element, construct full request string.
191 // Allocate and fill a buffer large enough to hold the <ConfigHdr> template
192 // followed by "&OFFSET=0&WIDTH=WWWWWWWWWWWWWWWW" followed by a Null-terminator
194 ConfigRequestHdr
= HiiConstructConfigHdr (&mSystemConfigGuid
, mVariableName
, Private
->DriverHandle
);
195 Size
= (StrLen (ConfigRequestHdr
) + 32 + 1) * sizeof (CHAR16
);
196 ConfigRequest
= AllocateZeroPool (Size
);
197 ASSERT (ConfigRequest
!= NULL
);
198 AllocatedRequest
= TRUE
;
199 BufferSize
= sizeof (SYSTEM_CONFIGURATION
);
200 UnicodeSPrint (ConfigRequest
, Size
, L
"%s&OFFSET=0&WIDTH=%016LX", ConfigRequestHdr
, (UINT64
)BufferSize
);
201 FreePool (ConfigRequestHdr
);
203 SystemConfigPtr
= GetVariable(mSetupName
, &mNormalSetupGuid
);
206 if (SystemConfigPtr
== NULL
) {
207 ZeroMem(&Private
->FakeNvData
, sizeof(SYSTEM_CONFIGURATION
));
208 ZeroMem(&Private
->BackupNvData
, sizeof(SYSTEM_CONFIGURATION
));
210 CheckSystemConfigLoad(SystemConfigPtr
);
211 CopyMem(&Private
->FakeNvData
, SystemConfigPtr
, sizeof(SYSTEM_CONFIGURATION
));
212 CopyMem(&Private
->BackupNvData
, SystemConfigPtr
, sizeof(SYSTEM_CONFIGURATION
));
213 FreePool(SystemConfigPtr
);
217 // Convert buffer data to <ConfigResp> by helper function BlockToConfig()
219 Status
= HiiConfigRouting
->BlockToConfig (
222 (UINT8
*) &Private
->FakeNvData
,
223 sizeof (SYSTEM_CONFIGURATION
),
229 // Free the allocated config request string.
231 if (AllocatedRequest
) {
232 FreePool (ConfigRequest
);
233 ConfigRequest
= NULL
;
237 // Set Progress string to the original request string.
239 if (Request
== NULL
) {
241 } else if (StrStr (Request
, L
"OFFSET") == NULL
) {
242 *Progress
= Request
+ StrLen (Request
);
249 This function processes the results of changes in configuration.
251 @param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
252 @param Configuration A null-terminated Unicode string in <ConfigRequest> format.
253 @param Progress A pointer to a string filled in with the offset of the most
254 recent '&' before the first failing name/value pair (or the
255 beginning of the string if the failure is in the first
256 name/value pair) or the terminating NULL if all was successful.
258 @retval EFI_SUCCESS The Results is processed successfully.
259 @retval EFI_INVALID_PARAMETER Configuration is NULL.
260 @retval EFI_NOT_FOUND Routing data doesn't match any storage in this driver.
265 SystemConfigRouteConfig (
266 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL
*This
,
267 IN CONST EFI_STRING Configuration
,
268 OUT EFI_STRING
*Progress
271 EFI_CALLBACK_INFO
*Private
;
272 SYSTEM_CONFIGURATION
*FakeNvData
;
274 if (Configuration
== NULL
|| Progress
== NULL
) {
275 return EFI_INVALID_PARAMETER
;
277 *Progress
= Configuration
;
279 if (!HiiIsConfigHdrMatch (Configuration
, &mSystemConfigGuid
, mVariableName
)) {
280 return EFI_NOT_FOUND
;
283 *Progress
= Configuration
+ StrLen (Configuration
);
284 Private
= EFI_CALLBACK_INFO_FROM_THIS (This
);
285 FakeNvData
= &Private
->FakeNvData
;
286 if (!HiiGetBrowserData (&mSystemConfigGuid
, mVariableName
, sizeof (SYSTEM_CONFIGURATION
), (UINT8
*) FakeNvData
)) {
288 // FakeNvData can't be got from SetupBrowser, which doesn't need to be set.
293 if (Private
->FakeNvData
.ReservedO
!= Private
->BackupNvData
.ReservedO
) {
294 Private
->BackupNvData
.ReservedO
= Private
->FakeNvData
.ReservedO
;
295 LoadLpssDefaultValues (Private
);
298 // Pass changed uncommitted data back to Form Browser
300 HiiSetBrowserData (&mSystemConfigGuid
, mVariableName
, sizeof (SYSTEM_CONFIGURATION
), (UINT8
*) FakeNvData
, NULL
);
306 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
307 sizeof(SYSTEM_CONFIGURATION
),
311 CheckSystemConfigSave(&Private
->FakeNvData
);
316 This is the function that is called to provide results data to the driver. This data
317 consists of a unique key which is used to identify what data is either being passed back
320 @param This Points to the EFI_HII_CONFIG_ACCESS_PROTOCOL.
321 @param Action A null-terminated Unicode string in <ConfigRequest> format.
322 @param KeyValue A unique Goto OpCode callback value which record user's selection.
323 0x100 <= KeyValue <0x500 : user select a controller item in the first page;
324 KeyValue == 0x1234 : user select 'Refresh' in first page, or user select 'Go to Previous Menu' in second page
325 KeyValue == 0x1235 : user select 'Pci device filter' in first page
326 KeyValue == 0x1500 : user select 'order ... priority' item in second page
327 KeyValue == 0x1800 : user select 'commint changes' in third page
328 KeyValue == 0x2000 : user select 'Go to Previous Menu' in third page
329 @param Type The type of value for the question.
330 @param Value A pointer to the data being sent to the original exporting driver.
331 @param ActionRequest On return, points to the action requested by the callback function.
333 @retval EFI_SUCCESS Always returned.
338 SystemConfigCallback (
339 IN CONST EFI_HII_CONFIG_ACCESS_PROTOCOL
*This
,
340 IN EFI_BROWSER_ACTION Action
,
341 IN EFI_QUESTION_ID KeyValue
,
343 IN EFI_IFR_TYPE_VALUE
*Value
,
344 OUT EFI_BROWSER_ACTION_REQUEST
*ActionRequest
347 EFI_CALLBACK_INFO
*Private
;
348 SYSTEM_CONFIGURATION
*FakeNvData
;
349 SYSTEM_CONFIGURATION
*SetupData
;
352 CHAR16
*StringBuffer1
;
353 CHAR16
*StringBuffer2
;
354 CHAR16
*StringBuffer3
;
358 EDKII_FORM_BROWSER_EXTENSION2_PROTOCOL
*FormBrowserEx2
;
360 StringBuffer1
= AllocateZeroPool (200 * sizeof (CHAR16
));
361 ASSERT (StringBuffer1
!= NULL
);
362 StringBuffer2
= AllocateZeroPool (200 * sizeof (CHAR16
));
363 ASSERT (StringBuffer2
!= NULL
);
364 StringBuffer3
= AllocateZeroPool (200 * sizeof (CHAR16
));
365 ASSERT (StringBuffer3
!= NULL
);
368 case EFI_BROWSER_ACTION_CHANGING
:
370 if (KeyValue
== 0x1235) {
371 StrCpy (StringBuffer1
, L
"Will you disable PTT ? ");
372 StrCpy (StringBuffer2
, L
"Enter (YES) / Esc (NO)");
375 // Popup a menu to notice user
378 CreatePopUp (EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
, &Key
, StringBuffer1
, StringBuffer2
, NULL
);
379 } while ((Key
.ScanCode
!= SCAN_ESC
) && (Key
.UnicodeChar
!= CHAR_CARRIAGE_RETURN
));
382 // If the user hits the YES Response key,
384 if (Key
.UnicodeChar
== CHAR_CARRIAGE_RETURN
) {
387 } else if (KeyValue
== 0x1236) {
388 StrCpy (StringBuffer1
, L
"Will you revoke trust ? ");
389 StrCpy (StringBuffer2
, L
"Enter (YES) / Esc (NO)");
392 // Popup a menu to notice user
395 CreatePopUp (EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
, &Key
, StringBuffer1
, StringBuffer2
, NULL
);
396 } while ((Key
.ScanCode
!= SCAN_ESC
) && (Key
.UnicodeChar
!= CHAR_CARRIAGE_RETURN
));
399 // If the user hits the YES Response key,
401 if (Key
.UnicodeChar
== CHAR_CARRIAGE_RETURN
) {
404 } else if (KeyValue
== 0x1239) {
405 if (Value
->u8
== 0x00) {
406 StrCpy (StringBuffer1
, L
"WARNING: SOC may be damaged due to high temperature");
407 StrCpy (StringBuffer2
, L
"when DPTF is disabled and IGD turbo is enabled.");
408 StrCpy (StringBuffer3
, L
"Press Enter/ESC to continue...");
411 // Popup a menu to notice user
414 CreatePopUp (EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
, &Key
, StringBuffer1
, StringBuffer2
, StringBuffer3
, NULL
);
415 } while ((Key
.ScanCode
!= SCAN_ESC
) && (Key
.UnicodeChar
!= CHAR_CARRIAGE_RETURN
));
417 } else if (KeyValue
== 0x1240) { // secure erase feature of eMMC
419 // Popup a menu to notice user
421 StrCpy (StringBuffer1
, L
"WARNING: All your data on the eMMC will be lost");
422 StrCpy (StringBuffer2
, L
"Do you really want to enable secure erase on eMMC?");
423 StrCpy (StringBuffer3
, L
" Enter (YES) / Esc (NO) ");
426 CreatePopUp (EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
, &Key
, StringBuffer1
, StringBuffer2
, StringBuffer3
,NULL
);
427 } while ((Key
.ScanCode
!= SCAN_ESC
) && (Key
.UnicodeChar
!= CHAR_CARRIAGE_RETURN
));
430 // If the user hits the ESC Response key,
432 if (Key
.ScanCode
== SCAN_ESC
) {
433 Private
= EFI_CALLBACK_INFO_FROM_THIS (This
);
434 FakeNvData
= &Private
->FakeNvData
;
436 Status
= HiiGetBrowserData (
439 sizeof (SYSTEM_CONFIGURATION
),
442 if (!EFI_ERROR (Status
)) {
443 FakeNvData
->SecureErase
= 0;
447 sizeof (SYSTEM_CONFIGURATION
),
448 (UINT8
*) FakeNvData
,
456 // If the user hits the YES Response key
458 if (Key
.UnicodeChar
== CHAR_CARRIAGE_RETURN
) {
462 Private
= EFI_CALLBACK_INFO_FROM_THIS (This
);
463 FakeNvData
= &Private
->FakeNvData
;
465 Status
= HiiGetBrowserData (
468 sizeof (SYSTEM_CONFIGURATION
),
471 if (!EFI_ERROR (Status
)) {
472 Status
= gRT
->SetVariable (
475 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
476 sizeof(SYSTEM_CONFIGURATION
),
495 else if (KeyValue
== 0xF001) {
497 // Popup a menu to notice user
499 StrCpy (StringBuffer1
, L
"Do you want to Commit Changes and Exit?");
500 StrCpy (StringBuffer2
, L
" Enter (YES) / Esc (NO) ");
503 CreatePopUp (EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
, &Key
, StringBuffer1
, StringBuffer2
, NULL
);
504 } while ((Key
.ScanCode
!= SCAN_ESC
) && (Key
.UnicodeChar
!= CHAR_CARRIAGE_RETURN
));
507 // If the user hits the YES Response key
509 if (Key
.UnicodeChar
== CHAR_CARRIAGE_RETURN
) {
513 Private
= EFI_CALLBACK_INFO_FROM_THIS (This
);
514 FakeNvData
= &Private
->FakeNvData
;
516 Status
= HiiGetBrowserData (
519 sizeof (SYSTEM_CONFIGURATION
),
522 if (!EFI_ERROR (Status
)) {
523 Status
= gRT
->SetVariable (
526 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
527 sizeof(SYSTEM_CONFIGURATION
),
533 // Update Secure Boot configuration changes
535 CheckSystemConfigSave(FakeNvData
);
540 if (GlobalReset
== TRUE
) {
562 } else if (KeyValue
== 0xF002) {
564 // Popup a menu to notice user
566 StrCpy (StringBuffer1
, L
"Do you want to Discard Changes and Exit?");
567 StrCpy (StringBuffer2
, L
" Enter (YES) / Esc (NO) ");
570 CreatePopUp (EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
, &Key
, StringBuffer1
, StringBuffer2
, NULL
);
571 } while ((Key
.ScanCode
!= SCAN_ESC
) && (Key
.UnicodeChar
!= CHAR_CARRIAGE_RETURN
));
574 // If the user hits the YES Response key
576 if (Key
.UnicodeChar
== CHAR_CARRIAGE_RETURN
) {
580 gRT
->ResetSystem(EfiResetCold
, EFI_SUCCESS
, 0, NULL
);
582 } else if (KeyValue
== 0xF003) {
584 // Popup a menu to notice user
586 StrCpy (StringBuffer1
, L
"Do you want to load setup defaults and Exit?");
587 StrCpy (StringBuffer2
, L
" Enter (YES) / Esc (NO) ");
590 CreatePopUp (EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
, &Key
, StringBuffer1
, StringBuffer2
, NULL
);
591 } while ((Key
.ScanCode
!= SCAN_ESC
) && (Key
.UnicodeChar
!= CHAR_CARRIAGE_RETURN
));
594 // If the user hits the YES Response key
596 if (Key
.UnicodeChar
== CHAR_CARRIAGE_RETURN
) {
598 Status
= gBS
->LocateProtocol (&gEdkiiFormBrowserEx2ProtocolGuid
, NULL
, (VOID
**) &FormBrowserEx2
);
599 FormBrowserEx2
->ExecuteAction(BROWSER_ACTION_DEFAULT
, EFI_HII_DEFAULT_CLASS_STANDARD
);
601 FakeNvData
= AllocateZeroPool (sizeof(SYSTEM_CONFIGURATION
));
603 if (FakeNvData
== NULL
) {
604 return EFI_OUT_OF_RESOURCES
;
607 Status
= HiiGetBrowserData (
610 sizeof (SYSTEM_CONFIGURATION
),
614 if (!EFI_ERROR (Status
)) {
615 Status
= gRT
->SetVariable (
618 EFI_VARIABLE_NON_VOLATILE
| EFI_VARIABLE_BOOTSERVICE_ACCESS
,
619 sizeof(SYSTEM_CONFIGURATION
),
624 FreePool (FakeNvData
);
626 DataSize
= sizeof(OsSelection
);
627 Status
= gRT
->GetVariable(
629 &gOsSelectionVariableGuid
,
635 if (EFI_ERROR(Status
) || (OsSelection
!= FakeNvData
->ReservedO
)) {
636 OsSelection
= FakeNvData
->ReservedO
;
637 Status
= gRT
->SetVariable (
639 &gOsSelectionVariableGuid
,
640 EFI_VARIABLE_BOOTSERVICE_ACCESS
| EFI_VARIABLE_RUNTIME_ACCESS
| EFI_VARIABLE_NON_VOLATILE
,
656 } else if ((KeyValue
== 0x123A) || (KeyValue
== 0x123B) || (KeyValue
== 0x123C)) {
657 StrCpy (StringBuffer1
, L
"WARNING: Enable or disable USB Controllers will ");
658 StrCpy (StringBuffer2
, L
"make global reset to restart system.");
659 StrCpy (StringBuffer3
, L
"Press Enter/ESC to continue...");
661 // Popup a menu to notice user
664 CreatePopUp (EFI_LIGHTGRAY
| EFI_BACKGROUND_BLUE
, &Key
, StringBuffer1
, StringBuffer2
, StringBuffer3
, NULL
);
665 } while ((Key
.ScanCode
!= SCAN_ESC
) && (Key
.UnicodeChar
!= CHAR_CARRIAGE_RETURN
));
667 FakeNvData
= AllocateZeroPool (sizeof(SYSTEM_CONFIGURATION
));
668 Status
= HiiGetBrowserData (
671 sizeof (SYSTEM_CONFIGURATION
),
677 SizeOfNvStore
= sizeof(SYSTEM_CONFIGURATION
);
678 SetupData
= AllocateZeroPool (sizeof(SYSTEM_CONFIGURATION
));
679 Status
= gRT
->GetVariable(
686 if ((SetupData
->UsbAutoMode
!= FakeNvData
->UsbAutoMode
) ||
687 (SetupData
->UsbXhciSupport
!= FakeNvData
->UsbXhciSupport
) ||
688 (SetupData
->PchUsb20
!= FakeNvData
->PchUsb20
)) {
702 FreePool (StringBuffer1
);
703 FreePool (StringBuffer2
);
704 FreePool (StringBuffer3
);
707 // Workaround for Load Default for "DPTF Enable"
709 if (Action
== EFI_BROWSER_ACTION_DEFAULT_STANDARD
) {
710 if (KeyValue
== 0x1239) {
711 return EFI_NOT_FOUND
;
715 if (Action
== EFI_BROWSER_ACTION_FORM_CLOSE
) {
717 // Do nothing for UEFI OPEN/CLOSE Action
722 Private
= EFI_CALLBACK_INFO_FROM_THIS (This
);
723 FakeNvData
= &Private
->FakeNvData
;
724 if (!HiiGetBrowserData (&mSystemConfigGuid
, mVariableName
, sizeof (SYSTEM_CONFIGURATION
), (UINT8
*) FakeNvData
)) {
725 return EFI_NOT_FOUND
;
728 if ((Action
== EFI_BROWSER_ACTION_FORM_OPEN
) && (Private
->FakeNvData
.ReservedO
!= Private
->BackupNvData
.ReservedO
)) {
729 Private
->BackupNvData
.ReservedO
= Private
->FakeNvData
.ReservedO
;
730 LoadLpssDefaultValues (Private
);
734 // When user selected the secure erase, set it to disable
736 if((KeyValue
== 0x1240) && (Action
== EFI_BROWSER_ACTION_CHANGED
)) {
737 FakeNvData
->SecureErase
= 0;
740 if ((Action
== EFI_BROWSER_ACTION_FORM_OPEN
) || (Action
== EFI_BROWSER_ACTION_CHANGED
)) {
742 // If function 0 is disabled, function 1 ~ 7 also required to be disabled.
744 if (Private
->FakeNvData
.LpssDma0Enabled
== 0) {
745 Private
->FakeNvData
.LpssHsuart0Enabled
= 0;
746 Private
->FakeNvData
.LpssHsuart1Enabled
= 0;
747 Private
->FakeNvData
.LpssPwm0Enabled
= 0;
748 Private
->FakeNvData
.LpssPwm1Enabled
= 0;
749 Private
->FakeNvData
.LpssSpiEnabled
= 0;
754 // If function 0 is disabled, function 1 ~ 7 also required to be disabled.
756 if (Private
->FakeNvData
.LpssDma1Enabled
== 0) {
757 Private
->FakeNvData
.LpssI2C0Enabled
= 0;
758 Private
->FakeNvData
.LpssI2C1Enabled
= 0;
759 Private
->FakeNvData
.LpssI2C2Enabled
= 0;
760 Private
->FakeNvData
.LpssI2C3Enabled
= 0;
761 Private
->FakeNvData
.LpssI2C4Enabled
= 0;
762 Private
->FakeNvData
.LpssI2C5Enabled
= 0;
763 Private
->FakeNvData
.LpssI2C6Enabled
= 0;
769 // Pass changed uncommitted data back to Form Browser
771 HiiSetBrowserData (&mSystemConfigGuid
, mVariableName
, sizeof (SYSTEM_CONFIGURATION
), (UINT8
*) FakeNvData
, NULL
);
778 The driver Entry Point. The function will export a disk device class formset and
779 its callback function to hii database.
781 @param ImageHandle The firmware allocated handle for the EFI image.
782 @param SystemTable A pointer to the EFI System Table.
784 @retval EFI_SUCCESS The entry point is executed successfully.
785 @retval other Some error occurs when executing this entry point.
790 PlatformSetupDxeInit (
791 IN EFI_HANDLE ImageHandle
,
792 IN EFI_SYSTEM_TABLE
*SystemTable
796 EFI_FORM_BROWSER2_PROTOCOL
*FormBrowser2
;
798 mImageHandle
= ImageHandle
;
801 // There should only be one Form Configuration protocol
803 Status
= gBS
->LocateProtocol (
804 &gEfiFormBrowser2ProtocolGuid
,
806 (VOID
**) &FormBrowser2
808 if (EFI_ERROR (Status
)) {
812 mCallbackInfo
= AllocateZeroPool (sizeof (EFI_CALLBACK_INFO
));
813 if (mCallbackInfo
== NULL
) {
814 return EFI_BAD_BUFFER_SIZE
;
817 mCallbackInfo
->Signature
= EFI_CALLBACK_INFO_SIGNATURE
;
818 mCallbackInfo
->ConfigAccess
.ExtractConfig
= SystemConfigExtractConfig
;
819 mCallbackInfo
->ConfigAccess
.RouteConfig
= SystemConfigRouteConfig
;
820 mCallbackInfo
->ConfigAccess
.Callback
= SystemConfigCallback
;
823 // Install Device Path Protocol and Config Access protocol to driver handle
824 // Install Platform Driver Override Protocol to driver handle
826 Status
= gBS
->InstallMultipleProtocolInterfaces (
827 &mCallbackInfo
->DriverHandle
,
828 &gEfiDevicePathProtocolGuid
,
829 &mHiiVendorDevicePath
,
830 &gEfiHiiConfigAccessProtocolGuid
,
831 &mCallbackInfo
->ConfigAccess
,
834 if (EFI_ERROR (Status
)) {
839 // Publish our HII data
841 mCallbackInfo
->RegisteredHandle
= HiiAddPackages (
843 mCallbackInfo
->DriverHandle
,
845 PlatformSetupDxeStrings
,
848 if (mCallbackInfo
->RegisteredHandle
== NULL
) {
849 Status
= EFI_OUT_OF_RESOURCES
;
853 mHiiHandle
= mCallbackInfo
->RegisteredHandle
;
856 // Locate ConfigRouting protocol
858 Status
= gBS
->LocateProtocol (
859 &gEfiHiiConfigRoutingProtocolGuid
,
861 (VOID
**) &mCallbackInfo
->HiiConfigRouting
863 if (EFI_ERROR (Status
)) {
868 // Clear all the globle variable
873 if (mCallbackInfo
->DriverHandle
!= NULL
) {
874 gBS
->UninstallMultipleProtocolInterfaces (
875 mCallbackInfo
->DriverHandle
,
876 &gEfiDevicePathProtocolGuid
,
877 &mHiiVendorDevicePath
,
878 &gEfiHiiConfigAccessProtocolGuid
,
879 &mCallbackInfo
->ConfigAccess
,
884 if (mCallbackInfo
->RegisteredHandle
!= NULL
) {
885 HiiRemovePackages (mCallbackInfo
->RegisteredHandle
);
888 if (mCallbackInfo
!= NULL
) {
889 FreePool (mCallbackInfo
);
896 Unload its installed protocol.
898 @param[in] ImageHandle Handle that identifies the image to be unloaded.
900 @retval EFI_SUCCESS The image has been unloaded.
904 PlatformSetupDxeUnload (
905 IN EFI_HANDLE ImageHandle
908 if (mCallbackInfo
!= NULL
) {
909 if (mCallbackInfo
->DriverHandle
!= NULL
) {
910 gBS
->UninstallMultipleProtocolInterfaces (
911 mCallbackInfo
->DriverHandle
,
912 &gEfiDevicePathProtocolGuid
,
913 &mHiiVendorDevicePath
,
914 &gEfiHiiConfigAccessProtocolGuid
,
915 &mCallbackInfo
->ConfigAccess
,
920 if (mCallbackInfo
->RegisteredHandle
!= NULL
) {
921 HiiRemovePackages (mCallbackInfo
->RegisteredHandle
);
924 FreePool (mCallbackInfo
);