// 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.
@available(added=HEAD)
library fuchsia.hardware.securemem;

using zx;

/// This protocol currently is a temporary measure to allow for services to get the physical address
/// of a previously pinned VMO until trusted services can be handed BTI handles.
closed protocol Device {
    /// Gets the physical address of a previously pinned VMO.
    ///
    /// Note:
    ///  * The VMO must be contiguous.
    ///  * `secure_mem` is expected to have a stable physical address that is pinned by some other
    ///    entity. The protocol implementation should not be expected to keep the VMO pinned.
    ///  * The server implementation must not use an IOMMU-backed BTI handle, as the physical
    ///    address of the VMO being pinned must be stable.
    strict GetSecureMemoryPhysicalAddress(resource struct {
        secure_mem zx.Handle:VMO;
    }) -> (struct {
        s zx.Status;
        paddr uint64;
    });
};

// Added to allow service connection to replace devfs
service Service {
    device client_end:Device;
};
