Author: hbelusca
Date: Thu Apr 3 22:03:14 2014
New Revision: 62605
URL:
http://svn.reactos.org/svn/reactos?rev=62605&view=rev
Log:
[ACPICA]
Do not assume that, when compiling from Windows, we cannot use GCC. In fact we can, and
this is what we did before...
Move asm-specific code to where it should belong.
I've checked that: MSVC_asm_code(old_acpica_version) ==
MSVC_asm_code(new_acpica_version), so that I took its GCC equivalent from our old version
of ACPICA and placed it there.
Part 1 of our modifications to ACPICA code.
CORE-8044
Modified:
trunk/reactos/drivers/bus/acpi/acpica/include/platform/acgcc.h
trunk/reactos/drivers/bus/acpi/acpica/include/platform/acmsvc.h
trunk/reactos/drivers/bus/acpi/acpica/include/platform/acwin.h
Modified: trunk/reactos/drivers/bus/acpi/acpica/include/platform/acgcc.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/bus/acpi/acpica/in…
==============================================================================
--- trunk/reactos/drivers/bus/acpi/acpica/include/platform/acgcc.h [iso-8859-1]
(original)
+++ trunk/reactos/drivers/bus/acpi/acpica/include/platform/acgcc.h [iso-8859-1] Thu Apr 3
22:03:14 2014
@@ -147,4 +147,65 @@
#undef strchr
#endif
+
+/* Flush CPU cache - used when going to sleep. Wbinvd or similar. */
+
+#ifdef ACPI_APPLICATION
+#define ACPI_FLUSH_CPU_CACHE()
+#else
+#define ACPI_FLUSH_CPU_CACHE() asm ("WBINVD")
+#endif
+
+/*
+ * Global Lock acquire/release code
+ *
+ * Note: Taken from our old adaptation.
+ * TODO: Check whether it is equivalent to the MSVC code
+ * (which was also the same in the older version).
+ */
+#define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
+do { \
+ int dummy; \
+ asm("1: movl (%1),%%eax;" \
+ "movl %%eax,%%edx;" \
+ "andl %2,%%edx;" \
+ "btsl $0x1,%%edx;" \
+ "adcl $0x0,%%edx;" \
+ "lock; cmpxchgl %%edx,(%1);" \
+ "jnz 1b;" \
+ "cmpb $0x3,%%dl;" \
+ "sbbl %%eax,%%eax" \
+
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~1L):"dx");
\
+} while(0)
+
+#define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
+do { \
+ int dummy; \
+ asm("1: movl (%1),%%eax;" \
+ "movl %%eax,%%edx;" \
+ "andl %2,%%edx;" \
+ "lock; cmpxchgl %%edx,(%1);" \
+ "jnz 1b;" \
+ "andl $0x1,%%eax" \
+
:"=a"(Acq),"=c"(dummy):"c"(GLptr),"i"(~3L):"dx");
\
+} while(0)
+
+
+/*
+ * Note: This is also taken from our old adaptation.
+ * See acmsvc.h for where it came originally.
+ */
+#define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
+{ \
+ q32 = n_hi / d32; \
+ r32 = n_lo / d32; \
+}
+
+#define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
+{ \
+ n_hi >>= 1; \
+ n_lo >>= 1; \
+}
+
+
#endif /* __ACGCC_H__ */
Modified: trunk/reactos/drivers/bus/acpi/acpica/include/platform/acmsvc.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/bus/acpi/acpica/in…
==============================================================================
--- trunk/reactos/drivers/bus/acpi/acpica/include/platform/acmsvc.h [iso-8859-1]
(original)
+++ trunk/reactos/drivers/bus/acpi/acpica/include/platform/acmsvc.h [iso-8859-1] Thu Apr
3 22:03:14 2014
@@ -202,6 +202,67 @@
}
#endif
+
+/* Flush CPU cache - used when going to sleep. Wbinvd or similar. */
+
+#ifdef ACPI_APPLICATION
+#define ACPI_FLUSH_CPU_CACHE()
+#else
+#define ACPI_FLUSH_CPU_CACHE() __asm {WBINVD}
+#endif
+
+/*
+ * Global Lock acquire/release code
+ *
+ * Note: Handles case where the FACS pointer is null
+ */
+#define ACPI_ACQUIRE_GLOBAL_LOCK(FacsPtr, Acq) __asm \
+{ \
+ __asm mov eax, 0xFF \
+ __asm mov ecx, FacsPtr \
+ __asm or ecx, ecx \
+ __asm jz exit_acq \
+ __asm lea ecx, [ecx].GlobalLock \
+ \
+ __asm acq10: \
+ __asm mov eax, [ecx] \
+ __asm mov edx, eax \
+ __asm and edx, 0xFFFFFFFE \
+ __asm bts edx, 1 \
+ __asm adc edx, 0 \
+ __asm lock cmpxchg dword ptr [ecx], edx \
+ __asm jnz acq10 \
+ \
+ __asm cmp dl, 3 \
+ __asm sbb eax, eax \
+ \
+ __asm exit_acq: \
+ __asm mov Acq, al \
+}
+
+#define ACPI_RELEASE_GLOBAL_LOCK(FacsPtr, Pnd) __asm \
+{ \
+ __asm xor eax, eax \
+ __asm mov ecx, FacsPtr \
+ __asm or ecx, ecx \
+ __asm jz exit_rel \
+ __asm lea ecx, [ecx].GlobalLock \
+ \
+ __asm Rel10: \
+ __asm mov eax, [ecx] \
+ __asm mov edx, eax \
+ __asm and edx, 0xFFFFFFFC \
+ __asm lock cmpxchg dword ptr [ecx], edx \
+ __asm jnz Rel10 \
+ \
+ __asm cmp dl, 3 \
+ __asm and eax, 1 \
+ \
+ __asm exit_rel: \
+ __asm mov Pnd, al \
+}
+
+
/* warn C4100: unreferenced formal parameter */
#pragma warning(disable:4100)
Modified: trunk/reactos/drivers/bus/acpi/acpica/include/platform/acwin.h
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/drivers/bus/acpi/acpica/in…
==============================================================================
--- trunk/reactos/drivers/bus/acpi/acpica/include/platform/acwin.h [iso-8859-1]
(original)
+++ trunk/reactos/drivers/bus/acpi/acpica/include/platform/acwin.h [iso-8859-1] Thu Apr 3
22:03:14 2014
@@ -118,9 +118,11 @@
/*! [Begin] no source code translation (Keep the include) */
-/* Windows uses VC */
-#ifdef _MSC_VER
+/* Windows uses VC or GCC */
+#if defined(_MSC_VER)
#include "acmsvc.h"
+#elif defined(__GNUC__)
+#include "acgcc.h"
#endif
/*! [End] no source code translation !*/
@@ -152,67 +154,10 @@
/*! [Begin] no source code translation */
-#ifdef ACPI_APPLICATION
-#define ACPI_FLUSH_CPU_CACHE()
-#else
-#define ACPI_FLUSH_CPU_CACHE() __asm {WBINVD}
-#endif
-
#ifdef _DEBUG
#define ACPI_SIMPLE_RETURN_MACROS
#endif
/*! [End] no source code translation !*/
-/*
- * Global Lock acquire/release code
- *
- * Note: Handles case where the FACS pointer is null
- */
-#define ACPI_ACQUIRE_GLOBAL_LOCK(FacsPtr, Acq) __asm \
-{ \
- __asm mov eax, 0xFF \
- __asm mov ecx, FacsPtr \
- __asm or ecx, ecx \
- __asm jz exit_acq \
- __asm lea ecx, [ecx].GlobalLock \
- \
- __asm acq10: \
- __asm mov eax, [ecx] \
- __asm mov edx, eax \
- __asm and edx, 0xFFFFFFFE \
- __asm bts edx, 1 \
- __asm adc edx, 0 \
- __asm lock cmpxchg dword ptr [ecx], edx \
- __asm jnz acq10 \
- \
- __asm cmp dl, 3 \
- __asm sbb eax, eax \
- \
- __asm exit_acq: \
- __asm mov Acq, al \
-}
-
-#define ACPI_RELEASE_GLOBAL_LOCK(FacsPtr, Pnd) __asm \
-{ \
- __asm xor eax, eax \
- __asm mov ecx, FacsPtr \
- __asm or ecx, ecx \
- __asm jz exit_rel \
- __asm lea ecx, [ecx].GlobalLock \
- \
- __asm Rel10: \
- __asm mov eax, [ecx] \
- __asm mov edx, eax \
- __asm and edx, 0xFFFFFFFC \
- __asm lock cmpxchg dword ptr [ecx], edx \
- __asm jnz Rel10 \
- \
- __asm cmp dl, 3 \
- __asm and eax, 1 \
- \
- __asm exit_rel: \
- __asm mov Pnd, al \
-}
-
#endif /* __ACWIN_H__ */