Nico Huber has uploaded this change for review.

View Change

ifwi: Add definitions for the Integrated Firmware Image format

The Integrated Firmware Image (IFWI) is used as a partitioning format
on some Intel SoCs (e.g. Apollo Lake). It is not tied to NOR flashes,
rather to have a common format between different types of boot media.

Change-Id: I4bdf47637bfb68560e6d4269f89710572c1bb82a
Signed-off-by: Nico Huber <nico.h@gmx.de>
---
A ifwi.h
1 file changed, 80 insertions(+), 0 deletions(-)

git pull ssh://review.coreboot.org:29418/flashrom refs/changes/17/31017/1
diff --git a/ifwi.h b/ifwi.h
new file mode 100644
index 0000000..622fccf
--- /dev/null
+++ b/ifwi.h
@@ -0,0 +1,80 @@
+/*
+ * This file is part of the flashrom 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; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * 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.
+ */
+
+/*
+ * The Integrated Firmware Image (IFWI) is used as a partitioning
+ * format on some Intel SoCs (e.g. Apollo Lake). It is not tied to
+ * NOR flashes, rather to have a common format between different
+ * types of boot media.
+ */
+
+#ifndef __IFWI_H__
+#define __IFWI_H__ 1
+
+#include <stdint.h>
+
+#include "layout.h"
+
+int layout_from_ifwi_rom(struct flashrom_layout **, struct flashrom_flashctx *, const size_t flash_offset);
+
+/*********** Boot Partition Descriptor Table (BPDT) ***********/
+
+#define BPDT_ENTRY_LENGTH 12
+
+struct bpdt_entry { /* points to a Sub-Partition */
+ uint16_t type;
+ uint16_t flags;
+ uint32_t offset; /* from start of Logical Boot Partition */
+ uint32_t size;
+};
+
+#define BPDT_SIGNATURE 0x000055aa
+#define BPDT_HEADER_LENGTH 24
+
+struct bpdt {
+ uint32_t signature;
+ uint16_t desc_count;
+ uint16_t version;
+ uint32_t xorsum; /* covers BPDT to S-BPDT (inclusive), iff there is
+ a redundant Logical Boot Partition, otherwise 0 */
+ uint32_t ifwi_version; /* revision of this IFWI build */
+ struct bpdt_entry entries[];
+};
+
+/**************** Sub-Partition Directory (SPD) ***************/
+
+#define SPD_ENTRY_OFFSET_MASK 0x01ffffff
+#define SPD_ENTRY_LENGTH 24
+
+struct spd_entry {
+ char name[12 + 1]; /* serialized as 12 chars w/o terminator */
+ uint32_t offset; /* from start of the SPD header */
+ uint32_t length;
+};
+
+#define SPD_MARKER 0x44504324 /* $CPD */
+#define SPD_MIN_HEADER_LENGTH 16
+
+struct spd {
+ uint32_t marker;
+ uint32_t num_entries;
+ uint8_t header_version;
+ uint8_t entry_version;
+ uint8_t header_length;
+ uint8_t checksum; /* xor-sum covering header + entries */
+ char name[4 + 1]; /* serialized as 4 chars w/o terminator */
+ struct spd_entry entries[];
+};
+
+#endif /* __IFWI_H__ */

To view, visit change 31017. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: flashrom
Gerrit-Branch: master
Gerrit-Change-Id: I4bdf47637bfb68560e6d4269f89710572c1bb82a
Gerrit-Change-Number: 31017
Gerrit-PatchSet: 1
Gerrit-Owner: Nico Huber <nico.h@gmx.de>
Gerrit-MessageType: newchange