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/ChangeLog | 8 ++++ util/nvramtool/DISCLAIMER | 4 +- util/nvramtool/Makefile | 55 +++++++++++++++++---------- util/nvramtool/README | 2 - util/nvramtool/cmos_lowlevel.c | 73 ++++++++++++++++++++++++++---------- util/nvramtool/cmos_lowlevel.h | 8 ++-- util/nvramtool/cmos_ops.c | 14 ++++++- util/nvramtool/cmos_ops.h | 1 - util/nvramtool/common.c | 3 +- util/nvramtool/common.h | 1 - util/nvramtool/compute_ip_checksum.c | 1 - util/nvramtool/hexdump.c | 1 - util/nvramtool/hexdump.h | 1 - util/nvramtool/input_file.c | 10 +++-- util/nvramtool/input_file.h | 3 +- util/nvramtool/ip_checksum.h | 1 - util/nvramtool/layout.c | 1 - util/nvramtool/layout.h | 2 +- util/nvramtool/layout_file.c | 8 +++- util/nvramtool/layout_file.h | 1 - util/nvramtool/lbtable.c | 5 ++- util/nvramtool/lbtable.h | 1 - util/nvramtool/nvramtool.1 | 5 +-- util/nvramtool/nvramtool.c | 20 ++++++++-- util/nvramtool/nvramtool.spec | 4 +- util/nvramtool/opts.c | 1 - util/nvramtool/opts.h | 1 - util/nvramtool/reg_expr.c | 1 - util/nvramtool/reg_expr.h | 1 - 29 files changed, 157 insertions(+), 80 deletions(-) (limited to 'util/nvramtool') diff --git a/util/nvramtool/ChangeLog b/util/nvramtool/ChangeLog index 57d879edb2..46564ec36f 100644 --- a/util/nvramtool/ChangeLog +++ b/util/nvramtool/ChangeLog @@ -1,3 +1,11 @@ +Tue Sep 23 19:14:27 CEST 2008 Stefan Reinauer (stepan@coresystems.de) + + Version 2.1 + + * Fix a number of off by one errors when accessing arrays + + * Add support for reading/writing strings from/to CMOS. + Mon Jan 23 16:00:00 PST 2006 David S. Peterson (dsp@llnl.gov) Version 2.0.1 diff --git a/util/nvramtool/DISCLAIMER b/util/nvramtool/DISCLAIMER index 28a447581c..dba8075767 100644 --- a/util/nvramtool/DISCLAIMER +++ b/util/nvramtool/DISCLAIMER @@ -1,8 +1,8 @@ #################################################################### -# $Id$ -#################################################################### Copyright (C) 2002 The Regents of the University of California. +Copyright (C) 2008 coresystems GmbH + Produced at the Lawrence Livermore National Laboratory. Written by David S. Peterson . UCRL-CODE-2003-012 diff --git a/util/nvramtool/Makefile b/util/nvramtool/Makefile index 5d9ddc0619..6feea95eae 100644 --- a/util/nvramtool/Makefile +++ b/util/nvramtool/Makefile @@ -1,28 +1,43 @@ -# $Id$ +# +# Makefile for nvram utility +# +# (C) 2005-2008 coresystems GmbH +# written by Stefan Reinauer +# -PROJECT = nvramtool -CC = gcc -CFLAGS = -O2 -W -Wall -LDFLAGS = -OBJS = common.o compute_ip_checksum.o hexdump.o cmos_lowlevel.o \ - reg_expr.o layout.o layout_file.o lbtable.o cmos_ops.o input_file.o \ - opts.o nvramtool.o -HEADERS = common.h ip_checksum.h coreboot_tables.h hexdump.h \ - cmos_lowlevel.h reg_expr.h layout.h layout_file.h lbtable.h \ - cmos_ops.h input_file.h opts.h +PROGRAM = nvramtool -all: nvramtool man +CC = gcc +STRIP = strip +INSTALL = /usr/bin/install +PREFIX = /usr/local +CFLAGS = -O2 -g -Wall -W +#CFLAGS = -Os -Wall -nvramtool: $(OBJS) - $(CC) $(LDFLAGS) -o $@ $(OBJS) +OBJS = cmos_lowlevel.o cmos_ops.o common.o compute_ip_checksum.o \ + hexdump.o input_file.o layout.o layout_file.o lbtable.o \ + nvramtool.o opts.o reg_expr.o -man: nvramtool.1.gz +all: dep $(PROGRAM) -$(OBJS): $(HEADERS) - -nvramtool.1.gz: nvramtool.1 - gzip -c --best nvramtool.1 > nvramtool.1.gz +$(PROGRAM): $(OBJS) + $(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS) + $(STRIP) $(STRIP_ARGS) $(PROGRAM) clean: - rm -f *.o nvramtool nvramtool.1.gz + rm -f $(PROGRAM) *.o + +distclean: clean + rm -f .dependencies + +dep: + @$(CC) -MM *.c > .dependencies + +install: $(PROGRAM) + $(INSTALL) $(PROGRAM) $(PREFIX)/sbin + mkdir -p $(PREFIX)/share/man/man1 + $(INSTALL) $(PROGRAM).1 $(PREFIX)/share/man/man1 + +.PHONY: all clean distclean dep +-include .dependencies diff --git a/util/nvramtool/README b/util/nvramtool/README index 976bcb02a3..183b84c042 100644 --- a/util/nvramtool/README +++ b/util/nvramtool/README @@ -1,5 +1,3 @@ -$Id$ - Summary of Operation -------------------- nvramtool is a utility for reading/writing coreboot parameters and diff --git a/util/nvramtool/cmos_lowlevel.c b/util/nvramtool/cmos_lowlevel.c index ab116797a2..9ad6891d0c 100644 --- a/util/nvramtool/cmos_lowlevel.c +++ b/util/nvramtool/cmos_lowlevel.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * cmos_lowlevel.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -70,7 +69,7 @@ static inline unsigned char get_bits (unsigned long long value, unsigned bit, ****************************************************************************/ static inline void put_bits (unsigned char value, unsigned bit, unsigned nr_bits, unsigned long long *result) - { *result += (value & ((unsigned char) ((1 << nr_bits) - 1))) << bit; } + { *result += ((unsigned long long)(value & ((unsigned char) ((1 << nr_bits) - 1)))) << bit; } /**************************************************************************** * cmos_read @@ -79,21 +78,39 @@ static inline void put_bits (unsigned char value, unsigned bit, * and return this value. The I/O privilege level of the currently executing * process must be set appropriately. ****************************************************************************/ -unsigned long long cmos_read (unsigned bit, unsigned length) +unsigned long long cmos_read (const cmos_entry_t *e) { cmos_bit_op_location_t where; + unsigned bit = e->bit, length=e->length; unsigned next_bit, bits_left, nr_bits; - unsigned long long result; + unsigned long long result = 0; unsigned char value; - assert(!verify_cmos_op(bit, length)); + assert(!verify_cmos_op(bit, length, e->config)); result = 0; - for (next_bit = 0, bits_left = length; - bits_left; - next_bit += nr_bits, bits_left -= nr_bits) - { nr_bits = cmos_bit_op_strategy(bit + next_bit, bits_left, &where); - value = cmos_read_bits(&where, nr_bits); - put_bits(value, next_bit, nr_bits, &result); + if (e->config == CMOS_ENTRY_STRING) + { char *newstring = malloc((length+7)/8); + unsigned usize = (8 * sizeof(unsigned long long)); + + if(!newstring) { out_of_memory(); } + + for (next_bit = 0, bits_left = length; + bits_left; + next_bit += nr_bits, bits_left -= nr_bits) + { nr_bits = cmos_bit_op_strategy(bit + next_bit, bits_left>usize?usize:bits_left, &where); + value = cmos_read_bits(&where, nr_bits); + put_bits(value, next_bit % usize, nr_bits, &((unsigned long long *)newstring)[next_bit/usize]); + result = (unsigned long)newstring; + } + } + else + { for (next_bit = 0, bits_left = length; + bits_left; + next_bit += nr_bits, bits_left -= nr_bits) + { nr_bits = cmos_bit_op_strategy(bit + next_bit, bits_left, &where); + value = cmos_read_bits(&where, nr_bits); + put_bits(value, next_bit, nr_bits, &result); + } } return result; @@ -106,17 +123,32 @@ unsigned long long cmos_read (unsigned bit, unsigned length) * The I/O privilege level of the currently executing process must be set * appropriately. ****************************************************************************/ -void cmos_write (unsigned bit, unsigned length, unsigned long long value) +void cmos_write (const cmos_entry_t *e, unsigned long long value) { cmos_bit_op_location_t where; + unsigned bit = e->bit, length=e->length; unsigned next_bit, bits_left, nr_bits; - assert(!verify_cmos_op(bit, length)); + assert(!verify_cmos_op(bit, length, e->config)); - for (next_bit = 0, bits_left = length; - bits_left; - next_bit += nr_bits, bits_left -= nr_bits) - { nr_bits = cmos_bit_op_strategy(bit + next_bit, bits_left, &where); - cmos_write_bits(&where, nr_bits, get_bits(value, next_bit, nr_bits)); + if (e->config == CMOS_ENTRY_STRING) + { unsigned long long *data = (unsigned long long *)(unsigned long)value; + unsigned usize = (8 * sizeof(unsigned long long)); + + for (next_bit = 0, bits_left = length; + bits_left; + next_bit += nr_bits, bits_left -= nr_bits) + { nr_bits = cmos_bit_op_strategy(bit + next_bit, bits_left>usize?usize:bits_left, &where); + value = data[next_bit/usize]; + cmos_write_bits(&where, nr_bits, get_bits(value, next_bit % usize, nr_bits)); + } + } + else + { for (next_bit = 0, bits_left = length; + bits_left; + next_bit += nr_bits, bits_left -= nr_bits) + { nr_bits = cmos_bit_op_strategy(bit + next_bit, bits_left, &where); + cmos_write_bits(&where, nr_bits, get_bits(value, next_bit, nr_bits)); + } } } @@ -236,13 +268,16 @@ void set_iopl (int level) * wish to read or write. Perform sanity checking on 'bit' and 'length'. If * no problems were encountered, return OK. Else return an error code. ****************************************************************************/ -int verify_cmos_op (unsigned bit, unsigned length) +int verify_cmos_op (unsigned bit, unsigned length, cmos_entry_config_t config) { if ((bit >= (8 * CMOS_SIZE)) || ((bit + length) > (8 * CMOS_SIZE))) return CMOS_AREA_OUT_OF_RANGE; if (bit < (8 * CMOS_RTC_AREA_SIZE)) return CMOS_AREA_OVERLAPS_RTC; + if (config == CMOS_ENTRY_STRING) + return OK; + if (length > (8 * sizeof(unsigned long long))) return CMOS_AREA_TOO_WIDE; diff --git a/util/nvramtool/cmos_lowlevel.h b/util/nvramtool/cmos_lowlevel.h index 73634e02c9..20a503f75b 100644 --- a/util/nvramtool/cmos_lowlevel.h +++ b/util/nvramtool/cmos_lowlevel.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * cmos_lowlevel.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -33,19 +32,20 @@ #define NVRAMTOOL_CMOS_LOWLEVEL_H #include "common.h" +#include "layout.h" #define CMOS_AREA_OUT_OF_RANGE (CMOS_RESULT_START + 0) #define CMOS_AREA_OVERLAPS_RTC (CMOS_RESULT_START + 1) #define CMOS_AREA_TOO_WIDE (CMOS_RESULT_START + 2) -unsigned long long cmos_read (unsigned bit, unsigned length); -void cmos_write (unsigned bit, unsigned length, unsigned long long value); +unsigned long long cmos_read (const cmos_entry_t *e); +void cmos_write (const cmos_entry_t *e, unsigned long long value); unsigned char cmos_read_byte (unsigned index); void cmos_write_byte (unsigned index, unsigned char value); void cmos_read_all (unsigned char data[]); void cmos_write_all (unsigned char data[]); void set_iopl (int level); -int verify_cmos_op (unsigned bit, unsigned length); +int verify_cmos_op (unsigned bit, unsigned length, cmos_entry_config_t config); #define CMOS_SIZE 256 /* size of CMOS memory in bytes */ #define CMOS_RTC_AREA_SIZE 14 /* first 14 bytes control real time clock */ 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(); } diff --git a/util/nvramtool/cmos_ops.h b/util/nvramtool/cmos_ops.h index ea74333682..16aa923752 100644 --- a/util/nvramtool/cmos_ops.h +++ b/util/nvramtool/cmos_ops.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * cmos_ops.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. diff --git a/util/nvramtool/common.c b/util/nvramtool/common.c index cb9e9c817b..f59be8a02e 100644 --- a/util/nvramtool/common.c +++ b/util/nvramtool/common.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * common.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -35,7 +34,7 @@ const char prog_name[] = "nvramtool"; /* version of this program */ -const char prog_version[] = "2.0.1"; +const char prog_version[] = "2.1"; /**************************************************************************** * get_line_from_file diff --git a/util/nvramtool/common.h b/util/nvramtool/common.h index 5b479c0c40..f262ea41ab 100644 --- a/util/nvramtool/common.h +++ b/util/nvramtool/common.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * common.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. diff --git a/util/nvramtool/compute_ip_checksum.c b/util/nvramtool/compute_ip_checksum.c index 3d2c29feb8..12bed5fbf3 100644 --- a/util/nvramtool/compute_ip_checksum.c +++ b/util/nvramtool/compute_ip_checksum.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * compute_ip_checksum.c - * $Id$ \*****************************************************************************/ #include diff --git a/util/nvramtool/hexdump.c b/util/nvramtool/hexdump.c index b5c81f0866..5df2619881 100644 --- a/util/nvramtool/hexdump.c +++ b/util/nvramtool/hexdump.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * hexdump.c - * $Id$ \*****************************************************************************/ #include "hexdump.h" diff --git a/util/nvramtool/hexdump.h b/util/nvramtool/hexdump.h index 4ee77f9fca..bd21ed9749 100644 --- a/util/nvramtool/hexdump.h +++ b/util/nvramtool/hexdump.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * hexdump.h - * $Id$ \*****************************************************************************/ #ifndef _HEXDUMP_H diff --git a/util/nvramtool/input_file.c b/util/nvramtool/input_file.c index eafea4ca02..4c5b5bb280 100644 --- a/util/nvramtool/input_file.c +++ b/util/nvramtool/input_file.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * input_file.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -137,6 +136,7 @@ cmos_write_t * process_input_file (FILE *f) item->bit = e->bit; item->length = e->length; + item->config = e->config; item->value = try_prepare_cmos_write(e, value); /* Append write operation to pending write list. */ @@ -162,9 +162,13 @@ void do_cmos_writes (cmos_write_t *list) set_iopl(3); while (list != NULL) - { item = list; + { cmos_entry_t e; + item = list; + e.bit = item->bit; + e.length = item->length; + e.config = item->config; list = item->next; - cmos_write(item->bit, item->length, item->value); + cmos_write(&e, item->value); free(item); } diff --git a/util/nvramtool/input_file.h b/util/nvramtool/input_file.h index 5d4764c08b..1600308740 100644 --- a/util/nvramtool/input_file.h +++ b/util/nvramtool/input_file.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * input_file.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -33,6 +32,7 @@ #define INPUT_FILE_H #include "common.h" +#include "layout.h" typedef struct cmos_write_t cmos_write_t; @@ -44,6 +44,7 @@ typedef struct cmos_write_t cmos_write_t; struct cmos_write_t { unsigned bit; unsigned length; + cmos_entry_config_t config; unsigned long long value; cmos_write_t *next; }; diff --git a/util/nvramtool/ip_checksum.h b/util/nvramtool/ip_checksum.h index 885197749e..365bbd15db 100644 --- a/util/nvramtool/ip_checksum.h +++ b/util/nvramtool/ip_checksum.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * ip_checksum.h - * $Id$ \*****************************************************************************/ #ifndef IP_CHECKSUM_H diff --git a/util/nvramtool/layout.c b/util/nvramtool/layout.c index 6e47521c47..556bdb5921 100644 --- a/util/nvramtool/layout.c +++ b/util/nvramtool/layout.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * layout.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. diff --git a/util/nvramtool/layout.h b/util/nvramtool/layout.h index 69e71d6a9d..6bfb5215cd 100644 --- a/util/nvramtool/layout.h +++ b/util/nvramtool/layout.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * layout.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -49,6 +48,7 @@ typedef enum { CMOS_ENTRY_ENUM, CMOS_ENTRY_HEX, + CMOS_ENTRY_STRING, CMOS_ENTRY_RESERVED } cmos_entry_config_t; diff --git a/util/nvramtool/layout_file.c b/util/nvramtool/layout_file.c index 4e6b12d51b..35751c0f4d 100644 --- a/util/nvramtool/layout_file.c +++ b/util/nvramtool/layout_file.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * layout_file.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -551,6 +550,10 @@ static void create_entry (cmos_entry_t *cmos_entry, cmos_entry->config = CMOS_ENTRY_HEX; break; + case 's': + cmos_entry->config = CMOS_ENTRY_STRING; + break; + case 'r': cmos_entry->config = CMOS_ENTRY_RESERVED; break; @@ -758,6 +761,9 @@ static char cmos_entry_char_value (cmos_entry_config_t config) case CMOS_ENTRY_RESERVED: return 'r'; + case CMOS_ENTRY_STRING: + return 's'; + default: BUG(); } diff --git a/util/nvramtool/layout_file.h b/util/nvramtool/layout_file.h index 3f4f3faf65..87be6aadf4 100644 --- a/util/nvramtool/layout_file.h +++ b/util/nvramtool/layout_file.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * layout_file.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. diff --git a/util/nvramtool/lbtable.c b/util/nvramtool/lbtable.c index 176085228f..05d70c2929 100644 --- a/util/nvramtool/lbtable.c +++ b/util/nvramtool/lbtable.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * lbtable.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. @@ -582,6 +581,10 @@ static void process_cmos_table (void) cmos_entry.config = CMOS_ENTRY_RESERVED; break; + case 's': + cmos_entry.config = CMOS_ENTRY_STRING; + break; + default: fprintf(stderr, "%s: Entry in CMOS option table has unknown config " diff --git a/util/nvramtool/lbtable.h b/util/nvramtool/lbtable.h index f632f1a956..cbe1a5057e 100644 --- a/util/nvramtool/lbtable.h +++ b/util/nvramtool/lbtable.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * lbtable.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. diff --git a/util/nvramtool/nvramtool.1 b/util/nvramtool/nvramtool.1 index 95f25b4480..45ced60ca8 100644 --- a/util/nvramtool/nvramtool.1 +++ b/util/nvramtool/nvramtool.1 @@ -1,6 +1,5 @@ .\"***************************************************************************\ .\" nvramtool.1 -.\" $Id$ .\"*************************************************************************** .\" Copyright (C) 2002, 2003 The Regents of the University of California. .\" Produced at the Lawrence Livermore National Laboratory. @@ -28,7 +27,7 @@ .\" with this program; if not, write to the Free Software Foundation, Inc., .\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. .\"***************************************************************************/ -.TH NVRAMTOOL 1 "January 2008" Linux +.TH NVRAMTOOL 1 "September 2008" Linux .SH NAME nvramtool \- read/write coreboot-related information .SH SYNOPSIS @@ -252,4 +251,4 @@ concurrently. .SH AUTHORS David S. Peterson .br -Stefan Reinauer +Stefan Reinauer 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(); diff --git a/util/nvramtool/nvramtool.spec b/util/nvramtool/nvramtool.spec index 1493604dca..dcc23a9e2a 100644 --- a/util/nvramtool/nvramtool.spec +++ b/util/nvramtool/nvramtool.spec @@ -1,9 +1,7 @@ ## -# $Id$ -## Name: nvramtool -Version: 2.0.1 +Version: 2.1 Release: 0 Summary: coreboot utility program diff --git a/util/nvramtool/opts.c b/util/nvramtool/opts.c index 3431153179..27b3b481e9 100644 --- a/util/nvramtool/opts.c +++ b/util/nvramtool/opts.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * opts.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. diff --git a/util/nvramtool/opts.h b/util/nvramtool/opts.h index b335b16165..729c5e2a72 100644 --- a/util/nvramtool/opts.h +++ b/util/nvramtool/opts.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * opts.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. diff --git a/util/nvramtool/reg_expr.c b/util/nvramtool/reg_expr.c index 0737866666..bd349712bd 100644 --- a/util/nvramtool/reg_expr.c +++ b/util/nvramtool/reg_expr.c @@ -1,6 +1,5 @@ /*****************************************************************************\ * reg_expr.c - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. diff --git a/util/nvramtool/reg_expr.h b/util/nvramtool/reg_expr.h index cf8f8a9b4d..28ff7339c0 100644 --- a/util/nvramtool/reg_expr.h +++ b/util/nvramtool/reg_expr.h @@ -1,6 +1,5 @@ /*****************************************************************************\ * reg_expr.h - * $Id$ ***************************************************************************** * Copyright (C) 2002-2005 The Regents of the University of California. * Produced at the Lawrence Livermore National Laboratory. -- cgit v1.2.3