Mercurial > projects > dstep
diff dstep/coreservices/carboncore/Multiprocessing.d @ 11:07194b026fa4
Added bindings to a couple of frameworks, new license + some other things
author | Jacob Carlborg <doob@me.com> |
---|---|
date | Sat, 01 Aug 2009 15:03:28 +0200 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/dstep/coreservices/carboncore/Multiprocessing.d Sat Aug 01 15:03:28 2009 +0200 @@ -0,0 +1,298 @@ +/** + * Copyright: Copyright (c) 2009 Jacob Carlborg. + * Authors: Jacob Carlborg + * Version: Initial created: Jul 21, 2009 + * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0) + */ +module dstep.coreservices.carboncore.Multiprocessing; + +//import dstep.AvailabilityMacros; +import dstep.coreservices.carboncore.MacTypes; +//import dstep.stdarg; + +struct OpaqueMPProcessID; +struct OpaqueMPTaskID; +struct OpaqueMPQueueID; +struct OpaqueMPSemaphoreID; +struct OpaqueMPCriticalRegionID; +struct OpaqueMPTimerID; +struct OpaqueMPEventID; +struct OpaqueMPAddressSpaceID; +struct OpaqueMPNotificationID; +struct OpaqueMPCoherenceID; +struct OpaqueMPCpuID; +struct OpaqueMPAreaID; +struct OpaqueMPConsoleID; +struct OpaqueMPOpaqueID; + + +alias OpaqueMPProcessID* MPProcessID; +alias OpaqueMPTaskID* MPTaskID; +alias OpaqueMPQueueID* MPQueueID; +alias OpaqueMPSemaphoreID* MPSemaphoreID; +alias OpaqueMPCriticalRegionID* MPCriticalRegionID; +alias OpaqueMPTimerID* MPTimerID; +alias OpaqueMPEventID* MPEventID; +alias OpaqueMPAddressSpaceID* MPAddressSpaceID; +alias OpaqueMPNotificationID* MPNotificationID; +alias OpaqueMPCoherenceID* MPCoherenceID; +alias OpaqueMPCpuID* MPCpuID; +alias OpaqueMPAreaID* MPAreaID; +alias OpaqueMPConsoleID* MPConsoleID; +alias OpaqueMPOpaqueID* MPOpaqueID; +alias uint MPOpaqueIDClass; +alias uint MPTaskOptions; +alias uint TaskStorageIndex; +alias LogicalAddress TaskStorageValue; +alias uint MPSemaphoreCount; +alias uint MPTaskWeight; +alias uint MPEventFlags; +alias uint MPExceptionKind; +alias uint MPTaskStateKind; +alias uint MPPageSizeClass; +alias uint MPDebuggerLevel; +alias ubyte MPRemoteContext; + +extern (C) +{ + alias ubyte function () MPIsFullyInitializedProc; + alias void * function (void*) MPRemoteProcedure; + alias int function (void*) TaskProc; +} + +enum +{ + MPLibrary_MajorVersion = 2, + MPLibrary_MinorVersion = 3, + MPLibrary_Release = 1, + MPLibrary_DevelopmentRevision = 1 +} + +enum +{ + 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 +} + +enum +{ + kMPNoID = 0 +} + +enum +{ + kDurationImmediate = 0L, + kDurationForever = 0x7FFFFFFF, + kDurationMillisecond = 1, + kDurationMicrosecond = -1 +} + +enum +{ + kMPCreateTaskSuspendedMask = 1L << 0, + kMPCreateTaskTakesAllExceptionsMask = 1L << 1, + kMPCreateTaskNotDebuggableMask = 1L << 2, + kMPCreateTaskValidOptionsMask = kMPCreateTaskSuspendedMask | kMPCreateTaskTakesAllExceptionsMask | kMPCreateTaskNotDebuggableMask +} + +enum +{ + kMPPreserveTimerIDMask = 1L << 0, + kMPTimeIsDeltaMask = 1L << 1, + kMPTimeIsDurationMask = 1L << 2 +} + +enum +{ + kMPMaxAllocSize = 1024L * 1024 * 1024 +} + +enum +{ + kMPAllocateDefaultAligned = 0, + kMPAllocate8ByteAligned = 3, + kMPAllocate16ByteAligned = 4, + kMPAllocate32ByteAligned = 5, + kMPAllocate1024ByteAligned = 10, + kMPAllocate4096ByteAligned = 12, + kMPAllocateMaxAlignment = 16, + kMPAllocateAltiVecAligned = kMPAllocate16ByteAligned, + kMPAllocateVMXAligned = kMPAllocateAltiVecAligned, + kMPAllocateVMPageAligned = 254, + kMPAllocateInterlockAligned = 255 +} + +enum +{ + kMPAllocateClearMask = 0x0001, + kMPAllocateGloballyMask = 0x0002, + kMPAllocateResidentMask = 0x0004, + kMPAllocateNoGrowthMask = 0x0010, + kMPAllocateNoCreateMask = 0x0020 +} + +enum +{ + kMPTaskStateRegisters = 0, + kMPTaskStateFPU = 1, + kMPTaskStateVectors = 2, + kMPTaskStateMachine = 3, + kMPTaskState32BitMemoryException = 4, + kMPTaskStateTaskInfo = 5 +} + +enum +{ + kMPTaskPropagate = 0, + kMPTaskResumeStep = 1, + kMPTaskResumeBranch = 2, + kMPTaskResumeMask = 0x0000, + kMPTaskPropagateMask = 1 << kMPTaskPropagate, + kMPTaskResumeStepMask = 1 << kMPTaskResumeStep, + kMPTaskResumeBranchMask = 1 << kMPTaskResumeBranch +} + +enum +{ + kMPTaskBlocked = 0, + kMPTaskReady = 1, + kMPTaskRunning = 2 +} + +enum +{ + kMPTaskInfoVersion = 3 +} + +enum +{ + kMPLowLevelDebugger = 0x00000000, + kMPMidLevelDebugger = 0x10000000, + kMPHighLevelDebugger = 0x20000000 +} + +enum +{ + kMPAnyRemoteContext = 0, + kMPOwningProcessRemoteContext = 1, + kMPInterruptRemoteContext = 2, + kMPAsyncInterruptRemoteContext = 3 +} + +struct MPTaskInfoVersion2 +{ + uint version_; + uint name; + uint queueName; + ushort runState; + ushort lastCPU; + uint weight; + MPProcessID processID; + AbsoluteTime cpuTime; + AbsoluteTime schedTime; + AbsoluteTime creationTime; + uint codePageFaults; + uint dataPageFaults; + uint preemptions; + MPCpuID cpuID; +} + + +struct MPTaskInfo +{ + uint version_; + uint name; + uint queueName; + ushort runState; + ushort lastCPU; + uint weight; + MPProcessID processID; + AbsoluteTime cpuTime; + AbsoluteTime schedTime; + AbsoluteTime creationTime; + uint codePageFaults; + uint dataPageFaults; + uint preemptions; + MPCpuID cpuID; + MPOpaqueID blockedObject; + MPAddressSpaceID spaceID; + LogicalAddress stackBase; + LogicalAddress stackLimit; + LogicalAddress stackCurr; +} + +extern (C) +{ + uint MPProcessors (); + uint MPProcessorsScheduled (); + int MPCreateTask (TaskProc entryPoint, void* parameter, uint stackSize, MPQueueID notifyQueue, void* terminationParameter1, void* terminationParameter2, uint options, MPTaskID* task); + int MPTerminateTask (MPTaskID task, int terminationStatus); + int MPSetTaskWeight (MPTaskID task, uint weight); + ubyte MPTaskIsPreemptive (MPTaskID taskID); + void MPExit (int status); + void MPYield (); + MPTaskID MPCurrentTaskID (); + int MPSetTaskType (MPTaskID task, uint taskType); + int MPAllocateTaskStorageIndex (TaskStorageIndex* taskIndex); + int MPDeallocateTaskStorageIndex (uint taskIndex); + int MPSetTaskStorageValue (uint taskIndex, TaskStorageValue value); + TaskStorageValue MPGetTaskStorageValue (uint taskIndex); + int MPCreateQueue (MPQueueID* queue); + int MPDeleteQueue (MPQueueID queue); + int MPNotifyQueue (MPQueueID queue, void* param1, void* param2, void* param3); + int MPWaitOnQueue (MPQueueID queue, void** param1, void** param2, void** param3, int timeout); + int MPSetQueueReserve (MPQueueID queue, uint count); + int MPCreateSemaphore (uint maximumValue, uint initialValue, MPSemaphoreID* semaphore); + int MPDeleteSemaphore (MPSemaphoreID semaphore); + int MPSignalSemaphore (MPSemaphoreID semaphore); + int MPWaitOnSemaphore (MPSemaphoreID semaphore, int timeout); + int MPCreateCriticalRegion (MPCriticalRegionID* criticalRegion); + int MPDeleteCriticalRegion (MPCriticalRegionID criticalRegion); + int MPEnterCriticalRegion (MPCriticalRegionID criticalRegion, int timeout); + int MPExitCriticalRegion (MPCriticalRegionID criticalRegion); + int MPCreateEvent (MPEventID* event); + int MPDeleteEvent (MPEventID event); + int MPSetEvent (MPEventID event, uint flags); + int MPWaitForEvent (MPEventID event, MPEventFlags* flags, int timeout); + int MPCreateNotification (MPNotificationID* notificationID); + int MPDeleteNotification (MPNotificationID notificationID); + int MPModifyNotification (MPNotificationID notificationID, MPOpaqueID anID, void* notifyParam1, void* notifyParam2, void* notifyParam3); + int MPModifyNotificationParameters (MPNotificationID notificationID, uint kind, void* notifyParam1, void* notifyParam2, void* notifyParam3); + int MPCauseNotification (MPNotificationID notificationID); + int MPDelayUntil (AbsoluteTime* expirationTime); + int MPCreateTimer (MPTimerID* timerID); + int MPDeleteTimer (MPTimerID timerID); + int MPSetTimerNotify (MPTimerID timerID, MPOpaqueID anID, void* notifyParam1, void* notifyParam2, void* notifyParam3); + int MPArmTimer (MPTimerID timerID, AbsoluteTime* expirationTime, uint options); + int MPCancelTimer (MPTimerID timerID, AbsoluteTime* timeRemaining); + LogicalAddress MPAllocateAligned (uint size, ubyte alignment, uint options); + LogicalAddress MPAllocate (uint size); + void MPFree (LogicalAddress object); + uint MPGetAllocatedBlockSize (LogicalAddress object); + void MPBlockCopy (LogicalAddress source, LogicalAddress destination, uint size); + void MPBlockClear (LogicalAddress address, uint size); + int MPSetExceptionHandler (MPTaskID task, MPQueueID exceptionQ); + int MPDisposeTaskException (MPTaskID task, uint action); + int MPExtractTaskState (MPTaskID task, uint kind, void* info); + int MPSetTaskState (MPTaskID task, uint kind, void* info); + int MPThrowException (MPTaskID task, uint kind); + int MPRegisterDebugger (MPQueueID queue, uint level); + int MPUnregisterDebugger (MPQueueID queue); + void* MPRemoteCall (MPRemoteProcedure remoteProc, void* parameter, ubyte context); + void* MPRemoteCallCFM (MPRemoteProcedure remoteProc, void* parameter, ubyte context); + ubyte _MPIsFullyInitialized (); + void _MPLibraryVersion (char** versionCString, UInt32* major, UInt32* minor, UInt32* release, UInt32* revision); + ubyte _MPLibraryIsCompatible (char* versionCString, uint major, uint minor, uint release, uint revision); +} \ No newline at end of file