summaryrefslogtreecommitdiff
path: root/kernel/framework/include/ossddk
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-05-03 21:08:42 +0400
committerIgor Pashev <pashev.igor@gmail.com>2013-05-03 21:08:42 +0400
commit1058def8e7827e56ce4a70afb4aeacb5dc44148f (patch)
tree4495d23e7b54ab5700e3839081e797c1eafe0db9 /kernel/framework/include/ossddk
downloadoss4-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.h101
-rw-r--r--kernel/framework/include/ossddk/oss_limits.PHh35
-rw-r--r--kernel/framework/include/ossddk/ossddk.h267
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