|
@@ -0,0 +1,71 @@
|
|
|
+/*
|
|
|
+ * IA64 specific ACPICA environments and implementation
|
|
|
+ *
|
|
|
+ * Copyright (C) 2014, Intel Corporation
|
|
|
+ * Author: Lv Zheng <lv.zheng@intel.com>
|
|
|
+ *
|
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU General Public License version 2 as
|
|
|
+ * published by the Free Software Foundation.
|
|
|
+ */
|
|
|
+
|
|
|
+#ifndef _ASM_IA64_ACENV_H
|
|
|
+#define _ASM_IA64_ACENV_H
|
|
|
+
|
|
|
+#include <asm/intrinsics.h>
|
|
|
+
|
|
|
+#define COMPILER_DEPENDENT_INT64 long
|
|
|
+#define COMPILER_DEPENDENT_UINT64 unsigned long
|
|
|
+
|
|
|
+/*
|
|
|
+ * Calling conventions:
|
|
|
+ *
|
|
|
+ * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
|
|
|
+ * ACPI_EXTERNAL_XFACE - External ACPI interfaces
|
|
|
+ * ACPI_INTERNAL_XFACE - Internal ACPI interfaces
|
|
|
+ * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
|
|
|
+ */
|
|
|
+#define ACPI_SYSTEM_XFACE
|
|
|
+#define ACPI_EXTERNAL_XFACE
|
|
|
+#define ACPI_INTERNAL_XFACE
|
|
|
+#define ACPI_INTERNAL_VAR_XFACE
|
|
|
+
|
|
|
+/* Asm macros */
|
|
|
+
|
|
|
+#define ACPI_FLUSH_CPU_CACHE()
|
|
|
+
|
|
|
+#ifdef CONFIG_ACPI
|
|
|
+
|
|
|
+static inline int
|
|
|
+ia64_acpi_acquire_global_lock(unsigned int *lock)
|
|
|
+{
|
|
|
+ unsigned int old, new, val;
|
|
|
+ do {
|
|
|
+ old = *lock;
|
|
|
+ new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1));
|
|
|
+ val = ia64_cmpxchg4_acq(lock, new, old);
|
|
|
+ } while (unlikely (val != old));
|
|
|
+ return (new < 3) ? -1 : 0;
|
|
|
+}
|
|
|
+
|
|
|
+static inline int
|
|
|
+ia64_acpi_release_global_lock(unsigned int *lock)
|
|
|
+{
|
|
|
+ unsigned int old, new, val;
|
|
|
+ do {
|
|
|
+ old = *lock;
|
|
|
+ new = old & ~0x3;
|
|
|
+ val = ia64_cmpxchg4_acq(lock, new, old);
|
|
|
+ } while (unlikely (val != old));
|
|
|
+ return old & 0x1;
|
|
|
+}
|
|
|
+
|
|
|
+#define ACPI_ACQUIRE_GLOBAL_LOCK(facs, Acq) \
|
|
|
+ ((Acq) = ia64_acpi_acquire_global_lock(&facs->global_lock))
|
|
|
+
|
|
|
+#define ACPI_RELEASE_GLOBAL_LOCK(facs, Acq) \
|
|
|
+ ((Acq) = ia64_acpi_release_global_lock(&facs->global_lock))
|
|
|
+
|
|
|
+#endif
|
|
|
+
|
|
|
+#endif /* _ASM_IA64_ACENV_H */
|