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

~ [ 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