[zircon][display] Set missing display ops in virtio-gpu.

Currently the virtio-gpu driver fails to start, as it fails to implement
three display operations:

    get_sysmem_connection
    set_buffer_collection_constraints
    get_single_buffer_framebuffer

This patch provides dummy implementations of the three operations,
allowing the virtio-gpu driver to successfully start.

Discovered during development of virtio-gpu intergration tests.

Bugs: MAC-213 #comment Avoid crash on virtio-gpu driver startup.
Change-Id: I7ea590dd4a266849409f3ff03c4ae1776778a834
diff --git a/zircon/system/dev/bus/virtio/gpu.cpp b/zircon/system/dev/bus/virtio/gpu.cpp
index 59985375..9a15b27 100644
--- a/zircon/system/dev/bus/virtio/gpu.cpp
+++ b/zircon/system/dev/bus/virtio/gpu.cpp
@@ -174,6 +174,20 @@
     return zx_vmo_create_contiguous(gd->bti().get(), size, 0, vmo_out);
 }
 
+zx_status_t GpuDevice::virtio_get_sysmem_connection(void* ctx, zx_handle_t handle) {
+    return ZX_ERR_NOT_SUPPORTED;
+}
+
+zx_status_t GpuDevice::virtio_set_buffer_collection_constraints(void* ctx, const image_t* config,
+                                                                zx_unowned_handle_t collection) {
+    return ZX_ERR_NOT_SUPPORTED;
+}
+
+zx_status_t GpuDevice::virtio_get_single_buffer_framebuffer(void* ctx, zx_handle_t* out_vmo,
+                                                            uint32_t* out_stride) {
+    return ZX_ERR_NOT_SUPPORTED;
+}
+
 GpuDevice::GpuDevice(zx_device_t* bus_device, zx::bti bti, fbl::unique_ptr<Backend> backend)
     : Device(bus_device, std::move(bti), std::move(backend)) {
     sem_init(&request_sem_, 0, 1);
@@ -469,6 +483,9 @@
     display_proto_ops_.apply_configuration = virtio_gpu_apply_configuration;
     display_proto_ops_.compute_linear_stride = virtio_gpu_compute_linear_stride;
     display_proto_ops_.allocate_vmo = virtio_gpu_allocate_vmo;
+    display_proto_ops_.get_sysmem_connection = virtio_get_sysmem_connection;
+    display_proto_ops_.set_buffer_collection_constraints = virtio_set_buffer_collection_constraints;
+    display_proto_ops_.get_single_buffer_framebuffer = virtio_get_single_buffer_framebuffer;
 
     // Initialize the zx_device and publish us
     // Point the ctx of our DDK device at ourself
diff --git a/zircon/system/dev/bus/virtio/gpu.h b/zircon/system/dev/bus/virtio/gpu.h
index 5d1821f..82ca583 100644
--- a/zircon/system/dev/bus/virtio/gpu.h
+++ b/zircon/system/dev/bus/virtio/gpu.h
@@ -51,7 +51,11 @@
     static uint32_t virtio_gpu_compute_linear_stride(
             void* ctx, uint32_t width, zx_pixel_format_t format);
     static zx_status_t virtio_gpu_allocate_vmo(void* ctx, uint64_t size, zx_handle_t* vmo_out);
-
+    static zx_status_t virtio_get_sysmem_connection(void* ctx, zx_handle_t handle);
+    static zx_status_t virtio_set_buffer_collection_constraints(void* ctx, const image_t* config,
+                                                                zx_unowned_handle_t collection);
+    static zx_status_t virtio_get_single_buffer_framebuffer(void* ctx, zx_handle_t* out_vmo,
+                                                            uint32_t* out_stride);
 
     // Internal routines
     template <typename RequestType, typename ResponseType>