Files
OpenCellular/firmware/stub/vboot_api_stub.c
Gabe Black b1aa7aea2d Change VbExEcGetExpectedRW so that vboot picks an ec image instead of U-Boot.
This changes the signature of the function above so that it takes an additional
parameter that specifies which EC image vboot wants. This is better than making
U-Boot decide because U-Boot doesn't really keep track of which version it is
(it peeks at internal vboot data) and vboot does.

Also, some consts were removed from the image pointer pointer. The pointer
itself will be changed in the body of the function to tell vboot where the EC
has been loaded, and the contents of the buffer will be changed because U-Boot
will have to actually load the EC there.

BUG=chrome-os-partner:11148
TEST=Built vboot_reference, vboot_reference-firmware, chromeos-u-boot, and
chromeos-bootimage for Daisy and Link and saw them complete successfully with
and without the signature for U-Boot's version of this function being updated.
That works because the function isn't actually being used yet.

Change-Id: I2814c8210eb5b3d965bb8bbf23c0f283f9e44c90
Signed-off-by: Gabe Black <gabeblack@google.com>
Reviewed-on: https://gerrit.chromium.org/gerrit/27755
Reviewed-by: Randall Spangler <rspangler@chromium.org>
Commit-Ready: Gabe Black <gabeblack@chromium.org>
Tested-by: Gabe Black <gabeblack@chromium.org>
2012-07-19 18:45:16 -07:00

191 lines
3.7 KiB
C

/* Copyright (c) 2012 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.
*
* Stub implementations of firmware-provided API functions.
*/
#define _STUB_IMPLEMENTATION_
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/time.h>
#include "vboot_api.h"
/* disable MSVC warnings on unused arguments */
__pragma(warning (disable: 4100))
/* U-Boot's printf uses '%L' for uint64_t. gcc uses '%l'. */
#define MAX_FMT 255
static char fmtbuf[MAX_FMT+1];
static const char *fixfmt(const char *format) {
int i;
for(i=0; i<MAX_FMT && format[i]; i++) {
fmtbuf[i] = format[i];
if(format[i] == '%' && format[i+1] == 'L') {
fmtbuf[i+1] = 'l';
i++;
}
}
fmtbuf[i] = '\0';
return fmtbuf;
}
void VbExError(const char* format, ...) {
va_list ap;
va_start(ap, format);
fprintf(stderr, "ERROR: ");
vfprintf(stderr, fixfmt(format), ap);
va_end(ap);
exit(1);
}
void VbExDebug(const char* format, ...) {
va_list ap;
va_start(ap, format);
fprintf(stderr, "DEBUG: ");
vfprintf(stderr, fixfmt(format), ap);
va_end(ap);
}
void* VbExMalloc(size_t size) {
void* p = malloc(size);
if (!p) {
/* Fatal Error. We must abort. */
abort();
}
return p;
}
void VbExFree(void* ptr) {
free(ptr);
}
uint64_t VbExGetTimer(void) {
struct timeval tv;
gettimeofday(&tv, NULL);
return (uint64_t)tv.tv_sec * 1000000 + (uint64_t)tv.tv_usec;
}
void VbExSleepMs(uint32_t msec) {
}
VbError_t VbExBeep(uint32_t msec, uint32_t frequency) {
return VBERROR_SUCCESS;
}
VbError_t VbExNvStorageRead(uint8_t* buf) {
return VBERROR_SUCCESS;
}
VbError_t VbExNvStorageWrite(const uint8_t* buf) {
return VBERROR_SUCCESS;
}
VbError_t VbExHashFirmwareBody(VbCommonParams* cparams,
uint32_t firmware_index) {
return VBERROR_SUCCESS;
}
VbError_t VbExDisplayInit(uint32_t* width, uint32_t* height) {
return VBERROR_SUCCESS;
}
VbError_t VbExDisplayBacklight(uint8_t enable) {
return VBERROR_SUCCESS;
}
VbError_t VbExDisplayScreen(uint32_t screen_type) {
return VBERROR_SUCCESS;
}
VbError_t VbExDisplayImage(uint32_t x, uint32_t y,
void* buffer, uint32_t buffersize) {
return VBERROR_SUCCESS;
}
VbError_t VbExDisplayDebugInfo(const char* info_str) {
return VBERROR_SUCCESS;
}
uint32_t VbExKeyboardRead(void) {
return 0;
}
uint32_t VbExIsShutdownRequested(void) {
return 0;
}
VbError_t VbExDecompress(void *inbuf, uint32_t in_size,
uint32_t compression_type,
void *outbuf, uint32_t *out_size) {
return VBERROR_SUCCESS;
}
int VbExTrustEC(void) {
return 1;
}
VbError_t VbExEcRunningRW(int *in_rw) {
*in_rw = 0;
return VBERROR_SUCCESS;
}
VbError_t VbExEcJumpToRW(void) {
return VBERROR_SUCCESS;
}
VbError_t VbExEcRebootToRO(void) {
/* Nothing to reboot, so all we can do is return failure. */
return VBERROR_UNKNOWN;
}
VbError_t VbExEcStayInRO(void) {
return VBERROR_SUCCESS;
}
#define SHA256_HASH_SIZE 32
VbError_t VbExEcHashRW(const uint8_t **hash, int *hash_size) {
static const uint8_t fake_hash[32] = {1, 2, 3, 4};
*hash = fake_hash;
*hash_size = sizeof(fake_hash);
return VBERROR_SUCCESS;
}
VbError_t VbExEcGetExpectedRW(enum VbSelectFirmware_t select, uint8_t **image,
int *image_size) {
static uint8_t fake_image[64] = {5, 6, 7, 8};
*image = fake_image;
*image_size = sizeof(fake_image);
return VBERROR_SUCCESS;
}
VbError_t VbExEcUpdateRW(const uint8_t *image, int image_size) {
return VBERROR_SUCCESS;
}
VbError_t VbExEcProtectRW(void) {
return VBERROR_SUCCESS;
}