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
|
#ifndef OSSDDK_H
#define OSSDDK_H
/*
* ossddk.h - Open Sound System Driver Devlopment Kit (DDK) exported defs.
*
* Copyright (C) 4Front Technologies 2005 - All rights reserved.
*/
#define OSSDDK_VERSION 0x02 /* 0.2 */
#include "oss_exports.h"
/*
* Audio interface
*/
#define OSS_AUDIO_DRIVER_VERSION 2
typedef struct _dmap_t dmap_t;
/*
* Audio device flags (adev_t->flags)
*/
#define ADEV_DEFAULT 0x0000000000000001LL /* Preferred default audio device candidate */
#define ADEV_AUTOMODE 0x0000000000000002LL /* Playbak pointer loops automatically */
#define ADEV_DUPLEX 0x0000000000000004LL /* Device permits full duplex (O_RDWR method) */
#define ADEV_NOINPUT 0x0000000000000008LL /* Device cannot do input */
#define ADEV_NOOUTPUT 0x0000000000000010LL /* Device cannot do output */
#define ADEV_VMIX 0x0000000000000020LL /* Device is virtual mixer one */
/* NOTE! 0x0000000000000040 is free */
#define ADEV_VIRTUAL 0x0000000000000080LL /* Virtual audio device */
#define ADEV_OPENED 0x0000000000000100LL /* Will be set when the device is open */
#define ADEV_NOCONVERT 0x0000000000000200LL /* No automatic format conversions are permitted */
/*
* ADEV_HIDDEN is reserved for internal use by the audio core and it must
* not be set by low level drivers. Instead low level drivers should set
* adev->caps |= PCM_CAP_HIDDEN if they like to hide the device file from
* ordinary audio applications.
*/
#define ADEV_HIDDEN 0x0000000000001000LL
#define ADEV_FIXEDRATE 0x0000000000002000LL /* Fixed sampling rate (obsolete) */
#define ADEV_16BITONLY 0x0000000000004000LL /* Only 16 bit audio support */
#define ADEV_STEREOONLY 0x0000000000008000LL /* Only stereo (requires 16BITONLY) */
#define ADEV_SHADOW 0x0000000000010000LL /* "shadow" device */
#define ADEV_8BITONLY 0x0000000000020000LL /* Only 8 bits */
#define ADEV_32BITONLY 0x0000000000040000LL /* Only 24 or 32 bits */
#define ADEV_NOVIRTUAL 0x0000000000080000LL /* Don't install SoftOSS automatically for this device */
#define ADEV_NOSRC 0x0000000000100000LL /* Don't do any kind of SRC */
#define ADEV_SPECIAL 0x0000000000200000LL /* Multich or otherwise special dev */
#define ADEV_NOMMAP 0x0000000000400000LL /* No MMAP capability */
#define ADEV_DISABLE_VIRTUAL 0x0000000000800000LL /* Not compatible with virtual drivers */
#define ADEV_COLD 0x0000000001000000LL /* Reserved for a future feature - DO NOT USE */
#define ADEV_HWMIX 0x0000000002000000LL /* Device supports "hardware mixing" */
#define ADEV_LOOP 0x0000000004000000LL /* Loopback device */
#define ADEV_NONINTERLEAVED 0x0000000008000000LL /* DMA buffer _NOT_ interleaved */
#ifdef _KERNEL
typedef struct _audiodrv_t
{
int (*adrv_open) (int dev, int mode, int open_flags);
void (*adrv_close) (int dev, int mode);
void (*adrv_output_block) (int dev, oss_native_word buf,
int count, int fragsize, int intrflag);
void (*adrv_start_input) (int dev, oss_native_word buf,
int count, int fragsize, int intrflag);
int (*adrv_ioctl) (int dev, unsigned int cmd, int *arg);
int (*adrv_prepare_for_input) (int dev, int fragsize, int nfrags);
int (*adrv_prepare_for_output) (int dev, int fragsize, int nfrags);
void (*adrv_halt_io) (int dev);
int (*adrv_local_qlen) (int dev);
void *not_used; /* Out of order */
void (*adrv_halt_input) (int dev);
void (*adrv_halt_output) (int dev);
void (*adrv_trigger) (int dev, int bits);
int (*adrv_set_rate) (int dev, int speed);
unsigned int (*adrv_set_format) (int dev, unsigned int bits);
short (*adrv_set_channels) (int dev, short channels);
void (*adrv_postprocess_write) (int dev); /* Device spesific postprocessing for written data */
void (*adrv_preprocess_read) (int dev); /* Device spesific preprocessing for read data */
/* Timeout handlers for input and output */
int (*adrv_check_input) (int dev);
int (*adrv_check_output) (int dev);
int (*adrv_alloc_buffer) (int dev, dmap_t * dmap, int direction);
int (*adrv_free_buffer) (int dev, dmap_t * dmap, int direction);
void (*adrv_lock_buffer) (int dev, int direction);
void *dummy; /* Not used any more */
int (*adrv_get_buffer_pointer) (int dev, dmap_t * dmap, int direction);
int (*adrv_calibrate_speed) (int dev, int nominal_rate, int true_rate);
#define SYNC_ATTACH 0
#define SYNC_PREPARE 1
#define SYNC_TRIGGER 2
int (*adrv_sync_control) (int dev, int event, int mode);
void (*adrv_prepare_to_stop) (int dev);
int (*adrv_get_input_pointer) (int dev, dmap_t * dmap, int direction);
int (*adrv_get_output_pointer) (int dev, dmap_t * dmap, int direction);
int (*adrv_bind) (int dev, unsigned int cmd, int *arg);
void (*adrv_setup_fragments) (int dev, dmap_t * dmap, int direction);
int (*adrv_redirect) (int dev, int mode, int open_flags);
int (*adrv_ioctl_override) (int dev, unsigned int cmd, int *arg);
} audiodrv_t;
#endif
/*
* Mixer interface
*/
#define OSS_MIXER_DRIVER_VERSION 2
#define OSSDDK_MIXER_ROOT 0
struct _mixer_driver_t
{
int (*ioctl) (int dev, int audiodev, unsigned int cmd, int *arg);
};
#define AINTR_LOCALQUEUE 0x00000001
#define AINTR_NO_POINTER_UPDATES 0x00000002
#if 0
/*
* The ossddk_* functions are not included in OSS for the time being
*/
#ifdef _KERNEL
extern oss_device_t *ossddk_register_device (int ddkvers,
dev_info_t * dip,
int drvtype,
int instance, const char *nick,
#ifdef sun
ddi_iblock_cookie_t
iblock_cookie,
#endif
void *devc,
const char *longname);
extern int ossddk_disable_device (oss_device_t * osdev);
extern void *ossddk_osdev_get_devc (oss_device_t * osdev);
extern void ossddk_unregister_device (oss_device_t * osdev);
#ifdef sun
/*
* OSS driver entry point routines
*/
extern int oss_open (dev_t * dev_p, int open_flags, int otyp,
cred_t * cred_p);
extern int oss_close (dev_t dev, int flag, int otyp, cred_t * cred_p);
extern int oss_ioctl (dev_t dev, int cmd, intptr_t arg, int mode,
cred_t * cred_p, int *rval_p);
extern int oss_read (dev_t dev, struct uio *uiop, cred_t * credp);
extern int oss_write (dev_t dev, struct uio *uiop, cred_t * cred_p);
extern int oss_chpoll (dev_t dev, short events, int anyyet, short *reventsp,
struct pollhead **phpp);
extern int oss_mmap (dev_t dev, off_t offset, int nprot);
#endif
#if defined(amd64) || defined(sparc) || defined(x86_64)
typedef unsigned long long coreaddr_t;
#else
typedef unsigned long coreaddr_t;
#endif
int ossddk_install_audiodev (int vers,
oss_device_t * osdev,
oss_device_t * master_osdev,
char *name,
const audiodrv_t * driver,
int driver_size,
int flags,
unsigned int format_mask, void *devc,
int parent);
extern void ossddk_adev_set_devc (int dev, void *devc);
extern void ossddk_adev_set_portc (int dev, void *portc);
extern void ossddk_adev_set_portc_play (int dev, void *portc);
extern void ossddk_adev_set_portc_record (int dev, void *portc);
extern void ossddk_adev_set_portnum (int dev, int portnum);
extern void ossddk_adev_set_mixer (int dev, int mixer_dev);
extern void ossddk_adev_set_rates (int dev, int min_rate, int max_rate,
int nrates, int rates[20]);
extern void ossddk_adev_set_formats (int dev, unsigned int oformats,
unsigned int iformats);
extern void ossddk_adev_set_caps (int dev, unsigned int caps);
extern void ossddk_adev_set_flags (int dev, unsigned int caps);
extern void ossddk_adev_set_channels (int dev, int min_channels,
int max_channels);
extern void ossddk_adev_set_buflimits (int dev, int min_fragment,
int max_fragment);
extern void ossddk_adev_set_enable_flag (int dev, int state);
extern void ossddk_adev_set_unloaded_flag (int dev, int state);
extern void ossddk_adev_set_magic (int dev, int magic);
extern void ossddk_adev_set_ratesource (int dev, int rate_source);
extern void ossddk_adev_set_songname (int dev, char *song);
extern void ossddk_adev_set_label (int dev, char *label);
extern void *ossddk_adev_get_devc (int dev);
extern void *ossddk_adev_get_portc (int dev);
extern void *ossddk_adev_get_portc_play (int dev);
extern void *ossddk_adev_get_portc_record (int dev);
extern dmap_t *ossddk_adev_get_dmapout (int dev);
extern dmap_t *ossddk_adev_get_dmapin (int dev);
extern char *ossddk_adev_get_songname (int dev);
extern char *ossddk_adev_get_label (int dev);
extern int ossddk_adev_get_flags (int dev);
extern void ossddk_audio_outputintr (int dev, int intr_flags);
extern void ossddk_audio_inputintr (int dev, int intr_flags);
typedef void (*oss_audio_callback_t) (int dev, int parm);
extern void ossddk_dmap_set_dmabuf (dmap_t * dmap, unsigned char *buf);
extern void ossddk_dmap_set_phys (dmap_t * dmap, unsigned long addr);
extern void ossddk_dmap_set_buffsize (dmap_t * dmap, int size);
extern void ossddk_dmap_set_private (dmap_t * dmap, void *ptr);
extern void ossddk_dmap_set_callback (dmap_t * dmap,
oss_audio_callback_t cb, int arg);
extern void ossddk_dmap_set_fragsize (dmap_t * dmap, int size);
extern void ossddk_dmap_set_numfrags (dmap_t * dmap, int nfrags);
extern void ossddk_dmap_set_playerror (dmap_t * dmap, int err, int parm);
extern void ossddk_dmap_set_recerror (dmap_t * dmap, int err, int parm);
extern void *ossddk_dmap_get_private (dmap_t * dmap);
extern int ossddk_dmap_get_fragsize (dmap_t * dmap);
extern int ossddk_dmap_get_numfrags (dmap_t * dmap);
extern int ossddk_dmap_get_buffused (dmap_t * dmap);
extern unsigned char *ossddk_dmap_get_dmabuf (dmap_t * dmap);
extern unsigned long ossddk_dmap_get_phys (dmap_t * dmap);
extern int ossddk_dmap_get_buffsize (dmap_t * dmap);
extern int ossddk_dmap_get_qhead (dmap_t * dmap);
extern int ossddk_dmap_get_qtail (dmap_t * dmap);
int ossddk_install_mixer (int vers,
oss_device_t * osdev,
oss_device_t * master_osdev,
const char *name,
mixer_driver_t * driver,
int driver_size, void *devc);
extern void *ossddk_mixer_get_devc (int dev);
extern void ossddk_mixer_touch (int dev);
extern int ossddk_mixer_create_group (int dev, int parent, const char *id);
extern int ossddk_mixer_create_control (int dev, int parent, int ctrl,
mixer_ext_fn func, int type,
const char *id, int maxvalue,
int flags);
extern int ossddk_mixer_truncate (int dev, int index);
extern int ossddk_mixer_set_strings (int dev, int ctl, const char *s,
int version);
/*
* AC97 interface
*/
extern int ossddk_ac97_install (ac97_handle_t ** handle, char *name,
ac97_readfunc_t readfn,
ac97_writefunc_t writefn, void *hostparms,
oss_device_t * osdev);
extern void ossddk_ac97_remove (ac97_handle_t * handle);
extern int ossddk_ac97_set_ext_init (ac97_handle_t * handle,
mixer_create_controls_t func,
int nextra);
extern int ossddk_ac97_is_varrate (ac97_handle_t * handle);
extern int ossddk_ac97_set_recrate (ac97_handle_t * handle, int srate);
extern int ossddk_ac97_set_playrate (ac97_handle_t * handle, int srate);
#endif /* _KERNEL */
#endif
#define OSSDDK_OK 0
#endif
|