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_snd_front_evtchnl.h (2173B)


      1/* SPDX-License-Identifier: GPL-2.0 OR MIT */
      2
      3/*
      4 * Xen para-virtual sound device
      5 *
      6 * Copyright (C) 2016-2018 EPAM Systems Inc.
      7 *
      8 * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
      9 */
     10
     11#ifndef __XEN_SND_FRONT_EVTCHNL_H
     12#define __XEN_SND_FRONT_EVTCHNL_H
     13
     14#include <xen/interface/io/sndif.h>
     15
     16struct xen_snd_front_info;
     17
     18/* Timeout in ms to wait for backend to respond. */
     19#define VSND_WAIT_BACK_MS	3000
     20
     21enum xen_snd_front_evtchnl_state {
     22	EVTCHNL_STATE_DISCONNECTED,
     23	EVTCHNL_STATE_CONNECTED,
     24};
     25
     26enum xen_snd_front_evtchnl_type {
     27	EVTCHNL_TYPE_REQ,
     28	EVTCHNL_TYPE_EVT,
     29};
     30
     31struct xen_snd_front_evtchnl {
     32	struct xen_snd_front_info *front_info;
     33	int gref;
     34	int port;
     35	int irq;
     36	int index;
     37	/* State of the event channel. */
     38	enum xen_snd_front_evtchnl_state state;
     39	enum xen_snd_front_evtchnl_type type;
     40	/* Either response id or incoming event id. */
     41	u16 evt_id;
     42	/* Next request id or next expected event id. */
     43	u16 evt_next_id;
     44	/* Shared ring access lock. */
     45	struct mutex ring_io_lock;
     46	union {
     47		struct {
     48			struct xen_sndif_front_ring ring;
     49			struct completion completion;
     50			/* Serializer for backend IO: request/response. */
     51			struct mutex req_io_lock;
     52
     53			/* Latest response status. */
     54			int resp_status;
     55			union {
     56				struct xensnd_query_hw_param hw_param;
     57			} resp;
     58		} req;
     59		struct {
     60			struct xensnd_event_page *page;
     61			/* This is needed to handle XENSND_EVT_CUR_POS event. */
     62			struct snd_pcm_substream *substream;
     63		} evt;
     64	} u;
     65};
     66
     67struct xen_snd_front_evtchnl_pair {
     68	struct xen_snd_front_evtchnl req;
     69	struct xen_snd_front_evtchnl evt;
     70};
     71
     72int xen_snd_front_evtchnl_create_all(struct xen_snd_front_info *front_info,
     73				     int num_streams);
     74
     75void xen_snd_front_evtchnl_free_all(struct xen_snd_front_info *front_info);
     76
     77int xen_snd_front_evtchnl_publish_all(struct xen_snd_front_info *front_info);
     78
     79void xen_snd_front_evtchnl_flush(struct xen_snd_front_evtchnl *evtchnl);
     80
     81void xen_snd_front_evtchnl_pair_set_connected(struct xen_snd_front_evtchnl_pair *evt_pair,
     82					      bool is_connected);
     83
     84void xen_snd_front_evtchnl_pair_clear(struct xen_snd_front_evtchnl_pair *evt_pair);
     85
     86#endif /* __XEN_SND_FRONT_EVTCHNL_H */