Source to bsd/dev/snd_msgs.h


Enter a symbol's name here to quickly find it.

/*
 * Copyright (c) 1999 Apple Computer, Inc. All rights reserved.
 *
 * @APPLE_LICENSE_HEADER_START@
 * 
 * "Portions Copyright (c) 1999 Apple Computer, Inc.  All Rights
 * Reserved.  This file contains Original Code and/or Modifications of
 * Original Code as defined in and that are subject to the Apple Public
 * Source License Version 1.0 (the 'License').  You may not use this file
 * except in compliance with the License.  Please obtain a copy of the
 * License at http://www.apple.com/publicsource and read it before using
 * this file.
 * 
 * The Original Code and all software distributed under the License are
 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
 * License for the specific language governing rights and limitations
 * under the License."
 * 
 * @APPLE_LICENSE_HEADER_END@
 */

/* 
 * Copyright (c) 1988 NeXT, Inc.
 */
/*
 * HISTORY
 * 01-Mar-93 Mike Minnick (mminnick) at NeXT
 *	Added generic stream format get/set.
 *
 * 29-Oct-91 Mike Minnick (mminnick) at NeXT
 *	Added stream owner port to snd_stream_msg_t.
 *
 * 23-Aug-90  Gregg Kellogg (gk) at NeXT
 *	Added SND_DSP_PROTO_TXD for 040 TXD interrupt support.
 *
 * 23-Aug-90  Gregg Kellogg (gk) at NeXT
 *	Support message passing protocol change so the reply port isn't
 *	used for passing permissions (set_owner, get_stream, dsp_proto,
 *	and get_dsp_cmd_port).
 *
 * 21-Aug-90  Julius Smith (jos) at NeXT
 *	Added protocol message type for setting the protocol from the
 *	dsp command queue.
 *
 * 10-Dec-88  Gregg Kellogg (gk) at NeXT
 *	Created.
 *
 */ 
#ifdef	DRIVER_PRIVATE

#ifndef	_M68K_DEV_SND_MSGS_PRIV_
#define _M68K_DEV_SND_MSGS_PRIV_

#import <mach/mach_types.h>
#import <mach/message.h>

/*
 * Message component type codes on stream port.
 */
typedef struct {
	msg_type_t	typeType;
	unsigned int	type;
#define SND_MT_PLAY_DATA	0	// data to be played (with size)
#define SND_MT_RECORD_DATA	1	// number of bytes to record
#define SND_MT_OPTIONS		2	// high/low water and dma size options
#define SND_MT_CONTROL		3	// await/abort/pause/continue
#define SND_MT_NDMA		4	// number of dma descs in stream.
/* New for 3.1 */
#define SND_MT_FORMAT		5	// rate, encoding, chan count
} snd_msg_type_t;

/*
 * Interface message formats
 */

/*
 * Messages sent from the kernel
 */
typedef struct {
	msg_header_t	header;
	msg_type_t	data_tagType;
	int		data_tag;
	msg_type_long_t	dataType;
	pointer_t	recorded_data;
} snd_recorded_data_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	data_tagType;
	int		data_tag;
} snd_taged_reply_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	dataType;
	int		nsamples;
	int		timeStamp;
} snd_ret_samples_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	dataType;
	unsigned int	parms;
#define SND_PARM_LOWPASS	0x1
#define SND_PARM_SPEAKER	0x2
#define SND_PARM_ZEROFILL	0x4
} snd_ret_parms_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	dataType;
	unsigned int	volume;
#define SND_VOLUME_RCHAN_MASK	0xff
#define SND_VOLUME_RCHAN_SHIFT	0
#define SND_VOLUME_LCHAN_MASK	0xff00
#define SND_VOLUME_LCHAN_SHIFT	8
} snd_ret_volume_t;

/* New for 3.1 */
typedef struct {
	msg_header_t	header;
	msg_type_t	Type;
	unsigned int	rate;
#define	SND_STREAM_FORMAT_RATE_CONTINUOUS	(1<<0)
#define	SND_STREAM_FORMAT_RATE_8000		(1<<1)
#define	SND_STREAM_FORMAT_RATE_11025		(1<<2)
#define	SND_STREAM_FORMAT_RATE_16000		(1<<3)
#define	SND_STREAM_FORMAT_RATE_22050		(1<<4)
#define	SND_STREAM_FORMAT_RATE_32000		(1<<5)
#define	SND_STREAM_FORMAT_RATE_44100		(1<<6)
#define	SND_STREAM_FORMAT_RATE_48000		(1<<7)
	unsigned int	low_rate;
	unsigned int	high_rate;
	unsigned int	encoding;
#define	SND_STREAM_FORMAT_ENCODING_MULAW_8	(1<<0)
#define	SND_STREAM_FORMAT_ENCODING_LINEAR_8	(1<<1)
#define	SND_STREAM_FORMAT_ENCODING_LINEAR_16	(1<<2)
	unsigned int	chan_count;
} snd_ret_stream_formats_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	dataType;
	int		dsp_regs;
} snd_ret_dsp_regs_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	dataType;
	unsigned int	ill_msgid;	// message id of bad message.
	unsigned int	ill_error;	// error returned
