[coreboot] [PATCH] v3: print name of compression algorithm

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Sun Feb 17 13:35:32 CET 2008


On 17.02.2008 13:02, Carl-Daniel Hailfinger wrote:
> On 17.02.2008 05:02, Peter Stuge wrote:
>   
>> On Sun, Feb 17, 2008 at 12:34:24AM +0100, Carl-Daniel Hailfinger wrote:
>>   
>>     
>>> +enum compalgo {
>>> +	none = 0,
>>> +	lzma = 1,
>>> +	nrv2b = 2,
>>> +	zeroes = 3,
>>> +	/* invalid should always be the last entry. */
>>> +	invalid
>>> +};
>>>     
>>>       
>> It's fairly common to uppercase these. Do we want that too?
>>   
>>     
>
> This was just a straight copy from util/lar, but I agree. We use these 
> enums like #defines, so uppercasing seems indeed the best way to bring 
> this hint to the developer.
>   

Uppercasing also found a name clash between NONE as compression algo and 
NONE as operation mode of util/lar.

Print name of compression algorithm in addition to the corresponding 
number during boot.
Convert process_file() to use enum compalgo instead of hardcoded 
"1","2","3" and change the control structure from a series of if() 
statements to a switch() statement.

Compile and boot tested on Qemu.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Index: LinuxBIOSv3-algonaming/include/lar.h
===================================================================
--- LinuxBIOSv3-algonaming/include/lar.h	(Revision 605)
+++ LinuxBIOSv3-algonaming/include/lar.h	(Arbeitskopie)
@@ -74,6 +74,15 @@
 	u64 loadaddress;
 };
 
+enum compalgo {
+	ALGO_NONE = 0,
+	ALGO_LZMA = 1,
+	ALGO_NRV2B = 2,
+	ALGO_ZEROES = 3,
+	/* invalid should always be the last entry. */
+	ALGO_INVALID
+};
+
 struct mem_file {
 	void *start;
 	int len;
Index: LinuxBIOSv3-algonaming/lib/lar.c
===================================================================
--- LinuxBIOSv3-algonaming/lib/lar.c	(Revision 605)
+++ LinuxBIOSv3-algonaming/lib/lar.c	(Arbeitskopie)
@@ -31,6 +31,15 @@
 #define ntohl(x) (x)
 #endif
 
+static const char *algo_name[] = {
+	"none",
+	"lzma",
+	"nrv2b",
+	"zeroes",
+	/* invalid should always be the last entry. */
+	"invalid"
+};
+
 /**
  * run_address is passed the address of a function taking no parameters and
  * jumps to it, returning the result. 
@@ -147,36 +156,41 @@
 
 int process_file(const struct mem_file *archive, void *where)
 {
-	printk(BIOS_SPEW, "LAR: Compression algorithm #%i used\n", archive->compression);
+	const char *algoname = algo_name[(archive->compression >= ALGO_INVALID)
+					? ALGO_INVALID : archive->compression];
+	printk(BIOS_SPEW, "LAR: Compression algorithm #%i (%s) used\n",
+		archive->compression, algoname);
+	switch (archive->compression) {
 	/* no compression */
-	if (archive->compression == 0) {
+	case ALGO_NONE:
 		memcpy(where, archive->start, archive->len);
 		return 0;
-	}
 #ifdef CONFIG_COMPRESSION_LZMA
 	/* lzma */
-	unsigned long ulzma(unsigned char *src, unsigned char *dst);
-	if (archive->compression == 1) {
+	case ALGO_LZMA: {
+		unsigned long ulzma(unsigned char *src, unsigned char *dst);
 		ulzma(archive->start, where);
 		return 0;
 	}
 #endif
 #ifdef CONFIG_COMPRESSION_NRV2B
 	/* nrv2b */
-	unsigned long unrv2b(u8 *src, u8 *dst, unsigned long *ilen_p);
-	if (archive->compression == 2) {
+	case ALGO_NRV2B: {
+		unsigned long unrv2b(u8 *src, u8 *dst, unsigned long *ilen_p);
 		unsigned long tmp;
 		unrv2b(archive->start, where, &tmp);
 		return 0;
 	}
 #endif
 	/* zeroes */
-	if (archive->compression == 3) {
+	case ALGO_ZEROES:
 		memset(where, 0, archive->reallen);
 		return 0;
+	default:
+		printk(BIOS_INFO, "LAR: Compression algorithm #%i (%s) not"
+			" supported!\n", archive->compression, algoname);
+		return -1;
 	}
-	printk(BIOS_INFO, "LAR: Compression algorithm #%i not supported!\n", archive->compression);
-	return -1;
 }
 
 /**
Index: LinuxBIOSv3-algonaming/util/lar/lar.c
===================================================================
--- LinuxBIOSv3-algonaming/util/lar/lar.c	(Revision 605)
+++ LinuxBIOSv3-algonaming/util/lar/lar.c	(Arbeitskopie)
@@ -40,7 +40,7 @@
 static int iselfparse = 0;
 static long larsize = 0;
 static char *bootblock = NULL;
-enum compalgo algo = none;
+enum compalgo algo = ALGO_NONE;
 
 static void usage(char *name)
 {
@@ -272,10 +272,10 @@
 			break;
 		case 'C':
 			if (strcasecmp("lzma", optarg) == 0) {
-				algo = lzma;
+				algo = ALGO_LZMA;
 			}
 			if (strcasecmp("nrv2b", optarg) == 0) {
-				algo = nrv2b;
+				algo = ALGO_NRV2B;
 			}
 			break;
 		case 'l':
Index: LinuxBIOSv3-algonaming/util/lar/lar.h
===================================================================
--- LinuxBIOSv3-algonaming/util/lar/lar.h	(Revision 605)
+++ LinuxBIOSv3-algonaming/util/lar/lar.h	(Arbeitskopie)
@@ -92,7 +92,14 @@
 	u32 size; /**< Size of the mmaped file */
 };
 
-enum compalgo { none = 0, lzma = 1, nrv2b = 2, zeroes = 3 };
+enum compalgo {
+	ALGO_NONE = 0,
+	ALGO_LZMA = 1,
+	ALGO_NRV2B = 2,
+	ALGO_ZEROES = 3,
+	/* invalid should always be the last entry. */
+	ALGO_INVALID
+};
 
 typedef void (*compress_func) (char *, int, char *, int *);
 typedef void (*uncompress_func) (char *, int, char *, int);
@@ -124,8 +131,10 @@
 };
 
 static const char *algo_name[] = {
-	"",
+	"none",
 	"lzma",
 	"nrv2b",
 	"zeroes",
+	/* invalid should always be the last entry. */
+	"invalid"
 };
