commonlib: Add commonlib/bsd

This patch creates a new commonlib/bsd subdirectory with a similar
purpose to the existing commonlib, with the difference that all files
under this subdirectory shall be licensed under the BSD-3-Clause license
(or compatible permissive license). The goal is to allow more code to be
shared with libpayload in the future.

Initially, I'm going to move a few files there that have already been
BSD-licensed in the existing commonlib. I am also exracting most
contents of the often-needed <commonlib/helpers.h> as long as they have
either been written by me (and are hereby relicensed) or have an
existing equivalent in BSD-licensed libpayload code. I am also
relicensing <commonlib/compression.h> (written by me) and
<commonlib/compiler.h> (same stuff exists in libpayload).

Finally, I am extracting the cb_err error code definitions from
<types.h> into a new BSD-licensed header so that future commonlib/bsd
code can build upon a common set of error values. I am making the
assumption here that the enum constants and the half-sentence fragments
of documentation next to them by themselves do not meet the threshold of
copyrightability.

Change-Id: I316cea70930f131e8e93d4218542ddb5ae4b63a2
Signed-off-by: Julius Werner <jwerner@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/38420
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <siro@das-labor.org>
diff --git a/src/arch/arm64/fit_payload.c b/src/arch/arm64/fit_payload.c
index 002df44..7009a3f 100644
--- a/src/arch/arm64/fit_payload.c
+++ b/src/arch/arm64/fit_payload.c
@@ -12,13 +12,12 @@
  * GNU General Public License for more details.
  */
 
+#include <cbfs.h>
+#include <commonlib/bsd/compression.h>
 #include <console/console.h>
 #include <bootmem.h>
 #include <program_loading.h>
 #include <string.h>
-#include <commonlib/compression.h>
-#include <commonlib/cbfs_serialized.h>
-#include <commonlib/helpers.h>
 #include <lib.h>
 #include <fit.h>
 #include <endian.h>
diff --git a/src/arch/riscv/boot.c b/src/arch/riscv/boot.c
index aaaac48..f9f94a7 100644
--- a/src/arch/riscv/boot.c
+++ b/src/arch/riscv/boot.c
@@ -19,7 +19,7 @@
 #include <arch/encoding.h>
 #include <arch/smp/smp.h>
 #include <mcall.h>
