brintos

brintos / linux-shallow public Read only

0
0
Text · 2.1 KiB · 3675fba Raw
87 lines · c
1/* SPDX-License-Identifier: GPL-2.0 OR MIT */2 3/*4 * Xen para-virtual sound device5 *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_H12#define __XEN_SND_FRONT_EVTCHNL_H13 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	300020 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 */87