Files
kernel-zhihe-a210/include/uapi/linux/virtio_vdmabuf.h
2025-08-15 10:24:01 +08:00

85 lines
2.4 KiB
C

/* SPDX-License-Identifier: (GPL-2.0 WITH Linux-syscall-note) OR MIT */
#ifndef _UAPI_LINUX_VIRTIO_VDMABUF_H
#define _UAPI_LINUX_VIRTIO_VDMABUF_H
/*
* user can use this ioctl to alloc dmabuf, and get its
* fd, buf_id
*/
#define VIRTIO_VDMABUF_IOCTL_ALLOC_FD \
_IOC(_IOC_NONE, 'G', 2, sizeof(struct virtio_vdmabuf_alloc))
/*
* user can use this ioctl to get dmabuf fd via buf_id,
* which is passed to us from remote peer
*/
#define VIRTIO_VDMABUF_IOCTL_IMPORT_FD \
_IOC(_IOC_NONE, 'G', 3, sizeof(struct virtio_vdmabuf_import))
/* dmabuf flag */
#define VIRTIO_VDAMBUF_NONCACHED 0x1
#define VIRTIO_VDAMBUF_DMA32 0x4
/*
* Max single alloc size is (768 * PAGE_SIZE) only for
* VIRTIO_VDMABUF_TYPE_SYSTEM heap
* eg, it is 3M when PAGE_SIZE is 4K
*/
#define VIRTIO_VDAMBUF_MAX_ALLOC_SIZE (768 * PAGE_SIZE)
/*
* size : user fill dmabuf size only when use heap VIRTIO_VDMABUF_TYPE_SYSTEM or
* VIRTIO_VDMABUF_HEAP_TYPE_SYSTEM_CONTIG or VIRTIO_VDMABUF_HEAP_USER
* align : user fill dmabuf align, kernel use PAGE_SIZE as the align by default
* uaddr : user fill user buf addr only when use VIRTIO_VDMABUF_HEAP_USER heap
* fd : kernel fill dmabuf fd
* buf_id : kernel fill id of dmabuf
* heap_type : user fill heap type
* carveout_type : user fill carveout type when heap type is VIRTIO_VDMABUF_HEAP_TYPE_CARVEOUT
* flags : user fill buf flags, eg, noncache(VIRTIO_VDAMBUF_NONCACHED),
* kernel use cache mode by default
*/
struct virtio_vdmabuf_alloc {
size_t size;
int align;
void *uaddr;
int fd;
unsigned int buf_id;
int heap_type;
int carveout_type;
int flags;
};
/*
* buf_id : user fill the dmabuf id
* fd : kernel fill the dmabuf fd
* size : kernel fill the dmabuf size
*/
struct virtio_vdmabuf_import {
unsigned int buf_id;
int fd;
size_t size;
};
/* virtio-vdmabuf supported heap type */
enum virtio_vdmabuf_heap_type {
VIRTIO_VDMABUF_HEAP_TYPE_USER,
VIRTIO_VDMABUF_HEAP_TYPE_SYSTEM,
VIRTIO_VDMABUF_HEAP_TYPE_SYSTEM_CONTIG,
VIRTIO_VDMABUF_HEAP_TYPE_CARVEOUT, /* reserved mem */
VIRTIO_VDMABUF_HEAP_NUM_HEAPS,
};
/* carveout type */
enum virtio_vdmabuf_carveout_id {
VIRTIO_VDMABUF_CARVEOUT_TYPE_VI,
VIRTIO_VDMABUF_CARVEOUT_TYPE_VO,
VIRTIO_VDMABUF_CARVEOUT_TYPE_ENC,
VIRTIO_VDMABUF_CARVEOUT_TYPE_DEC,
VIRTIO_VDMABUF_CARVEOUT_TYPE_GPU,
VIRTIO_VDMABUF_CARVEOUT_TYPE_DPU,
VIRTIO_VDMABUF_CARVEOUTS_NUM,
};
#endif