-#include <commonlib/cbfs_serialized.h>
+#include <cbfs.h>
 #include <console/console.h>
 
 struct arch_prog_run_args {
diff --git a/src/arch/riscv/fit_payload.c b/src/arch/riscv/fit_payload.c
index 89263d3..63cda84 100644
--- a/src/arch/riscv/fit_payload.c
+++ b/src/arch/riscv/fit_payload.c
@@ -14,11 +14,11 @@
  * GNU General Public License for more details.
  */
 
+#include <cbfs.h>
+#include <commonlib/bsd/compression.h>
 #include <console/console.h>
 #include <bootmem.h>
 #include <program_loading.h>
-#include <commonlib/compression.h>
-#include <commonlib/cbfs_serialized.h>
 #include <lib.h>
 #include <fit.h>
 #include <endian.h>
diff --git a/src/arch/riscv/sbi.c b/src/arch/riscv/sbi.c
index e0d7c60..2770189 100644
--- a/src/arch/riscv/sbi.c
+++ b/src/arch/riscv/sbi.c
@@ -15,7 +15,6 @@
 
 #include <mcall.h>
 #include <stdint.h>
-#include <commonlib/compiler.h>
 #include <arch/exception.h>
 #include <sbi.h>
 #include <vm.h>
diff --git a/src/arch/riscv/smp.c b/src/arch/riscv/smp.c
index b32e4b8..95d116a 100644
--- a/src/arch/riscv/smp.c
+++ b/src/arch/riscv/smp.c
@@ -18,7 +18,6 @@
 #include <arch/smp/smp.h>
 #include <arch/smp/spinlock.h>
 #include <mcall.h>
-#include <commonlib/compiler.h>
 #include <console/console.h>
 
 void smp_pause(int working_hartid)
diff --git a/src/commonlib/Makefile.inc b/src/commonlib/Makefile.inc
index b6e8913..5bd6cf9 100644
--- a/src/commonlib/Makefile.inc
+++ b/src/commonlib/Makefile.inc
@@ -30,11 +30,11 @@
 smm-y += cbfs.c
 postcar-y += cbfs.c
 
-decompressor-y += lz4_wrapper.c
-bootblock-y += lz4_wrapper.c
-verstage-y += lz4_wrapper.c
-romstage-y += lz4_wrapper.c
-ramstage-y += lz4_wrapper.c
-postcar-y += lz4_wrapper.c
+decompressor-y += bsd/lz4_wrapper.c
+bootblock-y += bsd/lz4_wrapper.c
+verstage-y += bsd/lz4_wrapper.c
+romstage-y += bsd/lz4_wrapper.c
+ramstage-y += bsd/lz4_wrapper.c
+postcar-y += bsd/lz4_wrapper.c
 
 ramstage-y += sort.c
diff --git a/src/commonlib/bsd/include/commonlib/bsd/cb_err.h b/src/commonlib/bsd/include/commonlib/bsd/cb_err.h
new file mode 100644
index 0000000..ab419a7
--- /dev/null
+++ b/src/commonlib/bsd/include/commonlib/bsd/cb_err.h
@@ -0,0 +1,42 @@
+/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-or-later */
+
+#ifndef _COMMONLIB_BSD_CB_ERR_H_
+#define _COMMONLIB_BSD_CB_ERR_H_
+
+#include <stdint.h>
+
+/**
+ * coreboot error codes
+ *
+ * Common error definitions that can be used for any function. All error values
+ * should be negative -- when useful, positive values can also be used to denote
+ * success. Allocate a new group or errors every 100 values.
+ */
+enum cb_err {
+	CB_SUCCESS = 0,		/**< Call completed successfully */
+	CB_ERR = -1,		/**< Generic error code */
+	CB_ERR_ARG = -2,	/**< Invalid argument */
+
+	/* NVRAM/CMOS errors */
+	CB_CMOS_OTABLE_DISABLED = -100,		/**< Option table disabled */
+	CB_CMOS_LAYOUT_NOT_FOUND = -101,	/**< Layout file not found */
+	CB_CMOS_OPTION_NOT_FOUND = -102,	/**< Option string not found */
+	CB_CMOS_ACCESS_ERROR = -103,		/**< CMOS access error */
+	CB_CMOS_CHECKSUM_INVALID = -104,	/**< CMOS checksum is invalid */
+
+	/* Keyboard test failures */
+	CB_KBD_CONTROLLER_FAILURE = -200,
+	CB_KBD_INTERFACE_FAILURE = -201,
+
+	/* I2C controller failures */
+	CB_I2C_NO_DEVICE	= -300,	/**< Device is not responding */
+	CB_I2C_BUSY		= -301,	/**< Device tells it's busy */
+	CB_I2C_PROTOCOL_ERROR	= -302,	/**< Data lost or spurious slave
+					     device response, try again? */
+	CB_I2C_TIMEOUT		= -303, /**< Transmission timed out */
+};
+
+/* Don't typedef the enum directly, so the size is unambiguous for serialization. */
+typedef int32_t cb_err_t;
+
+#endif	/* _COMMONLIB_BSD_CB_ERR_H_ */
diff --git a/src/commonlib/include/commonlib/cbfs_serialized.h b/src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h
similarity index 67%
rename from src/commonlib/include/commonlib/cbfs_serialized.h
rename to src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h
index d3a18c6..d2fc626 100644
--- a/src/commonlib/include/commonlib/cbfs_serialized.h
+++ b/src/commonlib/bsd/include/commonlib/bsd/cbfs_serialized.h
@@ -1,48 +1,4 @@
-/*
- * This file is part of the coreboot project.
- *
- * Copyright (C) 2008 Jordan Crouse <jordan@cosmicpenguin.net>
- * Copyright (C) 2012 Google, Inc.
- * Copyright (C) 2013 The Chromium OS Authors. All rights reserved.
- *
- * 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.
- * ---------------------------------------------------------------------------
- * 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.
- * ---------------------------------------------------------------------------
- */
+/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */
 
 #ifndef _CBFS_SERIALIZED_H_
 #define _CBFS_SERIALIZED_H_
diff --git a/src/commonlib/include/commonlib/compiler.h b/src/commonlib/bsd/include/commonlib/bsd/compiler.h
similarity index 72%
rename from src/commonlib/include/commonlib/compiler.h
rename to src/commonlib/bsd/include/commonlib/bsd/compiler.h
index 972a229..ee2ff88 100644
--- a/src/commonlib/include/commonlib/compiler.h
+++ b/src/commonlib/bsd/include/commonlib/bsd/compiler.h
@@ -1,18 +1,7 @@
-/*
- * This file is part of the coreboot project.
- *
- * 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.
- */
+/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */
 
-#ifndef _COMMONLIB_COMPILER_H_
-#define _COMMONLIB_COMPILER_H_
+#ifndef _COMMONLIB_BSD_COMPILER_H_
+#define _COMMONLIB_BSD_COMPILER_H_
 
 #ifndef __packed
 #if defined(__WIN32) || defined(__WIN64)
diff --git a/src/commonlib/include/commonlib/compression.h b/src/commonlib/bsd/include/commonlib/bsd/compression.h
similarity index 62%
rename from src/commonlib/include/commonlib/compression.h
rename to src/commonlib/bsd/include/commonlib/bsd/compression.h
index 3988ef8..873e7e4 100644
--- a/src/commonlib/include/commonlib/compression.h
+++ b/src/commonlib/bsd/include/commonlib/bsd/compression.h
@@ -1,15 +1,4 @@
-/*
- * This file is part of the coreboot project.
- *
- * 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.
- */
+/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */
 
 #ifndef _COMMONLIB_COMPRESSION_H_
 #define _COMMONLIB_COMPRESSION_H_
diff --git a/src/commonlib/bsd/include/commonlib/bsd/fmap_serialized.h b/src/commonlib/bsd/include/commonlib/bsd/fmap_serialized.h
new file mode 100644
index 0000000..3d328c4
--- /dev/null
+++ b/src/commonlib/bsd/include/commonlib/bsd/fmap_serialized.h
@@ -0,0 +1,41 @@
+/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */
+
+#ifndef FLASHMAP_SERIALIZED_H__
+#define FLASHMAP_SERIALIZED_H__
+
+#include <stdint.h>
+
+#define FMAP_SIGNATURE		"__FMAP__"
+#define FMAP_VER_MAJOR		1	/* this header's FMAP minor version */
+#define FMAP_VER_MINOR		1	/* this header's FMAP minor version */
+#define FMAP_STRLEN		32	/* maximum length for strings, */
+					/* including null-terminator */
+
+enum fmap_flags {
+	FMAP_AREA_STATIC	= 1 << 0,
+	FMAP_AREA_COMPRESSED	= 1 << 1,
+	FMAP_AREA_RO		= 1 << 2,
+	FMAP_AREA_PRESERVE	= 1 << 3,
+};
+
+/* Mapping of volatile and static regions in firmware binary */
+struct fmap_area {
+	uint32_t offset;                /* offset relative to base */
+	uint32_t size;                  /* size in bytes */
+	uint8_t  name[FMAP_STRLEN];     /* descriptive name */
+	uint16_t flags;                 /* flags for this area */
+}  __packed;
+
+struct fmap {
+	uint8_t  signature[8];		/* "__FMAP__" (0x5F5F464D41505F5F) */
+	uint8_t  ver_major;		/* major version */
+	uint8_t  ver_minor;		/* minor version */
+	uint64_t base;			/* address of the firmware binary */
+	uint32_t size;			/* size of firmware binary in bytes */
+	uint8_t  name[FMAP_STRLEN];	/* name of this firmware binary */
+	uint16_t nareas;		/* number of areas described by
+					   fmap_areas[] below */
+	struct fmap_area areas[];
+} __packed;
+
+#endif	/* FLASHMAP_SERIALIZED_H__ */
diff --git a/src/commonlib/bsd/include/commonlib/bsd/helpers.h b/src/commonlib/bsd/include/commonlib/bsd/helpers.h
new file mode 100644
index 0000000..a305df0
--- /dev/null
+++ b/src/commonlib/bsd/include/commonlib/bsd/helpers.h
@@ -0,0 +1,89 @@
+/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */
+
+#ifndef COMMONLIB_BSD_HELPERS_H
+#define COMMONLIB_BSD_HELPERS_H
+
+#ifndef __ASSEMBLER__
+#include <commonlib/bsd/compiler.h>
+#include <stddef.h>
+#endif
+
+#ifndef ARRAY_SIZE
+#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
+#endif
+
+#define ALIGN(x, a)             __ALIGN_MASK(x, (__typeof__(x))(a)-1UL)
+#define __ALIGN_MASK(x, mask)   (((x)+(mask))&~(mask))
+#define ALIGN_UP(x, a)          ALIGN((x), (a))
+#define ALIGN_DOWN(x, a)        ((x) & ~((__typeof__(x))(a)-1UL))
+#define IS_ALIGNED(x, a)        (((x) & ((__typeof__(x))(a)-1UL)) == 0)
+
+/* Double-evaluation unsafe min/max, for bitfields and outside of functions */
+#define __CMP_UNSAFE(a, b, op) ((a) op (b) ? (a) : (b))
+#define MIN_UNSAFE(a, b) __CMP_UNSAFE(a, b, <)
+#define MAX_UNSAFE(a, b) __CMP_UNSAFE(a, b, >)
+
+#define __CMP_SAFE(a, b, op, var_a, var_b) ({ \
+	__TYPEOF_UNLESS_CONST(a, b) var_a = (a); \
+	__TYPEOF_UNLESS_CONST(b, a) var_b = (b); \
+	var_a op var_b ? var_a : var_b; \
+})
+
+#define __CMP(a, b, op) __builtin_choose_expr( \
+	__builtin_constant_p(a) && __builtin_constant_p(b), \
+	__CMP_UNSAFE(a, b, op), __CMP_SAFE(a, b, op, __TMPNAME, __TMPNAME))
+
+#ifndef MIN
+#define MIN(a, b) __CMP(a, b, <)
+#endif
+#ifndef MAX
+#define MAX(a, b) __CMP(a, b, >)
+#endif
+
+#ifndef ABS
+#define ABS(a) ({ \
+	__typeof__(a) _abs_local_a = (a); \
+	(_abs_local_a < 0) ? (-_abs_local_a) : _abs_local_a; \
+})
+#endif
+
+#define IS_POWER_OF_2(x) ({ \
+	__typeof__(x) _power_local_x = (x); \
+	(_power_local_x & (_power_local_x - 1)) == 0; \
+})
+
+#define DIV_ROUND_UP(x, y) ({ \
+	__typeof__(x) _div_local_x = (x); \
+	__typeof__(y) _div_local_y = (y); \
+	(_div_local_x + _div_local_y - 1) / _div_local_y; \
+})
+
+#define SWAP(a, b) do { \
+	__typeof__(&(a)) _swap_local_a = &(a); \
+	__typeof__(&(b)) _swap_local_b = &(b); \
+	__typeof__(a) _swap_local_tmp = *_swap_local_a; \
+	*_swap_local_a = *_swap_local_b; \
+	*_swap_local_b = _swap_local_tmp; \
+} while (0)
+
+/* Standard units. */
+#define KiB (1<<10)
+#define MiB (1<<20)
+#define GiB (1<<30)
+
+#define KHz (1000)
+#define MHz (1000 * KHz)
+#define GHz (1000 * MHz)
+
+#ifndef offsetof
+#define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
+#endif
+
+#define check_member(structure, member, offset) _Static_assert( \
+	offsetof(struct structure, member) == offset, \
+	"`struct " #structure "` offset for `" #member "` is not " #offset)
+
+/* Calculate size of structure member. */
+#define member_size(type, member)	(sizeof(((type *)0)->member))
+
+#endif /* COMMONLIB_BSD_HELPERS_H */
diff --git a/src/commonlib/lz4.c.inc b/src/commonlib/bsd/lz4.c.inc
similarity index 100%
rename from src/commonlib/lz4.c.inc
rename to src/commonlib/bsd/lz4.c.inc
diff --git a/src/commonlib/lz4_wrapper.c b/src/commonlib/bsd/lz4_wrapper.c
similarity index 70%
rename from src/commonlib/lz4_wrapper.c
rename to src/commonlib/bsd/lz4_wrapper.c
index 474df64..2367afc 100644
--- a/src/commonlib/lz4_wrapper.c
+++ b/src/commonlib/bsd/lz4_wrapper.c
@@ -1,37 +1,8 @@
-/*
- * Copyright 2015-2016 Google 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.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- *
- * 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.
- */
+/* SPDX-License-Identifier: BSD-3-Clause OR GPL-2.0-only */
 
