blob: ba006e277bcae849ce51e3346c84e25d65a3f3ad [file] [log] [blame]
// Copyright 2018 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.
#ifndef GARNET_LIB_MAGMA_INCLUDE_VIRTIO_VIRTIO_MAGMA_H_
#define GARNET_LIB_MAGMA_INCLUDE_VIRTIO_VIRTIO_MAGMA_H_
#include <stdint.h>
#include <zircon/compiler.h>
__BEGIN_CDECLS
enum virtio_magma_ctrl_type {
/* magma commands */
VIRTIO_MAGMA_CMD_QUERY = 0x0400,
VIRTIO_MAGMA_CMD_CREATE_CONNECTION,
VIRTIO_MAGMA_CMD_RELEASE_CONNECTION,
VIRTIO_MAGMA_CMD_GET_ERROR,
VIRTIO_MAGMA_CMD_CREATE_CONTEXT,
VIRTIO_MAGMA_CMD_RELEASE_CONTEXT,
VIRTIO_MAGMA_CMD_CREATE_BUFFER,
VIRTIO_MAGMA_CMD_RELEASE_BUFFER,
VIRTIO_MAGMA_CMD_GET_BUFFER_ID,
VIRTIO_MAGMA_CMD_GET_BUFFER_SIZE,
VIRTIO_MAGMA_CMD_CLEAN_CACHE,
VIRTIO_MAGMA_CMD_SET_CACHE_POLICY,
VIRTIO_MAGMA_CMD_MAP,
VIRTIO_MAGMA_CMD_MAP_ALIGNED,
VIRTIO_MAGMA_CMD_MAP_SPECIFIC,
VIRTIO_MAGMA_CMD_UNMAP,
VIRTIO_MAGMA_CMD_MAP_BUFFER_GPU,
VIRTIO_MAGMA_CMD_UNMAP_BUFFER_GPU,
VIRTIO_MAGMA_CMD_COMMIT_BUFFER,
VIRTIO_MAGMA_CMD_EXPORT,
VIRTIO_MAGMA_CMD_IMPORT,
VIRTIO_MAGMA_CMD_CREATE_COMMAND_BUFFER,
VIRTIO_MAGMA_CMD_RELEASE_COMMAND_BUFFER,
VIRTIO_MAGMA_CMD_SUBMIT_COMMAND_BUFFER,
VIRTIO_MAGMA_CMD_EXECUTE_IMMEDIATE_COMMANDS,
VIRTIO_MAGMA_CMD_CREATE_SEMAPHORE,
VIRTIO_MAGMA_CMD_RELEASE_SEMAPHORE,
VIRTIO_MAGMA_CMD_GET_SEMAPHORE_ID,
VIRTIO_MAGMA_CMD_SIGNAL_SEMAPHORE,
VIRTIO_MAGMA_CMD_RESET_SEMAPHORE,
VIRTIO_MAGMA_CMD_WAIT_SEMAPHORES,
VIRTIO_MAGMA_CMD_EXPORT_SEMAPHORE,
VIRTIO_MAGMA_CMD_IMPORT_SEMAPHORE,
VIRTIO_MAGMA_CMD_GET_NOTIFICATION_CHANNEL_FD,
VIRTIO_MAGMA_CMD_READ_NOTIFICATION_CHANNEL,
/* magma success responses */
VIRTIO_MAGMA_RESP_QUERY = 0x1180,
VIRTIO_MAGMA_RESP_CREATE_CONNECTION,
VIRTIO_MAGMA_RESP_RELEASE_CONNECTION,
VIRTIO_MAGMA_RESP_GET_ERROR,
VIRTIO_MAGMA_RESP_CREATE_CONTEXT,
VIRTIO_MAGMA_RESP_RELEASE_CONTEXT,
VIRTIO_MAGMA_RESP_CREATE_BUFFER,
VIRTIO_MAGMA_RESP_RELEASE_BUFFER,
VIRTIO_MAGMA_RESP_GET_BUFFER_ID,
VIRTIO_MAGMA_RESP_GET_BUFFER_SIZE,
VIRTIO_MAGMA_RESP_CLEAN_CACHE,
VIRTIO_MAGMA_RESP_SET_CACHE_POLICY,
VIRTIO_MAGMA_RESP_MAP,
VIRTIO_MAGMA_RESP_MAP_ALIGNED,
VIRTIO_MAGMA_RESP_MAP_SPECIFIC,
VIRTIO_MAGMA_RESP_UNMAP,
VIRTIO_MAGMA_RESP_MAP_BUFFER_GPU,
VIRTIO_MAGMA_RESP_UNMAP_BUFFER_GPU,
VIRTIO_MAGMA_RESP_COMMIT_BUFFER,
VIRTIO_MAGMA_RESP_EXPORT,
VIRTIO_MAGMA_RESP_IMPORT,
VIRTIO_MAGMA_RESP_CREATE_COMMAND_BUFFER,
VIRTIO_MAGMA_RESP_RELEASE_COMMAND_BUFFER,
VIRTIO_MAGMA_RESP_SUBMIT_COMMAND_BUFFER,
VIRTIO_MAGMA_RESP_EXECUTE_IMMEDIATE_COMMANDS,
VIRTIO_MAGMA_RESP_CREATE_SEMAPHORE,
VIRTIO_MAGMA_RESP_RELEASE_SEMAPHORE,
VIRTIO_MAGMA_RESP_GET_SEMAPHORE_ID,
VIRTIO_MAGMA_RESP_SIGNAL_SEMAPHORE,
VIRTIO_MAGMA_RESP_RESET_SEMAPHORE,
VIRTIO_MAGMA_RESP_WAIT_SEMAPHORES,
VIRTIO_MAGMA_RESP_EXPORT_SEMAPHORE,
VIRTIO_MAGMA_RESP_IMPORT_SEMAPHORE,
VIRTIO_MAGMA_RESP_GET_NOTIFICATION_CHANNEL_FD,
VIRTIO_MAGMA_RESP_READ_NOTIFICATION_CHANNEL,
/* magma error responses */
VIRTIO_MAGMA_RESP_ERR_UNIMPLEMENTED = 0x1280,
VIRTIO_MAGMA_RESP_ERR_INTERNAL,
VIRTIO_MAGMA_RESP_ERR_HOST_DISCONNECTED,
VIRTIO_MAGMA_RESP_ERR_INVALID_COMMAND,
VIRTIO_MAGMA_RESP_ERR_INVALID_ARGUMENT,
} __PACKED;
typedef struct virtio_magma_ctrl_hdr {
uint32_t type;
uint32_t flags;
} __PACKED virtio_magma_ctrl_hdr_t;
typedef struct virtio_magma_query {
virtio_magma_ctrl_hdr_t hdr;
uint64_t field_id;
} __PACKED virtio_magma_query_t;
typedef struct virtio_magma_query_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t field_value_out;
uint32_t status_return;
} __PACKED virtio_magma_query_resp_t;
typedef struct virtio_magma_create_connection {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_create_connection_t;
typedef struct virtio_magma_create_connection_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection_return;
} __PACKED virtio_magma_create_connection_resp_t;
typedef struct virtio_magma_release_connection {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
} __PACKED virtio_magma_release_connection_t;
typedef struct virtio_magma_release_connection_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_release_connection_resp_t;
typedef struct virtio_magma_get_error {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
} __PACKED virtio_magma_get_error_t;
typedef struct virtio_magma_get_error_resp {
virtio_magma_ctrl_hdr_t hdr;
uint32_t status_return;
} __PACKED virtio_magma_get_error_resp_t;
typedef struct virtio_magma_create_context {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
} __PACKED virtio_magma_create_context_t;
typedef struct virtio_magma_create_context_resp {
virtio_magma_ctrl_hdr_t hdr;
uint32_t context_id_out;
} __PACKED virtio_magma_create_context_resp_t;
typedef struct virtio_magma_release_context {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint32_t context_id;
} __PACKED virtio_magma_release_context_t;
typedef struct virtio_magma_release_context_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_release_context_resp_t;
typedef struct virtio_magma_create_buffer {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t size;
} __PACKED virtio_magma_create_buffer_t;
typedef struct virtio_magma_create_buffer_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t size_out;
uint64_t buffer_out;
uint32_t status_return;
} __PACKED virtio_magma_create_buffer_resp_t;
typedef struct virtio_magma_release_buffer {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
} __PACKED virtio_magma_release_buffer_t;
typedef struct virtio_magma_release_buffer_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_release_buffer_resp_t;
typedef struct virtio_magma_get_buffer_id {
virtio_magma_ctrl_hdr_t hdr;
uint64_t buffer;
} __PACKED virtio_magma_get_buffer_id_t;
typedef struct virtio_magma_get_buffer_id_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t id_return;
} __PACKED virtio_magma_get_buffer_id_resp_t;
typedef struct virtio_magma_get_buffer_size {
virtio_magma_ctrl_hdr_t hdr;
uint64_t buffer;
} __PACKED virtio_magma_get_buffer_size_t;
typedef struct virtio_magma_get_buffer_size_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t size_return;
} __PACKED virtio_magma_get_buffer_size_resp_t;
typedef struct virtio_magma_clean_cache {
virtio_magma_ctrl_hdr_t hdr;
uint64_t buffer;
uint64_t offset;
uint64_t size;
uint32_t operation;
} __PACKED virtio_magma_clean_cache_t;
typedef struct virtio_magma_clean_cache_resp {
virtio_magma_ctrl_hdr_t hdr;
uint32_t status_return;
} __PACKED virtio_magma_clean_cache_resp_t;
typedef struct virtio_magma_set_cache_policy {
virtio_magma_ctrl_hdr_t hdr;
uint64_t buffer;
uint32_t policy;
} __PACKED virtio_magma_set_cache_policy_t;
typedef struct virtio_magma_set_cache_policy_resp {
virtio_magma_ctrl_hdr_t hdr;
uint32_t status_return;
} __PACKED virtio_magma_set_cache_policy_resp_t;
typedef struct virtio_magma_map {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
} __PACKED virtio_magma_map_t;
typedef struct virtio_magma_map_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t addr_out;
uint32_t status_return;
} __PACKED virtio_magma_map_resp_t;
typedef struct virtio_magma_map_aligned {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
uint64_t alignment;
} __PACKED virtio_magma_map_aligned_t;
typedef struct virtio_magma_map_aligned_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t addr_out;
uint32_t status_return;
} __PACKED virtio_magma_map_aligned_resp_t;
typedef struct virtio_magma_map_specific {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
uint64_t addr;
} __PACKED virtio_magma_map_specific_t;
typedef struct virtio_magma_map_specific_resp {
virtio_magma_ctrl_hdr_t hdr;
uint32_t status_return;
} __PACKED virtio_magma_map_specific_resp_t;
typedef struct virtio_magma_unmap {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
} __PACKED virtio_magma_unmap_t;
typedef struct virtio_magma_unmap_resp {
virtio_magma_ctrl_hdr_t hdr;
uint32_t status_return;
} __PACKED virtio_magma_unmap_resp_t;
typedef struct virtio_magma_map_buffer_gpu {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
uint64_t page_offset;
uint64_t page_count;
uint64_t gpu_va;
uint64_t map_flags;
} __PACKED virtio_magma_map_buffer_gpu_t;
typedef struct virtio_magma_map_buffer_gpu_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_map_buffer_gpu_resp_t;
typedef struct virtio_magma_unmap_buffer_gpu {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
uint64_t gpu_va;
} __PACKED virtio_magma_unmap_buffer_gpu_t;
typedef struct virtio_magma_unmap_buffer_gpu_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_unmap_buffer_gpu_resp_t;
typedef struct virtio_magma_commit_buffer {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
uint64_t page_offset;
uint64_t page_count;
} __PACKED virtio_magma_commit_buffer_t;
typedef struct virtio_magma_commit_buffer_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_commit_buffer_resp_t;
typedef struct virtio_magma_export {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
} __PACKED virtio_magma_export_t;
typedef struct virtio_magma_export_resp {
virtio_magma_ctrl_hdr_t hdr;
uint32_t buffer_handle_out;
uint32_t status_return;
} __PACKED virtio_magma_export_resp_t;
typedef struct virtio_magma_import {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
} __PACKED virtio_magma_import_t;
typedef struct virtio_magma_import_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t buffer_out;
uint32_t buffer_handle;
uint32_t status_return;
} __PACKED virtio_magma_import_resp_t;
typedef struct virtio_magma_create_command_buffer {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t size;
} __PACKED virtio_magma_create_command_buffer_t;
typedef struct virtio_magma_create_command_buffer_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t buffer_out;
uint32_t status_return;
} __PACKED virtio_magma_create_command_buffer_resp_t;
typedef struct virtio_magma_release_command_buffer {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t command_buffer;
} __PACKED virtio_magma_release_command_buffer_t;
typedef struct virtio_magma_release_command_buffer_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_release_command_buffer_resp_t;
typedef struct virtio_magma_submit_command_buffer {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t command_buffer;
uint32_t context_id;
} __PACKED virtio_magma_submit_command_buffer_t;
typedef struct virtio_magma_submit_command_buffer_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_submit_command_buffer_resp_t;
typedef struct virtio_magma_execute_immediate_commands {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t command_count;
uint64_t commands; // magma_system_inline_command_buffer[command_count]
uint32_t context_id;
} __PACKED virtio_magma_execute_immediate_commands_t;
typedef struct virtio_magma_execute_immediate_commands_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_execute_immediate_commands_resp_t;
typedef struct virtio_magma_create_semaphore {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
} __PACKED virtio_magma_create_semaphore_t;
typedef struct virtio_magma_create_semaphore_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t semaphore_out;
uint32_t status_return;
} __PACKED virtio_magma_create_semaphore_resp_t;
typedef struct virtio_magma_release_semaphore {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t semaphore;
} __PACKED virtio_magma_release_semaphore_t;
typedef struct virtio_magma_release_semaphore_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_release_semaphore_resp_t;
typedef struct virtio_magma_get_semaphore_id {
virtio_magma_ctrl_hdr_t hdr;
uint64_t semaphore;
} __PACKED virtio_magma_get_semaphore_id_t;
typedef struct virtio_magma_get_semaphore_id_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t id_return;
} __PACKED virtio_magma_get_semaphore_id_resp_t;
typedef struct virtio_magma_signal_semaphore {
virtio_magma_ctrl_hdr_t hdr;
uint64_t semaphore;
} __PACKED virtio_magma_signal_semaphore_t;
typedef struct virtio_magma_signal_semaphore_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_signal_semaphore_resp_t;
typedef struct virtio_magma_reset_semaphore {
virtio_magma_ctrl_hdr_t hdr;
uint64_t semaphore;
} __PACKED virtio_magma_reset_semaphore_t;
typedef struct virtio_magma_reset_semaphore_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_reset_semaphore_resp_t;
typedef struct virtio_magma_wait_semaphores {
virtio_magma_ctrl_hdr_t hdr;
uint64_t timeout_ms;
uint64_t semaphores; // magma_semaphore_t[count]
uint32_t count;
uint32_t status_return;
uint8_t wait_all;
} __PACKED virtio_magma_wait_semaphores_t;
typedef struct virtio_magma_wait_semaphores_resp {
virtio_magma_ctrl_hdr_t hdr;
} __PACKED virtio_magma_wait_semaphores_resp_t;
typedef struct virtio_magma_export_semaphore {
virtio_magma_ctrl_hdr_t hdr;
uint64_t semaphore;
uint64_t connection;
} __PACKED virtio_magma_export_semaphore_t;
typedef struct virtio_magma_export_semaphore_resp {
virtio_magma_ctrl_hdr_t hdr;
uint32_t semaphore_handle_out;
uint32_t status_return;
} __PACKED virtio_magma_export_semaphore_resp_t;
typedef struct virtio_magma_import_semaphore {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint32_t semaphore_handle;
} __PACKED virtio_magma_import_semaphore_t;
typedef struct virtio_magma_import_semaphore_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t semaphore_out;
uint32_t status_return;
} __PACKED virtio_magma_import_semaphore_resp_t;
typedef struct virtio_magma_get_notification_channel_fd {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
} __PACKED virtio_magma_get_notification_channel_fd_t;
typedef struct virtio_magma_get_notification_channel_fd_resp {
virtio_magma_ctrl_hdr_t hdr;
int32_t fd_return;
} __PACKED virtio_magma_get_notification_channel_fd_resp_t;
typedef struct virtio_magma_read_notification_channel {
virtio_magma_ctrl_hdr_t hdr;
uint64_t connection;
uint64_t buffer;
uint64_t buffer_size;
} __PACKED virtio_magma_read_notification_channel_t;
typedef struct virtio_magma_read_notification_channel_resp {
virtio_magma_ctrl_hdr_t hdr;
uint64_t buffer_size_out;
uint32_t status_return;
} __PACKED virtio_magma_read_notification_channel_resp_t;
__END_CDECLS
#endif // GARNET_LIB_MAGMA_INCLUDE_VIRTIO_VIRTIO_MAGMA_H_