/* Copyright (c) 2010 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.
 */

/* Create two spaces for uses in tests.  OK if they already exist.
 */

#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>

#include "tlcl.h"
#include "tlcl_tests.h"

int main(int argc, char** argv) {
	uint32_t perm;
	uint32_t result;
	uint32_t x;

	TlclLibInit();

	TPM_CHECK(TlclStartupIfNeeded());
	TPM_CHECK(TlclSelfTestFull());
	TPM_CHECK(TlclAssertPhysicalPresence());
	TPM_CHECK(TlclForceClear());
	TPM_CHECK(TlclSetEnable());
	TPM_CHECK(TlclSetDeactivated(0));

	result = TlclRead(INDEX0, (uint8_t*) &x, sizeof(x));
	if (result == TPM_E_BADINDEX) {
		perm = TPM_NV_PER_PPWRITE | TPM_NV_PER_GLOBALLOCK;
		TPM_CHECK(TlclDefineSpace(INDEX0, perm, sizeof(uint32_t)));
	}

	result = TlclRead(INDEX1, (uint8_t*) &x, sizeof(x));
	if (result == TPM_E_BADINDEX) {
		perm = TPM_NV_PER_PPWRITE;
		TPM_CHECK(TlclDefineSpace(INDEX1, perm, sizeof(uint32_t)));
	}

	printf("TEST SUCCEEDED\n");
	exit(0);
}