-#include <commonlib/compression.h>
-#include <commonlib/endian.h>
-#include <commonlib/helpers.h>
+#include <commonlib/bsd/compression.h>
+#include <commonlib/bsd/helpers.h>
+#include <endian.h>
 #include <stdint.h>
 #include <string.h>
 
@@ -41,7 +12,7 @@
  * access support), we can easily write the ones we need ourselves. */
 static uint16_t LZ4_readLE16(const void *src)
 {
-	return read_le16(src);
+	return le16toh(*(const uint16_t *)src);
 }
 static void LZ4_copy8(void *dst, const void *src)
 {
@@ -143,7 +114,7 @@
 			return 0;	/* input overrun */
 
 		/* We assume there's always only a single, standard frame. */
-		if (read_le32(&h->magic) != LZ4F_MAGICNUMBER || h->version != 1)
+		if (le32toh(h->magic) != LZ4F_MAGICNUMBER || h->version != 1)
 			return 0;	/* unknown format */
 		if (h->reserved0 || h->reserved1 || h->reserved2)
 			return 0;	/* reserved must be zero */
@@ -158,7 +129,9 @@
 	}
 
 	while (1) {
-		struct lz4_block_header b = { { .raw = read_le32(in) } };
+		struct lz4_block_header b = {
+			{ .raw = le32toh(*(const uint32_t *)in) }
+		};
 		in += sizeof(struct lz4_block_header);
 
 		if ((size_t)(in - src) + b.size > srcn)
diff --git a/src/commonlib/include/commonlib/cbfs.h b/src/commonlib/include/commonlib/cbfs.h
index b0aa9d3..4701730 100644
--- a/src/commonlib/include/commonlib/cbfs.h
+++ b/src/commonlib/include/commonlib/cbfs.h
@@ -14,7 +14,7 @@
 #ifndef _COMMONLIB_CBFS_H_
 #define _COMMONLIB_CBFS_H_
 
-#include <commonlib/cbfs_serialized.h>
+#include <commonlib/bsd/cbfs_serialized.h>
 #include <commonlib/region.h>
 #include <vb2_api.h>
 
diff --git a/src/commonlib/include/commonlib/fmap_serialized.h b/src/commonlib/include/commonlib/fmap_serialized.h
deleted file mode 100644
index 53a09af..0000000
--- a/src/commonlib/include/commonlib/fmap_serialized.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Copyright 2010, Google Inc.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are
- * met:
- *
- *    * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *    * 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.
- *    * Neither the name of Google Inc. nor the names of its
- * contributors may be used to endorse or promote products derived from
- * this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS 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 COPYRIGHT
- * OWNER 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.
- *
- * Alternatively, this software may be distributed under the terms of the
- * GNU General Public License ("GPL") version 2 as published by the Free
- * Software Foundation.
- */
-
-#ifndef FLASHMAP_SERIALIZED_H__
-#define FLASHMAP_SERIALIZED_H__
-
-#include <stdint.h>
-
-#define FMAP_SIGNATURE		"__FMAP__"
-#define FMAP_VER_MAJOR		1	/* this header's FMAP minor version */
-#define FMAP_VER_MINOR		1	/* this header's FMAP minor version */
-#define FMAP_STRLEN		32	/* maximum length for strings, */
-					/* including null-terminator */
-
-enum fmap_flags {
-	FMAP_AREA_STATIC	= 1 << 0,
-	FMAP_AREA_COMPRESSED	= 1 << 1,
-	FMAP_AREA_RO		= 1 << 2,
-	FMAP_AREA_PRESERVE	= 1 << 3,
-};
-
-/* Mapping of volatile and static regions in firmware binary */
-struct fmap_area {
-	uint32_t offset;                /* offset relative to base */
-	uint32_t size;                  /* size in bytes */
-	uint8_t  name[FMAP_STRLEN];     /* descriptive name */
-	uint16_t flags;                 /* flags for this area */
-}  __packed;
-
-struct fmap {
-	uint8_t  signature[8];		/* "__FMAP__" (0x5F5F464D41505F5F) */
-	uint8_t  ver_major;		/* major version */
-	uint8_t  ver_minor;		/* minor version */
-	uint64_t base;			/* address of the firmware binary */
-	uint32_t size;			/* size of firmware binary in bytes */
-	uint8_t  name[FMAP_STRLEN];	/* name of this firmware binary */
-	uint16_t nareas;		/* number of areas described by
-					   fmap_areas[] below */
-	struct fmap_area areas[];
-} __packed;
-
-#endif	/* FLASHMAP_SERIALIZED_H__ */
diff --git a/src/commonlib/include/commonlib/helpers.h b/src/commonlib/include/commonlib/helpers.h
index f07b6c2..a5fe87d 100644
--- a/src/commonlib/include/commonlib/helpers.h
+++ b/src/commonlib/include/commonlib/helpers.h
@@ -13,71 +13,12 @@
 
 #ifndef COMMONLIB_HELPERS_H
 #define COMMONLIB_HELPERS_H
-/* This file is for helpers for both coreboot firmware and its utilities. */
 
-#ifndef __ASSEMBLER__
-#include <commonlib/compiler.h>
-#include <stddef.h>
-#endif
+/* This file is for helpers for both coreboot firmware and its utilities. Most
+   of this has moved into <commonlib/bsd/helpers.h> now, this wrapper is just
+   for the stuff that nobody bothered to confirm BSD-licensability of yet. */
 
-#ifndef ARRAY_SIZE
-#define ARRAY_SIZE(a) (sizeof(a) / sizeof((a)[0]))
-#endif
-
-#define ALIGN(x, a)             __ALIGN_MASK(x, (__typeof__(x))(a)-1UL)
-#define __ALIGN_MASK(x, mask)   (((x)+(mask))&~(mask))
-#define ALIGN_UP(x, a)          ALIGN((x), (a))
-#define ALIGN_DOWN(x, a)        ((x) & ~((__typeof__(x))(a)-1UL))
-#define IS_ALIGNED(x, a)        (((x) & ((__typeof__(x))(a)-1UL)) == 0)
-
-/* Double-evaluation unsafe min/max, for bitfields and outside of functions */
-#define __CMP_UNSAFE(a, b, op) ((a) op (b) ? (a) : (b))
-#define MIN_UNSAFE(a, b) __CMP_UNSAFE(a, b, <)
-#define MAX_UNSAFE(a, b) __CMP_UNSAFE(a, b, >)
-
-#define __CMP_SAFE(a, b, op, var_a, var_b) ({ \
-	__TYPEOF_UNLESS_CONST(a, b) var_a = (a); \
-	__TYPEOF_UNLESS_CONST(b, a) var_b = (b); \
-	var_a op var_b ? var_a : var_b; \
-})
-
-
-#define __CMP(a, b, op) __builtin_choose_expr( \
-	__builtin_constant_p(a) && __builtin_constant_p(b), \
-	__CMP_UNSAFE(a, b, op), __CMP_SAFE(a, b, op, __TMPNAME, __TMPNAME))
-
-#ifndef MIN
-#define MIN(a, b) __CMP(a, b, <)
-#endif
-#ifndef MAX
-#define MAX(a, b) __CMP(a, b, >)
-#endif
-
-#ifndef ABS
-#define ABS(a) ({ \
-	__typeof__(a) _abs_local_a = (a); \
-	(_abs_local_a < 0) ? (-_abs_local_a) : _abs_local_a; \
-})
-#endif
-
-#define IS_POWER_OF_2(x) ({ \
-	__typeof__(x) _power_local_x = (x); \
-	(_power_local_x & (_power_local_x - 1)) == 0; \
-})
-
-#define DIV_ROUND_UP(x, y) ({ \
-	__typeof__(x) _div_local_x = (x); \
-	__typeof__(y) _div_local_y = (y); \
-	(_div_local_x + _div_local_y - 1) / _div_local_y; \
-})
-
-#define SWAP(a, b) do { \
-	__typeof__(&(a)) _swap_local_a = &(a); \
-	__typeof__(&(b)) _swap_local_b = &(b); \
-	__typeof__(a) _swap_local_tmp = *_swap_local_a; \
-	*_swap_local_a = *_swap_local_b; \
-	*_swap_local_b = _swap_local_tmp; \
-} while (0)
+#include <commonlib/bsd/helpers.h>
 
 /*
  * Divide positive or negative dividend by positive divisor and round
@@ -93,25 +34,6 @@
 		((_div_local_x - (_div_local_d / 2)) / _div_local_d);	\
 })
 
-/* Standard units. */
-#define KiB (1<<10)
-#define MiB (1<<20)
-#define GiB (1<<30)
-/* Could we ever run into this one? I hope we get this much memory! */
-#define TiB (1<<40)
-
-#define KHz (1000)
-#define MHz (1000 * KHz)
-#define GHz (1000 * MHz)
-
-#ifndef offsetof
-#define offsetof(TYPE, MEMBER) __builtin_offsetof(TYPE, MEMBER)
-#endif
-
-#define check_member(structure, member, offset) _Static_assert( \
-	offsetof(struct structure, member) == offset, \
-	"`struct " #structure "` offset for `" #member "` is not " #offset)
-
 /**
  * container_of - cast a member of a structure out to the containing structure
  * @param ptr:    the pointer to the member.
@@ -123,9 +45,6 @@
 	const __typeof__(((type *)0)->member) *__mptr = (ptr);	\
 	(type *)((char *)__mptr - offsetof(type, member)); })
 
-/* Calculate size of structure member. */
-#define member_size(type, member)	(sizeof(((type *)0)->member))
-
 #ifndef __unused
 #define __unused __attribute__((unused))
 #endif
