// 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 ddk.driver;

// TODO: Not need this anymore.
[repr = "Hidden"]
struct ZxDevice {
};

// TODO: Not need this anymore.
[repr = "C"]
struct ZxProtocolDevice {
};

[repr = "C"]
struct ZxDeviceProp {
};

[repr = "C"]
struct DeviceAddArgs {
    /// DEVICE_ADD_ARGS_VERSION
    uint64 version;

    /// Driver name is copied to internal structure
    /// max length is ZX_DEVICE_NAME_MAX
    string name;

    /// Context pointer for use by the driver
    /// and passed to driver in all zx_protocol_device_t callbacks
    voidptr ctx;

    /// Pointer to device's device protocol operations
    ZxProtocolDevice? ops;

    /// Optional list of device properties
    ZxDeviceProp? props;

    /// Number of device properties
    uint32 prop_count;

    /// Optional custom protocol for this device
    uint32 proto_id;

    /// Optional custom protocol operations for this device
    voidptr proto_ops;

    /// Arguments used with DEVICE_ADD_MUST_ISOLATE
    /// these will be passed to the create() driver op of
    /// the proxy device in the new devhost
    string proxy_args;

    /// One or more of DEVICE_ADD_*
    uint32 flags;
};

[repr = "C"]
struct PhysIterSgEntry {
    /// length starting at the scatter gather entry offset, must be non zero
    usize length;
    /// offset relative to the buffer's vmo_offset
    usize offset;
};
