blob: 5532f7549178c8ae0d4a08c175f65af872245737 [file] [log] [blame]
// 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.driver.framework;
using fuchsia.component;
using zx;
const uint8 MAX_OFFER_COUNT = 64;
const uint8 MAX_SYMBOL_COUNT = 64;
const uint8 MAX_PROPERTY_COUNT = 64;
const uint8 MAX_NODE_NAME_LENGTH = 128;
const uint8 MAX_SYMBOL_NAME_LENGTH = 128;
/// Definition of a symbol provided by a driver for a node. A symbol is local to
/// a driver host.
table NodeSymbol {
/// Name of the symbol.
1: string:MAX_SYMBOL_NAME_LENGTH name;
/// Virtual address of the symbol, within a driver host's process.
2: zx.vaddr address;
};
/// Definition of a property for a node. A property is commonly used to match a
/// node to a driver for driver binding.
table NodeProperty {
/// Key for the property.
1: uint32 key;
/// Value for the property.
2: uint32 value;
};
/// Arguments for adding a node.
table NodeAddArgs {
/// Name of the node.
1: string:MAX_NODE_NAME_LENGTH name;
/// FIDL services to offer to the driver that is bound to this node.
2: vector<fuchsia.component.name>:MAX_OFFER_COUNT offers;
/// Functions to provide to the driver that is bound to this node.
3: vector<NodeSymbol>:MAX_SYMBOL_COUNT symbols;
/// Properties of the node.
4: vector<NodeProperty>:MAX_PROPERTY_COUNT properties;
};
/// Protocol through which a parent node controls one of its children.
protocol NodeController {
/// Removes the node and all of its children.
Remove();
};
/// Protocol through which a driver manages a node that it is bound to.
protocol Node {
/// Adds a child node to this node.
///
/// If `node` is present, this driver takes responsibility for binding to
/// the newly created child. Otherwise, the driver framework will locate an
/// appropriate driver to bind the child to.
AddChild(NodeAddArgs args,
request<NodeController> controller,
request<Node>? node);
};