summaryrefslogtreecommitdiff
path: root/kernel/drv/oss_envy24/envy24.h
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/drv/oss_envy24/envy24.h')
-rw-r--r--kernel/drv/oss_envy24/envy24.h279
1 files changed, 279 insertions, 0 deletions
diff --git a/kernel/drv/oss_envy24/envy24.h b/kernel/drv/oss_envy24/envy24.h
new file mode 100644
index 0000000..dceac89
--- /dev/null
+++ b/kernel/drv/oss_envy24/envy24.h
@@ -0,0 +1,279 @@
+/*
+ * Purpose: Common definitions for the Envy24 driver
+ */
+/*
+ *
+ * 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.
+ *
+ */
+#include "uart401.h"
+
+#define DEV_BUFSIZE (64*1024) /* Buffer size per channel */
+
+#define HW_PLAYBUFFSIZE (10*2048)
+#define HW_RECBUFFSIZE (12*2048)
+#define HW_ALLOCSIZE (24*1024) /* Must be bigger or equal than HW_PLAYBUFFSIZE and HW_RECBUFFSIZE */
+
+typedef struct envy24_auxdrv envy24_auxdrv_t;
+
+typedef struct
+{
+ unsigned int svid;
+ char *product;
+ int nr_outs, nr_ins; /* # of analog channels */
+ int flags;
+#define MF_MAUDIO 0x00000001 /* Made by M Audio */
+#define MF_MIDI1 0x00000002 /* Has MIDI 1 port */
+#define MF_SPDIF 0x00000004 /* Has S/PDIF */
+#define MF_AKMCODEC 0x00000008 /* Has AKM codecs */
+#define MF_WCLOCK 0x00000010 /* Has World clock input */
+#define MF_SPDSELECT 0x00000020 /* Optical+coax S/PDIF */
+#define MF_EWS88 0x00000040 /* Terratec EWS88MT */
+#define MF_AP 0x00000080 /* M Audio Audiophile family */
+#define MF_MIDI2 0x00000100 /* Has MIDI 2 port */
+#define MF_EWX2496 0x00000200 /* Terratec EWX 24/96 */
+#define MF_CONSUMER 0x00000400 /* Force consumer AC97 codec detection */
+#define MF_HOONTECH 0x00000800
+#define MF_D410 0x00001000 /* Delta 410 */
+#define MF_MEEPROM 0x00002000 /* M Audio EEPROM interface */
+#define MF_AC97 0x00004000 /* Consumer AC97 codec */
+ envy24_auxdrv_t *auxdrv;
+ unsigned char *eeprom_data;
+}
+card_spec;
+
+#define ICENSEMBLE_VENDOR_ID 0x1412
+#define ICENSEMBLE_ENVY24_ID 0x1712
+
+#define AKM_A 0x40
+#define AKM_B 0x80
+
+#ifdef USE_LICENSING
+extern int options_data;
+#endif
+
+#define MAX_ODEV 10
+#define MAX_IDEV 12
+
+#ifdef DO_RIAA
+typedef struct
+{
+ int32_t x1, x2, x3;
+ int32_t y1, y2, y3;
+}
+riaa_t;
+#endif
+
+typedef struct
+{
+ int flags;
+#define PORTC_SPDOUT 0x00000001
+#define PORTC_SPDIN 0x00000002
+ int dev;
+ int chnum;
+ int direction;
+#define DIR_INPUT ADEV_NOOUTPUT
+#define DIR_OUTPUT ADEV_NOINPUT
+ int open_mode;
+
+ char name[16];
+
+ int bits, channels;
+ volatile int is_active;
+ volatile int trigger_bits;
+ int pcm_qlen;
+ int riaa_filter;
+#ifdef DO_RIAA
+ riaa_t riaa_parms[12];
+#endif
+}
+envy24_portc;
+
+/*
+ * Hoontech specific structure
+ */
+typedef union
+{
+ struct
+ {
+ unsigned int box:2;
+ unsigned int darear:1;
+ unsigned int id0:2;
+ unsigned int clock0:1;
+ unsigned int res0:2;
+
+ unsigned int ch1:1;
+ unsigned int ch2:1;
+ unsigned int ch3:1;
+ unsigned int id1:2;
+ unsigned int clock1:1;
+ unsigned int res1:2;
+
+ unsigned int ch4:1;
+ unsigned int midiin:1;
+ unsigned int midi1:1;
+ unsigned int id2:2;
+ unsigned int clock2:1;
+ unsigned int res2:2;
+
+ unsigned int midi2:1;
+ unsigned int mute:1;
+ unsigned int insel:1;
+ unsigned int id3:2;
+ unsigned int clock3:1;
+ unsigned int res3:2;
+ }
+ b;
+
+ struct
+ {
+ unsigned int b0:8;
+ unsigned int b1:8;
+ unsigned int b2:8;
+ unsigned int b3:8;
+ }
+ w;
+
+ unsigned int dwVal;
+
+}
+ADSP;
+
+#define _adsp devc->adsp
+/*****************/
+
+typedef struct envy24d_portc
+{
+ int audio_dev;
+ int open_mode;
+ int channels;
+ int direction;
+ int trigger_bits;
+}
+envy24d_portc;
+
+typedef struct
+{
+ oss_device_t *osdev;
+ oss_mutex_t mutex;
+ int mpu1_attached, mpu2_attached;
+ oss_native_word ccs_base, mt_base;
+ int irq;
+ card_spec *model_data;
+ envy24_auxdrv_t *auxdrv;
+ int skipdevs; /* envy24_skipdevs option */
+
+ unsigned char eeprom[32];
+
+/*
+ * MT mixer
+ */
+
+ int mixer_dev;
+
+/*
+ * Consumer (AC97) mixer
+ */
+
+ ac97_devc ac97devc;
+ int consumer_mixer_dev;
+ int consumer_ac97_present;
+
+ int nr_outdevs, nr_indevs;
+ int curr_outch, curr_inch;
+ int inportmask, outportmask;
+ envy24_portc play_portc[MAX_ODEV];
+ envy24_portc rec_portc[MAX_IDEV];
+ envy24d_portc direct_portc_in, direct_portc_out;
+ int direct_audio_opened;
+
+ int rec_bufsize, play_bufsize;
+
+ unsigned char *playbuf, *recbuf;
+ int playbuffsize, recbuffsize;
+ oss_native_word playbuf_phys, recbuf_phys;
+ oss_dma_handle_t playbuf_dma_handle, recbuf_dma_handle;
+ int hw_rfragsize, hw_pfragsize, hw_fragsamples, hw_nfrags;
+ volatile int hw_playfrag, hw_recfrag;
+ volatile int active_inputs, active_outputs;
+ volatile int open_inputs, open_outputs;
+ volatile int playback_started, recording_started;
+ volatile int playback_prepared, recording_prepared;
+ int speed, pending_speed_sel, speedbits;
+ int syncsource;
+ int gpio_tmp;
+#define SYNC_INTERNAL 0
+#define SYNC_SPDIF 1
+#define SYNC_WCLOCK 2
+
+ int play_channel_mask, rec_channel_mask;
+ int nr_play_channels, nr_rec_channels;
+ int writeahead;
+
+ int use_src;
+ int ratelock;
+
+/* Spdif parameters */
+ int spdif_pro_mode;
+ unsigned char spdif_cbits[24];
+ int sync_locked;
+ int ac3_mode;
+
+ short akm_gains[0xff];
+ ADSP adsp; /* Hoontech only */
+ uart401_devc uart401devc1;
+ uart401_devc uart401devc2;
+
+ int first_dev;
+}
+envy24_devc;
+
+struct envy24_auxdrv
+{
+ void (*card_init) (envy24_devc * devc);
+ int (*mixer_init) (envy24_devc * devc, int dev, int group);
+ void (*spdif_init) (envy24_devc * devc);
+ void (*spdif_set) (envy24_devc * devc, int ctrl0);
+ int (*spdif_ioctl) (envy24_devc * devc, int dev, unsigned int cmd,
+ ioctl_arg arg);
+ int (*spdif_read_reg) (envy24_devc * devc, int reg);
+ void (*spdif_write_reg) (envy24_devc * devc, int reg, int val);
+ void (*set_rate) (envy24_devc * devc);
+ int (*get_locked_status) (envy24_devc * devc);
+ int (*spdif_mixer_init) (envy24_devc * devc, int dev, int group);
+ void (*card_uninit) (envy24_devc * devc);
+};
+
+struct speed_sel
+{
+ int speed, speedbits;
+};
+
+/* extern struct speed_sel speed_tab[]; */
+
+void envy24d_install (envy24_devc * devc);
+void envy24d_playintr (envy24_devc * devc);
+void envy24d_recintr (envy24_devc * devc);
+void envy24_prepare_play_engine (envy24_devc * devc);
+void envy24_launch_play_engine (envy24_devc * devc);
+void envy24_stop_playback (envy24_devc * devc);
+void envy24_start_recording (envy24_devc * devc);
+void envy24_launch_recording (envy24_devc * devc);
+void envy24_stop_recording (envy24_devc * devc);
+
+void envy24_write_cci (envy24_devc * devc, int pos, int data);
+int envy24_read_cci (envy24_devc * devc, int pos);
+extern int cs8427_spdif_ioctl (envy24_devc * devc, int dev, unsigned int cmd,
+ ioctl_arg arg);
+extern void init_cs8427_spdif (envy24_devc * devc);
+extern int cs8427_spdif_mixer_init (envy24_devc * devc, int dev, int group);
+void WriteGPIObit (envy24_devc * devc, int sel, int what);
+int ReadGPIObit (envy24_devc * devc, int sel);
+void write_cs8427_spdif (envy24_devc * devc, int d);
+extern void envy24_set_enum_mask (int dev, int ctl, oss_native_word mask);