| // 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. |
| |
| #ifndef SRC_DEVICES_LIB_DRIVER2_RECORD_H_ |
| #define SRC_DEVICES_LIB_DRIVER2_RECORD_H_ |
| |
| #include <lib/async/dispatcher.h> |
| #include <zircon/fidl.h> |
| |
| struct DriverRecordV1 { |
| // This is the version of `DriverRecord` and all structures used by it. |
| uint64_t version; |
| |
| // Pointer to a function that can start execution of the driver. This |
| // function is executed on the shared driver thread within a `driver_host`. |
| // |
| // |msg| contains a `fuchsia.driver.framework.DriverStartArgs` table. The |
| // table is "moved" to the driver, and is then presumed to be owned by it. |
| // |dispatcher| is the default async dispatcher on which to run the driver. |
| // The driver is free to ignore this and use its own. |
| // |driver| provides a place to store the opaque driver structure. |
| zx_status_t (*start)(fidl_incoming_msg_t* msg, async_dispatcher_t* dispatcher, void** driver); |
| |
| // Pointer to a function that can stop execution of the driver. This function |
| // is executed on the shared driver thread within a `driver_host`. |
| // |
| // |driver| is the value that was stored when the driver was started. |
| zx_status_t (*stop)(void* driver); |
| }; |
| |
| #define FUCHSIA_DRIVER_RECORD_V1(start, stop) \ |
| extern "C" const DriverRecordV1 __fuchsia_driver_record__ __EXPORT { .version = 1, start, stop, } |
| |
| #endif // SRC_DEVICES_LIB_DRIVER2_RECORD_H_ |