// 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.
closed protocol DeviceConnector {
    /// Requests a `DeviceInfo` connection to the TEE driver to enumerate device info.
    ///
    /// The sole caller of this should be the TEE Manager.
    strict 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.
    strict ConnectToApplication(resource struct {
        application_uuid tee.Uuid;
        service_provider client_end:<manager.Provider, optional>;
        application_request server_end:tee.Application;
    });
};

service Service {
    device_connector client_end:DeviceConnector;
};
