1 /* 2 * Copyright 2004-2010, Axel Dörfler, axeld@pinc-software.de. 3 * Distributed under the terms of the MIT License. 4 */ 5 6 7 #include "smp.h" 8 #include "video.h" 9 10 #include <boot/menu.h> 11 #include <boot/platform/generic/text_menu.h> 12 #include <safemode.h> 13 14 15 static void 16 warm_reboot(char key) 17 { 18 asm(" cli ;" 19 " movl $0x11, %eax ;" 20 " movl %eax, %cr0 ;" 21 " movl $0x0, %eax ;" 22 " movl %eax, %cr3 ;" 23 " movl $0x200, %eax ;" 24 " movl %eax, %cr4 ;" 25 " lidt saved_idt ;" 26 " call switch_to_real_mode ;" 27 " int $0x19 ;" 28 " .p2align 4 ;" 29 "saved_idt: ;" 30 " .short 0x7ff ;" 31 " .long 0x0 ;" 32 " .long 0x0 ;"); 33 } 34 35 36 void 37 platform_add_menus(Menu* menu) 38 { 39 MenuItem* item; 40 41 switch (menu->Type()) { 42 case MAIN_MENU: 43 item = new(std::nothrow) MenuItem("Select fail-safe video mode", 44 video_mode_menu()); 45 if (item != NULL) { 46 menu->AddItem(item); 47 item->SetTarget(video_mode_hook); 48 item->SetShortcut('v'); 49 } 50 51 menu->AddShortcut('w', warm_reboot); 52 break; 53 54 case SAFE_MODE_MENU: 55 item = new(std::nothrow) MenuItem("Use fail-safe video mode"); 56 if (item != NULL) { 57 menu->AddItem(item); 58 item->SetType(MENU_ITEM_MARKABLE); 59 item->SetData(B_SAFEMODE_FAIL_SAFE_VIDEO_MODE); 60 item->SetHelpText("The system will use VESA mode " 61 "and won't try to use any video graphics drivers."); 62 } 63 64 smp_add_safemode_menus(menu); 65 66 item = new(std::nothrow) MenuItem("Don't call the BIOS"); 67 if (item != NULL) { 68 menu->AddItem(item); 69 item->SetHelpText("Stops the system from calling BIOS " 70 "functions."); 71 item->SetType(MENU_ITEM_MARKABLE); 72 } 73 74 item = new(std::nothrow) MenuItem("Disable APM"); 75 if (item != NULL) { 76 menu->AddItem(item); 77 item->SetType(MENU_ITEM_MARKABLE); 78 item->SetData(B_SAFEMODE_DISABLE_APM); 79 item->SetHelpText("Disables Advanced Power Management hardware " 80 "support, overriding the APM setting in the kernel " 81 "settings file."); 82 } 83 84 item = new(std::nothrow) MenuItem("Disable ACPI"); 85 if (item != NULL) { 86 menu->AddItem(item); 87 item->SetType(MENU_ITEM_MARKABLE); 88 item->SetData(B_SAFEMODE_DISABLE_ACPI); 89 item->SetHelpText("Disables Advanced Configuration and Power " 90 "Interface hardware support, overriding the ACPI setting " 91 "in the kernel settings file."); 92 } 93 break; 94 95 default: 96 break; 97 } 98 } 99 100 101 void 102 platform_update_menu_item(Menu* menu, MenuItem* item) 103 { 104 platform_generic_update_text_menu_item(menu, item); 105 } 106 107 108 void 109 platform_run_menu(Menu* menu) 110 { 111 platform_generic_run_text_menu(menu); 112 } 113 114