| // Copyright 2021 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=12) |
| library fuchsia.device.fs; |
| |
| using zx; |
| using fuchsia.io; |
| |
| @available(added=16) |
| type ConnectionType = flexible bits : uint8 { |
| /// Represents the fuchsia.io/Node protocol. |
| NODE = 0b001; |
| /// Represents the fuchsia.device/Controller protocol. |
| CONTROLLER = 0b010; |
| /// Represents the device specific FIDL. |
| DEVICE = 0b100; |
| }; |
| |
| /// A connector lets a client forward the server end of a protocol. |
| closed protocol Connector { |
| /// Forward a server end of a protocol so that it can be connected. |
| /// + request `server` the server end of the protocol to be served. The FIDL protocol that |
| /// this speaks is determined out-of-band. |
| /// - response This function has no response. The function is one-way to match the pipelining |
| /// behaviors of other virtual filesystems. |
| strict Connect(resource struct { |
| server zx.Handle:CHANNEL; |
| }); |
| }; |
| |
| // Arguments for adding a node to the devfs filesystem. |
| @available(added=HEAD) |
| type DevfsAddArgs = resource table { |
| /// This is the connector to be installed in devfs. |
| /// `Connect()` will be called when a client connects to this node in the filesystem. |
| /// Optional: If this is not provided then an empty node will appear in devfs. |
| 1: connector client_end:Connector; |
| |
| /// This is the class name for installing this node in devfs. |
| /// The node will be placed within /dev/class/{class_name}. |
| /// If `class_name` does not exist under /dev/class/ it will be created. |
| /// Optional: If this is not provided then the node will only be added via topological path. |
| 2: class_name string:fuchsia.io.MAX_NAME_LENGTH; |
| |
| /// This is a vmo of inspect data that will be installed in devfs. |
| /// Optional: If this is not provided then the devfs's inspect data will be empty. |
| 3: inspect zx.Handle:VMO; |
| |
| /// The connection types that are supported by the |connector| given. |
| /// The driver framework should handle connection types that are not supported by the |
| /// connector. |
| /// If not provided, only the device type is assumed as supported by the connector. |
| @available(added=HEAD) |
| 4: connector_supports ConnectionType; |
| |
| /// This is the controller connector to be installed in devfs. |
| /// `Connect()` will be called when a client connects to the device_controller connection |
| /// for this node in the filesystem. |
| /// Optional: If this is not provided then the Node will handle the connection natively. |
| /// This option should only be used by the compat shim or in tests |
| @available(added=HEAD) |
| 5: controller_connector client_end:Connector; |
| }; |