// 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.sysmem;

using zx;

[Transport = "Banjo", BanjoLayout = "ddk-protocol"]
protocol Sysmem {
    /// Takes the server end of a FIDL connection that'll serve
    /// fuchsia.sysmem.Allocator.  If the connection fails, the channel will
    /// close.
    Connect(zx.handle:CHANNEL allocator_request) -> (zx.status s);

    /// Takes the client end of a FIDL connection that'll serve
    /// fuchsia.sysmem.Heap.
    RegisterHeap(uint64 heap, zx.handle:CHANNEL heap_connection) -> (zx.status s);

    /// Takes the client end of a FIDL connection that'll serve
    /// fuchsia.sysmem.SecureMem, which is a protocol that's specific to
    /// sysmem<->securemem concerns.
    RegisterSecureMem(zx.handle:CHANNEL secure_mem_connection) -> (zx.status s);

    /// Informs sysmem that the channel previously passed to RegisterSecureMem()
    /// will be closing soon, and that this channel closure should not be
    /// considered an error.
    UnregisterSecureMem() -> (zx.status s);
};
