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 | |
download | oss4-upstream.tar.gz |
Imported Upstream version 4.2-build2006upstream/4.2-build2006upstream
Diffstat (limited to 'kernel/framework/include/ossddk')
-rw-r--r-- | kernel/framework/include/ossddk/oss_exports.h | 101 | ||||
-rw-r--r-- | kernel/framework/include/ossddk/oss_limits.PHh | 35 | ||||
-rw-r--r-- | kernel/framework/include/ossddk/ossddk.h | 267 |
3 files changed, 403 insertions, 0 deletions
diff --git a/kernel/framework/include/ossddk/oss_exports.h b/kernel/framework/include/ossddk/oss_exports.h new file mode 100644 index 0000000..437e3f4 --- /dev/null +++ b/kernel/framework/include/ossddk/oss_exports.h @@ -0,0 +1,101 @@ +#ifndef _OSS_EXPORTS_H +#define _OSS_EXPORTS_H +/* + * + * This file is part of Open Sound System. + * + * Copyright (C) 4Front Technologies 1996-2008. + * + * This this source file is released under GPL v2 license (no other versions). + * See the COPYING file included in the main directory of this source + * distribution for the license terms and conditions. + * + */ + +/* + * Driver (bus) types + * + * Note that OSSDDK drivers can only use DRV_PCI or DRV_VIRTUAL. The other + * bus types will not work properly because support for them is missing + * from the DDK layer. + */ + +#define DRV_UNKNOWN 0 +#define DRV_PCI 1 +#define DRV_USB 2 +#define DRV_VIRTUAL 3 +#define DRV_VMIX 4 /* Like DRV_VIRTUAL. Used by the vmix module. */ +#define DRV_STREAMS 5 +#define DRV_ISA 6 +#define DRV_FIREWIRE 7 +#define DRV_CLONE 8 /* Clone of some other device */ + +/* + * Device class numbers. Unlike with earlier OSS versions (up to v4.0) + * the minor number doesn't have any special meaning. Minor numbers + * will be allocated in the order the device files are initialized. Even + * the major number doesn't necessaily be the same for all OSS devices. + * Minor numbers will be just indexes to a table (in os.c) that contains + * the device class code, instance number, driver call table and things like that. + * Ideally OSS will use devfs to expose the available devices. + */ + +extern int oss_max_audio_devfiles; +extern int oss_max_audio_engines; + +#define MAX_SYNTH_DEV 6 // TODO: Remove +#define MAX_AUDIO_DEVFILES oss_max_audio_devfiles +#define MAX_AUDIO_ENGINES oss_max_audio_engines +#define SYNC_DEVICE_MASK 0xffff + +#include "oss_limits.h" +/* + * Device file class codes. Note that these numbers don't have any kind of relationship with minor numbers. + */ + +#define OSS_DEV_STATUS 0 /* /dev/sndstat */ +#define OSS_DEV_VDSP 1 /* /dev/dsp (multiplexer device) */ +#define OSS_DEV_VAUDIO 2 /* /dev/audio (multiplexer device) */ +#define OSS_DEV_AWFM 3 /* Reserved for historic purposes */ +#define OSS_DEV_OSSD 4 /* /dev/ossd - ossd process support */ +#define OSS_DEV_AUDIOCTL 5 /* Audioctl device */ +#define OSS_DEV_MIXER 6 /* /dev/mixer0 */ +#define OSS_DEV_SEQ 7 /* /dev/sequencer */ +#define OSS_DEV_MUSIC 8 /* /dev/music AKA /dev/sequencer2 */ +#define OSS_DEV_VMIDI 9 /* /dev/midi (multiplexer device) */ +#define OSS_DEV_MIDI 10 /* /dev/midi## */ +#define OSS_DEV_DEVAUDIO 11 /* /dev/audio# */ +#define OSS_DEV_DSP 12 /* /dev/dsp# */ +#define OSS_DEV_MISC 13 /* Special purpose device files */ +#define OSS_DEV_DSP_ENGINE 14 /* Hidden DSP engines */ + +extern int oss_max_cdevs; +#define OSS_MAX_CDEVS oss_max_cdevs + +/* + * Misc definitions + */ + +typedef struct _oss_device_t oss_device_t; + +#if defined(linux) && defined(OSS_MAINLINE_BUILD) +#include <stdint.h> +#endif + +/* + * AC97 + */ +typedef int (*ac97_readfunc_t) (void *, int); +typedef int (*ac97_writefunc_t) (void *, int, int); +typedef struct _ac97_handle_t ac97_handle_t; + +/* + * Mixer + */ +typedef struct _mixer_driver_t mixer_driver_t; +typedef struct _mixer_operations_t mixer_operations_t; +typedef int (*mixer_create_controls_t) (int dev); +typedef int (*mixer_ext_fn) (int dev, int ctrl, unsigned int cmd, int value); + +extern void oss_audio_delayed_attach (void); +#endif diff --git a/kernel/framework/include/ossddk/oss_limits.PHh b/kernel/framework/include/ossddk/oss_limits.PHh new file mode 100644 index 0000000..f5f97ac --- /dev/null +++ b/kernel/framework/include/ossddk/oss_limits.PHh @@ -0,0 +1,35 @@ +/* + * Misc limits + */ + +#ifdef __USE_PHPMAKE__ +<?php + require getenv("PHPMAKE_LIBPATH") . "library.php"; + + phpmake_init_c(); + + // Set the initial defaults + $MAX_MIXER_DEV = 16; + $MAX_MIDI_DEV = 32; + $MAX_TIMER_DEV = $MAX_MIDI_DEV + 4; + $HARD_MAX_AUDIO_DEVFILES = 256; + + if (getenv("PHPMAKE_PROJECTPATH")) + { + include getenv("PHPMAKE_PROJECTPATH") . "limits.php"; + } + + echo "#define MAX_MIXER_DEV\t" . $MAX_MIXER_DEV . "\n"; + echo "#define MAX_MIDI_DEV\t" . $MAX_MIDI_DEV . "\n"; + echo "#define MAX_TIMER_DEV\t" . $MAX_TIMER_DEV . "\n"; + echo "#define HARD_MAX_AUDIO_DEVFILES\t" . $HARD_MAX_AUDIO_DEVFILES . "\n"; +?> +#else +/* + * Altrnative version for systems where Phpmake is not used + */ +#define MAX_MIXER_DEV 16 +#define MAX_MIDI_DEV 32 +#define MAX_TIMER_DEV (MAX_MIDI_DEV+4) +#define HARD_MAX_AUDIO_DEVFILES 256 +#endif 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 |