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