/* * 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. */ #ifndef __VPD_H__ #define __VPD_H__ #include #define GOOGLE_VPD_2_0_OFFSET 0x600 enum vpd_region { VPD_ANY = 0, VPD_RO = 1, VPD_RW = 2 }; /* VPD 2.0 data blob structure */ struct vpd_blob { bool initialized; uint8_t *ro_base; uint32_t ro_size; uint8_t *rw_base; uint32_t rw_size; }; extern struct vpd_blob g_vpd_blob; /* * This function loads g_vpd_blob global variable. * The variable is initialized if it was not. */ const struct vpd_blob *vpd_load_blob(void); /* * This function gets the base address and size of * buffers for RO_VPD/RW_VPD binary blobs, and sets * the struct. */ void vpd_get_buffers(struct vpd_blob *blob); /* * Reads VPD string value by key. * * Reads in at most one less than size characters from VPD and stores them * into buffer. A terminating null byte ('\0') is stored after the last * character in the buffer. * * Returns NULL if key is not found, otherwise buffer. */ char *vpd_gets(const char *key, char *buffer, int size, enum vpd_region region); /* * Find VPD value by key. * * Searches for a VPD entry in the VPD cache. If found, places the size of the * entry into '*size' and returns the pointer to the entry data. * * This function presumes that VPD is cached in DRAM (which is the case in the * current implementation) and as such returns the pointer into the cache. The * user is not supposed to modify the data, and does not have to free the * memory. * * Returns NULL if key is not found. */ const void *vpd_find(const char *key, int *size, enum vpd_region region); /* * Find value of boolean type vpd key. * * During the process, necessary checking is done, such as making * sure the value length is 1, and value is either '1' or '0'. */ bool vpd_get_bool(const char *key, enum vpd_region region, uint8_t *val); #endif /* __VPD_H__ */