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