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.
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.
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]
23 * Copyright 2009 Sun Microsystems, Inc. All rights reserved.
24 * Use is subject to license terms.
27 #ifndef _SYS_AC97_IMPL_H
28 #define _SYS_AC97_IMPL_H
30 typedef void (*ac97_set_t
)(ac97_ctrl_t
*, uint64_t);
36 list_node_t actrl_linkage
; /* For private cntrls list */
37 struct ac97
*actrl_ac97
;
38 int actrl_bits
; /* Port width */
39 audio_ctrl_t
*actrl_ctrl
; /* control framework handle */
40 ac97_set_t actrl_write_fn
; /* control write function */
41 uint64_t actrl_value
; /* current value in port */
42 uint64_t actrl_initval
; /* initial value in port */
43 uint16_t actrl_muteable
; /* if muteable, bits for it */
44 boolean_t actrl_suppress
; /* if true, do not register */
45 audio_ctrl_desc_t actrl_desc
; /* ctrl desc structure */
46 #define actrl_name actrl_desc.acd_name
47 #define actrl_minval actrl_desc.acd_minvalue
48 #define actrl_maxval actrl_desc.acd_maxvalue
49 #define actrl_type actrl_desc.acd_type
50 #define actrl_flags actrl_desc.acd_flags
51 #define actrl_enum actrl_desc.acd_enum
55 * Function Type used on controls that are optional
56 * This will return non-zero if the control should be
57 * installed and configured.
59 typedef int (*cp_probe_t
)(ac97_t
*ac
);
63 * This is used to enumerate and probe all controls that are
64 * supported and configurable on AC97 hardware
66 typedef struct ac97_ctrl_probe
{
67 const char *cp_name
; /* name of control */
68 uint64_t cp_initval
; /* Initial value for control */
69 uint64_t cp_minval
; /* MIN value for control */
70 uint64_t cp_maxval
; /* MAX value for control */
71 uint32_t cp_type
; /* Type of control */
72 uint32_t cp_flags
; /* control type flags */
73 uint16_t cp_muteable
; /* Mute bit mask */
74 ac97_set_t cp_write_fn
; /* control write function */
75 cp_probe_t cp_probe
; /* Probe if control exists */
76 int cp_bits
; /* Bits for volume controls */
77 const char **cp_enum
; /* Enumeration value */
81 * These are the flags for most of our controls
83 #define AC97_RW (AUDIO_CTRL_FLAG_READABLE | AUDIO_CTRL_FLAG_WRITEABLE)
84 #define AC97_FLAGS (AC97_RW | AUDIO_CTRL_FLAG_POLL)
86 void ac_wr(ac97_t
*, uint8_t, uint16_t);
87 uint16_t ac_rd(ac97_t
*, uint8_t);
88 void ac_clr(ac97_t
*, uint8_t, uint16_t);
89 void ac_set(ac97_t
*, uint8_t, uint16_t);
90 void ac_add_control(ac97_t
*, ac97_ctrl_probe_t
*);
91 uint16_t ac_val_scale(int left
, int right
, int bits
);
92 uint16_t ac_mono_scale(int val
, int bits
);
93 audio_dev_t
*ac_get_dev(ac97_t
*);
94 int ac_get_prop(ac97_t
*, char *, int);
96 /* Codec specific initializations */
98 void ad1981a_init(ac97_t
*);
99 void ad1981b_init(ac97_t
*);
101 void alc650_init(ac97_t
*);
102 void alc850_init(ac97_t
*);
104 void cmi9738_init(ac97_t
*);
105 void cmi9739_init(ac97_t
*);
106 void cmi9761_init(ac97_t
*);
108 #endif /* _SYS_AC97_IMPL_H */