// Copyright 2018 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 fuchsia.tee as tee;
using fuchsia.tee.manager as manager;

/// Protocol used by the TEE Manager to proxy requests for TEE access to the driver.
protocol DeviceConnector {
    /// Requests a `DeviceInfo` connection to the TEE driver to enumerate device info.
    ///
    /// The sole caller of this should be the TEE Manager.
    ConnectToDeviceInfo(resource struct {
        device_info_request server_end:tee.DeviceInfo;
    });

    /// Requests an `Application` connection from the TEE driver while the caller provides a client
    /// channel end to a `Provider` server that supports the driver on any RPCs.
    ///
    /// The sole caller of this should be the TEE Manager.
    ConnectToApplication(resource struct {
        application_uuid tee.Uuid;
        service_provider client_end:<manager.Provider, optional>;
        application_request server_end:tee.Application;
    });
};
