| // 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.goldfish; |
| |
| using zx; |
| |
| /// Signal that will be active on event handle if the Read() method |
| /// will return data. |
| const uint32 SIGNAL_READABLE = 0x01000000; // ZX_USER_SIGNAL_0 |
| |
| /// Signal that will be active on event handle if the Write() method |
| /// will accept data. |
| const uint32 SIGNAL_WRITABLE = 0x02000000; // ZX_USER_SIGNAL_1 |
| |
| /// Signal that will be active on event handle if the device has been |
| /// disconnected. |
| const uint32 SIGNAL_HANGUP = 0x04000000; // ZX_USER_SIGNAL_2 |
| |
| /// Interface for the Goldfish pipe driver. |
| [Layout = "Simple"] |
| protocol PipeDevice { |
| /// Open pipe. A protocol request `pipe_request` provides an interface |
| /// to the pipe. Multiple pipes can be opened for a single device. |
| /// Closing the device connection will also close all pipe connections. |
| /// TODO(DX-1766): Unify `device` and `pipe`. |
| OpenPipe(request<Pipe> pipe_request); |
| }; |
| |
| [Layout = "Simple"] |
| protocol Pipe { |
| /// Request new IO buffer size. Can fail if out of memory. Discards |
| /// contents of existing buffer on success. Leaves existing buffer |
| /// intact on failure. |
| SetBufferSize(uint64 size) -> (zx.status res); |
| |
| /// Set event used to signal device state. Discards existing event |
| /// after having transferred device state to the new event. |
| SetEvent(handle<event> event); |
| |
| /// Acquire VMO for IO buffer. Can be called multiple times. Each call |
| /// returns a new handle to the VMO. |
| GetBuffer() -> (zx.status res, handle<vmo>? vmo); |
| |
| /// Attempt to read up to count bytes into IO buffer at specified offset. |
| /// Returns `ZX_ERR_SHOULD_WAIT` if pipe device is not readable. |
| Read(uint64 count, uint64 offset) -> (zx.status res, uint64 actual); |
| |
| /// Writes up to count bytes from the IO buffer at specified offset. |
| /// Returns `ZX_ERR_SHOULD_WAIT` if pipe device is not writable. |
| Write(uint64 count, uint64 offset) -> (zx.status res, uint64 actual); |
| |
| /// Writes count bytes from the IO buffer at specified write |
| /// offset. Blocks if pipe device is not writable. Subsequently reads |
| /// read_count bytes into the IO buffer at specified read offset. |
| /// Returns `ZX_ERR_SHOULD_WAIT` if pipe device is not readable. |
| Call(uint64 count, uint64 offset, uint64 read_count, uint64 read_offset) |
| -> (zx.status res, uint64 actual); |
| }; |