xref: /openbmc/linux/include/sound/hwdep.h (revision c900529f3d9161bfde5cca0754f83b4d3c3e0220)
11a59d1b8SThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
21da177e4SLinus Torvalds #ifndef __SOUND_HWDEP_H
31da177e4SLinus Torvalds #define __SOUND_HWDEP_H
41da177e4SLinus Torvalds 
51da177e4SLinus Torvalds /*
61da177e4SLinus Torvalds  *  Hardware dependent layer
7c1017a4cSJaroslav Kysela  *  Copyright (c) by Jaroslav Kysela <perex@perex.cz>
81da177e4SLinus Torvalds  */
91da177e4SLinus Torvalds 
101da177e4SLinus Torvalds #include <sound/asound.h>
111da177e4SLinus Torvalds #include <linux/poll.h>
121da177e4SLinus Torvalds 
13d9a98de2STakashi Iwai struct snd_hwdep;
141da177e4SLinus Torvalds 
15e0d80648STakashi Iwai /* hwdep file ops; all ops can be NULL */
16d9a98de2STakashi Iwai struct snd_hwdep_ops {
17e0d80648STakashi Iwai 	long long (*llseek)(struct snd_hwdep *hw, struct file *file,
18e0d80648STakashi Iwai 			    long long offset, int orig);
19e0d80648STakashi Iwai 	long (*read)(struct snd_hwdep *hw, char __user *buf,
20e0d80648STakashi Iwai 		     long count, loff_t *offset);
21e0d80648STakashi Iwai 	long (*write)(struct snd_hwdep *hw, const char __user *buf,
22e0d80648STakashi Iwai 		      long count, loff_t *offset);
23d9a98de2STakashi Iwai 	int (*open)(struct snd_hwdep *hw, struct file * file);
24d9a98de2STakashi Iwai 	int (*release)(struct snd_hwdep *hw, struct file * file);
25a3f8683bSAl Viro 	__poll_t (*poll)(struct snd_hwdep *hw, struct file *file,
26e0d80648STakashi Iwai 			     poll_table *wait);
27e0d80648STakashi Iwai 	int (*ioctl)(struct snd_hwdep *hw, struct file *file,
28e0d80648STakashi Iwai 		     unsigned int cmd, unsigned long arg);
29e0d80648STakashi Iwai 	int (*ioctl_compat)(struct snd_hwdep *hw, struct file *file,
30e0d80648STakashi Iwai 			    unsigned int cmd, unsigned long arg);
31e0d80648STakashi Iwai 	int (*mmap)(struct snd_hwdep *hw, struct file *file,
32e0d80648STakashi Iwai 		    struct vm_area_struct *vma);
33e0d80648STakashi Iwai 	int (*dsp_status)(struct snd_hwdep *hw,
34e0d80648STakashi Iwai 			  struct snd_hwdep_dsp_status *status);
35e0d80648STakashi Iwai 	int (*dsp_load)(struct snd_hwdep *hw,
36e0d80648STakashi Iwai 			struct snd_hwdep_dsp_image *image);
37d9a98de2STakashi Iwai };
381da177e4SLinus Torvalds 
39d9a98de2STakashi Iwai struct snd_hwdep {
40d9a98de2STakashi Iwai 	struct snd_card *card;
41f87135f5SClemens Ladisch 	struct list_head list;
421da177e4SLinus Torvalds 	int device;
431da177e4SLinus Torvalds 	char id[32];
441da177e4SLinus Torvalds 	char name[80];
451da177e4SLinus Torvalds 	int iface;
461da177e4SLinus Torvalds 
471da177e4SLinus Torvalds #ifdef CONFIG_SND_OSSEMUL
481da177e4SLinus Torvalds 	int oss_type;
491da177e4SLinus Torvalds 	int ossreg;
501da177e4SLinus Torvalds #endif
511da177e4SLinus Torvalds 
52d9a98de2STakashi Iwai 	struct snd_hwdep_ops ops;
531da177e4SLinus Torvalds 	wait_queue_head_t open_wait;
541da177e4SLinus Torvalds 	void *private_data;
55d9a98de2STakashi Iwai 	void (*private_free) (struct snd_hwdep *hwdep);
56*897c8882STakashi Iwai 	struct device *dev;
571da177e4SLinus Torvalds 
581a60d4c5SIngo Molnar 	struct mutex open_mutex;
59e0d80648STakashi Iwai 	int used;			/* reference counter */
60e0d80648STakashi Iwai 	unsigned int dsp_loaded;	/* bit fields of loaded dsp indices */
61e0d80648STakashi Iwai 	unsigned int exclusive:1;	/* exclusive access mode */
621da177e4SLinus Torvalds };
631da177e4SLinus Torvalds 
64d9a98de2STakashi Iwai extern int snd_hwdep_new(struct snd_card *card, char *id, int device,
65d9a98de2STakashi Iwai 			 struct snd_hwdep **rhwdep);
661da177e4SLinus Torvalds 
671da177e4SLinus Torvalds #endif /* __SOUND_HWDEP_H */
68