~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/sound/pci/asihpi/hpios.h

Version: ~ [ linux-6.2-rc3 ] ~ [ linux-6.1.5 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.87 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.162 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.228 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.269 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.302 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.8.17 ] ~ [ linux-4.7.10 ] ~ [ linux-4.6.7 ] ~ [ linux-4.5.7 ] ~ [ linux-4.4.302 ] ~ [ linux-4.3.6 ] ~ [ linux-4.2.8 ] ~ [ linux-4.1.52 ] ~ [ linux-4.0.9 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /******************************************************************************
  2 
  3     AudioScience HPI driver
  4     Copyright (C) 1997-2011  AudioScience Inc. <support@audioscience.com>
  5 
  6     This program is free software; you can redistribute it and/or modify
  7     it under the terms of version 2 of the GNU General Public License as
  8     published by the Free Software Foundation;
  9 
 10     This program is distributed in the hope that it will be useful,
 11     but WITHOUT ANY WARRANTY; without even the implied warranty of
 12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 13     GNU General Public License for more details.
 14 
 15     You should have received a copy of the GNU General Public License
 16     along with this program; if not, write to the Free Software
 17     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 18 
 19 HPI Operating System Specific macros for Linux Kernel driver
 20 
 21 (C) Copyright AudioScience Inc. 1997-2003
 22 ******************************************************************************/
 23 #ifndef _HPIOS_H_
 24 #define _HPIOS_H_
 25 
 26 #undef HPI_OS_LINUX_KERNEL
 27 #define HPI_OS_LINUX_KERNEL
 28 
 29 #define HPI_OS_DEFINED
 30 #define HPI_BUILD_KERNEL_MODE
 31 
 32 #include <linux/io.h>
 33 #include <linux/ioctl.h>
 34 #include <linux/kernel.h>
 35 #include <linux/string.h>
 36 #include <linux/device.h>
 37 #include <linux/firmware.h>
 38 #include <linux/interrupt.h>
 39 #include <linux/pci.h>
 40 #include <linux/mutex.h>
 41 
 42 #define HPI_NO_OS_FILE_OPS
 43 
 44 /** Details of a memory area allocated with  pci_alloc_consistent
 45 Need all info for parameters to pci_free_consistent
 46 */
 47 struct consistent_dma_area {
 48         struct device *pdev;
 49         /* looks like dma-mapping dma_devres ?! */
 50         size_t size;
 51         void *vaddr;
 52         dma_addr_t dma_handle;
 53 };
 54 
 55 static inline u16 hpios_locked_mem_get_phys_addr(struct consistent_dma_area
 56         *locked_mem_handle, u32 *p_physical_addr)
 57 {
 58         *p_physical_addr = locked_mem_handle->dma_handle;
 59         return 0;
 60 }
 61 
 62 static inline u16 hpios_locked_mem_get_virt_addr(struct consistent_dma_area
 63         *locked_mem_handle, void **pp_virtual_addr)
 64 {
 65         *pp_virtual_addr = locked_mem_handle->vaddr;
 66         return 0;
 67 }
 68 
 69 static inline u16 hpios_locked_mem_valid(struct consistent_dma_area
 70         *locked_mem_handle)
 71 {
 72         return locked_mem_handle->size != 0;
 73 }
 74 
 75 struct hpi_ioctl_linux {
 76         void __user *phm;
 77         void __user *phr;
 78 };
 79 
 80 /* Conflict?: H is already used by a number of drivers hid, bluetooth hci,
 81    and some sound drivers sb16, hdsp, emu10k. AFAIK 0xFC is ununsed command
 82 */
 83 #define HPI_IOCTL_LINUX _IOWR('H', 0xFC, struct hpi_ioctl_linux)
 84 
 85 #define HPI_DEBUG_FLAG_ERROR   KERN_ERR
 86 #define HPI_DEBUG_FLAG_WARNING KERN_WARNING
 87 #define HPI_DEBUG_FLAG_NOTICE  KERN_NOTICE
 88 #define HPI_DEBUG_FLAG_INFO    KERN_INFO
 89 #define HPI_DEBUG_FLAG_DEBUG   KERN_DEBUG
 90 #define HPI_DEBUG_FLAG_VERBOSE KERN_DEBUG       /* kernel has no verbose */
 91 
 92 #include <linux/spinlock.h>
 93 
 94 #define HPI_LOCKING
 95 
 96 struct hpios_spinlock {
 97         spinlock_t lock;        /* SEE hpios_spinlock */
 98         int lock_context;
 99 };
100 
101 /* The reason for all this evilness is that ALSA calls some of a drivers
102  * operators in atomic context, and some not.  But all our functions channel
103  * through the HPI_Message conduit, so we can't handle the different context
104  * per function
105  */
106 #define IN_LOCK_BH 1
107 #define IN_LOCK_IRQ 0
108 static inline void cond_lock(struct hpios_spinlock *l)
109 {
110         if (irqs_disabled()) {
111                 /* NO bh or isr can execute on this processor,
112                    so ordinary lock will do
113                  */
114                 spin_lock(&((l)->lock));
115                 l->lock_context = IN_LOCK_IRQ;
116         } else {
117                 spin_lock_bh(&((l)->lock));
118                 l->lock_context = IN_LOCK_BH;
119         }
120 }
121 
122 static inline void cond_unlock(struct hpios_spinlock *l)
123 {
124         if (l->lock_context == IN_LOCK_BH)
125                 spin_unlock_bh(&((l)->lock));
126         else
127                 spin_unlock(&((l)->lock));
128 }
129 
130 #define hpios_msgxlock_init(obj)      spin_lock_init(&(obj)->lock)
131 #define hpios_msgxlock_lock(obj)   cond_lock(obj)
132 #define hpios_msgxlock_unlock(obj) cond_unlock(obj)
133 
134 #define hpios_dsplock_init(obj)       spin_lock_init(&(obj)->dsp_lock.lock)
135 #define hpios_dsplock_lock(obj)    cond_lock(&(obj)->dsp_lock)
136 #define hpios_dsplock_unlock(obj)  cond_unlock(&(obj)->dsp_lock)
137 
138 #ifdef CONFIG_SND_DEBUG
139 #define HPI_BUILD_DEBUG
140 #endif
141 
142 #define HPI_ALIST_LOCKING
143 #define hpios_alistlock_init(obj)    spin_lock_init(&((obj)->list_lock.lock))
144 #define hpios_alistlock_lock(obj) spin_lock(&((obj)->list_lock.lock))
145 #define hpios_alistlock_unlock(obj) spin_unlock(&((obj)->list_lock.lock))
146 
147 struct snd_card;
148 
149 /** pci drvdata points to an instance of this struct */
150 struct hpi_adapter {
151         struct hpi_adapter_obj *adapter;
152         struct snd_card *snd_card;
153 
154         int irq;
155         int interrupt_mode;
156         void (*interrupt_callback) (struct hpi_adapter *);
157 
158         /* mutex prevents contention for one card
159            between multiple user programs (via ioctl) */
160         struct mutex mutex;
161         char *p_buffer;
162         size_t buffer_size;
163 };
164 
165 #endif
166 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | Wiki (Japanese) | Wiki (English) | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

osdn.jp