blob: 72581d0bdc43085786c0c78e610ff4b7a6ef9867 [file] [log] [blame]
// Copyright 2020 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.virtualization;
using fuchsia.hardware.block;
using fuchsia.net;
using fuchsia.io;
using fuchsia.wayland;
using zx;
const MAX_BLOCK_DEVICE_ID uint8 = 20;
const MAX_MEMORY uint8 = 32;
const MAX_BLOCK_DEVICES uint8 = 32;
const MAX_NET_DEVICES uint8 = 32;
/// Type of kernel used by a guest.
type KernelType = strict enum {
ZIRCON = 0;
LINUX = 1;
};
/// Properties describing a block device.
type BlockSpec = resource struct {
/// The ID used to identify the block device.
id string:MAX_BLOCK_DEVICE_ID;
/// The access mode for the block device.
mode @generated_name("BlockMode") strict enum {
/// Reads and writes are allowed.
READ_WRITE = 0;
/// Only reads are allowed.
READ_ONLY = 1;
/// Writes are allowed, but are stored in memory, not to disk.
VOLATILE_WRITE = 2;
};
/// The data format of the block device.
format @generated_name("BlockFormat") strict resource union {
/// File IO. All reads and writes go directly to disk as a flat file.
1: file client_end:fuchsia.io.File;
/// QCOW image. All reads and writes go to a QCOW image.
2: qcow zx.Handle:CHANNEL;
/// Block IO. All reads and writes go to a block server.
3: block client_end:fuchsia.hardware.block.Block;
};
};
/// Properites describing a network device.
type NetSpec = struct {
/// MAC address for the network device.
mac_address fuchsia.net.MacAddress;
/// Whether to bridge the network device with the host network device.
enable_bridge bool;
};
/// Properties describing a virtio_wl device.
type WaylandDevice = resource struct {
/// The amount of guest-physical address space to allocate for virtio_wl
/// buffers.
///
/// Default to a 1GiB allocation.
@allow_deprecated_struct_defaults
memory uint64 = 1073741824;
/// The server for new virtio_wl connections.
server client_end:<fuchsia.wayland.Server, optional>;
};
/// Properties describing a virtio_magma device.
type MagmaDevice = struct {
/// The amount of guest-physical address space to allocate for virtio_magma
/// buffers.
///
/// Default to a 16GiB allocation.
@allow_deprecated_struct_defaults
memory uint64 = 17179869184;
};
/// The configuration required to start up a guest. When adding a new field, consider updating
/// fuchsia.virtualization.GuestDescriptor which is an informational snapshot of this table.
type GuestConfig = resource table {
/// Type of kernel to load. Cannot be changed from the command-line.
1: kernel_type KernelType;
/// File to load the kernel from. Cannot be changed from the command-line.
2: kernel client_end:fuchsia.io.File;
/// File to load the initial RAM disk from. Cannot be changed from the
/// command-line.
3: ramdisk client_end:fuchsia.io.File;
/// File to load the dtb overlay for a Linux kernel from. Cannot be changed
/// from the command-line.
4: dtb_overlay client_end:fuchsia.io.File;
/// Kernel command-line to use. Cannot be changed from the command-line.
5: cmdline string:MAX;
/// Additional kernel command-lines to append to the main command-line.
6: cmdline_add vector<string:MAX>:MAX;
/// The number of CPUs to provide to a guest.
7: cpus uint8;
/// Amount of guest memory required, in bytes. This value may be rounded up depending on
/// the system configuration.
8: guest_memory uint64;
/// A list of block devices to give a guest. Cannot be changed from the
/// command-line.
9: block_devices vector<BlockSpec>:MAX_BLOCK_DEVICES;
/// A list of specifications for network devices.
10: net_devices vector<NetSpec>:MAX_NET_DEVICES;
/// Optional virtio-wl device.
11: wayland_device WaylandDevice;
/// Optional virtio-magma device.
12: magma_device MagmaDevice;
/// Whether to add a default network device.
13: default_net bool;
/// Enable virtio-balloon.
14: virtio_balloon bool;
/// Enable virtio-console.
15: virtio_console bool;
/// Enable virtio-gpu.
16: virtio_gpu bool;
/// Enable virtio-rng.
17: virtio_rng bool;
/// Enable virtio-vsock.
18: virtio_vsock bool;
/// Enable virtio-sound.
19: virtio_sound bool;
/// Enable input streams (capture) for virtio-sound.
20: virtio_sound_input bool;
/// Host ports to listen for guest initiated vsock connections on. This can be used for
/// simplicity if a Listener is known at config creation time, or if a Listener must be
/// available at the moment of guest creation for timing reasons.
///
/// To add a Listener after a guest starts, see HostVsockEndpoint::Listen.
21: vsock_listeners vector<Listener>:MAX;
// TODO(https://fxbug.dev/42051237): Model this similar to the MagmaDevice by using
// the resource table to bundle all of the virtio-mem parameters into a
// single resource table
/// Enable virtio-mem
22: virtio_mem bool;
/// Size of the dynamically (un)pluggable memory block.
/// Memory can be (un)plugged at this granularity.
/// Smaller block size increases changes of successful unplug at the cost of increasing
/// the size of tracking bitmap.
23: virtio_mem_block_size uint64;
/// Size of the entire dynamically pluggable memory region
24: virtio_mem_region_size uint64;
/// Required alignment of the dynamically pluggable memory region
25: virtio_mem_region_alignment uint64;
};