blob: 0e28df5f1c876c5ef1b94715881c4d87285771d6 [file] [log] [blame]
// 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 zx;
@transport("Syscall")
closed protocol Debug {
/// ## Summary
///
/// Read a message from the debug serial port.
///
/// ## Declaration
///
/// ```c
/// #include <zircon/syscalls.h>
///
/// zx_status_t zx_debug_read(zx_handle_t handle,
/// char* buffer,
/// size_t buffer_size,
/// size_t* actual);
/// ```
///
/// ## Description
///
/// `zx_debug_read()` attempts to read data from the debug serial port.
/// The parameter *buffer_size* is used to specify the byte size of the read buffer.
/// The length of *buffer*, in bytes, is stored in the location pointed to by
/// *actual*.
///
/// This function will wait until at least one byte is available before it returns.
/// This can return up to *buffer_size* bytes.
///
/// `NOTE:` There is only one buffer of the data that is coming from the debug
/// serial, and calling `zx_debug_read` consumes this data. If multiple programs are calling
/// this at once, they will each receive pieces of the data stream.
///
/// To use the `zx_debug_read()` function, you must specify
/// `kernel.enable-serial-syscalls=true` on the kernel command line. Otherwise,
/// the function returns `ZX_ERR_NOT_SUPPORTED`.
///
/// ## Rights
///
/// *handle* must have resource kind `ZX_RSRC_KIND_SYSTEM` with base
/// `ZX_RSRC_SYSTEM_DEBUG_BASE`.
///
/// ## Return value
///
/// Returns `ZX_OK` on success. The location pointed to by *buffer* contains
/// *actual* bytes that were read.
///
/// ## Errors
///
/// `ZX_ERR_NOT_SUPPORTED` `kernel.enable-serial-syscalls` is not set to `true`
/// on the kernel command line.
///
/// `ZX_ERR_INVALID_ARGS` *buffer* or *actual* are NULL.
///
/// ## See also
///
/// - [kernel command line]
/// - [`zx_debug_write()`]
/// - [`zx_debuglog_read()`]
/// - [`zx_debuglog_write()`]
///
/// [kernel command line]: /docs/reference/kernel/kernel_cmdline.md
/// [`zx_debug_write()`]: debug_write.md
/// [`zx_debuglog_read()`]: debuglog_read.md
/// [`zx_debuglog_write()`]: debuglog_write.md
strict Read(resource struct {
handle Handle:RESOURCE;
}) -> (struct {
buffer vector<uchar>:MAX;
actual usize64;
}) error Status;
/// ## Summary
///
/// Write a message to the debug serial port.
///
/// ## Declaration
///
/// ```c
/// #include <zircon/syscalls.h>
///
/// zx_status_t zx_debug_write(const char* buffer, size_t buffer_size);
/// ```
///
/// ## Description
///
/// `zx_debug_write()` attempts to write data of *buffer_size* bytes to the debug serial port.
///
/// To use the `zx_debug_write()` function, you must specify
/// `kernel.enable-serial-syscalls=true` or
/// `kernel.enable-serial-syscalls=output-only` on the kernel command line.
/// Otherwise, the function returns `ZX_ERR_NOT_SUPPORTED`.
///
/// `zx_debug_write` is intended for diagnostic use. Data may be dropped or
/// truncated, but the data from two different `zx_debug_write` calls will not be
/// interleaved or reordered.
///
/// ## Rights
///
/// None.
///
/// ## Return value
///
/// Returns `ZX_OK` on success.
///
/// ## Errors
///
/// `ZX_ERR_NOT_SUPPORTED` `kernel.enable-serial-syscalls` is not set to `true`
/// or `output-only` on the kernel command line.
///
/// `ZX_ERR_INVALID_ARGS` *buffer* is NULL.
///
/// ## See also
///
/// - [kernel command line]
/// - [`zx_debug_read()`]
/// - [`zx_debuglog_read()`]
/// - [`zx_debuglog_write()`]
///
/// [kernel command line]: /docs/reference/kernel/kernel_cmdline.md
/// [`zx_debug_read()`]: debug_read.md
/// [`zx_debuglog_read()`]: debuglog_read.md
/// [`zx_debuglog_write()`]: debuglog_write.md
strict Write(struct {
buffer vector<uchar>:MAX;
}) -> () error Status;
/// ## Summary
///
/// TODO(https://fxbug.dev/42108078)
///
/// ## Declaration
///
/// ```c
/// #include <zircon/syscalls.h>
///
/// zx_status_t zx_debug_send_command(zx_handle_t resource,
/// const char* buffer,
/// size_t buffer_size);
/// ```
///
/// ## Description
///
/// To use the `zx_debug_send_command()` function, you must specify
/// `kernel.enable-debugging-syscalls=true` on the kernel command line. Otherwise,
/// the function returns `ZX_ERR_NOT_SUPPORTED`.
///
/// TODO(https://fxbug.dev/42108078)
///
/// ## Rights
///
/// *resource* must have resource kind `ZX_RSRC_KIND_SYSTEM` with base
/// `ZX_RSRC_SYSTEM_DEBUG_BASE`.
///
/// ## Return value
///
/// TODO(https://fxbug.dev/42108078)
///
/// ## Errors
///
/// TODO(https://fxbug.dev/42108078)
///
/// ## See also
///
/// TODO(https://fxbug.dev/42108078)
strict SendCommand(resource struct {
resource Handle:RESOURCE;
buffer vector<uchar>:MAX;
}) -> () error Status;
};