cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

xen_drm_front_evtchnl.h (2009B)


      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_ */