blob: 2e9a62247fb7badae7bfc800cf448bbf7a1e89ee [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.
#include "magma.h"
#include "virtio_magma_connection.h"
magma_status_t magma_query(int32_t file_descriptor, uint64_t id, uint64_t* value_out)
{
return magma::VirtioMagmaConnection::Query(file_descriptor, id, value_out);
}
magma_connection_t magma_create_connection(int32_t file_descriptor,
uint32_t /* capabilities (deprecated) */)
{
// Here we release ownership of the connection to the client.
return magma::VirtioMagmaConnection::Create(file_descriptor).release();
}
void magma_release_connection(magma_connection_t connection)
{
// Re-acquire ownership of the connection.
std::unique_ptr<magma::VirtioMagmaConnection> conn(
magma::VirtioMagmaConnection::cast(connection));
conn->Release();
}
magma_status_t magma_get_error(magma_connection_t connection)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->GetError();
}
void magma_create_context(magma_connection_t connection, uint32_t* context_id_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
conn->CreateContext(context_id_out);
}
void magma_release_context(magma_connection_t connection, uint32_t context_id)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
conn->ReleaseContext(context_id);
}
magma_status_t magma_create_buffer(magma_connection_t connection, uint64_t size, uint64_t* size_out,
magma_buffer_t* buffer_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->CreateBuffer(size, size_out, buffer_out);
}
void magma_release_buffer(magma_connection_t connection, magma_buffer_t buffer)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
conn->ReleaseBuffer(buffer);
}
uint64_t magma_get_buffer_id(magma_buffer_t buffer)
{
// TODO(msandy): implement
return 0;
}
uint64_t magma_get_buffer_size(magma_buffer_t buffer)
{
// TODO(msandy): implement
return 0;
}
magma_status_t magma_clean_cache(magma_buffer_t buffer, uint64_t offset, uint64_t size,
magma_cache_operation_t operation)
{
// TODO(msandy): implement
return MAGMA_STATUS_OK;
}
magma_status_t magma_set_cache_policy(magma_buffer_t buffer, magma_cache_policy_t policy)
{
// TODO(msandy): implement
return MAGMA_STATUS_OK;
}
magma_status_t magma_map(magma_connection_t connection, magma_buffer_t buffer, void** addr_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->Map(buffer, addr_out);
}
magma_status_t magma_map_aligned(magma_connection_t connection, magma_buffer_t buffer,
uint64_t alignment, void** addr_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->MapAligned(buffer, alignment, addr_out);
}
magma_status_t magma_map_specific(magma_connection_t connection, magma_buffer_t buffer,
uint64_t addr)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->MapSpecific(buffer, addr);
}
magma_status_t magma_unmap(magma_connection_t connection, magma_buffer_t buffer)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->Unmap(buffer);
}
void magma_map_buffer_gpu(struct magma_connection_t connection, magma_buffer_t buffer,
uint64_t page_offset, uint64_t page_count, uint64_t gpu_va,
uint64_t map_flags)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->MapBufferGpu(buffer, page_offset, page_count, gpu_va, map_flags);
}
void magma_unmap_buffer_gpu(struct magma_connection_t connection, magma_buffer_t buffer,
uint64_t gpu_va)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
conn->UnmapBufferGpu(buffer, gpu_va);
}
void magma_commit_buffer(struct magma_connection_t connection, magma_buffer_t buffer,
uint64_t page_offset, uint64_t page_count)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
conn->CommitBuffer(buffer, page_offset, page_count);
}
magma_status_t magma_export(magma_connection_t connection, magma_buffer_t buffer,
uint32_t* buffer_handle_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->Export(buffer, buffer_handle_out);
}
magma_status_t magma_import(magma_connection_t connection, uint32_t buffer_handle,
magma_buffer_t* buffer_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->Import(buffer_handle, buffer_out);
}
magma_status_t magma_create_command_buffer(magma_connection_t connection, uint64_t size,
magma_buffer_t* buffer_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->CreateCommandBuffer(size, buffer_out);
}
void magma_release_command_buffer(struct magma_connection_t connection,
magma_buffer_t command_buffer)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
conn->ReleaseCommandBuffer(command_buffer);
}
void magma_submit_command_buffer(magma_connection_t connection, magma_buffer_t command_buffer,
uint32_t context_id)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
conn->SubmitCommandBuffer(command_buffer, context_id);
}
void magma_execute_immediate_commands(magma_connection_t connection, uint32_t context_id,
uint64_t command_count,
magma_system_inline_command_buffer* command_buffers)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
conn->ExecuteImmediateCommands(context_id, command_count, command_buffers);
}
magma_status_t magma_create_semaphore(magma_connection_t connection,
magma_semaphore_t* semaphore_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->CreateSemaphore(semaphore_out);
}
void magma_release_semaphore(magma_connection_t connection, magma_semaphore_t semaphore)
{
// TODO(msandy): implement
}
uint64_t magma_get_semaphore_id(magma_semaphore_t semaphore)
{
// TODO(msandy): implement
return 0;
}
void magma_signal_semaphore(magma_semaphore_t semaphore)
{
// TODO(msandy): implement
}
void magma_reset_semaphore(magma_semaphore_t semaphore)
{
// TODO(msandy): implement
}
magma_status_t magma_wait_semaphores(const magma_semaphore_t* semaphores, uint32_t count,
uint64_t timeout_ms, magma_bool_t wait_all)
{
// TODO(msandy): implement
return MAGMA_STATUS_OK;
}
magma_status_t magma_export_semaphore(magma_connection_t connection, magma_semaphore_t semaphore,
uint32_t* semaphore_handle_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->ExportSemaphore(semaphore, semaphore_handle_out);
}
magma_status_t magma_import_semaphore(magma_connection_t connection, uint32_t semaphore_handle,
magma_semaphore_t* semaphore_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->ImportSemaphore(semaphore_handle, semaphore_out);
}
int32_t magma_get_notification_channel_fd(magma_connection_t connection)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->GetNotificationChannelFD();
}
magma_status_t magma_read_notification_channel(magma_connection_t connection, void* buffer,
uint64_t buffer_size, uint64_t* buffer_size_out)
{
auto conn = magma::VirtioMagmaConnection::cast(connection);
return conn->ReadNotificationChannel(buffer, buffer_size, buffer_size_out);
}