111 lines
2.5 KiB
C
111 lines
2.5 KiB
C
/* SPDX-License-Identifier: BSD-3-Clause */
|
|
|
|
/* Ported from mosys project (http://code.google.com/p/mosys/). */
|
|
|
|
#ifndef __LIB_VPD_TABLES_H__
|
|
#define __LIB_VPD_TABLES_H__
|
|
|
|
#include <stdint.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;
|
|
} __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;
|
|
} __packed;
|
|
|
|
/* Header */
|
|
struct vpd_header {
|
|
uint8_t type;
|
|
uint8_t length;
|
|
uint16_t handle;
|
|
} __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+ */
|
|
} __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+ */
|
|
} __packed;
|
|
|
|
/* Type 127 - end of table */
|
|
struct vpd_table_eot {
|
|
struct vpd_header header;
|
|
} __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;
|
|
} __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__ */
|