/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Copyright 2016 General Electric Company
 */

#include "common.h"

struct vpd_cache;

/*
 * Read VPD from given data, verify content, call callback for each vital
 * product data block.
 *
 * cache: structure used by process block to store VPD information
 * process_block: callback called for each VPD data block
 *
 * Returns Non-zero on error.  Negative numbers encode errno.
 */
int read_i2c_vpd(struct vpd_cache *cache,
		 int (*process_block)(struct vpd_cache *, u8 id, u8 version,
				      u8 type, size_t size, u8 const *data));

/*
 * Read VPD from given data, verify content, call callback for each vital
 * product data block.
 *
 * size: size of the raw VPD data in bytes
 * data: raw VPD data read from device
 * cache: structure used by process block to store VPD information
 * process_block: callback called for each VPD data block
 *
 * Returns Non-zero on error.  Negative numbers encode errno.
 */

int vpd_reader(size_t size, u8 *data, struct vpd_cache *cache,
	       int (*process_block)(struct vpd_cache *, u8 id, u8 version, u8 type,
				    size_t size, u8 const *data));
