| // 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_ |