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:
Stefan Reinauer
2008-09-27 10:08:28 +00:00
committed by Stefan Reinauer
parent 830b17d3e3
commit a67aab7083
29 changed files with 157 additions and 80 deletions

View File

@ -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) Mon Jan 23 16:00:00 PST 2006 David S. Peterson (dsp@llnl.gov)
Version 2.0.1 Version 2.0.1

View File

@ -1,8 +1,8 @@
#################################################################### ####################################################################
# $Id$
####################################################################
Copyright (C) 2002 The Regents of the University of California. Copyright (C) 2002 The Regents of the University of California.
Copyright (C) 2008 coresystems GmbH
Produced at the Lawrence Livermore National Laboratory. Produced at the Lawrence Livermore National Laboratory.
Written by David S. Peterson <dsp@llnl.gov>. Written by David S. Peterson <dsp@llnl.gov>.
UCRL-CODE-2003-012 UCRL-CODE-2003-012

View File

@ -1,28 +1,43 @@
# $Id$ #
# Makefile for nvram utility
#
# (C) 2005-2008 coresystems GmbH
# written by Stefan Reinauer <stepan@coresystems.de>
#
PROJECT = nvramtool PROGRAM = 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
all: nvramtool man CC = gcc
STRIP = strip
INSTALL = /usr/bin/install
PREFIX = /usr/local
CFLAGS = -O2 -g -Wall -W
#CFLAGS = -Os -Wall
nvramtool: $(OBJS) OBJS = cmos_lowlevel.o cmos_ops.o common.o compute_ip_checksum.o \
$(CC) $(LDFLAGS) -o $@ $(OBJS) 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) $(PROGRAM): $(OBJS)
$(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)
nvramtool.1.gz: nvramtool.1 $(STRIP) $(STRIP_ARGS) $(PROGRAM)
gzip -c --best nvramtool.1 > nvramtool.1.gz
clean: 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

View File

