| /* 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, |
| const 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; |
| } |