[ACPICA]
[reactos.git] / reactos / drivers / bus / acpi / acpica / include / platform / acgcc.h
index e517a23..e03b9ba 100644 (file)
@@ -8,13 +8,13 @@
  *
  * 1. Copyright Notice
  *
- * Some or all of this work - Copyright (c) 1999 - 2009, Intel Corp.
+ * Some or all of this work - Copyright (c) 1999 - 2014, Intel Corp.
  * All rights reserved.
  *
  * 2. License
  *
  * 2.1. This is your license from Intel Corp. under its intellectual property
- * rights.  You may have additional license terms from the party that provided
+ * rights. You may have additional license terms from the party that provided
  * you this software, covering your right to use that party's intellectual
  * property rights.
  *
@@ -31,7 +31,7 @@
  * offer to sell, and import the Covered Code and derivative works thereof
  * solely to the minimum extent necessary to exercise the above copyright
  * license, and in no event shall the patent license extend to any additions
- * to or modifications of the Original Intel Code.  No other license or right
+ * to or modifications of the Original Intel Code. No other license or right
  * is granted directly or by implication, estoppel or otherwise;
  *
  * The above copyright and patent license is granted only if the following
  * Redistribution of source code of any substantial portion of the Covered
  * Code or modification with rights to further distribute source must include
  * the above Copyright Notice, the above License, this list of Conditions,
- * and the following Disclaimer and Export Compliance provision.  In addition,
+ * and the following Disclaimer and Export Compliance provision. In addition,
  * Licensee must cause all Covered Code to which Licensee contributes to
  * contain a file documenting the changes Licensee made to create that Covered
- * Code and the date of any change.  Licensee must include in that file the
- * documentation of any changes made by any predecessor Licensee.  Licensee
+ * Code and the date of any change. Licensee must include in that file the
+ * documentation of any changes made by any predecessor Licensee. Licensee
  * must include a prominent statement that the modification is derived,
  * directly or indirectly, from Original Intel Code.
  *
@@ -55,7 +55,7 @@
  * Redistribution of source code of any substantial portion of the Covered
  * Code or modification without rights to further distribute source must
  * include the following Disclaimer and Export Compliance provision in the
- * documentation and/or other materials provided with distribution.  In
+ * documentation and/or other materials provided with distribution. In
  * addition, Licensee may not authorize further sublicense of source of any
  * portion of the Covered Code, and must include terms to the effect that the
  * license from Licensee to its licensee is limited to the intellectual
  * 4. Disclaimer and Export Compliance
  *
  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
- * HERE.  ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
- * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT,  ASSISTANCE,
- * INSTALLATION, TRAINING OR OTHER SERVICES.  INTEL WILL NOT PROVIDE ANY
- * UPDATES, ENHANCEMENTS OR EXTENSIONS.  INTEL SPECIFICALLY DISCLAIMS ANY
+ * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
+ * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
+ * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
+ * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
  * PARTICULAR PURPOSE.
  *
  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
- * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES.  THESE LIMITATIONS
+ * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
  * LIMITED REMEDY.
  *
  * 4.3. Licensee shall not export, either directly or indirectly, any of this
  * software or system incorporating such software without first obtaining any
  * required license or other approval from the U. S. Department of Commerce or
- * any other agency or department of the United States Government.  In the
+ * any other agency or department of the United States Government. In the
  * event Licensee exports any such software from the United States or
  * re-exports any such software from a foreign destination, Licensee shall
  * ensure that the distribution and export/re-export of the software is in
 #ifndef __ACGCC_H__
 #define __ACGCC_H__
 
+#define ACPI_INLINE             __inline__
+
 /* Function name is used for debug output. Non-ANSI, compiler-dependent */
 
-#define ACPI_GET_FUNCTION_NAME          __FUNCTION__
+#define ACPI_GET_FUNCTION_NAME          __func__
 
 /*
  * This macro is used to tag functions as "printf-like" because
 /*
  * Some compilers complain about unused variables. Sometimes we don't want to
  * use all the variables (for example, _AcpiModuleName). This allows us
- * to to tell the compiler warning in a per-variable manner that a variable
+ * to tell the compiler warning in a per-variable manner that a variable
  * is unused.
  */
 #define ACPI_UNUSED_VAR __attribute__ ((unused))
 
-#define COMPILER_DEPENDENT_INT64   long long int
-#define COMPILER_DEPENDENT_UINT64  unsigned long long int
-
-#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)
+/*
+ * Some versions of gcc implement strchr() with a buggy macro. So,
+ * undef it here. Prevents error messages of this form (usually from the
+ * file getopt.c):
+ *
+ * error: logical '&&' with non-zero constant will always evaluate as true
+ */
+#ifdef strchr
+#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;       \
     n_lo >>= 1;    \
 }
 
+
 #endif /* __ACGCC_H__ */