xref: /haiku/src/add-ons/kernel/drivers/audio/ac97/auich/auichreg.h (revision 130803f29bfd003730dc8d6cd89da9c166f9343b)
1*130803f2SJérôme Duval /*
2*130803f2SJérôme Duval  * Auich BeOS Driver for Intel Southbridge audio
3*130803f2SJérôme Duval  *
4*130803f2SJérôme Duval  * Copyright (c) 2003, Jerome Duval (jerome.duval@free.fr)
5*130803f2SJérôme Duval 
6*130803f2SJérôme Duval  * Original code : BeOS Driver for Intel ICH AC'97 Link interface
7*130803f2SJérôme Duval  * Copyright (c) 2002, Marcus Overhagen <marcus@overhagen.de>
8*130803f2SJérôme Duval  *
9*130803f2SJérôme Duval  * All rights reserved.
10*130803f2SJérôme Duval  * Redistribution and use in source and binary forms, with or without modification,
11*130803f2SJérôme Duval  * are permitted provided that the following conditions are met:
12*130803f2SJérôme Duval  *
13*130803f2SJérôme Duval  * - Redistributions of source code must retain the above copyright notice,
14*130803f2SJérôme Duval  *   this list of conditions and the following disclaimer.
15*130803f2SJérôme Duval  * - Redistributions in binary form must reproduce the above copyright notice,
16*130803f2SJérôme Duval  *   this list of conditions and the following disclaimer in the documentation
17*130803f2SJérôme Duval  *   and/or other materials provided with the distribution.
18*130803f2SJérôme Duval  *
19*130803f2SJérôme Duval  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
20*130803f2SJérôme Duval  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
21*130803f2SJérôme Duval  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22*130803f2SJérôme Duval  * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
23*130803f2SJérôme Duval  * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
24*130803f2SJérôme Duval  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
25*130803f2SJérôme Duval  * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26*130803f2SJérôme Duval  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
27*130803f2SJérôme Duval  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
28*130803f2SJérôme Duval  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*130803f2SJérôme Duval  *
30*130803f2SJérôme Duval  */
31*130803f2SJérôme Duval 
32*130803f2SJérôme Duval #ifndef _AUICHREG_H_
33*130803f2SJérôme Duval #define _AUICHREG_H_
34*130803f2SJérôme Duval 
35*130803f2SJérôme Duval /* Native Audio Bus Master Control Registers */
36*130803f2SJérôme Duval enum AUICH_GLOBAL_REGISTER
37*130803f2SJérôme Duval {
38*130803f2SJérôme Duval 	AUICH_REG_GLOB_CNT	= 0x2C,
39*130803f2SJérôme Duval 	AUICH_REG_GLOB_STA	= 0x30,
40*130803f2SJérôme Duval 	AUICH_REG_ACC_SEMA	= 0x34,
41*130803f2SJérôme Duval 	AUICH_REG_SDM			= 0x80
42*130803f2SJérôme Duval };
43*130803f2SJérôme Duval 
44*130803f2SJérôme Duval enum AUICH_X_REGISTER_BASE /* base addresses for the following offsets */
45*130803f2SJérôme Duval {
46*130803f2SJérôme Duval 	AUICH_REG_PI_BASE		= 0x00,
47*130803f2SJérôme Duval 	AUICH_REG_PO_BASE		= 0x10,
48*130803f2SJérôme Duval 	AUICH_REG_MC_BASE		= 0x20
49*130803f2SJérôme Duval };
50*130803f2SJérôme Duval 
51*130803f2SJérôme Duval enum AUICH_X_REGISTER_OFFSETS /* add base address to get the PI, PO or MC reg */
52*130803f2SJérôme Duval {
53*130803f2SJérôme Duval 	AUICH_REG_X_BDBAR		= 0x00,
54*130803f2SJérôme Duval 	AUICH_REG_X_CIV		= 0x04,
55*130803f2SJérôme Duval 	AUICH_REG_X_LVI		= 0x05,
56*130803f2SJérôme Duval 	AUICH_REG_X_SR		= 0x06,
57*130803f2SJérôme Duval 	AUICH_REG_X_PICB	= 0x08,
58*130803f2SJérôme Duval 	AUICH_REG_X_PIV		= 0x0A,
59*130803f2SJérôme Duval 	AUICH_REG_X_CR		= 0x0B
60*130803f2SJérôme Duval };
61*130803f2SJérôme Duval 
62*130803f2SJérôme Duval /* AUICH_REG_X_SR (Status Register) Bits */
63*130803f2SJérôme Duval enum REG_X_SR_BITS
64*130803f2SJérôme Duval {
65*130803f2SJérôme Duval 	SR_DCH				= 0x0001,
66*130803f2SJérôme Duval 	SR_CELV				= 0x0002,
67*130803f2SJérôme Duval 	SR_LVBCI			= 0x0004,
68*130803f2SJérôme Duval 	SR_BCIS				= 0x0008,
69*130803f2SJérôme Duval 	SR_FIFOE			= 0x0010,
70*130803f2SJérôme Duval 	SR_MASK				= SR_FIFOE | SR_BCIS | SR_LVBCI | SR_CELV | SR_DCH //| 0x200 | 0x80 | 0x2
71*130803f2SJérôme Duval };
72*130803f2SJérôme Duval 
73*130803f2SJérôme Duval /* AUICH_REG_X_CR (Control Register) Bits */
74*130803f2SJérôme Duval enum REG_X_CR_BITS
75*130803f2SJérôme Duval {
76*130803f2SJérôme Duval 	CR_RPBM				= 0x01,
77*130803f2SJérôme Duval 	CR_RR				= 0x02,
78*130803f2SJérôme Duval 	CR_LVBIE			= 0x04,
79*130803f2SJérôme Duval 	CR_FEIE				= 0x08,
80*130803f2SJérôme Duval 	CR_IOCE				= 0x10
81*130803f2SJérôme Duval };
82*130803f2SJérôme Duval 
83*130803f2SJérôme Duval /* AUICH_REG_GLOB_CNT (Global Control Register) Bits */
84*130803f2SJérôme Duval enum REG_GLOB_CNT_BITS
85*130803f2SJérôme Duval {
86*130803f2SJérôme Duval 	CNT_GIE				= 0x01,
87*130803f2SJérôme Duval 	CNT_COLD			= 0x02,
88*130803f2SJérôme Duval 	CNT_WARM			= 0x04,
89*130803f2SJérôme Duval 	CNT_SHUT			= 0x08,
90*130803f2SJérôme Duval 	CNT_PRIE			= 0x10,
91*130803f2SJérôme Duval 	CNT_SRIE			= 0x20
92*130803f2SJérôme Duval };
93*130803f2SJérôme Duval 
94*130803f2SJérôme Duval /* AUICH_REG_GLOB_STA (Global Status Register) Bits */
95*130803f2SJérôme Duval enum REG_GLOB_STA_BITS
96*130803f2SJérôme Duval {
97*130803f2SJérôme Duval 	STA_GSCI			= 0x00000001, /* GPI Status Change Interrupt */
98*130803f2SJérôme Duval 	STA_MIINT			= 0x00000002, /* Modem In Interrupt */
99*130803f2SJérôme Duval 	STA_MOINT			= 0x00000004, /* Modem Out Interrupt */
100*130803f2SJérôme Duval 	STA_PIINT			= 0x00000020, /* PCM In Interrupt */
101*130803f2SJérôme Duval 	STA_POINT			= 0x00000040, /* PCM Out Interrupt */
102*130803f2SJérôme Duval 	STA_MINT			= 0x00000080, /* Mic In Interrupt */
103*130803f2SJérôme Duval 	STA_S0CR			= 0x00000100, /* AC_SDIN0 Codec Ready */
104*130803f2SJérôme Duval 	STA_S1CR			= 0x00000200, /* AC_SDIN1 Codec Ready */
105*130803f2SJérôme Duval 	STA_S0RI			= 0x00000400, /* AC_SDIN0 Resume Interrupt */
106*130803f2SJérôme Duval 	STA_S1RI			= 0x00000800, /* AC_SDIN1 Resume Interrupt */
107*130803f2SJérôme Duval 	STA_RCS				= 0x00008000, /* Read Completition Status */
108*130803f2SJérôme Duval 	STA_AD3				= 0x00010000,
109*130803f2SJérôme Duval 	STA_MD3				= 0x00020000,
110*130803f2SJérôme Duval 	STA_SAMPLE_CAP		= 0x00c00000, /* sampling precision capability */
111*130803f2SJérôme Duval 	STA_POM20			= 0x00400000, /* PCM out precision 20bit */
112*130803f2SJérôme Duval 	STA_CHAN_CAP		= 0x00300000, /* multi-channel capability */
113*130803f2SJérôme Duval 	STA_PCM4			= 0x00100000, /* 4ch output */
114*130803f2SJérôme Duval 	STA_PCM6			= 0x00200000, /* 6ch output */
115*130803f2SJérôme Duval 	STA_M2INT			= 0x01000000,	/* Microphone 2 In Interrupt */
116*130803f2SJérôme Duval 	STA_P2INT			= 0x02000000,	/* PCM In 2 Interrupt */
117*130803f2SJérôme Duval 	STA_SPINT			= 0x04000000,	/* S/PDIF Interrupt */
118*130803f2SJérôme Duval 	STA_BCS				= 0x08000000,	/* Bit Clock Stopped */
119*130803f2SJérôme Duval 	STA_S2CR			= 0x10000000,	/* AC_SDIN2 Codec Ready */
120*130803f2SJérôme Duval 	STA_S2RI			= 0x20000000,	/* AC_SDIN2 Resume Interrupt */
121*130803f2SJérôme Duval 	STA_INTMASK			= (STA_MIINT | STA_MOINT | STA_PIINT | STA_POINT | STA_MINT | STA_S0RI | STA_S1RI | STA_M2INT | STA_P2INT | STA_SPINT | STA_S2RI)
122*130803f2SJérôme Duval };
123*130803f2SJérôme Duval 
124*130803f2SJérôme Duval #define ICH4_MMBAR_SIZE	512
125*130803f2SJérôme Duval #define ICH4_MBBAR_SIZE	256
126*130803f2SJérôme Duval 
127*130803f2SJérôme Duval #endif /* _AUICHREG_H_ */
128