- Update to match latest CONTEXT_INIT proposal - Update cross domain protocol to match crosvm (crrev.com/c/3055850) & Sommelier (crrev.com/c/3054321) BUG=b:173630595 TEST=local testing with cross domain backend Change-Id: I7420b03988bc8aed5b2bc53a0c54498a9ee47f86 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/minigbm/+/3119670 Reviewed-by: Jason Macnak <natsu@google.com> Reviewed-by: Nicholas Verne <nverne@chromium.org> Commit-Queue: Gurchetan Singh <gurchetansingh@chromium.org> Tested-by: Gurchetan Singh <gurchetansingh@chromium.org>
111 lines
2.9 KiB
C
111 lines
2.9 KiB
C
// Copyright 2021 The Chromium OS Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style license that can be
|
|
// found in the LICENSE file.
|
|
|
|
#ifndef VIRTGPU_CROSS_DOMAIN_PROTOCOL_H
|
|
#define VIRTGPU_CROSS_DOMAIN_PROTOCOL_H
|
|
|
|
#include <stdint.h>
|
|
|
|
// Cross-domain commands (only a maximum of 255 supported)
|
|
#define CROSS_DOMAIN_CMD_INIT 1
|
|
#define CROSS_DOMAIN_CMD_GET_IMAGE_REQUIREMENTS 2
|
|
#define CROSS_DOMAIN_CMD_POLL 3
|
|
#define CROSS_DOMAIN_CMD_SEND 4
|
|
#define CROSS_DOMAIN_CMD_RECEIVE 5
|
|
#define CROSS_DOMAIN_CMD_READ 6
|
|
#define CROSS_DOMAIN_CMD_WRITE 7
|
|
|
|
// Channel types (must match rutabaga channel types)
|
|
#define CROSS_DOMAIN_CHANNEL_TYPE_WAYLAND 0x0001
|
|
#define CROSS_DOMAIN_CHANNEL_TYPE_CAMERA 0x0002
|
|
|
|
// The maximum number of identifiers (value based on wp_linux_dmabuf)
|
|
#define CROSS_DOMAIN_MAX_IDENTIFIERS 4
|
|
|
|
// virtgpu memory resource ID. Also works with non-blob memory resources,
|
|
// despite the name.
|
|
#define CROSS_DOMAIN_ID_TYPE_VIRTGPU_BLOB 1
|
|
|
|
// virtgpu synchronization resource id.
|
|
#define CROSS_DOMAIN_ID_TYPE_VIRTGPU_SYNC 2
|
|
|
|
// ID for Wayland pipe used for reading. The reading is done by the guest proxy
|
|
// and the host proxy. The host sends the write end of the proxied pipe over
|
|
// the host Wayland socket.
|
|
#define CROSS_DOMAIN_ID_TYPE_READ_PIPE 3
|
|
|
|
// ID for Wayland pipe used for writing. The writing is done by the guest and
|
|
// the host proxy. The host receives the write end of the pipe over the host
|
|
// Wayland socket.
|
|
#define CROSS_DOMAIN_ID_TYPE_WRITE_PIPE 4
|
|
|
|
// No ring used
|
|
#define CROSS_DOMAIN_RING_NONE 0xffffffff
|
|
// A ring for metadata queries.
|
|
#define CROSS_DOMAIN_QUERY_RING 0
|
|
// A ring based on this particular context's channel.
|
|
#define CROSS_DOMAIN_CHANNEL_RING 1
|
|
|
|
struct CrossDomainCapabilities {
|
|
uint32_t version;
|
|
uint32_t supported_channels;
|
|
uint32_t supports_dmabuf;
|
|
uint32_t supports_external_gpu_memory;
|
|
};
|
|
|
|
struct CrossDomainImageRequirements {
|
|
uint32_t strides[4];
|
|
uint32_t offsets[4];
|
|
uint64_t modifier;
|
|
uint64_t size;
|
|
uint32_t blob_id;
|
|
uint32_t map_info;
|
|
int32_t memory_idx;
|
|
int32_t physical_device_idx;
|
|
};
|
|
|
|
struct CrossDomainHeader {
|
|
uint8_t cmd;
|
|
uint8_t fence_ctx_idx;
|
|
uint16_t cmd_size;
|
|
uint32_t pad;
|
|
};
|
|
|
|
struct CrossDomainInit {
|
|
struct CrossDomainHeader hdr;
|
|
uint32_t ring_id;
|
|
uint32_t channel_type;
|
|
};
|
|
|
|
struct CrossDomainGetImageRequirements {
|
|
struct CrossDomainHeader hdr;
|
|
uint32_t width;
|
|
uint32_t height;
|
|
uint32_t drm_format;
|
|
uint32_t flags;
|
|
};
|
|
|
|
struct CrossDomainPoll {
|
|
struct CrossDomainHeader hdr;
|
|
uint64_t pad;
|
|
};
|
|
|
|
struct CrossDomainSendReceive {
|
|
struct CrossDomainHeader hdr;
|
|
uint32_t num_identifiers;
|
|
uint32_t opaque_data_size;
|
|
uint32_t identifiers[CROSS_DOMAIN_MAX_IDENTIFIERS];
|
|
uint32_t identifier_types[CROSS_DOMAIN_MAX_IDENTIFIERS];
|
|
uint32_t identifier_sizes[CROSS_DOMAIN_MAX_IDENTIFIERS];
|
|
};
|
|
|
|
struct CrossDomainReadWrite {
|
|
struct CrossDomainHeader hdr;
|
|
uint32_t identifier;
|
|
uint32_t hang_up;
|
|
uint32_t opaque_data_size;
|
|
uint32_t pad;
|
|
};
|
|
|
|
#endif
|