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

/// Once a channel with this interface is established to a driver (typically in
/// advance), this interface allows asynchronously sending the server end of an
/// Allocator channel which will be served by the driver.
///
/// For now, the only FIDL interface directly served via normal devhost FIDL
/// dispatching code by the sysmem driver is this interface.  Other sysmem
/// interfaces are served by separate dispatching code primarily because we want
/// to be able to establish channels async by sending the server channel toward
/// the driver without needing a round-trip open and without managing the channel
/// as a file descriptor.
///
/// A secondary current reason tracked by fxbug.dev/32924 is that the current devhost
/// dispatching code doesn't permit async processing of requests, which we want
/// for proper functionining of at least the BufferCollection interface since
/// that interface has requests that don't complete until the devhost has
/// constraints from other participants.
//
// Needs ForDeprecatedCBindings because used with "FIDL Simple C Bindings".
[Discoverable, ForDeprecatedCBindings]
protocol DriverConnector {
    /// This one-way message sends in the server end of an Allocator channel.
    ///
    /// `allocator_request` will be served by the sysmem driver (or the channel
    /// will close).
    Connect(request<Allocator> allocator_request);
};
