mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-11-26 19:25:02 +00:00
Massive refactoring of external header files.
This reduces the number of exported header files to the minimum needed by
the existing userspace utilities and firmware implementations.
BUG=chromium:221544
BRANCH=none
TEST=manual, trybots
CQ-DEPEND=CL:47019,CL:47022,CL:47023
sudo FEATURES=test emerge vboot_reference
FEATURES=test emerge-$BOARD \
vboot_reference \
chromeos-cryptohome \
chromeos-installer \
chromeos-u-boot \
peach-u-boot \
depthcharge
Change-Id: I2946cc2dbaf5459a6c5eca92ca57d546498e6d85
Signed-off-by: Bill Richardson <wfrichar@chromium.org>
Reviewed-on: https://gerrit.chromium.org/gerrit/47021
Reviewed-by: Randall Spangler <rspangler@chromium.org>
This commit is contained in:
committed by
ChromeBot
parent
28b65ca99f
commit
0c3ba249ab
29
firmware/lib/include/load_firmware_fw.h
Normal file
29
firmware/lib/include/load_firmware_fw.h
Normal file
@@ -0,0 +1,29 @@
|
||||
/* Copyright (c) 2013 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.
|
||||
*
|
||||
* High-level firmware API for loading and verifying rewritable firmware.
|
||||
* (Firmware Portion)
|
||||
*/
|
||||
|
||||
#ifndef VBOOT_REFERENCE_LOAD_FIRMWARE_FW_H_
|
||||
#define VBOOT_REFERENCE_LOAD_FIRMWARE_FW_H_
|
||||
|
||||
#include "vboot_api.h"
|
||||
#include "vboot_nvstorage.h"
|
||||
#include "vboot_struct.h"
|
||||
|
||||
/**
|
||||
* Load the rewritable firmware.
|
||||
*
|
||||
* Pass the common and firmware params from VbSelectFirmware(), and a
|
||||
* VbNvContext. Caller is responsible for calling VbNvSetup() and
|
||||
* VbNvTeardown() on the VbNvContext.
|
||||
*
|
||||
* Returns VBERROR_SUCCESS if successful. If unsuccessful, sets a recovery
|
||||
* reason via VbNvStorage and returns an error code.
|
||||
*/
|
||||
int LoadFirmware(VbCommonParams *cparams, VbSelectFirmwareParams *fparams,
|
||||
VbNvContext *vnc);
|
||||
|
||||
#endif /* VBOOT_REFERENCE_LOAD_FIRMWARE_FW_H_ */
|
||||
100
firmware/lib/include/load_kernel_fw.h
Normal file
100
firmware/lib/include/load_kernel_fw.h
Normal file
@@ -0,0 +1,100 @@
|
||||
/* Copyright (c) 2013 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.
|
||||
*
|
||||
* High-level firmware API for loading and verifying kernel.
|
||||
* (Firmware Portion)
|
||||
*/
|
||||
|
||||
#ifndef VBOOT_REFERENCE_LOAD_KERNEL_FW_H_
|
||||
#define VBOOT_REFERENCE_LOAD_KERNEL_FW_H_
|
||||
|
||||
#include "vboot_api.h"
|
||||
#include "vboot_nvstorage.h"
|
||||
|
||||
/* Interface provided by verified boot library to BDS */
|
||||
|
||||
/* Boot flags for LoadKernel().boot_flags */
|
||||
/* Developer switch is on */
|
||||
#define BOOT_FLAG_DEVELOPER (0x01ULL)
|
||||
/* In recovery mode */
|
||||
#define BOOT_FLAG_RECOVERY (0x02ULL)
|
||||
|
||||
typedef struct LoadKernelParams {
|
||||
/* Inputs to LoadKernel() */
|
||||
/*
|
||||
* Buffer for data shared between LoadFirmware() and LoadKernel().
|
||||
* Pass the same buffer which was passed to LoadFirmware().
|
||||
*/
|
||||
void *shared_data_blob;
|
||||
/*
|
||||
* Size of shared data blob buffer, in bytes. On output, this will
|
||||
* contain the actual data size placed into the buffer.
|
||||
*/
|
||||
uint64_t shared_data_size;
|
||||
/* Pointer to GBB data */
|
||||
void *gbb_data;
|
||||
/* Size of GBB data in bytes */
|
||||
uint64_t gbb_size;
|
||||
/* Disk handle for current device */
|
||||
VbExDiskHandle_t disk_handle;
|
||||
/* Bytes per lba sector on current device */
|
||||
uint64_t bytes_per_lba;
|
||||
/* Last addressable lba sector on current device */
|
||||
uint64_t ending_lba;
|
||||
/* Destination buffer for kernel (normally at 0x100000) */
|
||||
void *kernel_buffer;
|
||||
/* Size of kernel buffer in bytes */
|
||||
uint64_t kernel_buffer_size;
|
||||
/* Boot flags */
|
||||
uint64_t boot_flags;
|
||||
/*
|
||||
* Context for NV storage. Caller is responsible for calling
|
||||
* VbNvSetup() and VbNvTeardown() on the context.
|
||||
*/
|
||||
VbNvContext *nv_context;
|
||||
|
||||
/*
|
||||
* Outputs from LoadKernel(); valid only if LoadKernel() returns
|
||||
* LOAD_KERNEL_SUCCESS
|
||||
*/
|
||||
/* Partition number to boot on current device (1...M) */
|
||||
uint64_t partition_number;
|
||||
/* Address of bootloader image in RAM */
|
||||
uint64_t bootloader_address;
|
||||
/* Size of bootloader image in bytes */
|
||||
uint64_t bootloader_size;
|
||||
/* UniquePartitionGuid for boot partition */
|
||||
uint8_t partition_guid[16];
|
||||
} LoadKernelParams;
|
||||
|
||||
/**
|
||||
* Attempt to load the kernel from the current device.
|
||||
*
|
||||
* Returns VBERROR_SUCCESS if successful. If unsuccessful, sets a recovery
|
||||
* reason via VbNvStorage and returns an error code.
|
||||
*/
|
||||
VbError_t LoadKernel(LoadKernelParams *params);
|
||||
|
||||
/*
|
||||
* The bootloader is loaded using the EFI LoadImage() and StartImage() calls.
|
||||
* Pass this struct via loaded_image->load_options.
|
||||
*/
|
||||
typedef struct KernelBootloaderOptions {
|
||||
/* Drive number of boot device (0...N) */
|
||||
uint64_t drive_number;
|
||||
/*
|
||||
* Partition number, as returned from LoadKernel() in
|
||||
* LoadKernelParams.partition_number
|
||||
*/
|
||||
uint64_t partition_number;
|
||||
/*
|
||||
* Absolute bootloader start adddress, as returned from LoadKernel() in
|
||||
* LoadKernelParams.bootloader_start
|
||||
*/
|
||||
uint64_t original_address;
|
||||
/* UniquePartitionGuid for boot partition */
|
||||
uint8_t partition_guid[16];
|
||||
} KernelBootloaderOptions;
|
||||
|
||||
#endif /* VBOOT_REFERENCE_LOAD_KERNEL_FW_H_ */
|
||||
28
firmware/lib/include/sysincludes.h
Normal file
28
firmware/lib/include/sysincludes.h
Normal file
@@ -0,0 +1,28 @@
|
||||
/* Copyright (c) 2010 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.
|
||||
*/
|
||||
|
||||
/* System includes for vboot reference library. This is the ONLY
|
||||
* place in firmware/ where system headers may be included via
|
||||
* #include <...>, so that there's only one place that needs to be
|
||||
* fixed up for platforms which don't have all the system includes.
|
||||
*
|
||||
* Files in firmware/stub may still include system headers, because
|
||||
* they're local implementations and will be ported to each system
|
||||
* anyway. */
|
||||
|
||||
#ifndef VBOOT_REFERENCE_SYSINCLUDES_H_
|
||||
#define VBOOT_REFERENCE_SYSINCLUDES_H_
|
||||
|
||||
#include <inttypes.h> /* For PRIu64 */
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#if defined(HAVE_ENDIAN_H) && defined(HAVE_LITTLE_ENDIAN)
|
||||
#include <byteswap.h>
|
||||
#include <memory.h>
|
||||
#endif
|
||||
|
||||
#endif /* VBOOT_REFERENCE_SYSINCLUDES_H_ */
|
||||
115
firmware/lib/include/utility.h
Normal file
115
firmware/lib/include/utility.h
Normal file
@@ -0,0 +1,115 @@
|
||||
/* Copyright (c) 2013 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.
|
||||
*/
|
||||
|
||||
/*
|
||||
* Helper functions/wrappers for memory allocations, manipulation and
|
||||
* comparison.
|
||||
*/
|
||||
|
||||
#ifndef VBOOT_REFERENCE_UTILITY_H_
|
||||
#define VBOOT_REFERENCE_UTILITY_H_
|
||||
|
||||
#include "sysincludes.h"
|
||||
|
||||
/* Debug and error output */
|
||||
#ifdef VBOOT_DEBUG
|
||||
#define VBDEBUG(params) VbExDebug params
|
||||
#else
|
||||
#define VBDEBUG(params)
|
||||
#endif
|
||||
|
||||
#ifdef VBOOT_DEBUG
|
||||
#define VbAssert(expr) do { if (!(expr)) { \
|
||||
VbExError("assert fail: %s at %s:%d\n", \
|
||||
#expr, __FILE__, __LINE__); }} while(0)
|
||||
#else
|
||||
#define VbAssert(expr)
|
||||
#endif
|
||||
|
||||
/* Optional, up to the BIOS */
|
||||
#ifdef VBOOT_EASTER_EGG
|
||||
#define VBEASTEREGG VbExEasterEgg()
|
||||
#else
|
||||
#define VBEASTEREGG 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Combine [msw] and [lsw] uint16s to a uint32_t with its [msw] and [lsw]
|
||||
* forming the most and least signficant 16-bit words.
|
||||
*/
|
||||
#define CombineUint16Pair(msw,lsw) (((uint32_t)(msw) << 16) | \
|
||||
(((lsw)) & 0xFFFF))
|
||||
|
||||
/* Return the minimum of (a) or (b). */
|
||||
#define Min(a, b) (((a) < (b)) ? (a) : (b))
|
||||
|
||||
/**
|
||||
* Compare [n] bytes in [src1] and [src2].
|
||||
*
|
||||
* Returns an integer less than, equal to, or greater than zero if the first
|
||||
* [n] bytes of [src1] is found, respectively, to be less than, to match, or be
|
||||
* greater than the first n bytes of [src2]. */
|
||||
int Memcmp(const void *src1, const void *src2, size_t n);
|
||||
|
||||
/**
|
||||
* Copy [n] bytes from [src] to [dest].
|
||||
*/
|
||||
void *Memcpy(void *dest, const void *src, uint64_t n);
|
||||
|
||||
/*
|
||||
* Implementations of the functions below must be built as part of the firmware
|
||||
* and defined in lib/utility.c.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Set [n] bytes starting at [s] to [c]. Returns dest.
|
||||
*/
|
||||
void *Memset(void *dest, const uint8_t c, uint64_t n);
|
||||
|
||||
/**
|
||||
* Compare [n] bytes starting at [s1] with [s2] and return 0 if they
|
||||
* match, 1 if they don't. Returns 0 if n=0, since no bytes mismatched.
|
||||
*
|
||||
* Time taken to perform the comparison is only dependent on [n] and
|
||||
* not on the relationship of the match between [s1] and [s2].
|
||||
*
|
||||
* Note that unlike Memcmp(), this only indicates inequality, not
|
||||
* whether s1 is less than or greater than s2.
|
||||
*/
|
||||
int SafeMemcmp(const void *s1, const void *s2, size_t n);
|
||||
|
||||
/*
|
||||
* Buffer size required to hold the longest possible output of Uint64ToString()
|
||||
* - that is, Uint64ToString(~0, 2).
|
||||
*/
|
||||
#define UINT64_TO_STRING_MAX 65
|
||||
|
||||
/**
|
||||
* Convert a value to a string in the specified radix (2=binary, 10=decimal,
|
||||
* 16=hex) and store it in <buf>, which is <bufsize> chars long. If
|
||||
* <zero_pad_width>, left-pads the string to at least that width with '0'.
|
||||
* Returns the length of the stored string, not counting the terminating null.
|
||||
*/
|
||||
uint32_t Uint64ToString(char *buf, uint32_t bufsize, uint64_t value,
|
||||
uint32_t radix, uint32_t zero_pad_width);
|
||||
|
||||
/**
|
||||
* Concatenate <src> onto <dest>, which has space for <destlen> characters
|
||||
* including the terminating null. Note that <dest> will always be
|
||||
* null-terminated if <destlen> > 0. Returns the number of characters used in
|
||||
* <dest>, not counting the terminating null.
|
||||
*/
|
||||
uint32_t StrnAppend(char *dest, const char *src, uint32_t destlen);
|
||||
|
||||
/* Ensure that only our stub implementations are used, not standard C */
|
||||
#ifndef _STUB_IMPLEMENTATION_
|
||||
#define malloc _do_not_use_standard_malloc
|
||||
#define free _do_not_use_standard_free
|
||||
#define memcmp _do_not_use_standard_memcmp
|
||||
#define memcpy _do_not_use_standard_memcpy
|
||||
#define memset _do_not_use_standard_memset
|
||||
#endif
|
||||
|
||||
#endif /* VBOOT_REFERENCE_UTILITY_H_ */
|
||||
Reference in New Issue
Block a user