mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2026-01-16 18:11:22 +00:00
This patch makes EC firmware and cbi-util share the common code. BUG=b:70294260 BRANCH=none TEST=Set fields using ectool. Verify the contents by cbi command. Verify cbi-util creates the same binary as before. Verify emerge ec-utils ec-devutils pass. Change-Id: If5e65e48dd03960e0adf23ef775f67aecf785d85 Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/932001
101 lines
2.8 KiB
C
101 lines
2.8 KiB
C
/* Copyright 2018 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.
|
|
*
|
|
* Cros Board Info
|
|
*/
|
|
#ifndef __CROS_EC_CROS_BOARD_INFO_H
|
|
#define __CROS_EC_CROS_BOARD_INFO_H
|
|
|
|
#include "common.h"
|
|
#include "ec_commands.h"
|
|
|
|
#define CBI_VERSION_MAJOR 0
|
|
#define CBI_VERSION_MINOR 0
|
|
#define CBI_EEPROM_SIZE 256
|
|
static const uint8_t cbi_magic[] = { 0x43, 0x42, 0x49 }; /* 'C' 'B' 'I' */
|
|
|
|
struct cbi_header {
|
|
uint8_t magic[3];
|
|
/* CRC of 'struct board_info' excluding magic and crc */
|
|
uint8_t crc;
|
|
/* Data format version. Parsers are expected to process data as long
|
|
* as major version is equal or younger. */
|
|
union {
|
|
struct {
|
|
uint8_t minor_version;
|
|
uint8_t major_version;
|
|
};
|
|
uint16_t version;
|
|
};
|
|
/* Total size of data. It can be larger than sizeof(struct board_info)
|
|
* if future versions add additional fields. */
|
|
uint16_t total_size;
|
|
/* List of data items (i.e. struct cbi_data[]) */
|
|
uint8_t data[];
|
|
} __attribute__((packed));
|
|
|
|
struct cbi_data {
|
|
uint8_t tag; /* enum cbi_data_tag */
|
|
uint8_t size; /* size of value[] */
|
|
uint8_t value[]; /* data value */
|
|
} __attribute__((packed));
|
|
|
|
/**
|
|
* Board info accessors
|
|
*
|
|
* @param version/sku_id/oem_id [OUT] Data read from EEPROM
|
|
* @return EC_SUCCESS on success or EC_ERROR_* otherwise.
|
|
*/
|
|
int cbi_get_board_version(uint32_t *version);
|
|
int cbi_get_sku_id(uint32_t *sku_id);
|
|
int cbi_get_oem_id(uint32_t *oem_id);
|
|
|
|
/**
|
|
* Primitive accessors
|
|
*
|
|
* @param tag Tag of the target data.
|
|
* @param buf Buffer where data is passed.
|
|
* @param size (IN) Size of <buf>. (OUT) Size of the data returned.
|
|
* @return EC_SUCCESS on success or EC_ERROR_* otherwise.
|
|
*/
|
|
int cbi_get_board_info(enum cbi_data_tag tag, uint8_t *buf, uint8_t *size);
|
|
int cbi_set_board_info(enum cbi_data_tag tag, const uint8_t *buf, uint8_t size);
|
|
|
|
/*
|
|
* Utility functions
|
|
*/
|
|
|
|
/**
|
|
* Calculate 8-bit CRC of CBI
|
|
*
|
|
* @param h Pointer to CBI header
|
|
* @return CRC value
|
|
*/
|
|
uint8_t cbi_crc8(const struct cbi_header *h);
|
|
|
|
/**
|
|
* Store data in memory in CBI data format
|
|
*
|
|
* @param p Pointer to the buffer where a new data item will be stored. It
|
|
* should be pointing to the data section of CBI.
|
|
* @param tag Tag of the data item
|
|
* @param buf Pointer to the buffer containing the data being copied.
|
|
* @param size Size of the data
|
|
* @return Address of the byte following the stored data in the
|
|
* destination buffer
|
|
*/
|
|
uint8_t *cbi_set_data(uint8_t *p, enum cbi_data_tag tag,
|
|
const void *buf, int size);
|
|
|
|
/**
|
|
* Find a data field in CBI
|
|
*
|
|
* @param cbi Buffer containing CBI struct
|
|
* @param tag Tag of the data field to search
|
|
* @return Pointer to the data or NULL if not found.
|
|
*/
|
|
struct cbi_data *cbi_find_tag(const void *cbi, enum cbi_data_tag tag);
|
|
|
|
#endif /* __CROS_EC_CROS_BOARD_INFO_H */
|