| // 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.index; |
| |
| using fuchsia.driver.framework; |
| |
| using zx; |
| |
| /// Driver matched by the driver index. |
| type MatchDriverResult = flexible union { |
| /// Information for a normal driver. |
| 1: driver fuchsia.driver.framework.DriverInfo; |
| |
| /// Information for a parent spec. |
| 2: composite_parents vector<fuchsia.driver.framework.CompositeParent>:MAX; |
| }; |
| |
| type MatchDriverArgs = table { |
| /// Properties of the node to be matched. |
| 1: properties fuchsia.driver.framework.NodePropertyVector; |
| |
| /// The name of the node to be matched. Used for debugging purposes. |
| 2: name fuchsia.driver.framework.NodeName; |
| |
| // If this is present, only drivers with URLs that end with this suffix will be checked for |
| // binding. |
| 3: driver_url_suffix string:MAX; |
| }; |
| |
| /// Protocol through which the driver index can be queried. |
| @discoverable |
| closed protocol DriverIndex { |
| /// Match a set of device arguments to a driver package URL. |
| strict MatchDriver(struct { |
| args MatchDriverArgs; |
| }) -> (MatchDriverResult) error zx.Status; |
| |
| /// Hanging get function that replies when a boot or base driver is loaded |
| /// into the Driver Index. |
| strict WatchForDriverLoad() -> (); |
| |
| /// Adds a composite node spec to the driver index. The driver index stores the |
| /// composite node spec and maps it by the name. The stored composite node specs are |
| /// included in the driver matching process. |
| strict AddCompositeNodeSpec(fuchsia.driver.framework.CompositeNodeSpec) -> () error zx.Status; |
| |
| /// Rematch the composite node spec to a composite driver. If a driver url suffix is |
| /// provided, the composite node spec will only be matched against drivers with URLS that |
| /// end with the suffix. |
| strict RebindCompositeNodeSpec(struct { |
| spec string:MAX; |
| driver_url_suffix string:<MAX, optional>; |
| }) -> () error zx.Status; |
| }; |