grub_err_t grub_loader_boot (void) { grub_err_t err = GRUB_ERR_NONE; struct grub_preboot_t *cur; if (! grub_loader_loaded) return grub_error (GRUB_ERR_NO_KERNEL, "no loaded kernel"); if (grub_loader_noreturn) grub_machine_fini (); for (cur = preboots_head; cur; cur = cur->next) { err = cur->preboot_func (grub_loader_noreturn); if (err) { for (cur = cur->prev; cur; cur = cur->prev) cur->preboot_rest_func (); return err; } } err = (grub_loader_boot_func) (); for (cur = preboots_tail; cur; cur = cur->prev) if (! err) err = cur->preboot_rest_func (); else cur->preboot_rest_func (); return err; }
grub_err_t grub_loader_boot (void) { grub_err_t err = GRUB_ERR_NONE; struct grub_preboot *cur; if (! grub_loader_loaded) return grub_error (GRUB_ERR_NO_KERNEL, N_("you need to load the kernel first")); if (grub_loader_flags & GRUB_LOADER_FLAG_NORETURN) grub_machine_fini (); for (cur = preboots_head; cur; cur = cur->next) { err = cur->preboot_func (grub_loader_flags); if (err) { for (cur = cur->prev; cur; cur = cur->prev) cur->preboot_rest_func (); return err; } } err = (grub_loader_boot_func) (); for (cur = preboots_tail; cur; cur = cur->prev) if (! err) err = cur->preboot_rest_func (); else cur->preboot_rest_func (); return err; }
void grub_reboot (void) { grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); efi_call_4 (grub_efi_system_table->runtime_services->reset_system, GRUB_EFI_RESET_COLD, GRUB_EFI_SUCCESS, 0, NULL); for (;;) ; }
void grub_reboot (void) { grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); grub_uboot_reset (); while (1); }
void grub_halt (void) { grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); /* Just stop here */ while (1); }
void grub_halt (void) { grub_machine_fini (GRUB_LOADER_FLAG_NORETURN); #if !defined(__ia64__) && !defined(__arm__) && !defined(__aarch64__) grub_acpi_halt (); #endif efi_call_4 (grub_efi_system_table->runtime_services->reset_system, GRUB_EFI_RESET_SHUTDOWN, GRUB_EFI_SUCCESS, 0, NULL); while (1); }
int main (int argc, char *argv[]) { char *root_dev = 0; char *dir = DEFAULT_DIRECTORY; char *dev_map = DEFAULT_DEVICE_MAP; volatile int hold = 0; int opt; set_program_name (argv[0]); grub_util_init_nls (); while ((opt = getopt_long (argc, argv, "r:d:m:vH:hV", options, 0)) != -1) switch (opt) { case 'r': root_dev = optarg; break; case 'd': dir = optarg; break; case 'm': dev_map = optarg; break; case 'v': verbosity++; break; case 'H': hold = (optarg ? atoi (optarg) : -1); break; case 'h': return usage (0); case 'V': printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); return 0; default: return usage (1); } if (optind < argc) { fprintf (stderr, "Unknown extra argument `%s'.\n", argv[optind]); return usage (1); } /* Wait until the ARGS.HOLD variable is cleared by an attached debugger. */ if (hold && verbosity > 0) printf ("Run \"gdb %s %d\", and set ARGS.HOLD to zero.\n", program_name, (int) getpid ()); while (hold) { if (hold > 0) hold--; sleep (1); } signal (SIGINT, SIG_IGN); grub_console_init (); /* XXX: This is a bit unportable. */ grub_util_biosdisk_init (dev_map); grub_init_all (); /* Make sure that there is a root device. */ if (! root_dev) { char *device_name = grub_guess_root_device (dir); if (! device_name) grub_util_error ("cannot find a device for %s", dir); root_dev = grub_util_get_grub_dev (device_name); if (! root_dev) { grub_util_info ("guessing the root device failed, because of `%s'", grub_errmsg); grub_util_error ("cannot guess the root device. Specify the option `--root-device'"); } } dir = grub_get_prefix (dir); prefix = xmalloc (strlen (root_dev) + 2 + strlen (dir) + 1); sprintf (prefix, "(%s)%s", root_dev, dir); free (dir); /* Start GRUB! */ if (setjmp (main_env) == 0) grub_main (); grub_fini_all (); grub_machine_fini (); return 0; }
int main (int argc, char *argv[]) { char *dev_map = DEFAULT_DEVICE_MAP; volatile int hold = 0; int opt; set_program_name (argv[0]); dir = xstrdup (DEFAULT_DIRECTORY); while ((opt = getopt_long (argc, argv, "r:d:m:vH:hV", options, 0)) != -1) switch (opt) { case 'r': free (root_dev); root_dev = xstrdup (optarg); break; case 'd': free (dir); dir = xstrdup (optarg); break; case 'm': dev_map = optarg; break; case 'v': verbosity++; break; case 'H': hold = (optarg ? atoi (optarg) : -1); break; case 'h': return usage (0); case 'V': printf ("%s (%s) %s\n", program_name, PACKAGE_NAME, PACKAGE_VERSION); return 0; default: return usage (1); } if (optind < argc) { fprintf (stderr, "Unknown extra argument `%s'.\n", argv[optind]); return usage (1); } /* Wait until the ARGS.HOLD variable is cleared by an attached debugger. */ if (hold && verbosity > 0) printf ("Run \"gdb %s %d\", and set ARGS.HOLD to zero.\n", program_name, (int) getpid ()); while (hold) { if (hold > 0) hold--; sleep (1); } signal (SIGINT, SIG_IGN); grub_emu_init (); grub_console_init (); grub_host_init (); /* XXX: This is a bit unportable. */ grub_util_biosdisk_init (dev_map); grub_init_all (); grub_hostfs_init (); grub_emu_post_init (); /* Make sure that there is a root device. */ if (! root_dev) root_dev = grub_strdup ("host"); dir = xstrdup (dir); /* Start GRUB! */ if (setjmp (main_env) == 0) grub_main (); grub_fini_all (); grub_hostfs_fini (); grub_host_fini (); grub_machine_fini (); return 0; }