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)
 
