aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Reveman <reveman@google.com>2019-04-08 11:30:05 -0400
committerRoman Kiryanov <rkir@google.com>2019-04-24 14:57:18 -0700
commit397f5689739d5bd80b2fabb9c12bfa138e034eb8 (patch)
tree081a7e1ceda448cc024982299ea0c729dcd82b19
parentddd0606af55d6a869a523be97653490f200044c9 (diff)
downloaddevice_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.gn7
-rw-r--r--shared/OpenglCodecCommon/goldfish_address_space.cpp67
-rw-r--r--shared/OpenglCodecCommon/goldfish_address_space.h8
-rw-r--r--system/vulkan_enc/ResourceTracker.cpp1
4 files changed, 37 insertions, 46 deletions
diff --git a/BUILD.gn b/BUILD.gn
index 385ae8de..a6da1bd4 100644
--- a/BUILD.gn
+++ b/BUILD.gn
@@ -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>