#ifndef INTERWAVEVAR_H
#define INTERWAVEVAR_H
typedef struct iw_voice_info {
u_char bank;
u_long start;
u_long end;
#define SACI_IRQ 0x80
#define SACI_BACKWARDS 0x40
#define SACI_IRQ_ENABLE 0x20
#define SACI_BOUNCE 0x10
#define SACI_LOOP 0x08
#define SACI_16BIT 0x04
#define SACI_STOP_1 0x02
#define SACI_STOP_0 0x01
u_char format;
u_char volume;
#define SVCI_VOLUME_IRQ 0x80
#define SVCI_DIRECTION 0x40
#define SVCI_IRQ_ENABLE 0x20
#define SVCI_BOUNCE 0x10
#define SVCI_LOOP 0x08
#define SVCI_PCM 0x04
#define SVCI_STOP_1 0x02
#define SVCI_STOP_0 0x01
u_char volume_control;
u_short left_offset;
u_short right_offset;
u_char effect_acc;
#define SMSI_ROM 0x80
#define SMSI_ULAW 0x40
#define SMSI_OFFSET_ON 0x20
#define SMSI_ALT_EFF 0x10
#define SMSI_OFF 0x02
#define SMSI_EFFECT 0x01
u_char mode;
} iw_voice_info_t;
typedef struct iw_port_info {
char off;
char pad[3];
int voll;
int volr;
} iw_port_info_t;
struct iw_softc {
device_t sc_dev;
bus_space_tag_t sc_iot;
isa_chipset_tag_t sc_ic;
kmutex_t sc_lock;
kmutex_t sc_intr_lock;
int vers;
int revision;
int sc_fullduplex;
int sc_irate;
int sc_orate;
u_long sc_dma_flags;
int sc_irq;
int sc_midi_irq;
void (*sc_recintr)(void *);
void *sc_recarg;
void *sc_recdma_bp;
int sc_playdrq;
bus_size_t sc_play_maxsize;
int sc_recdrq;
bus_size_t sc_rec_maxsize;
int sc_recdma_cnt;
int sc_playing;
int sc_maxdma;
u_long outfifo;
u_long infifo;
int fifosize;
u_short silence;
u_long sc_last_dmasize;
u_long sc_last_playsize;
u_long sc_last_played;
u_long sc_play_pos;
u_long sc_play_start;
u_long sc_play_end;
void (*sc_playintr)(void *);
void *sc_playarg;
void *sc_playdma_bp;
int sc_playdma_cnt;
int play_encoding;
int play_channels;
int play_precision;
int sc_playlastcc;
int sc_fillcount;
int bytesout;
int bytesin;
int sc_playbuf_available;
int sc_recbuf_available;
int rec_encoding;
int rec_channels;
int rec_precision;
int sc_reclastcc;
u_char recfmtbits;
u_char playfmtbits;
u_char sc_recsrcbits;
int (*sc_ih)(void *);
iw_port_info_t sc_mic;
iw_port_info_t sc_aux1;
iw_port_info_t sc_aux2;
iw_port_info_t sc_linein;
iw_port_info_t sc_lineout;
iw_port_info_t sc_rec;
iw_port_info_t sc_dac;
iw_port_info_t sc_loopback;
iw_port_info_t sc_monoin;
volatile u_short flags;
bus_space_handle_t dir_h;
int codec_index;
bus_space_handle_t codec_index_h;
isa_chipset_tag_t sc_codec_ic;
int pcdrar;
int p2xr;
bus_space_handle_t p2xr_h;
isa_chipset_tag_t sc_p2xr_ic;
int p3xr;
bus_space_handle_t p3xr_h;
isa_chipset_tag_t sc_p3xr_ic;
int p401ar;
int p201ar;
int pataar;
int p388ar;
int pnprdp;
int igidxr;
int i16dp;
int i8dp;
int svsr;
int cdatap;
int csr1r;
int cxdr;
int gmxr;
int gmxdr;
int lmbdr;
u_char csn;
u_char cmode;
int dma1_chan;
int dma2_chan;
int ext_chan;
u_char voices;
u_long vendor;
long free_mem;
long reserved_mem;
u_char smode;
long size_mem;
struct cfdriver *iw_cd;
const struct audio_hw_if *iw_hw_if;
};
void iwattach(struct iw_softc *);
int iwopen(struct iw_softc *, int);
void iwclose(void *);
int iw_query_format(void *, audio_format_query_t *);
int iw_audio_set_format(void *, int,
const audio_params_t *, const audio_params_t *,
audio_filter_reg_t *, audio_filter_reg_t *);
int iw_commit_settings(void *);
void iw_sw_encode(void *, int, u_char *, int);
void iw_sw_decode(void *, int, u_char *, int);
int iw_start_output(void *, void *, int, void (*)(void *), void *);
int iw_start_input(void *, void *, int, void (*)(void *), void *);
int iw_init_input(void *, void *, int);
int iw_init_output(void *, void *, int);
int iw_halt_output(void *);
int iw_halt_input(void *);
int iw_speaker_ctl(void *, int);
int iw_getdev(void *, struct audio_device *);
int iw_set_port(void *, mixer_ctrl_t *);
int iw_get_port(void *, mixer_ctrl_t *);
int iw_query_devinfo(void *, mixer_devinfo_t *);
struct malloc_type;
void * iw_malloc(void *, int, size_t);
void iw_free(void *, void *, size_t);
size_t iw_round_buffersize(void *, int, size_t);
int iw_get_props(void *);
void iw_get_locks(void *, kmutex_t **, kmutex_t **);
#endif