Linux Audio

Check our new training course

Loading...
 1/* SPDX-License-Identifier: GPL-2.0 OR MIT */
 2
 3/*
 4 *  Xen para-virtual DRM device
 5 *
 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	0
25
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_ */