#define SND_NO_ERROR	100	// non-error ack.
#define SND_BAD_PORT	101	// message sent to wrong port
#define SND_BAD_MSG	102	// unknown message id
#define SND_BAD_PARM	103	// bad parameter list in message
#define SND_NO_MEMORY	104	// can't allocate memory (record)
#define SND_PORT_BUSY	105	// access req'd to existing excl access port
#define SND_NOT_OWNER	106	// must be owner to do this
#define SND_BAD_CHAN	107	// dsp channel hasn't been inited
#define SND_SEARCH	108	// couldn't find requested resource
#define SND_NODATA	109	// can't send data commands to dsp in this mode
#define SND_NOPAGER	110	// can't allocate from external pager (record).
#define SND_NOTALIGNED	111	// bad data alignment.
#define SND_BAD_HOST_PRIV 112	// bad host privilege port passed.
#define SND_BAD_PROTO 	113	// can't do requested operation given protocol
} snd_illegal_msg_t;

typedef struct {msg_header_t header;} snd_ret_port_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	dataType;
	unsigned int	mask;
	unsigned int	flags;
	unsigned int	value;
} snd_dsp_cond_true_t;

/*
 * Messages sent from the user to the device
 */
typedef struct {
	msg_header_t	header;
	msg_type_t	Type;
	unsigned int	stream;
	msg_type_t	ownerType;
	port_t		owner;
} snd_get_stream_t;

#define SND_GD_CHAN_MASK	0x7f
#define SND_GD_CHAN_SHIFT	0
#define SND_GD_DEVICE_MASK	0x80
#define SND_GD_DEVICE_SHIFT	7

#define snd_gd_bitmap(chan, device) \
	(((chan)<<SND_GD_CHAN_SHIFT) | ((device)<<SND_GD_DEVICE_SHIFT))

#define snd_gd_isdevice(bitmap)  ((bitmap)&SND_GD_DEVICE_MASK)
#define snd_gd_chan(bitmap) ((bitmap)&SND_GD_CHAN_MASK)

#define SND_GD_SOUT_44	snd_gd_bitmap(0, TRUE)
#define SND_GD_SOUT_22	snd_gd_bitmap(1, TRUE)
#define SND_GD_SIN	snd_gd_bitmap(2, TRUE)
#define SND_GD_DSP_OUT	snd_gd_bitmap(DSP_SO_CHAN, FALSE) // sound out from dsp
#define SND_GD_DSP_IN	snd_gd_bitmap(DSP_SI_CHAN, FALSE) // sound in to dsp

typedef struct {
	msg_header_t	header;
	msg_type_t	Type;
	unsigned int	parms;
} snd_set_parms_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	Type;
	unsigned int	volume;
} snd_set_volume_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	Type;
	unsigned int	proto;
	msg_type_t	ownerType;
	port_t		owner;
} snd_dsp_proto_t;

#define SND_DSP_PROTO_DSPERR	0x1	// DSP error messages enabled
#define SND_DSP_PROTO_C_DMA	0x2	// complex dma mode
#define SND_DSP_PROTO_S_DMA	0x4	// simple dma mode
#define SND_DSP_PROTO_LINKOUT	0x8	// link directly to sound out
#define SND_DSP_PROTO_LINKIN	0x10	// link directly to sound out
#define SND_DSP_PROTO_SOUNDDATA	0x20	// all data to dsp is sound samples
#define SND_DSP_PROTO_HIGH	0x40	// 44khz sound out
#define SND_DSP_PROTO_HFABORT	0x80	// DSP abort indicated by HF2 & HF3
#define SND_DSP_PROTO_DSPMSG	0x100	// DSP messages enabled
#define SND_DSP_PROTO_RAW	0x200	// DSP messages enabled
#define SND_DSP_PROTO_TXD	0x400	// DSP txd interrupt enable (040 only)

