/* SPDX-License-Identifier: GPL-2.0 OR MIT */ /* * Xen para-virtual DRM device * * Copyright (C) 2016-2018 EPAM Systems Inc. * * Author: Oleksandr Andrushchenko */ #ifndef __XEN_DRM_FRONT_SHBUF_H_ #define __XEN_DRM_FRONT_SHBUF_H_ #include #include #include struct xen_drm_front_shbuf { /* * number of references granted for the backend use: * - for allocated/imported dma-buf's this holds number of grant * references for the page directory and pages of the buffer * - for the buffer provided by the backend this holds number of * grant references for the page directory as grant references for * the buffer will be provided by the backend */ int num_grefs; grant_ref_t *grefs; unsigned char *directory; int num_pages; struct page **pages; struct xenbus_device *xb_dev; /* these are the ops used internally depending on be_alloc mode */ const struct xen_drm_front_shbuf_ops *ops; /* Xen map handles for the buffer allocated by the backend */ grant_handle_t *backend_map_handles; }; struct xen_drm_front_shbuf_cfg { struct xenbus_device *xb_dev; size_t size; struct page **pages; bool be_alloc; }; struct xen_drm_front_shbuf * xen_drm_front_shbuf_alloc(struct xen_drm_front_shbuf_cfg *cfg); grant_ref_t xen_drm_front_shbuf_get_dir_start(struct xen_drm_front_shbuf *buf); int xen_drm_front_shbuf_map(struct xen_drm_front_shbuf *buf); int xen_drm_front_shbuf_unmap(struct xen_drm_front_shbuf *buf); void xen_drm_front_shbuf_flush(struct xen_drm_front_shbuf *buf); void xen_drm_front_shbuf_free(struct xen_drm_front_shbuf *buf); #endif /* __XEN_DRM_FRONT_SHBUF_H_ */