xref: /onnv-gate/usr/src/uts/common/io/audio/drv/audioemu10k/dsp/emu10k2.mac (revision 10913:1d1ed05d0838)
1*10913Sgdamore@opensolaris.org//
2*10913Sgdamore@opensolaris.org// Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
3*10913Sgdamore@opensolaris.org// Use is subject to license terms.
4*10913Sgdamore@opensolaris.org//
5*10913Sgdamore@opensolaris.org// Copyright (C) 4Front Technologies 1996-2008.
6*10913Sgdamore@opensolaris.org//
7*10913Sgdamore@opensolaris.org// CDDL HEADER START
8*10913Sgdamore@opensolaris.org//
9*10913Sgdamore@opensolaris.org// The contents of this file are subject to the terms of the
10*10913Sgdamore@opensolaris.org// Common Development and Distribution License (the "License").
11*10913Sgdamore@opensolaris.org// You may not use this file except in compliance with the License.
12*10913Sgdamore@opensolaris.org//
13*10913Sgdamore@opensolaris.org// You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
14*10913Sgdamore@opensolaris.org// or http://www.opensolaris.org/os/licensing.
15*10913Sgdamore@opensolaris.org// See the License for the specific language governing permissions
16*10913Sgdamore@opensolaris.org// and limitations under the License.
17*10913Sgdamore@opensolaris.org//
18*10913Sgdamore@opensolaris.org// When distributing Covered Code, include this CDDL HEADER in each
19*10913Sgdamore@opensolaris.org// file and include the License file at usr/src/OPENSOLARIS.LICENSE.
20*10913Sgdamore@opensolaris.org// If applicable, add the following below this CDDL HEADER, with the
21*10913Sgdamore@opensolaris.org// fields enclosed by brackets "[]" replaced with your own identifying
22*10913Sgdamore@opensolaris.org// information: Portions Copyright [yyyy] [name of copyright owner]
23*10913Sgdamore@opensolaris.org//
24*10913Sgdamore@opensolaris.org// CDDL HEADER END
25*10913Sgdamore@opensolaris.org
26*10913Sgdamore@opensolaris.org	// Constants for EMU 10k2 (SB Audigy)
27*10913Sgdamore@opensolaris.org
28*10913Sgdamore@opensolaris.org	// Inputs
29*10913Sgdamore@opensolaris.org	.input IN_AC97_L	0
30*10913Sgdamore@opensolaris.org	.input IN_AC97_R	1
31*10913Sgdamore@opensolaris.org	.input IN_DIGCD_L	2
32*10913Sgdamore@opensolaris.org	.input IN_DIGCD_R	3
33*10913Sgdamore@opensolaris.org	.input IN_SPDIF1_L	4	// TOSLink
34*10913Sgdamore@opensolaris.org	.input IN_SPDIF1_R	5
35*10913Sgdamore@opensolaris.org	.input IN_MYSTERY_L	6
36*10913Sgdamore@opensolaris.org	.input IN_MYSTERY_R	7
37*10913Sgdamore@opensolaris.org	.input IN_LINE2_L	8	// LiveDrive
38*10913Sgdamore@opensolaris.org	.input IN_LINE2_R	9
39*10913Sgdamore@opensolaris.org	.input IN_SPDIF2_L	10	// Coaxial SPDIF
40*10913Sgdamore@opensolaris.org	.input IN_SPDIF2_R	11
41*10913Sgdamore@opensolaris.org	.input IN_AUX2_L	12	// LiveDrive
42*10913Sgdamore@opensolaris.org	.input IN_AUX2_R	13
43*10913Sgdamore@opensolaris.org
44*10913Sgdamore@opensolaris.org	// Outputs
45*10913Sgdamore@opensolaris.org	.output OUT_SPDIF_L	0
46*10913Sgdamore@opensolaris.org	.output OUT_SPDIF_R	1
47*10913Sgdamore@opensolaris.org	.output OUT_DCENTER	2	// Digital Center channel
48*10913Sgdamore@opensolaris.org	.output OUT_DLFE	3	// Digital LFE
49*10913Sgdamore@opensolaris.org	.output OUT_HEADPH_L	4	// LiveDrive headphone out
50*10913Sgdamore@opensolaris.org	.output OUT_HEADPH_R	5
51*10913Sgdamore@opensolaris.org	.output OUT_DSURR_L	6	// Surround output (digital)
52*10913Sgdamore@opensolaris.org	.output OUT_DSURR_R	7
53*10913Sgdamore@opensolaris.org	.output OUT_FRONT_L	8
54*10913Sgdamore@opensolaris.org	.output OUT_FRONT_R	9
55*10913Sgdamore@opensolaris.org	.output OUT_ACENTER	10	// Analog center channel
56*10913Sgdamore@opensolaris.org	.output OUT_ALFE	11	// Analog LFE output
57*10913Sgdamore@opensolaris.org	.output OUT_SIDE_L	12	// Side surround
58*10913Sgdamore@opensolaris.org	.output OUT_SIDE_R	13
59*10913Sgdamore@opensolaris.org	.output OUT_SURR_L	14	// Surround output
60*10913Sgdamore@opensolaris.org	.output OUT_SURR_R	15
61*10913Sgdamore@opensolaris.org	.output OUT_AC97_L	16	// Send to the AC97 front channel
62*10913Sgdamore@opensolaris.org	.output OUT_AC97_R	17
63*10913Sgdamore@opensolaris.org	.output OUT_ADC_L	22	// Send to the ADC recording channel
64*10913Sgdamore@opensolaris.org	.output OUT_ADC_R	23
65*10913Sgdamore@opensolaris.org	.output OUT_MICREC_L	24	// Send to the mic recording buffer
66*10913Sgdamore@opensolaris.org	.output OUT_MICREC_R	25	// ??????? (maybe not in use at all)
67*10913Sgdamore@opensolaris.org
68*10913Sgdamore@opensolaris.org	// Temporaries
69*10913Sgdamore@opensolaris.org	.gpr PCM_FRONT_L
70*10913Sgdamore@opensolaris.org	.gpr PCM_FRONT_R
71*10913Sgdamore@opensolaris.org	.gpr PCM_SURR_L
72*10913Sgdamore@opensolaris.org	.gpr PCM_SURR_R
73*10913Sgdamore@opensolaris.org	.gpr PCM_SIDE_L
74*10913Sgdamore@opensolaris.org	.gpr PCM_SIDE_R
75*10913Sgdamore@opensolaris.org	.gpr PCM_CEN
76*10913Sgdamore@opensolaris.org	.gpr PCM_LFE
77*10913Sgdamore@opensolaris.org	.gpr PCM_REC_L
78*10913Sgdamore@opensolaris.org	.gpr PCM_REC_R
79*10913Sgdamore@opensolaris.org	.gpr SPDIF_DELAY
80*10913Sgdamore@opensolaris.org
81*10913Sgdamore@opensolaris.org	// Code
82*10913Sgdamore@opensolaris.org
83*10913Sgdamore@opensolaris.org	// Load up the PCM inputs.
84*10913Sgdamore@opensolaris.org	// We apply the PCM volume at the same time.
85*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_L, 0, FX_FRONT_L, VOL_PCM)
86*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_R, 0, FX_FRONT_R, VOL_PCM)
87*10913Sgdamore@opensolaris.org	MACS(PCM_SURR_L, 0, FX_SURR_L, VOL_PCM)
88*10913Sgdamore@opensolaris.org	MACS(PCM_SURR_R, 0, FX_SURR_R, VOL_PCM)
89*10913Sgdamore@opensolaris.org	MACS(PCM_SIDE_L, 0, FX_SIDE_L, VOL_PCM)
90*10913Sgdamore@opensolaris.org	MACS(PCM_SIDE_R, 0, FX_SIDE_R, VOL_PCM)
91*10913Sgdamore@opensolaris.org	MACS(PCM_CEN, 0, FX_CEN, VOL_PCM)
92*10913Sgdamore@opensolaris.org	MACS(PCM_LFE, 0, FX_LFE, VOL_PCM)
93*10913Sgdamore@opensolaris.org
94*10913Sgdamore@opensolaris.org	// Mix any monitor sources into the front PCM
95*10913Sgdamore@opensolaris.org	// AC'97 (includes Line-In, analog CD, and Mic)
96*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_AC97_L, MON_AC97_L)
97*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_AC97_R, MON_AC97_R)
98*10913Sgdamore@opensolaris.org	// DIGCD
99*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_DIGCD_L, MON_DIGCD_L)
100*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_DIGCD_R, MON_DIGCD_R)
101*10913Sgdamore@opensolaris.org	// SPDIF1
102*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_SPDIF1_L, MON_SPDIF1_L)
103*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_SPDIF1_R, MON_SPDIF1_R)
104*10913Sgdamore@opensolaris.org	// SPDIF2
105*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_SPDIF2_L, MON_SPDIF2_L)
106*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_SPDIF2_R, MON_SPDIF2_R)
107*10913Sgdamore@opensolaris.org	// Line2/Mic2 (Live! Drive)
108*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_LINE2_L, MON_LINE2_L)
109*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_LINE2_R, MON_LINE2_R)
110*10913Sgdamore@opensolaris.org	// Aux2 (Live! Drive)
111*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_AUX2_L, MON_AUX2_L)
112*10913Sgdamore@opensolaris.org	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_AUX2_R, MON_AUX2_R)
113*10913Sgdamore@opensolaris.org
114*10913Sgdamore@opensolaris.org	// Outputs
115*10913Sgdamore@opensolaris.org	MACS(OUT_FRONT_L, 0, PCM_FRONT_L, VOL_FRONT_L)
116*10913Sgdamore@opensolaris.org	MACS(OUT_FRONT_R, 0, PCM_FRONT_R, VOL_FRONT_R)
117*10913Sgdamore@opensolaris.org	MACS(OUT_SPDIF_L, 0, PCM_FRONT_L, VOL_FRONT_L)
118*10913Sgdamore@opensolaris.org	// delay SPDIF right channel one sample to fix a bug
119*10913Sgdamore@opensolaris.org	ACC3(OUT_SPDIF_R, 0, 0, SPDIF_DELAY)
120*10913Sgdamore@opensolaris.org	MACS(SPDIF_DELAY, 0, PCM_FRONT_R, VOL_FRONT_R)
121*10913Sgdamore@opensolaris.org	MACS(OUT_HEADPH_L, 0, PCM_FRONT_L, VOL_HEADPH_L)
122*10913Sgdamore@opensolaris.org	MACS(OUT_HEADPH_R, 0, PCM_FRONT_R, VOL_HEADPH_R)
123*10913Sgdamore@opensolaris.org	MACS(OUT_SURR_L, 0, PCM_SURR_L, VOL_SURR_L)
124*10913Sgdamore@opensolaris.org	MACS(OUT_SURR_R, 0, PCM_SURR_R, VOL_SURR_R)
125*10913Sgdamore@opensolaris.org	MACS(OUT_DSURR_L, 0, PCM_SURR_L, VOL_SURR_L)
126*10913Sgdamore@opensolaris.org	MACS(OUT_DSURR_R, 0, PCM_SURR_R, VOL_SURR_R)
127*10913Sgdamore@opensolaris.org	MACS(OUT_SIDE_L, 0, PCM_SIDE_L, VOL_SIDE_L)
128*10913Sgdamore@opensolaris.org	MACS(OUT_SIDE_R, 0, PCM_SIDE_R, VOL_SIDE_R)
129*10913Sgdamore@opensolaris.org	MACS(OUT_ACENTER, 0, PCM_CEN, VOL_CEN)
130*10913Sgdamore@opensolaris.org	MACS(OUT_DCENTER, 0, PCM_CEN, VOL_CEN)
131*10913Sgdamore@opensolaris.org	MACS(OUT_ALFE, 0, PCM_LFE, VOL_LFE)
132*10913Sgdamore@opensolaris.org	MACS(OUT_DLFE, 0, PCM_LFE, VOL_LFE)
133*10913Sgdamore@opensolaris.org
134*10913Sgdamore@opensolaris.org	// Inputs (Recording) -- the source variables are treated as
135*10913Sgdamore@opensolaris.org	// simple boolean enables.
136*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_L, PCM_REC_R, IN_AC97_L, REC_AC97)
137*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_R, PCM_REC_L, IN_AC97_R, REC_AC97)
138*10913Sgdamore@opensolaris.org
139*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_L, PCM_REC_L, IN_DIGCD_L, REC_DIGCD)
140*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_R, PCM_REC_R, IN_DIGCD_R, REC_DIGCD)
141*10913Sgdamore@opensolaris.org
142*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_L, PCM_REC_L, IN_SPDIF1_L, REC_SPDIF1)
143*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_R, PCM_REC_R, IN_SPDIF1_R, REC_SPDIF1)
144*10913Sgdamore@opensolaris.org
145*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_L, PCM_REC_L, IN_SPDIF2_L, REC_SPDIF2)
146*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_R, PCM_REC_R, IN_SPDIF2_R, REC_SPDIF2)
147*10913Sgdamore@opensolaris.org
148*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_L, PCM_REC_L, IN_AUX2_L, REC_AUX2)
149*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_R, PCM_REC_R, IN_AUX2_R, REC_AUX2)
150*10913Sgdamore@opensolaris.org
151*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_L, PCM_REC_L, IN_LINE2_L, REC_LINE2)
152*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_R, PCM_REC_R, IN_LINE2_R, REC_LINE2)
153*10913Sgdamore@opensolaris.org
154*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_L, PCM_REC_L, PCM_FRONT_L, REC_PCM)
155*10913Sgdamore@opensolaris.org	MACINTS(PCM_REC_R, PCM_REC_R, PCM_FRONT_R, REC_PCM)
156*10913Sgdamore@opensolaris.org
157*10913Sgdamore@opensolaris.org	// Apply master record gain
158*10913Sgdamore@opensolaris.org	MACS(OUT_ADC_L, 0, PCM_REC_L, VOL_REC_L)
159*10913Sgdamore@opensolaris.org	MACS(OUT_ADC_R, 0, PCM_REC_R, VOL_REC_R)
160