From a67aab70834fe28c34d4a1c9203f6f1b8462cc38 Mon Sep 17 00:00:00 2001 From: Stefan Reinauer Date: Sat, 27 Sep 2008 10:08:28 +0000 Subject: 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 Acked-by: Joseph Smith git-svn-id: svn://svn.coreboot.org/coreboot/trunk@3613 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- util/nvramtool/cmos_ops.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) (limited to 'util/nvramtool/cmos_ops.c') diff --git a/util/nvramtool/cmos_ops.c b/util/nvramtool/cmos_ops.c index 170e944678..20b1093b7e 100644 --- a/util/nvramtool/cmos_ops.c +++ b/util/nvramtool/cmos_ops.c @@ -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(); } -- cgit v1.2.3