diff options
author | David Reveman <reveman@google.com> | 2019-04-08 11:30:05 -0400 |
---|---|---|
committer | Roman Kiryanov <rkir@google.com> | 2019-04-24 14:57:18 -0700 |
commit | 397f5689739d5bd80b2fabb9c12bfa138e034eb8 (patch) | |
tree | 081a7e1ceda448cc024982299ea0c729dcd82b19 | |
parent | ddd0606af55d6a869a523be97653490f200044c9 (diff) | |
download | device_generic_goldfish-opengl-397f5689739d5bd80b2fabb9c12bfa138e034eb8.tar.gz device_generic_goldfish-opengl-397f5689739d5bd80b2fabb9c12bfa138e034eb8.tar.bz2 device_generic_goldfish-opengl-397f5689739d5bd80b2fabb9c12bfa138e034eb8.zip |
Switch to goldfish address space device
Use goldfish address space device on fuchsia.
Test: none
Bug: 111137294
Change-Id: I1b340f21f745075848df613d2e47e5f169e8b802
Merged-In: Ibf86ba488c08c2ea5825fd271ae1a1dcc5a604da
-rw-r--r-- | BUILD.gn | 7 | ||||
-rw-r--r-- | shared/OpenglCodecCommon/goldfish_address_space.cpp | 67 | ||||
-rw-r--r-- | shared/OpenglCodecCommon/goldfish_address_space.h | 8 | ||||
-rw-r--r-- | system/vulkan_enc/ResourceTracker.cpp | 1 |
4 files changed, 37 insertions, 46 deletions
@@ -99,16 +99,15 @@ shared_library("vulkan_goldfish") { ] deps = [ - "//zircon/public/fidl/fuchsia-hardware-goldfish:fuchsia-hardware-goldfish_c", + "//zircon/public/fidl/fuchsia-hardware-goldfish-address-space:fuchsia-hardware-goldfish-address-space_c", "//zircon/public/fidl/fuchsia-sysmem", "//zircon/public/lib/fdio", - "//zircon/public/lib/fzl", "//zircon/public/lib/trace", ] defines += [ - "QEMU_PIPE_PATH=\"/dev/sys/platform/acpi/goldfish/goldfish-pipe\"", - "GOLDFISH_ADDRESS_SPACE_DEVICE_NAME=\"/dev/sys/platform/acpi/goldfish/goldfish-pipe\"", + "QEMU_PIPE_PATH=\"/dev/class/goldfish-pipe/000\"", + "GOLDFISH_ADDRESS_SPACE_DEVICE_NAME=\"/dev/class/goldfish-address-space/000\"", ] } } diff --git a/shared/OpenglCodecCommon/goldfish_address_space.cpp b/shared/OpenglCodecCommon/goldfish_address_space.cpp index afa6b85d..bbc59c61 100644 --- a/shared/OpenglCodecCommon/goldfish_address_space.cpp +++ b/shared/OpenglCodecCommon/goldfish_address_space.cpp @@ -127,8 +127,9 @@ void GoldfishAddressSpaceBlock::replace(GoldfishAddressSpaceBlock *other) } #elif __Fuchsia__ #include <fcntl.h> -#include <fuchsia/hardware/goldfish/c/fidl.h> -#include <lib/fzl/fdio.h> +#include <fuchsia/hardware/goldfish/address/space/c/fidl.h> +#include <lib/fdio/fdio.h> +#include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> #include <unistd.h> @@ -136,22 +137,23 @@ void GoldfishAddressSpaceBlock::replace(GoldfishAddressSpaceBlock *other) #include <zircon/syscalls.h> #include <zircon/syscalls/object.h> -GoldfishAddressSpaceBlockProvider::GoldfishAddressSpaceBlockProvider() - : m_fd(::open(GOLDFISH_ADDRESS_SPACE_DEVICE_NAME, O_RDWR)) {} +GoldfishAddressSpaceBlockProvider::GoldfishAddressSpaceBlockProvider() { + fdio_get_service_handle(::open(GOLDFISH_ADDRESS_SPACE_DEVICE_NAME, O_RDWR), &m_channel); +} GoldfishAddressSpaceBlockProvider::~GoldfishAddressSpaceBlockProvider() { - ::close(m_fd); + zx_handle_close(m_channel); } GoldfishAddressSpaceBlock::GoldfishAddressSpaceBlock() : m_vmo(ZX_HANDLE_INVALID) + , m_channel(ZX_HANDLE_INVALID) , m_mmaped_ptr(NULL) , m_phys_addr(0) , m_host_addr(0) , m_offset(0) - , m_size(0) - , m_fd(-1) {} + , m_size(0) {} GoldfishAddressSpaceBlock::~GoldfishAddressSpaceBlock() { @@ -166,7 +168,7 @@ GoldfishAddressSpaceBlock &GoldfishAddressSpaceBlock::operator=(const GoldfishAd m_host_addr = rhs.m_host_addr; m_offset = rhs.m_offset; m_size = rhs.m_size; - m_fd = rhs.m_fd; + m_channel = rhs.m_channel; return *this; } @@ -182,36 +184,13 @@ bool GoldfishAddressSpaceBlock::allocate(GoldfishAddressSpaceBlockProvider *prov return false; } - { - fzl::FdioCaller caller{fbl::unique_fd(provider->m_fd)}; - - int32_t res = ZX_OK; - zx_status_t status = - fuchsia_hardware_goldfish_DeviceAllocateVmo(caller.borrow_channel(), - size, &res, &m_vmo); - if (status != ZX_OK || res != ZX_OK) { - ALOGE("%s: allocate vmo failed: %d:%d", __func__, status, res); - provider->m_fd = caller.release().release(); - return false; - } - - zx_handle_t vmo_out; - status = zx_handle_duplicate(m_vmo, ZX_DEFAULT_VMO_RIGHTS, &vmo_out); - if (status != ZX_OK) { - ALOGE("%s: vmo dup failed: %d:%d", __func__, status); - provider->m_fd = caller.release().release(); - return false; - } - - status = fuchsia_hardware_goldfish_DeviceGetPhysicalAddress( - caller.borrow_channel(), - vmo_out, &res, &m_phys_addr); - provider->m_fd = caller.release().release(); - - if (status != ZX_OK || res != ZX_OK) { - ALOGE("%s: pin vmo failed: %d:%d", __func__, status, res); - return false; - } + int32_t res = ZX_OK; + zx_status_t status = + fuchsia_hardware_goldfish_address_space_DeviceAllocateBlock( + provider->m_channel, size, &res, &m_phys_addr, &m_vmo); + if (status != ZX_OK || res != ZX_OK) { + ALOGE("%s: allocate block failed: %d:%d", __func__, status, res); + return false; } m_offset = 0; @@ -221,7 +200,7 @@ bool GoldfishAddressSpaceBlock::allocate(GoldfishAddressSpaceBlockProvider *prov (unsigned long long)m_offset, (unsigned long long)m_size); - m_fd = provider->m_fd; + m_channel = provider->m_channel; return true; } @@ -284,6 +263,14 @@ void GoldfishAddressSpaceBlock::destroy() if (m_size) { zx_handle_close(m_vmo); m_vmo = ZX_HANDLE_INVALID; + int32_t res = ZX_OK; + zx_status_t status = + fuchsia_hardware_goldfish_address_space_DeviceDeallocateBlock( + m_channel, m_phys_addr, &res); + if (status != ZX_OK || res != ZX_OK) { + ALOGE("%s: deallocate block failed: %d:%d", __func__, status, res); + } + m_channel = ZX_HANDLE_INVALID; m_phys_addr = 0; m_host_addr = 0; m_offset = 0; @@ -303,7 +290,7 @@ void GoldfishAddressSpaceBlock::replace(GoldfishAddressSpaceBlock *other) bool GoldfishAddressSpaceBlockProvider::is_opened() { - return m_fd >= 0; + return m_channel != ZX_HANDLE_INVALID; } #else #include <linux/types.h> diff --git a/shared/OpenglCodecCommon/goldfish_address_space.h b/shared/OpenglCodecCommon/goldfish_address_space.h index 637e20df..7ebb4517 100644 --- a/shared/OpenglCodecCommon/goldfish_address_space.h +++ b/shared/OpenglCodecCommon/goldfish_address_space.h @@ -45,7 +45,11 @@ private: GoldfishAddressSpaceBlockProvider &operator=(const GoldfishAddressSpaceBlockProvider &rhs); bool is_opened(); +#ifdef __Fuchsia__ + uint32_t m_channel; +#else int m_fd; +#endif friend class GoldfishAddressSpaceBlock; }; @@ -75,13 +79,15 @@ private: #else #ifdef __Fuchsia__ uint32_t m_vmo; + uint32_t m_channel; +#else + int m_fd; #endif void *m_mmaped_ptr; uint64_t m_phys_addr; uint64_t m_host_addr; uint64_t m_offset; size_t m_size; - int m_fd; #endif }; diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp index c8e44b21..d3e476bb 100644 --- a/system/vulkan_enc/ResourceTracker.cpp +++ b/system/vulkan_enc/ResourceTracker.cpp @@ -58,7 +58,6 @@ typedef struct VkImportMemoryBufferCollectionFUCHSIA { #ifdef VK_USE_PLATFORM_FUCHSIA #include <cutils/native_handle.h> -#include <fuchsia/hardware/goldfish/c/fidl.h> #include <fuchsia/sysmem/cpp/fidl.h> #include <lib/fdio/directory.h> #include <lib/fdio/fd.h> |