[coreboot-gerrit] New patch to review for coreboot: 5fbc49b libpayload: retire LAR support

Patrick Georgi (pgeorgi@google.com) gerrit at coreboot.org
Sat Jun 6 11:11:44 CEST 2015


Patrick Georgi (pgeorgi at google.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/10443

-gerrit

commit 5fbc49b13fc7abb3eef5220b52679cbfd92b71b1
Author: Patrick Georgi <patrick at georgi-clan.de>
Date:   Sat Jun 6 11:00:02 2015 +0200

    libpayload: retire LAR support
    
    Who knows it still?
    
    Change-Id: If6e36569cd9a1ba3da8b3fe84264cd2a6dfd634b
    Signed-off-by: Patrick Georgi <patrick at georgi-clan.de>
---
 payloads/libpayload/Config.in            |  14 --
 payloads/libpayload/include/lar.h        |  94 ---------
 payloads/libpayload/include/libpayload.h |  60 ------
 payloads/libpayload/libc/Makefile.inc    |   3 -
 payloads/libpayload/libc/lar.c           | 350 -------------------------------
 5 files changed, 521 deletions(-)

diff --git a/payloads/libpayload/Config.in b/payloads/libpayload/Config.in
index 92c89ab..9bd06f7 100644
--- a/payloads/libpayload/Config.in
+++ b/payloads/libpayload/Config.in
@@ -48,13 +48,6 @@ config EXPERIMENTAL
 	  Prompt for experimental functionality. Attention: This is not likely
 	  to work without problems
 
-config OBSOLETE
-	bool "Obsolete Options"
-	default n
-	help
-	  Prompt for obsolete options. These options are for old, unsupported
-	  features and are likely to go away in the future.
-
 config DEVELOPER
 	bool "Developer Options"
 	default n
@@ -149,13 +142,6 @@ config PDCURSES
 
 endchoice
 
-config LAR
-	bool "LAR support"
-	default n
-	depends on OBSOLETE
-	help
-	  LAR is the archive format of (obsolete) coreboot v3
-
 config CBFS
 	bool "CBFS support"
 	default y
diff --git a/payloads/libpayload/include/lar.h b/payloads/libpayload/include/lar.h
deleted file mode 100644
index 8fe4cd1..0000000
--- a/payloads/libpayload/include/lar.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2006 coresystems GmbH
- * (Written by Stefan Reinauer <stepan at coresystems.de> for coresystems GmbH)
- *
- * This file is dual-licensed. You can choose between:
- *   - The GNU GPL, version 2, as published by the Free Software Foundation
- *   - The revised BSD license (without advertising clause)
- *
- * ---------------------------------------------------------------------------
- * 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
- * the Free Software Foundation; version 2 of the License.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc.
- * ---------------------------------------------------------------------------
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- * ---------------------------------------------------------------------------
- */
-
-#ifndef LAR_H
-#define LAR_H
-
-#include <arch/types.h>
-
-#define LAR_MAGIC "LARCHIVE"
-#define LAR_MAX_PATHLEN 1024
-
-struct lar_header {
-	char magic[8];
-	u32 len;
-	u32 reallen;
-	u32 checksum;
-	u32 compchecksum;
-	u32 offset;
-	/* Compression:
-	 * 0 = no compression
-	 * 1 = lzma
-	 * 2 = nrv2b
-	 * 3 = zeroes
-	 */
-	u32 compression;
-	u64 entry;
-	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;
-	u32 reallen;
-	u32 compression;
-	void *entry;
-	void *loadaddress;
-};
-
-#endif /* LAR_H */
diff --git a/payloads/libpayload/include/libpayload.h b/payloads/libpayload/include/libpayload.h
index c3ca123..3e24071 100644
--- a/payloads/libpayload/include/libpayload.h
+++ b/payloads/libpayload/include/libpayload.h
@@ -58,9 +58,6 @@
 #include <arch/virtual.h>
 #include <sysinfo.h>
 #include <pci.h>
-#ifdef CONFIG_LP_LAR
-#include <lar.h>
-#endif
 
 #define MIN(a,b) ((a) < (b) ? (a) : (b))
 #define MAX(a,b) ((a) > (b) ? (a) : (b))
@@ -354,63 +351,6 @@ struct timeval {
 int gettimeofday(struct timeval *tv, void *tz);
 /** @} */
 
-#ifdef CONFIG_LP_LAR
-/**
- * @defgroup lar LAR functions
- * @{
- */
-
-/** LAR file header */
-struct LAR {
-	void *start;    /**< Location of the LAR in memory */
-	int cindex;     /**< Next file to return in readlar() */
-	int count;      /**< Number of entries in the header cache */
-	int alloc;      /**< Number of slots in the header cache */
-	int eof;        /**< Last entry in the header cache */
-	void **headers; /**< Pointer to the header cache */
-};
-
-/** A structure representing the next LAR entry */
-struct larent {
-	u8 name[LAR_MAX_PATHLEN]; /**< The name of the next LAR entry */
-};
-
-/** A structure containing information about a LAR file */
-struct larstat {
-	u32 len;           /**< Length of the file in the LAR */
-	u32 reallen;       /**< Length of the uncompressed file */
-	u32 checksum;      /**< Checksum of the uncompressed file */
-	u32 compchecksum;  /**< Checksum of the compressed file in the LAR */
-	u32 offset;        /**< Offset of the file in the LAR */
-	u32 compression;   /**< Compression type of the file */
-	u64 entry;         /**< Entry point of the file for executables */
-	u64 loadaddress;   /**< Address in memory to put the uncompressed file */
-};
-
-/** A structure representing a LAR file */
-struct LFILE {
-	struct LAR *lar;           /**< Pointer to the LAR struct */
-	struct lar_header *header; /**< Pointer to the header struct */
-	u32 size;                  /**< Size of the file */
-	void *start;               /**< Start of the file in memory */
-	u32 offset;                /**< Offset of the file in the LAR */
-};
-
-struct LAR *openlar(void *addr);
-int closelar(struct LAR *lar);
-struct larent *readlar(struct LAR *lar);
-void rewindlar(struct LAR *lar);
-int larstat(struct LAR *lar, const char *path, struct larstat *buf);
-void *larfptr(struct LAR *lar, const char *filename);
-int lfverify(struct LAR *lar, const char *filename);
-struct LFILE *lfopen(struct LAR *lar, const char *filename);
-int lfread(void *ptr, size_t size, size_t nmemb, struct LFILE *stream);
-
-int lfseek(struct LFILE *stream, long offset, int whence);
-int lfclose(struct LFILE *file);
-/** @} */
-#endif
-
 /**
  * @defgroup info System information functions
  * This module contains functions that return information about the system
diff --git a/payloads/libpayload/libc/Makefile.inc b/payloads/libpayload/libc/Makefile.inc
index 272cda9..b3c0f76 100644
--- a/payloads/libpayload/libc/Makefile.inc
+++ b/payloads/libpayload/libc/Makefile.inc
@@ -39,9 +39,6 @@ libc-$(CONFIG_LP_LIBC) += hexdump.c
 libc-$(CONFIG_LP_LIBC) += die.c
 libc-$(CONFIG_LP_LIBC) += coreboot.c
 
-# should be moved to coreboot directory
-libc-$(CONFIG_LP_LAR) += lar.c
-
 ifeq ($(CONFIG_LP_ARCH_MIPS),y)
 libc-$(CONFIG_LP_LIBC) += 64bit_div.c
 endif
diff --git a/payloads/libpayload/libc/lar.c b/payloads/libpayload/libc/lar.c
deleted file mode 100644
index 71f240d..0000000
--- a/payloads/libpayload/libc/lar.c
+++ /dev/null
@@ -1,350 +0,0 @@
-/*
- * This file is part of the libpayload project.
- *
- * Copyright (C) 2008 Advanced Micro Devices, Inc.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- *    notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- *    notice, this list of conditions and the following disclaimer in the
- *    documentation and/or other materials provided with the distribution.
- * 3. The name of the author may not be used to endorse or promote products
- *    derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <endian.h>
-#include <libpayload.h>
-
-#define ROM_RESET_VECTOR 0xFFFFFFF0
-
-static void * next_header(void * cur)
-{
-	struct lar_header *header = (struct lar_header *) cur;
-	int offset = ((ntohl(header->offset) + ntohl(header->len)) + 15) &
-		0xFFFFFFF0;
-
-	return (void *) (cur + offset);
-}
-
-static struct lar_header *lar_get_header(struct LAR *lar, int index)
-{
-	int i;
-
-	if (index < lar->count)
-		return (struct lar_header *) lar->headers[index];
-
-	if (lar->eof && index >= lar->eof)
-		return NULL;
-
-	for(i = lar->count; i <= index; i++) {
-		void *next = (i == 0) ?
-			lar->start : next_header(lar->headers[i - 1]);
-
-		if (strncmp((const char *) next, LAR_MAGIC, 8)) {
-			lar->eof = lar->count;
-			return NULL;
-		}
-
-		if (lar->count == lar->alloc) {
-			void *tmp = realloc(lar->headers,
-					    (lar->alloc + 16) * sizeof(void *));
-
-			if (tmp == NULL)
-				return NULL;
-
-			lar->headers = tmp;
-			lar->alloc += 16;
-		}
-
-		lar->headers[lar->count++] = next;
-	}
-
-	return (struct lar_header *) lar->headers[index];
-}
-
-
-/**
- * Open a LAR stream
- *
- * @param addr The address in memory where the LAR is located.
- * Use NULL to specify the boot LAR
- * @return a pointer to the LAR stream
- */
-
-struct LAR *openlar(void *addr)
-{
-	struct LAR *lar;
-
-	/* If the address is null, then figure out the start of the
-	   boot LAR */
-
-	if (addr == NULL) {
-		u32 size = *((u32 *) (ROM_RESET_VECTOR + 4));
-		addr = (void *) ((ROM_RESET_VECTOR  + 16) - size);
-	}
-
-	/* Check the magic to make sure this is a LAR */
-	if (strncmp((const char *) addr, LAR_MAGIC, strlen(LAR_MAGIC)))
-		return NULL;
-
-	lar = calloc(sizeof(struct LAR), 1);
-
-	if (!lar)
-		return NULL;
-
-	lar->start = addr;
-
-	/* Preallocate 16 slots in the cache - this saves wear and
-	 * tear on the heap */
-
-	lar->headers = malloc(16 * sizeof(void *));
-
-	if (!lar->headers)
-		return NULL;
-
-	lar->alloc = 16;
-	lar->count = lar->eof = 0;
-	lar->cindex = 0;
-
-	return lar;
-}
-
-/**
- * Close a LAR stream
- *
- * @param lar A pointer to the LAR stream
- * @return Return 0 on success, -1 on error
- */
-
-int closelar(struct LAR *lar)
-{
-	if (!lar)
-		return 0;
-
-	if (lar->headers)
-		free(lar->headers);
-
-	free(lar);
-
-	return 0;
-}
-
-/**
- * Read an entry from the LAR
- *
- * @param lar A pointer to the LAR stream
- * @return A pointer to a larent structure
-           representing the next file in the LAR
- */
-
-struct larent *readlar(struct LAR *lar)
-{
-	static struct larent _larent;
-	struct lar_header *header;
-	int nlen;
-
-	if (!lar)
-		return NULL;
-
-	header = lar_get_header(lar, lar->cindex);
-
-	if (header == NULL)
-		return NULL;
-
-	nlen = ntohl(header->offset) - sizeof(*header);
-
-	if (nlen > LAR_MAX_PATHLEN - 1)
-		nlen = LAR_MAX_PATHLEN - 1;
-
-	memcpy((void *) _larent.name, ((char *) header + sizeof(*header)),
-		nlen);
-
-	_larent.name[nlen] = 0;
-
-	lar->cindex++;
-
-	return (struct larent *) &_larent;
-}
-
-void rewindlar(struct LAR *lar)
-{
-	if (lar != NULL)
-		lar->cindex = 0;
-}
-
-static struct lar_header *get_header_by_name(struct LAR *lar, const char *name)
-{
-	struct lar_header *header;
-	int i;
-
-	for(i = 0; ; i++) {
-		header = lar_get_header(lar, i);
-
-		if (header == NULL)
-			return NULL;
-
-		if (!strcmp(name, ((char *) header + sizeof(*header))))
-			return header;
-	}
-}
-
-int larstat(struct LAR *lar, const char *path, struct larstat *buf)
-{
-	struct lar_header *header = get_header_by_name(lar, path);
-
-	if (header == NULL || buf == NULL)
-		return -1;
-
-	buf->len = ntohl(header->len);
-	buf->reallen = ntohl(header->reallen);
-	buf->checksum = ntohl(header->checksum);
-	buf->compchecksum = ntohl(header->compchecksum);
-	buf->compression = ntohl(header->compression);
-	buf->entry = ntohll(header->entry);
-	buf->loadaddress = ntohll(header->loadaddress);
-	buf->offset = ((u32) header - (u32) lar->start) + ntohl(header->offset);
-
-	return 0;
-}
-
-void * larfptr(struct LAR *lar, const char *filename)
-{
-	struct lar_header *header = get_header_by_name(lar, filename);
-
-	if (header == NULL)
-		return NULL;
-
-	return (void *) ((u8 *) header + ntohl(header->offset));
-}
-
-/**
- * Verify the checksum on a particular LAR entry
- *
- * @param lar A pointer to the LAR stream
- * @param filename The lar entry to verify
- * @return Return 1 if the entry is valid, 0 if it is not, or -1
- * on error
- */
-
-int lfverify(struct LAR *lar, const char *filename)
-{
-	struct lar_header *header = get_header_by_name(lar, filename);
-
-	u8 *ptr = (u8 *) header;
-	int len = ntohl(header->len) + ntohl(header->offset);
-	int offset;
-	u32 csum = 0;
-
-	if (header == NULL)
-		return -1;
-
-	/* The checksum needs to be calulated on entire data section,
-	 * including any padding for the 16 byte alignment (which should
-	 * be zeros
-	 */
-
-	len = (len + 15) & 0xFFFFFFF0;
-
-	for(offset = 0; offset < len; offset += 4) {
-		csum += *((u32 *) (ptr + offset));
-	}
-
-	return (csum == 0xFFFFFFFF) ? 1 : 0;
-}
-
-struct LFILE * lfopen(struct LAR *lar, const char *filename)
-{
-	struct LFILE *file;
-	struct lar_header *header = get_header_by_name(lar, filename);
-
-	if (header == NULL)
-		return NULL;
-
-	/* FIXME: What other validations do we want to do on the file here? */
-
-	file = malloc(sizeof(struct LFILE));
-
-	if (file == NULL)
-		return NULL;
-
-	file->lar = lar;
-	file->header = header;
-	file->size = ntohl(header->len);
-	file->start = ((u8 *) header + ntohl(header->offset));
-	file->offset = 0;
-
-	return file;
-}
-
-void *lfmap(struct LFILE *file, int offset)
-{
-	if (file == NULL)
-		return (void *) -1;
-
-	if (offset > file->size)
-		return (void *) -1;
-
-	return (void *) (file->start + offset);
-};
-
-int lfread(void *ptr, size_t size, size_t nmemb, struct LFILE *stream)
-{
-	size_t tsize, actual;
-	size_t remain = stream->size - stream->offset;
-
-	if (!stream || !remain)
-		return 0;
-
-	tsize = (size * nmemb);
-	actual = (tsize > remain) ? remain : tsize;
-
-	memcpy(ptr, (void *) (stream->start + stream->offset), actual);
-	stream->offset += actual;
-
-	return actual;
-}
-
-int lfseek(struct LFILE *file, long offset, int whence)
-{
-	int o = file->offset;
-
-	switch(whence) {
-	case SEEK_SET:
-		o = offset;
-		break;
-	case SEEK_CUR:
-		o += offset;
-		break;
-
-	case SEEK_END:
-		return -1;
-	}
-
-	if (o < 0 || o > file->size)
-		return -1;
-
-	file->offset = o;
-	return file->offset;
-}
-
-int lfclose(struct LFILE *file)
-{
-	if (file)
-		free(file);
-	return 0;
-}



More information about the coreboot-gerrit mailing list