// 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.spiimpl;

using zx;

// Must match //sdk/fidl/fuchsia.hardware.sharedmemory/sharedmemory.fidl
enum SpiVmoRight : uint32 {
    READ = 0x1; // The protocol implementation can read from this VMO (used for write requests).
    WRITE = 0x2; // The protocol implementation can write to this VMO (used for read requests).
};

/// Low-level protocol for spi drivers.
[Transport = "Banjo", BanjoLayout = "ddk-protocol"]
protocol SpiImpl {
    /// Returns the number of chip select lines available or provided by the driver instance.
    /// To be used as a limit on the acceptable values for the `chip_select' field in the Exchange()
    /// and ExchangeVmo() methods.
    GetChipSelectCount() -> (uint32 count);

    /// Perform a SPI bus transaction of the specified length. Either txdata or rxdata may be
    /// NULL, in which case the transaction will be half-duplex in the appropriate direction.
    /// Regardless, both vectors must have the same length.
    Exchange(uint32 chip_select, vector<uint8>:MAX txdata) -> (zx.status status, vector<uint8>:MAX rxdata);

    /// rights is a bit field containing SpiVmoRight values, and determines the read/write
    /// permissions used by the implementation when pinning or mapping the VMO.
    RegisterVmo(uint32 chip_select, uint32 vmo_id, zx.handle:VMO vmo, uint64 offset, uint64 size,
                uint32 rights) -> (zx.status status);
    UnregisterVmo(uint32 chip_select, uint32 vmo_id) -> (zx.status status, zx.handle:VMO vmo);

    TransmitVmo(uint32 chip_select, uint32 vmo_id, uint64 offset, uint64 size)
        -> (zx.status status);
    ReceiveVmo(uint32 chip_select, uint32 vmo_id, uint64 offset, uint64 size)
        -> (zx.status status);
    ExchangeVmo(uint32 chip_select, uint32 tx_vmo_id, uint64 tx_offset, uint32 rx_vmo_id,
                uint64 rx_offset, uint64 size) -> (zx.status status);
};
