summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/io/audio/drv/audioemu10k/dsp/emu10k2.mac
blob: 524b23bde065758e7d98245ef468b4bdd8bfe00f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
//
// Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
// Use is subject to license terms.
//
// Copyright (C) 4Front Technologies 1996-2008.
//
// CDDL HEADER START
//
// The contents of this file are subject to the terms of the
// Common Development and Distribution License (the "License").
// You may not use this file except in compliance with the License.
//
// You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
// or http://www.opensolaris.org/os/licensing.
// See the License for the specific language governing permissions
// and limitations under the License.
//
// When distributing Covered Code, include this CDDL HEADER in each
// file and include the License file at usr/src/OPENSOLARIS.LICENSE.
// If applicable, add the following below this CDDL HEADER, with the
// fields enclosed by brackets "[]" replaced with your own identifying
// information: Portions Copyright [yyyy] [name of copyright owner]
//
// CDDL HEADER END

	// Constants for EMU 10k2 (SB Audigy)

	// Inputs
	.input IN_AC97_L	0
	.input IN_AC97_R	1
	.input IN_DIGCD_L	2
	.input IN_DIGCD_R	3
	.input IN_SPDIF1_L	4	// TOSLink
	.input IN_SPDIF1_R	5
	.input IN_MYSTERY_L	6
	.input IN_MYSTERY_R	7
	.input IN_LINE2_L	8	// LiveDrive
	.input IN_LINE2_R	9
	.input IN_SPDIF2_L	10	// Coaxial SPDIF
	.input IN_SPDIF2_R	11
	.input IN_AUX2_L	12	// LiveDrive
	.input IN_AUX2_R	13

	// Outputs
	.output OUT_SPDIF_L	0
	.output OUT_SPDIF_R	1
	.output OUT_DCENTER	2	// Digital Center channel
	.output OUT_DLFE	3	// Digital LFE
	.output OUT_HEADPH_L	4	// LiveDrive headphone out
	.output OUT_HEADPH_R	5
	.output OUT_DSURR_L	6	// Surround output (digital)
	.output OUT_DSURR_R	7
	.output OUT_FRONT_L	8
	.output OUT_FRONT_R	9
	.output OUT_ACENTER	10	// Analog center channel
	.output OUT_ALFE	11	// Analog LFE output
	.output OUT_SIDE_L	12	// Side surround
	.output OUT_SIDE_R	13
	.output OUT_SURR_L	14	// Surround output
	.output OUT_SURR_R	15
	.output OUT_AC97_L	16	// Send to the AC97 front channel
	.output OUT_AC97_R	17
	.output OUT_ADC_L	22	// Send to the ADC recording channel
	.output OUT_ADC_R	23
	.output OUT_MICREC_L	24	// Send to the mic recording buffer
	.output OUT_MICREC_R	25	// ??????? (maybe not in use at all)

	// Temporaries
	.gpr PCM_FRONT_L
	.gpr PCM_FRONT_R
	.gpr PCM_SURR_L
	.gpr PCM_SURR_R
	.gpr PCM_SIDE_L
	.gpr PCM_SIDE_R
	.gpr PCM_CEN
	.gpr PCM_LFE
	.gpr PCM_REC_L
	.gpr PCM_REC_R
	.gpr SPDIF_DELAY

	// Code

	// Load up the PCM inputs.
	// We apply the PCM volume at the same time.
	MACS(PCM_FRONT_L, 0, FX_FRONT_L, VOL_PCM)
	MACS(PCM_FRONT_R, 0, FX_FRONT_R, VOL_PCM)
	MACS(PCM_SURR_L, 0, FX_SURR_L, VOL_PCM)
	MACS(PCM_SURR_R, 0, FX_SURR_R, VOL_PCM)
	MACS(PCM_SIDE_L, 0, FX_SIDE_L, VOL_PCM)
	MACS(PCM_SIDE_R, 0, FX_SIDE_R, VOL_PCM)
	MACS(PCM_CEN, 0, FX_CEN, VOL_PCM)
	MACS(PCM_LFE, 0, FX_LFE, VOL_PCM)

	// Mix any monitor sources into the front PCM
	// AC'97 (includes Line-In, analog CD, and Mic)
	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_AC97_L, MON_AC97_L)
	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_AC97_R, MON_AC97_R)
	// DIGCD
	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_DIGCD_L, MON_DIGCD_L)
	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_DIGCD_R, MON_DIGCD_R)
	// SPDIF1
	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_SPDIF1_L, MON_SPDIF1_L)
	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_SPDIF1_R, MON_SPDIF1_R)
	// SPDIF2
	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_SPDIF2_L, MON_SPDIF2_L)
	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_SPDIF2_R, MON_SPDIF2_R)
	// Line2/Mic2 (Live! Drive)
	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_LINE2_L, MON_LINE2_L)
	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_LINE2_R, MON_LINE2_R)
	// Aux2 (Live! Drive)
	MACS(PCM_FRONT_L, PCM_FRONT_L, IN_AUX2_L, MON_AUX2_L)
	MACS(PCM_FRONT_R, PCM_FRONT_R, IN_AUX2_R, MON_AUX2_R)

	// Outputs
	MACS(OUT_FRONT_L, 0, PCM_FRONT_L, VOL_FRONT_L)
	MACS(OUT_FRONT_R, 0, PCM_FRONT_R, VOL_FRONT_R)
	MACS(OUT_SPDIF_L, 0, PCM_FRONT_L, VOL_FRONT_L)
	// delay SPDIF right channel one sample to fix a bug
	ACC3(OUT_SPDIF_R, 0, 0, SPDIF_DELAY)
	MACS(SPDIF_DELAY, 0, PCM_FRONT_R, VOL_FRONT_R)
	MACS(OUT_HEADPH_L, 0, PCM_FRONT_L, VOL_HEADPH_L)
	MACS(OUT_HEADPH_R, 0, PCM_FRONT_R, VOL_HEADPH_R)
	MACS(OUT_SURR_L, 0, PCM_SURR_L, VOL_SURR_L)
	MACS(OUT_SURR_R, 0, PCM_SURR_R, VOL_SURR_R)
	MACS(OUT_DSURR_L, 0, PCM_SURR_L, VOL_SURR_L)
	MACS(OUT_DSURR_R, 0, PCM_SURR_R, VOL_SURR_R)
	MACS(OUT_SIDE_L, 0, PCM_SIDE_L, VOL_SIDE_L)
	MACS(OUT_SIDE_R, 0, PCM_SIDE_R, VOL_SIDE_R)
	MACS(OUT_ACENTER, 0, PCM_CEN, VOL_CEN)
	MACS(OUT_DCENTER, 0, PCM_CEN, VOL_CEN)
	MACS(OUT_ALFE, 0, PCM_LFE, VOL_LFE)
	MACS(OUT_DLFE, 0, PCM_LFE, VOL_LFE)

	// Inputs (Recording) -- the source variables are treated as
	// simple boolean enables.
	MACINTS(PCM_REC_L, PCM_REC_R, IN_AC97_L, REC_AC97)
	MACINTS(PCM_REC_R, PCM_REC_L, IN_AC97_R, REC_AC97)

	MACINTS(PCM_REC_L, PCM_REC_L, IN_DIGCD_L, REC_DIGCD)
	MACINTS(PCM_REC_R, PCM_REC_R, IN_DIGCD_R, REC_DIGCD)

	MACINTS(PCM_REC_L, PCM_REC_L, IN_SPDIF1_L, REC_SPDIF1)
	MACINTS(PCM_REC_R, PCM_REC_R, IN_SPDIF1_R, REC_SPDIF1)

	MACINTS(PCM_REC_L, PCM_REC_L, IN_SPDIF2_L, REC_SPDIF2)
	MACINTS(PCM_REC_R, PCM_REC_R, IN_SPDIF2_R, REC_SPDIF2)

	MACINTS(PCM_REC_L, PCM_REC_L, IN_AUX2_L, REC_AUX2)
	MACINTS(PCM_REC_R, PCM_REC_R, IN_AUX2_R, REC_AUX2)

	MACINTS(PCM_REC_L, PCM_REC_L, IN_LINE2_L, REC_LINE2)
	MACINTS(PCM_REC_R, PCM_REC_R, IN_LINE2_R, REC_LINE2)

	MACINTS(PCM_REC_L, PCM_REC_L, PCM_FRONT_L, REC_PCM)
	MACINTS(PCM_REC_R, PCM_REC_R, PCM_FRONT_R, REC_PCM)

	// Apply master record gain
	MACS(OUT_ADC_L, 0, PCM_REC_L, VOL_REC_L)
	MACS(OUT_ADC_R, 0, PCM_REC_R, VOL_REC_R)