MusicKit  0.0.0
_MachMessages.h
00001 #ifndef __MK__MachMessages_H___
00002 #define __MK__MachMessages_H___
00003 /* $Id$
00004  * Copyright 1988-1992, NeXT Inc.  All rights reserved. 
00005  */
00006 /*
00007  * HISTORY
00008  * 23-Aug-90  Gregg Kellogg (gk) at NeXT
00009  *      Added SND_DSP_PROTO_TXD for 040 TXD interrupt support.
00010  *
00011  * 23-Aug-90  Gregg Kellogg (gk) at NeXT
00012  *      Support message passing protocol change so the reply port isn't
00013  *      used for passing permissions (set_owner, get_stream, dsp_proto,
00014  *      and get_dsp_cmd_port).
00015  *
00016  * 21-Aug-90  Julius Smith (jos) at NeXT
00017  *      Added protocol message type for setting the protocol from the
00018  *      dsp command queue.
00019  *
00020  * 10-Dec-88  Gregg Kellogg (gk) at NeXT
00021  *      Created.
00022  *
00023  */ 
00024 #import <mach/mach_types.h>
00025 #import <mach/message.h>
00026 
00027 /*
00028  * Message component type codes on stream port.
00029  */
00030 typedef struct {
00031         msg_type_t      typeType;
00032         unsigned int    type;
00033 #define SND_MT_PLAY_DATA        0       // data to be played (with size)
00034 #define SND_MT_RECORD_DATA      1       // number of bytes to record
00035 #define SND_MT_OPTIONS          2       // high/low water and dma size options
00036 #define SND_MT_CONTROL          3       // await/abort/pause/continue
00037 #define SND_MT_NDMA             4       // number of dma descs in stream.
00038 } snd_msg_type_t;
00039 
00040 /*
00041  * Interface message formats
00042  */
00043 
00044 /*
00045  * Messages sent from the kernel
00046  */
00047 typedef struct {
00048         msg_header_t    header;
00049         msg_type_t      data_tagType;
00050         int             data_tag;
00051         msg_type_long_t dataType;
00052         pointer_t       recorded_data;
00053 } snd_recorded_data_t;
00054 
00055 typedef struct {
00056         msg_header_t    header;
00057         msg_type_t      data_tagType;
00058         int             data_tag;
00059 } snd_taged_reply_t;
00060 
00061 typedef struct {
00062         msg_header_t    header;
00063         msg_type_t      dataType;
00064         int             nsamples;
00065 } snd_ret_samples_t;
00066 
00067 typedef struct {
00068         msg_header_t    header;
00069         msg_type_t      dataType;
00070         unsigned int    parms;
00071 #define SND_PARM_LOWPASS        0x1
00072 #define SND_PARM_SPEAKER        0x2
00073 #define SND_PARM_ZEROFILL       0x4
00074 } snd_ret_parms_t;
00075 
00076 typedef struct {
00077         msg_header_t    header;
00078         msg_type_t      dataType;
00079         unsigned int    volume;
00080 #define SND_VOLUME_RCHAN_MASK   0xff
00081 #define SND_VOLUME_RCHAN_SHIFT  0
00082 #define SND_VOLUME_LCHAN_MASK   0xff00
00083 #define SND_VOLUME_LCHAN_SHIFT  8
00084 } snd_ret_volume_t;
00085 
00086 typedef struct {
00087         msg_header_t    header;
00088         msg_type_t      dataType;
00089         int             dsp_regs;
00090 } snd_ret_dsp_regs_t;
00091 
00092 typedef struct {
00093         msg_header_t    header;
00094         msg_type_t      dataType;
00095         unsigned int    ill_msgid;      // message id of bad message.
00096         unsigned int    ill_error;      // error returned
00097 #define SND_NO_ERROR    100     // non-error ack.
00098 #define SND_BAD_PORT    101     // message sent to wrong port
00099 #define SND_BAD_MSG     102     // unknown message id
00100 #define SND_BAD_PARM    103     // bad parameter list in message
00101 #define SND_NO_MEMORY   104     // can't allocate memory (record)
00102 #define SND_PORT_BUSY   105     // access req'd to existing excl access port
00103 #define SND_NOT_OWNER   106     // must be owner to do this
00104 #define SND_BAD_CHAN    107     // dsp channel hasn't been inited
00105 #define SND_SEARCH      108     // couldn't find requested resource
00106 #define SND_NODATA      109     // can't send data commands to dsp in this mode
00107 #define SND_NOPAGER     110     // can't allocate from external pager (record).
00108 #define SND_NOTALIGNED  111     // bad data alignment.
00109 #define SND_BAD_HOST_PRIV 112   // bad host privilege port passed.
00110 #define SND_BAD_PROTO   113     // can't do requested operation given protocol
00111 } snd_illegal_msg_t;
00112 
00113 typedef struct {msg_header_t header;} snd_ret_mach_port_t;
00114 
00115 typedef struct {
00116         msg_header_t    header;
00117         msg_type_t      dataType;
00118         unsigned int    mask;
00119         unsigned int    flags;
00120         unsigned int    value;
00121 } snd_dsp_cond_true_t;
00122 
00123 /*
00124  * Messages sent from the user to the device
00125  */
00126 typedef struct {
00127         msg_header_t    header;
00128         msg_type_t      Type;
00129         unsigned int    stream;
00130         msg_type_t      ownerType;
00131         mach_port_t             owner;
00132 } snd_get_stream_t;
00133 
00134 #define SND_GD_CHAN_MASK        0x7f
00135 #define SND_GD_CHAN_SHIFT       0
00136 #define SND_GD_DEVICE_MASK      0x80
00137 #define SND_GD_DEVICE_SHIFT     7
00138 
00139 #define snd_gd_bitmap(chan, device) \
00140         (((chan)<<SND_GD_CHAN_SHIFT) | ((device)<<SND_GD_DEVICE_SHIFT))
00141 
00142 #define snd_gd_isdevice(bitmap)  ((bitmap)&SND_GD_DEVICE_MASK)
00143 #define snd_gd_chan(bitmap) ((bitmap)&SND_GD_CHAN_MASK)
00144 
00145 #define SND_GD_SOUT_44  snd_gd_bitmap(0, TRUE)
00146 #define SND_GD_SOUT_22  snd_gd_bitmap(1, TRUE)
00147 #define SND_GD_SIN      snd_gd_bitmap(2, TRUE)
00148 #define SND_GD_DSP_OUT  snd_gd_bitmap(DSP_SO_CHAN, FALSE) // sound out from dsp
00149 #define SND_GD_DSP_IN   snd_gd_bitmap(DSP_SI_CHAN, FALSE) // sound in to dsp
00150 
00151 typedef struct {
00152         msg_header_t    header;
00153         msg_type_t      Type;
00154         unsigned int    parms;
00155 } snd_set_parms_t;
00156 
00157 typedef struct {
00158         msg_header_t    header;
00159         msg_type_t      Type;
00160         unsigned int    volume;
00161 } snd_set_volume_t;
00162 
00163 typedef struct {
00164         msg_header_t    header;
00165         msg_type_t      Type;
00166         unsigned int    proto;
00167         msg_type_t      ownerType;
00168         mach_port_t             owner;
00169 } snd_dsp_proto_t;
00170 
00171 #define SND_DSP_PROTO_DSPERR    0x1     // DSP error messages enabled
00172 #define SND_DSP_PROTO_C_DMA     0x2     // complex dma mode
00173 #define SND_DSP_PROTO_S_DMA     0x4     // simple dma mode
00174 #define SND_DSP_PROTO_LINKOUT   0x8     // link directly to sound out
00175 #define SND_DSP_PROTO_LINKIN    0x10    // link directly to sound out
00176 #define SND_DSP_PROTO_SOUNDDATA 0x20    // all data to dsp is sound samples
00177 #define SND_DSP_PROTO_HIGH      0x40    // 44khz sound out
00178 #define SND_DSP_PROTO_HFABORT   0x80    // DSP abort indicated by HF2 & HF3
00179 #define SND_DSP_PROTO_DSPMSG    0x100   // DSP messages enabled
00180 #define SND_DSP_PROTO_RAW       0x200   // DSP messages enabled
00181 #define SND_DSP_PROTO_TXD       0x400   // DSP txd interrupt enable (040 only)
00182 
00183 typedef msg_header_t    snd_get_parms_t;
00184 typedef msg_header_t    snd_get_volume_t;
00185 
00186 typedef struct {
00187         msg_header_t    header;
00188         msg_type_t      ownerType;
00189         mach_port_t             owner;          // owner port
00190 } snd_get_dsp_cmd_mach_port_t;
00191 
00192 typedef struct {
00193         msg_header_t    header;
00194         msg_type_t      negType;
00195         mach_port_t             negotiation;    // negotiation port
00196         msg_type_t      ownerType;
00197         mach_port_t             owner;          // owner port
00198 } snd_set_owner_t;
00199 
00200 typedef struct {
00201         msg_header_t    header;
00202         msg_type_t      old_ownerType;
00203         mach_port_t             old_owner;
00204         msg_type_t      new_ownerType;
00205         mach_port_t             new_owner;
00206         msg_type_t      new_negotiationType;
00207         mach_port_t             new_negotiation;
00208 } snd_reset_owner_t;
00209 
00210 typedef struct {
00211         msg_header_t    header;
00212         msg_type_t      privType;
00213         mach_port_t             priv;
00214 } snd_new_device_t;
00215 
00216 typedef struct {
00217         msg_header_t    header;
00218         msg_type_long_t dataType;
00219 #define DSP_DEF_BUFSIZE 512                     // default #words in each buf
00220         unsigned int    data[DSP_DEF_BUFSIZE];
00221 } snd_dsp_msg_t;
00222 
00223 typedef struct {
00224         msg_header_t    header;
00225         msg_type_long_t dataType;
00226 #define DSP_DEF_EBUFSIZE 32                     // default #words in each buf
00227         unsigned int    data[DSP_DEF_EBUFSIZE];
00228 } snd_dsp_err_t;
00229 
00230 /*
00231  * Messages sent from the user to a stream port
00232  * There's only one message, but it can contain some combination
00233  * of several different sub-messages.
00234  */
00235 typedef struct snd_stream_msg {
00236         msg_header_t    header;
00237         msg_type_t      data_tagType;
00238         int             data_tag;               // tag for this request, 0 def
00239 } snd_stream_msg_t;
00240 
00241 typedef struct {
00242         snd_msg_type_t  msgtype;
00243         msg_type_t      optionsType;
00244         unsigned int    options;
00245 #define SND_DM_STARTED_MSG      0x01
00246 #define SND_DM_COMPLETED_MSG    0x02
00247 #define SND_DM_ABORTED_MSG      0x04
00248 #define SND_DM_PAUSED_MSG       0x08
00249 #define SND_DM_RESUMED_MSG      0x10
00250 #define SND_DM_OVERFLOW_MSG     0x20
00251 #define SND_DM_PREEMPT          0x40
00252         msg_type_t      reg_portType;
00253         mach_port_t             reg_port;       // remote port for region messages
00254         msg_type_long_t dataType;
00255         pointer_t       data;
00256 } snd_stream_play_data_t;
00257 
00258 typedef struct {
00259         snd_msg_type_t  msgtype;
00260         msg_type_t      optionsType;
00261         unsigned int    options;
00262         int             nbytes;
00263         msg_type_t      reg_portType;
00264         mach_port_t             reg_port;       // remote port for region messages
00265         msg_type_t      filenameType;   // filename string follows inline
00266 } snd_stream_record_data_t;
00267 
00268 typedef struct {
00269         snd_msg_type_t  msgtype;
00270         msg_type_t      controlType;
00271         unsigned int    snd_control;
00272 #define SND_DC_AWAIT    0x1
00273 #define SND_DC_ABORT    0x2
00274 #define SND_DC_PAUSE    0x4
00275 #define SND_DC_RESUME   0x8
00276 } snd_stream_control_t;
00277 
00278 typedef struct {
00279         snd_msg_type_t  msg_type;
00280         msg_type_t      optionsType;
00281         unsigned int    high_water;
00282         unsigned int    low_water;
00283         unsigned int    dma_size;
00284 } snd_stream_options_t;
00285 
00286 /*
00287  * Number of dma descriptors used in stream.
00288  */
00289 typedef struct {
00290         snd_msg_type_t  msg_type;
00291         msg_type_t      ndmaType;
00292         unsigned int    ndma;
00293 } snd_stream_ndma_t;
00294 
00295 /*
00296  * Nsamples is another message on a stream port.
00297  */
00298 typedef struct {
00299         msg_header_t    header;
00300 } snd_stream_nsamples_t;
00301 
00302 /*
00303  * Messages sent by user to dsp command port.
00304  */
00305 typedef struct {
00306         msg_header_t    header;
00307         msg_type_t      reg_maskType;
00308         unsigned int    mask;           // mask of flags to inspect
00309         unsigned int    flags;          // set of flags that must be on
00310         msg_type_t      ret_portType;
00311         mach_port_t             ret_port;       // remote port for ret_msg
00312         msg_type_long_t ret_msgType;
00313         /*
00314          * follows is the body of the (simple) message to send
00315          * either to msg_remote_port, or to snd_var.dsp  (if PORT_NULL).
00316          */
00317         msg_header_t    ret_msg;        // possibly longer than this.
00318 } snd_dspcmd_event_t;
00319 
00320 typedef struct {
00321         msg_header_t    header;
00322         msg_type_t      dataType;
00323         int             addr;           // .. of dsp buffer
00324         int             size;           // .. of dsp buffer
00325         int             skip;           // dma skip factor
00326 #define DSP_SKIP_0      1
00327 #define DSP_SKIP_CONTIG DSP_SKIP_0
00328 #define DSP_SKIP_1      2
00329 #define DSP_SKIP_2      3
00330 #define DSP_SKIP_3      4
00331 #define DSP_SKIP_4      5
00332         int             space;          // dsp space of buffer
00333 #define DSP_SPACE_X     1
00334 #define DSP_SPACE_Y     2
00335 #define DSP_SPACE_L     3
00336 #define DSP_SPACE_P     4
00337         int             mode;           // mode of dma [1..5]
00338 #define DSP_MODE8       1
00339 #define DSP_MODE16      2
00340 #define DSP_MODE24      3
00341 #define DSP_MODE32      4
00342 #define DSP_MODE2416    5               /* Pseudo-dma shift 24 to 16 bits */
00343 #define SND_MODE_MIN    1               /* Minimum value for mode */
00344 #define SND_MODE_MAX    5               /* Maximum value for mode */
00345         int             chan;           // channel for dma
00346 #define DSP_USER_REQ_CHAN 0     // for user-requested dma's
00347 #define DSP_SO_CHAN     1       // for sound-out dma's.
00348 #define DSP_SI_CHAN     2       // for sound-in dma's
00349 #define DSP_USER_CHAN   3       // first user chan
00350 
00351 #define DSP_N_USER_CHAN 16      // 0..15 for user dma.
00352 } snd_dspcmd_chandata_t;
00353 
00354 typedef struct {
00355         msg_header_t    header;
00356         msg_type_t      chandataType;
00357         int             addr;           // .. of dsp buffer
00358         int             size;           // .. of dsp buffer
00359         int             skip;           // dma skip factor
00360         int             space;          // dsp space of buffer
00361         int             mode;           // mode of dma [1..5]
00362         msg_type_long_t dataType;
00363         pointer_t       data;           // data to output
00364 } snd_dspcmd_dma_t;
00365 
00366 typedef msg_header_t    snd_dspcmd_abortdma_t;
00367 typedef msg_header_t    snd_dspcmd_req_err_t;
00368 typedef msg_header_t    snd_dspcmd_req_msg_t;
00369 
00370 /*
00371  * Multi-part dspcmd_msg.
00372  */
00373 /*
00374  * Message component type codes on stream port.
00375  */
00376 typedef struct {
00377         msg_type_t      typeType;
00378         unsigned int    type;
00379 #define SND_DSP_MT_DATA         1       // 1, 2, or 4 byte data
00380 #define SND_DSP_MT_HOST_COMMAND 2       // host command
00381 #define SND_DSP_MT_HOST_FLAG    3       // host flag(s) to set
00382 #define SND_DSP_MT_RET_MSG      4       // (simple) message to send
00383 #define SND_DSP_MT_RESET        5       // hard reset the DSP
00384 #define SND_DSP_MT_GET_REGS     6       // return DSP host I/F registers
00385 #define SND_DSP_MT_CONDITION    7       // wait for condition (return msg)
00386 #define SND_DSP_MT_RDATA        8       // read 1, 2, or 4 byte data
00387 #define SND_DSP_MT_PROTO        9       // DSP protocol
00388 } snd_dsp_type_t;
00389 
00390 typedef struct {
00391         msg_header_t    header;
00392         msg_type_t      priType;
00393         int             pri;            // Priority of message group
00394 #define DSP_MSG_HIGH            0
00395 #define DSP_MSG_MED             1
00396 #define DSP_MSG_LOW             2
00397         boolean_t       atomic;         // don't preempt this msg with another
00398 } snd_dspcmd_msg_t;
00399 
00400 typedef struct {
00401         snd_dsp_type_t  msgtype;
00402         msg_type_t      conditionType;
00403         unsigned int    mask;           // mask of flags to inspect
00404         unsigned int    flags;          // set of flags that must be on
00405         msg_type_t      reply_portType;
00406         mach_port_t             reply_port;     // were to send device regs to
00407 } snd_dsp_condition_t;
00408 
00409 typedef struct {
00410         snd_dsp_type_t  msgtype;
00411         msg_type_long_t dataType;
00412         pointer_t       data;           // data to send
00413 } snd_dsp_data_t;
00414 
00415 typedef struct {
00416         snd_dsp_type_t  msgtype;
00417         msg_type_t      hcType;
00418         unsigned int    hc;             // host command
00419 } snd_dsp_host_command_t;
00420 
00421 typedef struct {
00422         snd_dsp_type_t  msgtype;
00423         msg_type_t      protoType;      // protocol modification
00424         unsigned int    proto;
00425 } snd_dsp_mt_proto_t;
00426 
00427 typedef struct {
00428         snd_dsp_type_t  msgtype;
00429         msg_type_t      hfType;
00430         unsigned int    mask;           // mask of HF0|HF1
00431         unsigned int    flags;          // flags to set
00432 } snd_dsp_host_flag_t;
00433 
00434 typedef struct {
00435         snd_dsp_type_t  msgtype;
00436         msg_type_t      ret_portType;
00437         mach_port_t             ret_port;       // remote port for ret_msg
00438         msg_type_long_t ret_msgType;
00439         /*
00440          * follows is the body of the (simple) message to send
00441          * either to msg_remote_port, or to snd_var.dspowner (if PORT_NULL).
00442          */
00443         msg_header_t    ret_msg;        // possibly longer than this.
00444 } snd_dsp_ret_msg_t;
00445 
00446 typedef struct {
00447         snd_dsp_type_t  msgtype;
00448 } snd_dsp_reset_t, snd_dsp_get_regs_t;
00449 
00450 /*
00451  * Message Id's
00452  */
00453 #define SND_MSG_BASE            0
00454 
00455 /*
00456  * User messages on stream port
00457  */
00458 #define SND_MSG_STREAM_BASE     SND_MSG_BASE+0
00459 #define SND_MSG_STREAM_MSG      SND_MSG_STREAM_BASE+0
00460 #define SND_MSG_STREAM_NSAMPLES SND_MSG_STREAM_BASE+1
00461 
00462 /*
00463  * User messages on device port
00464  */
00465 #define SND_MSG_DEVICE_BASE             SND_MSG_BASE+100
00466 #define SND_MSG_GET_STREAM              SND_MSG_DEVICE_BASE+0
00467 #define SND_MSG_SET_PARMS               SND_MSG_DEVICE_BASE+1
00468 #define SND_MSG_GET_PARMS               SND_MSG_DEVICE_BASE+2
00469 #define SND_MSG_SET_VOLUME              SND_MSG_DEVICE_BASE+3
00470 #define SND_MSG_GET_VOLUME              SND_MSG_DEVICE_BASE+4
00471 #define SND_MSG_SET_DSPOWNER            SND_MSG_DEVICE_BASE+5
00472 #define SND_MSG_SET_SNDINOWNER          SND_MSG_DEVICE_BASE+6
00473 #define SND_MSG_SET_SNDOUTOWNER         SND_MSG_DEVICE_BASE+7
00474 #define SND_MSG_DSP_PROTO               SND_MSG_DEVICE_BASE+8
00475 #define SND_MSG_GET_DSP_CMD_PORT        SND_MSG_DEVICE_BASE+9
00476 #define SND_MSG_NEW_DEVICE_PORT         SND_MSG_DEVICE_BASE+10
00477 #define SND_MSG_RESET_DSPOWNER          SND_MSG_DEVICE_BASE+11
00478 #define SND_MSG_RESET_SNDINOWNER        SND_MSG_DEVICE_BASE+12
00479 #define SND_MSG_RESET_SNDOUTOWNER       SND_MSG_DEVICE_BASE+13
00480 #define SND_MSG_SET_RAMP                SND_MSG_DEVICE_BASE+14
00481 /*
00482  * Set ramp parameter
00483  */
00484 #define SND_PARM_RAMPUP         0x1     /* Ramp sound up */
00485 #define SND_PARM_RAMPDOWN       0x2     /* Ramp sound down */
00486 
00487 /*
00488  * User messages on dsp command port
00489  */
00490 #define SND_MSG_DSP_BASE        SND_MSG_BASE+200
00491 #define SND_MSG_DSP_MSG         SND_MSG_DSP_BASE+0
00492 #define SND_MSG_DSP_EVENT       SND_MSG_DSP_BASE+1
00493 #define SND_MSG_DSP_CHANDATA    SND_MSG_DSP_BASE+2
00494 #define SND_MSG_DSP_DMAOUT      SND_MSG_DSP_BASE+3
00495 #define SND_MSG_DSP_DMAIN       SND_MSG_DSP_BASE+4
00496 #define SND_MSG_DSP_ABORTDMA    SND_MSG_DSP_BASE+5
00497 #define SND_MSG_DSP_REQ_MSG     SND_MSG_DSP_BASE+6
00498 #define SND_MSG_DSP_REQ_ERR     SND_MSG_DSP_BASE+7
00499 
00500 /*
00501  * Kernel messages returned.
00502  */
00503 #define SND_MSG_KERN_BASE       SND_MSG_BASE+300
00504 #define SND_MSG_RECORDED_DATA   SND_MSG_KERN_BASE+0
00505 #define SND_MSG_TIMED_OUT       SND_MSG_KERN_BASE+1
00506 #define SND_MSG_RET_SAMPLES     SND_MSG_KERN_BASE+2
00507 #define SND_MSG_RET_DEVICE      SND_MSG_KERN_BASE+3
00508 #define SND_MSG_RET_STREAM      SND_MSG_KERN_BASE+4
00509 #define SND_MSG_RET_PARMS       SND_MSG_KERN_BASE+5
00510 #define SND_MSG_RET_VOLUME      SND_MSG_KERN_BASE+6
00511 #define SND_MSG_OVERFLOW        SND_MSG_KERN_BASE+7
00512 #define SND_MSG_STARTED         SND_MSG_KERN_BASE+9
00513 #define SND_MSG_COMPLETED       SND_MSG_KERN_BASE+10
00514 #define SND_MSG_ABORTED         SND_MSG_KERN_BASE+11
00515 #define SND_MSG_PAUSED          SND_MSG_KERN_BASE+12
00516 #define SND_MSG_RESUMED         SND_MSG_KERN_BASE+13
00517 #define SND_MSG_ILLEGAL_MSG     SND_MSG_KERN_BASE+14
00518 #define SND_MSG_RET_DSP_ERR     SND_MSG_KERN_BASE+15
00519 #define SND_MSG_RET_DSP_MSG     SND_MSG_KERN_BASE+16
00520 #define SND_MSG_RET_CMD         SND_MSG_KERN_BASE+17
00521 #define SND_MSG_DSP_REGS        SND_MSG_KERN_BASE+18
00522 #define SND_MSG_DSP_COND_TRUE   SND_MSG_KERN_BASE+19
00523 
00524 /*
00525  * Ioctl for retrieving device port.
00526  */
00527 #ifdef  _IO
00528 #define SOUNDIOCDEVPORT _IO('A', 8)
00529 #endif  _IO
00530 
00531 /*
00532  * Routine prototypes
00533  */
00534 #if     KERNEL
00535 kern_return_t snd_reply_recorded_data (
00536         mach_port_t             remote_port,    // who to reply to
00537         int             data_tag,       // tag from region
00538         pointer_t       data,           // recorded data
00539         int             nbytes,         // number of bytes of data to send
00540         int             in_line);       // "Send data inline" flag.
00541 kern_return_t snd_reply_timed_out (
00542         mach_port_t             remote_port,    // who to send it to.
00543         int             data_tag);      // tag from region
00544 kern_return_t snd_reply_ret_samples (
00545         mach_port_t             remote_port,    // who to send it to.
00546         int             nsamples);      // number of bytes of data to record
00547 kern_return_t snd_reply_ret_device (
00548         mach_port_t             remote_port,    // who to send it to.
00549         mach_port_t             device_port);   // returned port.
00550 kern_return_t snd_reply_ret_stream (
00551         mach_port_t             remote_port,    // who to send it to.
00552         mach_port_t             stream_port);   // returned port.
00553 kern_return_t snd_reply_ret_parms (
00554         mach_port_t             remote_port,    // who to send it to.
00555         unsigned int    parms);
00556 kern_return_t snd_reply_ret_volume (
00557         mach_port_t             remote_port,    // who to send it to.
00558         unsigned int    volume);
00559 kern_return_t snd_reply_overflow (
00560         mach_port_t             remote_port,    // who to send it to.
00561         int             data_tag);      // from region
00562 kern_return_t snd_reply_started (
00563         mach_port_t             remote_port,    // who to send it to.
00564         int             data_tag);      // from region
00565 kern_return_t snd_reply_completed (
00566         mach_port_t             remote_port,    // who to send it to.
00567         int             data_tag);      // from region
00568 kern_return_t snd_reply_aborted (
00569         mach_port_t             remote_port,    // who to send it to.
00570         int             data_tag);      // from region
00571 kern_return_t snd_reply_paused (
00572         mach_port_t             remote_port,    // who to send it to.
00573         int             data_tag);      // from region
00574 kern_return_t snd_reply_resumed (
00575         mach_port_t             remote_port,    // who to send it to.
00576         int             data_tag);      // from region
00577 kern_return_t snd_reply_illegal_msg (
00578         mach_port_t             local_port,     // returned port of interest
00579         mach_port_t             remote_port,    // who to send it to.
00580         int             msg_id,         // message id with illegal syntax       
00581         int             error);         // error code
00582 kern_return_t snd_reply_dsp_err (
00583         mach_port_t             remote_port);   // who to send it to.
00584 kern_return_t snd_reply_dsp_msg (
00585         mach_port_t             remote_port);   // who to send it to.
00586 kern_return_t snd_reply_dsp_cmd_port(
00587         mach_port_t             cmd_port,       // port to return.
00588         mach_port_t             remote_port);   // where to return it
00589 kern_return_t snd_reply_dsp_regs (
00590         int             regs);          // DSP host I/F registers (not recieve)
00591 kern_return_t snd_reply_dsp_cond_true ( // reply indicating condition true
00592         vm_address_t    ret_cond);      // reply_port, status and conditions
00593 #endif  KERNEL
00594 
00595 #endif