Add string support to nvramtool.
To add a string to your cmos.layout, you need to specify type 's': #start len type unused name 416 512 s 0 boot_devices With this patch you can do $ nvramtool -w boot_devices="(hd0,0);(hd2,1);(hd3)" And FILO will attempt to load a menu.lst from any of these devices in that order. The patch is not exactly pretty, but a cleaner solution might have resulted in a complete rewrite of the tool, which I did not want. Signed-off-by: Stefan Reinauer <stepan@coresystems.de> Acked-by: Joseph Smith <joe@settoplinux.org> git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3613 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
This commit is contained in:
committed by
Stefan Reinauer
parent
830b17d3e3
commit
a67aab7083
@@ -1,6 +1,5 @@
|
||||
/*****************************************************************************\
|
||||
* cmos_ops.c
|
||||
* $Id$
|
||||
*****************************************************************************
|
||||
* Copyright (C) 2002-2005 The Regents of the University of California.
|
||||
* Produced at the Lawrence Livermore National Laboratory.
|
||||
@@ -47,7 +46,7 @@ static int prepare_cmos_op_common (const cmos_entry_t *e)
|
||||
/* Access to reserved parameters is not permitted. */
|
||||
return CMOS_OP_RESERVED;
|
||||
|
||||
if ((result = verify_cmos_op(e->bit, e->length)) != OK)
|
||||
if ((result = verify_cmos_op(e->bit, e->length, e->config)) != OK)
|
||||
return result;
|
||||
|
||||
assert(e->length > 0);
|
||||
@@ -70,6 +69,7 @@ int prepare_cmos_read (const cmos_entry_t *e)
|
||||
switch (e->config)
|
||||
{ case CMOS_ENTRY_ENUM:
|
||||
case CMOS_ENTRY_HEX:
|
||||
case CMOS_ENTRY_STRING:
|
||||
break;
|
||||
|
||||
default:
|
||||
@@ -92,6 +92,7 @@ int prepare_cmos_write (const cmos_entry_t *e, const char value_str[],
|
||||
{ const cmos_enum_t *q;
|
||||
unsigned long long out;
|
||||
const char *p;
|
||||
char *memory;
|
||||
int negative, result, found_one;
|
||||
|
||||
if ((result = prepare_cmos_op_common(e)) != OK)
|
||||
@@ -139,6 +140,15 @@ int prepare_cmos_write (const cmos_entry_t *e, const char value_str[],
|
||||
|
||||
break;
|
||||
|
||||
case CMOS_ENTRY_STRING:
|
||||
if (e->length < (8 * strlen(value_str)))
|
||||
return CMOS_OP_VALUE_TOO_WIDE;
|
||||
memory = malloc(e->length / 8);
|
||||
memset(memory, 0, e->length / 8);
|
||||
strcpy(memory, value_str);
|
||||
out = (unsigned long)memory;
|
||||
break;
|
||||
|
||||
default:
|
||||
BUG();
|
||||
}
|
||||
|
Reference in New Issue
Block a user