summaryrefslogtreecommitdiff
path: root/common/quicktime_win32/Multiprocessing.h
diff options
context:
space:
mode:
Diffstat (limited to 'common/quicktime_win32/Multiprocessing.h')
-rw-r--r--common/quicktime_win32/Multiprocessing.h1802
1 files changed, 1802 insertions, 0 deletions
diff --git a/common/quicktime_win32/Multiprocessing.h b/common/quicktime_win32/Multiprocessing.h
new file mode 100644
index 0000000..dacfe4b
--- /dev/null
+++ b/common/quicktime_win32/Multiprocessing.h
@@ -0,0 +1,1802 @@
+/*
+ File: Multiprocessing.h
+
+ Contains: Multiprocessing interfaces
+
+ Version: QuickTime 7.3
+
+ Copyright: (c) 2007 (c) 1996-2001 by Apple Computer, Inc. and (c) 1995-1997 DayStar Digital, Inc.
+
+ Bugs?: For bug reports, consult the following page on
+ the World Wide Web:
+
+ http://developer.apple.com/bugreporter/
+
+*/
+
+
+/*
+ ===========================================================================================
+ *** WARNING: You must properly check the availability of MP services before calling them!
+ See the section titled "Checking API Availability".
+ ===========================================================================================
+*/
+
+
+#ifndef __MULTIPROCESSING__
+#define __MULTIPROCESSING__
+
+#ifndef __MACTYPES__
+#include <MacTypes.h>
+#endif
+
+
+
+
+#if PRAGMA_ONCE
+#pragma once
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if PRAGMA_IMPORT
+#pragma import on
+#endif
+
+#if PRAGMA_STRUCT_ALIGN
+ #pragma options align=power
+#elif PRAGMA_STRUCT_PACKPUSH
+ #pragma pack(push, 2)
+#elif PRAGMA_STRUCT_PACK
+ #pragma pack(2)
+#endif
+
+
+/*
+ ===========================================================================================
+ This is the header file for version 2.2 of the Mac OS multiprocessing support. This version
+ has been totally reimplemented and has significant new services. The main goal of the
+ reimplementation has been to transfer task management into the core operating system to provide
+ much more reliable and more efficient operation, including on single processor machines.
+ The memory management has also been massively improved, it is much faster and wastes much
+ less space. New services include POSIX style per-task storage, timers with millisecond and
+ microsecond resolutions, memory allocation at a specified alignment, and system pageable
+ and RAM resident memory pools. See the MP API documentation for details.
+ The old "DayStar" debugging services (whose names began with an underscore) have been
+ removed from this header. A very few are still implemented for binary compatibility, or in
+ cases where they happened to be exposed inappropriately. (E.g. _MPIsFullyInitialized must
+ be called to see if the MP API is ReallyTruly(tm) usable.) New code and recompiles of old
+ code should avoid use of these defunct services, except for _MPIsFullyInitialized.
+ ===========================================================================================
+*/
+
+
+/*
+ ===========================================================================================
+ The following services are from the original MP API and remain supported in version 2.0:
+ MPProcessors
+ MPCreateTask
+ MPTerminateTask
+ MPCurrentTaskID
+ MPYield
+ MPExit
+ MPCreateQueue
+ MPDeleteQueue
+ MPNotifyQueue
+ MPWaitOnQueue
+ MPCreateSemaphore
+ MPCreateBinarySemaphore (In C only, a macro that calls MPCreateSemaphore.)
+ MPDeleteSemaphore
+ MPSignalSemaphore
+ MPWaitOnSemaphore
+ MPCreateCriticalRegion
+ MPDeleteCriticalRegion
+ MPEnterCriticalRegion
+ MPExitCriticalRegion
+ MPAllocate (Deprecated, use MPAllocateAligned for new builds.)
+ MPFree
+ MPBlockCopy
+ MPLibraryIsLoaded (In C only, a macro.)
+ _MPIsFullyInitialized (See comments about checking for MP API availability.)
+ ===========================================================================================
+*/
+
+
+/*
+ ===========================================================================================
+ The following services are new in version 2.0:
+ MPProcessorsScheduled
+ MPSetTaskWeight
+ MPTaskIsPreemptive
+ MPAllocateTaskStorageIndex
+ MPDeallocateTaskStorageIndex
+ MPSetTaskStorageValue
+ MPGetTaskStorageValue
+ MPSetQueueReserve
+ MPCreateEvent
+ MPDeleteEvent
+ MPSetEvent
+ MPWaitForEvent
+ UpTime
+ DurationToAbsolute
+ AbsoluteToDuration
+ MPDelayUntil
+ MPCreateTimer
+ MPDeleteTimer
+ MPSetTimerNotify
+ MPArmTimer
+ MPCancelTimer
+ MPSetExceptionHandler
+ MPThrowException
+ MPDisposeTaskException
+ MPExtractTaskState
+ MPSetTaskState
+ MPRegisterDebugger
+ MPUnregisterDebugger
+ MPAllocateAligned (Preferred over MPAllocate.)
+ MPGetAllocatedBlockSize
+ MPBlockClear
+ MPDataToCode
+ MPRemoteCall (Preferred over _MPRPC.)
+ ===========================================================================================
+*/
+
+
+/*
+ ===========================================================================================
+ The following services are new in version 2.1:
+ MPCreateNotification
+ MPDeleteNotification
+ MPModifyNotification
+ MPCauseNotification
+ MPGetNextTaskID
+ MPGetNextCpuID
+ ===========================================================================================
+*/
+
+
+/*
+ ===========================================================================================
+ The following services are "unofficial" extensions to the original API. They are not in
+ the multiprocessing API documentation, but were in previous versions of this header. They
+ remain supported in version 2.0. They may not be supported in other environments.
+ _MPRPC (Deprecated, use MPRemoteCall for new builds.)
+ _MPAllocateSys (Deprecated, use MPAllocateAligned for new builds.)
+ _MPTaskIsToolboxSafe
+ _MPLibraryVersion
+ _MPLibraryIsCompatible
+ ===========================================================================================
+*/
+
+
+/*
+ ===========================================================================================
+ The following services were in previous versions of this header for "debugging only" use.
+ They are NOT implemented in version 2.0. For old builds they can be accessed by defining
+ the symbol MPIncludeDefunctServices to have a nonzero value.
+ _MPInitializePrintf
+ _MPPrintf
+ _MPDebugStr
+ _MPStatusPString
+ _MPStatusCString
+ ===========================================================================================
+*/
+
+
+/*
+ .
+ ===========================================================================================
+ General Types and Constants
+ ===========================
+*/
+
+
+#define MPCopyrightNotice \
+ "Copyright � 1995-2000 Apple Computer, Inc.\n"
+#define MPLibraryName "MPLibrary"
+#define MPLibraryCName MPLibraryName
+#define MPLibraryPName "\p" MPLibraryName
+#define MP_API_Version "2.3"
+
+enum {
+ MPLibrary_MajorVersion = 2, /* ! When these change be sure to update the build versions*/
+ MPLibrary_MinorVersion = 3, /* ! used in the startup check in MPInitializeAPI!*/
+ MPLibrary_Release = 1,
+ MPLibrary_DevelopmentRevision = 1
+};
+
+
+
+typedef struct OpaqueMPProcessID* MPProcessID;
+typedef struct OpaqueMPTaskID* MPTaskID;
+typedef struct OpaqueMPQueueID* MPQueueID;
+typedef struct OpaqueMPSemaphoreID* MPSemaphoreID;
+typedef struct OpaqueMPCriticalRegionID* MPCriticalRegionID;
+typedef struct OpaqueMPTimerID* MPTimerID;
+typedef struct OpaqueMPEventID* MPEventID;
+typedef struct OpaqueMPAddressSpaceID* MPAddressSpaceID;
+typedef struct OpaqueMPNotificationID* MPNotificationID;
+typedef struct OpaqueMPCoherenceID* MPCoherenceID;
+typedef struct OpaqueMPCpuID* MPCpuID;
+typedef struct OpaqueMPAreaID* MPAreaID;
+typedef struct OpaqueMPConsoleID* MPConsoleID;
+typedef struct OpaqueMPOpaqueID* MPOpaqueID;
+enum {
+ /* Values for MPOpaqueIDClass.*/
+ kOpaqueAnyID = 0,
+ kOpaqueProcessID = 1,
+ kOpaqueTaskID = 2,
+ kOpaqueTimerID = 3,
+ kOpaqueQueueID = 4,
+ kOpaqueSemaphoreID = 5,
+ kOpaqueCriticalRegionID = 6,
+ kOpaqueCpuID = 7,
+ kOpaqueAddressSpaceID = 8,
+ kOpaqueEventID = 9,
+ kOpaqueCoherenceID = 10,
+ kOpaqueAreaID = 11,
+ kOpaqueNotificationID = 12,
+ kOpaqueConsoleID = 13
+};
+
+typedef UInt32 MPOpaqueIDClass;
+
+enum {
+ kMPNoID = kInvalidID /* New code should use kInvalidID everywhere.*/
+};
+
+
+typedef OptionBits MPTaskOptions;
+typedef UInt32 TaskStorageIndex;
+typedef UInt32 TaskStorageValue;
+typedef ItemCount MPSemaphoreCount;
+typedef UInt32 MPTaskWeight;
+typedef UInt32 MPEventFlags;
+typedef UInt32 MPExceptionKind;
+typedef UInt32 MPTaskStateKind;
+typedef UInt32 MPPageSizeClass;
+
+enum {
+ kDurationImmediate = 0L,
+ kDurationForever = 0x7FFFFFFF,
+ kDurationMillisecond = 1,
+ kDurationMicrosecond = -1
+};
+
+
+/*
+ .
+ ===========================================================================================
+ Process/Processor Services
+ ==========================
+*/
+
+
+
+/*
+ * MPProcessors()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ItemCount )
+MPProcessors(void);
+
+
+/* The physical total.*/
+
+/*
+ * MPProcessorsScheduled()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ItemCount )
+MPProcessorsScheduled(void);
+
+
+/* Those currently in use.*/
+
+/*
+ .
+ ===========================================================================================
+ Tasking Services
+ ================
+*/
+
+
+
+enum {
+ /* For MPCreateTask options*/
+ kMPCreateTaskSuspendedMask = 1L << 0,
+ kMPCreateTaskTakesAllExceptionsMask = 1L << 1,
+ kMPCreateTaskNotDebuggableMask = 1L << 2,
+ kMPCreateTaskValidOptionsMask = kMPCreateTaskSuspendedMask | kMPCreateTaskTakesAllExceptionsMask | kMPCreateTaskNotDebuggableMask
+};
+
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+
+
+typedef CALLBACK_API_C( OSStatus , TaskProc )(void * parameter);
+
+/*
+ * MPCreateTask()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPCreateTask(
+ TaskProc entryPoint,
+ void * parameter,
+ ByteCount stackSize,
+ MPQueueID notifyQueue,
+ void * terminationParameter1,
+ void * terminationParameter2,
+ MPTaskOptions options,
+ MPTaskID * task);
+
+
+
+
+/*
+ * MPTerminateTask()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPTerminateTask(
+ MPTaskID task,
+ OSStatus terminationStatus);
+
+
+
+
+/*
+ * MPSetTaskWeight()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSetTaskWeight(
+ MPTaskID task,
+ MPTaskWeight weight);
+
+
+
+
+/*
+ * MPTaskIsPreemptive()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( Boolean )
+MPTaskIsPreemptive(MPTaskID taskID);
+
+
+/* May be kInvalidID.*/
+
+/*
+ * MPExit()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+MPExit(OSStatus status);
+
+
+
+
+/*
+ * MPYield()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+MPYield(void);
+
+
+
+
+/*
+ * MPCurrentTaskID()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( MPTaskID )
+MPCurrentTaskID(void);
+
+
+
+
+/*
+ * MPSetTaskType()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.3 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.1 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSetTaskType(
+ MPTaskID task,
+ OSType taskType);
+
+
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+/*
+ ---------------------------------------------------
+ ! The task storage services are new in version 2.0.
+*/
+
+
+
+/*
+ * MPAllocateTaskStorageIndex()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPAllocateTaskStorageIndex(TaskStorageIndex * index);
+
+
+
+
+/*
+ * MPDeallocateTaskStorageIndex()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDeallocateTaskStorageIndex(TaskStorageIndex index);
+
+
+
+
+/*
+ * MPSetTaskStorageValue()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSetTaskStorageValue(
+ TaskStorageIndex index,
+ TaskStorageValue value);
+
+
+
+
+/*
+ * MPGetTaskStorageValue()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( TaskStorageValue )
+MPGetTaskStorageValue(TaskStorageIndex index);
+
+
+
+/*
+ .
+ ===========================================================================================
+ Synchronization Services
+ ========================
+*/
+
+
+
+/*
+ * MPCreateQueue()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPCreateQueue(MPQueueID * queue);
+
+
+
+
+/*
+ * MPDeleteQueue()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDeleteQueue(MPQueueID queue);
+
+
+
+
+/*
+ * MPNotifyQueue()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPNotifyQueue(
+ MPQueueID queue,
+ void * param1,
+ void * param2,
+ void * param3);
+
+
+
+
+/*
+ * MPWaitOnQueue()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPWaitOnQueue(
+ MPQueueID queue,
+ void ** param1,
+ void ** param2,
+ void ** param3,
+ Duration timeout);
+
+
+
+
+/*
+ * MPSetQueueReserve()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSetQueueReserve(
+ MPQueueID queue,
+ ItemCount count);
+
+
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+
+/*
+ * MPCreateSemaphore()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPCreateSemaphore(
+ MPSemaphoreCount maximumValue,
+ MPSemaphoreCount initialValue,
+ MPSemaphoreID * semaphore);
+
+
+
+
+/*
+ * MPDeleteSemaphore()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDeleteSemaphore(MPSemaphoreID semaphore);
+
+
+
+
+/*
+ * MPSignalSemaphore()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSignalSemaphore(MPSemaphoreID semaphore);
+
+
+
+
+/*
+ * MPWaitOnSemaphore()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPWaitOnSemaphore(
+ MPSemaphoreID semaphore,
+ Duration timeout);
+
+
+
+#define MPCreateBinarySemaphore(semaphore) \
+ MPCreateSemaphore ( 1, 1, (semaphore) )
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+
+/*
+ * MPCreateCriticalRegion()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPCreateCriticalRegion(MPCriticalRegionID * criticalRegion);
+
+
+
+
+/*
+ * MPDeleteCriticalRegion()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDeleteCriticalRegion(MPCriticalRegionID criticalRegion);
+
+
+
+
+/*
+ * MPEnterCriticalRegion()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPEnterCriticalRegion(
+ MPCriticalRegionID criticalRegion,
+ Duration timeout);
+
+
+
+
+/*
+ * MPExitCriticalRegion()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPExitCriticalRegion(MPCriticalRegionID criticalRegion);
+
+
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+/*
+ * MPCreateEvent()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSStatus )
+MPCreateEvent(MPEventID * event);
+
+
+
+/*
+ * MPDeleteEvent()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDeleteEvent(MPEventID event);
+
+
+
+
+/*
+ * MPSetEvent()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSetEvent(
+ MPEventID event,
+ MPEventFlags flags);
+
+
+
+/*
+ * MPWaitForEvent()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API( OSStatus )
+MPWaitForEvent(
+ MPEventID event,
+ MPEventFlags * flags,
+ Duration timeout);
+
+
+/*
+ .
+ ===========================================================================================
+ Notification Services (API)
+ =====================
+*/
+
+
+
+/*
+ * MPCreateNotification()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.1 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPCreateNotification(MPNotificationID * notificationID);
+
+
+
+
+/*
+ * MPDeleteNotification()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.1 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDeleteNotification(MPNotificationID notificationID);
+
+
+
+
+/*
+ * MPModifyNotification()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.1 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPModifyNotification(
+ MPNotificationID notificationID,
+ MPOpaqueID anID,
+ void * notifyParam1,
+ void * notifyParam2,
+ void * notifyParam3);
+
+
+
+
+/*
+ * MPModifyNotificationParameters()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.3 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.1 and later
+ */
+EXTERN_API_C( OSStatus )
+MPModifyNotificationParameters(
+ MPNotificationID notificationID,
+ MPOpaqueIDClass kind,
+ void * notifyParam1,
+ void * notifyParam2,
+ void * notifyParam3);
+
+
+
+
+/*
+ * MPCauseNotification()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.1 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPCauseNotification(MPNotificationID notificationID);
+
+
+
+/*
+ .
+ ===========================================================================================
+ Timer Services
+ ==============
+*/
+
+
+/*
+ --------------------------------------------
+ ! The timer services are new in version 2.0.
+*/
+
+
+#if 0
+/* For now these are taken from DriverServices, should be in a better place.*/
+#if CALL_NOT_IN_CARBON
+/*
+ * UpTime()
+ *
+ * Availability:
+ * Non-Carbon CFM: not available
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( AbsoluteTime )
+UpTime(void);
+
+
+/*
+ * DurationToAbsolute()
+ *
+ * Availability:
+ * Non-Carbon CFM: not available
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( AbsoluteTime )
+DurationToAbsolute(Duration duration);
+
+
+/*
+ * AbsoluteToDuration()
+ *
+ * Availability:
+ * Non-Carbon CFM: not available
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( Duration )
+AbsoluteToDuration(AbsoluteTime time);
+
+
+#endif /* CALL_NOT_IN_CARBON */
+
+#endif /* 0 */
+
+
+enum {
+ /* For MPArmTimer options*/
+ kMPPreserveTimerIDMask = 1L << 0,
+ kMPTimeIsDeltaMask = 1L << 1,
+ kMPTimeIsDurationMask = 1L << 2
+};
+
+
+
+/*
+ * MPDelayUntil()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDelayUntil(AbsoluteTime * expirationTime);
+
+
+
+
+#if CALL_NOT_IN_CARBON
+/*
+ * MPDelayUntilSys()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.1 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API( OSStatus )
+MPDelayUntilSys(AbsoluteTime * expirationTime);
+
+
+
+
+#endif /* CALL_NOT_IN_CARBON */
+
+/*
+ * MPCreateTimer()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPCreateTimer(MPTimerID * timerID);
+
+
+
+
+/*
+ * MPDeleteTimer()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDeleteTimer(MPTimerID timerID);
+
+
+
+
+/*
+ * MPSetTimerNotify()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSetTimerNotify(
+ MPTimerID timerID,
+ MPOpaqueID anID,
+ void * notifyParam1,
+ void * notifyParam2,
+ void * notifyParam3);
+
+
+
+
+/*
+ * MPArmTimer()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPArmTimer(
+ MPTimerID timerID,
+ AbsoluteTime * expirationTime,
+ OptionBits options);
+
+
+
+
+/*
+ * MPCancelTimer()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPCancelTimer(
+ MPTimerID timerID,
+ AbsoluteTime * timeRemaining);
+
+
+
+/*
+ .
+ ===========================================================================================
+ Memory Services
+ ===============
+*/
+
+
+enum {
+ /* Maximum allocation request size is 1GB.*/
+ kMPMaxAllocSize = 1024L * 1024 * 1024
+};
+
+enum {
+ /* Values for the alignment parameter to MPAllocateAligned.*/
+ kMPAllocateDefaultAligned = 0,
+ kMPAllocate8ByteAligned = 3,
+ kMPAllocate16ByteAligned = 4,
+ kMPAllocate32ByteAligned = 5,
+ kMPAllocate1024ByteAligned = 10,
+ kMPAllocate4096ByteAligned = 12,
+ kMPAllocateMaxAlignment = 16, /* Somewhat arbitrary limit on expectations.*/
+ kMPAllocateAltiVecAligned = kMPAllocate16ByteAligned, /* The P.C. name.*/
+ kMPAllocateVMXAligned = kMPAllocateAltiVecAligned, /* The older, common name.*/
+ kMPAllocateVMPageAligned = 254, /* Pseudo value, converted at runtime.*/
+ kMPAllocateInterlockAligned = 255 /* Pseudo value, converted at runtime.*/
+};
+
+
+
+enum {
+ /* Values for the options parameter to MPAllocateAligned.*/
+ kMPAllocateClearMask = 0x0001, /* Zero the allocated block.*/
+ kMPAllocateGloballyMask = 0x0002, /* Allocate from the globally visible pool.*/
+ kMPAllocateResidentMask = 0x0004, /* Allocate from the RAM-resident pool.*/
+ kMPAllocateNoGrowthMask = 0x0010, /* Do not attempt to grow the pool.*/
+ kMPAllocateNoCreateMask = 0x0020 /* Do not attempt to create the pool if it doesn't exist yet.*/
+};
+
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+
+/*
+ * MPAllocateAligned()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( LogicalAddress )
+MPAllocateAligned(
+ ByteCount size,
+ UInt8 alignment,
+ OptionBits options);
+
+
+/* ! MPAllocateAligned is new in version 2.0.*/
+
+/*
+ * MPAllocate()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( LogicalAddress )
+MPAllocate(ByteCount size);
+
+
+/* Use MPAllocateAligned instead.*/
+
+/*
+ * MPFree()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+MPFree(LogicalAddress object);
+
+
+
+
+/*
+ * MPGetAllocatedBlockSize()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( ByteCount )
+MPGetAllocatedBlockSize(LogicalAddress object);
+
+
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+
+/*
+ * MPBlockCopy()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+MPBlockCopy(
+ LogicalAddress source,
+ LogicalAddress destination,
+ ByteCount size);
+
+
+
+
+/*
+ * MPBlockClear()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+MPBlockClear(
+ LogicalAddress address,
+ ByteCount size);
+
+
+/* ! MPBlockClear is new in version 2.0.*/
+
+/*
+ * MPDataToCode()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+MPDataToCode(
+ LogicalAddress address,
+ ByteCount size);
+
+
+/* ! MPDataToCode is new in version 2.0.*/
+/*
+ .
+ ===========================================================================================
+ Exception/Debugging Services
+ ============================
+*/
+
+
+/*
+ -------------------------------------------------------------------------------------------
+ *** Important Note ***
+ ----------------------
+
+ The functions MPExtractTaskState and MPSetTaskState infer the size of the "info" buffer
+ from the "kind" parameter. A given value for MPTaskStateKind will always refer to a
+ single specific physical buffer layout. Should new register sets be added, or the size
+ or number of any registers change, new values of MPTaskStateKind will be introduced to
+ refer to the new buffer layouts.
+
+ The following types for the buffers are in MachineExceptions. The correspondence between
+ MPTaskStateKind values and MachineExceptions types is:
+
+ kMPTaskStateRegisters -> RegisterInformation
+ kMPTaskStateFPU -> FPUInformation
+ kMPTaskStateVectors -> VectorInformation
+ kMPTaskStateMachine -> MachineInformation
+ kMPTaskState32BitMemoryException -> ExceptionInfo for old-style 32-bit memory exceptions
+
+ For reference, on PowerPC the MachineExceptions types contain:
+
+ RegisterInformation -> The GPRs, 32 values of 64 bits each.
+ FPUInformation -> The FPRs plus FPSCR, 32 values of 64 bits each, one value of
+ 32 bits.
+ VectorInformation -> The AltiVec vector registers plus VSCR and VRSave, 32 values
+ of 128 bits each, one value of 128 bits, and one 32 bit value.
+ MachineInformation -> The CTR, LR, PC, each of 64 bits. The CR, XER, MSR, MQ,
+ exception kind, and DSISR, each of 32 bits. The 64 bit DAR.
+ ExceptionInfo -> Only memory exceptions are specified, 4 fields of 32 bits each.
+ Note that this type only covers memory exceptions on 32-bit CPUs!
+ The following types are declared here:
+ kMPTaskStateTaskInfo -> MPTaskInfo
+*/
+
+
+
+enum {
+ /* Values for the TaskStateKind to MPExtractTaskState and MPSetTaskState.*/
+ kMPTaskStateRegisters = 0, /* The task general registers.*/
+ kMPTaskStateFPU = 1, /* The task floating point registers*/
+ kMPTaskStateVectors = 2, /* The task vector registers*/
+ kMPTaskStateMachine = 3, /* The task machine registers*/
+ kMPTaskState32BitMemoryException = 4, /* The task memory exception information for 32-bit CPUs.*/
+ kMPTaskStateTaskInfo = 5 /* Static and dynamic information about the task.*/
+};
+
+
+
+enum {
+ /* Option bits and numbers for MPDisposeTaskException.*/
+ kMPTaskPropagate = 0, /* The exception is propagated.*/
+ kMPTaskResumeStep = 1, /* The task is resumed and single step is enabled.*/
+ kMPTaskResumeBranch = 2, /* The task is resumed and branch stepping is enabled.*/
+ kMPTaskResumeMask = 0x0000, /* The task is resumed.*/
+ kMPTaskPropagateMask = 1 << kMPTaskPropagate, /* The exception is propagated.*/
+ kMPTaskResumeStepMask = 1 << kMPTaskResumeStep, /* The task is resumed and single step is enabled.*/
+ kMPTaskResumeBranchMask = 1 << kMPTaskResumeBranch /* The task is resumed and branch stepping is enabled.*/
+};
+
+
+
+enum {
+ /* For kMPTaskStateTaskInfo, the task's runState*/
+ kMPTaskBlocked = 0, /* Task is blocked (queued on resource)*/
+ kMPTaskReady = 1, /* Task is runnable*/
+ kMPTaskRunning = 2 /* Task is running*/
+};
+
+enum {
+ /* For kMPTaskStateTaskInfo, the version of the MPTaskInfo structure requested.*/
+ kMPTaskInfoVersion = 3
+};
+
+
+struct MPTaskInfo {
+ PBVersion version; /* Version 3 of the data structure requested*/
+
+ OSType name; /* Task name*/
+
+ OSType queueName; /* Task's queue owner name*/
+ UInt16 runState; /* Running, ready, blocked*/
+ UInt16 lastCPU; /* Address of CPU where task previously ran*/
+ UInt32 weight; /* Processing weight: 1 - 10,000*/
+
+ MPProcessID processID; /* Owning process ID*/
+
+ AbsoluteTime cpuTime; /* Accumulated task time*/
+ AbsoluteTime schedTime; /* Time when last scheduled*/
+ AbsoluteTime creationTime; /* Time when task created*/
+
+ ItemCount codePageFaults; /* Page faults from code execution*/
+ ItemCount dataPageFaults; /* Page faults from data access*/
+ ItemCount preemptions; /* Number of times task was preempted*/
+
+ MPCpuID cpuID; /* ID of CPU where task previously ran.*/
+ MPOpaqueID blockedObject; /* ID of blocked object.*/
+ MPAddressSpaceID spaceID; /* Address space ID of this task.*/
+
+ LogicalAddress stackBase; /* Base of stack (lowest address).*/
+ LogicalAddress stackLimit; /* Stack limit (highest address).*/
+ LogicalAddress stackCurr; /* Current stack address.*/
+};
+typedef struct MPTaskInfo MPTaskInfo;
+/*
+ Upon a task exception, the following message is sent to the designated queue:
+ 1. The MPTaskID,
+ 2. The exception kind. These are enumerated in the interfaces header MachineExceptions.h
+ 3. N/A
+*/
+
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+
+/*
+ * MPSetExceptionHandler()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSetExceptionHandler(
+ MPTaskID task,
+ MPQueueID exceptionQ);
+
+
+
+
+/*
+ * MPDisposeTaskException()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPDisposeTaskException(
+ MPTaskID task,
+ OptionBits action);
+
+
+
+
+/*
+ * MPExtractTaskState()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPExtractTaskState(
+ MPTaskID task,
+ MPTaskStateKind kind,
+ void * info);
+
+
+
+
+/*
+ * MPSetTaskState()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPSetTaskState(
+ MPTaskID task,
+ MPTaskStateKind kind,
+ void * info);
+
+
+
+
+/*
+ * MPThrowException()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPThrowException(
+ MPTaskID task,
+ MPExceptionKind kind);
+
+
+
+/* -------------------------------------------------------------------------------------------*/
+
+
+typedef UInt32 MPDebuggerLevel;
+enum {
+ kMPLowLevelDebugger = 0x00000000, /* MacsBug-like*/
+ kMPMidLevelDebugger = 0x10000000, /* Jasik-like*/
+ kMPHighLevelDebugger = 0x20000000 /* Metrowerks-like*/
+};
+
+
+
+/*
+ * MPRegisterDebugger()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPRegisterDebugger(
+ MPQueueID queue,
+ MPDebuggerLevel level);
+
+
+
+
+/*
+ * MPUnregisterDebugger()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( OSStatus )
+MPUnregisterDebugger(MPQueueID queue);
+
+
+
+/*
+ .
+ ===========================================================================================
+ Remote Call Services
+ ====================
+*/
+
+
+
+typedef CALLBACK_API_C( void *, MPRemoteProcedure )(void * parameter);
+
+typedef UInt8 MPRemoteContext;
+enum {
+ kMPAnyRemoteContext = 0,
+ kMPOwningProcessRemoteContext = 1,
+ kMPInterruptRemoteContext = 2,
+ kMPAsyncInterruptRemoteContext = 3
+};
+
+
+
+/*
+ * MPRemoteCall()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 2.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void * )
+MPRemoteCall(
+ MPRemoteProcedure remoteProc,
+ void * parameter,
+ MPRemoteContext context);
+
+
+/* ! MPRemoteCall is new in version 2.0.*/
+/*
+ .
+ ===========================================================================================
+ Checking API Availability
+ =========================
+*/
+
+
+/*
+ ===========================================================================================
+ *** WARNING: You must properly check the availability of MP services before calling them!
+ ===========================================================================================
+
+ Checking for the availability of the MP API is rather ugly. This is a historical problem,
+ caused by the original implementation letting itself get prepared when it really wasn't
+ usable and complicated by some important clients then depending on weak linking to "work".
+ (And further complicated by CFM not supporting "deferred" imports, which is how many
+ programmers think weak imports work.)
+
+ The end result is that the MP API library may get prepared by CFM but be totally unusable.
+ This means that if you import from the MP API library, you cannot simply check for a
+ resolved import to decide if MP services are available. Worse, if you explicitly prepare
+ the MP API library you cannot assume that a noErr result from GetSharedLibrary means that
+ MP services are available.
+
+ o If you import from the MP API library you MUST:
+
+ Use the MPLibraryIsLoaded macro (or equivalent code in languages other than C) to tell
+ if the MP API services are available. It is not sufficient to simply check that an
+ imported symbol is resolved as is commonly done for other libraries. The macro expands
+ to the expression:
+
+ ( ( (UInt32)_MPIsFullyInitialized != (UInt32)kUnresolvedCFragSymbolAddress ) &&
+ ( _MPIsFullyInitialized () ) )
+
+ This checks if the imported symbol _MPIsFullyInitialized is resolved and if resolved
+ calls it. Both parts must succeed for the MP API services to be available.
+
+ o If you explicitly prepare the MP API library you MUST:
+
+ Use code similar to the following example to tell if the MP API services are available.
+ It is not sufficient to depend on just a noErr result from GetSharedLibrary.
+
+ OSErr err;
+ Boolean mpIsAvailable = false;
+ CFragConnectionID connID = kInvalidID;
+ MPIsFullyInitializedProc mpIsFullyInitialized = NULL;
+
+ err = GetSharedLibrary ( "\pMPLibrary", kCompiledCFragArch, kReferenceCFrag,
+ &connID, NULL, NULL );
+
+ if ( err == noErr ) {
+ err = FindSymbol ( connID, "\p_MPIsFullyInitialized",
+ (Ptr *) &mpIsFullyInitialized, NULL );
+ }
+
+ if ( err == noErr ) {
+ mpIsAvailable = (* mpIsFullyInitialized) ();
+ }
+
+ ===========================================================================================
+*/
+
+
+/*
+ * _MPIsFullyInitialized()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( Boolean )
+_MPIsFullyInitialized(void);
+
+
+typedef CALLBACK_API_C( Boolean , MPIsFullyInitializedProc )(void);
+#define kMPUnresolvedCFragSymbolAddress 0
+#define MPLibraryIsLoaded() \
+ ( ( (UInt32)_MPIsFullyInitialized != (UInt32)kMPUnresolvedCFragSymbolAddress ) && \
+ ( _MPIsFullyInitialized () ) )
+/*
+ .
+ ===========================================================================================
+ Miscellaneous Services
+ ======================
+*/
+
+
+/*
+ * _MPLibraryVersion()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( void )
+_MPLibraryVersion(
+ const char ** versionCString,
+ UInt32 * major,
+ UInt32 * minor,
+ UInt32 * release,
+ UInt32 * revision);
+
+
+/*
+ .
+ ===========================================================================================
+ Unofficial Services
+ ===================
+*/
+
+
+/*
+ ===========================================================================================
+ *** WARNING ***
+ These services are not part of the officially documented multiprocessing API. They may not
+ be avaliable in future versions of Mac OS multiprocessing support, or in environments that
+ have a different underlying OS architecture such as Mac OS on top of a microkernel, the
+ Mac OS Blue Box under Mac OS X, native MP support in Mac OS X, etc.
+ ===========================================================================================
+*/
+
+#if CALL_NOT_IN_CARBON
+#if CALL_NOT_IN_CARBON
+/*
+ * _MPAllocateSys()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( LogicalAddress )
+_MPAllocateSys(ByteCount size);
+
+
+/* Use MPAllocateAligned instead.*/
+/*
+ * _MPRPC()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( void * )
+_MPRPC(
+ MPRemoteProcedure remoteProc,
+ void * parameter);
+
+
+/* Use _MPRemoteCall instead.*/
+/*
+ * _MPTaskIsToolboxSafe()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( Boolean )
+_MPTaskIsToolboxSafe(MPTaskID task);
+
+
+#endif /* CALL_NOT_IN_CARBON */
+
+#endif /* CALL_NOT_IN_CARBON */
+
+/*
+ * _MPLibraryIsCompatible()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibrary 1.0 and later
+ * CarbonLib: in CarbonLib 1.0 and later
+ * Mac OS X: in version 10.0 and later
+ */
+EXTERN_API_C( Boolean )
+_MPLibraryIsCompatible(
+ const char * versionCString,
+ UInt32 major,
+ UInt32 minor,
+ UInt32 release,
+ UInt32 revision);
+
+
+
+#define MPRPC _MPRPC
+#define MPTaskIsToolboxSafe _MPTaskIsToolboxSafe
+
+/*
+ .
+ ===========================================================================================
+ Defunct Services
+ ================
+*/
+
+#if CALL_NOT_IN_CARBON
+#ifndef MPIncludeDefunctServices
+#define MPIncludeDefunctServices 0
+#endif /* !defined(MPIncludeDefunctServices) */
+
+#if MPIncludeDefunctServices
+#if CALL_NOT_IN_CARBON
+/*
+ * _MPDebugStr()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibraryObsolete 1.0 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( void )
+_MPDebugStr(ConstStr255Param msg);
+
+
+/*
+ * _MPStatusPString()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibraryObsolete 1.0 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( StringPtr )
+_MPStatusPString(OSStatus status);
+
+
+/*
+ * _MPStatusCString()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibraryObsolete 1.0 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( const char * )
+_MPStatusCString(OSStatus status);
+
+
+
+#endif /* CALL_NOT_IN_CARBON */
+
+#include <stdarg.h>
+typedef CALLBACK_API_C( void , MPPrintfHandler )(MPTaskID taskID, const char *format, va_list args);
+#if CALL_NOT_IN_CARBON
+/*
+ * _MPInitializePrintf()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibraryObsolete 1.0 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( void )
+_MPInitializePrintf(MPPrintfHandler pfn);
+
+
+/*
+ * _MPPrintf()
+ *
+ * Availability:
+ * Non-Carbon CFM: in MPLibraryObsolete 1.0 and later
+ * CarbonLib: not available
+ * Mac OS X: not available
+ */
+EXTERN_API_C( void )
+_MPPrintf(const char * format, ...);
+
+
+#endif /* CALL_NOT_IN_CARBON */
+
+#endif /* MPIncludeDefunctServices */
+
+#endif /* CALL_NOT_IN_CARBON */
+
+/* ===========================================================================================*/
+
+
+
+#if PRAGMA_STRUCT_ALIGN
+ #pragma options align=reset
+#elif PRAGMA_STRUCT_PACKPUSH
+ #pragma pack(pop)
+#elif PRAGMA_STRUCT_PACK
+ #pragma pack()
+#endif
+
+#ifdef PRAGMA_IMPORT_OFF
+#pragma import off
+#elif PRAGMA_IMPORT
+#pragma import reset
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __MULTIPROCESSING__ */
+