// Copyright 2019 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.hardware.usb.peripheral.block;

using zx;

/// Represents a simulated USB block device whose cache can be controlled.
/// This allows for integration testing of USB mass storage devices
/// both with and without caches.
@for_deprecated_c_bindings
protocol Device {
    /// Enables writeback caching. This requires the device
    /// to be disconnected at the time of the call. Calling it when the device is connected
    /// will result in undefined behavior.
    /// All writes will be buffered until a BLOCK_OP_FLUSH is received.
    EnableWritebackCache() -> (struct {
        status zx.status;
    });
    /// Disables writeback caching. This requires the device to be disconnected at the time
    /// of the call. Calling it when the device is connected will result in undefined behavior.
    /// Disabling this cache will cause any writes to be written immediately to non-volatile storage
    /// before returning to the caller.
    DisableWritebackCache() -> (struct {
        status zx.status;
    });
    /// Sets writeback cache reporting behavior. This requires the device
    /// to be disconnected at the time of the call. Calling it when the device is connected
    /// will result in undefined behavior.
    /// If report is set to true, the device will report its cache capability correctly to the
    /// host. If set to false, the writeback caching capabilities will NOT be reported.
    /// This can be used to test host drivers to ensure that they respond properly
    /// when the device does not report its caching capabilities.
    SetWritebackCacheReported(struct {
        report bool;
    }) -> (struct {
        status zx.status;
    });
};
