diff options
author | Igor Pashev <pashev.igor@gmail.com> | 2013-05-03 21:08:42 +0400 |
---|---|---|
committer | Igor Pashev <pashev.igor@gmail.com> | 2013-05-03 21:08:42 +0400 |
commit | 1058def8e7827e56ce4a70afb4aeacb5dc44148f (patch) | |
tree | 4495d23e7b54ab5700e3839081e797c1eafe0db9 /kernel/framework/include/ossddk/ossddk.h | |
download | oss4-upstream/4.2-build2006.tar.gz |
Imported Upstream version 4.2-build2006upstream/4.2-build2006upstream
Diffstat (limited to 'kernel/framework/include/ossddk/ossddk.h')
-rw-r--r-- | kernel/framework/include/ossddk/ossddk.h | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/kernel/framework/include/ossddk/ossddk.h b/kernel/framework/include/ossddk/ossddk.h new file mode 100644 index 0000000..2fcf46f --- /dev/null +++ b/kernel/framework/include/ossddk/ossddk.h @@ -0,0 +1,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 |