Linux Audio

Check our new training course

Loading...
v6.2
 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 */
v5.14.15
 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#ifndef GRANT_INVALID_REF
19/*
20 * FIXME: usage of grant reference 0 as invalid grant reference:
21 * grant reference 0 is valid, but never exposed to a PV driver,
22 * because of the fact it is already in use/reserved by the PV console.
23 */
24#define GRANT_INVALID_REF	0
25#endif
26
27/* Timeout in ms to wait for backend to respond. */
28#define VSND_WAIT_BACK_MS	3000
29
30enum xen_snd_front_evtchnl_state {
31	EVTCHNL_STATE_DISCONNECTED,
32	EVTCHNL_STATE_CONNECTED,
33};
34
35enum xen_snd_front_evtchnl_type {
36	EVTCHNL_TYPE_REQ,
37	EVTCHNL_TYPE_EVT,
38};
39
40struct xen_snd_front_evtchnl {
41	struct xen_snd_front_info *front_info;
42	int gref;
43	int port;
44	int irq;
45	int index;
46	/* State of the event channel. */
47	enum xen_snd_front_evtchnl_state state;
48	enum xen_snd_front_evtchnl_type type;
49	/* Either response id or incoming event id. */
50	u16 evt_id;
51	/* Next request id or next expected event id. */
52	u16 evt_next_id;
53	/* Shared ring access lock. */
54	struct mutex ring_io_lock;
55	union {
56		struct {
57			struct xen_sndif_front_ring ring;
58			struct completion completion;
59			/* Serializer for backend IO: request/response. */
60			struct mutex req_io_lock;
61
62			/* Latest response status. */
63			int resp_status;
64			union {
65				struct xensnd_query_hw_param hw_param;
66			} resp;
67		} req;
68		struct {
69			struct xensnd_event_page *page;
70			/* This is needed to handle XENSND_EVT_CUR_POS event. */
71			struct snd_pcm_substream *substream;
72		} evt;
73	} u;
74};
75
76struct xen_snd_front_evtchnl_pair {
77	struct xen_snd_front_evtchnl req;
78	struct xen_snd_front_evtchnl evt;
79};
80
81int xen_snd_front_evtchnl_create_all(struct xen_snd_front_info *front_info,
82				     int num_streams);
83
84void xen_snd_front_evtchnl_free_all(struct xen_snd_front_info *front_info);
85
86int xen_snd_front_evtchnl_publish_all(struct xen_snd_front_info *front_info);
87
88void xen_snd_front_evtchnl_flush(struct xen_snd_front_evtchnl *evtchnl);
89
90void xen_snd_front_evtchnl_pair_set_connected(struct xen_snd_front_evtchnl_pair *evt_pair,
91					      bool is_connected);
92
93void xen_snd_front_evtchnl_pair_clear(struct xen_snd_front_evtchnl_pair *evt_pair);
94
95#endif /* __XEN_SND_FRONT_EVTCHNL_H */