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