// Copyright 2019 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.hardware.tee;

using zx;

type Uuid = struct {
    time_low uint32;
    time_mid uint16;
    time_hi_and_version uint16;
    clock_seq_and_node array<uint8, 8>;
};

@transport("Banjo")
@banjo_layout("ddk-protocol")
protocol Tee {
    /// Takes the server end of a FIDL connection that'll serve fuchsia.tee.Application for the
    /// given application_uuid.
    ///
    /// If the connection fails, |s| will be a failing status and tee_app_request and
    /// service_provider (if valid) will both be closed.
    ///
    /// The service_provider can be ZX_HANDLE_INVALID if the connection won't be used for any
    /// requests that'll result in filesystem requests from the TEE.  If not ZX_HANDLE_INVALID, the
    /// service provider will be used in serving filesystem requests from the TEE.
    ConnectToApplication(resource struct {
        application_uuid Uuid;
        tee_app_request zx.handle:CHANNEL;
        service_provider zx.handle:CHANNEL;
    }) -> (struct {
        s zx.status;
    });
};
