summaryrefslogtreecommitdiffstats
path: root/sys/dev/sound/pci/au88x0.h
blob: 4b442ee4e2f3a80d391190cbb4c66c22a9e4ffcb (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
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
/*-
 * Copyright (c) 2003 Dag-Erling Coïdan Smørgrav
 * All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions
 * are met:
 * 1. Redistributions of source code must retain the above copyright
 *    notice, this list of conditions and the following disclaimer
 *    in this position and unchanged.
 * 2. Redistributions in binary form must reproduce the above copyright
 *    notice, this list of conditions and the following disclaimer in the
 *    documentation and/or other materials provided with the distribution.
 * 3. The name of the author may not be used to endorse or promote products
 *    derived from this software without specific prior written permission.
 *
 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * $FreeBSD$
 */

#ifndef _AU88X0_H_INCLUDED
#define _AU88X0_H_INCLUDED

/*
 * Channel information
 */
struct au88x0_chan_info {
	struct au88x0_info	*auci_aui;
	struct pcm_channel	*auci_pcmchan;
	struct snd_dbuf		*auci_buf;
	int			 auci_dir;
};

/*
 * Device information
 */
struct au88x0_info {
	/* the device we're associated with */
	device_t		 aui_dev;
	uint32_t		 aui_model;

	/* parameters */
	bus_size_t		 aui_bufsize;

	/* bus_space tag and handle */
	bus_space_tag_t		 aui_spct;
	bus_space_handle_t	 aui_spch;

	/* register space */
	int			 aui_regtype;
	int			 aui_regid;
	struct resource		*aui_reg;

	/* irq */
	int			 aui_irqtype;
	int			 aui_irqid;
	struct resource		*aui_irq;
	void			*aui_irqh;

	/* dma */
	bus_dma_tag_t		 aui_dmat;

	/* codec */
	struct ac97_info	*aui_ac97i;

	/* channels */
	struct au88x0_chan_info	 aui_chan[2];
};

/*
 * PCI IDs of supported cards
 */
#define AUREAL_VORTEX_1		0x000112eb	/* 8820 (not supported) */
#define AUREAL_VORTEX_2		0x000212eb	/* 8830 */
#define AUREAL_VORTEX_ADVANTAGE	0x000312eb	/* 8810 */

/*
 * Common parameters
 */
#define AU88X0_SETTLE_DELAY	1000
#define AU88X0_RETRY_COUNT	10
#define AU88X0_BUFSIZE_MIN	0x1000
#define AU88X0_BUFSIZE_DFLT	0x4000
#define AU88X0_BUFSIZE_MAX	0x4000

/*
 * General control registers
 */
#define AU88X0_CONTROL		0x2a00c
#define		AU88X0_CTL_MIDI_ENABLE	0x0001
#define		AU88X0_CTL_GAME_ENABLE	0x0008
#define		AU88X0_CTL_IRQ_ENABLE	0x4000

#define AU88X0_IRQ_SOURCE	0x2a000
#define AU88X0_IRQ_MASK		0x2a004
#define		AU88X0_IRQ_FATAL_ERR		0x0001
#define		AU88X0_IRQ_PARITY_ERR		0x0002
#define		AU88X0_IRQ_REG_ERR		0x0004
#define		AU88X0_IRQ_FIFO_ERR		0x0008
#define		AU88X0_IRQ_DMA_ERR		0x0010
#define		AU88X0_IRQ_PCMOUT		0x0020
#define		AU88X0_IRQ_TIMER		0x1000
#define		AU88X0_IRQ_MIDI			0x2000
#define		AU88X0_IRQ_MODEM		0x4000
#define AU88X0_IRQ_PENDING	0x2a008
#define		AU88X0_IRQ_PENDING_BIT		0x0001
#define AU88X0_IRQ_STATUS	0x2919c
#define AU88X0_DMA_CONTROL	0x27ae8

/*
 * Codec control registers
 *
 * AU88X0_CODEC_CHANNEL	array of 32 32-bit words
 *
 * AU88X0_CODEC_CONTROL	control register
 *
 *    bit     16	ready
 *
 * AU88X0_CODEC_IO	I/O register
 *
 *    bits  0-15	contents of codec register
 *    bits 16-22	address of codec register
 *    bit     23	0 for read, 1 for write
 */
#define AU88X0_CODEC_CHANNEL	0x29080
#define AU88X0_CODEC_CONTROL	0x29184
#define		AU88X0_CDCTL_WROK	0x00000100
#define AU88X0_CODEC_IO		0x29188
#define		AU88X0_CDIO_DATA_SHIFT	0
#define		AU88X0_CDIO_DATA_MASK	0x0000ffff
#define		AU88X0_CDIO_ADDR_SHIFT	16
#define		AU88X0_CDIO_ADDR_MASK	0x007f0000
#define		AU88X0_CDIO_RDBIT	0x00000000
#define		AU88X0_CDIO_WRBIT	0x00800000
#define AU88X0_CDIO_READ(a) (AU88X0_CDIO_RDBIT | \
	 (((a) << AU88X0_CDIO_ADDR_SHIFT) & AU88X0_CDIO_ADDR_MASK))
#define AU88X0_CDIO_WRITE(a, d) (AU88X0_CDIO_WRBIT | \
	 (((a) << AU88X0_CDIO_ADDR_SHIFT) & AU88X0_CDIO_ADDR_MASK) | \
	 (((d) << AU88X0_CDIO_DATA_SHIFT) & AU88X0_CDIO_DATA_MASK))
#define AU88X0_CODEC_ENABLE	0x29190

/*
 * FIFO and DMA contorl registers
 *
 * There are two sets of these, one for PCM audio (ADB) and one for
 * wavetables (WT).
 */
#define AU88X0_ADB_FIFOS	32
#define AU88X0_ADB_FIFO_CTL	0x16100
#define AU88X0_ADB_FIFO_BASE	0x14000
#define AU88X0_ADB_FIFO_SIZE	0x40
#define AU8810_ADB_DMA_CTL	0x27180
#define AU8820_ADB_DMA_CTL	0x10580
#define AU8830_ADB_DMA_CTL	0x27a00

#define AU88X0_WT_FIFOS		32
#define AU88X0_WT_FIFO_CTL	0x16000
#define AU88X0_WT_FIFO_BASE	0x10000
#define AU88X0_WT_FIFO_SIZE	0x40
#define AU8810_WT_DMA_CTL	0x27fd8
#define AU8820_WT_DMA_CTL	0x10500
#define AU8830_WT_DMA_CTL	0x27900

#endif
OpenPOWER on IntegriCloud