// Copyright 2020 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.dsi;
using zx;

@transport("Banjo")
@banjo_layout("ddk-protocol")
protocol Dsi {
    /// This function takes the server end of a FIDL connection that will serve
    /// fuchsia.hardware.dsi.
    ///
    /// This is meant to be used by the display driver. This connection will stay
    /// open and valid throughout the lifecycle of the display driver.
    ///
    /// The protocol only accepts one client at a time.
    /// Returns ZX_OK upon successful connection.
    Connect(resource struct {
        server zx.handle:CHANNEL;
    }) -> (struct {
        status zx.status;
    });
};
