aboutsummaryrefslogtreecommitdiff
path: root/src/vendorcode/google/chromeos/vpd_tables.h
diff options
context:
space:
mode:
authorHung-Te Lin <hungte@chromium.org>2014-02-21 16:21:00 +0800
committerMike Loptien <mike.loptien@se-eng.com>2014-10-07 23:37:07 +0200
commit6eaaafa2c32029bd9dc5fb4196fe2b22cb5b4d9b (patch)
treef716d30ddb516ac9b19581f6b99785b434572c5f /src/vendorcode/google/chromeos/vpd_tables.h
parentffda804b52768467ea7b3394a3e2fe9039f87362 (diff)
vendorcode: Add ChromeOS VPD parser.
Copied (and unmodified) the minimal bits from ChromeOS libVPD: https://chromium.googlesource.com/chromiumos/platform/vpd Old-Change-Id: Id75d1bfd16263ac1b94c22979f9892cf7908d5e6 Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/187411 Reviewed-by: Yung-chieh Lo <yjlou@chromium.org> (cherry picked from commit a10ca23686299f3fd5b639631242cadaa2ca9e8a) vendorcode: Update ChromeOS VPD Parser. Merge recent changes in ChromeOS VPD that allows non-memory-mapped firmware to load VPD easier and faster (ref: https://chromium-review.googlesource.com/188134 ). Old-Change-Id: I3ee0b89c703f476f3d77cdde52cc7588724f7686 Reviewed-on: https://chromium-review.googlesource.com/188743 Tested-by: Hung-Te Lin <hungte@chromium.org> Reviewed-by: Yung-chieh Lo <yjlou@chromium.org> Reviewed-by: David Hendricks <dhendrix@chromium.org> Commit-Queue: Hung-Te Lin <hungte@chromium.org> (cherry picked from commit 03f4d521a7fa711b963b0e1822e92eac16a691b1) vendorcode: Access to ChromeOS VPD on default CBFS media. The new function "cros_vpd_gets(key, buf, size)" provides an easy and quick way to retrieve values in ChromeOS VPD section. Old-Change-Id: I38e50615e515707ffaecdc4c4fae65043541b687 Signed-off-by: Hung-Te Lin <hungte@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/187430 Reviewed-by: Yung-chieh Lo <yjlou@chromium.org> (cherry picked from commit bcd3832c06e8ed357c50f19396da21a218dc4b39) Squashed 3 related commits for a ChromeOS VPD parser. Change-Id: I4ba8fce16ea123c78d7b543c8353ab9bc1e2aa9f Signed-off-by: Isaac Christensen <isaac.christensen@se-eng.com> Reviewed-on: http://review.coreboot.org/6959 Reviewed-by: Ronald G. Minnich <rminnich@gmail.com> Tested-by: build bot (Jenkins)
Diffstat (limited to 'src/vendorcode/google/chromeos/vpd_tables.h')
-rw-r--r--src/vendorcode/google/chromeos/vpd_tables.h114
1 files changed, 114 insertions, 0 deletions
diff --git a/src/vendorcode/google/chromeos/vpd_tables.h b/src/vendorcode/google/chromeos/vpd_tables.h
new file mode 100644
index 0000000000..d58b5e846d
--- /dev/null
+++ b/src/vendorcode/google/chromeos/vpd_tables.h
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2014 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Ported from mosys project (http://code.google.com/p/mosys/).
+ */
+
+#ifndef __LIB_VPD_TABLES_H__
+#define __LIB_VPD_TABLES_H__
+
+#include <inttypes.h>
+
+#define VPD_ENTRY_MAGIC "_SM_"
+#define VPD_INFO_MAGIC \
+ "\xfe" /* type: VPD header */ \
+ "\x09" /* key length, 9 = 1 + 8 */ \
+ "\x01" /* info version, 1 */ \
+ "gVpdInfo" /* signature, 8 bytes */ \
+ "\x04" /* value length */
+
+/* Google specific VPD info */
+struct google_vpd_info {
+ union {
+ struct {
+ uint8_t type;
+ uint8_t key_len;
+ uint8_t info_ver;
+ uint8_t signature[8];
+ uint8_t value_len;
+ } tlv;
+ uint8_t magic[12];
+ } header;
+ uint32_t size;
+} __attribute__((packed));
+
+/* Entry */
+struct vpd_entry {
+ uint8_t anchor_string[4];
+ uint8_t entry_cksum;
+ uint8_t entry_length;
+ uint8_t major_ver;
+ uint8_t minor_ver;
+ uint16_t max_size;
+ uint8_t entry_rev;
+ uint8_t format_area[5];
+ uint8_t inter_anchor_string[5];
+ uint8_t inter_anchor_cksum;
+ uint16_t table_length;
+ uint32_t table_address;
+ uint16_t table_entry_count;
+ uint8_t bcd_revision;
+} __attribute__ ((packed));
+
+/* Header */
+struct vpd_header {
+ uint8_t type;
+ uint8_t length;
+ uint16_t handle;
+} __attribute__ ((packed));
+
+/* Type 0 - firmware information */
+struct vpd_table_firmware {
+ uint8_t vendor;
+ uint8_t version;
+ uint16_t start_address;
+ uint8_t release_date;
+ uint8_t rom_size_64k_blocks;
+ uint32_t characteristics;
+ uint8_t extension[2]; /* v2.4+ */
+ uint8_t major_ver; /* v2.4+ */
+ uint8_t minor_ver; /* v2.4+ */
+ uint8_t ec_major_ver; /* v2.4+ */
+ uint8_t ec_minor_ver; /* v2.4+ */
+} __attribute__ ((packed));
+
+/* Type 1 - system information */
+struct vpd_table_system {
+ uint8_t manufacturer;
+ uint8_t name;
+ uint8_t version;
+ uint8_t serial_number;
+ uint8_t uuid[16];
+ uint8_t wakeup_type;
+ uint8_t sku_number; /* v2.4+ */
+ uint8_t family; /* v2.4+ */
+} __attribute__ ((packed));
+
+/* Type 127 - end of table */
+struct vpd_table_eot {
+ struct vpd_header header;
+} __attribute__ ((packed));
+
+/* Type 241 - binary blob pointer */
+struct vpd_table_binary_blob_pointer {
+ uint8_t struct_major_version;
+ uint8_t struct_minor_version;
+ uint8_t vendor;
+ uint8_t description;
+ uint8_t major_version;
+ uint8_t minor_version;
+ uint8_t variant;
+ uint8_t reserved[5];
+ uint8_t uuid[16];
+ uint32_t offset;
+ uint32_t size;
+} __attribute__ ((packed));
+
+/* The length and number of strings defined here is not a limitation of VPD.
+ * These numbers were deemed good enough during development. */
+#define VPD_MAX_STRINGS 10
+#define VPD_MAX_STRING_LENGTH 64
+
+#endif /* __LIB_VPD_TABLES_H__ */