diff --git a/src/include/fmap.h b/src/include/fmap.h
index 649ecc0..9c974ce 100644
--- a/src/include/fmap.h
+++ b/src/include/fmap.h
@@ -16,8 +16,8 @@
 #ifndef _FMAP_H_
 #define _FMAP_H_
 
+#include <commonlib/bsd/fmap_serialized.h>
 #include <commonlib/region.h>
-#include <commonlib/fmap_serialized.h>
 
 /* Locate the named area in the fmap and fill in a region device representing
  * that area. The region is a sub-region of the readonly boot media. Return
diff --git a/src/include/types.h b/src/include/types.h
index 30f243f..ffb14c9 100644
--- a/src/include/types.h
+++ b/src/include/types.h
@@ -17,6 +17,7 @@
 #define __TYPES_H
 
 /* types.h is supposed to provide the standard headers defined in here: */
+#include <commonlib/bsd/cb_err.h>
 #include <stdbool.h>
 #include <stdint.h>
 #include <stddef.h>
@@ -30,36 +31,4 @@
 #define BIT(x)				(1ul << (x))
 #endif
 
-/**
- * coreboot error codes
- *
- * When building functions that return a status or an error code, use cb_err as
- * the return type. When failure reason needs to be communicated by the return
- * value, define a it here. Start new enum groups with values in decrements of
- * 100.
- */
-enum cb_err {
-	CB_SUCCESS = 0,		/**< Call completed successfully */
-	CB_ERR = -1,		/**< Generic error code */
-	CB_ERR_ARG = -2,	/**< Invalid argument */
-
-	/* NVRAM/CMOS errors */
-	CB_CMOS_OTABLE_DISABLED = -100,		/**< Option table disabled */
-	CB_CMOS_LAYOUT_NOT_FOUND = -101,	/**< Layout file not found */
-	CB_CMOS_OPTION_NOT_FOUND = -102,	/**< Option string not found */
-	CB_CMOS_ACCESS_ERROR = -103,		/**< CMOS access error */
-	CB_CMOS_CHECKSUM_INVALID = -104,	/**< CMOS checksum is invalid */
-
-	/* Keyboard test failures */
-	CB_KBD_CONTROLLER_FAILURE = -200,
-	CB_KBD_INTERFACE_FAILURE = -201,
-
-	/* I2C controller failures */
-	CB_I2C_NO_DEVICE	= -300,	/**< Device is not responding */
-	CB_I2C_BUSY		= -301,	/**< Device tells it's busy */
-	CB_I2C_PROTOCOL_ERROR	= -302,	/**< Data lost or spurious slave
-					     device response, try again? */
-	CB_I2C_TIMEOUT		= -303, /**< Transmission timed out */
-};
-
 #endif /* __TYPES_H */
