mirror of
https://github.com/Telecominfraproject/OpenCellular.git
synced 2025-12-24 16:57:21 +00:00
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>
191 lines
3.7 KiB
C
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;
|
|
}
|