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/nvramtool.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'util/nvramtool/nvramtool.c') diff --git a/util/nvramtool/nvramtool.c b/util/nvramtool/nvramtool.c index 98de6dc929..1832477139 100644 --- a/util/nvramtool/nvramtool.c +++ b/util/nvramtool/nvramtool.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * nvramtool.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -477,6 +476,11 @@ static void list_param_enums (const char name[]) e->length); break; + case CMOS_ENTRY_STRING: + printf("Parameter %s requires a %u-byte string.\n", name, + e->length / 8); + break; + case CMOS_ENTRY_RESERVED: printf("Parameter %s is reserved.\n", name); break; @@ -570,7 +574,7 @@ static void set_one_param (const char name[], const char value[]) /* write the value to nonvolatile RAM */ set_iopl(3); - cmos_write(e->bit, e->length, n); + cmos_write(e, n); cmos_checksum_write(cmos_checksum_compute()); set_iopl(0); return; @@ -674,7 +678,7 @@ static int list_cmos_entry (const cmos_entry_t *e, int show_name) /* read the value from CMOS */ set_iopl(3); - value = cmos_read(e->bit, e->length); + value = cmos_read(e); set_iopl(0); /* display the value */ @@ -703,6 +707,16 @@ static int list_cmos_entry (const cmos_entry_t *e, int show_name) break; + case CMOS_ENTRY_STRING: + if (show_name) + printf("%s = %s\n", e->name, (char *)(unsigned long)value); + else + printf("%s\n", (char *)(unsigned long)value); + + free((void *)(unsigned long)value); + + break; + case CMOS_ENTRY_RESERVED: default: BUG(); -- cgit v1.2.3