typedef msg_header_t	snd_get_parms_t;
typedef msg_header_t	snd_get_volume_t;
/* New for 3.1 */
typedef msg_header_t	snd_get_stream_formats_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	ownerType;
	port_t		owner;		// owner port
} snd_get_dsp_cmd_port_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	negType;
	port_t		negotiation;	// negotiation port
	msg_type_t	ownerType;
	port_t		owner;		// owner port
} snd_set_owner_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	old_ownerType;
	port_t		old_owner;
	msg_type_t	new_ownerType;
	port_t		new_owner;
	msg_type_t	new_negotiationType;
	port_t		new_negotiation;
} snd_reset_owner_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	privType;
	port_t		priv;
} snd_new_device_t;

typedef struct {
	msg_header_t	header;
	msg_type_long_t	dataType;
#define DSP_DEF_BUFSIZE	512			// default #words in each buf
	unsigned int	data[DSP_DEF_BUFSIZE];
} snd_dsp_msg_t;

typedef struct {
	msg_header_t	header;
	msg_type_long_t	dataType;
#define DSP_DEF_EBUFSIZE 32			// default #words in each buf
	unsigned int	data[DSP_DEF_EBUFSIZE];
} snd_dsp_err_t;

/*
 * Messages sent from the user to a stream port
 * There's only one message, but it can contain some combination
 * of several different sub-messages.
 */
typedef struct snd_stream_msg {
	msg_header_t	header;
	msg_type_t	data_tagType;
	int		data_tag;		// tag for this request, 0 def
	msg_type_t	ownerType;
	port_t		streamOwner;		// stream owner port for 3.0
} snd_stream_msg_t;

typedef struct {
	snd_msg_type_t	msgtype;
	msg_type_t	optionsType;
	unsigned int	options;
#define SND_DM_STARTED_MSG	0x01
#define SND_DM_COMPLETED_MSG	0x02
#define SND_DM_ABORTED_MSG	0x04
#define SND_DM_PAUSED_MSG	0x08
#define SND_DM_RESUMED_MSG	0x10
#define SND_DM_OVERFLOW_MSG	0x20
#define SND_DM_PREEMPT		0x40
	msg_type_t	reg_portType;
	port_t		reg_port;	// remote port for region messages
	msg_type_long_t	dataType;
	pointer_t	data;
} snd_stream_play_data_t;

typedef struct {
	snd_msg_type_t	msgtype;
	msg_type_t	optionsType;
	unsigned int	options;
	int		nbytes;
	msg_type_t	reg_portType;
	port_t		reg_port;	// remote port for region messages
	msg_type_t	filenameType;	// filename string follows inline
} snd_stream_record_data_t;

typedef struct {
	snd_msg_type_t	msgtype;
	msg_type_t	controlType;
	unsigned int	snd_control;
#define SND_DC_AWAIT	0x1
#define SND_DC_ABORT	0x2
#define SND_DC_PAUSE	0x4
#define SND_DC_RESUME	0x8
} snd_stream_control_t;

typedef struct {
	snd_msg_type_t	msg_type;
	msg_type_t	optionsType;
	unsigned int	high_water;
	unsigned int	low_water;
	unsigned int	dma_size;
} snd_stream_options_t;

/* New for 3.1 */
typedef struct {
	snd_msg_type_t	msg_type;
	msg_type_t	formatType;
	unsigned int	rate;
	unsigned int	encoding;
	unsigned int	chan_count;
} snd_stream_format_t;

/*
 * Number of dma descriptors used in stream.
 */
typedef struct {
	snd_msg_type_t	msg_type;
	msg_type_t	ndmaType;
	unsigned int	ndma;
} snd_stream_ndma_t;

/*
 * Nsamples is another message on a stream port.
 */
typedef struct {
	msg_header_t	header;
} snd_stream_nsamples_t;

/*
 * Messages sent by user to dsp command port.
 */
typedef struct {
	msg_header_t	header;
	msg_type_t	reg_maskType;
	unsigned int	mask;		// mask of flags to inspect
	unsigned int	flags;		// set of flags that must be on
	msg_type_t	ret_portType;
	port_t		ret_port;	// remote port for ret_msg
	msg_type_long_t	ret_msgType;
	/*
	 * follows is the body of the (simple) message to send
	 * either to msg_remote_port, or to snd_var.dsp  (if PORT_NULL).
	 */
	msg_header_t	ret_msg;	// possibly longer than this.
} snd_dspcmd_event_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	dataType;
	int		addr;		// .. of dsp buffer
	int		size;		// .. of dsp buffer
	int		skip;		// dma skip factor
