Loading...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 | /* * sound/awe_compat.h * * Compat defines for the AWE32/SB32/AWE64 wave table synth driver. * version 0.4.3; Oct. 1, 1998 * * Copyright (C) 1996-1998 Takashi Iwai * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #ifndef AWE_COMPAT_H_DEF #define AWE_COMPAT_H_DEF /*================================================================ * version check *================================================================*/ #include "awe_config.h" #define ASC_LINUX_VERSION(V,P,S) (((V) * 65536) + ((P) * 256) + (S)) #ifndef LINUX_VERSION_CODE #include <linux/version.h> #endif /* linux version check */ #if LINUX_VERSION_CODE < ASC_LINUX_VERSION(2,0,0) #define AWE_OBSOLETE_VOXWARE #endif #if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,1,0) #define AWE_NEW_KERNEL_INTERFACE #if LINUX_VERSION_CODE >= ASC_LINUX_VERSION(2,1,80) #define AWE_MODULE_SUPPORT #endif #endif #ifdef AWE_OBSOLETE_VOXWARE #include "soundvers.h" #else #include "../soundvers.h" #endif #if SOUND_INTERNAL_VERSION >= 0x30803 /* OSS/Free-3.8 */ #define AWE_NO_PATCHMGR #define AWE_OSS38 #define HAS_LOWLEVEL_H #endif /*================================================================ * INCLUDE OTHER HEADER FILES *================================================================*/ /* set up module */ #if defined(AWE_MODULE_SUPPORT) && defined(MODULE) #include <linux/config.h> #include <linux/string.h> #include <linux/module.h> #include "../soundmodule.h" #endif /* reading configuration of sound driver */ #ifdef AWE_OBSOLETE_VOXWARE #include "sound_config.h" #if defined(CONFIGURE_SOUNDCARD) && !defined(EXCLUDE_AWE32) #define CONFIG_AWE32_SYNTH #endif #else /* AWE_OBSOLETE_VOXWARE */ #ifdef HAS_LOWLEVEL_H #include "lowlevel.h" #endif #include "../sound_config.h" #endif /* AWE_OBSOLETE_VOXWARE */ /*================================================================ * include AWE header files *================================================================*/ #if defined(CONFIG_AWE32_SYNTH) || defined(CONFIG_AWE32_SYNTH_MODULE) #include "awe_hw.h" #include "awe_version.h" #include <linux/awe_voice.h> #ifdef AWE_HAS_GUS_COMPATIBILITY /* include finetune table */ #ifdef AWE_OBSOLETE_VOXWARE # include "tuning.h" #else # include "../tuning.h" #endif #include <linux/ultrasound.h> #endif /* AWE_HAS_GUS_COMPATIBILITY */ /*---------------------------------------------------------------- * compatibility macros for AWE32 driver *----------------------------------------------------------------*/ /* redefine following macros */ #undef IOCTL_IN #undef IOCTL_OUT #undef OUTW #undef COPY_FROM_USER #undef COPY_TO_USER #undef GET_BYTE_FROM_USER #undef GET_SHORT_FROM_USER #undef IOCTL_TO_USER /* use inline prefix */ #define INLINE /*inline*/ /*---------------------------------------------------------------- * memory management for linux *----------------------------------------------------------------*/ #ifdef AWE_OBSOLETE_VOXWARE /* old type linux system */ /* i/o requests; nothing */ #define awe_check_port() 0 /* always false */ #define awe_request_region() /* nothing */ #define awe_release_region() /* nothing */ static int _mem_start; /* memory pointer for permanent buffers */ #define my_malloc_init(memptr) _mem_start = (memptr) #define my_malloc_memptr() _mem_start #define my_free(ptr) /* do nothing */ #define my_realloc(buf,oldsize,size) NULL /* no realloc */ static void *my_malloc(int size) { char *ptr; PERMANENT_MALLOC(ptr, char*, size, _mem_start); return (void*)ptr; } #define my_kmalloc(size) my_malloc(size) #define kfree(ptr) /* do nothing */ /* allocate buffer only once */ #define INIT_TABLE(buffer,index,nums,type) {\ buffer = my_malloc(sizeof(type) * (nums)); index = (nums);\ } #else #define AWE_DYNAMIC_BUFFER #define my_malloc_init(ptr) /* nothing */ #define my_malloc_memptr() 0 #define my_malloc(size) vmalloc(size) #define my_free(ptr) if (ptr) {vfree(ptr);} #define my_kmalloc(size) kmalloc(size,GFP_KERNEL) #define my_kfree(ptr) kfree(ptr) static void *my_realloc(void *buf, int oldsize, int size) { void *ptr; if ((ptr = vmalloc(size)) == NULL) return NULL; memcpy(ptr, buf, ((oldsize < size) ? oldsize : size) ); vfree(buf); return ptr; } /* do not allocate buffer at beginning */ #define INIT_TABLE(buffer,index,nums,type) {buffer=NULL; index=0;} /* old type macro */ #define RET_ERROR(err) -err #endif /*---------------------------------------------------------------- * i/o interfaces for linux *----------------------------------------------------------------*/ #define OUTW(data,addr) outw(data, addr) #ifdef AWE_NEW_KERNEL_INTERFACE #define COPY_FROM_USER(target,source,offs,count) \ copy_from_user(target, (source)+(offs), count) #define GET_BYTE_FROM_USER(target,addr,offs) \ get_user(target, (unsigned char*)&((addr)[offs])) #define GET_SHORT_FROM_USER(target,addr,offs) \ get_user(target, (unsigned short*)&((addr)[offs])) #ifdef AWE_OSS38 #define IOCTL_TO_USER(target,offs,source,count) \ memcpy(target, (source)+(offs), count) #define IO_WRITE_CHECK(cmd) (_SIOC_DIR(cmd) & _IOC_WRITE) #else #define IOCTL_TO_USER(target,offs,source,count) \ copy_to_user(target, (source)+(offs), count) #define IO_WRITE_CHECK(cmd) (_IOC_DIR(cmd) & _IOC_WRITE) #endif /* AWE_OSS38 */ #define COPY_TO_USER IOCTL_TO_USER #define IOCTL_IN(arg) (*(int*)(arg)) #define IOCTL_OUT(arg,val) (*(int*)(arg) = (val)) #else /* old type i/o */ #define COPY_FROM_USER(target,source,offs,count) \ memcpy_fromfs(target, (source)+(offs), (count)) #define GET_BYTE_FROM_USER(target,addr,offs) \ *((char *)&(target)) = get_fs_byte((addr)+(offs)) #define GET_SHORT_FROM_USER(target,addr,offs) \ *((short *)&(target)) = get_fs_word((addr)+(offs)) #ifdef AWE_OSS38 #define IOCTL_TO_USER(target,offs,source,count) \ memcpy(target, (source)+(offs), count) #define COPY_TO_USER(target,offs,source,count) \ memcpy_tofs(target, (source)+(offs), (count)) #define IOCTL_IN(arg) (*(int*)(arg)) #define IOCTL_OUT(arg,val) (*(int*)(arg) = (val)) #define IO_WRITE_CHECK(cmd) (_SIOC_DIR(cmd) & _IOC_WRITE) #else /* AWE_OSS38 */ #define IOCTL_TO_USER(target,offs,source,count) \ memcpy_tofs(target, (source)+(offs), (count)) #define COPY_TO_USER IOCTL_TO_USER #define IOCTL_IN(arg) get_fs_long((long *)(arg)) #define IOCTL_OUT(arg,ret) snd_ioctl_return((int *)arg, ret) #define IO_WRITE_CHECK(cmd) (cmd & IOC_IN) #endif /* AWE_OSS38 */ #endif /* AWE_NEW_KERNEL_INTERFACE */ #define BZERO(target,len) memset(target, 0, len) #define MEMCPY(dst,src,len) memcpy(dst, src, len) #define MEMCMP(p1,p2,len) memcmp(p1, p2, len) /* old style device tables (not modulized) */ #ifndef AWE_MODULE_SUPPORT #define sound_alloc_synthdev() \ (num_synths >= MAX_SYNTH_DEV ? -1 : num_synths++) #define sound_alloc_mixerdev() \ (num_mixers >= MAX_MIXER_DEV ? -1 : num_mixers++) #define sound_alloc_mididev() \ (num_midis >= MAX_MIXER_DEV ? -1 : num_midis++) #define sound_unload_synthdev(dev) /**/ #define sound_unload_mixerdev(dev) /**/ #define sound_unload_mididev(dev) /**/ #endif /* AWE_MODULE_SUPPORT */ #endif /* CONFIG_AWE32_SYNTH */ #endif /* AWE_COMPAT_H_DEF */ |