diff --git a/src/lib/cbfs.c b/src/lib/cbfs.c
index e31c7cc..c712f76 100644
--- a/src/lib/cbfs.c
+++ b/src/lib/cbfs.c
@@ -20,7 +20,7 @@
 #include <stdlib.h>
 #include <boot_device.h>
 #include <cbfs.h>
-#include <commonlib/compression.h>
+#include <commonlib/bsd/compression.h>
 #include <endian.h>
 #include <lib.h>
 #include <symbols.h>
diff --git a/src/lib/decompressor.c b/src/lib/decompressor.c
index eb7f16c..9471059 100644
--- a/src/lib/decompressor.c
+++ b/src/lib/decompressor.c
@@ -15,7 +15,7 @@
  */
 
 #include <bootblock_common.h>
-#include <commonlib/compression.h>
+#include <commonlib/bsd/compression.h>
 #include <delay.h>
 #include <program_loading.h>
 #include <symbols.h>
diff --git a/src/lib/fit.c b/src/lib/fit.c
index 831e518..edac192 100644
--- a/src/lib/fit.c
+++ b/src/lib/fit.c
@@ -16,6 +16,7 @@
  */
 
 #include <assert.h>
+#include <cbfs.h>
 #include <console/console.h>
 #include <ctype.h>
 #include <endian.h>
