#ifndef _SYS_USB_AS_H
#define _SYS_USB_AS_H
#include <sys/usb/usba/usbai_private.h>
#ifdef __cplusplus
extern "C" {
#endif
#define USB_AS_HIWATER (AM_MAX_QUEUED_MSGS_SIZE)
#define USB_AS_LOWATER (32*1024)
typedef struct usb_as_alt_descr {
uchar_t alt_mode;
uchar_t alt_valid;
uchar_t alt_format_len;
uchar_t alt_n_sample_rates;
uint_t *alt_sample_rates;
uint_t alt_continuous_sr;
usb_if_descr_t *alt_if;
usb_audio_as_if_descr_t *alt_general;
usb_audio_type1_format_descr_t *alt_format;
usb_ep_descr_t *alt_ep;
usb_audio_as_isoc_ep_descr_t *alt_cs_ep;
} usb_as_alt_descr_t;
typedef struct usb_as_power {
void *aspm_state;
int aspm_pm_busy;
uint8_t aspm_wakeup_enabled;
uint8_t aspm_pwr_states;
uint8_t aspm_capabilities;
uint8_t aspm_current_power;
} usb_as_power_t;
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_power_t::aspm_state))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_power_t::aspm_wakeup_enabled))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_power_t::aspm_pwr_states))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_power_t::aspm_capabilities))
_NOTE(SCHEME_PROTECTS_DATA("unshared", usb_ctrl_req))
typedef struct usb_as_state {
dev_info_t *usb_as_dip;
uint_t usb_as_instance;
usb_log_handle_t usb_as_log_handle;
uint_t usb_as_dev_state;
uint_t usb_as_ifno;
kmutex_t usb_as_mutex;
kcondvar_t usb_as_pipe_cv;
uint_t usb_as_flag;
mblk_t *usb_as_def_mblk;
usb_serialization_t usb_as_ser_acc;
usb_client_dev_data_t *usb_as_dev_data;
uint_t usb_as_n_alternates;
usb_as_alt_descr_t *usb_as_alts;
uint_t usb_as_alternate;
usb_pipe_handle_t usb_as_default_ph;
uchar_t usb_as_xfer_cr;
usb_pipe_handle_t usb_as_isoc_ph;
usb_pipe_policy_t usb_as_isoc_pp;
void * usb_as_ahdl;
uint_t usb_as_request_count;
uint_t usb_as_request_samples;
uint_t usb_as_curr_sr;
usb_audio_formats_t usb_as_curr_format;
uint_t usb_as_pkt_count;
ushort_t usb_as_record_pkt_size;
uchar_t usb_as_audio_state;
uchar_t usb_as_setup_cnt;
usb_as_power_t *usb_as_pm;
usb_as_registration_t usb_as_reg;
uint_t usb_as_send_debug_count;
uint_t usb_as_rcv_debug_count;
char dstr[64];
} usb_as_state_t;
_NOTE(MUTEX_PROTECTS_DATA(usb_as_state_t::usb_as_mutex, usb_as_state_t))
_NOTE(MUTEX_PROTECTS_DATA(usb_as_state_t::usb_as_mutex, usb_as_power_t))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_state_t::usb_as_dip))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_state_t::usb_as_pm))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_state_t::usb_as_instance))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_state_t::usb_as_default_ph))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_state_t::usb_as_isoc_ph))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_state_t::usb_as_log_handle))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_state_t::usb_as_dev_data))
_NOTE(DATA_READABLE_WITHOUT_LOCK(usb_as_state_t::usb_as_ser_acc))
typedef struct usb_as_tq_arg {
usb_as_state_t *usb_as_tq_arg_statep;
int usb_as_tq_arg_cr;
} usb_as_tq_arg_t;
_NOTE(SCHEME_PROTECTS_DATA("unique per call", usb_as_tq_arg_t))
#define USB_AS_DEF_AVAILABLE 0
#define USB_AS_DEF_INUSE 1
#define USB_AS_DEF_UNAVAILABLE 2
#define USB_AS_SEND_MERR 1
#define USB_AS_SEND_MCTL 2
#define USB_AS_SEND_NONE 3
#define USB_AS_IDLE 0
#define USB_AS_ACTIVE 1
#define USB_AS_PLAY_PAUSED 2
#define USB_AS_STOP_POLLING_STARTED 3
#define USB_AS_N_FRAMES 8
#define USB_AS_MAX_REQUEST_COUNT 3
typedef struct usb_as_req {
uint16_t usb_as_req_wValue;
uint16_t usb_as_req_wIndex;
uint16_t usb_as_req_wLength;
mblk_t *usb_as_req_data;
} usb_as_req_t;
#define USB_AS_OPEN 1
#define USB_AS_DISMANTLING 2
#define USB_AS_BUFFER_SIZE 256
#define USB_AS_CONSTRUCT_MINOR(inst) (inst)
#define USB_AS_MINOR_TO_INSTANCE(inst) (inst)
#ifdef __cplusplus
}
#endif
#endif