#define DSP_SKIP_0	1
#define DSP_SKIP_CONTIG	DSP_SKIP_0
#define DSP_SKIP_1	2
#define DSP_SKIP_2	3
#define DSP_SKIP_3	4
#define DSP_SKIP_4	5
	int		space;		// dsp space of buffer
#define	DSP_SPACE_X	1
#define DSP_SPACE_Y	2
#define DSP_SPACE_L	3
#define DSP_SPACE_P	4
	int		mode;		// mode of dma [1..5]
#define DSP_MODE8	1
#define DSP_MODE16	2
#define DSP_MODE24	3
#define DSP_MODE32	4
#define DSP_MODE2416	5		/* Pseudo-dma shift 24 to 16 bits */
#define SND_MODE_MIN	1		/* Minimum value for mode */
#define SND_MODE_MAX	5		/* Maximum value for mode */
	int		chan;		// channel for dma
#define DSP_USER_REQ_CHAN 0	// for user-requested dma's
#define DSP_SO_CHAN	1	// for sound-out dma's.
#define DSP_SI_CHAN	2	// for sound-in dma's
#define DSP_USER_CHAN	3	// first user chan

#define DSP_N_USER_CHAN	16	// 0..15 for user dma.
} snd_dspcmd_chandata_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	chandataType;
	int		addr;		// .. of dsp buffer
	int		size;		// .. of dsp buffer
	int		skip;		// dma skip factor
	int		space;		// dsp space of buffer
	int		mode;		// mode of dma [1..5]
	msg_type_long_t	dataType;
	pointer_t	data;		// data to output
} snd_dspcmd_dma_t;

typedef msg_header_t	snd_dspcmd_abortdma_t;
typedef msg_header_t	snd_dspcmd_req_err_t;
typedef msg_header_t	snd_dspcmd_req_msg_t;

/*
 * Multi-part dspcmd_msg.
 */
/*
 * Message component type codes on stream port.
 */
typedef struct {
	msg_type_t	typeType;
	unsigned int	type;
#define SND_DSP_MT_DATA		1	// 1, 2, or 4 byte data
#define SND_DSP_MT_HOST_COMMAND	2	// host command
#define SND_DSP_MT_HOST_FLAG	3	// host flag(s) to set
#define SND_DSP_MT_RET_MSG	4	// (simple) message to send
#define SND_DSP_MT_RESET	5	// hard reset the DSP
#define SND_DSP_MT_GET_REGS	6	// return DSP host I/F registers
#define SND_DSP_MT_CONDITION	7	// wait for condition (return msg)
#define SND_DSP_MT_RDATA	8	// read 1, 2, or 4 byte data
#define SND_DSP_MT_PROTO	9	// DSP protocol
} snd_dsp_type_t;

typedef struct {
	msg_header_t	header;
	msg_type_t	priType;
	int		pri;		// Priority of message group
#define DSP_MSG_HIGH		0
#define DSP_MSG_MED		1
#define DSP_MSG_LOW		2
	boolean_t	atomic;		// don't preempt this msg with another
} snd_dspcmd_msg_t;

typedef struct {
	snd_dsp_type_t	msgtype;
	msg_type_t	conditionType;
	unsigned int	mask;		// mask of flags to inspect
	unsigned int	flags;		// set of flags that must be on
	msg_type_t	reply_portType;
	port_t		reply_port;	// were to send device regs to
} snd_dsp_condition_t;

typedef struct {
	snd_dsp_type_t	msgtype;
	msg_type_long_t	dataType;
	pointer_t	data;		// data to send
} snd_dsp_data_t;

typedef struct {
	snd_dsp_type_t	msgtype;
	msg_type_t	hcType;
	unsigned int	hc;		// host command
} snd_dsp_host_command_t;

typedef struct {
	snd_dsp_type_t	msgtype;
	msg_type_t	protoType;	// protocol modification
	unsigned int	proto;
} snd_dsp_mt_proto_t;

typedef struct {
	snd_dsp_type_t	msgtype;
	msg_type_t	hfType;
	unsigned int	mask;		// mask of HF0|HF1
	unsigned int	flags;		// flags to set
} snd_dsp_host_flag_t;