@@ -27,7 +28,6 @@
 #include <memrange.h>
 #include <fit.h>
 #include <boardid.h>
-#include <commonlib/cbfs_serialized.h>
 #include <commonlib/stdlib.h>
 
 static struct list_node image_nodes;
diff --git a/src/lib/fit_payload.c b/src/lib/fit_payload.c
index 1b6c986..83e9b8e 100644
--- a/src/lib/fit_payload.c
+++ b/src/lib/fit_payload.c
@@ -15,6 +15,8 @@
  * GNU General Public License for more details.
  */
 
+#include <cbfs.h>
+#include <commonlib/bsd/compression.h>
 #include <console/console.h>
 #include <bootmem.h>
 #include <cbmem.h>
@@ -25,8 +27,6 @@
 #include <program_loading.h>
 #include <timestamp.h>
 #include <string.h>
-#include <commonlib/cbfs_serialized.h>
-#include <commonlib/compression.h>
 #include <lib.h>
 #include <fit_payload.h>
 #include <boardid.h>
diff --git a/src/lib/fmap.c b/src/lib/fmap.c
index 9d2b4e7..c8843a7 100644
--- a/src/lib/fmap.c
+++ b/src/lib/fmap.c
@@ -17,7 +17,6 @@
 #include <cbmem.h>
 #include <console/console.h>
 #include <fmap.h>
