1/*
2 * CDDL HEADER START
3 *
4 * The contents of this file are subject to the terms of the
5 * Common Development and Distribution License (the "License").
6 * You may not use this file except in compliance with the License.
7 *
8 * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9 * or http://www.opensolaris.org/os/licensing.
10 * See the License for the specific language governing permissions
11 * and limitations under the License.
12 *
13 * When distributing Covered Code, include this CDDL HEADER in each
14 * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15 * If applicable, add the following below this CDDL HEADER, with the
16 * fields enclosed by brackets "[]" replaced with your own identifying
17 * information: Portions Copyright [yyyy] [name of copyright owner]
18 *
19 * CDDL HEADER END
20 */
21
22/*
23 * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
24 * Use is subject to license terms.
25 */
26
27/*
28 * Purpose: Definitions for the CS 4281 AC97 driver
29 */
30/*
31 * This file is part of Open Sound System
32 *
33 * Copyright (C) 4Front Technologies 1996-2009.
34 *
35 * This software is released under CDDL 1.0 source license.
36 * See the COPYING file included in the main directory of this source
37 * distribution for the license terms and conditions.
38 */
39#ifndef	AUDIOP16X_H
40#define	AUDIOP16X_H
41
42#define	P16X_NAME		"audiop16x"
43
44#define	P16X_NUM_PORT	2
45
46#define	CREATIVE_VENDOR_ID	0x1102
47#define	SB_P16X_ID		0x0006
48
49typedef struct _p16x_dev_t p16x_dev_t;
50typedef struct _p16x_port_t p16x_port_t;
51
52struct _p16x_port_t
53{
54	p16x_dev_t 		*dev;
55	audio_engine_t 		*engine;
56
57	caddr_t			base;
58
59	int			port_num;
60#define	P16X_PLAY		0
61#define	P16X_REC		1
62	ddi_dma_handle_t	buf_dmah;	/* dma for buffers */
63	ddi_acc_handle_t	buf_acch;
64	uint32_t		buf_paddr;
65	caddr_t			buf_kaddr;
66	size_t			buf_size;
67	uint32_t		buf_frames;
68	int			syncdir;
69	int			nchan;
70	uint64_t		count;
71	uint32_t		offset;
72};
73
74struct _p16x_dev_t
75{
76	dev_info_t		*dip;
77	audio_dev_t		*adev;
78	ac97_t			*ac97;
79	boolean_t		suspended;
80	ddi_acc_handle_t	pcih;
81	ddi_acc_handle_t	regsh;
82	caddr_t			base;
83	kmutex_t		mutex;	/* For low level routines */
84
85	p16x_port_t 		*port[P16X_NUM_PORT];
86};
87
88#define	INL(dev, reg)	\
89	ddi_get32(dev->regsh, (void *)((char *)dev->base+(reg)))
90#define	INW(dev, reg)	\
91	ddi_get16(dev->regsh, (void *)((char *)dev->base+(reg)))
92#define	INB(dev, reg)	\
93	ddi_get8(dev->regsh, (void *)((char *)dev->base+(reg)))
94
95#define	OUTL(dev, val, reg)	\
96	ddi_put32(dev->regsh, (void *)((char *)dev->base+(reg)), (val))
97#define	OUTW(dev, val, reg)	\
98	ddi_put16(dev->regsh, (void *)((char *)dev->base+(reg)), (val))
99#define	OUTB(dev, val, reg)	\
100	ddi_put8(dev->regsh, (void *)((char *)dev->base+(reg)), (val))
101
102/*
103 * SB P16X Registers
104 */
105
106#define	PTR 	0x00
107#define	DR	0x04
108#define	IP	0x08
109#define	IE	0x0C
110#define	HC	0x14
111#define	GPIO	0x18
112#define	AC97D	0x1C
113#define	AC97A	0x1E
114
115/*
116 * Indirect registers
117 */
118
119#define	PTBA	0x000
120#define	PTBS	0x001
121#define	PTCA	0x002
122#define	PFBA	0x004
123#define	PFBS	0x005
124#define	CPFA	0x006
125#define	PFEA	0x007
126#define	CPCAV	0x008
127#define	RFBA	0x010
128#define	RFBS	0x011
129#define	CRFA	0x012
130#define	CRCAV	0x013
131#define	CDL	0x020
132#define	CDR	0x030
133#define	SA	0x040
134#define	EA_aux	0x041
135#define	SCS0	0x042
136#define	SCS1	0x043
137#define	SCS2	0x044
138#define	SPC	0x045
139#define	WMARK	0x046
140#define	MUDAT	0x047
141#define	MUCMD	0x048
142#define	RCD	0x050
143
144/*
145 * Interrupt bits
146 */
147
148#define	INTR_RFF	(1<<19)
149#define	INTR_RFH	(1<<16)
150#define	INTR_PFF	(3<<11)
151#define	INTR_PFH	(3<<8)
152#define	INTR_EAI	(1<<29)
153#define	INTR_PCI	1
154#define	INTR_UART_RX	2
155#define	INTR_UART_TX	4
156#define	INTR_AC97	0x10
157#define	INTR_GPIO	0x40
158#define	INTR_PLAY	(INTR_PFF | INTR_PFH)
159#define	INTR_REC	(INTR_RFF | INTR_RFH)
160#define	INTR_ALL	(INTR_PLAY | INTR_REC | INTR_PCI)
161
162#endif /* AUDIOP16X_H */
163