\r
/* INCLUDES ******************************************************************/\r
#include <ndk/asm.h>\r
+#include <internal/i386/asmmacro.S>\r
.intel_syntax noprefix\r
\r
-//#define CONFIG_SMP\r
-\r
-#ifdef CONFIG_SMP\r
-#define LOCK lock\r
-#define ACQUIRE_SPINLOCK(x, y) \\r
- lock bts dword ptr [x], 0; \\r
- jb y\r
-#define RELEASE_SPINLOCK(x) mov byte ptr [x], 0\r
-#define SPIN_ON_LOCK(x, y) \\r
-1: \\r
- test dword ptr [x], 1; \\r
- jz y; \\r
- pause; \\r
- jmp 1b\r
-#else\r
-#define LOCK\r
-#define ACQUIRE_SPINLOCK(x, y)\r
-#define RELEASE_SPINLOCK(x) \r
-#endif\r
-\r
/* FUNCTIONS ****************************************************************/\r
\r
/*\r
\r
/* INCLUDES ******************************************************************/\r
#include <ndk/asm.h>\r
+#include <internal/i386/asmmacro.S>\r
.intel_syntax noprefix\r
\r
-//#define CONFIG_SMP\r
-\r
-#ifdef CONFIG_SMP\r
-#define LOCK lock\r
-#define ACQUIRE_SPINLOCK(x, y) \\r
- lock bts dword ptr [x], 0; \\r
- jb y\r
-#define RELEASE_SPINLOCK(x) mov byte ptr [x], 0\r
-#define SPIN_ON_LOCK(x, y) \\r
-1: \\r
- test dword ptr [x], 1; \\r
- jz y; \\r
- pause; \\r
- jmp 1b\r
-#else\r
-#define LOCK\r
-#define ACQUIRE_SPINLOCK(x, y)\r
-#define RELEASE_SPINLOCK(x) \r
-#endif\r
-\r
/* FUNCTIONS ****************************************************************/\r
\r
/*\r
--- /dev/null
+/*\r
+ * COPYRIGHT: See COPYING in the top level directory\r
+ * PROJECT: ReactOS kernel\r
+ * FILE: ntoskrnlinclude/i386/asmmacro.S\r
+ * PURPOSE: Assembly Macros for Spinlocks and common Trap Code (TODO)\r
+ * PROGRAMMERS: Alex Ionescu (alex@relsoft.net)\r
+ */\r
+ \r
+/* INCLUDES ******************************************************************/\r
+#include <ndk/asm.h>\r
+.intel_syntax noprefix\r
+\r
+//\r
+// These macros are inlined equivalents of KiAcquire/ReleaseSpinlock, that is,\r
+// they will not be compiled into non-SMP builds. Usage is as follows:\r
+//\r
+// .BeginYourFunction\r
+// mov reg, lockaddr\r
+// ACQUIRE_SPINLOCK(reg, .spin)\r
+// <thread-safe code here>\r
+// RELEASE_SPINLOCK(reg)\r
+// <misc code here>\r
+// retn\r
+// #IFDEF CONFIG_SMP\r
+// .spin\r
+// <any necessary steps to be able to jump back safely>\r
+/ SPIN_ON_LOCK(reg, .BeginYourFunction)\r
+// #ENDIF\r
+//\r
+#ifdef CONFIG_SMP\r
+#define LOCK lock\r
+#define ACQUIRE_SPINLOCK(x, y) \\r
+ lock bts dword ptr [x], 0; \\r
+ jb y\r
+#define RELEASE_SPINLOCK(x) mov byte ptr [x], 0\r
+#define SPIN_ON_LOCK(x, y) \\r
+1: \\r
+ test dword ptr [x], 1; \\r
+ jz y; \\r
+ pause; \\r
+ jmp 1b\r
+#else\r
+#define LOCK\r
+#define ACQUIRE_SPINLOCK(x, y)\r
+#define RELEASE_SPINLOCK(x) \r
+#endif\r
+\r
+//\r
+// These macros control common execution paths for Traps and System Call Code\r
+// TODO\r
+//\r
+\r