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