|
|
1.1 root 1: /*
2: * Copyright (c) 1994 NeXT Computer, Inc. All rights reserved.
3: *
4: * HISTORY
5: * 4-Mar-94 Rakesh Dubey at NeXT
6: * Created.
7: */
8:
9: /*
10: * The default base address is 0x220. Adresses depend upon the flavor of
11: * sound card and are not software selectable.
12: */
13:
14: /*
15: * SB 1.5 and earlier : 16 bytes at 0x210 to 0x260
16: * SB 2.0 : 16 bytes at 0x220 and 0x240
17: * SB Pro : 24 bytes at 0x220 and 0x240
18: */
19: #define SB_BASE_ADDRESS_1 0x0210
20: #define SB_BASE_ADDRESS_2 0x0220
21: #define SB_BASE_ADDRESS_3 0x0230
22: #define SB_BASE_ADDRESS_4 0x0240
23: #define SB_BASE_ADDRESS_5 0x0250
24: #define SB_BASE_ADDRESS_6 0x0260
25:
26: /*
27: * DSP register offsets.
28: */
29: #define SB_DSP_RESET_OFFSET 0x06 /* write only */
30: #define SB_DSP_READ_DATA_OFFSET 0x0a /* read only */
31: #define SB_DSP_WRITE_DATA_OR_COMMAND_OFFSET 0x0c /* write */
32:
33:
34: /*
35: * These two indicate whether the DSP is busy and whether the result is
36: * available from DSP (if any). Success is indicated by bit 7 of the
37: * appropriate register getting set and reset respectively.
38: */
39: #define SB_DSP_WRITE_BUFFER_STATUS_OFFSET 0x0c /* read */
40: #define SB_DSP_DATA_AVAILABLE_STATUS_OFFSET 0x0e /* read only */
41:
42: /*
43: * DSP Command list. SB SDK advises to wait for 3.3us after an address write
44: * and 23us after a data write.
45: */
46:
47: #define SB_ADDRESS_WRITE_DELAY 10
48: #define SB_DATA_WRITE_DELAY 25
49: #define SB_DATA_READ_DELAY 10
50:
51: /*
52: * Set the sampling rate. There are many limitations depending upon the
53: * flavor of card and transfer mode.
54: */
55: #define DC_SET_TIME_CONSTANT 0x40
56:
57: /*
58: * Speaker control. Speaker must be off while doing input.
59: */
60: #define DC_TURN_ON_SPEAKER 0xd1
61: #define DC_TURN_OFF_SPEAKER 0xd3
62: #define DC_GET_SPEAKER_STATUS 0xd8
63:
64: /*
65: * Request low speed DMA transfer.
66: */
67: #define DC_START_LS_DMA_DAC_8 0x14
68: #define DC_START_LS_DMA_ADC_8 0x24
69:
70: /*
71: * Request high speed DMA transfer.
72: */
73: #define DC_SET_BLOCK_SIZE 0x48
74:
75: #define DC_START_HS_DMA_DAC_8 0x91
76: #define DC_START_HS_DMA_ADC_8 0x99
77:
78: /*
79: * DSP side other DMA control commands.
80: */
81: #define DC_HALT_DMA 0xd0
82:
83: /*
84: * Not used.
85: */
86: #define DC_CONTINUE_DMA 0xd4
87: #define DC_SEND_SILENCE 0x80
88: #define DC_PIO_ADC_8 0x20 /* Programmed I/O */
89: #define DC_PIO_DAC_8 0x10
90:
91: /*
92: * Other transfer modes for output. Currently unsupported.
93: */
94: #define DC_START_LS_DMA_DAC_2 0x16
95: #define DC_START_LS_DMA_DAC_2_6 0x76
96: #define DC_START_LS_DMA_DAC_4 0x74
97:
98: /*
99: * Other miscelleaneous DSP Coomands.
100: */
101: #define DC_GET_VERSION 0xe1
102: #define DC_INVERT_BYTE 0xe0
103:
104: /*
105: * Record mode control (available only for SBPro)
106: */
107: #define DC_RECORD_IN_MONO 0xa0
108: #define DC_RECORD_IN_STEREO 0xa8
109:
110: /*
111: * Note: Mixer is available in SB Pro model only.
112: */
113:
114: /*
115: * Mixer register offsets.
116: */
117: #define SB_MIXER_ADDRESS_OFFSET 0x04
118: #define SB_MIXER_DATA_OFFSET 0x05
119:
120: /*
121: * Mixer Commands for setting volume.
122: */
123: #define MC_MASTER_VOLUME 0x22
124: #define MC_FM_VOLUME 0x26
125: #define MC_CD_VOLUME 0x28
126: #define MC_LINE_VOLUME 0x2e
127: #define MC_VOC_VOLUME 0x04
128: #define MC_MICROPHONE_VOLUME 0x0a
129:
130: /*
131: * Other mixer commands for selecting input output type.
132: */
133: #define MC_RECORD_CONTROL 0x0c
134: #define MC_PLAYBACK_CONTROL 0x0e
135:
136: /*
137: * Actually you have only half as many settings.
138: */
139: #define MAX_INPUT_GAIN_LINE 0x0f
140: #define MAX_INPUT_GAIN_MICROPHONE 0x07
141:
142: #define MAX_MASTER_OUTPUT_VOLUME 0x0f
143: #define MAX_FM_OUTPUT_VOLUME 0x0f
144: #define MAX_LINE_OUTPUT_VOLUME 0x0f
145: #define MAX_CD_OUTPUT_VOLUME 0x0f
146:
147: #define MUTE_OUTPUT 1
148: #define UNMUTE_OUTPUT 0
149:
150: #define PLAYBACK_ENABLE 1
151: #define PLAYBACK_DISABLE 0
152: #define CAPTURE_ENABLE 1
153: #define CAPTURE_DISABLE 0
154:
155: #define ENABLE_DMA_PLAYBACK 0
156: #define ENABLE_DMA_CAPTURE 0
157: #define DISABLE_DMA_PLAYBACK 1
158: #define DISABLE_DMA_CAPTURE 1
159:
160: #define DSP_DATA_LINEAR 0
161: #define DSP_DATA_COMPANDED 1
162:
163: /*
164: * After these sampling rates we must use the high speed part of the DSP (and
165: * use different commands).
166: */
167: #define SB_CLASSIC_MAX_SPEED_RECORD 13000
168: #define SB_CLASSIC_MAX_SPEED_PLAYBACK 23000
169:
170: #define SB_20_LOW_SPEED_RECORD 15000
171: #define SB_20_LOW_SPEED_PLAYBACK 23000
172:
173: #define SB_PRO_LOW_SPEED 23000
174:
175: /*
176: * Maximum and minimum sampling rates.
177: */
178: #define SB_MAX_SAMPLE_RATE 47619
179: #define SB_MIN_SAMPLE_RATE 3906
180:
181: #define DSP_MONO_MODE 0
182: #define DSP_STEREO_MODE 1
183:
184: #define LEFT_CHANNEL 0
185: #define RIGHT_CHANNEL 1
186:
187: #define LINE_LEVEL_INPUT 0
188: #define MICROPHONE_LEVEL_INPUT 1
189:
190: #define DMA_DIRECTION_IN 0
191: #define DMA_DIRECTION_OUT 1
192:
193: /*
194: * Typedefs for SB Mono and stereo mixer registers.
195: */
196: typedef unsigned char sbMonoMixerRegister_t;
197:
198: typedef union {
199: struct {
200: unsigned char
201: right:4,
202: left:4;
203: } reg;
204: unsigned char data;
205: } sbStereoMixerRegister_t;
206:
207: /*
208: * This list will grow bigger, if we decide to take advantages of different
209: * cards in each of these two classes. That will be a pain though. ObS: Why
210: * do we have to call old things classic?
211: */
212: typedef enum {
213: SB_CLASSIC = 1, SB_20, SB_PRO, SB_16, SB_NONE
214: } sbCardVersion_t;
215:
216: typedef struct {
217: sbCardVersion_t version;
218: char *name;
219: unsigned int majorVersion;
220: unsigned int minorVersion;
221: BOOL mixerPresent;
222: } sbCardParameters_t;
223:
224:
225: /*
226: * Shadow registers for recording. Available only for SB Pro model.
227: */
228: #define SB_RECORD_SOURCE_MIC 0
229: #define SB_RECORD_SOURCE_CD 1
230: #define SB_RECORD_SOURCE_LINE 2
231:
232: #define SB_RECORD_FREQ_HIGH 1
233: #define SB_RECORD_FREQ_LOW 0
234:
235: #define SB_RECORD_ANFI_ON 1
236: #define SB_RECORD_ANFI_OFF 0
237:
238: typedef union {
239: struct {
240: unsigned char
241: rsvd1:1, /* bit 0 */
242: source:2,
243: highFreq:1,
244: rsvd2:1,
245: inputFilter:1,
246: rsvd3:2; /* bit 7 */
247: } reg;
248: unsigned char data;
249: } sbRecordingMode_t;
250:
251: /*
252: * For playback.
253: */
254: #define SB_PLAYBACK_STEREO 1
255: #define SB_PLAYBACK_MONO 0
256:
257: #define SB_PLAYBACK_DNFI_ON 1
258: #define SB_PLAYBACK_DNFI_OFF 0
259:
260: typedef union {
261: struct {
262: unsigned char
263: rsvd1:1,
264: stereo:1,
265: rsvd2:3,
266: outputFilter:1,
267: rsvd3:2;
268: } reg;
269: unsigned char data;
270: } sbPlaybackMode_t;
271:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.