1/*
2 *	SiS 7018, Trident 4D Wave DX/NX, Acer Lab M5451 Sound Driver.
3 *	Copyright (c) 2002, 2008-2011 S.Zharski <imker@gmx.li>
4 *	Distributed under the terms of the MIT license.
5 *
6 */
7#ifndef _SiS7018_STREAM_H_
8#define _SiS7018_STREAM_H_
9
10
11#include "hmulti_audio.h"
12
13
14class Device;
15
16class Stream {
17public:
18							Stream(Device* device, bool isInput);
19							~Stream();
20
21		status_t			Init();
22		void				Free();
23		status_t			InitCheck() { return fStatus; }
24
25		status_t			Start();
26		status_t			Stop();
27		bool				IsActive() { return fIsActive; }
28
29		void				GetBuffers(uint32& Flags,
30										int32& BuffersCount,
31										int32& ChannelsCount,
32										uint32& BufferSize,
33										buffer_desc** Buffers);
34
35		void				ExchangeBuffers(bigtime_t& RealTime,
36											bigtime_t& FramesCount,
37											int32& BufferCycle);
38
39		void				GetFormat(multi_format_info *Format);
40		status_t			SetFormat(_multi_format& format,
41											uint32 formats, uint32 rates);
42
43		bool				InterruptHandler();
44
45private:
46
47		uint32				_DecodeRate(uint32 rate);
48inline	bool				_UseBankB() { return (fHWChannel & 0x20) == 0x20; }
49inline	uint32				_HWVoice() { return fHWChannel & 0x1f; }
50inline	uint32				_HWId();
51
52		Device*				fDevice;
53		status_t			fStatus;
54		bool				fIsInput;
55		bool				fIsActive;
56		uint32				fHWChannel;
57
58		area_id				fBuffersArea;
59		size_t				fBuffersAreaSize;
60		size_t				fBufferSamplesCount;
61		void*				fBuffersAddress;
62		phys_addr_t			fBuffersPhysAddress;
63
64		_multi_format		fFormat;
65		bigtime_t			fRealTime;
66		bigtime_t			fFramesCount;
67		int32				fBufferCycle;
68};
69
70
71#endif // _SiS7018_STREAM_H_
72
73