mirror of
https://github.com/CloverHackyColor/CloverBootloader.git
synced 2025-02-21 01:52:36 +01:00
repair clover entry
Signed-off-by: SergeySlice <sergey.slice@gmail.com>
This commit is contained in:
parent
4d3d93231b
commit
12aa924078
@ -749,7 +749,7 @@ UINTN REFIT_MAINMENU_SCREEN::RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABS
|
|||||||
|
|
||||||
while (!MenuExit) {
|
while (!MenuExit) {
|
||||||
GetAnime();
|
GetAnime();
|
||||||
DBG("AnimeRun=%d\n", (FilmC && FilmC->AnimeRun)?1:0);
|
// DBG("AnimeRun=%d\n", (FilmC && FilmC->AnimeRun)?1:0);
|
||||||
MenuExit = RunGenericMenu(&DefaultEntryIndex, &MainChosenEntry);
|
MenuExit = RunGenericMenu(&DefaultEntryIndex, &MainChosenEntry);
|
||||||
TimeoutSeconds = 0;
|
TimeoutSeconds = 0;
|
||||||
|
|
||||||
@ -766,7 +766,7 @@ UINTN REFIT_MAINMENU_SCREEN::RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABS
|
|||||||
|
|
||||||
if (MainChosenEntry->getLOADER_ENTRY()) {
|
if (MainChosenEntry->getLOADER_ENTRY()) {
|
||||||
GlobalConfig.OptionsBits |= EncodeOptions(MainChosenEntry->getLOADER_ENTRY()->LoadOptions);
|
GlobalConfig.OptionsBits |= EncodeOptions(MainChosenEntry->getLOADER_ENTRY()->LoadOptions);
|
||||||
// DBG("add OptionsBits = 0x%X\n", GlobalConfig.OptionsBits);
|
// DBG("add OptionsBits = 0x%X\n", GlobalConfig.OptionsBits);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MainChosenEntry->getREFIT_MENU_ITEM_BOOTNUM()) {
|
if (MainChosenEntry->getREFIT_MENU_ITEM_BOOTNUM()) {
|
||||||
@ -778,7 +778,7 @@ UINTN REFIT_MAINMENU_SCREEN::RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABS
|
|||||||
// Only for non-legacy entries, as LEGACY_ENTRY doesn't have Flags
|
// Only for non-legacy entries, as LEGACY_ENTRY doesn't have Flags
|
||||||
GlobalConfig.FlagsBits = MainChosenEntry->getLOADER_ENTRY()->Flags;
|
GlobalConfig.FlagsBits = MainChosenEntry->getLOADER_ENTRY()->Flags;
|
||||||
}
|
}
|
||||||
// DBG(" MainChosenEntry with FlagsBits = 0x%X\n", GlobalConfig.FlagsBits);
|
// DBG(" MainChosenEntry with FlagsBits = 0x%X\n", GlobalConfig.FlagsBits);
|
||||||
|
|
||||||
SubMenuExit = 0;
|
SubMenuExit = 0;
|
||||||
while (!SubMenuExit) {
|
while (!SubMenuExit) {
|
||||||
@ -794,7 +794,9 @@ UINTN REFIT_MAINMENU_SCREEN::RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABS
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (MainChosenEntry->getREFIT_MENU_ENTRY_CLOVER()) {
|
if (MainChosenEntry->getREFIT_MENU_ENTRY_CLOVER()) {
|
||||||
|
DBG("menu entry Clover\n");
|
||||||
MainChosenEntry->getREFIT_MENU_ENTRY_CLOVER()->LoadOptions = (((REFIT_MENU_ENTRY_CLOVER*)TempChosenEntry)->LoadOptions);
|
MainChosenEntry->getREFIT_MENU_ENTRY_CLOVER()->LoadOptions = (((REFIT_MENU_ENTRY_CLOVER*)TempChosenEntry)->LoadOptions);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SubMenuExit == MENU_EXIT_DETAILS) {
|
if (SubMenuExit == MENU_EXIT_DETAILS) {
|
||||||
@ -806,7 +808,7 @@ UINTN REFIT_MAINMENU_SCREEN::RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABS
|
|||||||
if (SubMenuExit == MENU_EXIT_ENTER && MainChosenEntry->getLOADER_ENTRY() && TempChosenEntry->getLOADER_ENTRY()) {
|
if (SubMenuExit == MENU_EXIT_ENTER && MainChosenEntry->getLOADER_ENTRY() && TempChosenEntry->getLOADER_ENTRY()) {
|
||||||
// Only for non-legacy entries, as LEGACY_ENTRY doesn't have Flags/Options
|
// Only for non-legacy entries, as LEGACY_ENTRY doesn't have Flags/Options
|
||||||
MainChosenEntry->getLOADER_ENTRY()->Flags = TempChosenEntry->getLOADER_ENTRY()->Flags;
|
MainChosenEntry->getLOADER_ENTRY()->Flags = TempChosenEntry->getLOADER_ENTRY()->Flags;
|
||||||
DBG(" get MainChosenEntry FlagsBits = 0x%X\n", ((LOADER_ENTRY*)MainChosenEntry)->Flags);
|
// DBG(" get MainChosenEntry FlagsBits = 0x%X\n", ((LOADER_ENTRY*)MainChosenEntry)->Flags);
|
||||||
if (OSFLAG_ISUNSET(TempChosenEntry->getLOADER_ENTRY()->Flags, OSFLAG_NODEFAULTARGS)) {
|
if (OSFLAG_ISUNSET(TempChosenEntry->getLOADER_ENTRY()->Flags, OSFLAG_NODEFAULTARGS)) {
|
||||||
DecodeOptions(TempChosenEntry->getLOADER_ENTRY());
|
DecodeOptions(TempChosenEntry->getLOADER_ENTRY());
|
||||||
// DBG("get OptionsBits = 0x%X\n", GlobalConfig.OptionsBits);
|
// DBG("get OptionsBits = 0x%X\n", GlobalConfig.OptionsBits);
|
||||||
@ -822,7 +824,7 @@ UINTN REFIT_MAINMENU_SCREEN::RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABS
|
|||||||
} else {
|
} else {
|
||||||
gSettings.Boot.BootArgs.setEmpty();
|
gSettings.Boot.BootArgs.setEmpty();
|
||||||
}
|
}
|
||||||
DBG(" boot with args: %s\n", gSettings.Boot.BootArgs.c_str());
|
// DBG(" boot with args: %s\n", gSettings.Boot.BootArgs.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
//---- Details submenu (kexts disabling etc)
|
//---- Details submenu (kexts disabling etc)
|
||||||
@ -840,7 +842,7 @@ UINTN REFIT_MAINMENU_SCREEN::RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABS
|
|||||||
NextMenuExit = MENU_EXIT_ENTER;
|
NextMenuExit = MENU_EXIT_ENTER;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DBG(" get NextChosenEntry FlagsBits = 0x%X\n", ((LOADER_ENTRY*)NextChosenEntry)->Flags);
|
// DBG(" get NextChosenEntry FlagsBits = 0x%X\n", ((LOADER_ENTRY*)NextChosenEntry)->Flags);
|
||||||
//---- Details submenu (kexts disabling etc) second level
|
//---- Details submenu (kexts disabling etc) second level
|
||||||
if (NextMenuExit == MENU_EXIT_ENTER /*|| MenuExit == MENU_EXIT_DETAILS*/) {
|
if (NextMenuExit == MENU_EXIT_ENTER /*|| MenuExit == MENU_EXIT_DETAILS*/) {
|
||||||
if (NextChosenEntry->SubScreen != NULL) {
|
if (NextChosenEntry->SubScreen != NULL) {
|
||||||
@ -857,7 +859,7 @@ UINTN REFIT_MAINMENU_SCREEN::RunMainMenu(IN INTN DefaultSelection, OUT REFIT_ABS
|
|||||||
NextMenuExit = 0;
|
NextMenuExit = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
DBG(" get DeepChosenEntry FlagsBits = 0x%X\n", ((LOADER_ENTRY*)DeepChosenEntry)->Flags);
|
// DBG(" get DeepChosenEntry FlagsBits = 0x%X\n", ((LOADER_ENTRY*)DeepChosenEntry)->Flags);
|
||||||
} //while(!DeepMenuExit)
|
} //while(!DeepMenuExit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3317,7 +3317,7 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
}
|
}
|
||||||
MenuExit = MainMenu.RunMainMenu(DefaultIndex, &ChosenEntry);
|
MenuExit = MainMenu.RunMainMenu(DefaultIndex, &ChosenEntry);
|
||||||
}
|
}
|
||||||
DBG("exit from MainMenu %llu\n", MenuExit); //MENU_EXIT_ENTER=(1) MENU_EXIT_DETAILS=3
|
// DBG("exit from MainMenu %llu\n", MenuExit); //MENU_EXIT_ENTER=(1) MENU_EXIT_DETAILS=3
|
||||||
// disable default boot - have sense only in the first run
|
// disable default boot - have sense only in the first run
|
||||||
gSettings.Boot.Timeout = -1;
|
gSettings.Boot.Timeout = -1;
|
||||||
if ((DefaultEntry != NULL) && (MenuExit == MENU_EXIT_TIMEOUT)) {
|
if ((DefaultEntry != NULL) && (MenuExit == MENU_EXIT_TIMEOUT)) {
|
||||||
@ -3426,7 +3426,6 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
HelpRefit();
|
HelpRefit();
|
||||||
break;
|
break;
|
||||||
*/
|
*/
|
||||||
DBG("1\n");
|
|
||||||
if ( ChosenEntry->getLOADER_ENTRY() ) { // Boot OS via .EFI loader
|
if ( ChosenEntry->getLOADER_ENTRY() ) { // Boot OS via .EFI loader
|
||||||
SetBootCurrent(ChosenEntry->getLOADER_ENTRY());
|
SetBootCurrent(ChosenEntry->getLOADER_ENTRY());
|
||||||
ChosenEntry->StartLoader();
|
ChosenEntry->StartLoader();
|
||||||
@ -3436,7 +3435,6 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
ReinitDesktop = false;
|
ReinitDesktop = false;
|
||||||
AfterTool = true;
|
AfterTool = true;
|
||||||
}
|
}
|
||||||
DBG("2\n");
|
|
||||||
if ( ChosenEntry->getLEGACY_ENTRY() ) { // Boot legacy OS
|
if ( ChosenEntry->getLEGACY_ENTRY() ) { // Boot legacy OS
|
||||||
if (StrCmp(gST->FirmwareVendor, L"Phoenix Technologies Ltd.") == 0 &&
|
if (StrCmp(gST->FirmwareVendor, L"Phoenix Technologies Ltd.") == 0 &&
|
||||||
gST->Hdr.Revision >> 16 == 2 && (gST->Hdr.Revision & ((1 << 16) - 1)) == 0){
|
gST->Hdr.Revision >> 16 == 2 && (gST->Hdr.Revision & ((1 << 16) - 1)) == 0){
|
||||||
@ -3452,7 +3450,6 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
ChosenEntry->StartLegacy();
|
ChosenEntry->StartLegacy();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DBG("3\n");
|
|
||||||
if ( ChosenEntry->getREFIT_MENU_ENTRY_LOADER_TOOL() ) { // Start a EFI tool
|
if ( ChosenEntry->getREFIT_MENU_ENTRY_LOADER_TOOL() ) { // Start a EFI tool
|
||||||
ChosenEntry->StartTool();
|
ChosenEntry->StartTool();
|
||||||
TerminateScreen(); //does not happen
|
TerminateScreen(); //does not happen
|
||||||
@ -3462,7 +3459,6 @@ RefitMain (IN EFI_HANDLE ImageHandle,
|
|||||||
MainLoopRunning = false;
|
MainLoopRunning = false;
|
||||||
AfterTool = true;
|
AfterTool = true;
|
||||||
}
|
}
|
||||||
DBG("4\n");
|
|
||||||
#ifdef ENABLE_SECURE_BOOT
|
#ifdef ENABLE_SECURE_BOOT
|
||||||
log_technical_bug("not done yet");
|
log_technical_bug("not done yet");
|
||||||
// if ( ChosenEntry->getREFIT_MENU_ENTRY_SECURE_BOOT() ) { // Try to enable secure boot
|
// if ( ChosenEntry->getREFIT_MENU_ENTRY_SECURE_BOOT() ) { // Try to enable secure boot
|
||||||
@ -3476,11 +3472,13 @@ log_technical_bug("not done yet");
|
|||||||
// AfterTool = true;
|
// AfterTool = true;
|
||||||
// }
|
// }
|
||||||
#endif // ENABLE_SECURE_BOOT
|
#endif // ENABLE_SECURE_BOOT
|
||||||
DBG("come to Clover entry\n");
|
// DBG("come to Clover entry with letter %c\n", ChosenEntry->ShortcutLetter);
|
||||||
if ( ChosenEntry->getREFIT_MENU_ENTRY_CLOVER() ) { // Clover options
|
|
||||||
DBG("enter Clover entry\n");
|
|
||||||
REFIT_MENU_ENTRY_CLOVER* LoaderEntry = ChosenEntry->getREFIT_MENU_ENTRY_CLOVER();
|
REFIT_MENU_ENTRY_CLOVER* LoaderEntry = ChosenEntry->getREFIT_MENU_ENTRY_CLOVER();
|
||||||
|
if ((ChosenEntry->ShortcutLetter == 'C') || LoaderEntry != NULL ) { // Clover options
|
||||||
|
// DBG("enter Clover entry\n");
|
||||||
|
|
||||||
if (LoaderEntry->LoadOptions.notEmpty()) {
|
if (LoaderEntry->LoadOptions.notEmpty()) {
|
||||||
|
|
||||||
// we are uninstalling in case user selected Clover Options and EmuVar is installed
|
// we are uninstalling in case user selected Clover Options and EmuVar is installed
|
||||||
// because adding bios boot option requires access to real nvram
|
// because adding bios boot option requires access to real nvram
|
||||||
//Slice: sure?
|
//Slice: sure?
|
||||||
@ -3488,9 +3486,9 @@ log_technical_bug("not done yet");
|
|||||||
gEmuVariableControl->UninstallEmulation(gEmuVariableControl);
|
gEmuVariableControl->UninstallEmulation(gEmuVariableControl);
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
DBG(" Clover entry not empty\n");
|
// DBG(" Clover entry not empty\n");
|
||||||
if ( LoaderEntry->LoadOptions.contains(L"BO-ADD") ) {
|
if ( LoaderEntry->LoadOptions.contains(L"BO-ADD") ) {
|
||||||
DBG(" BO-ADD");
|
// DBG(" BO-ADD");
|
||||||
XStringW Description;
|
XStringW Description;
|
||||||
CONST CHAR16 *LoaderName;
|
CONST CHAR16 *LoaderName;
|
||||||
INTN EntryIndex, NameSize, Name2Size;
|
INTN EntryIndex, NameSize, Name2Size;
|
||||||
@ -3498,6 +3496,7 @@ log_technical_bug("not done yet");
|
|||||||
UINT8 *OptionalData;
|
UINT8 *OptionalData;
|
||||||
UINTN OptionalDataSize;
|
UINTN OptionalDataSize;
|
||||||
UINTN BootNum;
|
UINTN BootNum;
|
||||||
|
// EFI_HANDLE UsedHandle = 0;
|
||||||
|
|
||||||
PrintBootOptions(false);
|
PrintBootOptions(false);
|
||||||
|
|
||||||
@ -3538,7 +3537,7 @@ log_technical_bug("not done yet");
|
|||||||
if (Name2Size != 0) {
|
if (Name2Size != 0) {
|
||||||
CopyMem(OptionalData + 6 + NameSize, LoaderName, Name2Size);
|
CopyMem(OptionalData + 6 + NameSize, LoaderName, Name2Size);
|
||||||
}
|
}
|
||||||
|
// UsedHandle = LoaderEntry->Volume->DeviceHandle;
|
||||||
Status = AddBootOptionForFile (
|
Status = AddBootOptionForFile (
|
||||||
LoaderEntry->Volume->DeviceHandle,
|
LoaderEntry->Volume->DeviceHandle,
|
||||||
LoaderEntry->LoaderPath,
|
LoaderEntry->LoaderPath,
|
||||||
@ -3554,6 +3553,7 @@ log_technical_bug("not done yet");
|
|||||||
Entry->BootNum = BootNum;
|
Entry->BootNum = BootNum;
|
||||||
}
|
}
|
||||||
FreePool(OptionalData);
|
FreePool(OptionalData);
|
||||||
|
break;
|
||||||
} //for (EntryIndex
|
} //for (EntryIndex
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user