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