Index: LinuxBIOSv3-algonaming/util/lar/stream.c
===================================================================
--- LinuxBIOSv3-algonaming/util/lar/stream.c	(Revision 605)
+++ LinuxBIOSv3-algonaming/util/lar/stream.c	(Arbeitskopie)
@@ -147,7 +147,7 @@
 				fprintf(stderr, "Dropping empty section\n");
 			continue;
 		}
-		thisalgo = zeroes;
+		thisalgo = ALGO_ZEROES;
 		if (verbose())
 			fprintf(stderr,  "New section addr %#x size %#x\n",
 			(u32)shdr[i].sh_addr, (u32)shdr[i].sh_size);
@@ -565,7 +565,7 @@
 		if (file_in_list(files, filename)) {
 			printf("  %s ", filename);
 
-			if (ntohl(header->compression) == none) {
+			if (ntohl(header->compression) == ALGO_NONE) {
 				printf("(%d bytes @0x%lx);",
 				       ntohl(header->len),
 				       (unsigned long)(ptr - lar->map) +
@@ -669,7 +669,7 @@
 
 		if (file_in_list(files, filename)) {
 
-			if (ntohl(header->compression) == none) {
+			if (ntohl(header->compression) == ALGO_NONE) {
 				ret = _write_file(filename,
 						  (u8 *) (ptr + ntohl(header->offset)),
 						  (u32) ntohl(header->len));
@@ -730,7 +730,7 @@
 
 	if (!strncmp(name, "nocompress:",11)) {
 		filename += 11;
-		*thisalgo = none;
+		*thisalgo = ALGO_NONE;
 	}
 
 	/* this is dangerous */
@@ -846,8 +846,8 @@
 	int complen;
 	compress_functions[*thisalgo](ptr, size, temp, &complen);
 
-	if (complen >= size && (*thisalgo != none)) {
-		*thisalgo = none;
+	if (complen >= size && (*thisalgo != ALGO_NONE)) {
+		*thisalgo = ALGO_NONE;
 		compress_functions[*thisalgo](ptr, size, temp, &complen);
 	}
 	return complen;



-- 
http://www.hailfinger.org/





More information about the coreboot mailing list