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,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
|
||||||
|
@ -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
|
||||||
|
@ -1,28 +1,43 @@
|
|||||||
# $Id$
|
#
|
||||||
|
# Makefile for nvram utility
|
||||||
|
#
|
||||||
|
# (C) 2005-2008 coresystems GmbH
|
||||||
|
# written by Stefan Reinauer <stepan@coresystems.de>
|
||||||
|
#
|
||||||
|
|
||||||
|
PROGRAM = nvramtool
|
||||||
|
|
||||||
PROJECT = nvramtool
|
|
||||||
CC = gcc
|
CC = gcc
|
||||||
CFLAGS = -O2 -W -Wall
|
STRIP = strip
|
||||||
LDFLAGS =
|
INSTALL = /usr/bin/install
|
||||||
OBJS = common.o compute_ip_checksum.o hexdump.o cmos_lowlevel.o \
|
PREFIX = /usr/local
|
||||||
reg_expr.o layout.o layout_file.o lbtable.o cmos_ops.o input_file.o \
|
CFLAGS = -O2 -g -Wall -W
|
||||||
opts.o nvramtool.o
|
#CFLAGS = -Os -Wall
|
||||||
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
|
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
|
||||||
|
|
||||||
nvramtool: $(OBJS)
|
all: dep $(PROGRAM)
|
||||||
$(CC) $(LDFLAGS) -o $@ $(OBJS)
|
|
||||||
|
|
||||||
man: nvramtool.1.gz
|
$(PROGRAM): $(OBJS)
|
||||||
|
$(CC) -o $(PROGRAM) $(OBJS) $(LDFLAGS)
|
||||||
$(OBJS): $(HEADERS)
|
$(STRIP) $(STRIP_ARGS) $(PROGRAM)
|
||||||
|
|
||||||
nvramtool.1.gz: nvramtool.1
|
|
||||||
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
|
||||||
|
@ -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
|
||||||
|
@ -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,22 +78,40 @@ 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;
|
||||||
|
|
||||||
|
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;
|
for (next_bit = 0, bits_left = length;
|
||||||
bits_left;
|
bits_left;
|
||||||
next_bit += nr_bits, bits_left -= nr_bits)
|
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);
|
{ nr_bits = cmos_bit_op_strategy(bit + next_bit, bits_left, &where);
|
||||||
value = cmos_read_bits(&where, nr_bits);
|
value = cmos_read_bits(&where, nr_bits);
|
||||||
put_bits(value, next_bit, nr_bits, &result);
|
put_bits(value, next_bit, nr_bits, &result);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@ -106,19 +123,34 @@ 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));
|
||||||
|
|
||||||
|
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;
|
for (next_bit = 0, bits_left = length;
|
||||||
bits_left;
|
bits_left;
|
||||||
next_bit += nr_bits, bits_left -= nr_bits)
|
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);
|
{ 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));
|
cmos_write_bits(&where, nr_bits, get_bits(value, next_bit, nr_bits));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* cmos_read_byte
|
* cmos_read_byte
|
||||||
@ -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;
|
||||||
|
|
||||||
|
@ -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 */
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/*****************************************************************************\
|
/*****************************************************************************\
|
||||||
* compute_ip_checksum.c
|
* compute_ip_checksum.c
|
||||||
* $Id$
|
|
||||||
\*****************************************************************************/
|
\*****************************************************************************/
|
||||||
|
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/*****************************************************************************\
|
/*****************************************************************************\
|
||||||
* hexdump.c
|
* hexdump.c
|
||||||
* $Id$
|
|
||||||
\*****************************************************************************/
|
\*****************************************************************************/
|
||||||
|
|
||||||
#include "hexdump.h"
|
#include "hexdump.h"
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/*****************************************************************************\
|
/*****************************************************************************\
|
||||||
* hexdump.h
|
* hexdump.h
|
||||||
* $Id$
|
|
||||||
\*****************************************************************************/
|
\*****************************************************************************/
|
||||||
|
|
||||||
#ifndef _HEXDUMP_H
|
#ifndef _HEXDUMP_H
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
/*****************************************************************************\
|
/*****************************************************************************\
|
||||||
* ip_checksum.h
|
* ip_checksum.h
|
||||||
* $Id$
|
|
||||||
\*****************************************************************************/
|
\*****************************************************************************/
|
||||||
|
|
||||||
#ifndef IP_CHECKSUM_H
|
#ifndef IP_CHECKSUM_H
|
||||||
|
@ -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.
|
||||||
|
@ -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;
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
@ -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.
|
||||||
|
@ -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 "
|
||||||
|
@ -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.
|
||||||
|
@ -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>
|
||||||
|
@ -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();
|
||||||
|
@ -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
|
||||||
|
@ -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.
|
||||||
|
@ -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.
|
||||||
|
@ -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.
|
||||||
|
@ -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.
|
||||||
|
Reference in New Issue
Block a user