17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5d29f5a71Szhigang lu - Sun Microsystems - Beijing China  * Common Development and Distribution License (the "License").
6d29f5a71Szhigang lu - Sun Microsystems - Beijing China  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
217c478bd9Sstevel@tonic-gate /*
22ea1b934fSLin Guo - Sun Microsystems  * Copyright 2010 Sun Microsystems, Inc.  All rights reserved.
237c478bd9Sstevel@tonic-gate  * Use is subject to license terms.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate #ifndef _SYS_USB_AC_H
277c478bd9Sstevel@tonic-gate #define	_SYS_USB_AC_H
287c478bd9Sstevel@tonic-gate 
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate 
317c478bd9Sstevel@tonic-gate #ifdef __cplusplus
327c478bd9Sstevel@tonic-gate extern "C" {
337c478bd9Sstevel@tonic-gate #endif
347c478bd9Sstevel@tonic-gate 
357c478bd9Sstevel@tonic-gate #include <sys/sunldi.h>
36*5c5f1371SRichard Lowe #include <sys/sysmacros.h>
377c478bd9Sstevel@tonic-gate #include <sys/usb/usba/usbai_private.h>
387c478bd9Sstevel@tonic-gate 
39e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
4088447a05SGarrett D'Amore int usb_ac_open(dev_info_t *);
4188447a05SGarrett D'Amore void usb_ac_close(dev_info_t *);
427c478bd9Sstevel@tonic-gate 
437c478bd9Sstevel@tonic-gate 
447c478bd9Sstevel@tonic-gate /* structure for each unit described by descriptors */
457c478bd9Sstevel@tonic-gate typedef struct usb_ac_unit_list {
467c478bd9Sstevel@tonic-gate 	uint_t		acu_type;
477c478bd9Sstevel@tonic-gate 	void		*acu_descriptor;
487c478bd9Sstevel@tonic-gate 	size_t		acu_descr_length;
497c478bd9Sstevel@tonic-gate } usb_ac_unit_list_t;
507c478bd9Sstevel@tonic-gate 
517c478bd9Sstevel@tonic-gate #define	USB_AC_ID_NONE			0
527c478bd9Sstevel@tonic-gate 
537c478bd9Sstevel@tonic-gate #define	USB_AC_FIND_ONE			0
547c478bd9Sstevel@tonic-gate #define	USB_AC_FIND_ALL			1
557c478bd9Sstevel@tonic-gate #define	USB_AC_MAX_DEPTH		8
567c478bd9Sstevel@tonic-gate 
577c478bd9Sstevel@tonic-gate /*
587c478bd9Sstevel@tonic-gate  * plumbing data; info per plumbed module
597c478bd9Sstevel@tonic-gate  */
607c478bd9Sstevel@tonic-gate typedef struct usb_ac_plumbed {
6188447a05SGarrett D'Amore 	struct usb_ac_state *acp_uacp;	/* usb_ac state pointer */
627c478bd9Sstevel@tonic-gate 	dev_info_t	*acp_dip;	/* devinfo pointer */
637c478bd9Sstevel@tonic-gate 	uint_t		acp_ifno;	/* interface number */
647c478bd9Sstevel@tonic-gate 	int		acp_driver;	/* Plumbed driver, see value below */
6588447a05SGarrett D'Amore 
6688447a05SGarrett D'Amore 	ldi_handle_t	acp_lh;		/* ldi handle of plumbed driver */
6788447a05SGarrett D'Amore 	dev_t		acp_devt;	/* devt of plumbed driver */
6888447a05SGarrett D'Amore 	ddi_taskq_t	*acp_tqp;	/* taskq for I/O to plumbed driver */
6988447a05SGarrett D'Amore 	int		acp_flags;
7088447a05SGarrett D'Amore #define	ACP_ENABLED	1
7188447a05SGarrett D'Amore 
727c478bd9Sstevel@tonic-gate 	void		*acp_data;	/* ptr to streams or hid data */
737c478bd9Sstevel@tonic-gate } usb_ac_plumbed_t;
747c478bd9Sstevel@tonic-gate 
757c478bd9Sstevel@tonic-gate 
767c478bd9Sstevel@tonic-gate /*
777c478bd9Sstevel@tonic-gate  * request structure to usb_as: info per MCTL request;
787c478bd9Sstevel@tonic-gate  * only one active at a time.
797c478bd9Sstevel@tonic-gate  */
807c478bd9Sstevel@tonic-gate typedef struct usb_ac_to_as_req {
817c478bd9Sstevel@tonic-gate 	usb_audio_formats_t acr_curr_format; /* format data from mixer */
827c478bd9Sstevel@tonic-gate } usb_ac_to_as_req_t;
837c478bd9Sstevel@tonic-gate 
847c478bd9Sstevel@tonic-gate 
857c478bd9Sstevel@tonic-gate /* registration and plumbing info per streaming interface */
867c478bd9Sstevel@tonic-gate typedef struct usb_ac_streams_info {
877c478bd9Sstevel@tonic-gate 					/* ptr to entry in plumbed list */
887c478bd9Sstevel@tonic-gate 	usb_ac_plumbed_t *acs_plumbed;
897c478bd9Sstevel@tonic-gate 					/* valid registration data rcvd */
907c478bd9Sstevel@tonic-gate 	uint_t		acs_rcvd_reg_data;
917c478bd9Sstevel@tonic-gate 					/* pointer to registration data */
92e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	usb_as_registration_t acs_streams_reg;
937c478bd9Sstevel@tonic-gate 
947c478bd9Sstevel@tonic-gate 
957c478bd9Sstevel@tonic-gate 	/* Multiple command management */
967c478bd9Sstevel@tonic-gate 	int		acs_setup_teardown_count;
977c478bd9Sstevel@tonic-gate 
98e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint8_t 	acs_default_gain;
997c478bd9Sstevel@tonic-gate } usb_ac_streams_info_t;
1007c478bd9Sstevel@tonic-gate 
1017c478bd9Sstevel@tonic-gate 
1027c478bd9Sstevel@tonic-gate /* power state */
1037c478bd9Sstevel@tonic-gate typedef struct usb_ac_power {
1047c478bd9Sstevel@tonic-gate 	void		*acpm_state;	/* points back to usb_ac_state */
1057c478bd9Sstevel@tonic-gate 	int		acpm_pm_busy;	/* device busy accounting */
1067c478bd9Sstevel@tonic-gate 	uint8_t		acpm_wakeup_enabled;
1077c478bd9Sstevel@tonic-gate 
1087c478bd9Sstevel@tonic-gate 	/* this is the bit mask of the power states that device has */
1097c478bd9Sstevel@tonic-gate 	uint8_t		acpm_pwr_states;
1107c478bd9Sstevel@tonic-gate 
1117c478bd9Sstevel@tonic-gate 	/* wakeup and power transistion capabilites of an interface */
1127c478bd9Sstevel@tonic-gate 	uint8_t		acpm_capabilities;
1137c478bd9Sstevel@tonic-gate 
1147c478bd9Sstevel@tonic-gate 	/* current power level the device is in */
1157c478bd9Sstevel@tonic-gate 	uint8_t		acpm_current_power;
1167c478bd9Sstevel@tonic-gate } usb_ac_power_t;
1177c478bd9Sstevel@tonic-gate 
1187c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_power_t::acpm_state))
1197c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_power_t::acpm_wakeup_enabled))
1207c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_power_t::acpm_pwr_states))
1217c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_power_t::acpm_capabilities))
1227c478bd9Sstevel@tonic-gate 
123e272e4c8SBinzi Cao - Sun Microsystems - Beijing China typedef struct usb_audio_format {
124e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	int		sr;	/* sample rate */
125e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint_t		ch;	/* channels */
126e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint_t		prec;	/* precision */
127e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint_t		enc;	/* encoding */
128e272e4c8SBinzi Cao - Sun Microsystems - Beijing China } usb_audio_format_t;
129e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
130e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
131e272e4c8SBinzi Cao - Sun Microsystems - Beijing China typedef struct usb_audio_eng {
132e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	void  *statep;
133e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	usb_ac_streams_info_t *streams;
134e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	audio_engine_t	*af_engp;
135e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
136e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	int		af_eflags;	/* ENGINE_* flags */
137e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	usb_audio_format_t	fmt;
138e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint64_t  	af_defgain;
139e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
140e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	intrate;	/* interrupt rate */
141e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	sampsz;		/* sample size */
142e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	framesz;	/* frame size */
143e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	fragsz;		/* fragment size */
144e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	nfrags;		/* number of fragments in buffer */
145e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	fragfr;		/* number of frames per fragment */
146e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	frsmshift;	/* right shift: frames in sample cnt */
147e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	smszshift;	/* left shift: sample cnt * sampsz */
148e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
149e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
150e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	caddr_t		bufp;		/* I/O buf; framework to/from drv */
151e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	unsigned	bufsz;		/* buffer size */
152e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	caddr_t		bufpos;		/* buffer position */
153e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	caddr_t		bufendp;	/* end of buffer */
154e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
155e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
156e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint64_t	frames;
157e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint64_t	io_count;	/* i/o requests from the driver */
158e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint64_t	bufio_count;	/* i/o requests to the framework */
159e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
160e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	boolean_t	started;
161ea1b934fSLin Guo - Sun Microsystems 	boolean_t	busy;
162ea1b934fSLin Guo - Sun Microsystems 
163ea1b934fSLin Guo - Sun Microsystems 	kcondvar_t	usb_audio_cv;
164e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
165e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	kmutex_t	lock;
166e272e4c8SBinzi Cao - Sun Microsystems - Beijing China } usb_audio_eng_t;
167e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
168e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
1697c478bd9Sstevel@tonic-gate /* limits */
1707c478bd9Sstevel@tonic-gate #define	USB_AC_MAX_PLUMBED		3	/* play, record, hid */
1717c478bd9Sstevel@tonic-gate #define	USB_AC_MAX_AS_PLUMBED		2	/* play, record */
172e272e4c8SBinzi Cao - Sun Microsystems - Beijing China typedef struct usb_ac_state  usb_ac_state_t;
173e272e4c8SBinzi Cao - Sun Microsystems - Beijing China typedef struct usb_audio_ctrl {
174e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	audio_ctrl_t		*af_ctrlp;	/* framework handle */
175e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	usb_ac_state_t		*statep;
176e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
177e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	kmutex_t	ctrl_mutex;
178e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint64_t		cval;		/* current control value */
179e272e4c8SBinzi Cao - Sun Microsystems - Beijing China } usb_audio_ctrl_t;
180e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
181e272e4c8SBinzi Cao - Sun Microsystems - Beijing China enum {
182e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	CTL_VOLUME_MONO = 0,
183e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	CTL_VOLUME_STERO,
184e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	CTL_REC_MONO,
185e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	CTL_REC_STERO,
186e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	CTL_REC_SRC,
187e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	CTL_MONITOR_GAIN,
188e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	CTL_MIC_BOOST,
189e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	CTL_NUM
190e272e4c8SBinzi Cao - Sun Microsystems - Beijing China };
191e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
192e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	USB_AC_ENG_MAX   2
1937c478bd9Sstevel@tonic-gate 
1947c478bd9Sstevel@tonic-gate /* usb_ac soft state */
195e272e4c8SBinzi Cao - Sun Microsystems - Beijing China struct usb_ac_state {
196e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
1977c478bd9Sstevel@tonic-gate 	dev_info_t		*usb_ac_dip;
1987c478bd9Sstevel@tonic-gate 	uint_t			usb_ac_instance;
1997c478bd9Sstevel@tonic-gate 	usb_log_handle_t	usb_ac_log_handle;
2007c478bd9Sstevel@tonic-gate 
2017c478bd9Sstevel@tonic-gate 	uint_t			usb_ac_dev_state;
2027c478bd9Sstevel@tonic-gate 	uint_t			usb_ac_ifno;
2037c478bd9Sstevel@tonic-gate 	kmutex_t		usb_ac_mutex;
2047c478bd9Sstevel@tonic-gate 
2057c478bd9Sstevel@tonic-gate 	usb_client_dev_data_t	*usb_ac_dev_data; /* registration data */
206e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	audio_dev_t		*usb_ac_audio_dev;
207e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
208e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
209e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
210e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
211e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	usb_audio_eng_t  engines[USB_AC_ENG_MAX];
212e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
213e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
2147c478bd9Sstevel@tonic-gate 
215e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	int		flags;
216e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	usb_audio_ctrl_t	*controls[CTL_NUM];
2177c478bd9Sstevel@tonic-gate 
2187c478bd9Sstevel@tonic-gate 	/* descriptors */
2197c478bd9Sstevel@tonic-gate 	usb_if_descr_t		usb_ac_if_descr;
2207c478bd9Sstevel@tonic-gate 
2217c478bd9Sstevel@tonic-gate 	/* unit number array, indexed by unit ID */
2227c478bd9Sstevel@tonic-gate 	uint_t			usb_ac_max_unit;
2237c478bd9Sstevel@tonic-gate 	usb_ac_unit_list_t	*usb_ac_units;
2247c478bd9Sstevel@tonic-gate 
2257c478bd9Sstevel@tonic-gate 	/* adjacency matrix for reflecting connections */
2267c478bd9Sstevel@tonic-gate 	uchar_t			**usb_ac_connections;
2277c478bd9Sstevel@tonic-gate 	size_t			usb_ac_connections_len;
2287c478bd9Sstevel@tonic-gate 	uchar_t			*usb_ac_connections_a;
2297c478bd9Sstevel@tonic-gate 	size_t			usb_ac_connections_a_len;
2307c478bd9Sstevel@tonic-gate 	uchar_t			*usb_ac_unit_type;
2317c478bd9Sstevel@tonic-gate 	uchar_t			*usb_ac_traverse_path;
2327c478bd9Sstevel@tonic-gate 	uchar_t			usb_ac_traverse_path_index;
2337c478bd9Sstevel@tonic-gate 
2347c478bd9Sstevel@tonic-gate 	/* port types, eg LINE IN, Micr, Speakers */
235e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint64_t			usb_ac_input_ports;
236e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 	uint64_t			usb_ac_output_ports;
2377c478bd9Sstevel@tonic-gate 
2387c478bd9Sstevel@tonic-gate 	/* pipe handle */
2397c478bd9Sstevel@tonic-gate 	usb_pipe_handle_t	usb_ac_default_ph;
2407c478bd9Sstevel@tonic-gate 
2417c478bd9Sstevel@tonic-gate 	/* serial access */
2427c478bd9Sstevel@tonic-gate 	usb_serialization_t	usb_ac_ser_acc;
2437c478bd9Sstevel@tonic-gate 
2447c478bd9Sstevel@tonic-gate 	/* power management */
2457c478bd9Sstevel@tonic-gate 	usb_ac_power_t		*usb_ac_pm; /* power capabilities */
2467c478bd9Sstevel@tonic-gate 
2477c478bd9Sstevel@tonic-gate 	/* mixer registration data */
2487c478bd9Sstevel@tonic-gate 	uint_t			usb_ac_registered_with_mixer;
2497c478bd9Sstevel@tonic-gate 
2507c478bd9Sstevel@tonic-gate 	/* plumbing management */
2517c478bd9Sstevel@tonic-gate 	uint_t			usb_ac_plumbing_state;
2527c478bd9Sstevel@tonic-gate 	ushort_t		usb_ac_busy_count;
2537c478bd9Sstevel@tonic-gate 	usb_ac_plumbed_t	usb_ac_plumbed[USB_AC_MAX_PLUMBED];
2547c478bd9Sstevel@tonic-gate 
2557c478bd9Sstevel@tonic-gate 	/* Current plumbed module index to usb_ac_plumbed structure */
2567c478bd9Sstevel@tonic-gate 	int			usb_ac_current_plumbed_index;
2577c478bd9Sstevel@tonic-gate 
2587c478bd9Sstevel@tonic-gate 	/* per streams interface info */
2597c478bd9Sstevel@tonic-gate 	usb_ac_streams_info_t	usb_ac_streams[USB_AC_MAX_AS_PLUMBED];
2607c478bd9Sstevel@tonic-gate 
2617c478bd9Sstevel@tonic-gate 
26288447a05SGarrett D'Amore 	ddi_taskq_t		*tqp;
26388447a05SGarrett D'Amore 
26488447a05SGarrett D'Amore 	char			dstr[64];
265e272e4c8SBinzi Cao - Sun Microsystems - Beijing China };
2667c478bd9Sstevel@tonic-gate 
2677c478bd9Sstevel@tonic-gate /* warlock directives, stable data */
2687c478bd9Sstevel@tonic-gate _NOTE(MUTEX_PROTECTS_DATA(usb_ac_state_t::usb_ac_mutex, usb_ac_state_t))
2697c478bd9Sstevel@tonic-gate _NOTE(MUTEX_PROTECTS_DATA(usb_ac_state_t::usb_ac_mutex, usb_ac_power_t))
270e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(MUTEX_PROTECTS_DATA(usb_ac_state_t::usb_ac_mutex, usb_ac_plumbed_t))
271e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(MUTEX_PROTECTS_DATA(usb_audio_eng_t::lock, usb_audio_eng_t))
272e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(MUTEX_PROTECTS_DATA(usb_audio_eng_t::lock, usb_audio_format_t))
273e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(MUTEX_PROTECTS_DATA(usb_audio_ctrl_t::ctrl_mutex, usb_audio_ctrl_t))
274e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
275e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
2767c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_dip))
2777c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_ser_acc))
2787c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_pm))
2797c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_instance))
2807c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_default_ph))
2817c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_log_handle))
2827c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_if_descr))
2837c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_dev_data))
2847c478bd9Sstevel@tonic-gate _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_ifno))
285e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::flags))
286e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_input_ports))
287e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::engines))
288e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::usb_ac_audio_dev))
289e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_state_t::controls))
290e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
291e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::af_eflags))
292e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::streams))
293e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::statep))
294e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::fmt))
295e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::fragfr))
296e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::frsmshift))
297e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::started))
298e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::af_engp))
299e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::io_count))
300e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_eng_t::intrate))
301e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
302e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_ctrl_t::statep))
303e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_ctrl_t::af_ctrlp))
304e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_ctrl_t::cval))
305e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
306e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_plumbed_t::acp_tqp))
307e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_ac_plumbed_t::acp_uacp))
308e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
309e272e4c8SBinzi Cao - Sun Microsystems - Beijing China _NOTE(DATA_READABLE_WITHOUT_LOCK(usb_audio_format_t::ch))
3107c478bd9Sstevel@tonic-gate 
3117c478bd9Sstevel@tonic-gate /* usb_ac driver only care about two states:  plumbed or unplumbed */
3127c478bd9Sstevel@tonic-gate #define	USB_AC_STATE_UNPLUMBED		0
3137c478bd9Sstevel@tonic-gate #define	USB_AC_STATE_PLUMBED		1
3147c478bd9Sstevel@tonic-gate #define	USB_AC_STATE_PLUMBED_RESTORING	2
3157c478bd9Sstevel@tonic-gate 
3167c478bd9Sstevel@tonic-gate /* Default pipe states */
3177c478bd9Sstevel@tonic-gate #define	USB_AC_DEF_CLOSED		0
3187c478bd9Sstevel@tonic-gate #define	USB_AC_DEF_OPENED		1
3197c478bd9Sstevel@tonic-gate 
3207c478bd9Sstevel@tonic-gate #define	USB_AC_BUFFER_SIZE		256	/* descriptor buffer size */
3217c478bd9Sstevel@tonic-gate 
3227c478bd9Sstevel@tonic-gate 
3237c478bd9Sstevel@tonic-gate /*
3247c478bd9Sstevel@tonic-gate  * delay before restoring state
3257c478bd9Sstevel@tonic-gate  */
3267c478bd9Sstevel@tonic-gate #define	USB_AC_RESTORE_DELAY		drv_usectohz(1000000)
3277c478bd9Sstevel@tonic-gate 
3287c478bd9Sstevel@tonic-gate /* value for acp_driver */
3297c478bd9Sstevel@tonic-gate #define	USB_AS_PLUMBED	1
3307c478bd9Sstevel@tonic-gate #define	USB_AH_PLUMBED	2
3317c478bd9Sstevel@tonic-gate #define	UNKNOWN_PLUMBED	3
3327c478bd9Sstevel@tonic-gate 
333e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	AF_REGISTERED	0x1
334e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	AD_SETUP	0x10
335e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
336e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
337e272e4c8SBinzi Cao - Sun Microsystems - Beijing China int usb_audio_attach(usb_ac_state_t *);
338e272e4c8SBinzi Cao - Sun Microsystems - Beijing China /*
339e272e4c8SBinzi Cao - Sun Microsystems - Beijing China  * framework gain range
340e272e4c8SBinzi Cao - Sun Microsystems - Beijing China  */
341e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	AUDIO_CTRL_STEREO_VAL(l, r)	(((l) & 0xff) | (((r) & 0xff) << 8))
342e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	AUDIO_CTRL_STEREO_LEFT(v)	((uint8_t)((v) & 0xff))
343e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	AUDIO_CTRL_STEREO_RIGHT(v)	((uint8_t)(((v) >> 8) & 0xff))
344e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
345e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
346e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	AF_MAX_GAIN	100
347e272e4c8SBinzi Cao - Sun Microsystems - Beijing China #define	AF_MIN_GAIN	0
348e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
349e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
350e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
351e272e4c8SBinzi Cao - Sun Microsystems - Beijing China int usb_ac_get_audio(void *, void *, int);
352e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
353e272e4c8SBinzi Cao - Sun Microsystems - Beijing China void usb_ac_send_audio(void *, void *, int);
354e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
355e272e4c8SBinzi Cao - Sun Microsystems - Beijing China void usb_ac_stop_play(usb_ac_state_t *, usb_audio_eng_t *);
356e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
357e272e4c8SBinzi Cao - Sun Microsystems - Beijing China 
3587c478bd9Sstevel@tonic-gate #ifdef __cplusplus
3597c478bd9Sstevel@tonic-gate }
3607c478bd9Sstevel@tonic-gate #endif
3617c478bd9Sstevel@tonic-gate 
3627c478bd9Sstevel@tonic-gate #endif	/* _SYS_USB_AC_H */
363