typedef struct {
	snd_dsp_type_t	msgtype;
	msg_type_t	ret_portType;
	port_t		ret_port;	// remote port for ret_msg
	msg_type_long_t	ret_msgType;
	/*
	 * follows is the body of the (simple) message to send
	 * either to msg_remote_port, or to snd_var.dspowner (if PORT_NULL).
	 */
	msg_header_t	ret_msg;	// possibly longer than this.
} snd_dsp_ret_msg_t;

typedef struct {
	snd_dsp_type_t	msgtype;
} snd_dsp_reset_t, snd_dsp_get_regs_t;

/*
 * Message Id's
 */
#define SND_MSG_BASE		0

/*
 * User messages on stream port
 */
#define SND_MSG_STREAM_BASE	SND_MSG_BASE+0
#define SND_MSG_STREAM_MSG	SND_MSG_STREAM_BASE+0
#define SND_MSG_STREAM_NSAMPLES	SND_MSG_STREAM_BASE+1

/*
 * User messages on device port
 */
#define SND_MSG_DEVICE_BASE		SND_MSG_BASE+100
#define SND_MSG_GET_STREAM		SND_MSG_DEVICE_BASE+0
#define SND_MSG_SET_PARMS		SND_MSG_DEVICE_BASE+1
#define SND_MSG_GET_PARMS		SND_MSG_DEVICE_BASE+2
#define SND_MSG_SET_VOLUME		SND_MSG_DEVICE_BASE+3
#define SND_MSG_GET_VOLUME		SND_MSG_DEVICE_BASE+4
#define SND_MSG_SET_DSPOWNER		SND_MSG_DEVICE_BASE+5
#define SND_MSG_SET_SNDINOWNER		SND_MSG_DEVICE_BASE+6
#define SND_MSG_SET_SNDOUTOWNER		SND_MSG_DEVICE_BASE+7
#define SND_MSG_DSP_PROTO		SND_MSG_DEVICE_BASE+8
#define SND_MSG_GET_DSP_CMD_PORT	SND_MSG_DEVICE_BASE+9
#define SND_MSG_NEW_DEVICE_PORT		SND_MSG_DEVICE_BASE+10
#define SND_MSG_RESET_DSPOWNER		SND_MSG_DEVICE_BASE+11
#define SND_MSG_RESET_SNDINOWNER	SND_MSG_DEVICE_BASE+12
#define SND_MSG_RESET_SNDOUTOWNER	SND_MSG_DEVICE_BASE+13
#define SND_MSG_SET_RAMP		SND_MSG_DEVICE_BASE+14
/*
 * Set ramp parameter
 */
#define SND_PARM_RAMPUP		0x1	/* Ramp sound up */
#define SND_PARM_RAMPDOWN	0x2	/* Ramp sound down */

/* New for 3.1 */
#define SND_MSG_GET_SNDOUT_FORMATS	SND_MSG_DEVICE_BASE+15
#define SND_MSG_GET_SNDIN_FORMATS	SND_MSG_DEVICE_BASE+16

/*
 * User messages on dsp command port
 */
#define SND_MSG_DSP_BASE	SND_MSG_BASE+200
#define SND_MSG_DSP_MSG		SND_MSG_DSP_BASE+0
#define SND_MSG_DSP_EVENT	SND_MSG_DSP_BASE+1
#define SND_MSG_DSP_CHANDATA	SND_MSG_DSP_BASE+2
#define SND_MSG_DSP_DMAOUT	SND_MSG_DSP_BASE+3
#define SND_MSG_DSP_DMAIN	SND_MSG_DSP_BASE+4
#define SND_MSG_DSP_ABORTDMA	SND_MSG_DSP_BASE+5
#define SND_MSG_DSP_REQ_MSG	SND_MSG_DSP_BASE+6
#define SND_MSG_DSP_REQ_ERR	SND_MSG_DSP_BASE+7

/*
 * Kernel messages returned.
 */
