1/* 2 * Copyright 2009, François Revol, revol@free.fr. 3 * Distributed under the terms of the MIT License. 4 */ 5 6#include "multiboot.h" 7 8#include <KernelExport.h> 9#include <string.h> 10#include <boot/stage2_args.h> 11 12extern struct multiboot_info *gMultiBootInfo; 13 14// load_driver_settings.h 15extern status_t add_safe_mode_settings(char *buffer); 16 17void 18dump_multiboot_info(void) 19{ 20 if (!gMultiBootInfo) 21 return; 22 dprintf("Found MultiBoot Info at %p\n", gMultiBootInfo); 23 dprintf(" flags: 0x%lx\n", gMultiBootInfo->flags); 24 25 if (gMultiBootInfo->flags & MULTIBOOT_INFO_BOOTDEV) 26 dprintf(" boot_device: 0x%lx\n", gMultiBootInfo->boot_device); 27 28 if (gMultiBootInfo->flags & MULTIBOOT_INFO_CMDLINE 29 && gMultiBootInfo->cmdline) 30 dprintf(" cmdline: '%s'\n", (char *)gMultiBootInfo->cmdline); 31 32 if (gMultiBootInfo->boot_loader_name) 33 dprintf(" boot_loader_name: '%s'\n", 34 (char *)gMultiBootInfo->boot_loader_name); 35} 36 37 38status_t 39parse_multiboot_commandline(stage2_args *args) 40{ 41 static const char *sArgs[] = { NULL, NULL }; 42 43 if (!gMultiBootInfo || !(gMultiBootInfo->flags & MULTIBOOT_INFO_CMDLINE) 44 || !gMultiBootInfo->cmdline) 45 return B_ENTRY_NOT_FOUND; 46 47 const char *cmdline = (const char *)gMultiBootInfo->cmdline; 48 49 // skip kernel (bootloader) name 50 cmdline = strchr(cmdline, ' '); 51 if (!cmdline) 52 return B_ENTRY_NOT_FOUND; 53 cmdline++; 54 if (*cmdline == '\0') 55 return B_ENTRY_NOT_FOUND; 56 57 sArgs[0] = cmdline; 58 args->arguments = sArgs; 59 args->arguments_count = 1; 60 61 return B_OK; 62} 63