162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 OR MIT */
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci/*
462306a36Sopenharmony_ci * Xen para-virtual sound device
562306a36Sopenharmony_ci *
662306a36Sopenharmony_ci * Copyright (C) 2016-2018 EPAM Systems Inc.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Author: Oleksandr Andrushchenko <oleksandr_andrushchenko@epam.com>
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#ifndef __XEN_SND_FRONT_H
1262306a36Sopenharmony_ci#define __XEN_SND_FRONT_H
1362306a36Sopenharmony_ci
1462306a36Sopenharmony_ci#include "xen_snd_front_cfg.h"
1562306a36Sopenharmony_ci
1662306a36Sopenharmony_cistruct xen_snd_front_card_info;
1762306a36Sopenharmony_cistruct xen_snd_front_evtchnl;
1862306a36Sopenharmony_cistruct xen_snd_front_evtchnl_pair;
1962306a36Sopenharmony_cistruct xen_front_pgdir_shbuf;
2062306a36Sopenharmony_cistruct xensnd_query_hw_param;
2162306a36Sopenharmony_ci
2262306a36Sopenharmony_cistruct xen_snd_front_info {
2362306a36Sopenharmony_ci	struct xenbus_device *xb_dev;
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci	struct xen_snd_front_card_info *card_info;
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci	int num_evt_pairs;
2862306a36Sopenharmony_ci	struct xen_snd_front_evtchnl_pair *evt_pairs;
2962306a36Sopenharmony_ci
3062306a36Sopenharmony_ci	struct xen_front_cfg_card cfg;
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_ciint xen_snd_front_stream_query_hw_param(struct xen_snd_front_evtchnl *evtchnl,
3462306a36Sopenharmony_ci					struct xensnd_query_hw_param *hw_param_req,
3562306a36Sopenharmony_ci					struct xensnd_query_hw_param *hw_param_resp);
3662306a36Sopenharmony_ci
3762306a36Sopenharmony_ciint xen_snd_front_stream_prepare(struct xen_snd_front_evtchnl *evtchnl,
3862306a36Sopenharmony_ci				 struct xen_front_pgdir_shbuf *shbuf,
3962306a36Sopenharmony_ci				 u8 format, unsigned int channels,
4062306a36Sopenharmony_ci				 unsigned int rate, u32 buffer_sz,
4162306a36Sopenharmony_ci				 u32 period_sz);
4262306a36Sopenharmony_ci
4362306a36Sopenharmony_ciint xen_snd_front_stream_close(struct xen_snd_front_evtchnl *evtchnl);
4462306a36Sopenharmony_ci
4562306a36Sopenharmony_ciint xen_snd_front_stream_write(struct xen_snd_front_evtchnl *evtchnl,
4662306a36Sopenharmony_ci			       unsigned long pos, unsigned long count);
4762306a36Sopenharmony_ci
4862306a36Sopenharmony_ciint xen_snd_front_stream_read(struct xen_snd_front_evtchnl *evtchnl,
4962306a36Sopenharmony_ci			      unsigned long pos, unsigned long count);
5062306a36Sopenharmony_ci
5162306a36Sopenharmony_ciint xen_snd_front_stream_trigger(struct xen_snd_front_evtchnl *evtchnl,
5262306a36Sopenharmony_ci				 int type);
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci#endif /* __XEN_SND_FRONT_H */
55