[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[2641] 2009-10-16 Vladimir Serbinenko <address@hidden>
From: |
Vladimir Serbinenko |
Subject: |
[2641] 2009-10-16 Vladimir Serbinenko <address@hidden> |
Date: |
Fri, 16 Oct 2009 20:21:15 +0000 |
Revision: 2641
http://svn.sv.gnu.org/viewvc/?view=rev&root=grub&revision=2641
Author: phcoder
Date: 2009-10-16 20:21:12 +0000 (Fri, 16 Oct 2009)
Log Message:
-----------
2009-10-16 Vladimir Serbinenko <address@hidden>
Let user specify OpenBSD root device.
* loader/i386/bsd.c (openbsd_root): New variable.
(openbsd_opts): New option 'root'.
(OPENBSD_ROOT_ARG): New macro.
(grub_openbsd_boot): Use 'openbsd_root'.
(grub_cmd_openbsd): Fill 'openbsd_root'.
Modified Paths:
--------------
trunk/grub2/ChangeLog
trunk/grub2/loader/i386/bsd.c
Modified: trunk/grub2/ChangeLog
===================================================================
--- trunk/grub2/ChangeLog 2009-10-16 18:46:51 UTC (rev 2640)
+++ trunk/grub2/ChangeLog 2009-10-16 20:21:12 UTC (rev 2641)
@@ -1,3 +1,13 @@
+2009-10-16 Vladimir Serbinenko <address@hidden>
+
+ Let user specify OpenBSD root device.
+
+ * loader/i386/bsd.c (openbsd_root): New variable.
+ (openbsd_opts): New option 'root'.
+ (OPENBSD_ROOT_ARG): New macro.
+ (grub_openbsd_boot): Use 'openbsd_root'.
+ (grub_cmd_openbsd): Fill 'openbsd_root'.
+
2009-10-16 Robert Millan <address@hidden>
* NEWS: Misc adjustments.
Modified: trunk/grub2/loader/i386/bsd.c
===================================================================
--- trunk/grub2/loader/i386/bsd.c 2009-10-16 18:46:51 UTC (rev 2640)
+++ trunk/grub2/loader/i386/bsd.c 2009-10-16 20:21:12 UTC (rev 2641)
@@ -58,6 +58,7 @@
static grub_uint32_t mod_buf_len, mod_buf_max, kern_end_mdofs;
static int is_elf_kernel, is_64bit;
static char *netbsd_root = NULL;
+static grub_uint32_t openbsd_root;
static const struct grub_arg_option freebsd_opts[] =
{
@@ -94,6 +95,7 @@
{"config", 'c', 0, "Change configured devices.", 0, 0},
{"single", 's', 0, "Boot into single mode.", 0, 0},
{"kdb", 'd', 0, "Enter in KDB on boot.", 0, 0},
+ {"root", 'r', 0, "Set root device.", "wdXY", ARG_TYPE_STRING},
{0, 0, 0, 0, 0, 0}
};
@@ -103,6 +105,8 @@
OPENBSD_RB_SINGLE, OPENBSD_RB_KDB, 0
};
+#define OPENBSD_ROOT_ARG (ARRAY_SIZE (openbsd_flags) - 1)
+
static const struct grub_arg_option netbsd_opts[] =
{
{"no-smp", '1', 0, "Disable SMP.", 0, 0},
@@ -565,7 +569,6 @@
char *buf = (char *) GRUB_BSD_TEMP_BUFFER;
struct grub_openbsd_bios_mmap *pm;
struct grub_openbsd_bootargs *pa;
- grub_uint32_t bootdev, biosdev, unit, slice, part;
auto int NESTED_FUNC_ATTR hook (grub_uint64_t, grub_uint64_t, grub_uint32_t);
int NESTED_FUNC_ATTR hook (grub_uint64_t addr, grub_uint64_t size,
grub_uint32_t type)
@@ -614,11 +617,7 @@
pa->ba_type = OPENBSD_BOOTARG_END;
pa++;
- grub_bsd_get_device (&biosdev, &unit, &slice, &part);
- bootdev = (OPENBSD_B_DEVMAGIC + (unit << OPENBSD_B_UNITSHIFT) +
- (part << OPENBSD_B_PARTSHIFT));
-
- grub_unix_real_boot (entry, bootflags, bootdev, OPENBSD_BOOTARG_APIVER,
+ grub_unix_real_boot (entry, bootflags, openbsd_root, OPENBSD_BOOTARG_APIVER,
0, (grub_uint32_t) (grub_mmap_get_upper () >> 10),
(grub_uint32_t) (grub_mmap_get_lower () >> 10),
(char *) pa - buf, buf);
@@ -1015,11 +1014,39 @@
static grub_err_t
grub_cmd_openbsd (grub_extcmd_t cmd, int argc, char *argv[])
{
+ grub_uint32_t bootdev;
+
kernel_type = KERNEL_TYPE_OPENBSD;
bootflags = grub_bsd_parse_flags (cmd->state, openbsd_flags);
+ if (cmd->state[OPENBSD_ROOT_ARG].set)
+ {
+ const char *arg = cmd->state[OPENBSD_ROOT_ARG].arg;
+ int unit, part;
+ if (*(arg++) != 'w' || *(arg++) != 'd')
+ return grub_error (GRUB_ERR_BAD_ARGUMENT,
+ "Only device specifications of form "
+ "wd<number><lowercase letter> are supported.");
+
+ unit = grub_strtoul (arg, (char **) &arg, 10);
+ if (! (arg && *arg >= 'a' && *arg <= 'z'))
+ return grub_error (GRUB_ERR_BAD_ARGUMENT,
+ "Only device specifications of form "
+ "wd<number><lowercase letter> are supported.");
+
+ part = *arg - 'a';
+
+ bootdev = (OPENBSD_B_DEVMAGIC + (unit << OPENBSD_B_UNITSHIFT) +
+ (part << OPENBSD_B_PARTSHIFT));
+ }
+ else
+ bootdev = 0;
+
if (grub_bsd_load (argc, argv) == GRUB_ERR_NONE)
- grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 1);
+ {
+ grub_loader_set (grub_openbsd_boot, grub_bsd_unload, 1);
+ openbsd_root = bootdev;
+ }
return grub_errno;
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [2641] 2009-10-16 Vladimir Serbinenko <address@hidden>,
Vladimir Serbinenko <=