[OpenBIOS] [commit] r757 - trunk/fcode-utils-devel/toke
repository service
svn at openbios.org
Mon Apr 26 17:43:26 CEST 2010
Author: stepan
Date: Mon Apr 26 17:43:25 2010
New Revision: 757
URL: http://tracker.coreboot.org/trac/openbios/changeset/757
Log:
SUN OPB on the SPARC (Enterprise) platforms (especially):
M3000, M4000, M9000 expects a checksum algorithm that is
not compliant with IEEE 1275-1994 section 5.2.2.5.
Add flag "Sun-Style-Checksum" to switch to the other algorithm.
Modified:
trunk/fcode-utils-devel/toke/clflags.c
trunk/fcode-utils-devel/toke/clflags.h
trunk/fcode-utils-devel/toke/emit.c
Modified: trunk/fcode-utils-devel/toke/clflags.c
==============================================================================
--- trunk/fcode-utils-devel/toke/clflags.c Mon Apr 26 17:40:54 2010 (r756)
+++ trunk/fcode-utils-devel/toke/clflags.c Mon Apr 26 17:43:25 2010 (r757)
@@ -5,7 +5,7 @@
* This program is part of a free implementation of the IEEE 1275-1994
* Standard for Boot (Initialization Configuration) Firmware.
*
- * Copyright (C) 2001-2005 Stefan Reinauer, <stepan at openbios.org>
+ * Copyright (C) 2001-2010 Stefan Reinauer <stepan at openbios.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -94,6 +94,7 @@
bool ibm_legacy_separator_message = TRUE ;
bool enable_abort_quote = TRUE ;
bool sun_style_abort_quote = TRUE ;
+bool sun_style_checksum = FALSE ;
bool abort_quote_throw = TRUE ;
bool string_remark_escape = TRUE ;
bool hex_remark_escape = TRUE ;
@@ -181,6 +182,11 @@
"\t",
"Use -2 THROW in an Abort\" phrase, rather than ABORT" } ,
+ { "Sun-Style-Checksum",
+ &sun_style_checksum,
+ "\t\t",
+ "Use this for SPARC (Enterprise) platforms (especially): M3000, M4000, M9000" } ,
+
{ "String-remark-escape",
&string_remark_escape,
"\t",
@@ -640,7 +646,7 @@
for ( indx = 0 ; indx < number_of_cl_flags ; indx++ )
{
- printf(" %s %s%s%s\n",
+ printf(" %s %s%s%s\n",
*(cl_flags_list[indx].flag_var) ? " " : "no" ,
cl_flags_list[indx].clflag_name,
cl_flags_list[indx].clflag_tabs,
Modified: trunk/fcode-utils-devel/toke/clflags.h
==============================================================================
--- trunk/fcode-utils-devel/toke/clflags.h Mon Apr 26 17:40:54 2010 (r756)
+++ trunk/fcode-utils-devel/toke/clflags.h Mon Apr 26 17:43:25 2010 (r757)
@@ -8,7 +8,7 @@
* This program is part of a free implementation of the IEEE 1275-1994
* Standard for Boot (Initialization Configuration) Firmware.
*
- * Copyright (C) 2001-2005 Stefan Reinauer, <stepan at openbios.org>
+ * Copyright (C) 2001-2010 Stefan Reinauer <stepan at openbios.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -56,6 +56,7 @@
* ibm_legacy_separator_message
* enable_abort_quote
* sun_style_abort_quote
+ * sun_style_checksum
* string_remark_escape
* hex_remark_escape
* c_style_string_escape
@@ -111,6 +112,7 @@
extern bool ibm_legacy_separator_message;
extern bool enable_abort_quote;
extern bool sun_style_abort_quote;
+extern bool sun_style_checksum;
extern bool abort_quote_throw;
extern bool string_remark_escape;
extern bool hex_remark_escape;
Modified: trunk/fcode-utils-devel/toke/emit.c
==============================================================================
--- trunk/fcode-utils-devel/toke/emit.c Mon Apr 26 17:40:54 2010 (r756)
+++ trunk/fcode-utils-devel/toke/emit.c Mon Apr 26 17:43:25 2010 (r757)
@@ -7,7 +7,7 @@
* This program is part of a free implementation of the IEEE 1275-1994
* Standard for Boot (Initialization Configuration) Firmware.
*
- * Copyright (C) 2001-2005 Stefan Reinauer, <stepan at openbios.org>
+ * Copyright (C) 2001-2010 Stefan Reinauer <stepan at openbios.org>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@@ -317,7 +317,7 @@
/* Calculate and place checksum and length, if haven't already */
if ( fcode_start_ob_off != -1 )
{
- u16 checksum;
+ u32 checksum;
int length;
u8 *fcode_body = ostart+fcode_body_ob_off;
@@ -331,13 +331,23 @@
fcode_body < ob_end ;
checksum += *(fcode_body++) ) ;
- BIG_ENDIAN_WORD_STORE(fcode_hdr->checksum , checksum);
+ if (sun_style_checksum) {
+ /* SUN OPB on the SPARC (Enterprise) platforms (especially):
+ * M3000, M4000, M9000 expects a checksum algorithm that is
+ * not compliant with IEEE 1275-1994 section 5.2.2.5.
+ */
+ checksum = (checksum & 0xffff) + (checksum >> 16);
+ checksum = (checksum & 0xffff) + (checksum >> 16);
+ }
+
+ BIG_ENDIAN_WORD_STORE(fcode_hdr->checksum,
+ (u16)(checksum & 0xffff));
BIG_ENDIAN_LONG_STORE(fcode_hdr->length , length);
if (verbose)
{
printf( "toke: checksum is 0x%04x (%d bytes). ",
- checksum, length);
+ (u16)checksum, length);
list_fcode_ranges( TRUE);
}
}
More information about the OpenBIOS
mailing list