193943266c597ad66300445a04afa01270f2b5763Randall Spangler/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. 293943266c597ad66300445a04afa01270f2b5763Randall Spangler * Use of this source code is governed by a BSD-style license that can be 393943266c597ad66300445a04afa01270f2b5763Randall Spangler * found in the LICENSE file. 493943266c597ad66300445a04afa01270f2b5763Randall Spangler * 593943266c597ad66300445a04afa01270f2b5763Randall Spangler * Stub implementations of firmware-provided API functions. 693943266c597ad66300445a04afa01270f2b5763Randall Spangler */ 793943266c597ad66300445a04afa01270f2b5763Randall Spangler 80c3ba249abb1dc60f5ebabccf84ff13206440b83Bill Richardson#include <stdint.h> 90c3ba249abb1dc60f5ebabccf84ff13206440b83Bill Richardson 1093943266c597ad66300445a04afa01270f2b5763Randall Spangler#define _STUB_IMPLEMENTATION_ 1193943266c597ad66300445a04afa01270f2b5763Randall Spangler 1293943266c597ad66300445a04afa01270f2b5763Randall Spangler#include <stdarg.h> 1393943266c597ad66300445a04afa01270f2b5763Randall Spangler#include <stdio.h> 1493943266c597ad66300445a04afa01270f2b5763Randall Spangler#include <stdlib.h> 1593943266c597ad66300445a04afa01270f2b5763Randall Spangler#include <string.h> 1693943266c597ad66300445a04afa01270f2b5763Randall Spangler#include <sys/time.h> 1793943266c597ad66300445a04afa01270f2b5763Randall Spangler 1893943266c597ad66300445a04afa01270f2b5763Randall Spangler#include "vboot_api.h" 1993943266c597ad66300445a04afa01270f2b5763Randall Spangler 2093943266c597ad66300445a04afa01270f2b5763Randall Spangler/* U-Boot's printf uses '%L' for uint64_t. gcc uses '%l'. */ 2193943266c597ad66300445a04afa01270f2b5763Randall Spangler#define MAX_FMT 255 2293943266c597ad66300445a04afa01270f2b5763Randall Spanglerstatic char fmtbuf[MAX_FMT+1]; 2393943266c597ad66300445a04afa01270f2b5763Randall Spangler 2493943266c597ad66300445a04afa01270f2b5763Randall Spanglerstatic const char *fixfmt(const char *format) 2593943266c597ad66300445a04afa01270f2b5763Randall Spangler{ 2693943266c597ad66300445a04afa01270f2b5763Randall Spangler int i; 2793943266c597ad66300445a04afa01270f2b5763Randall Spangler for(i=0; i<MAX_FMT && format[i]; i++) { 2893943266c597ad66300445a04afa01270f2b5763Randall Spangler fmtbuf[i] = format[i]; 2993943266c597ad66300445a04afa01270f2b5763Randall Spangler if(format[i] == '%' && format[i+1] == 'L') { 3093943266c597ad66300445a04afa01270f2b5763Randall Spangler fmtbuf[i+1] = 'l'; 3193943266c597ad66300445a04afa01270f2b5763Randall Spangler i++; 3293943266c597ad66300445a04afa01270f2b5763Randall Spangler } 3393943266c597ad66300445a04afa01270f2b5763Randall Spangler } 3493943266c597ad66300445a04afa01270f2b5763Randall Spangler fmtbuf[i] = '\0'; 3593943266c597ad66300445a04afa01270f2b5763Randall Spangler return fmtbuf; 3693943266c597ad66300445a04afa01270f2b5763Randall Spangler} 3793943266c597ad66300445a04afa01270f2b5763Randall Spangler 3893943266c597ad66300445a04afa01270f2b5763Randall Spanglervoid VbExError(const char *format, ...) 3993943266c597ad66300445a04afa01270f2b5763Randall Spangler{ 4093943266c597ad66300445a04afa01270f2b5763Randall Spangler va_list ap; 4193943266c597ad66300445a04afa01270f2b5763Randall Spangler va_start(ap, format); 4293943266c597ad66300445a04afa01270f2b5763Randall Spangler fprintf(stderr, "ERROR: "); 4393943266c597ad66300445a04afa01270f2b5763Randall Spangler vfprintf(stderr, fixfmt(format), ap); 4493943266c597ad66300445a04afa01270f2b5763Randall Spangler va_end(ap); 4593943266c597ad66300445a04afa01270f2b5763Randall Spangler exit(1); 4693943266c597ad66300445a04afa01270f2b5763Randall Spangler} 4793943266c597ad66300445a04afa01270f2b5763Randall Spangler 4893943266c597ad66300445a04afa01270f2b5763Randall Spanglervoid VbExDebug(const char *format, ...) 4993943266c597ad66300445a04afa01270f2b5763Randall Spangler{ 5093943266c597ad66300445a04afa01270f2b5763Randall Spangler va_list ap; 5193943266c597ad66300445a04afa01270f2b5763Randall Spangler va_start(ap, format); 5293943266c597ad66300445a04afa01270f2b5763Randall Spangler fprintf(stderr, "DEBUG: "); 5393943266c597ad66300445a04afa01270f2b5763Randall Spangler vfprintf(stderr, fixfmt(format), ap); 5493943266c597ad66300445a04afa01270f2b5763Randall Spangler va_end(ap); 5593943266c597ad66300445a04afa01270f2b5763Randall Spangler} 5693943266c597ad66300445a04afa01270f2b5763Randall Spangler 5793943266c597ad66300445a04afa01270f2b5763Randall Spangleruint64_t VbExGetTimer(void) 5893943266c597ad66300445a04afa01270f2b5763Randall Spangler{ 5993943266c597ad66300445a04afa01270f2b5763Randall Spangler struct timeval tv; 6093943266c597ad66300445a04afa01270f2b5763Randall Spangler gettimeofday(&tv, NULL); 6193943266c597ad66300445a04afa01270f2b5763Randall Spangler return (uint64_t)tv.tv_sec * 1000000 + (uint64_t)tv.tv_usec; 6293943266c597ad66300445a04afa01270f2b5763Randall Spangler} 6393943266c597ad66300445a04afa01270f2b5763Randall Spangler 6493943266c597ad66300445a04afa01270f2b5763Randall SpanglerVbError_t VbExNvStorageRead(uint8_t *buf) 6593943266c597ad66300445a04afa01270f2b5763Randall Spangler{ 6693943266c597ad66300445a04afa01270f2b5763Randall Spangler return VBERROR_SUCCESS; 6793943266c597ad66300445a04afa01270f2b5763Randall Spangler} 6893943266c597ad66300445a04afa01270f2b5763Randall Spangler 6993943266c597ad66300445a04afa01270f2b5763Randall SpanglerVbError_t VbExNvStorageWrite(const uint8_t *buf) 7093943266c597ad66300445a04afa01270f2b5763Randall Spangler{ 7193943266c597ad66300445a04afa01270f2b5763Randall Spangler return VBERROR_SUCCESS; 7293943266c597ad66300445a04afa01270f2b5763Randall Spangler} 73