-#include <commonlib/fmap_serialized.h>
 #include <stddef.h>
 #include <string.h>
 #include <symbols.h>
diff --git a/src/lib/selfboot.c b/src/lib/selfboot.c
index 8cf7a6f..11fdff3 100644
--- a/src/lib/selfboot.c
+++ b/src/lib/selfboot.c
@@ -15,7 +15,7 @@
  * GNU General Public License for more details.
  */
 
-#include <commonlib/compression.h>
+#include <commonlib/bsd/compression.h>
 #include <commonlib/endian.h>
 #include <console/console.h>
 #include <stdint.h>
diff --git a/src/mainboard/google/poppy/variants/nami/mainboard.c b/src/mainboard/google/poppy/variants/nami/mainboard.c
index e3855bd..6d54e17 100644
--- a/src/mainboard/google/poppy/variants/nami/mainboard.c
+++ b/src/mainboard/google/poppy/variants/nami/mainboard.c
@@ -18,7 +18,6 @@
 #include <baseboard/variants.h>
 #include <cbfs.h>
 #include <chip.h>
-#include <commonlib/cbfs_serialized.h>
 #include <console/console.h>
 #include <device/device.h>
 #include <drivers/intel/gma/opregion.h>
diff --git a/src/soc/nvidia/tegra124/lp0/Makefile b/src/soc/nvidia/tegra124/lp0/Makefile
index e82edaa..a4bbc07 100644
--- a/src/soc/nvidia/tegra124/lp0/Makefile
+++ b/src/soc/nvidia/tegra124/lp0/Makefile
@@ -35,7 +35,7 @@
 	$(CC) -marm -march=armv4t -mno-unaligned-access -nostdlib -static \
 		-Os -fpie -Wl,--build-id=none -ggdb3 -T tegra_lp0_resume.ld \
 		-include ../../../../include/stdint.h \
