summaryrefslogtreecommitdiff
path: root/sys/dev/pci/gcscaudioreg.h
blob: 87c1c52cf3ad8db4e2bf1fcff5c30c9251022f12 (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
/*	$NetBSD: gcscaudioreg.h,v 1.1 2008/12/28 15:16:25 jmcneill Exp $	*/

/*-
 * Copyright (c) 2008 SHIMIZU Ryo <ryo@nerv.org>
 * 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.
 * 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.
 *
 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
 * ``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 FOUNDATION OR CONTRIBUTORS
 * 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.
 */

#ifndef _I386_PCI_GCSCAUDIOREG_H_
#define _I386_PCI_GCSCAUDIOREG_H_

/*
 * Reference:
 *  - AMD Geode CS5536 Companion Device Data Book
 *    http://www.amd.com/files/connectivitysolutions/geode/geode_lx/33238G_cs5536_db.pdf
 */

#define ACC_GLD_MSR_CAP			0x51500000	/* GeodeLinkDevice Capabilities */

/*
 * AC97 Audio Codec Controller (ACC) Registers
 */
#define ACC_GPIO_STATUS			0x00		/* Codec GPIO Status Register */
# define ACC_GPIO_STATUS_GPIO_EN	0x80000000	/* GPIO Enable */
# define ACC_GPIO_STATUS_INT_EN		0x40000000	/* Codec GPIO Interrupt Enable */
# define ACC_GPIO_STATUS_WU_INT_EN	0x20000000	/* Codec GPIO Wakeup Interrupt Enable */
# define ACC_GPIO_STATUS_INT_FLAG	0x00200000	/* Codec GPIO Interrupt Flag (Read to Clear) */
# define ACC_GPIO_STATUS_WU_INT_FLAG	0x00100000	/* Codec GPIO Wakeup Interrupt Flag (Read to Clear) */
# define ACC_GPIO_STATUS_PIN_STS_MASK	0x000fffff	/* Codec GPIO Pin Status (Read Only) */

#define ACC_GPIO_CNTL			0x04		/* Codec GPIO Control Register */
# define ACC_GPIO_CNTL_PIN_DATA_MASK	0x000fffff	/* Codec GPIO Pin Data */

#define ACC_CODEC_REG2ADDR(reg)	(((reg) & 0x7f) << 24)
#define ACC_CODEC_ADDR2REG(adr)	(((adr) >> 24) & 0x7f)

#define ACC_CODEC_STATUS		0x08		/* Codec Status Register */
# define ACC_CODEC_STATUS_STS_ADD_MASK	0xff000000	/* Codec Status Address (Read Only) */
# define ACC_CODEC_STATUS_PRM_RDY_STS	0x00800000	/* Primary Codec Ready (Read Only) */
# define ACC_CODEC_STATUS_SEC_RDY_STS	0x00400000	/* Secondary Codec Ready (Read Only) */
# define ACC_CODEC_STATUS_SDATAIN2_EN	0x00200000	/* Enable Second Serial Data Input (AC_S_IN2) */
# define ACC_CODEC_STATUS_BM5_SEL	0x00100000	/* Audio Bus Master 5 AC97 Slot Select */
# define ACC_CODEC_STATUS_BM4_SEL	0x00080000	/* Audio Bus Master 4 AC97 Slot Select */
# define ACC_CODEC_STATUS_STS_NEW	0x00020000	/* Codec Status New (Read to Clear) */
# define ACC_CODEC_STATUS_STS_DATA_MASK	0x0000ffff	/* Codec Status Data (Read Only) */

#define ACC_CODEC_CNTL			0x0c		/* Codec Control Register */
# define ACC_CODEC_CNTL_RW_CMD		0x80000000	/* Codec Read/Write Command */
# define ACC_CODEC_CNTL_READ_CMD	0x80000000	/* Codec Read Command */
# define ACC_CODEC_CNTL_WRITE_CMD	0x00000000	/* Codec Write Command */
# define ACC_CODEC_CNTL_ADD_MASK	0x7f000000	/* CMD_ADD Codec Command Address */
# define ACC_CODEC_CNTL_COMM_SEL_MASK	0x00c00000	/* COMM_SEL Audio Codec Communication */
# define ACC_CODEC_CNTL_PD_PRIM		0x00200000	/* Power-down Semaphore for Primary Codec */
# define ACC_CODEC_CNTL_PD_SEC		0x00100000	/* Power-down Semaphore for Secondary Codec */
# define ACC_CODEC_CNTL_LNK_SHTDWN	0x00040000	/* AC Link Shutdown */
# define ACC_CODEC_CNTL_LNK_WRM_RST	0x00020000	/* AC Link Warm Reset */
# define ACC_CODEC_CNTL_CMD_NEW		0x00010000	/* Codec Command New */
# define ACC_CODEC_CNTL_CMD_DATA_MASK	0x0000ffff	/* Codec Command Data */

#define ACC_IRQ_STATUS			0x12		/* Second Level Audio IRQ Status Register */
# define ACC_IRQ_STATUS_BM7_IRQ_STS	0x0200		/* Audio Bus Master 7 IRQ Status */
# define ACC_IRQ_STATUS_BM6_IRQ_STS	0x0100		/* Audio Bus Master 6 IRQ Status */
# define ACC_IRQ_STATUS_BM5_IRQ_STS	0x0080		/* Audio Bus Master 5 IRQ Status */
# define ACC_IRQ_STATUS_BM4_IRQ_STS	0x0040		/* Audio Bus Master 4 IRQ Status */
# define ACC_IRQ_STATUS_BM3_IRQ_STS	0x0020		/* Audio Bus Master 3 IRQ Status */
# define ACC_IRQ_STATUS_BM2_IRQ_STS	0x0010		/* Audio Bus Master 2 IRQ Status */
# define ACC_IRQ_STATUS_BM1_IRQ_STS	0x0008		/* Audio Bus Master 1 IRQ Status */
# define ACC_IRQ_STATUS_BM0_IRQ_STS	0x0004		/* Audio Bus Master 0 IRQ Status */
# define ACC_IRQ_STATUS_WU_IRQ_STS	0x0002		/* Codec GPIO Wakeup IRQ Status */
# define ACC_IRQ_STATUS_IRQ_STS		0x0001		/* Codec GPIO IRQ Status */

#define ACC_ENGINE_CNTL			0x14		/* Bus Master Engine Control Register */
# define ACC_ENGINE_CNTL_SSND_MODE	0x00000001	/* Surround Sound (5.1) Synchronization Mode */

#define ACC_BM0_CMD			0x20		/* Bus Master 0 Command */
#define ACC_BM0_STATUS			0x21		/* Bus Master 0 IRQ Status */
#define ACC_BM0_PRD			0x24		/* Bus Master 0 PRD Table Address */
#define ACC_BM1_CMD			0x28		/* Bus Master 1 Command */
#define ACC_BM1_STATUS			0x29		/* Bus Master 1 IRQ Status */
#define ACC_BM1_PRD			0x2c		/* Bus Master 1 PRD Table Address */
#define ACC_BM2_CMD			0x30		/* Bus Master 2 Command */
#define ACC_BM2_STATUS			0x31		/* Bus Master 2 IRQ Status */
#define ACC_BM2_PRD			0x34		/* Bus Master 2 PRD Table Address */
#define ACC_BM3_CMD			0x38		/* Bus Master 3 Command */
#define ACC_BM3_STATUS			0x39		/* Bus Master 3 IRQ Status */
#define ACC_BM3_PRD			0x3c		/* Bus Master 3 PRD Table Address */
#define ACC_BM4_CMD			0x40		/* Bus Master 4 Command */
#define ACC_BM4_STATUS			0x41		/* Bus Master 4 IRQ Status */
#define ACC_BM4_PRD			0x44		/* Bus Master 4 PRD Table Address */
#define ACC_BM5_CMD			0x48		/* Bus Master 5 Command */
#define ACC_BM5_STATUS			0x49		/* Bus Master 5 IRQ Status */
#define ACC_BM5_PRD			0x4c		/* Bus Master 5 PRD Table Address */
#define ACC_BM6_CMD			0x50		/* Bus Master 6 Command */
#define ACC_BM6_STATUS			0x51		/* Bus Master 6 IRQ Status */
#define ACC_BM6_PRD			0x54		/* Bus Master 6 PRD Table Address */
#define ACC_BM7_CMD			0x58		/* Bus Master 7 Command */
#define ACC_BM7_STATUS			0x59		/* Bus Master 7 IRQ Status */
#define ACC_BM7_PRD			0x5c		/* Bus Master 7 PRD Table Address */
# define ACC_BMx_CMD_RW_MASK		0x08
# define ACC_BMx_CMD_READ		0x08		/* Codec to Memory */
# define ACC_BMx_CMD_WRITE		0x00		/* Memory to Codec */
# define ACC_BMx_CMD_BYTE_ORD_MASK	0x04
# define ACC_BMx_CMD_BYTE_ORD_EL	0x00		/* Little Endian */
# define ACC_BMx_CMD_BYTE_ORD_EB	0x04		/* Big Endian */
# define ACC_BMx_CMD_BM_CTL_MASK	0x03
# define ACC_BMx_CMD_BM_CTL_DISABLE	0x00		/* Disable bus master */
# define ACC_BMx_CMD_BM_CTL_ENABLE	0x01		/* Enable bus master */
# define ACC_BMx_CMD_BM_CTL_PAUSE	0x03		/* Pause bus master */
# define ACC_BMx_STATUS_BM_EOP_ERR	0x02		/* Bus Master Error */
# define ACC_BMx_STATUS_EOP		0x01		/* End of Page */

/* PRD - Physical Region Descriptor Table (addressed by ACC_BMx_PRD) */
struct acc_prd {
	uint32_t address;
	uint32_t ctrlsize;
#define ACC_BMx_PRD_CTRL_EOT		0x80000000
#define ACC_BMx_PRD_CTRL_EOP		0x40000000
#define ACC_BMx_PRD_CTRL_JMP		0x20000000
#define ACC_BMx_PRD_SIZE_MASK		0x0000ffff
};

#define ACC_BM0_PNTR			0x60		/* Bus Master 0 DMA Pointer */
#define ACC_BM1_PNTR			0x64		/* Bus Master 1 DMA Pointer */
#define ACC_BM2_PNTR			0x68		/* Bus Master 2 DMA Pointer */
#define ACC_BM3_PNTR			0x6C		/* Bus Master 3 DMA Pointer */
#define ACC_BM4_PNTR			0x70		/* Bus Master 4 DMA Pointer */
#define ACC_BM5_PNTR			0x74		/* Bus Master 5 DMA Pointer */
#define ACC_BM6_PNTR			0x78		/* Bus Master 6 DMA Pointer */
#define ACC_BM7_PNTR			0x7C		/* Bus Master 7 DMA Pointer */

#endif /* _I386_PCI_GCSCAUDIOREG_H_ */