Annotation of quake2/rhapsody/snd_next.m, revision 1.1.1.1

1.1       root        1: 
                      2: #import <servers/netname.h>
                      3: #import <libc.h>
                      4: 
                      5: #include "../client/client.h"
                      6: 
                      7: double snd_basetime;
                      8: port_t devPort;
                      9: 
                     10: extern port_t  task_self_;
                     11: #define        task_self()     task_self_
                     12: 
                     13: //========================================================================
                     14: 
                     15: #ifndef        _ntsoundNTSound
                     16: #define        _ntsoundNTSound
                     17: 
                     18: /* Module NTSound */
                     19: 
                     20: #include <mach/kern_return.h>
                     21: #include <mach/port.h>
                     22: #include <mach/message.h>
                     23: 
                     24: #ifndef        mig_external
                     25: #define mig_external extern
                     26: #endif
                     27: 
                     28: #include <mach/std_types.h>
                     29: #include <mach/mach_types.h>
                     30: typedef short *sound_data_t;
                     31: 
                     32: #define NTSOUNDNAME "NEXTIME_Sound"
                     33: 
                     34: /* Routine ntsoundAcquire */
                     35: mig_external kern_return_t ntsoundAcquire (
                     36:         port_t kern_serv_port,
                     37:         port_t owner_port,
                     38:         vm_offset_t *dmaAddress,
                     39:         int *dmaSize,
                     40:         int *success);
                     41: 
                     42: /* Routine ntsoundRelease */
                     43: mig_external kern_return_t ntsoundRelease (
                     44:         port_t kern_serv_port,
                     45:         port_t owner_port);
                     46: 
                     47: /* Routine ntsoundStart */
                     48: mig_external kern_return_t ntsoundStart (
                     49:         port_t kern_serv_port,
                     50:         port_t owner_port);
                     51: 
                     52: /* Routine ntsoundStop */
                     53: mig_external kern_return_t ntsoundStop (
                     54:         port_t kern_serv_port,
                     55:         port_t owner_port);
                     56: 
                     57: /* Routine ntsoundConfig */
                     58: mig_external kern_return_t ntsoundConfig (
                     59:         port_t kern_serv_port,
                     60:         port_t owner_port,
                     61:         int channelCount,
                     62:         int samplingRate,
                     63:         int encoding,
                     64:         int useInterrupts);
                     65: 
                     66: /* Routine ntsoundBytesProcessed */
                     67: mig_external kern_return_t ntsoundBytesProcessed (
                     68:         port_t kern_serv_port,
                     69:         port_t owner_port,
                     70:         int *byte_count);
                     71: 
                     72: /* Routine ntsoundDMACount */
                     73: mig_external kern_return_t ntsoundDMACount (
                     74:         port_t kern_serv_port,
                     75:         port_t owner_port,
                     76:         int *dma_count);
                     77: 
                     78: /* Routine ntsoundInterruptCount */
                     79: mig_external kern_return_t ntsoundInterruptCount (
                     80:         port_t kern_serv_port,
                     81:         port_t owner_port,
                     82:         int *irq_count);
                     83: 
                     84: /* Routine ntsoundWrite */
                     85: mig_external kern_return_t ntsoundWrite (
                     86:         port_t kern_serv_port,
                     87:         port_t owner_port,
                     88:         sound_data_t data,
                     89:         unsigned int dataCnt,
                     90:         int *actual_count);
                     91: 
                     92: /* Routine ntsoundSetVolume */
                     93: mig_external kern_return_t ntsoundSetVolume (
                     94:         port_t kern_serv_port,
                     95:         port_t owner_port,
                     96:         int value);
                     97: 
                     98: /* Routine ntsoundWireRange */
                     99: mig_external kern_return_t ntsoundWireRange (
                    100:         port_t device_port,
                    101:         port_t token,
                    102:         port_t task,
                    103:         vm_offset_t addr,
                    104:         vm_size_t size,
                    105:         boolean_t wire);
                    106: 
                    107: #endif _ntsoundNTSound
                    108: 
                    109: //========================================================================
                    110: 
                    111: extern port_t  name_server_port;
                    112: 
                    113: #define NX_SoundDeviceParameterKeyBase         0
                    114: #define NX_SoundDeviceParameterValueBase       200
                    115: #define NX_SoundStreamParameterKeyBase         400
                    116: #define NX_SoundStreamParameterValueBase       600
                    117: #define NX_SoundParameterTagMax                        799
                    118: 
                    119: typedef enum _NXSoundParameterTag {
                    120:    NX_SoundDeviceBufferSize = NX_SoundDeviceParameterKeyBase,
                    121:    NX_SoundDeviceBufferCount,
                    122:    NX_SoundDeviceDetectPeaks,
                    123:    NX_SoundDeviceRampUp,
                    124:    NX_SoundDeviceRampDown,
                    125:    NX_SoundDeviceInsertZeros,
                    126:    NX_SoundDeviceDeemphasize,
                    127:    NX_SoundDeviceMuteSpeaker,
                    128:    NX_SoundDeviceMuteHeadphone,
                    129:    NX_SoundDeviceMuteLineOut,
                    130:    NX_SoundDeviceOutputLoudness,
                    131:    NX_SoundDeviceOutputAttenuationStereo,
                    132:    NX_SoundDeviceOutputAttenuationLeft,
                    133:    NX_SoundDeviceOutputAttenuationRight,
                    134:    NX_SoundDeviceAnalogInputSource,
                    135:    NX_SoundDeviceMonitorAttenuation,
                    136:    NX_SoundDeviceInputGainStereo,
                    137:    NX_SoundDeviceInputGainLeft,
                    138:    NX_SoundDeviceInputGainRight,
                    139: 
                    140:    NX_SoundDeviceAnalogInputSource_Microphone
                    141:        = NX_SoundDeviceParameterValueBase,
                    142:    NX_SoundDeviceAnalogInputSource_LineIn,
                    143: 
                    144:    NX_SoundStreamDataEncoding = NX_SoundStreamParameterKeyBase,
                    145:    NX_SoundStreamSamplingRate,
                    146:    NX_SoundStreamChannelCount,
                    147:    NX_SoundStreamHighWaterMark,
                    148:    NX_SoundStreamLowWaterMark,
                    149:    NX_SoundStreamSource,
                    150:    NX_SoundStreamSink,
                    151:    NX_SoundStreamDetectPeaks,
                    152:    NX_SoundStreamGainStereo,
                    153:    NX_SoundStreamGainLeft,
                    154:    NX_SoundStreamGainRight,
                    155: 
                    156:    NX_SoundStreamDataEncoding_Linear16 = NX_SoundStreamParameterValueBase,
                    157:    NX_SoundStreamDataEncoding_Linear8,
                    158:    NX_SoundStreamDataEncoding_Mulaw8,
                    159:    NX_SoundStreamDataEncoding_Alaw8,
                    160:    NX_SoundStreamDataEncoding_AES,
                    161:    NX_SoundStreamSource_Analog,
                    162:    NX_SoundStreamSource_AES,
                    163:    NX_SoundStreamSink_Analog,
                    164:    NX_SoundStreamSink_AES
                    165: } NXSoundParameterTag;
                    166: 
                    167: //========================================================================
                    168: 
                    169: //#include "NTSound.h"
                    170: #include <mach/mach_types.h>
                    171: #include <mach/message.h>
                    172: #include <mach/mig_errors.h>
                    173: #include <mach/msg_type.h>
                    174: #if    !defined(KERNEL) && !defined(MIG_NO_STRINGS)
                    175: #include <strings.h>
                    176: #endif
                    177: /* LINTLIBRARY */
                    178: 
                    179: extern port_t mig_get_reply_port();
                    180: extern void mig_dealloc_reply_port();
                    181: 
                    182: #ifndef        mig_internal
                    183: #define        mig_internal    static
                    184: #endif
                    185: 
                    186: #ifndef        TypeCheck
                    187: #define        TypeCheck 1
                    188: #endif
                    189: 
                    190: #ifndef        UseExternRCSId
                    191: #ifdef hc
                    192: #define        UseExternRCSId          1
                    193: #endif
                    194: #endif
                    195: 
                    196: #ifndef        UseStaticMsgType
                    197: #if    !defined(hc) || defined(__STDC__)
                    198: #define        UseStaticMsgType        1
                    199: #endif
                    200: #endif
                    201: 
                    202: #define msg_request_port       msg_remote_port
                    203: #define msg_reply_port         msg_local_port
                    204: 
                    205: 
                    206: /* Routine Acquire */
                    207: mig_external kern_return_t ntsoundAcquire (
                    208:         port_t kern_serv_port,
                    209:         port_t owner_port,
                    210:         vm_offset_t *dmaAddress,
                    211:         int *dmaSize,
                    212:         int *success)
                    213: {
                    214:         typedef struct {
                    215:                 msg_header_t Head;
                    216:                 msg_type_t owner_portType;
                    217:                 port_t owner_port;
                    218:         } Request;
                    219: 
                    220:         typedef struct {
                    221:                 msg_header_t Head;
                    222:                 msg_type_t RetCodeType;
                    223:                 kern_return_t RetCode;
                    224:                 msg_type_t dmaAddressType;
                    225:                 vm_offset_t dmaAddress;
                    226:                 msg_type_t dmaSizeType;
                    227:                 int dmaSize;
                    228:                 msg_type_t successType;
                    229:                 int success;
                    230:         } Reply;
                    231: 
                    232:         union {
                    233:                 Request In;
                    234:                 Reply Out;
                    235:         } Mess;
                    236: 
                    237:         register Request *InP = &Mess.In;
                    238:         register Reply *OutP = &Mess.Out;
                    239: 
                    240:         msg_return_t msg_result;
                    241: 
                    242: #if    TypeCheck
                    243:         boolean_t msg_simple;
                    244: #endif TypeCheck
                    245: 
                    246:         unsigned int msg_size = 32;
                    247: 
                    248: #if    UseStaticMsgType
                    249:         static const msg_type_t owner_portType = {
                    250:                 /* msg_type_name = */          MSG_TYPE_PORT,
                    251:                 /* msg_type_size = */          32,
                    252:                 /* msg_type_number = */                1,
                    253:                 /* msg_type_inline = */                TRUE,
                    254:                 /* msg_type_longform = */      FALSE,
                    255:                 /* msg_type_deallocate = */    FALSE,
                    256:                 /* msg_type_unused = */                0,
                    257:         };
                    258: #endif UseStaticMsgType
                    259: 
                    260: #if    UseStaticMsgType
                    261:         static const msg_type_t RetCodeCheck = {
                    262:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    263:                 /* msg_type_size = */          32,
                    264:                 /* msg_type_number = */                1,
                    265:                 /* msg_type_inline = */                TRUE,
                    266:                 /* msg_type_longform = */      FALSE,
                    267:                 /* msg_type_deallocate = */    FALSE,
                    268:                 /* msg_type_unused = */                0
                    269:         };
                    270: #endif UseStaticMsgType
                    271: 
                    272: #if    UseStaticMsgType
                    273:         static const msg_type_t dmaAddressCheck = {
                    274:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    275:                 /* msg_type_size = */          32,
                    276:                 /* msg_type_number = */                1,
                    277:                 /* msg_type_inline = */                TRUE,
                    278:                 /* msg_type_longform = */      FALSE,
                    279:                 /* msg_type_deallocate = */    FALSE,
                    280:                 /* msg_type_unused = */                0
                    281:         };
                    282: #endif UseStaticMsgType
                    283: 
                    284: #if    UseStaticMsgType
                    285:         static const msg_type_t dmaSizeCheck = {
                    286:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    287:                 /* msg_type_size = */          32,
                    288:                 /* msg_type_number = */                1,
                    289:                 /* msg_type_inline = */                TRUE,
                    290:                 /* msg_type_longform = */      FALSE,
                    291:                 /* msg_type_deallocate = */    FALSE,
                    292:                 /* msg_type_unused = */                0
                    293:         };
                    294: #endif UseStaticMsgType
                    295: 
                    296: #if    UseStaticMsgType
                    297:         static const msg_type_t successCheck = {
                    298:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    299:                 /* msg_type_size = */          32,
                    300:                 /* msg_type_number = */                1,
                    301:                 /* msg_type_inline = */                TRUE,
                    302:                 /* msg_type_longform = */      FALSE,
                    303:                 /* msg_type_deallocate = */    FALSE,
                    304:                 /* msg_type_unused = */                0
                    305:         };
                    306: #endif UseStaticMsgType
                    307: 
                    308: #if    UseStaticMsgType
                    309:         InP->owner_portType = owner_portType;
                    310: #else  UseStaticMsgType
                    311:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                    312:         InP->owner_portType.msg_type_size = 32;
                    313:         InP->owner_portType.msg_type_number = 1;
                    314:         InP->owner_portType.msg_type_inline = TRUE;
                    315:         InP->owner_portType.msg_type_longform = FALSE;
                    316:         InP->owner_portType.msg_type_deallocate = FALSE;
                    317: #endif UseStaticMsgType
                    318: 
                    319:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                    320: 
                    321:         InP->Head.msg_simple = FALSE;
                    322:         InP->Head.msg_size = msg_size;
                    323:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                    324:         InP->Head.msg_request_port = kern_serv_port;
                    325:         InP->Head.msg_reply_port = mig_get_reply_port();
                    326:         InP->Head.msg_id = 1008;
                    327: 
                    328:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                    329:         if (msg_result != RPC_SUCCESS) {
                    330:                 if (msg_result == RCV_INVALID_PORT)
                    331:                         mig_dealloc_reply_port();
                    332:                 return msg_result;
                    333:         }
                    334: 
                    335: #if    TypeCheck
                    336:         msg_size = OutP->Head.msg_size;
                    337:         msg_simple = OutP->Head.msg_simple;
                    338: #endif TypeCheck
                    339: 
                    340:         if (OutP->Head.msg_id != 1108)
                    341:                 return MIG_REPLY_MISMATCH;
                    342: 
                    343: #if    TypeCheck
                    344:         if (((msg_size != 56) || (msg_simple != TRUE)) &&
                    345:             ((msg_size != sizeof(death_pill_t)) ||
                    346:              (msg_simple != TRUE) ||
                    347:              (OutP->RetCode == KERN_SUCCESS)))
                    348:                 return MIG_TYPE_ERROR;
                    349: #endif TypeCheck
                    350: 
                    351: #if    TypeCheck
                    352: #if    UseStaticMsgType
                    353:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                    354: #else  UseStaticMsgType
                    355:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                    356:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                    357:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                    358:             (OutP->RetCodeType.msg_type_number != 1) ||
                    359:             (OutP->RetCodeType.msg_type_size != 32))
                    360: #endif UseStaticMsgType
                    361:                 return MIG_TYPE_ERROR;
                    362: #endif TypeCheck
                    363: 
                    364:         if (OutP->RetCode != KERN_SUCCESS)
                    365:                 return OutP->RetCode;
                    366: 
                    367: #if    TypeCheck
                    368: #if    UseStaticMsgType
                    369:         if (* (int *) &OutP->dmaAddressType != * (int *) &dmaAddressCheck)
                    370: #else  UseStaticMsgType
                    371:         if ((OutP->dmaAddressType.msg_type_inline != TRUE) ||
                    372:             (OutP->dmaAddressType.msg_type_longform != FALSE) ||
                    373:             (OutP->dmaAddressType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                    374:             (OutP->dmaAddressType.msg_type_number != 1) ||
                    375:             (OutP->dmaAddressType.msg_type_size != 32))
                    376: #endif UseStaticMsgType
                    377:                 return MIG_TYPE_ERROR;
                    378: #endif TypeCheck
                    379: 
                    380:         *dmaAddress /* dmaAddress */ = /* *dmaAddress */ OutP->dmaAddress;
                    381: 
                    382: #if    TypeCheck
                    383: #if    UseStaticMsgType
                    384:         if (* (int *) &OutP->dmaSizeType != * (int *) &dmaSizeCheck)
                    385: #else  UseStaticMsgType
                    386:         if ((OutP->dmaSizeType.msg_type_inline != TRUE) ||
                    387:             (OutP->dmaSizeType.msg_type_longform != FALSE) ||
                    388:             (OutP->dmaSizeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                    389:             (OutP->dmaSizeType.msg_type_number != 1) ||
                    390:             (OutP->dmaSizeType.msg_type_size != 32))
                    391: #endif UseStaticMsgType
                    392:                 return MIG_TYPE_ERROR;
                    393: #endif TypeCheck
                    394: 
                    395:         *dmaSize /* dmaSize */ = /* *dmaSize */ OutP->dmaSize;
                    396: 
                    397: #if    TypeCheck
                    398: #if    UseStaticMsgType
                    399:         if (* (int *) &OutP->successType != * (int *) &successCheck)
                    400: #else  UseStaticMsgType
                    401:         if ((OutP->successType.msg_type_inline != TRUE) ||
                    402:             (OutP->successType.msg_type_longform != FALSE) ||
                    403:             (OutP->successType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                    404:             (OutP->successType.msg_type_number != 1) ||
                    405:             (OutP->successType.msg_type_size != 32))
                    406: #endif UseStaticMsgType
                    407:                 return MIG_TYPE_ERROR;
                    408: #endif TypeCheck
                    409: 
                    410:         *success /* success */ = /* *success */ OutP->success;
                    411: 
                    412:         return OutP->RetCode;
                    413: }
                    414: 
                    415: /* Routine Release */
                    416: mig_external kern_return_t ntsoundRelease (
                    417:         port_t kern_serv_port,
                    418:         port_t owner_port)
                    419: {
                    420:         typedef struct {
                    421:                 msg_header_t Head;
                    422:                 msg_type_t owner_portType;
                    423:                 port_t owner_port;
                    424:         } Request;
                    425: 
                    426:         typedef struct {
                    427:                 msg_header_t Head;
                    428:                 msg_type_t RetCodeType;
                    429:                 kern_return_t RetCode;
                    430:         } Reply;
                    431: 
                    432:         union {
                    433:                 Request In;
                    434:                 Reply Out;
                    435:         } Mess;
                    436: 
                    437:         register Request *InP = &Mess.In;
                    438:         register Reply *OutP = &Mess.Out;
                    439: 
                    440:         msg_return_t msg_result;
                    441: 
                    442: #if    TypeCheck
                    443:         boolean_t msg_simple;
                    444: #endif TypeCheck
                    445: 
                    446:         unsigned int msg_size = 32;
                    447: 
                    448: #if    UseStaticMsgType
                    449:         static const msg_type_t owner_portType = {
                    450:                 /* msg_type_name = */          MSG_TYPE_PORT,
                    451:                 /* msg_type_size = */          32,
                    452:                 /* msg_type_number = */                1,
                    453:                 /* msg_type_inline = */                TRUE,
                    454:                 /* msg_type_longform = */      FALSE,
                    455:                 /* msg_type_deallocate = */    FALSE,
                    456:                 /* msg_type_unused = */                0,
                    457:         };
                    458: #endif UseStaticMsgType
                    459: 
                    460: #if    UseStaticMsgType
                    461:         static const msg_type_t RetCodeCheck = {
                    462:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    463:                 /* msg_type_size = */          32,
                    464:                 /* msg_type_number = */                1,
                    465:                 /* msg_type_inline = */                TRUE,
                    466:                 /* msg_type_longform = */      FALSE,
                    467:                 /* msg_type_deallocate = */    FALSE,
                    468:                 /* msg_type_unused = */                0
                    469:         };
                    470: #endif UseStaticMsgType
                    471: 
                    472: #if    UseStaticMsgType
                    473:         InP->owner_portType = owner_portType;
                    474: #else  UseStaticMsgType
                    475:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                    476:         InP->owner_portType.msg_type_size = 32;
                    477:         InP->owner_portType.msg_type_number = 1;
                    478:         InP->owner_portType.msg_type_inline = TRUE;
                    479:         InP->owner_portType.msg_type_longform = FALSE;
                    480:         InP->owner_portType.msg_type_deallocate = FALSE;
                    481: #endif UseStaticMsgType
                    482: 
                    483:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                    484: 
                    485:         InP->Head.msg_simple = FALSE;
                    486:         InP->Head.msg_size = msg_size;
                    487:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                    488:         InP->Head.msg_request_port = kern_serv_port;
                    489:         InP->Head.msg_reply_port = mig_get_reply_port();
                    490:         InP->Head.msg_id = 1009;
                    491: 
                    492:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                    493:         if (msg_result != RPC_SUCCESS) {
                    494:                 if (msg_result == RCV_INVALID_PORT)
                    495:                         mig_dealloc_reply_port();
                    496:                 return msg_result;
                    497:         }
                    498: 
                    499: #if    TypeCheck
                    500:         msg_size = OutP->Head.msg_size;
                    501:         msg_simple = OutP->Head.msg_simple;
                    502: #endif TypeCheck
                    503: 
                    504:         if (OutP->Head.msg_id != 1109)
                    505:                 return MIG_REPLY_MISMATCH;
                    506: 
                    507: #if    TypeCheck
                    508:         if (((msg_size != 32) || (msg_simple != TRUE)) &&
                    509:             ((msg_size != sizeof(death_pill_t)) ||
                    510:              (msg_simple != TRUE) ||
                    511:              (OutP->RetCode == KERN_SUCCESS)))
                    512:                 return MIG_TYPE_ERROR;
                    513: #endif TypeCheck
                    514: 
                    515: #if    TypeCheck
                    516: #if    UseStaticMsgType
                    517:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                    518: #else  UseStaticMsgType
                    519:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                    520:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                    521:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                    522:             (OutP->RetCodeType.msg_type_number != 1) ||
                    523:             (OutP->RetCodeType.msg_type_size != 32))
                    524: #endif UseStaticMsgType
                    525:                 return MIG_TYPE_ERROR;
                    526: #endif TypeCheck
                    527: 
                    528:         if (OutP->RetCode != KERN_SUCCESS)
                    529:                 return OutP->RetCode;
                    530: 
                    531:         return OutP->RetCode;
                    532: }
                    533: 
                    534: /* Routine Start */
                    535: mig_external kern_return_t ntsoundStart (
                    536:         port_t kern_serv_port,
                    537:         port_t owner_port)
                    538: {
                    539:         typedef struct {
                    540:                 msg_header_t Head;
                    541:                 msg_type_t owner_portType;
                    542:                 port_t owner_port;
                    543:         } Request;
                    544: 
                    545:         typedef struct {
                    546:                 msg_header_t Head;
                    547:                 msg_type_t RetCodeType;
                    548:                 kern_return_t RetCode;
                    549:         } Reply;
                    550: 
                    551:         union {
                    552:                 Request In;
                    553:                 Reply Out;
                    554:         } Mess;
                    555: 
                    556:         register Request *InP = &Mess.In;
                    557:         register Reply *OutP = &Mess.Out;
                    558: 
                    559:         msg_return_t msg_result;
                    560: 
                    561: #if    TypeCheck
                    562:         boolean_t msg_simple;
                    563: #endif TypeCheck
                    564: 
                    565:         unsigned int msg_size = 32;
                    566: 
                    567: #if    UseStaticMsgType
                    568:         static const msg_type_t owner_portType = {
                    569:                 /* msg_type_name = */          MSG_TYPE_PORT,
                    570:                 /* msg_type_size = */          32,
                    571:                 /* msg_type_number = */                1,
                    572:                 /* msg_type_inline = */                TRUE,
                    573:                 /* msg_type_longform = */      FALSE,
                    574:                 /* msg_type_deallocate = */    FALSE,
                    575:                 /* msg_type_unused = */                0,
                    576:         };
                    577: #endif UseStaticMsgType
                    578: 
                    579: #if    UseStaticMsgType
                    580:         static const msg_type_t RetCodeCheck = {
                    581:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    582:                 /* msg_type_size = */          32,
                    583:                 /* msg_type_number = */                1,
                    584:                 /* msg_type_inline = */                TRUE,
                    585:                 /* msg_type_longform = */      FALSE,
                    586:                 /* msg_type_deallocate = */    FALSE,
                    587:                 /* msg_type_unused = */                0
                    588:         };
                    589: #endif UseStaticMsgType
                    590: 
                    591: #if    UseStaticMsgType
                    592:         InP->owner_portType = owner_portType;
                    593: #else  UseStaticMsgType
                    594:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                    595:         InP->owner_portType.msg_type_size = 32;
                    596:         InP->owner_portType.msg_type_number = 1;
                    597:         InP->owner_portType.msg_type_inline = TRUE;
                    598:         InP->owner_portType.msg_type_longform = FALSE;
                    599:         InP->owner_portType.msg_type_deallocate = FALSE;
                    600: #endif UseStaticMsgType
                    601: 
                    602:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                    603: 
                    604:         InP->Head.msg_simple = FALSE;
                    605:         InP->Head.msg_size = msg_size;
                    606:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                    607:         InP->Head.msg_request_port = kern_serv_port;
                    608:         InP->Head.msg_reply_port = mig_get_reply_port();
                    609:         InP->Head.msg_id = 1010;
                    610: 
                    611:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                    612:         if (msg_result != RPC_SUCCESS) {
                    613:                 if (msg_result == RCV_INVALID_PORT)
                    614:                         mig_dealloc_reply_port();
                    615:                 return msg_result;
                    616:         }
                    617: 
                    618: #if    TypeCheck
                    619:         msg_size = OutP->Head.msg_size;
                    620:         msg_simple = OutP->Head.msg_simple;
                    621: #endif TypeCheck
                    622: 
                    623:         if (OutP->Head.msg_id != 1110)
                    624:                 return MIG_REPLY_MISMATCH;
                    625: 
                    626: #if    TypeCheck
                    627:         if (((msg_size != 32) || (msg_simple != TRUE)) &&
                    628:             ((msg_size != sizeof(death_pill_t)) ||
                    629:              (msg_simple != TRUE) ||
                    630:              (OutP->RetCode == KERN_SUCCESS)))
                    631:                 return MIG_TYPE_ERROR;
                    632: #endif TypeCheck
                    633: 
                    634: #if    TypeCheck
                    635: #if    UseStaticMsgType
                    636:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                    637: #else  UseStaticMsgType
                    638:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                    639:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                    640:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                    641:             (OutP->RetCodeType.msg_type_number != 1) ||
                    642:             (OutP->RetCodeType.msg_type_size != 32))
                    643: #endif UseStaticMsgType
                    644:                 return MIG_TYPE_ERROR;
                    645: #endif TypeCheck
                    646: 
                    647:         if (OutP->RetCode != KERN_SUCCESS)
                    648:                 return OutP->RetCode;
                    649: 
                    650:         return OutP->RetCode;
                    651: }
                    652: 
                    653: /* Routine Stop */
                    654: mig_external kern_return_t ntsoundStop (
                    655:         port_t kern_serv_port,
                    656:         port_t owner_port)
                    657: {
                    658:         typedef struct {
                    659:                 msg_header_t Head;
                    660:                 msg_type_t owner_portType;
                    661:                 port_t owner_port;
                    662:         } Request;
                    663: 
                    664:         typedef struct {
                    665:                 msg_header_t Head;
                    666:                 msg_type_t RetCodeType;
                    667:                 kern_return_t RetCode;
                    668:         } Reply;
                    669: 
                    670:         union {
                    671:                 Request In;
                    672:                 Reply Out;
                    673:         } Mess;
                    674: 
                    675:         register Request *InP = &Mess.In;
                    676:         register Reply *OutP = &Mess.Out;
                    677: 
                    678:         msg_return_t msg_result;
                    679: 
                    680: #if    TypeCheck
                    681:         boolean_t msg_simple;
                    682: #endif TypeCheck
                    683: 
                    684:         unsigned int msg_size = 32;
                    685: 
                    686: #if    UseStaticMsgType
                    687:         static const msg_type_t owner_portType = {
                    688:                 /* msg_type_name = */          MSG_TYPE_PORT,
                    689:                 /* msg_type_size = */          32,
                    690:                 /* msg_type_number = */                1,
                    691:                 /* msg_type_inline = */                TRUE,
                    692:                 /* msg_type_longform = */      FALSE,
                    693:                 /* msg_type_deallocate = */    FALSE,
                    694:                 /* msg_type_unused = */                0,
                    695:         };
                    696: #endif UseStaticMsgType
                    697: 
                    698: #if    UseStaticMsgType
                    699:         static const msg_type_t RetCodeCheck = {
                    700:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    701:                 /* msg_type_size = */          32,
                    702:                 /* msg_type_number = */                1,
                    703:                 /* msg_type_inline = */                TRUE,
                    704:                 /* msg_type_longform = */      FALSE,
                    705:                 /* msg_type_deallocate = */    FALSE,
                    706:                 /* msg_type_unused = */                0
                    707:         };
                    708: #endif UseStaticMsgType
                    709: 
                    710: #if    UseStaticMsgType
                    711:         InP->owner_portType = owner_portType;
                    712: #else  UseStaticMsgType
                    713:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                    714:         InP->owner_portType.msg_type_size = 32;
                    715:         InP->owner_portType.msg_type_number = 1;
                    716:         InP->owner_portType.msg_type_inline = TRUE;
                    717:         InP->owner_portType.msg_type_longform = FALSE;
                    718:         InP->owner_portType.msg_type_deallocate = FALSE;
                    719: #endif UseStaticMsgType
                    720: 
                    721:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                    722: 
                    723:         InP->Head.msg_simple = FALSE;
                    724:         InP->Head.msg_size = msg_size;
                    725:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                    726:         InP->Head.msg_request_port = kern_serv_port;
                    727:         InP->Head.msg_reply_port = mig_get_reply_port();
                    728:         InP->Head.msg_id = 1011;
                    729: 
                    730:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                    731:         if (msg_result != RPC_SUCCESS) {
                    732:                 if (msg_result == RCV_INVALID_PORT)
                    733:                         mig_dealloc_reply_port();
                    734:                 return msg_result;
                    735:         }
                    736: 
                    737: #if    TypeCheck
                    738:         msg_size = OutP->Head.msg_size;
                    739:         msg_simple = OutP->Head.msg_simple;
                    740: #endif TypeCheck
                    741: 
                    742:         if (OutP->Head.msg_id != 1111)
                    743:                 return MIG_REPLY_MISMATCH;
                    744: 
                    745: #if    TypeCheck
                    746:         if (((msg_size != 32) || (msg_simple != TRUE)) &&
                    747:             ((msg_size != sizeof(death_pill_t)) ||
                    748:              (msg_simple != TRUE) ||
                    749:              (OutP->RetCode == KERN_SUCCESS)))
                    750:                 return MIG_TYPE_ERROR;
                    751: #endif TypeCheck
                    752: 
                    753: #if    TypeCheck
                    754: #if    UseStaticMsgType
                    755:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                    756: #else  UseStaticMsgType
                    757:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                    758:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                    759:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                    760:             (OutP->RetCodeType.msg_type_number != 1) ||
                    761:             (OutP->RetCodeType.msg_type_size != 32))
                    762: #endif UseStaticMsgType
                    763:                 return MIG_TYPE_ERROR;
                    764: #endif TypeCheck
                    765: 
                    766:         if (OutP->RetCode != KERN_SUCCESS)
                    767:                 return OutP->RetCode;
                    768: 
                    769:         return OutP->RetCode;
                    770: }
                    771: 
                    772: /* Routine Config */
                    773: mig_external kern_return_t ntsoundConfig (
                    774:         port_t kern_serv_port,
                    775:         port_t owner_port,
                    776:         int channelCount,
                    777:         int samplingRate,
                    778:         int encoding,
                    779:         int useInterrupts)
                    780: {
                    781:         typedef struct {
                    782:                 msg_header_t Head;
                    783:                 msg_type_t owner_portType;
                    784:                 port_t owner_port;
                    785:                 msg_type_t channelCountType;
                    786:                 int channelCount;
                    787:                 msg_type_t samplingRateType;
                    788:                 int samplingRate;
                    789:                 msg_type_t encodingType;
                    790:                 int encoding;
                    791:                 msg_type_t useInterruptsType;
                    792:                 int useInterrupts;
                    793:         } Request;
                    794: 
                    795:         typedef struct {
                    796:                 msg_header_t Head;
                    797:                 msg_type_t RetCodeType;
                    798:                 kern_return_t RetCode;
                    799:         } Reply;
                    800: 
                    801:         union {
                    802:                 Request In;
                    803:                 Reply Out;
                    804:         } Mess;
                    805: 
                    806:         register Request *InP = &Mess.In;
                    807:         register Reply *OutP = &Mess.Out;
                    808: 
                    809:         msg_return_t msg_result;
                    810: 
                    811: #if    TypeCheck
                    812:         boolean_t msg_simple;
                    813: #endif TypeCheck
                    814: 
                    815:         unsigned int msg_size = 64;
                    816: 
                    817: #if    UseStaticMsgType
                    818:         static const msg_type_t owner_portType = {
                    819:                 /* msg_type_name = */          MSG_TYPE_PORT,
                    820:                 /* msg_type_size = */          32,
                    821:                 /* msg_type_number = */                1,
                    822:                 /* msg_type_inline = */                TRUE,
                    823:                 /* msg_type_longform = */      FALSE,
                    824:                 /* msg_type_deallocate = */    FALSE,
                    825:                 /* msg_type_unused = */                0,
                    826:         };
                    827: #endif UseStaticMsgType
                    828: 
                    829: #if    UseStaticMsgType
                    830:         static const msg_type_t channelCountType = {
                    831:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    832:                 /* msg_type_size = */          32,
                    833:                 /* msg_type_number = */                1,
                    834:                 /* msg_type_inline = */                TRUE,
                    835:                 /* msg_type_longform = */      FALSE,
                    836:                 /* msg_type_deallocate = */    FALSE,
                    837:                 /* msg_type_unused = */                0,
                    838:         };
                    839: #endif UseStaticMsgType
                    840: 
                    841: #if    UseStaticMsgType
                    842:         static const msg_type_t samplingRateType = {
                    843:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    844:                 /* msg_type_size = */          32,
                    845:                 /* msg_type_number = */                1,
                    846:                 /* msg_type_inline = */                TRUE,
                    847:                 /* msg_type_longform = */      FALSE,
                    848:                 /* msg_type_deallocate = */    FALSE,
                    849:                 /* msg_type_unused = */                0,
                    850:         };
                    851: #endif UseStaticMsgType
                    852: 
                    853: #if    UseStaticMsgType
                    854:         static const msg_type_t encodingType = {
                    855:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    856:                 /* msg_type_size = */          32,
                    857:                 /* msg_type_number = */                1,
                    858:                 /* msg_type_inline = */                TRUE,
                    859:                 /* msg_type_longform = */      FALSE,
                    860:                 /* msg_type_deallocate = */    FALSE,
                    861:                 /* msg_type_unused = */                0,
                    862:         };
                    863: #endif UseStaticMsgType
                    864: 
                    865: #if    UseStaticMsgType
                    866:         static const msg_type_t useInterruptsType = {
                    867:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    868:                 /* msg_type_size = */          32,
                    869:                 /* msg_type_number = */                1,
                    870:                 /* msg_type_inline = */                TRUE,
                    871:                 /* msg_type_longform = */      FALSE,
                    872:                 /* msg_type_deallocate = */    FALSE,
                    873:                 /* msg_type_unused = */                0,
                    874:         };
                    875: #endif UseStaticMsgType
                    876: 
                    877: #if    UseStaticMsgType
                    878:         static const msg_type_t RetCodeCheck = {
                    879:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                    880:                 /* msg_type_size = */          32,
                    881:                 /* msg_type_number = */                1,
                    882:                 /* msg_type_inline = */                TRUE,
                    883:                 /* msg_type_longform = */      FALSE,
                    884:                 /* msg_type_deallocate = */    FALSE,
                    885:                 /* msg_type_unused = */                0
                    886:         };
                    887: #endif UseStaticMsgType
                    888: 
                    889: #if    UseStaticMsgType
                    890:         InP->owner_portType = owner_portType;
                    891: #else  UseStaticMsgType
                    892:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                    893:         InP->owner_portType.msg_type_size = 32;
                    894:         InP->owner_portType.msg_type_number = 1;
                    895:         InP->owner_portType.msg_type_inline = TRUE;
                    896:         InP->owner_portType.msg_type_longform = FALSE;
                    897:         InP->owner_portType.msg_type_deallocate = FALSE;
                    898: #endif UseStaticMsgType
                    899: 
                    900:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                    901: 
                    902: #if    UseStaticMsgType
                    903:         InP->channelCountType = channelCountType;
                    904: #else  UseStaticMsgType
                    905:         InP->channelCountType.msg_type_name = MSG_TYPE_INTEGER_32;
                    906:         InP->channelCountType.msg_type_size = 32;
                    907:         InP->channelCountType.msg_type_number = 1;
                    908:         InP->channelCountType.msg_type_inline = TRUE;
                    909:         InP->channelCountType.msg_type_longform = FALSE;
                    910:         InP->channelCountType.msg_type_deallocate = FALSE;
                    911: #endif UseStaticMsgType
                    912: 
                    913:         InP->channelCount /* channelCount */ = /* channelCount */ channelCount;
                    914: 
                    915: #if    UseStaticMsgType
                    916:         InP->samplingRateType = samplingRateType;
                    917: #else  UseStaticMsgType
                    918:         InP->samplingRateType.msg_type_name = MSG_TYPE_INTEGER_32;
                    919:         InP->samplingRateType.msg_type_size = 32;
                    920:         InP->samplingRateType.msg_type_number = 1;
                    921:         InP->samplingRateType.msg_type_inline = TRUE;
                    922:         InP->samplingRateType.msg_type_longform = FALSE;
                    923:         InP->samplingRateType.msg_type_deallocate = FALSE;
                    924: #endif UseStaticMsgType
                    925: 
                    926:         InP->samplingRate /* samplingRate */ = /* samplingRate */ samplingRate;
                    927: 
                    928: #if    UseStaticMsgType
                    929:         InP->encodingType = encodingType;
                    930: #else  UseStaticMsgType
                    931:         InP->encodingType.msg_type_name = MSG_TYPE_INTEGER_32;
                    932:         InP->encodingType.msg_type_size = 32;
                    933:         InP->encodingType.msg_type_number = 1;
                    934:         InP->encodingType.msg_type_inline = TRUE;
                    935:         InP->encodingType.msg_type_longform = FALSE;
                    936:         InP->encodingType.msg_type_deallocate = FALSE;
                    937: #endif UseStaticMsgType
                    938: 
                    939:         InP->encoding /* encoding */ = /* encoding */ encoding;
                    940: 
                    941: #if    UseStaticMsgType
                    942:         InP->useInterruptsType = useInterruptsType;
                    943: #else  UseStaticMsgType
                    944:         InP->useInterruptsType.msg_type_name = MSG_TYPE_INTEGER_32;
                    945:         InP->useInterruptsType.msg_type_size = 32;
                    946:         InP->useInterruptsType.msg_type_number = 1;
                    947:         InP->useInterruptsType.msg_type_inline = TRUE;
                    948:         InP->useInterruptsType.msg_type_longform = FALSE;
                    949:         InP->useInterruptsType.msg_type_deallocate = FALSE;
                    950: #endif UseStaticMsgType
                    951: 
                    952:         InP->useInterrupts /* useInterrupts */ = /* useInterrupts */ useInterrupts;
                    953: 
                    954:         InP->Head.msg_simple = FALSE;
                    955:         InP->Head.msg_size = msg_size;
                    956:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                    957:         InP->Head.msg_request_port = kern_serv_port;
                    958:         InP->Head.msg_reply_port = mig_get_reply_port();
                    959:         InP->Head.msg_id = 1012;
                    960: 
                    961:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                    962:         if (msg_result != RPC_SUCCESS) {
                    963:                 if (msg_result == RCV_INVALID_PORT)
                    964:                         mig_dealloc_reply_port();
                    965:                 return msg_result;
                    966:         }
                    967: 
                    968: #if    TypeCheck
                    969:         msg_size = OutP->Head.msg_size;
                    970:         msg_simple = OutP->Head.msg_simple;
                    971: #endif TypeCheck
                    972: 
                    973:         if (OutP->Head.msg_id != 1112)
                    974:                 return MIG_REPLY_MISMATCH;
                    975: 
                    976: #if    TypeCheck
                    977:         if (((msg_size != 32) || (msg_simple != TRUE)) &&
                    978:             ((msg_size != sizeof(death_pill_t)) ||
                    979:              (msg_simple != TRUE) ||
                    980:              (OutP->RetCode == KERN_SUCCESS)))
                    981:                 return MIG_TYPE_ERROR;
                    982: #endif TypeCheck
                    983: 
                    984: #if    TypeCheck
                    985: #if    UseStaticMsgType
                    986:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                    987: #else  UseStaticMsgType
                    988:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                    989:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                    990:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                    991:             (OutP->RetCodeType.msg_type_number != 1) ||
                    992:             (OutP->RetCodeType.msg_type_size != 32))
                    993: #endif UseStaticMsgType
                    994:                 return MIG_TYPE_ERROR;
                    995: #endif TypeCheck
                    996: 
                    997:         if (OutP->RetCode != KERN_SUCCESS)
                    998:                 return OutP->RetCode;
                    999: 
                   1000:         return OutP->RetCode;
                   1001: }
                   1002: 
                   1003: /* Routine BytesProcessed */
                   1004: mig_external kern_return_t ntsoundBytesProcessed (
                   1005:         port_t kern_serv_port,
                   1006:         port_t owner_port,
                   1007:         int *byte_count)
                   1008: {
                   1009:         typedef struct {
                   1010:                 msg_header_t Head;
                   1011:                 msg_type_t owner_portType;
                   1012:                 port_t owner_port;
                   1013:         } Request;
                   1014: 
                   1015:         typedef struct {
                   1016:                 msg_header_t Head;
                   1017:                 msg_type_t RetCodeType;
                   1018:                 kern_return_t RetCode;
                   1019:                 msg_type_t byte_countType;
                   1020:                 int byte_count;
                   1021:         } Reply;
                   1022: 
                   1023:         union {
                   1024:                 Request In;
                   1025:                 Reply Out;
                   1026:         } Mess;
                   1027: 
                   1028:         register Request *InP = &Mess.In;
                   1029:         register Reply *OutP = &Mess.Out;
                   1030: 
                   1031:         msg_return_t msg_result;
                   1032: 
                   1033: #if    TypeCheck
                   1034:         boolean_t msg_simple;
                   1035: #endif TypeCheck
                   1036: 
                   1037:         unsigned int msg_size = 32;
                   1038: 
                   1039: #if    UseStaticMsgType
                   1040:         static const msg_type_t owner_portType = {
                   1041:                 /* msg_type_name = */          MSG_TYPE_PORT,
                   1042:                 /* msg_type_size = */          32,
                   1043:                 /* msg_type_number = */                1,
                   1044:                 /* msg_type_inline = */                TRUE,
                   1045:                 /* msg_type_longform = */      FALSE,
                   1046:                 /* msg_type_deallocate = */    FALSE,
                   1047:                 /* msg_type_unused = */                0,
                   1048:         };
                   1049: #endif UseStaticMsgType
                   1050: 
                   1051: #if    UseStaticMsgType
                   1052:         static const msg_type_t RetCodeCheck = {
                   1053:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1054:                 /* msg_type_size = */          32,
                   1055:                 /* msg_type_number = */                1,
                   1056:                 /* msg_type_inline = */                TRUE,
                   1057:                 /* msg_type_longform = */      FALSE,
                   1058:                 /* msg_type_deallocate = */    FALSE,
                   1059:                 /* msg_type_unused = */                0
                   1060:         };
                   1061: #endif UseStaticMsgType
                   1062: 
                   1063: #if    UseStaticMsgType
                   1064:         static const msg_type_t byte_countCheck = {
                   1065:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1066:                 /* msg_type_size = */          32,
                   1067:                 /* msg_type_number = */                1,
                   1068:                 /* msg_type_inline = */                TRUE,
                   1069:                 /* msg_type_longform = */      FALSE,
                   1070:                 /* msg_type_deallocate = */    FALSE,
                   1071:                 /* msg_type_unused = */                0
                   1072:         };
                   1073: #endif UseStaticMsgType
                   1074: 
                   1075: #if    UseStaticMsgType
                   1076:         InP->owner_portType = owner_portType;
                   1077: #else  UseStaticMsgType
                   1078:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                   1079:         InP->owner_portType.msg_type_size = 32;
                   1080:         InP->owner_portType.msg_type_number = 1;
                   1081:         InP->owner_portType.msg_type_inline = TRUE;
                   1082:         InP->owner_portType.msg_type_longform = FALSE;
                   1083:         InP->owner_portType.msg_type_deallocate = FALSE;
                   1084: #endif UseStaticMsgType
                   1085: 
                   1086:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                   1087: 
                   1088:         InP->Head.msg_simple = FALSE;
                   1089:         InP->Head.msg_size = msg_size;
                   1090:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                   1091:         InP->Head.msg_request_port = kern_serv_port;
                   1092:         InP->Head.msg_reply_port = mig_get_reply_port();
                   1093:         InP->Head.msg_id = 1013;
                   1094: 
                   1095:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                   1096:         if (msg_result != RPC_SUCCESS) {
                   1097:                 if (msg_result == RCV_INVALID_PORT)
                   1098:                         mig_dealloc_reply_port();
                   1099:                 return msg_result;
                   1100:         }
                   1101: 
                   1102: #if    TypeCheck
                   1103:         msg_size = OutP->Head.msg_size;
                   1104:         msg_simple = OutP->Head.msg_simple;
                   1105: #endif TypeCheck
                   1106: 
                   1107:         if (OutP->Head.msg_id != 1113)
                   1108:                 return MIG_REPLY_MISMATCH;
                   1109: 
                   1110: #if    TypeCheck
                   1111:         if (((msg_size != 40) || (msg_simple != TRUE)) &&
                   1112:             ((msg_size != sizeof(death_pill_t)) ||
                   1113:              (msg_simple != TRUE) ||
                   1114:              (OutP->RetCode == KERN_SUCCESS)))
                   1115:                 return MIG_TYPE_ERROR;
                   1116: #endif TypeCheck
                   1117: 
                   1118: #if    TypeCheck
                   1119: #if    UseStaticMsgType
                   1120:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                   1121: #else  UseStaticMsgType
                   1122:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                   1123:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                   1124:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1125:             (OutP->RetCodeType.msg_type_number != 1) ||
                   1126:             (OutP->RetCodeType.msg_type_size != 32))
                   1127: #endif UseStaticMsgType
                   1128:                 return MIG_TYPE_ERROR;
                   1129: #endif TypeCheck
                   1130: 
                   1131:         if (OutP->RetCode != KERN_SUCCESS)
                   1132:                 return OutP->RetCode;
                   1133: 
                   1134: #if    TypeCheck
                   1135: #if    UseStaticMsgType
                   1136:         if (* (int *) &OutP->byte_countType != * (int *) &byte_countCheck)
                   1137: #else  UseStaticMsgType
                   1138:         if ((OutP->byte_countType.msg_type_inline != TRUE) ||
                   1139:             (OutP->byte_countType.msg_type_longform != FALSE) ||
                   1140:             (OutP->byte_countType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1141:             (OutP->byte_countType.msg_type_number != 1) ||
                   1142:             (OutP->byte_countType.msg_type_size != 32))
                   1143: #endif UseStaticMsgType
                   1144:                 return MIG_TYPE_ERROR;
                   1145: #endif TypeCheck
                   1146: 
                   1147:         *byte_count /* byte_count */ = /* *byte_count */ OutP->byte_count;
                   1148: 
                   1149:         return OutP->RetCode;
                   1150: }
                   1151: 
                   1152: /* Routine DMACount */
                   1153: mig_external kern_return_t ntsoundDMACount (
                   1154:         port_t kern_serv_port,
                   1155:         port_t owner_port,
                   1156:         int *dma_count)
                   1157: {
                   1158:         typedef struct {
                   1159:                 msg_header_t Head;
                   1160:                 msg_type_t owner_portType;
                   1161:                 port_t owner_port;
                   1162:         } Request;
                   1163: 
                   1164:         typedef struct {
                   1165:                 msg_header_t Head;
                   1166:                 msg_type_t RetCodeType;
                   1167:                 kern_return_t RetCode;
                   1168:                 msg_type_t dma_countType;
                   1169:                 int dma_count;
                   1170:         } Reply;
                   1171: 
                   1172:         union {
                   1173:                 Request In;
                   1174:                 Reply Out;
                   1175:         } Mess;
                   1176: 
                   1177:         register Request *InP = &Mess.In;
                   1178:         register Reply *OutP = &Mess.Out;
                   1179: 
                   1180:         msg_return_t msg_result;
                   1181: 
                   1182: #if    TypeCheck
                   1183:         boolean_t msg_simple;
                   1184: #endif TypeCheck
                   1185: 
                   1186:         unsigned int msg_size = 32;
                   1187: 
                   1188: #if    UseStaticMsgType
                   1189:         static const msg_type_t owner_portType = {
                   1190:                 /* msg_type_name = */          MSG_TYPE_PORT,
                   1191:                 /* msg_type_size = */          32,
                   1192:                 /* msg_type_number = */                1,
                   1193:                 /* msg_type_inline = */                TRUE,
                   1194:                 /* msg_type_longform = */      FALSE,
                   1195:                 /* msg_type_deallocate = */    FALSE,
                   1196:                 /* msg_type_unused = */                0,
                   1197:         };
                   1198: #endif UseStaticMsgType
                   1199: 
                   1200: #if    UseStaticMsgType
                   1201:         static const msg_type_t RetCodeCheck = {
                   1202:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1203:                 /* msg_type_size = */          32,
                   1204:                 /* msg_type_number = */                1,
                   1205:                 /* msg_type_inline = */                TRUE,
                   1206:                 /* msg_type_longform = */      FALSE,
                   1207:                 /* msg_type_deallocate = */    FALSE,
                   1208:                 /* msg_type_unused = */                0
                   1209:         };
                   1210: #endif UseStaticMsgType
                   1211: 
                   1212: #if    UseStaticMsgType
                   1213:         static const msg_type_t dma_countCheck = {
                   1214:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1215:                 /* msg_type_size = */          32,
                   1216:                 /* msg_type_number = */                1,
                   1217:                 /* msg_type_inline = */                TRUE,
                   1218:                 /* msg_type_longform = */      FALSE,
                   1219:                 /* msg_type_deallocate = */    FALSE,
                   1220:                 /* msg_type_unused = */                0
                   1221:         };
                   1222: #endif UseStaticMsgType
                   1223: 
                   1224: #if    UseStaticMsgType
                   1225:         InP->owner_portType = owner_portType;
                   1226: #else  UseStaticMsgType
                   1227:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                   1228:         InP->owner_portType.msg_type_size = 32;
                   1229:         InP->owner_portType.msg_type_number = 1;
                   1230:         InP->owner_portType.msg_type_inline = TRUE;
                   1231:         InP->owner_portType.msg_type_longform = FALSE;
                   1232:         InP->owner_portType.msg_type_deallocate = FALSE;
                   1233: #endif UseStaticMsgType
                   1234: 
                   1235:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                   1236: 
                   1237:         InP->Head.msg_simple = FALSE;
                   1238:         InP->Head.msg_size = msg_size;
                   1239:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                   1240:         InP->Head.msg_request_port = kern_serv_port;
                   1241:         InP->Head.msg_reply_port = mig_get_reply_port();
                   1242:         InP->Head.msg_id = 1014;
                   1243: 
                   1244:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                   1245:         if (msg_result != RPC_SUCCESS) {
                   1246:                 if (msg_result == RCV_INVALID_PORT)
                   1247:                         mig_dealloc_reply_port();
                   1248:                 return msg_result;
                   1249:         }
                   1250: 
                   1251: #if    TypeCheck
                   1252:         msg_size = OutP->Head.msg_size;
                   1253:         msg_simple = OutP->Head.msg_simple;
                   1254: #endif TypeCheck
                   1255: 
                   1256:         if (OutP->Head.msg_id != 1114)
                   1257:                 return MIG_REPLY_MISMATCH;
                   1258: 
                   1259: #if    TypeCheck
                   1260:         if (((msg_size != 40) || (msg_simple != TRUE)) &&
                   1261:             ((msg_size != sizeof(death_pill_t)) ||
                   1262:              (msg_simple != TRUE) ||
                   1263:              (OutP->RetCode == KERN_SUCCESS)))
                   1264:                 return MIG_TYPE_ERROR;
                   1265: #endif TypeCheck
                   1266: 
                   1267: #if    TypeCheck
                   1268: #if    UseStaticMsgType
                   1269:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                   1270: #else  UseStaticMsgType
                   1271:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                   1272:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                   1273:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1274:             (OutP->RetCodeType.msg_type_number != 1) ||
                   1275:             (OutP->RetCodeType.msg_type_size != 32))
                   1276: #endif UseStaticMsgType
                   1277:                 return MIG_TYPE_ERROR;
                   1278: #endif TypeCheck
                   1279: 
                   1280:         if (OutP->RetCode != KERN_SUCCESS)
                   1281:                 return OutP->RetCode;
                   1282: 
                   1283: #if    TypeCheck
                   1284: #if    UseStaticMsgType
                   1285:         if (* (int *) &OutP->dma_countType != * (int *) &dma_countCheck)
                   1286: #else  UseStaticMsgType
                   1287:         if ((OutP->dma_countType.msg_type_inline != TRUE) ||
                   1288:             (OutP->dma_countType.msg_type_longform != FALSE) ||
                   1289:             (OutP->dma_countType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1290:             (OutP->dma_countType.msg_type_number != 1) ||
                   1291:             (OutP->dma_countType.msg_type_size != 32))
                   1292: #endif UseStaticMsgType
                   1293:                 return MIG_TYPE_ERROR;
                   1294: #endif TypeCheck
                   1295: 
                   1296:         *dma_count /* dma_count */ = /* *dma_count */ OutP->dma_count;
                   1297: 
                   1298:         return OutP->RetCode;
                   1299: }
                   1300: 
                   1301: /* Routine InterruptCount */
                   1302: mig_external kern_return_t ntsoundInterruptCount (
                   1303:         port_t kern_serv_port,
                   1304:         port_t owner_port,
                   1305:         int *irq_count)
                   1306: {
                   1307:         typedef struct {
                   1308:                 msg_header_t Head;
                   1309:                 msg_type_t owner_portType;
                   1310:                 port_t owner_port;
                   1311:         } Request;
                   1312: 
                   1313:         typedef struct {
                   1314:                 msg_header_t Head;
                   1315:                 msg_type_t RetCodeType;
                   1316:                 kern_return_t RetCode;
                   1317:                 msg_type_t irq_countType;
                   1318:                 int irq_count;
                   1319:         } Reply;
                   1320: 
                   1321:         union {
                   1322:                 Request In;
                   1323:                 Reply Out;
                   1324:         } Mess;
                   1325: 
                   1326:         register Request *InP = &Mess.In;
                   1327:         register Reply *OutP = &Mess.Out;
                   1328: 
                   1329:         msg_return_t msg_result;
                   1330: 
                   1331: #if    TypeCheck
                   1332:         boolean_t msg_simple;
                   1333: #endif TypeCheck
                   1334: 
                   1335:         unsigned int msg_size = 32;
                   1336: 
                   1337: #if    UseStaticMsgType
                   1338:         static const msg_type_t owner_portType = {
                   1339:                 /* msg_type_name = */          MSG_TYPE_PORT,
                   1340:                 /* msg_type_size = */          32,
                   1341:                 /* msg_type_number = */                1,
                   1342:                 /* msg_type_inline = */                TRUE,
                   1343:                 /* msg_type_longform = */      FALSE,
                   1344:                 /* msg_type_deallocate = */    FALSE,
                   1345:                 /* msg_type_unused = */                0,
                   1346:         };
                   1347: #endif UseStaticMsgType
                   1348: 
                   1349: #if    UseStaticMsgType
                   1350:         static const msg_type_t RetCodeCheck = {
                   1351:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1352:                 /* msg_type_size = */          32,
                   1353:                 /* msg_type_number = */                1,
                   1354:                 /* msg_type_inline = */                TRUE,
                   1355:                 /* msg_type_longform = */      FALSE,
                   1356:                 /* msg_type_deallocate = */    FALSE,
                   1357:                 /* msg_type_unused = */                0
                   1358:         };
                   1359: #endif UseStaticMsgType
                   1360: 
                   1361: #if    UseStaticMsgType
                   1362:         static const msg_type_t irq_countCheck = {
                   1363:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1364:                 /* msg_type_size = */          32,
                   1365:                 /* msg_type_number = */                1,
                   1366:                 /* msg_type_inline = */                TRUE,
                   1367:                 /* msg_type_longform = */      FALSE,
                   1368:                 /* msg_type_deallocate = */    FALSE,
                   1369:                 /* msg_type_unused = */                0
                   1370:         };
                   1371: #endif UseStaticMsgType
                   1372: 
                   1373: #if    UseStaticMsgType
                   1374:         InP->owner_portType = owner_portType;
                   1375: #else  UseStaticMsgType
                   1376:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                   1377:         InP->owner_portType.msg_type_size = 32;
                   1378:         InP->owner_portType.msg_type_number = 1;
                   1379:         InP->owner_portType.msg_type_inline = TRUE;
                   1380:         InP->owner_portType.msg_type_longform = FALSE;
                   1381:         InP->owner_portType.msg_type_deallocate = FALSE;
                   1382: #endif UseStaticMsgType
                   1383: 
                   1384:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                   1385: 
                   1386:         InP->Head.msg_simple = FALSE;
                   1387:         InP->Head.msg_size = msg_size;
                   1388:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                   1389:         InP->Head.msg_request_port = kern_serv_port;
                   1390:         InP->Head.msg_reply_port = mig_get_reply_port();
                   1391:         InP->Head.msg_id = 1015;
                   1392: 
                   1393:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                   1394:         if (msg_result != RPC_SUCCESS) {
                   1395:                 if (msg_result == RCV_INVALID_PORT)
                   1396:                         mig_dealloc_reply_port();
                   1397:                 return msg_result;
                   1398:         }
                   1399: 
                   1400: #if    TypeCheck
                   1401:         msg_size = OutP->Head.msg_size;
                   1402:         msg_simple = OutP->Head.msg_simple;
                   1403: #endif TypeCheck
                   1404: 
                   1405:         if (OutP->Head.msg_id != 1115)
                   1406:                 return MIG_REPLY_MISMATCH;
                   1407: 
                   1408: #if    TypeCheck
                   1409:         if (((msg_size != 40) || (msg_simple != TRUE)) &&
                   1410:             ((msg_size != sizeof(death_pill_t)) ||
                   1411:              (msg_simple != TRUE) ||
                   1412:              (OutP->RetCode == KERN_SUCCESS)))
                   1413:                 return MIG_TYPE_ERROR;
                   1414: #endif TypeCheck
                   1415: 
                   1416: #if    TypeCheck
                   1417: #if    UseStaticMsgType
                   1418:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                   1419: #else  UseStaticMsgType
                   1420:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                   1421:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                   1422:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1423:             (OutP->RetCodeType.msg_type_number != 1) ||
                   1424:             (OutP->RetCodeType.msg_type_size != 32))
                   1425: #endif UseStaticMsgType
                   1426:                 return MIG_TYPE_ERROR;
                   1427: #endif TypeCheck
                   1428: 
                   1429:         if (OutP->RetCode != KERN_SUCCESS)
                   1430:                 return OutP->RetCode;
                   1431: 
                   1432: #if    TypeCheck
                   1433: #if    UseStaticMsgType
                   1434:         if (* (int *) &OutP->irq_countType != * (int *) &irq_countCheck)
                   1435: #else  UseStaticMsgType
                   1436:         if ((OutP->irq_countType.msg_type_inline != TRUE) ||
                   1437:             (OutP->irq_countType.msg_type_longform != FALSE) ||
                   1438:             (OutP->irq_countType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1439:             (OutP->irq_countType.msg_type_number != 1) ||
                   1440:             (OutP->irq_countType.msg_type_size != 32))
                   1441: #endif UseStaticMsgType
                   1442:                 return MIG_TYPE_ERROR;
                   1443: #endif TypeCheck
                   1444: 
                   1445:         *irq_count /* irq_count */ = /* *irq_count */ OutP->irq_count;
                   1446: 
                   1447:         return OutP->RetCode;
                   1448: }
                   1449: 
                   1450: /* Routine Write */
                   1451: mig_external kern_return_t ntsoundWrite (
                   1452:         port_t kern_serv_port,
                   1453:         port_t owner_port,
                   1454:         sound_data_t data,
                   1455:         unsigned int dataCnt,
                   1456:         int *actual_count)
                   1457: {
                   1458:         typedef struct {
                   1459:                 msg_header_t Head;
                   1460:                 msg_type_t owner_portType;
                   1461:                 port_t owner_port;
                   1462:                 msg_type_long_t dataType;
                   1463:                 short data[7000];
                   1464:         } Request;
                   1465: 
                   1466:         typedef struct {
                   1467:                 msg_header_t Head;
                   1468:                 msg_type_t RetCodeType;
                   1469:                 kern_return_t RetCode;
                   1470:                 msg_type_t actual_countType;
                   1471:                 int actual_count;
                   1472:         } Reply;
                   1473: 
                   1474:         union {
                   1475:                 Request In;
                   1476:                 Reply Out;
                   1477:         } Mess;
                   1478: 
                   1479:         register Request *InP = &Mess.In;
                   1480:         register Reply *OutP = &Mess.Out;
                   1481: 
                   1482:         msg_return_t msg_result;
                   1483: 
                   1484: #if    TypeCheck
                   1485:         boolean_t msg_simple;
                   1486: #endif TypeCheck
                   1487: 
                   1488:         unsigned int msg_size = 44;
                   1489:         /* Maximum request size 14044 */
                   1490:         unsigned int msg_size_delta;
                   1491: 
                   1492: #if    UseStaticMsgType
                   1493:         static const msg_type_t owner_portType = {
                   1494:                 /* msg_type_name = */          MSG_TYPE_PORT,
                   1495:                 /* msg_type_size = */          32,
                   1496:                 /* msg_type_number = */                1,
                   1497:                 /* msg_type_inline = */                TRUE,
                   1498:                 /* msg_type_longform = */      FALSE,
                   1499:                 /* msg_type_deallocate = */    FALSE,
                   1500:                 /* msg_type_unused = */                0,
                   1501:         };
                   1502: #endif UseStaticMsgType
                   1503: 
                   1504: #if    UseStaticMsgType
                   1505:         static const msg_type_long_t dataType = {
                   1506:         {
                   1507:                 /* msg_type_name = */          0,
                   1508:                 /* msg_type_size = */          0,
                   1509:                 /* msg_type_number = */                0,
                   1510:                 /* msg_type_inline = */                TRUE,
                   1511:                 /* msg_type_longform = */      TRUE,
                   1512:                 /* msg_type_deallocate = */    FALSE,
                   1513:         },
                   1514:                 /* msg_type_long_name = */     MSG_TYPE_INTEGER_16,
                   1515:                 /* msg_type_long_size = */     16,
                   1516:                 /* msg_type_long_number = */   7000,
                   1517:         };
                   1518: #endif UseStaticMsgType
                   1519: 
                   1520: #if    UseStaticMsgType
                   1521:         static const msg_type_t RetCodeCheck = {
                   1522:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1523:                 /* msg_type_size = */          32,
                   1524:                 /* msg_type_number = */                1,
                   1525:                 /* msg_type_inline = */                TRUE,
                   1526:                 /* msg_type_longform = */      FALSE,
                   1527:                 /* msg_type_deallocate = */    FALSE,
                   1528:                 /* msg_type_unused = */                0
                   1529:         };
                   1530: #endif UseStaticMsgType
                   1531: 
                   1532: #if    UseStaticMsgType
                   1533:         static const msg_type_t actual_countCheck = {
                   1534:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1535:                 /* msg_type_size = */          32,
                   1536:                 /* msg_type_number = */                1,
                   1537:                 /* msg_type_inline = */                TRUE,
                   1538:                 /* msg_type_longform = */      FALSE,
                   1539:                 /* msg_type_deallocate = */    FALSE,
                   1540:                 /* msg_type_unused = */                0
                   1541:         };
                   1542: #endif UseStaticMsgType
                   1543: 
                   1544: #if    UseStaticMsgType
                   1545:         InP->owner_portType = owner_portType;
                   1546: #else  UseStaticMsgType
                   1547:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                   1548:         InP->owner_portType.msg_type_size = 32;
                   1549:         InP->owner_portType.msg_type_number = 1;
                   1550:         InP->owner_portType.msg_type_inline = TRUE;
                   1551:         InP->owner_portType.msg_type_longform = FALSE;
                   1552:         InP->owner_portType.msg_type_deallocate = FALSE;
                   1553: #endif UseStaticMsgType
                   1554: 
                   1555:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                   1556: 
                   1557: #if    UseStaticMsgType
                   1558:         InP->dataType = dataType;
                   1559: #else  UseStaticMsgType
                   1560:         InP->dataType.msg_type_long_name = MSG_TYPE_INTEGER_16;
                   1561:         InP->dataType.msg_type_long_size = 16;
                   1562:         InP->dataType.msg_type_header.msg_type_inline = TRUE;
                   1563:         InP->dataType.msg_type_header.msg_type_longform = TRUE;
                   1564:         InP->dataType.msg_type_header.msg_type_deallocate = FALSE;
                   1565: #endif UseStaticMsgType
                   1566: 
                   1567:         if (dataCnt > 7000)
                   1568:                 return MIG_ARRAY_TOO_LARGE;
                   1569:         bcopy((char *) data, (char *) InP->data, 2 * dataCnt);
                   1570: 
                   1571:         InP->dataType.msg_type_long_number /* dataCnt */ = /* dataType.msg_type_long_number */ dataCnt;
                   1572: 
                   1573:         msg_size_delta = (2 * dataCnt + 3) & ~3;
                   1574:         msg_size += msg_size_delta;
                   1575: 
                   1576:         InP->Head.msg_simple = FALSE;
                   1577:         InP->Head.msg_size = msg_size;
                   1578:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                   1579:         InP->Head.msg_request_port = kern_serv_port;
                   1580:         InP->Head.msg_reply_port = mig_get_reply_port();
                   1581:         InP->Head.msg_id = 1016;
                   1582: 
                   1583:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                   1584:         if (msg_result != RPC_SUCCESS) {
                   1585:                 if (msg_result == RCV_INVALID_PORT)
                   1586:                         mig_dealloc_reply_port();
                   1587:                 return msg_result;
                   1588:         }
                   1589: 
                   1590: #if    TypeCheck
                   1591:         msg_size = OutP->Head.msg_size;
                   1592:         msg_simple = OutP->Head.msg_simple;
                   1593: #endif TypeCheck
                   1594: 
                   1595:         if (OutP->Head.msg_id != 1116)
                   1596:                 return MIG_REPLY_MISMATCH;
                   1597: 
                   1598: #if    TypeCheck
                   1599:         if (((msg_size != 40) || (msg_simple != TRUE)) &&
                   1600:             ((msg_size != sizeof(death_pill_t)) ||
                   1601:              (msg_simple != TRUE) ||
                   1602:              (OutP->RetCode == KERN_SUCCESS)))
                   1603:                 return MIG_TYPE_ERROR;
                   1604: #endif TypeCheck
                   1605: 
                   1606: #if    TypeCheck
                   1607: #if    UseStaticMsgType
                   1608:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                   1609: #else  UseStaticMsgType
                   1610:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                   1611:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                   1612:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1613:             (OutP->RetCodeType.msg_type_number != 1) ||
                   1614:             (OutP->RetCodeType.msg_type_size != 32))
                   1615: #endif UseStaticMsgType
                   1616:                 return MIG_TYPE_ERROR;
                   1617: #endif TypeCheck
                   1618: 
                   1619:         if (OutP->RetCode != KERN_SUCCESS)
                   1620:                 return OutP->RetCode;
                   1621: 
                   1622: #if    TypeCheck
                   1623: #if    UseStaticMsgType
                   1624:         if (* (int *) &OutP->actual_countType != * (int *) &actual_countCheck)
                   1625: #else  UseStaticMsgType
                   1626:         if ((OutP->actual_countType.msg_type_inline != TRUE) ||
                   1627:             (OutP->actual_countType.msg_type_longform != FALSE) ||
                   1628:             (OutP->actual_countType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1629:             (OutP->actual_countType.msg_type_number != 1) ||
                   1630:             (OutP->actual_countType.msg_type_size != 32))
                   1631: #endif UseStaticMsgType
                   1632:                 return MIG_TYPE_ERROR;
                   1633: #endif TypeCheck
                   1634: 
                   1635:         *actual_count /* actual_count */ = /* *actual_count */ OutP->actual_count;
                   1636: 
                   1637:         return OutP->RetCode;
                   1638: }
                   1639: 
                   1640: /* Routine SetVolume */
                   1641: mig_external kern_return_t ntsoundSetVolume (
                   1642:         port_t kern_serv_port,
                   1643:         port_t owner_port,
                   1644:         int value)
                   1645: {
                   1646:         typedef struct {
                   1647:                 msg_header_t Head;
                   1648:                 msg_type_t owner_portType;
                   1649:                 port_t owner_port;
                   1650:                 msg_type_t valueType;
                   1651:                 int value;
                   1652:         } Request;
                   1653: 
                   1654:         typedef struct {
                   1655:                 msg_header_t Head;
                   1656:                 msg_type_t RetCodeType;
                   1657:                 kern_return_t RetCode;
                   1658:         } Reply;
                   1659: 
                   1660:         union {
                   1661:                 Request In;
                   1662:                 Reply Out;
                   1663:         } Mess;
                   1664: 
                   1665:         register Request *InP = &Mess.In;
                   1666:         register Reply *OutP = &Mess.Out;
                   1667: 
                   1668:         msg_return_t msg_result;
                   1669: 
                   1670: #if    TypeCheck
                   1671:         boolean_t msg_simple;
                   1672: #endif TypeCheck
                   1673: 
                   1674:         unsigned int msg_size = 40;
                   1675: 
                   1676: #if    UseStaticMsgType
                   1677:         static const msg_type_t owner_portType = {
                   1678:                 /* msg_type_name = */          MSG_TYPE_PORT,
                   1679:                 /* msg_type_size = */          32,
                   1680:                 /* msg_type_number = */                1,
                   1681:                 /* msg_type_inline = */                TRUE,
                   1682:                 /* msg_type_longform = */      FALSE,
                   1683:                 /* msg_type_deallocate = */    FALSE,
                   1684:                 /* msg_type_unused = */                0,
                   1685:         };
                   1686: #endif UseStaticMsgType
                   1687: 
                   1688: #if    UseStaticMsgType
                   1689:         static const msg_type_t valueType = {
                   1690:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1691:                 /* msg_type_size = */          32,
                   1692:                 /* msg_type_number = */                1,
                   1693:                 /* msg_type_inline = */                TRUE,
                   1694:                 /* msg_type_longform = */      FALSE,
                   1695:                 /* msg_type_deallocate = */    FALSE,
                   1696:                 /* msg_type_unused = */                0,
                   1697:         };
                   1698: #endif UseStaticMsgType
                   1699: 
                   1700: #if    UseStaticMsgType
                   1701:         static const msg_type_t RetCodeCheck = {
                   1702:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1703:                 /* msg_type_size = */          32,
                   1704:                 /* msg_type_number = */                1,
                   1705:                 /* msg_type_inline = */                TRUE,
                   1706:                 /* msg_type_longform = */      FALSE,
                   1707:                 /* msg_type_deallocate = */    FALSE,
                   1708:                 /* msg_type_unused = */                0
                   1709:         };
                   1710: #endif UseStaticMsgType
                   1711: 
                   1712: #if    UseStaticMsgType
                   1713:         InP->owner_portType = owner_portType;
                   1714: #else  UseStaticMsgType
                   1715:         InP->owner_portType.msg_type_name = MSG_TYPE_PORT;
                   1716:         InP->owner_portType.msg_type_size = 32;
                   1717:         InP->owner_portType.msg_type_number = 1;
                   1718:         InP->owner_portType.msg_type_inline = TRUE;
                   1719:         InP->owner_portType.msg_type_longform = FALSE;
                   1720:         InP->owner_portType.msg_type_deallocate = FALSE;
                   1721: #endif UseStaticMsgType
                   1722: 
                   1723:         InP->owner_port /* owner_port */ = /* owner_port */ owner_port;
                   1724: 
                   1725: #if    UseStaticMsgType
                   1726:         InP->valueType = valueType;
                   1727: #else  UseStaticMsgType
                   1728:         InP->valueType.msg_type_name = MSG_TYPE_INTEGER_32;
                   1729:         InP->valueType.msg_type_size = 32;
                   1730:         InP->valueType.msg_type_number = 1;
                   1731:         InP->valueType.msg_type_inline = TRUE;
                   1732:         InP->valueType.msg_type_longform = FALSE;
                   1733:         InP->valueType.msg_type_deallocate = FALSE;
                   1734: #endif UseStaticMsgType
                   1735: 
                   1736:         InP->value /* value */ = /* value */ value;
                   1737: 
                   1738:         InP->Head.msg_simple = FALSE;
                   1739:         InP->Head.msg_size = msg_size;
                   1740:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                   1741:         InP->Head.msg_request_port = kern_serv_port;
                   1742:         InP->Head.msg_reply_port = mig_get_reply_port();
                   1743:         InP->Head.msg_id = 1017;
                   1744: 
                   1745:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                   1746:         if (msg_result != RPC_SUCCESS) {
                   1747:                 if (msg_result == RCV_INVALID_PORT)
                   1748:                         mig_dealloc_reply_port();
                   1749:                 return msg_result;
                   1750:         }
                   1751: 
                   1752: #if    TypeCheck
                   1753:         msg_size = OutP->Head.msg_size;
                   1754:         msg_simple = OutP->Head.msg_simple;
                   1755: #endif TypeCheck
                   1756: 
                   1757:         if (OutP->Head.msg_id != 1117)
                   1758:                 return MIG_REPLY_MISMATCH;
                   1759: 
                   1760: #if    TypeCheck
                   1761:         if (((msg_size != 32) || (msg_simple != TRUE)) &&
                   1762:             ((msg_size != sizeof(death_pill_t)) ||
                   1763:              (msg_simple != TRUE) ||
                   1764:              (OutP->RetCode == KERN_SUCCESS)))
                   1765:                 return MIG_TYPE_ERROR;
                   1766: #endif TypeCheck
                   1767: 
                   1768: #if    TypeCheck
                   1769: #if    UseStaticMsgType
                   1770:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                   1771: #else  UseStaticMsgType
                   1772:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                   1773:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                   1774:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   1775:             (OutP->RetCodeType.msg_type_number != 1) ||
                   1776:             (OutP->RetCodeType.msg_type_size != 32))
                   1777: #endif UseStaticMsgType
                   1778:                 return MIG_TYPE_ERROR;
                   1779: #endif TypeCheck
                   1780: 
                   1781:         if (OutP->RetCode != KERN_SUCCESS)
                   1782:                 return OutP->RetCode;
                   1783: 
                   1784:         return OutP->RetCode;
                   1785: }
                   1786: 
                   1787: /* Routine WireRange */
                   1788: mig_external kern_return_t ntsoundWireRange (
                   1789:         port_t device_port,
                   1790:         port_t token,
                   1791:         port_t task,
                   1792:         vm_offset_t addr,
                   1793:         vm_size_t size,
                   1794:         boolean_t wire)
                   1795: {
                   1796:         typedef struct {
                   1797:                 msg_header_t Head;
                   1798:                 msg_type_t tokenType;
                   1799:                 port_t token;
                   1800:                 msg_type_t taskType;
                   1801:                 port_t task;
                   1802:                 msg_type_t addrType;
                   1803:                 vm_offset_t addr;
                   1804:                 msg_type_t sizeType;
                   1805:                 vm_size_t size;
                   1806:                 msg_type_t wireType;
                   1807:                 boolean_t wire;
                   1808:         } Request;
                   1809: 
                   1810:         typedef struct {
                   1811:                 msg_header_t Head;
                   1812:                 msg_type_t RetCodeType;
                   1813:                 kern_return_t RetCode;
                   1814:         } Reply;
                   1815: 
                   1816:         union {
                   1817:                 Request In;
                   1818:                 Reply Out;
                   1819:         } Mess;
                   1820: 
                   1821:         register Request *InP = &Mess.In;
                   1822:         register Reply *OutP = &Mess.Out;
                   1823: 
                   1824:         msg_return_t msg_result;
                   1825: 
                   1826: #if    TypeCheck
                   1827:         boolean_t msg_simple;
                   1828: #endif TypeCheck
                   1829: 
                   1830:         unsigned int msg_size = 64;
                   1831: 
                   1832: #if    UseStaticMsgType
                   1833:         static const msg_type_t tokenType = {
                   1834:                 /* msg_type_name = */          MSG_TYPE_PORT,
                   1835:                 /* msg_type_size = */          32,
                   1836:                 /* msg_type_number = */                1,
                   1837:                 /* msg_type_inline = */                TRUE,
                   1838:                 /* msg_type_longform = */      FALSE,
                   1839:                 /* msg_type_deallocate = */    FALSE,
                   1840:                 /* msg_type_unused = */                0,
                   1841:         };
                   1842: #endif UseStaticMsgType
                   1843: 
                   1844: #if    UseStaticMsgType
                   1845:         static const msg_type_t taskType = {
                   1846:                 /* msg_type_name = */          MSG_TYPE_PORT,
                   1847:                 /* msg_type_size = */          32,
                   1848:                 /* msg_type_number = */                1,
                   1849:                 /* msg_type_inline = */                TRUE,
                   1850:                 /* msg_type_longform = */      FALSE,
                   1851:                 /* msg_type_deallocate = */    FALSE,
                   1852:                 /* msg_type_unused = */                0,
                   1853:         };
                   1854: #endif UseStaticMsgType
                   1855: 
                   1856: #if    UseStaticMsgType
                   1857:         static const msg_type_t addrType = {
                   1858:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1859:                 /* msg_type_size = */          32,
                   1860:                 /* msg_type_number = */                1,
                   1861:                 /* msg_type_inline = */                TRUE,
                   1862:                 /* msg_type_longform = */      FALSE,
                   1863:                 /* msg_type_deallocate = */    FALSE,
                   1864:                 /* msg_type_unused = */                0,
                   1865:         };
                   1866: #endif UseStaticMsgType
                   1867: 
                   1868: #if    UseStaticMsgType
                   1869:         static const msg_type_t sizeType = {
                   1870:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1871:                 /* msg_type_size = */          32,
                   1872:                 /* msg_type_number = */                1,
                   1873:                 /* msg_type_inline = */                TRUE,
                   1874:                 /* msg_type_longform = */      FALSE,
                   1875:                 /* msg_type_deallocate = */    FALSE,
                   1876:                 /* msg_type_unused = */                0,
                   1877:         };
                   1878: #endif UseStaticMsgType
                   1879: 
                   1880: #if    UseStaticMsgType
                   1881:         static const msg_type_t wireType = {
                   1882:                 /* msg_type_name = */          MSG_TYPE_BOOLEAN,
                   1883:                 /* msg_type_size = */          32,
                   1884:                 /* msg_type_number = */                1,
                   1885:                 /* msg_type_inline = */                TRUE,
                   1886:                 /* msg_type_longform = */      FALSE,
                   1887:                 /* msg_type_deallocate = */    FALSE,
                   1888:                 /* msg_type_unused = */                0,
                   1889:         };
                   1890: #endif UseStaticMsgType
                   1891: 
                   1892: #if    UseStaticMsgType
                   1893:         static const msg_type_t RetCodeCheck = {
                   1894:                 /* msg_type_name = */          MSG_TYPE_INTEGER_32,
                   1895:                 /* msg_type_size = */          32,
                   1896:                 /* msg_type_number = */                1,
                   1897:                 /* msg_type_inline = */                TRUE,
                   1898:                 /* msg_type_longform = */      FALSE,
                   1899:                 /* msg_type_deallocate = */    FALSE,
                   1900:                 /* msg_type_unused = */                0
                   1901:         };
                   1902: #endif UseStaticMsgType
                   1903: 
                   1904: #if    UseStaticMsgType
                   1905:         InP->tokenType = tokenType;
                   1906: #else  UseStaticMsgType
                   1907:         InP->tokenType.msg_type_name = MSG_TYPE_PORT;
                   1908:         InP->tokenType.msg_type_size = 32;
                   1909:         InP->tokenType.msg_type_number = 1;
                   1910:         InP->tokenType.msg_type_inline = TRUE;
                   1911:         InP->tokenType.msg_type_longform = FALSE;
                   1912:         InP->tokenType.msg_type_deallocate = FALSE;
                   1913: #endif UseStaticMsgType
                   1914: 
                   1915:         InP->token /* token */ = /* token */ token;
                   1916: 
                   1917: #if    UseStaticMsgType
                   1918:         InP->taskType = taskType;
                   1919: #else  UseStaticMsgType
                   1920:         InP->taskType.msg_type_name = MSG_TYPE_PORT;
                   1921:         InP->taskType.msg_type_size = 32;
                   1922:         InP->taskType.msg_type_number = 1;
                   1923:         InP->taskType.msg_type_inline = TRUE;
                   1924:         InP->taskType.msg_type_longform = FALSE;
                   1925:         InP->taskType.msg_type_deallocate = FALSE;
                   1926: #endif UseStaticMsgType
                   1927: 
                   1928:         InP->task /* task */ = /* task */ task;
                   1929: 
                   1930: #if    UseStaticMsgType
                   1931:         InP->addrType = addrType;
                   1932: #else  UseStaticMsgType
                   1933:         InP->addrType.msg_type_name = MSG_TYPE_INTEGER_32;
                   1934:         InP->addrType.msg_type_size = 32;
                   1935:         InP->addrType.msg_type_number = 1;
                   1936:         InP->addrType.msg_type_inline = TRUE;
                   1937:         InP->addrType.msg_type_longform = FALSE;
                   1938:         InP->addrType.msg_type_deallocate = FALSE;
                   1939: #endif UseStaticMsgType
                   1940: 
                   1941:         InP->addr /* addr */ = /* addr */ addr;
                   1942: 
                   1943: #if    UseStaticMsgType
                   1944:         InP->sizeType = sizeType;
                   1945: #else  UseStaticMsgType
                   1946:         InP->sizeType.msg_type_name = MSG_TYPE_INTEGER_32;
                   1947:         InP->sizeType.msg_type_size = 32;
                   1948:         InP->sizeType.msg_type_number = 1;
                   1949:         InP->sizeType.msg_type_inline = TRUE;
                   1950:         InP->sizeType.msg_type_longform = FALSE;
                   1951:         InP->sizeType.msg_type_deallocate = FALSE;
                   1952: #endif UseStaticMsgType
                   1953: 
                   1954:         InP->size /* size */ = /* size */ size;
                   1955: 
                   1956: #if    UseStaticMsgType
                   1957:         InP->wireType = wireType;
                   1958: #else  UseStaticMsgType
                   1959:         InP->wireType.msg_type_name = MSG_TYPE_BOOLEAN;
                   1960:         InP->wireType.msg_type_size = 32;
                   1961:         InP->wireType.msg_type_number = 1;
                   1962:         InP->wireType.msg_type_inline = TRUE;
                   1963:         InP->wireType.msg_type_longform = FALSE;
                   1964:         InP->wireType.msg_type_deallocate = FALSE;
                   1965: #endif UseStaticMsgType
                   1966: 
                   1967:         InP->wire /* wire */ = /* wire */ wire;
                   1968: 
                   1969:         InP->Head.msg_simple = FALSE;
                   1970:         InP->Head.msg_size = msg_size;
                   1971:         InP->Head.msg_type = MSG_TYPE_NORMAL | MSG_TYPE_RPC;
                   1972:         InP->Head.msg_request_port = device_port;
                   1973:         InP->Head.msg_reply_port = mig_get_reply_port();
                   1974:         InP->Head.msg_id = 1018;
                   1975: 
                   1976:         msg_result = msg_rpc(&InP->Head, MSG_OPTION_NONE, sizeof(Reply), 0, 0);
                   1977:         if (msg_result != RPC_SUCCESS) {
                   1978:                 if (msg_result == RCV_INVALID_PORT)
                   1979:                         mig_dealloc_reply_port();
                   1980:                 return msg_result;
                   1981:         }
                   1982: 
                   1983: #if    TypeCheck
                   1984:         msg_size = OutP->Head.msg_size;
                   1985:         msg_simple = OutP->Head.msg_simple;
                   1986: #endif TypeCheck
                   1987: 
                   1988:         if (OutP->Head.msg_id != 1118)
                   1989:                 return MIG_REPLY_MISMATCH;
                   1990: 
                   1991: #if    TypeCheck
                   1992:         if (((msg_size != 32) || (msg_simple != TRUE)) &&
                   1993:             ((msg_size != sizeof(death_pill_t)) ||
                   1994:              (msg_simple != TRUE) ||
                   1995:              (OutP->RetCode == KERN_SUCCESS)))
                   1996:                 return MIG_TYPE_ERROR;
                   1997: #endif TypeCheck
                   1998: 
                   1999: #if    TypeCheck
                   2000: #if    UseStaticMsgType
                   2001:         if (* (int *) &OutP->RetCodeType != * (int *) &RetCodeCheck)
                   2002: #else  UseStaticMsgType
                   2003:         if ((OutP->RetCodeType.msg_type_inline != TRUE) ||
                   2004:             (OutP->RetCodeType.msg_type_longform != FALSE) ||
                   2005:             (OutP->RetCodeType.msg_type_name != MSG_TYPE_INTEGER_32) ||
                   2006:             (OutP->RetCodeType.msg_type_number != 1) ||
                   2007:             (OutP->RetCodeType.msg_type_size != 32))
                   2008: #endif UseStaticMsgType
                   2009:                 return MIG_TYPE_ERROR;
                   2010: #endif TypeCheck
                   2011: 
                   2012:         if (OutP->RetCode != KERN_SUCCESS)
                   2013:                 return OutP->RetCode;
                   2014: 
                   2015:         return OutP->RetCode;
                   2016: }
                   2017: 
                   2018: 
                   2019: //========================================================================
                   2020: 
                   2021: /*
                   2022: ==================
                   2023: SNDDMA_Init
                   2024: 
                   2025: Try to find a sound device to mix for.
                   2026: Returns false if nothing is found.
                   2027: ==================
                   2028: */
                   2029: qboolean SNDDMA_Init(void)
                   2030: {
                   2031:     int                err;
                   2032:     int                i;
                   2033:        byte    *buf;
                   2034:         int    bufsize;
                   2035:        int     progress, oldprogress;
                   2036:         
                   2037:     shm = &sn;
                   2038:     shm->channels = 2;
                   2039:     shm->samplebits = 16;
                   2040:     shm->speed = 11025;
                   2041: 
                   2042:     err = netname_look_up(name_server_port,"", NTSOUNDNAME,&devPort);
                   2043:     if (err)
                   2044:     {
                   2045:         Com_Printf("SNDDMA_Init: Cannot access theater driver\n");
                   2046:         return false;
                   2047:     }
                   2048: 
                   2049:     err = ntsoundAcquire(devPort,task_self(),(vm_offset_t *)&buf,&bufsize,&i);
                   2050:     if (err || !i)
                   2051:     {
                   2052:         Com_Printf("SNDDMA_Init: Sound driver is busy or messed up\n");
                   2053:         return false;
                   2054:     }
                   2055: 
                   2056:     err = ntsoundConfig(devPort,task_self(),shm->channels,(int)shm->speed,
                   2057:                         NX_SoundStreamDataEncoding_Linear16, 1);
                   2058:     if (err)
                   2059:     {
                   2060:         Com_Printf("SNDDMA_Init: ntsoundConfig error: %d\n",err);
                   2061:         return false;
                   2062:     }
                   2063:     else
                   2064:         Com_Printf("SNDDMA_Init: Configured for %d Hz, %d channels\n"
                   2065:                    ,(int)shm->speed,shm->channels);
                   2066:  //   printf ("buf: 0x%x\n", buf);
                   2067:  //   printf ("bufsize: %d\n", bufsize);
                   2068: 
                   2069:     bzero(buf,bufsize);
                   2070: 
                   2071: //   ntsoundSetVolume(devPort,task_self(),5);
                   2072:    ntsoundStart(devPort,task_self());
                   2073: 
                   2074:    shm->soundalive = true;
                   2075:    shm->splitbuffer = false;
                   2076:    shm->samples = bufsize/(shm->samplebits/8);
                   2077:    shm->samplepos = 0;
                   2078:    shm->submission_chunk = 1;
                   2079:    shm->buffer = buf;
                   2080: 
                   2081:    //
                   2082:    // find a buffer crossing point for pos testing
                   2083:    //
                   2084:    
                   2085:    ntsoundBytesProcessed(devPort,task_self(),&oldprogress);
                   2086:    do
                   2087:        {
                   2088:        ntsoundBytesProcessed(devPort,task_self(),&progress);
                   2089:      } while (progress == oldprogress);
                   2090:    snd_basetime = Sys_DoubleTime() - progress/(11025*2);
                   2091:  
                   2092:    return true;
                   2093: }
                   2094: 
                   2095: /*
                   2096: ==============
                   2097: SNDDMA_GetDMAPos
                   2098: 
                   2099: return the current sample position (in mono samples read)
                   2100: inside the recirculating dma buffer, so the mixing code will know
                   2101: how many sample are required to fill it up.
                   2102: ===============
                   2103: */
                   2104: int SNDDMA_GetDMAPos(void)
                   2105: {
                   2106:     int                progress;
                   2107: 
                   2108: #if 0
                   2109:     ntsoundBytesProcessed(devPort,task_self(),&progress);
                   2110: //    ntsoundDMACount(devPort,task_self(),&progress);
                   2111: 
                   2112: //printf ("(%i / %f) ", progress, (float)(Sys_DoubleTime ()));
                   2113:     progress += 2048;
                   2114:     progress >>= 1;
                   2115: #else
                   2116:     
                   2117:  progress = (Sys_DoubleTime() - snd_basetime)*11025*2;
                   2118:  progress += 8192;
                   2119:  progress &= ~1;
                   2120: #endif
                   2121:  
                   2122:     progress &= (shm->samples-1);
                   2123: 
                   2124:     return progress;
                   2125: }
                   2126: 
                   2127: 
                   2128: /*
                   2129: ==============
                   2130: SNDDMA_Submit
                   2131: 
                   2132: Reset the sound device for exiting
                   2133: ===============
                   2134: */
                   2135: void SNDDMA_Submit(void)
                   2136: {
                   2137: }
                   2138: 
                   2139: /*
                   2140: ==============
                   2141: SNDDMA_Shutdown
                   2142: 
                   2143: Reset the sound device for exiting
                   2144: ===============
                   2145: */
                   2146: void SNDDMA_Shutdown(void)
                   2147: {
                   2148:     ntsoundStop(devPort,task_self());
                   2149:     ntsoundRelease(devPort,task_self());
                   2150: }
                   2151: 

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.