#define SND_MSG_KERN_BASE	SND_MSG_BASE+300
#define SND_MSG_RECORDED_DATA	SND_MSG_KERN_BASE+0
#define SND_MSG_TIMED_OUT	SND_MSG_KERN_BASE+1
#define SND_MSG_RET_SAMPLES	SND_MSG_KERN_BASE+2
#define SND_MSG_RET_DEVICE	SND_MSG_KERN_BASE+3
#define SND_MSG_RET_STREAM	SND_MSG_KERN_BASE+4
#define SND_MSG_RET_PARMS	SND_MSG_KERN_BASE+5
#define SND_MSG_RET_VOLUME	SND_MSG_KERN_BASE+6
#define SND_MSG_OVERFLOW	SND_MSG_KERN_BASE+7
#define SND_MSG_STARTED		SND_MSG_KERN_BASE+9
#define SND_MSG_COMPLETED	SND_MSG_KERN_BASE+10
#define SND_MSG_ABORTED		SND_MSG_KERN_BASE+11
#define SND_MSG_PAUSED		SND_MSG_KERN_BASE+12
#define SND_MSG_RESUMED		SND_MSG_KERN_BASE+13
#define SND_MSG_ILLEGAL_MSG	SND_MSG_KERN_BASE+14
#define SND_MSG_RET_DSP_ERR	SND_MSG_KERN_BASE+15
#define SND_MSG_RET_DSP_MSG	SND_MSG_KERN_BASE+16
#define SND_MSG_RET_CMD		SND_MSG_KERN_BASE+17
#define SND_MSG_DSP_REGS	SND_MSG_KERN_BASE+18
#define SND_MSG_DSP_COND_TRUE	SND_MSG_KERN_BASE+19
/* New for 3.1 */
#define SND_MSG_RET_STREAM_FORMATS	SND_MSG_KERN_BASE+20

/*
 * Ioctl for retrieving device port.
 */
#ifdef	_IO
#define SOUNDIOCDEVPORT	_IO('A', 8)
#endif	/* _IO */

/*
 * Routine prototypes
 */
#if	KERNEL
#ifdef	m68k
kern_return_t snd_reply_recorded_data (
	port_t		remote_port,	// who to reply to
	int		data_tag,	// tag from region
	pointer_t	data,		// recorded data
	int		nbytes,		// number of bytes of data to send
	int		in_line);	// "Send data inline" flag.
kern_return_t snd_reply_timed_out (
	port_t		remote_port,	// who to send it to.
	int		data_tag);	// tag from region
kern_return_t snd_reply_ret_samples (
	port_t		remote_port,	// who to send it to.
	int		nsamples,	// number of bytes of data to record
	int 		timeStamp);	
kern_return_t snd_reply_ret_device (
	port_name_t	remote_port,	// who to send it to.
	port_name_t	device_port);	// returned port.
kern_return_t snd_reply_ret_stream (
	port_t		remote_port,	// who to send it to.
	port_t		stream_port);	// returned port.
kern_return_t snd_reply_ret_parms (
	port_t		remote_port,	// who to send it to.
	unsigned int	parms);
kern_return_t snd_reply_ret_volume (
	port_t		remote_port,	// who to send it to.
	unsigned int	volume);
/* New for 3.1 */
kern_return_t snd_reply_ret_formats (
	port_name_t	remote_port,	// who to send it to.
	u_int		rates,
        u_int		low_rate,
        u_int		high_rate,
        u_int           encodings,
        u_int           chan_count);
kern_return_t snd_reply_overflow (
	port_t		remote_port,	// who to send it to.
	int		data_tag);	// from region
kern_return_t snd_reply_started (
	port_t		remote_port,	// who to send it to.
	int		data_tag);	// from region
kern_return_t snd_reply_completed (
	port_t		remote_port,	// who to send it to.
	int		data_tag);	// from region
kern_return_t snd_reply_aborted (
	port_t		remote_port,	// who to send it to.
	int		data_tag);	// from region
kern_return_t snd_reply_paused (
	port_t		remote_port,	// who to send it to.
	int		data_tag);	// from region
kern_return_t snd_reply_resumed (
	port_t		remote_port,	// who to send it to.
	int		data_tag);	// from region
kern_return_t snd_reply_illegal_msg (
	port_t		local_port,	// returned port of interest
	port_t		remote_port,	// who to send it to.
	int		msg_id,		// message id with illegal syntax	
	int		error);		// error code
kern_return_t snd_reply_dsp_err (
	port_t		remote_port);	// who to send it to.
kern_return_t snd_reply_dsp_msg (
	port_t		remote_port);	// who to send it to.
kern_return_t snd_reply_dsp_cmd_port(
	port_t		cmd_port,	// port to return.
	port_t		remote_port);	// where to return it
kern_return_t snd_reply_dsp_regs (
	int		regs);		// DSP host I/F registers (not recieve)
kern_return_t snd_reply_dsp_cond_true (	// reply indicating condition true
	vm_address_t	ret_cond);	// reply_port, status and conditions
#endif	/* m68k */
#endif	/* KERNEL */

#endif	/* _M68K_DEV_SND_MSGS_PRIV_ */

#endif	/* DRIVER_PRIVATE */