1/* SPDX-License-Identifier: GPL-2.0-or-later */
2#ifndef __SOUND_MIXER_OSS_H
3#define __SOUND_MIXER_OSS_H
4
5/*
6 *  OSS MIXER API
7 *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
8 */
9
10#if IS_ENABLED(CONFIG_SND_MIXER_OSS)
11
12#define SNDRV_OSS_MAX_MIXERS	32
13
14struct snd_mixer_oss_file;
15
16struct snd_mixer_oss_slot {
17	int number;
18	unsigned int stereo: 1;
19	int (*get_volume)(struct snd_mixer_oss_file *fmixer,
20			  struct snd_mixer_oss_slot *chn,
21			  int *left, int *right);
22	int (*put_volume)(struct snd_mixer_oss_file *fmixer,
23			  struct snd_mixer_oss_slot *chn,
24			  int left, int right);
25	int (*get_recsrc)(struct snd_mixer_oss_file *fmixer,
26			  struct snd_mixer_oss_slot *chn,
27			  int *active);
28	int (*put_recsrc)(struct snd_mixer_oss_file *fmixer,
29			  struct snd_mixer_oss_slot *chn,
30			  int active);
31	unsigned long private_value;
32	void *private_data;
33	void (*private_free)(struct snd_mixer_oss_slot *slot);
34	int volume[2];
35};
36
37struct snd_mixer_oss {
38	struct snd_card *card;
39	char id[16];
40	char name[32];
41	struct snd_mixer_oss_slot slots[SNDRV_OSS_MAX_MIXERS]; /* OSS mixer slots */
42	unsigned int mask_recsrc;		/* exclusive recsrc mask */
43	int (*get_recsrc)(struct snd_mixer_oss_file *fmixer,
44			  unsigned int *active_index);
45	int (*put_recsrc)(struct snd_mixer_oss_file *fmixer,
46			  unsigned int active_index);
47	void *private_data_recsrc;
48	void (*private_free_recsrc)(struct snd_mixer_oss *mixer);
49	struct mutex reg_mutex;
50	struct snd_info_entry *proc_entry;
51	int oss_dev_alloc;
52	/* --- */
53	int oss_recsrc;
54};
55
56struct snd_mixer_oss_file {
57	struct snd_card *card;
58	struct snd_mixer_oss *mixer;
59};
60
61int snd_mixer_oss_ioctl_card(struct snd_card *card,
62			     unsigned int cmd, unsigned long arg);
63
64#endif /* CONFIG_SND_MIXER_OSS */
65
66#endif /* __SOUND_MIXER_OSS_H */
67