11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifndef __SOUND_PCM_OSS_H
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define __SOUND_PCM_OSS_H
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
41da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *  Digital Audio (PCM) - OSS compatibility abstract layer
6c1017a4cdb68ae5368fbc9ee42c77f1f5dca8916Jaroslav Kysela *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   This program is free software; you can redistribute it and/or modify
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   it under the terms of the GNU General Public License as published by
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   the Free Software Foundation; either version 2 of the License, or
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   (at your option) any later version.
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   This program is distributed in the hope that it will be useful,
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   but WITHOUT ANY WARRANTY; without even the implied warranty of
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   GNU General Public License for more details.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   You should have received a copy of the GNU General Public License
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   along with this program; if not, write to the Free Software
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
256ac77bc180fbd985988015020c2e2347e802959dTakashi Iwaistruct snd_pcm_oss_setup {
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *task_name;
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int disable:1,
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		     direct:1,
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		     block:1,
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		     nonblock:1,
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		     partialfrag:1,
3210f69f9e42833b82288882d10901dc86adc3e473Takashi Iwai		     nosilence:1,
3310f69f9e42833b82288882d10901dc86adc3e473Takashi Iwai		     buggyptr:1;
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int periods;
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int period_size;
366ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai	struct snd_pcm_oss_setup *next;
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
396ac77bc180fbd985988015020c2e2347e802959dTakashi Iwaistruct snd_pcm_oss_runtime {
401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned params: 1,			/* format/parameter change */
411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 prepare: 1,			/* need to prepare the operation */
421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 trigger: 1,			/* trigger flag */
431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		 sync_trigger: 1;		/* sync trigger flag */
441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int rate;				/* requested rate */
451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int format;				/* requested OSS format */
461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int channels;			/* requested channels */
471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int fragshift;
481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int maxfrags;
491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int subdivision;		/* requested subdivision */
501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t period_bytes;			/* requested period size */
511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t period_frames;			/* period frames for poll */
521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t period_ptr;			/* actual write pointer to period */
531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int periods;
541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t buffer_bytes;			/* requested buffer size */
551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t bytes;				/* total # bytes processed */
561da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t mmap_bytes;
571da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	char *buffer;				/* vmallocated period */
581da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	size_t buffer_used;			/* used length from period buffer */
59e3a5d59a17e9a42e3f3e0e37342b2679bab2ff43Takashi Iwai	struct mutex params_lock;
6021a3479a0b606d36fe24093f70a1c27328cec286Jaroslav Kysela#ifdef CONFIG_SND_PCM_OSS_PLUGINS
616ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai	struct snd_pcm_plugin *plugin_first;
626ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai	struct snd_pcm_plugin *plugin_last;
6321a3479a0b606d36fe24093f70a1c27328cec286Jaroslav Kysela#endif
64f240406babfe1526998e10583ea5eccc2676a433Jaroslav Kysela	unsigned int prev_hw_ptr_period;
656ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai};
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
676ac77bc180fbd985988015020c2e2347e802959dTakashi Iwaistruct snd_pcm_oss_file {
686ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai	struct snd_pcm_substream *streams[2];
696ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai};
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
716ac77bc180fbd985988015020c2e2347e802959dTakashi Iwaistruct snd_pcm_oss_substream {
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned oss: 1;			/* oss mode */
73060d77b9c04acd7aef60790398a53f731db8c8feTakashi Iwai	struct snd_pcm_oss_setup setup;		/* active setup */
746ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai};
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
766ac77bc180fbd985988015020c2e2347e802959dTakashi Iwaistruct snd_pcm_oss_stream {
776ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai	struct snd_pcm_oss_setup *setup_list;	/* setup list */
781a60d4c5a0c4028559585a74e48593b16e1ca9b2Ingo Molnar	struct mutex setup_mutex;
79b7d90a356a43f4609bd6290fc2e1ca4ef79d4458Takashi Iwai#ifdef CONFIG_SND_VERBOSE_PROCFS
806ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai	struct snd_info_entry *proc_entry;
81b7d90a356a43f4609bd6290fc2e1ca4ef79d4458Takashi Iwai#endif
826ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai};
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
846ac77bc180fbd985988015020c2e2347e802959dTakashi Iwaistruct snd_pcm_oss {
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	int reg;
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	unsigned int reg_mask;
876ac77bc180fbd985988015020c2e2347e802959dTakashi Iwai};
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif /* __SOUND_PCM_OSS_H */
90