brintos

brintos / linux-shallow public Read only

0
0
Text · 2.0 KiB · b0af699 Raw
82 lines · c
1/* SPDX-License-Identifier: GPL-2.0 OR MIT */2 3/*4 *  Xen para-virtual DRM device5 *6 * Copyright (C) 2016-2018 EPAM Systems Inc.7 *8 * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>9 */10 11#ifndef __XEN_DRM_FRONT_EVTCHNL_H_12#define __XEN_DRM_FRONT_EVTCHNL_H_13 14#include <linux/completion.h>15#include <linux/types.h>16 17#include <xen/interface/io/ring.h>18#include <xen/interface/io/displif.h>19 20/*21 * All operations which are not connector oriented use this ctrl event channel,22 * e.g. fb_attach/destroy which belong to a DRM device, not to a CRTC.23 */24#define GENERIC_OP_EVT_CHNL	025 26enum xen_drm_front_evtchnl_state {27	EVTCHNL_STATE_DISCONNECTED,28	EVTCHNL_STATE_CONNECTED,29};30 31enum xen_drm_front_evtchnl_type {32	EVTCHNL_TYPE_REQ,33	EVTCHNL_TYPE_EVT,34};35 36struct xen_drm_front_drm_info;37 38struct xen_drm_front_evtchnl {39	struct xen_drm_front_info *front_info;40	int gref;41	int port;42	int irq;43	int index;44	enum xen_drm_front_evtchnl_state state;45	enum xen_drm_front_evtchnl_type type;46	/* either response id or incoming event id */47	u16 evt_id;48	/* next request id or next expected event id */49	u16 evt_next_id;50	union {51		struct {52			struct xen_displif_front_ring ring;53			struct completion completion;54			/* latest response status */55			int resp_status;56			/* serializer for backend IO: request/response */57			struct mutex req_io_lock;58		} req;59		struct {60			struct xendispl_event_page *page;61		} evt;62	} u;63};64 65struct xen_drm_front_evtchnl_pair {66	struct xen_drm_front_evtchnl req;67	struct xen_drm_front_evtchnl evt;68};69 70int xen_drm_front_evtchnl_create_all(struct xen_drm_front_info *front_info);71 72int xen_drm_front_evtchnl_publish_all(struct xen_drm_front_info *front_info);73 74void xen_drm_front_evtchnl_flush(struct xen_drm_front_evtchnl *evtchnl);75 76void xen_drm_front_evtchnl_set_state(struct xen_drm_front_info *front_info,77				     enum xen_drm_front_evtchnl_state state);78 79void xen_drm_front_evtchnl_free_all(struct xen_drm_front_info *front_info);80 81#endif /* __XEN_DRM_FRONT_EVTCHNL_H_ */82