1/*- 2 * Copyright (c) 1999 Cameron Grant <gandalf@vilnya.demon.co.uk> 3 * Copyright (c) 2003-2006 Yuriy Tsibizov <yuriy.tsibizov@gfk.ru> 4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 1. Redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer. 11 * 2. Redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the 13 * documentation and/or other materials provided with the distribution. 14 * 15 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 16 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 17 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 18 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 19 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 20 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 21 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 22 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHERIN CONTRACT, STRICT 23 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 24 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 25 * SUCH DAMAGE. 26 * 27 * $FreeBSD$ 28 */ 29 30#ifndef EMU10KX_H 31#define EMU10KX_H 32 33#define SND_EMU10KX_MINVER 1 34#define SND_EMU10KX_PREFVER 1 35#define SND_EMU10KX_MAXVER 1 36 37#ifdef _KERNEL 38 39#define EMUPAGESIZE 4096 40#define NUM_G 64 41/* XXX some (empty) samples are played when play buffer is > EMUPAGESIZE */ 42#define EMU_PLAY_BUFSZ EMUPAGESIZE 43/* Recording is limited by EMUPAGESIZE*16=64K buffer */ 44#define EMU_REC_BUFSZ EMUPAGESIZE*16 45#define EMU_MAX_BUFSZ EMUPAGESIZE*16 46#define EMU_MAXPAGES 8192 47 48 49#define EMU_VAR_FUNC 0 50#define EMU_VAR_ROUTE 1 51#define EMU_VAR_ISEMU10K1 2 52#define EMU_VAR_MCH_DISABLED 3 53#define EMU_VAR_MCH_REC 4 54 55#define EMU_A_IOCFG_DISABLE_ANALOG 0x0040 /* = 'enable' for Audigy2 */ 56#define EMU_A_IOCFG_GPOUT2 0x0001 57#define EMU_AC97SLOT_REAR_RIGHT 0x01 58#define EMU_AC97SLOT_REAR_LEFT 0x02 59#define EMU_HCFG_GPOUT0 0x00001000 60#define EMU_HCFG_GPOUT1 0x00000800 61#define EMU_HCFG_GPOUT2 0x00000400 62 63#define RT_FRONT 0 64#define RT_REAR 1 65#define RT_CENTER 2 66#define RT_SUB 3 67#define RT_SIDE 4 68#define RT_MCHRECORD 5 69#define RT_COUNT 6 70 71/* mixer controls */ 72/* fx play */ 73#define M_FX0_FRONT_L 0 74#define M_FX1_FRONT_R 1 75#define M_FX2_REAR_L 2 76#define M_FX3_REAR_R 3 77#define M_FX4_CENTER 4 78#define M_FX5_SUBWOOFER 5 79#define M_FX6_SIDE_L 6 80#define M_FX7_SIDE_R 7 81/* fx rec */ 82#define M_FX0_REC_L 8 83#define M_FX1_REC_R 9 84/* inputs play */ 85#define M_IN0_FRONT_L 10 86#define M_IN0_FRONT_R 11 87#define M_IN1_FRONT_L 12 88#define M_IN1_FRONT_R 13 89#define M_IN2_FRONT_L 14 90#define M_IN2_FRONT_R 15 91#define M_IN3_FRONT_L 16 92#define M_IN3_FRONT_R 17 93#define M_IN4_FRONT_L 18 94#define M_IN4_FRONT_R 19 95#define M_IN5_FRONT_L 20 96#define M_IN5_FRONT_R 21 97#define M_IN6_FRONT_L 22 98#define M_IN6_FRONT_R 23 99#define M_IN7_FRONT_L 24 100#define M_IN7_FRONT_R 25 101/* inputs rec */ 102#define M_IN0_REC_L 26 103#define M_IN0_REC_R 27 104#define M_IN1_REC_L 28 105#define M_IN1_REC_R 29 106#define M_IN2_REC_L 30 107#define M_IN2_REC_R 31 108#define M_IN3_REC_L 32 109#define M_IN3_REC_R 33 110#define M_IN4_REC_L 34 111#define M_IN4_REC_R 35 112#define M_IN5_REC_L 36 113#define M_IN5_REC_R 37 114#define M_IN6_REC_L 38 115#define M_IN6_REC_R 39 116#define M_IN7_REC_L 40 117#define M_IN7_REC_R 41 118/* master volume */ 119#define M_MASTER_FRONT_L 42 120#define M_MASTER_FRONT_R 43 121#define M_MASTER_REAR_L 44 122#define M_MASTER_REAR_R 45 123#define M_MASTER_CENTER 46 124#define M_MASTER_SUBWOOFER 47 125#define M_MASTER_SIDE_L 48 126#define M_MASTER_SIDE_R 49 127/* master rec volume */ 128#define M_MASTER_REC_L 50 129#define M_MASTER_REC_R 51 130 131#define NUM_MIXERS 52 132 133struct emu_sc_info; 134 135/* MIDI device parameters */ 136struct emu_midiinfo { 137 struct emu_sc_info *card; 138 int port; 139 int portnr; 140}; 141 142/* PCM device parameters */ 143struct emu_pcminfo { 144 struct emu_sc_info *card; 145 int route; 146}; 147 148int emu_intr_register(struct emu_sc_info *sc, uint32_t inte_mask, uint32_t intr_mask, uint32_t(*func) (void *softc, uint32_t irq), void *isc); 149int emu_intr_unregister(struct emu_sc_info *sc, int ihandle); 150 151uint32_t emu_rd(struct emu_sc_info *sc, unsigned int regno, unsigned int size); 152void emu_wr(struct emu_sc_info *sc, unsigned int regno, uint32_t data, unsigned int size); 153 154uint32_t emu_rdptr(struct emu_sc_info *sc, unsigned int chn, unsigned int reg); 155void emu_wrptr(struct emu_sc_info *sc, unsigned int chn, unsigned int reg, uint32_t data); 156 157uint32_t emu_rd_p16vptr(struct emu_sc_info *sc, uint16_t chn, uint16_t reg); 158void emu_wr_p16vptr(struct emu_sc_info *sc, uint16_t chn, uint16_t reg, uint32_t data); 159 160int emu_timer_create(struct emu_sc_info *sc); 161int emu_timer_set(struct emu_sc_info *sc, int timer, int delay); 162int emu_timer_enable(struct emu_sc_info *sc, int timer, int go); 163int emu_timer_clear(struct emu_sc_info *sc, int timer); 164 165struct emu_voice; 166 167struct emu_route { 168 int routing_left[8]; 169 int amounts_left[8]; 170 int routing_right[8]; 171 int amounts_right[8]; 172}; 173 174struct emu_voice* emu_valloc(struct emu_sc_info *sc); 175void emu_vfree(struct emu_sc_info *sc, struct emu_voice *v); 176int emu_vinit(struct emu_sc_info *sc, struct emu_voice *m, struct emu_voice *s, 177 uint32_t sz, struct snd_dbuf *b); 178void emu_vroute(struct emu_sc_info *sc, struct emu_route *rt, struct emu_voice *v); 179void emu_vsetup(struct emu_voice *v, int fmt, int spd); 180void emu_vwrite(struct emu_sc_info *sc, struct emu_voice *v); 181void emu_vtrigger(struct emu_sc_info *sc, struct emu_voice *v, int go); 182int emu_vpos(struct emu_sc_info *sc, struct emu_voice *v); 183 184bus_dma_tag_t emu_gettag(struct emu_sc_info *sc); 185 186void emumix_set_volume(struct emu_sc_info *sc, int mixer_idx, int volume); 187int emumix_get_volume(struct emu_sc_info *sc, int mixer_idx); 188 189void emu_enable_ir(struct emu_sc_info *sc); 190#endif /* _KERNEL */ 191#endif /* EMU10K1_H */ 192