Revert "virtio-gpu-asg transport"
This reverts commit 7ceae4f920c59c0110c4347a21dec3d5066453cc.
Reason for revert: build break
Change-Id: Icad5325c97d6cb7b2a227173fc7bb47841058cbb
diff --git a/shared/GoldfishAddressSpace/Android.bp b/shared/GoldfishAddressSpace/Android.bp
index 4e8d31d..6dcdb56 100644
--- a/shared/GoldfishAddressSpace/Android.bp
+++ b/shared/GoldfishAddressSpace/Android.bp
@@ -6,13 +6,11 @@
],
shared_libs: [
"liblog",
- "libdrm",
],
export_include_dirs: [
"include",
],
cflags: [
"-DLOG_TAG=\"goldfish-address-space\"",
- "-DVIRTIO_GPU",
],
}
diff --git a/shared/GoldfishAddressSpace/include/goldfish_address_space.h b/shared/GoldfishAddressSpace/include/goldfish_address_space.h
index ad5e3cb..044e18a 100644
--- a/shared/GoldfishAddressSpace/include/goldfish_address_space.h
+++ b/shared/GoldfishAddressSpace/include/goldfish_address_space.h
@@ -49,7 +49,6 @@
Media = 1,
HostMemoryAllocator = 5,
SharedSlotsHostMemoryAllocator = 6,
- VirtioGpuGraphics = 10,
};
class GoldfishAddressSpaceBlockProvider {
@@ -136,7 +135,7 @@
// require different lifetime expectations versus GoldfishAddressSpaceBlock).
// We also expose the ping info struct that is shared between host and guest.
-struct address_space_ping {
+struct goldfish_address_space_ping {
uint64_t offset;
uint64_t size;
uint64_t metadata;
@@ -165,97 +164,6 @@
void goldfish_address_space_unmap(void* ptr, uint64_t size);
bool goldfish_address_space_set_subdevice_type(address_space_handle_t, GoldfishAddressSpaceSubdeviceType type, address_space_handle_t*);
-bool goldfish_address_space_ping(address_space_handle_t, struct address_space_ping*);
-
-// virtio-gpu version
-
-struct address_space_virtgpu_hostmem_info {
- uint32_t id;
- uint32_t bo;
- void* ptr;
-};
-
-struct address_space_virtgpu_info {
- int fd;
- uint32_t resp_bo;
- uint32_t resp_resid;
- void* resp_mapped_ptr;
-};
-
-address_space_handle_t virtgpu_address_space_open();
-void virtgpu_address_space_close(address_space_handle_t);
-
-// Ping with no response
-bool virtgpu_address_space_ping(address_space_handle_t, struct address_space_ping*);
-
-bool virtgpu_address_space_create_context_with_subdevice(
- address_space_handle_t,
- uint32_t subdevice_type,
- struct address_space_virtgpu_info* info_out);
-
-bool virtgpu_address_space_allocate_hostmem(
- address_space_handle_t fd,
- size_t size,
- uint64_t hostmem_id,
- struct address_space_virtgpu_hostmem_info* hostmem_info_out);
-
-// Ping with response
-bool virtgpu_address_space_ping_with_response(
- struct address_space_virtgpu_info* info,
- struct address_space_ping* ping);
-
-// typedef/struct to abstract over goldfish vs virtio-gpu implementations
-typedef address_space_handle_t (*address_space_open_t)(void);
-typedef void (*address_space_close_t)(address_space_handle_t);
-
-typedef bool (*address_space_allocate_t)(
- address_space_handle_t, size_t size, uint64_t* phys_addr, uint64_t* offset);
-typedef bool (*address_space_free_t)(
- address_space_handle_t, uint64_t offset);
-
-typedef bool (*address_space_claim_shared_t)(
- address_space_handle_t, uint64_t offset, uint64_t size);
-typedef bool (*address_space_unclaim_shared_t)(
- address_space_handle_t, uint64_t offset);
-
-// pgoff is the offset into the page to return in the result
-typedef void* (*address_space_map_t)(
- address_space_handle_t, uint64_t offset, uint64_t size, uint64_t pgoff);
-typedef void (*address_space_unmap_t)(void* ptr, uint64_t size);
-
-typedef bool (*address_space_set_subdevice_type_t)(
- address_space_handle_t, GoldfishAddressSpaceSubdeviceType type, address_space_handle_t*);
-typedef bool (*address_space_ping_t)(
- address_space_handle_t, struct address_space_ping*);
-
-// Specific to virtio-gpu
-typedef bool (*address_space_create_context_with_subdevice_t)(
- address_space_handle_t,
- uint32_t subdevice_type,
- struct address_space_virtgpu_info* info_out);
-
-typedef bool (*address_space_allocate_hostmem_t)(
- address_space_handle_t fd,
- size_t size,
- uint64_t hostmem_id,
- struct address_space_virtgpu_hostmem_info* hostmem_info_out);
-
-typedef bool (*address_space_ping_with_response_t)(
- struct address_space_virtgpu_info* info,
- struct address_space_ping* ping);
-
-struct address_space_ops {
- address_space_open_t open;
- address_space_close_t close;
- address_space_claim_shared_t claim_shared;
- address_space_unclaim_shared_t unclaim_shared;
- address_space_map_t map;
- address_space_unmap_t unmap;
- address_space_set_subdevice_type_t set_subdevice_type;
- address_space_ping_t ping;
- address_space_create_context_with_subdevice_t create_context_with_subdevice;
- address_space_allocate_hostmem_t allocate_hostmem;
- address_space_ping_with_response_t ping_with_response;
-};
+bool goldfish_address_space_ping(address_space_handle_t, struct goldfish_address_space_ping*);
#endif // #ifndef ANDROID_INCLUDE_HARDWARE_GOLDFISH_ADDRESS_SPACE_H
diff --git a/shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl b/shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl
index a8a70af..8ff7e78 100644
--- a/shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl
+++ b/shared/GoldfishAddressSpace/include/goldfish_address_space_android.impl
@@ -25,15 +25,9 @@
#include <errno.h>
#include <memory>
-#ifdef VIRTIO_GPU
-#include <drm/virtgpu_drm.h>
-#include <xf86drm.h>
-#endif
-
#include <log/log.h>
#include "goldfish_address_space.h"
-#include "virtio_gpu_next.h"
namespace {
@@ -52,7 +46,7 @@
#define GOLDFISH_ADDRESS_SPACE_IOCTL_OP(OP, T) _IOWR(GOLDFISH_ADDRESS_SPACE_IOCTL_MAGIC, OP, T)
#define GOLDFISH_ADDRESS_SPACE_IOCTL_ALLOCATE_BLOCK GOLDFISH_ADDRESS_SPACE_IOCTL_OP(10, struct goldfish_address_space_allocate_block)
#define GOLDFISH_ADDRESS_SPACE_IOCTL_DEALLOCATE_BLOCK GOLDFISH_ADDRESS_SPACE_IOCTL_OP(11, __u64)
-#define GOLDFISH_ADDRESS_SPACE_IOCTL_PING GOLDFISH_ADDRESS_SPACE_IOCTL_OP(12, struct address_space_ping)
+#define GOLDFISH_ADDRESS_SPACE_IOCTL_PING GOLDFISH_ADDRESS_SPACE_IOCTL_OP(12, struct goldfish_address_space_ping)
#define GOLDFISH_ADDRESS_SPACE_IOCTL_CLAIM_SHARED GOLDFISH_ADDRESS_SPACE_IOCTL_OP(13, struct goldfish_address_space_claim_shared)
#define GOLDFISH_ADDRESS_SPACE_IOCTL_UNCLAIM_SHARED GOLDFISH_ADDRESS_SPACE_IOCTL_OP(14, __u64)
@@ -76,14 +70,14 @@
return ::ioctl(fd, GOLDFISH_ADDRESS_SPACE_IOCTL_DEALLOCATE_BLOCK, &offset);
}
-long ioctl_ping(int fd, struct address_space_ping *request)
+long ioctl_ping(int fd, struct goldfish_address_space_ping *request)
{
return ::ioctl(fd, GOLDFISH_ADDRESS_SPACE_IOCTL_PING, request);
}
long set_address_space_subdevice_type(int fd, uint64_t type)
{
- struct address_space_ping request;
+ struct goldfish_address_space_ping request;
::memset(&request, 0, sizeof(request));
request.version = sizeof(request);
request.metadata = type;
@@ -365,7 +359,7 @@
return -ENODEV;
}
- struct address_space_ping request;
+ struct goldfish_address_space_ping request;
if (m_useSharedSlots) {
// shared memory slots are supported
::memset(&request, 0, sizeof(request));
@@ -421,7 +415,7 @@
}
if (block->guestPtr()) {
- struct address_space_ping request;
+ struct goldfish_address_space_ping request;
::memset(&request, 0, sizeof(request));
request.version = sizeof(request);
request.offset = block->offset();
@@ -523,7 +517,7 @@
bool goldfish_address_space_set_subdevice_type(
address_space_handle_t handle, GoldfishAddressSpaceSubdeviceType type,
address_space_handle_t* handle_out) {
- struct address_space_ping request;
+ struct goldfish_address_space_ping request;
request.metadata = (uint64_t)type;
*handle_out = handle;
return goldfish_address_space_ping(handle, &request);
@@ -531,7 +525,7 @@
bool goldfish_address_space_ping(
address_space_handle_t handle,
- struct address_space_ping* ping) {
+ struct goldfish_address_space_ping* ping) {
long res = ioctl_ping(handle, ping);
if (res) {
@@ -541,240 +535,3 @@
return true;
}
-
-// virtio-gpu version
-address_space_handle_t virtgpu_address_space_open() {
-return drmOpenRender(128);
-}
-
-void virtgpu_address_space_close(address_space_handle_t fd) {
-close(fd);
-}
-
-// kVirtioGpuAddressSpaceContextCreateWithSubdevice | subdeviceType
-const uint32_t kVirtioGpuAddressSpaceContextCreateWithSubdevice = 0x1001;
-
-// kVirtioGpuAddressSpacePing | offset_lo | offset_hi | size_lo | size_hi | metadata_lo | metadata_hi | version | wait_fd | wait_flags | direction
-// no output
-const uint32_t kVirtioGpuAddressSpacePing = 0x1002;
-
-// kVirtioGpuAddressSpacePingWithResponse | resp_resid | offset_lo | offset_hi | metadata_lo | metadata_hi | version | wait_fd | wait_flags | direction
-// out: same as input then | out: error
-const uint32_t kVirtioGpuAddressSpacePingWithResponse = 0x1003;
-
-// Ping with no response
-bool virtgpu_address_space_ping(address_space_handle_t fd, struct address_space_ping* info) {
-
- uint32_t words[] = {
- kVirtioGpuAddressSpacePing,
- (uint32_t)(info->offset), (uint32_t)(info->offset >> 32),
- (uint32_t)(info->size), (uint32_t)(info->size >> 32),
- (uint32_t)(info->metadata), (uint32_t)(info->metadata >> 32),
- (uint32_t)(info->version), (uint32_t)(info->wait_fd),
- (uint32_t)(info->wait_flags), (uint32_t)(info->direction),
- };
-
- drm_virtgpu_execbuffer execbuffer = {
- .flags = 0,
- .size = sizeof(words),
- .command = (uint64_t)(uintptr_t)(words),
- .bo_handles = 0,
- .num_bo_handles = 0,
- .fence_fd = -1,
- };
-
- int queue_work_err = drmIoctl(fd, DRM_IOCTL_VIRTGPU_EXECBUFFER, &execbuffer);
-
- if (queue_work_err) {
- ALOGE("%s: failed with %d executing command buffer (%s)\n", __func__,
- queue_work_err, strerror(errno));
- return false;
- }
-
- return true;
-}
-
-bool virtgpu_address_space_create_context_with_subdevice(
- address_space_handle_t fd,
- uint32_t subdevice_type,
- struct address_space_virtgpu_info* info_out) {
-
- // response page
- drm_virtgpu_resource_create create = {
- .target = PIPE_BUFFER,
- .format = VIRGL_FORMAT_R8_UNORM,
- .bind = VIRGL_BIND_CUSTOM,
- .width = 4096,
- .height = 1U,
- .depth = 1U,
- .array_size = 0U,
- .size = 4096,
- .stride = 4096,
- };
-
- int ret = drmIoctl(fd, DRM_IOCTL_VIRTGPU_RESOURCE_CREATE, &create);
- if (ret) {
- ALOGE("%s: failed with %d allocating command buffer (%s)\n",
- __func__, ret, strerror(errno));
- return false;
- }
-
- drm_virtgpu_map map = {
- .handle = create.bo_handle,
- };
-
- ret = drmIoctl(fd, DRM_IOCTL_VIRTGPU_MAP, &map);
- if (ret) {
- ALOGE("%s: failed with %d mapping command response buffer (%s)\n",
- __func__, ret, strerror(errno));
- return false;
- }
-
- void* ptr = static_cast<unsigned char*>(
- mmap64(nullptr, 4096, PROT_WRITE, MAP_SHARED, fd, map.offset));
-
- if (ptr == MAP_FAILED) {
- ALOGE("%s: failed with %d mmap'ing command response buffer (%s)\n",
- __func__, errno, strerror(errno));
- return false;
- }
-
- info_out->fd = fd;
- info_out->resp_bo = create.bo_handle;
- info_out->resp_resid = create.res_handle;
- info_out->resp_mapped_ptr = ptr;
-
- ALOGD("%s: resp bo: %u resid %u mapped %p\n", __func__,
- create.bo_handle, create.res_handle, ptr);
-
- // Context creation command
- uint32_t words[] = {
- kVirtioGpuAddressSpaceContextCreateWithSubdevice,
- subdevice_type,
- };
-
- drm_virtgpu_execbuffer execbuffer = {
- .flags = 0,
- .size = sizeof(words),
- .command = (uint64_t)(uintptr_t)(words),
- .bo_handles = 0,
- .num_bo_handles = 0,
- .fence_fd = -1,
- };
-
- int queue_work_err = drmIoctl(fd, DRM_IOCTL_VIRTGPU_EXECBUFFER, &execbuffer);
-
- if (queue_work_err) {
- ALOGE("%s: failed with %d executing command buffer (%s)\n", __func__,
- queue_work_err, strerror(errno));
- return false;
- }
-
- return true;
-}
-
-bool virtgpu_address_space_allocate_hostmem(
- address_space_handle_t fd,
- size_t size,
- uint64_t hostmem_id,
- struct address_space_virtgpu_hostmem_info* hostmem_info_out) {
-
- struct drm_virtgpu_resource_create_blob drm_rc_blob = { 0 };
- drm_rc_blob.blob_mem = VIRTGPU_BLOB_MEM_HOST;
- drm_rc_blob.blob_flags = VIRTGPU_BLOB_FLAG_MAPPABLE;
- drm_rc_blob.blob_id = hostmem_id;
- drm_rc_blob.size = size;
-
- int res = drmIoctl(
- fd, DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB, &drm_rc_blob);
-
- if (res) {
- ALOGE("%s: Failed to resource create v2: sterror: %s errno: %d\n", __func__,
- strerror(errno), errno);
- abort();
- }
-
- struct drm_virtgpu_map map_info = {
- .handle = drm_rc_blob.bo_handle,
- };
-
- res = drmIoctl(fd, DRM_IOCTL_VIRTGPU_MAP, &map_info);
- if (res) {
- ALOGE("%s: Failed to virtgpu map: sterror: %s errno: %d\n", __func__,
- strerror(errno), errno);
- abort();
- }
-
- void* directMappedAddr = mmap64(0, size, PROT_WRITE, MAP_SHARED, fd, map_info.offset);
-
- if (!directMappedAddr) {
- ALOGE("%s: mmap of virtio gpu resource failed\n", __func__);
- abort();
- }
-
- hostmem_info_out->id = hostmem_id;
- hostmem_info_out->bo = drm_rc_blob.bo_handle;
- hostmem_info_out->ptr = directMappedAddr;
- return true;
-}
-
-uint64_t buildu64(uint32_t lo, uint32_t hi) {
- uint64_t res = (uint64_t)lo;
- uint64_t hi64 = (uint64_t)hi;
- return res | (hi64 << 32);
-}
-
-// Ping with response
-bool virtgpu_address_space_ping_with_response(
- struct address_space_virtgpu_info* info,
- struct address_space_ping* ping) {
-
- uint32_t words[] = {
- kVirtioGpuAddressSpacePingWithResponse,
- info->resp_resid,
- (uint32_t)(ping->offset), (uint32_t)(ping->offset >> 32),
- (uint32_t)(ping->size), (uint32_t)(ping->size >> 32),
- (uint32_t)(ping->metadata), (uint32_t)(ping->metadata >> 32),
- (uint32_t)(ping->version), (uint32_t)(ping->wait_fd),
- (uint32_t)(ping->wait_flags), (uint32_t)(ping->direction),
- };
-
- drm_virtgpu_execbuffer execbuffer = {
- .flags = 0,
- .size = sizeof(words),
- .command = (uint64_t)(uintptr_t)(words),
- .bo_handles = (uint64_t)(uintptr_t)(&info->resp_bo),
- .num_bo_handles = 1,
- .fence_fd = -1,
- };
-
- int queue_work_err = drmIoctl(info->fd, DRM_IOCTL_VIRTGPU_EXECBUFFER, &execbuffer);
-
- if (queue_work_err) {
- ALOGE("%s: failed with %d executing command buffer (%s)\n", __func__,
- queue_work_err, strerror(errno));
- return false;
- }
-
- struct drm_virtgpu_3d_wait waitcmd;
- memset(&waitcmd, 0, sizeof(waitcmd));
- waitcmd.handle = info->resp_bo;
-
- int ret = drmIoctl(info->fd, DRM_IOCTL_VIRTGPU_WAIT, &waitcmd);
- if (ret) {
- ALOGE("%s: DRM_IOCTL_VIRTGPU_WAIT failed with %d (%s)\n", __func__, errno, strerror(errno));
- return false;
- }
-
- uint32_t* respWords = (uint32_t*)info->resp_mapped_ptr;
-
- ping->offset = buildu64(respWords[0], respWords[1]);
- ping->size = buildu64(respWords[2], respWords[3]);
- ping->metadata = buildu64(respWords[4], respWords[5]);
- ping->version = respWords[6];
- ping->wait_fd = respWords[7];
- ping->wait_flags = respWords[8];
- ping->direction = respWords[9];
-
- return true;
-}
diff --git a/shared/GoldfishAddressSpace/include/goldfish_address_space_host.impl b/shared/GoldfishAddressSpace/include/goldfish_address_space_host.impl
index d1fa4a3..8995c6b 100644
--- a/shared/GoldfishAddressSpace/include/goldfish_address_space_host.impl
+++ b/shared/GoldfishAddressSpace/include/goldfish_address_space_host.impl
@@ -377,7 +377,7 @@
bool goldfish_address_space_set_subdevice_type(
address_space_handle_t handle, GoldfishAddressSpaceSubdeviceType type,
address_space_handle_t* handle_out) {
- struct address_space_ping request;
+ struct goldfish_address_space_ping request;
request.metadata = (uint64_t)type;
*handle_out = handle;
return goldfish_address_space_ping(handle, &request);
@@ -385,7 +385,7 @@
bool goldfish_address_space_ping(
address_space_handle_t handle,
- struct address_space_ping* ping) {
+ struct goldfish_address_space_ping* ping) {
AddressSpaceDevicePingInfo* asHostPingInfo =
reinterpret_cast<AddressSpaceDevicePingInfo*>(ping);
diff --git a/shared/GoldfishAddressSpace/include/virtio_gpu_next.h b/shared/GoldfishAddressSpace/include/virtio_gpu_next.h
deleted file mode 100644
index 610dc51..0000000
--- a/shared/GoldfishAddressSpace/include/virtio_gpu_next.h
+++ /dev/null
@@ -1,58 +0,0 @@
-// Copyright (C) 2020 The Android Open Source Project
-// Copyright (C) 2020 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-#pragma once
-
-#ifndef HOST_BUILD
-#include "drm.h"
-#endif
-
-#define PIPE_BUFFER 0
-#define VIRGL_FORMAT_R8_UNORM 64
-#define VIRGL_BIND_CUSTOM (1 << 17)
-
-#define DRM_VIRTGPU_RESOURCE_CREATE_BLOB 0x0a
-
-#define VIRTGPU_PARAM_RESOURCE_BLOB 3 /* DRM_VIRTGPU_RESOURCE_CREATE_BLOB */
-#define VIRTGPU_PARAM_HOST_VISIBLE 4
-
-struct drm_virtgpu_resource_create_blob {
-#define VIRTGPU_BLOB_MEM_GUEST 0x0001
-#define VIRTGPU_BLOB_MEM_HOST 0x0002
-#define VIRTGPU_BLOB_MEM_HOST_GUEST 0x0003
-
-#define VIRTGPU_BLOB_FLAG_MAPPABLE 0x0001
-#define VIRTGPU_BLOB_FLAG_SHAREABLE 0x0002
-#define VIRTGPU_BLOB_FLAG_CROSS_DEVICE 0x0004
- /* zero is invalid blob_mem */
- uint32_t blob_mem;
- uint32_t blob_flags;
- uint32_t bo_handle;
- uint32_t res_handle;
- uint64_t size;
-
- /*
- * for 3D contexts with VIRTGPU_BLOB_MEM_HOSTGUEST and
- * VIRTGPU_BLOB_MEM_HOST otherwise, must be zero.
- */
- uint32_t pad;
- uint32_t cmd_size;
- uint64_t cmd;
- uint64_t blob_id;
-};
-
-
-#define DRM_IOCTL_VIRTGPU_RESOURCE_CREATE_BLOB \
- DRM_IOWR(DRM_COMMAND_BASE + DRM_VIRTGPU_RESOURCE_CREATE_BLOB, \
- struct drm_virtgpu_resource_create_blob)
diff --git a/system/OpenglSystemCommon/AddressSpaceStream.cpp b/system/OpenglSystemCommon/AddressSpaceStream.cpp
index bb94433..7c0f154 100644
--- a/system/OpenglSystemCommon/AddressSpaceStream.cpp
+++ b/system/OpenglSystemCommon/AddressSpaceStream.cpp
@@ -42,7 +42,7 @@
return nullptr;
}
- struct address_space_ping request;
+ struct goldfish_address_space_ping request;
request.metadata = ASG_GET_RING;
if (!goldfish_address_space_ping(child_device_handle, &request)) {
ALOGE("AddressSpaceStream::create failed (get ring)\n");
@@ -123,156 +123,21 @@
context.ring_config->host_consumed_pos = 0;
context.ring_config->guest_write_pos = 0;
- struct address_space_ops ops = {
- .open = goldfish_address_space_open,
- .close = goldfish_address_space_close,
- .claim_shared = goldfish_address_space_claim_shared,
- .unclaim_shared = goldfish_address_space_unclaim_shared,
- .map = goldfish_address_space_map,
- .unmap = goldfish_address_space_unmap,
- .set_subdevice_type = goldfish_address_space_set_subdevice_type,
- .ping = goldfish_address_space_ping,
- };
-
AddressSpaceStream* res =
new AddressSpaceStream(
child_device_handle, version, context,
- ringOffset, bufferOffset, false /* not virtio */, ops);
+ ringOffset, bufferOffset);
return res;
}
-#ifdef HOST_BUILD
-AddressSpaceStream* createVirtioGpuAddressSpaceStream(size_t ignored_bufSize) {
- // Ignore incoming ignored_bufSize
- (void)ignored_bufSize;
- return nullptr;
-}
-#else
-AddressSpaceStream* createVirtioGpuAddressSpaceStream(size_t ignored_bufSize) {
- // Ignore incoming ignored_bufSize
- (void)ignored_bufSize;
-
- auto handle = virtgpu_address_space_open();
-
- if (handle <= 0) {
- ALOGE("AddressSpaceStream::create failed (open device)\n");
- return nullptr;
- }
-
- struct address_space_virtgpu_info virtgpu_info;
-
- ALOGD("%s: create subdevice and get resp\n", __func__);
- if (!virtgpu_address_space_create_context_with_subdevice(
- handle, GoldfishAddressSpaceSubdeviceType::VirtioGpuGraphics,
- &virtgpu_info)) {
- ALOGE("AddressSpaceStream::create failed (create subdevice)\n");
- virtgpu_address_space_close(handle);
- return nullptr;
- }
- ALOGD("%s: create subdevice and get resp (done)\n", __func__);
-
- struct address_space_ping request;
- uint32_t ringSize = 0;
- uint32_t bufferSize = 0;
-
- request.metadata = ASG_GET_RING;
- if (!virtgpu_address_space_ping_with_response(
- &virtgpu_info, &request)) {
- ALOGE("AddressSpaceStream::create failed (get ring version)\n");
- virtgpu_address_space_close(handle);
- return nullptr;
- }
- ringSize = request.size;
-
- request.metadata = ASG_GET_BUFFER;
- if (!virtgpu_address_space_ping_with_response(
- &virtgpu_info, &request)) {
- ALOGE("AddressSpaceStream::create failed (get ring version)\n");
- virtgpu_address_space_close(handle);
- return nullptr;
- }
- bufferSize = request.size;
-
- request.metadata = ASG_SET_VERSION;
- request.size = 1; // version 1
-
- if (!virtgpu_address_space_ping_with_response(
- &virtgpu_info, &request)) {
- ALOGE("AddressSpaceStream::create failed (set version)\n");
- virtgpu_address_space_close(handle);
- return nullptr;
- }
-
- ALOGD("%s: ping returned. context ring and buffer sizes %u %u\n", __func__,
- ringSize, bufferSize);
-
- uint64_t hostmem_id = request.metadata;
- uint32_t version = request.size;
- size_t hostmem_alloc_size =
- (size_t)(ringSize + bufferSize);
-
- ALOGD("%s: hostmem size: %zu\n", __func__, hostmem_alloc_size);
-
- struct address_space_virtgpu_hostmem_info hostmem_info;
- if (!virtgpu_address_space_allocate_hostmem(
- handle,
- hostmem_alloc_size,
- hostmem_id,
- &hostmem_info)) {
- ALOGE("AddressSpaceStream::create failed (alloc hostmem)\n");
- virtgpu_address_space_close(handle);
- return nullptr;
- }
-
- request.metadata = ASG_GET_CONFIG;
- if (!virtgpu_address_space_ping_with_response(
- &virtgpu_info, &request)) {
- ALOGE("AddressSpaceStream::create failed (get config)\n");
- virtgpu_address_space_close(handle);
- return nullptr;
- }
-
- char* ringPtr = (char*)hostmem_info.ptr;
- char* bufferPtr = ((char*)hostmem_info.ptr) + sizeof(struct asg_ring_storage);
-
- struct asg_context context =
- asg_context_create(
- (char*)ringPtr, (char*)bufferPtr, bufferSize);
-
- context.ring_config->transfer_mode = 1;
- context.ring_config->host_consumed_pos = 0;
- context.ring_config->guest_write_pos = 0;
-
- struct address_space_ops ops = {
- .open = virtgpu_address_space_open,
- .close = virtgpu_address_space_close,
- .ping = virtgpu_address_space_ping,
- .allocate_hostmem = virtgpu_address_space_allocate_hostmem,
- .ping_with_response = virtgpu_address_space_ping_with_response,
- };
-
- AddressSpaceStream* res =
- new AddressSpaceStream(
- handle, version, context,
- 0, 0, true /* is virtio */, ops);
-
- return res;
-}
-#endif
-
-
AddressSpaceStream::AddressSpaceStream(
address_space_handle_t handle,
uint32_t version,
struct asg_context context,
uint64_t ringOffset,
- uint64_t writeBufferOffset,
- bool virtioMode,
- struct address_space_ops ops) :
+ uint64_t writeBufferOffset) :
IOStream(context.ring_config->flush_interval),
- m_virtioMode(virtioMode),
- m_ops(ops),
m_tmpBuf(0),
m_tmpBufSize(0),
m_tmpBufXferSize(0),
@@ -298,13 +163,11 @@
}
AddressSpaceStream::~AddressSpaceStream() {
- if (!m_virtioMode) {
- m_ops.unmap(m_context.to_host, sizeof(struct asg_ring_storage));
- m_ops.unmap(m_context.buffer, m_writeBufferSize);
- m_ops.unclaim_shared(m_handle, m_ringOffset);
- m_ops.unclaim_shared(m_handle, m_writeBufferOffset);
- }
- m_ops.close(m_handle);
+ goldfish_address_space_unmap(m_context.to_host, sizeof(struct asg_ring_storage));
+ goldfish_address_space_unmap(m_context.buffer, m_writeBufferSize);
+ goldfish_address_space_unclaim_shared(m_handle, m_ringOffset);
+ goldfish_address_space_unclaim_shared(m_handle, m_writeBufferOffset);
+ goldfish_address_space_close(m_handle);
if (m_readBuf) free(m_readBuf);
if (m_tmpBuf) free(m_tmpBuf);
}
@@ -570,9 +433,9 @@
}
void AddressSpaceStream::notifyAvailable() {
- struct address_space_ping request;
+ struct goldfish_address_space_ping request;
request.metadata = ASG_NOTIFY_AVAILABLE;
- m_ops.ping(m_handle, &request);
+ goldfish_address_space_ping(m_handle, &request);
++m_notifs;
}
diff --git a/system/OpenglSystemCommon/AddressSpaceStream.h b/system/OpenglSystemCommon/AddressSpaceStream.h
index 3d60695..a4db5aa 100644
--- a/system/OpenglSystemCommon/AddressSpaceStream.h
+++ b/system/OpenglSystemCommon/AddressSpaceStream.h
@@ -24,7 +24,6 @@
class AddressSpaceStream;
AddressSpaceStream* createAddressSpaceStream(size_t bufSize);
-AddressSpaceStream* createVirtioGpuAddressSpaceStream(size_t bufSize);
class AddressSpaceStream : public IOStream {
public:
@@ -33,9 +32,7 @@
uint32_t version,
struct asg_context context,
uint64_t ringOffset,
- uint64_t writeBufferOffset,
- bool virtioMode,
- struct address_space_ops ops);
+ uint64_t writeBufferOffset);
~AddressSpaceStream();
virtual size_t idealAllocSize(size_t len);
@@ -46,11 +43,6 @@
virtual int writeFully(const void *buf, size_t len);
virtual const unsigned char *commitBufferAndReadFully(size_t size, void *buf, size_t len);
- int getRendernodeFd() const {
- if (!m_virtioMode) return -1;
- return m_handle;
- }
-
private:
bool isInError() const;
ssize_t speculativeRead(unsigned char* readBuffer, size_t trySize);
@@ -62,9 +54,6 @@
void ensureType3Finished();
int type1Write(uint32_t offset, size_t size);
- bool m_virtioMode;
- struct address_space_ops m_ops;
-
unsigned char* m_tmpBuf;
size_t m_tmpBufSize;
size_t m_tmpBufXferSize;
diff --git a/system/OpenglSystemCommon/EmulatorFeatureInfo.h b/system/OpenglSystemCommon/EmulatorFeatureInfo.h
index 7545e5a..f1505fe 100644
--- a/system/OpenglSystemCommon/EmulatorFeatureInfo.h
+++ b/system/OpenglSystemCommon/EmulatorFeatureInfo.h
@@ -154,7 +154,6 @@
HOST_CONNECTION_VIRTIO_GPU = 2,
HOST_CONNECTION_ADDRESS_SPACE = 3,
HOST_CONNECTION_VIRTIO_GPU_PIPE = 4,
- HOST_CONNECTION_VIRTIO_GPU_ADDRESS_SPACE = 5,
};
enum GrallocType {
diff --git a/system/OpenglSystemCommon/HostConnection.cpp b/system/OpenglSystemCommon/HostConnection.cpp
index 8ab05ea..72ea1f0 100644
--- a/system/OpenglSystemCommon/HostConnection.cpp
+++ b/system/OpenglSystemCommon/HostConnection.cpp
@@ -58,10 +58,6 @@
ALOGE("%s: FATAL: Trying to create ASG stream in unsupported build\n", __func__);
abort();
}
-AddressSpaceStream* createVirtioGpuAddressSpaceStream(size_t bufSize) {
- ALOGE("%s: FATAL: Trying to create virtgpu ASG stream in unsupported build\n", __func__);
- abort();
-}
#endif
using goldfish_vk::VkEncoder;
@@ -116,7 +112,6 @@
if (!strcmp("virtio-gpu", transportValue)) return HOST_CONNECTION_VIRTIO_GPU;
if (!strcmp("asg", transportValue)) return HOST_CONNECTION_ADDRESS_SPACE;
if (!strcmp("virtio-gpu-pipe", transportValue)) return HOST_CONNECTION_VIRTIO_GPU_PIPE;
- if (!strcmp("virtio-gpu-asg", transportValue)) return HOST_CONNECTION_VIRTIO_GPU_ADDRESS_SPACE;
return HOST_CONNECTION_QEMU_PIPE;
#endif
@@ -496,7 +491,7 @@
con->m_grallocType = getGrallocTypeFromProperty();
con->m_stream = stream;
con->m_rendernodeFdOwned = false;
- con->m_rendernodeFd = stream->getRendernodeFd();
+ con->m_rendernodeFdOwned = stream->getRendernodeFd();
switch (con->m_grallocType) {
case GRALLOC_TYPE_RANCHU:
con->m_grallocHelper = &m_goldfishGralloc;
@@ -514,37 +509,6 @@
con->m_processPipe = &m_goldfishProcessPipe;
break;
}
-#ifndef HOST_BUILD
- case HOST_CONNECTION_VIRTIO_GPU_ADDRESS_SPACE: {
- AddressSpaceStream *stream = createVirtioGpuAddressSpaceStream(STREAM_BUFFER_SIZE);
- if (!stream) {
- ALOGE("Failed to create virtgpu AddressSpaceStream for host connection!!!\n");
- delete con;
- return NULL;
- }
- con->m_connectionType = HOST_CONNECTION_VIRTIO_GPU_ADDRESS_SPACE;
- con->m_grallocType = getGrallocTypeFromProperty();
- con->m_stream = stream;
- con->m_rendernodeFdOwned = false;
- con->m_rendernodeFd = stream->getRendernodeFd();
- switch (con->m_grallocType) {
- case GRALLOC_TYPE_RANCHU:
- con->m_grallocHelper = &m_goldfishGralloc;
- break;
- case GRALLOC_TYPE_MINIGBM: {
- MinigbmGralloc* m = new MinigbmGralloc;
- m->setFd(stream->getRendernodeFd());
- con->m_grallocHelper = m;
- break;
- }
- default:
- ALOGE("Fatal: Unknown gralloc type 0x%x\n", con->m_grallocType);
- abort();
- }
- con->m_processPipe = &m_goldfishProcessPipe;
- break;
- }
-#endif // !HOST_BUILD
#else
default:
break;
diff --git a/system/OpenglSystemCommon/ProcessPipe.cpp b/system/OpenglSystemCommon/ProcessPipe.cpp
index 0d74789..84764f4 100644
--- a/system/OpenglSystemCommon/ProcessPipe.cpp
+++ b/system/OpenglSystemCommon/ProcessPipe.cpp
@@ -166,8 +166,7 @@
case HOST_CONNECTION_VIRTIO_GPU:
sQemuPipeInit();
break;
- case HOST_CONNECTION_VIRTIO_GPU_PIPE:
- case HOST_CONNECTION_VIRTIO_GPU_ADDRESS_SPACE: {
+ case HOST_CONNECTION_VIRTIO_GPU_PIPE: {
sVirtioGpuPipeStream = new VirtioGpuPipeStream(4096);
sProcUID = sVirtioGpuPipeStream->initProcessPipe();
break;
diff --git a/system/OpenglSystemCommon/address_space_graphics_types.h b/system/OpenglSystemCommon/address_space_graphics_types.h
index 5f0e9b6..1ebad34 100644
--- a/system/OpenglSystemCommon/address_space_graphics_types.h
+++ b/system/OpenglSystemCommon/address_space_graphics_types.h
@@ -342,7 +342,6 @@
// version and can proceed with a protocol that works for both.
// size (in): the version of the guest
// size (out): the version of the host
- // metadata (out): hostmem id
// After this command runs, the consumer is
// implicitly created.
ASG_SET_VERSION = 2,
@@ -350,9 +349,6 @@
// Ping(notiy_available): Wakes up the consumer from sleep so it
// can read data via toHost
ASG_NOTIFY_AVAILABLE = 3,
-
- // Retrieve the host config
- ASG_GET_CONFIG = 4,
};
} // extern "C"
diff --git a/system/codecs/omx/common/Android.mk b/system/codecs/omx/common/Android.mk
index 4daf0b7..9e233e7 100644
--- a/system/codecs/omx/common/Android.mk
+++ b/system/codecs/omx/common/Android.mk
@@ -33,15 +33,6 @@
$(call emugl-import,libGoldfishAddressSpace$(GOLDFISH_OPENGL_LIB_SUFFIX))
else
$(call emugl-export,STATIC_LIBRARIES,libGoldfishAddressSpace)
-
-ifeq (true,$(BUILD_EMULATOR_VULKAN))
-
-LOCAL_CFLAGS += -DVIRTIO_GPU
-LOCAL_C_INCLUDES += external/libdrm external/minigbm/cros_gralloc
-LOCAL_SHARED_LIBRARIES += libdrm
-
-endif
-
endif
$(call emugl-end-module)
diff --git a/system/codecs/omx/common/goldfish_media_utils.cpp b/system/codecs/omx/common/goldfish_media_utils.cpp
index 4f4ead0..a2057ab 100644
--- a/system/codecs/omx/common/goldfish_media_utils.cpp
+++ b/system/codecs/omx/common/goldfish_media_utils.cpp
@@ -123,7 +123,7 @@
mStartPtr = goldfish_address_space_map(mHandle, mOffset, mSize);
ALOGI("guest address is %p", mStartPtr);
- struct address_space_ping pingInfo;
+ struct goldfish_address_space_ping pingInfo;
pingInfo.metadata = GoldfishAddressSpaceSubdeviceType::Media;
pingInfo.offset = mOffset;
if (goldfish_address_space_ping(mHandle, &pingInfo) == false) {
@@ -185,7 +185,7 @@
bool GoldfishMediaTransportImpl::sendOperation(MediaCodecType type,
MediaOperation op, unsigned int offSetToStartAddr) {
- struct address_space_ping pingInfo;
+ struct goldfish_address_space_ping pingInfo;
pingInfo.metadata = makeMetadata(type, op, offSetToStartAddr);
pingInfo.offset = mOffset; // + (offSetToStartAddr);
if (goldfish_address_space_ping(mHandle, &pingInfo) == false) {
diff --git a/system/hals/Android.mk b/system/hals/Android.mk
index 1641d23..3cdb4bf 100644
--- a/system/hals/Android.mk
+++ b/system/hals/Android.mk
@@ -45,10 +45,6 @@
device/generic/goldfish-opengl/host/include/libOpenglRender \
device/generic/goldfish-opengl/system/renderControl_enc \
-LOCAL_CFLAGS += -DVIRTIO_GPU
-LOCAL_C_INCLUDES += external/libdrm external/minigbm/cros_gralloc
-LOCAL_SHARED_LIBRARIES += libdrm
-
include $(BUILD_EXECUTABLE)
include $(CLEAR_VARS)
@@ -82,9 +78,5 @@
device/generic/goldfish-opengl/host/include/libOpenglRender \
device/generic/goldfish-opengl/system/renderControl_enc \
-LOCAL_CFLAGS += -DVIRTIO_GPU
-LOCAL_C_INCLUDES += external/libdrm external/minigbm/cros_gralloc
-LOCAL_SHARED_LIBRARIES += libdrm
-
include $(BUILD_SHARED_LIBRARY)