@ -1,5 +1,3 @@
$Id$
Summary of Operation Summary of Operation
-------------------- --------------------
nvramtool is a utility for reading/writing coreboot parameters and nvramtool is a utility for reading/writing coreboot parameters and

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* cmos_lowlevel.c * cmos_lowlevel.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * 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, static inline void put_bits (unsigned char value, unsigned bit,
unsigned nr_bits, unsigned long long *result) 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 * 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 * and return this value. The I/O privilege level of the currently executing
* process must be set appropriately. * 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; { cmos_bit_op_location_t where;
unsigned bit = e->bit, length=e->length;
unsigned next_bit, bits_left, nr_bits; unsigned next_bit, bits_left, nr_bits;
unsigned long long result; unsigned long long result = 0;
unsigned char value; unsigned char value;
assert(!verify_cmos_op(bit, length)); assert(!verify_cmos_op(bit, length, e->config));
result = 0; result = 0;
for (next_bit = 0, bits_left = length; if (e->config == CMOS_ENTRY_STRING)
bits_left; { char *newstring = malloc((length+7)/8);
next_bit += nr_bits, bits_left -= nr_bits) unsigned usize = (8 * sizeof(unsigned long long));
{ nr_bits = cmos_bit_op_strategy(bit + next_bit, bits_left, &where);
value = cmos_read_bits(&where, nr_bits); if(!newstring) { out_of_memory(); }
put_bits(value, next_bit, nr_bits, &result);
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; 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 * The I/O privilege level of the currently executing process must be set
* appropriately. * 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; { cmos_bit_op_location_t where;
unsigned bit = e->bit, length=e->length;
unsigned next_bit, bits_left, nr_bits; 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; if (e->config == CMOS_ENTRY_STRING)
bits_left; { unsigned long long *data = (unsigned long long *)(unsigned long)value;
next_bit += nr_bits, bits_left -= nr_bits) unsigned usize = (8 * sizeof(unsigned long long));
{ 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)); 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 * wish to read or write. Perform sanity checking on 'bit' and 'length'. If
* no problems were encountered, return OK. Else return an error code. * 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))) { if ((bit >= (8 * CMOS_SIZE)) || ((bit + length) > (8 * CMOS_SIZE)))
return CMOS_AREA_OUT_OF_RANGE; return CMOS_AREA_OUT_OF_RANGE;
if (bit < (8 * CMOS_RTC_AREA_SIZE)) if (bit < (8 * CMOS_RTC_AREA_SIZE))
return CMOS_AREA_OVERLAPS_RTC; return CMOS_AREA_OVERLAPS_RTC;
if (config == CMOS_ENTRY_STRING)
return OK;
if (length > (8 * sizeof(unsigned long long))) if (length > (8 * sizeof(unsigned long long)))
return CMOS_AREA_TOO_WIDE; return CMOS_AREA_TOO_WIDE;

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* cmos_lowlevel.h * cmos_lowlevel.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.
@ -33,19 +32,20 @@
#define NVRAMTOOL_CMOS_LOWLEVEL_H #define NVRAMTOOL_CMOS_LOWLEVEL_H
#include "common.h" #include "common.h"
#include "layout.h"
#define CMOS_AREA_OUT_OF_RANGE (CMOS_RESULT_START + 0) #define CMOS_AREA_OUT_OF_RANGE (CMOS_RESULT_START + 0)
#define CMOS_AREA_OVERLAPS_RTC (CMOS_RESULT_START + 1) #define CMOS_AREA_OVERLAPS_RTC (CMOS_RESULT_START + 1)
#define CMOS_AREA_TOO_WIDE (CMOS_RESULT_START + 2) #define CMOS_AREA_TOO_WIDE (CMOS_RESULT_START + 2)
unsigned long long cmos_read (unsigned bit, unsigned length); unsigned long long cmos_read (const cmos_entry_t *e);
void cmos_write (unsigned bit, unsigned length, unsigned long long value); void cmos_write (const cmos_entry_t *e, unsigned long long value);
unsigned char cmos_read_byte (unsigned index); unsigned char cmos_read_byte (unsigned index);
void cmos_write_byte (unsigned index, unsigned char value); void cmos_write_byte (unsigned index, unsigned char value);
void cmos_read_all (unsigned char data[]); void cmos_read_all (unsigned char data[]);
void cmos_write_all (unsigned char data[]); void cmos_write_all (unsigned char data[]);
void set_iopl (int level); 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_SIZE 256 /* size of CMOS memory in bytes */
#define CMOS_RTC_AREA_SIZE 14 /* first 14 bytes control real time clock */ #define CMOS_RTC_AREA_SIZE 14 /* first 14 bytes control real time clock */

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* cmos_ops.c * cmos_ops.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * 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. */ /* Access to reserved parameters is not permitted. */
return CMOS_OP_RESERVED; 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; return result;
assert(e->length > 0); assert(e->length > 0);
@ -70,6 +69,7 @@ int prepare_cmos_read (const cmos_entry_t *e)
switch (e->config) switch (e->config)
{ case CMOS_ENTRY_ENUM: { case CMOS_ENTRY_ENUM:
case CMOS_ENTRY_HEX: case CMOS_ENTRY_HEX:
case CMOS_ENTRY_STRING:
break; break;
default: default:
@ -92,6 +92,7 @@ int prepare_cmos_write (const cmos_entry_t *e, const char value_str[],
{ const cmos_enum_t *q; { const cmos_enum_t *q;
unsigned long long out; unsigned long long out;
const char *p; const char *p;
char *memory;
int negative, result, found_one; int negative, result, found_one;
if ((result = prepare_cmos_op_common(e)) != OK) 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; 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: default:
BUG(); BUG();
} }

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* cmos_ops.h * cmos_ops.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* common.c * common.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.
@ -35,7 +34,7 @@
const char prog_name[] = "nvramtool"; const char prog_name[] = "nvramtool";
/* version of this program */ /* version of this program */
const char prog_version[] = "2.0.1"; const char prog_version[] = "2.1";
/**************************************************************************** /****************************************************************************
* get_line_from_file * get_line_from_file

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* common.h * common.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* compute_ip_checksum.c * compute_ip_checksum.c
* $Id$
\*****************************************************************************/ \*****************************************************************************/
#include <stdint.h> #include <stdint.h>

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* hexdump.c * hexdump.c
* $Id$
\*****************************************************************************/ \*****************************************************************************/
#include "hexdump.h" #include "hexdump.h"

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* hexdump.h * hexdump.h
* $Id$
\*****************************************************************************/ \*****************************************************************************/
#ifndef _HEXDUMP_H #ifndef _HEXDUMP_H

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* input_file.c * input_file.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.
@ -137,6 +136,7 @@ cmos_write_t * process_input_file (FILE *f)
item->bit = e->bit; item->bit = e->bit;
item->length = e->length; item->length = e->length;
item->config = e->config;
item->value = try_prepare_cmos_write(e, value); item->value = try_prepare_cmos_write(e, value);
/* Append write operation to pending write list. */ /* Append write operation to pending write list. */
@ -162,9 +162,13 @@ void do_cmos_writes (cmos_write_t *list)
set_iopl(3); set_iopl(3);
while (list != NULL) 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; list = item->next;
cmos_write(item->bit, item->length, item->value); cmos_write(&e, item->value);
free(item); free(item);
} }

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* input_file.h * input_file.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.
@ -33,6 +32,7 @@
#define INPUT_FILE_H #define INPUT_FILE_H
#include "common.h" #include "common.h"
#include "layout.h"
typedef struct cmos_write_t cmos_write_t; typedef struct cmos_write_t cmos_write_t;
@ -44,6 +44,7 @@ typedef struct cmos_write_t cmos_write_t;
struct cmos_write_t struct cmos_write_t
{ unsigned bit; { unsigned bit;
unsigned length; unsigned length;
cmos_entry_config_t config;
unsigned long long value; unsigned long long value;
cmos_write_t *next; cmos_write_t *next;
}; };

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* ip_checksum.h * ip_checksum.h
* $Id$
\*****************************************************************************/ \*****************************************************************************/
#ifndef IP_CHECKSUM_H #ifndef IP_CHECKSUM_H

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* layout.c * layout.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* layout.h * layout.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.
@ -49,6 +48,7 @@
typedef enum typedef enum
{ CMOS_ENTRY_ENUM, { CMOS_ENTRY_ENUM,
CMOS_ENTRY_HEX, CMOS_ENTRY_HEX,
CMOS_ENTRY_STRING,
CMOS_ENTRY_RESERVED CMOS_ENTRY_RESERVED
} }
cmos_entry_config_t; cmos_entry_config_t;

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* layout_file.c * layout_file.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * 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; cmos_entry->config = CMOS_ENTRY_HEX;
break; break;
case 's':
cmos_entry->config = CMOS_ENTRY_STRING;
break;
case 'r': case 'r':
cmos_entry->config = CMOS_ENTRY_RESERVED; cmos_entry->config = CMOS_ENTRY_RESERVED;
break; break;
@ -758,6 +761,9 @@ static char cmos_entry_char_value (cmos_entry_config_t config)
case CMOS_ENTRY_RESERVED: case CMOS_ENTRY_RESERVED:
return 'r'; return 'r';
case CMOS_ENTRY_STRING:
return 's';
default: default:
BUG(); BUG();
} }

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* layout_file.h * layout_file.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* lbtable.c * lbtable.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.
@ -582,6 +581,10 @@ static void process_cmos_table (void)
cmos_entry.config = CMOS_ENTRY_RESERVED; cmos_entry.config = CMOS_ENTRY_RESERVED;
break; break;
case 's':
cmos_entry.config = CMOS_ENTRY_STRING;
break;
default: default:
fprintf(stderr, fprintf(stderr,
"%s: Entry in CMOS option table has unknown config " "%s: Entry in CMOS option table has unknown config "

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* lbtable.h * lbtable.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.

View File

@ -1,6 +1,5 @@
.\"***************************************************************************\ .\"***************************************************************************\
.\" nvramtool.1 .\" nvramtool.1
.\" $Id$
.\"*************************************************************************** .\"***************************************************************************
.\" Copyright (C) 2002, 2003 The Regents of the University of California. .\" Copyright (C) 2002, 2003 The Regents of the University of California.
.\" Produced at the Lawrence Livermore National Laboratory. .\" Produced at the Lawrence Livermore National Laboratory.
@ -28,7 +27,7 @@
.\" with this program; if not, write to the Free Software Foundation, Inc., .\" with this program; if not, write to the Free Software Foundation, Inc.,
.\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. .\" 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
.\"***************************************************************************/ .\"***************************************************************************/
.TH NVRAMTOOL 1 "January 2008" Linux .TH NVRAMTOOL 1 "September 2008" Linux
.SH NAME .SH NAME
nvramtool \- read/write coreboot-related information nvramtool \- read/write coreboot-related information
.SH SYNOPSIS .SH SYNOPSIS
@ -252,4 +251,4 @@ concurrently.
.SH AUTHORS .SH AUTHORS
David S. Peterson <dsp@llnl.gov> <dave_peterson@pobox.com> David S. Peterson <dsp@llnl.gov> <dave_peterson@pobox.com>
.br .br
Stefan Reinauer <stepan@openbios.org> Stefan Reinauer <stepan@coresystems.de>

View File

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

View File

@ -1,9 +1,7 @@
## ##
# $Id$
##
Name: nvramtool Name: nvramtool
Version: 2.0.1 Version: 2.1
Release: 0 Release: 0
Summary: coreboot utility program Summary: coreboot utility program

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* opts.c * opts.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* opts.h * opts.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* reg_expr.c * reg_expr.c
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.

View File

@ -1,6 +1,5 @@
/*****************************************************************************\ /*****************************************************************************\
* reg_expr.h * reg_expr.h
* $Id$
***************************************************************************** *****************************************************************************
* Copyright (C) 2002-2005 The Regents of the University of California. * Copyright (C) 2002-2005 The Regents of the University of California.
* Produced at the Lawrence Livermore National Laboratory. * Produced at the Lawrence Livermore National Laboratory.