// Copyright 2016 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include <zircon/device/tpm.h>
#include <errno.h>
#include <fcntl.h>
#include <zircon/syscalls.h>
#include <zircon/types.h>
#include <fdio/util.h>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>

const char* prog_name;

void print_usage(void) {
    printf("Usage:\n");
    printf("\n");
    printf("%s save\n", prog_name);
    printf("save: Issue a TPM_SaveState command.\n");
}

int cmd_save_state(int fd, int argc, const char** argv) {
    ssize_t ret = ioctl_tpm_save_state(fd);
    if (ret < 0) {
        printf("Error when saving state: (%zd)\n", ret);
        return 1;
    }

    return 0;
}

int main(int argc, const char** argv) {
    if (argc < 1)
        return 1;

    prog_name = argv[0];

    if (argc < 2) {
        print_usage();
        return 1;
    }

    const char* cmd = argv[1];

    argc -= 2;
    argv += 2;

    int fd = open("/dev/misc/tpm", O_RDWR);
    if (fd < 0) {
        printf("Error opening TPM device.\n");
        return 1;
    }

    if (!strcmp("save", cmd)) {
        return cmd_save_state(fd, argc, argv);
    } else {
        printf("Unrecognized command %s.\n", cmd);
        print_usage();
        return 1;
    }

    printf("We should never get here!.\n");
    return 1;
}