-		-include ../../../../commonlib/include/commonlib/compiler.h \
+		-include ../../../../commonlib/bsd/include/commonlib/bsd/compiler.h \
 		-o $@ $(filter %.c,$+)
 
 tegra_lp0_resume.fw: tegra_lp0_resume.elf
diff --git a/src/soc/nvidia/tegra210/lp0/Makefile b/src/soc/nvidia/tegra210/lp0/Makefile
index e82edaa..a4bbc07 100644
--- a/src/soc/nvidia/tegra210/lp0/Makefile
+++ b/src/soc/nvidia/tegra210/lp0/Makefile
@@ -35,7 +35,7 @@
 	$(CC) -marm -march=armv4t -mno-unaligned-access -nostdlib -static \
 		-Os -fpie -Wl,--build-id=none -ggdb3 -T tegra_lp0_resume.ld \
 		-include ../../../../include/stdint.h \
-		-include ../../../../commonlib/include/commonlib/compiler.h \
+		-include ../../../../commonlib/bsd/include/commonlib/bsd/compiler.h \
 		-o $@ $(filter %.c,$+)
 
 tegra_lp0_resume.fw: tegra_lp0_resume.elf
diff --git a/src/vendorcode/amd/pi/00670F00/Makefile.inc b/src/vendorcode/amd/pi/00670F00/Makefile.inc
index f6cd8eb..34dae71 100644
--- a/src/vendorcode/amd/pi/00670F00/Makefile.inc
+++ b/src/vendorcode/amd/pi/00670F00/Makefile.inc
@@ -75,12 +75,12 @@
 
 $(call src-to-obj,libagesa,$1): $(agesa_src_path)/$(notdir $1) $(obj)/config.h $(src)/include/kconfig.h
 	@printf "    CC         $$(subst $(obj)/,,$$(@))\n"
-	$(CC_libagesa) -c -MMD $(CFLAGS_libagesa) $(AGESA_CFLAGS)             \
-	               $(AGESA_INC)                                           \
-	               -include $(src)/include/kconfig.h                      \
-	               -include $(src)/include/rules.h                        \
-	               -include $(src)/commonlib/include/commonlib/compiler.h \
-	               -o $$@                                                 \
+	$(CC_libagesa) -c -MMD $(CFLAGS_libagesa) $(AGESA_CFLAGS)                     \
+	               $(AGESA_INC)                                                   \
+	               -include $(src)/include/kconfig.h                              \
+	               -include $(src)/include/rules.h                                \
+	               -include $(src)/commonlib/bsd/include/commonlib/bsd/compiler.h \
+	               -o $$@                                                         \
 	               $(agesa_src_path)/$(notdir $1)
 
 endef
diff --git a/src/vendorcode/amd/pi/Makefile.inc b/src/vendorcode/amd/pi/Makefile.inc
index 9b3a0e6..8f27d64 100644
--- a/src/vendorcode/amd/pi/Makefile.inc
+++ b/src/vendorcode/amd/pi/Makefile.inc
@@ -66,6 +66,7 @@
 AGESA_INC += -I$(src)/arch/x86/include
 AGESA_INC += -I$(src)/include
 AGESA_INC += -I$(src)/commonlib/include
+AGESA_INC += -I$(src)/commonlib/bsd/include
 AGESA_INC += -I$(VBOOT_SOURCE)/firmware/include
 
 AGESA_CFLAGS += -march=amdfam10 -mno-3dnow
@@ -98,12 +99,12 @@
 
 $(call src-to-obj,libagesa,$1): $(agesa_src_path)/$(notdir $1) $(obj)/config.h $(src)/include/kconfig.h
 	@printf "    CC         $$(subst $(obj)/,,$$(@))\n"
-	$(CC_libagesa) -c -MMD $(CFLAGS_libagesa) $(AGESA_CFLAGS)                 \
-	               $(AGESA_INC)                                               \
-	               -include $(src)/include/kconfig.h                          \
-	               -include $(src)/include/rules.h                            \
-	               -include $(src)/commonlib/include/commonlib/compiler.h     \
-	               -o $$@                                                     \
+	$(CC_libagesa) -c -MMD $(CFLAGS_libagesa) $(AGESA_CFLAGS)                     \
+	               $(AGESA_INC)                                                   \
+	               -include $(src)/include/kconfig.h                              \
+	               -include $(src)/include/rules.h                                \
+	               -include $(src)/commonlib/bsd/include/commonlib/bsd/compiler.h \
+	               -o $$@                                                         \
 	               $(agesa_src_path)/$(notdir $1)
 
 endef