blob: 82947c8832f68f1a823159678653faa1dada4b90 [file] [log] [blame]
// Copyright 2021 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.
library fuchsia.tpm;
using zx;
/// Arbitrarily large value which should be enough to handle any vendor
/// commands.
const MAX_VENDOR_COMMAND_LEN uint32 = 65535;
/// TPM response codes are fairly complex.
/// See Section 6.6, "TPM_RC (Response Codes)" of the "Trusted Platform Module Library
/// Part 2: Structures" for more information on how they should be interpreted.
/// The TPM may return vendor-defined error codes or set various bits in the
/// error to provide more information about the nature of the error.
alias TpmRc = uint16;
protocol TpmDevice {
/// Get the TPM's device ID, vendor ID, and revision ID.
GetDeviceId() -> (struct {
vendor_id uint16;
device_id uint16;
revision_id uint8;
}) error zx.status;
/// Execute a vendor command.
/// Returns ZX_ERR_BUFFER_TOO_SMALL if the TPM responded with data that
/// wouldn't fit in the response buffer.
ExecuteVendorCommand(struct {
command_code uint16;
data vector<uint8>:MAX_VENDOR_COMMAND_LEN;
}) -> (struct {
result TpmRc;
data vector<uint8>:MAX_VENDOR_COMMAND_LEN;
}) error zx.status;
};