#ifndef _AUDIO_CLIENT_H
#define _AUDIO_CLIENT_H
#include <sys/audio/audio_common.h>
typedef struct audio_client_ops {
const char *aco_minor_prefix;
void *(*aco_dev_init)(audio_dev_t *);
void (*aco_dev_fini)(void *);
int (*aco_open)(audio_client_t *, int);
void (*aco_close)(audio_client_t *);
int (*aco_read)(audio_client_t *, struct uio *, cred_t *);
int (*aco_write)(audio_client_t *, struct uio *, cred_t *);
int (*aco_ioctl)(audio_client_t *, int, intptr_t, int,
cred_t *, int *);
int (*aco_chpoll)(audio_client_t *, short, int, short *,
struct pollhead **);
int (*aco_mmap)(audio_client_t *, ...);
void (*aco_input)(audio_client_t *);
void (*aco_output)(audio_client_t *);
void (*aco_drain)(audio_client_t *);
void (*aco_wput)(audio_client_t *, mblk_t *);
void (*aco_wsrv)(audio_client_t *);
void (*aco_rsrv)(audio_client_t *);
} audio_client_ops_t;
void *auclnt_get_private(audio_client_t *);
void auclnt_set_private(audio_client_t *, void *);
int auclnt_drain(audio_client_t *);
int auclnt_start_drain(audio_client_t *);
int auclnt_set_rate(audio_stream_t *, int);
int auclnt_get_rate(audio_stream_t *);
int auclnt_set_format(audio_stream_t *, int);
int auclnt_get_format(audio_stream_t *);
int auclnt_set_channels(audio_stream_t *, int);
int auclnt_get_channels(audio_stream_t *);
void auclnt_set_gain(audio_stream_t *, uint8_t);
uint8_t auclnt_get_gain(audio_stream_t *);
void auclnt_set_muted(audio_stream_t *, boolean_t);
boolean_t auclnt_get_muted(audio_stream_t *);
uint64_t auclnt_get_samples(audio_stream_t *);
void auclnt_set_samples(audio_stream_t *, uint64_t);
uint64_t auclnt_get_errors(audio_stream_t *);
void auclnt_set_errors(audio_stream_t *, uint64_t);
uint64_t auclnt_get_eof(audio_stream_t *);
void auclnt_set_eof(audio_stream_t *, uint64_t);
boolean_t auclnt_is_running(audio_stream_t *);
void auclnt_start(audio_stream_t *);
void auclnt_stop(audio_stream_t *);
void auclnt_set_paused(audio_stream_t *);
void auclnt_clear_paused(audio_stream_t *);
boolean_t auclnt_is_paused(audio_stream_t *);
void auclnt_flush(audio_stream_t *);
void auclnt_get_output_qlen(audio_client_t *, uint_t *, uint_t *);
uint_t auclnt_get_fragsz(audio_stream_t *);
uint_t auclnt_get_framesz(audio_stream_t *);
uint_t auclnt_get_nfrags(audio_stream_t *);
uint_t auclnt_get_nframes(audio_stream_t *);
uint_t auclnt_get_count(audio_stream_t *);
uint64_t auclnt_get_head(audio_stream_t *);
uint64_t auclnt_get_tail(audio_stream_t *);
uint_t auclnt_get_hidx(audio_stream_t *);
uint_t auclnt_get_tidx(audio_stream_t *);
void auclnt_set_latency(audio_stream_t *, uint_t, uint_t);
audio_stream_t *auclnt_input_stream(audio_client_t *);
audio_stream_t *auclnt_output_stream(audio_client_t *);
int auclnt_get_oflag(audio_client_t *);
int auclnt_open(audio_client_t *, int);
void auclnt_close(audio_client_t *);
void auclnt_register_ops(minor_t, audio_client_ops_t *);
minor_t auclnt_get_minor(audio_client_t *);
minor_t auclnt_get_original_minor(audio_client_t *);
minor_t auclnt_get_minor_type(audio_client_t *);
queue_t *auclnt_get_rq(audio_client_t *);
queue_t *auclnt_get_wq(audio_client_t *);
uint_t auclnt_produce(audio_stream_t *, uint_t);
uint_t auclnt_produce_data(audio_stream_t *, caddr_t, uint_t);
uint_t auclnt_consume(audio_stream_t *, uint_t);
uint_t auclnt_consume_data(audio_stream_t *, caddr_t, uint_t);
int auclnt_read(audio_client_t *, struct uio *);
int auclnt_write(audio_client_t *, struct uio *);
int auclnt_chpoll(audio_client_t *, short, int, short *, struct pollhead **);
void auclnt_pollwakeup(audio_client_t *, short);
pid_t auclnt_get_pid(audio_client_t *);
cred_t *auclnt_get_cred(audio_client_t *);
audio_dev_t *auclnt_get_dev(audio_client_t *);
audio_dev_t *auclnt_hold_dev_by_index(int);
void auclnt_release_dev(audio_dev_t *);
int auclnt_get_dev_index(audio_dev_t *);
int auclnt_get_dev_number(audio_dev_t *);
void auclnt_set_dev_number(audio_dev_t *, int);
const char *auclnt_get_dev_name(audio_dev_t *);
const char *auclnt_get_dev_driver(audio_dev_t *);
dev_info_t *auclnt_get_dev_devinfo(audio_dev_t *);
int auclnt_get_dev_instance(audio_dev_t *);
const char *auclnt_get_dev_description(audio_dev_t *);
const char *auclnt_get_dev_version(audio_dev_t *);
const char *auclnt_get_dev_hw_info(audio_dev_t *, void **);
uint_t auclnt_get_dev_capab(audio_dev_t *);
#define AUDIO_CLIENT_CAP_PLAY (1U << 0)
#define AUDIO_CLIENT_CAP_RECORD (1U << 1)
#define AUDIO_CLIENT_CAP_DUPLEX (1U << 2)
#define AUDIO_CLIENT_CAP_SNDSTAT (1U << 3)
#define AUDIO_CLIENT_CAP_OPAQUE (1U << 4)
void auclnt_dev_walk_clients(audio_dev_t *,
int (*)(audio_client_t *, void *), void *);
uint_t auclnt_dev_get_serial(audio_dev_t *);
void auclnt_walk_controls(audio_dev_t *,
int (*)(audio_ctrl_t *, void *), void *);
audio_ctrl_t *auclnt_find_control(audio_dev_t *, const char *);
int auclnt_control_describe(audio_ctrl_t *, audio_ctrl_desc_t *);
int auclnt_control_read(audio_ctrl_t *, uint64_t *);
int auclnt_control_write(audio_ctrl_t *, uint64_t);
void auclnt_walk_devs(int (*walker)(audio_dev_t *, void *), void *);
void auclnt_walk_devs_by_number(int (*walker)(audio_dev_t *, void *), void *);
audio_client_t *auclnt_hold_by_devt(dev_t);
void auclnt_release(audio_client_t *);
void auclnt_hold(audio_client_t *);
int auclnt_serialize(audio_client_t *);
void auclnt_unserialize(audio_client_t *);
void auclnt_dev_walk_engines(audio_dev_t *,
int (*)(audio_engine_t *, void *), void *);
int auclnt_engine_get_format(audio_engine_t *);
int auclnt_engine_get_rate(audio_engine_t *);
int auclnt_engine_get_channels(audio_engine_t *);
uint_t auclnt_engine_get_capab(audio_engine_t *);
void *auclnt_get_minor_data(audio_client_t *, minor_t);
void *auclnt_get_dev_minor_data(audio_dev_t *, minor_t);
void auclnt_warn(audio_client_t *, const char *fmt, ...);
#endif