2 * Copyright (c) 2002 Mitsuru IWASAKI
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
14 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26 * $FreeBSD: src/sys/i386/include/acpica_machdep.h,v 1.5 2003/09/10 01:14:42 jhb Exp $
27 * $DragonFly: src/sys/platform/pc32/include/acpica_machdep.h,v 1.3 2006/05/20 02:42:06 dillon Exp $
30 /******************************************************************************
32 * Name: acpica_machdep.h - arch-specific defines, etc.
35 *****************************************************************************/
37 #ifndef _MACHINE_ACPICA_MACHDEP_H__
38 #define _MACHINE_ACPICA_MACHDEP_H__
42 * Calling conventions:
44 * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
45 * ACPI_EXTERNAL_XFACE - External ACPI interfaces
46 * ACPI_INTERNAL_XFACE - Internal ACPI interfaces
47 * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
49 #define ACPI_SYSTEM_XFACE
50 #define ACPI_EXTERNAL_XFACE
51 #define ACPI_INTERNAL_XFACE
52 #define ACPI_INTERNAL_VAR_XFACE
56 #define ACPI_ASM_MACROS
58 #define ACPI_DISABLE_IRQS() cpu_disable_intr()
59 #define ACPI_ENABLE_IRQS() cpu_enable_intr()
61 #define ACPI_FLUSH_CPU_CACHE() wbinvd()
64 /*! [Begin] no source code translation
66 * A brief explanation as GNU inline assembly is a bit hairy
67 * %0 is the output parameter in EAX ("=a")
68 * %1 and %2 are the input parameters in ECX ("c")
69 * and an immediate value ("i") respectively
70 * All actual register references are preceded with "%%" as in "%%edx"
71 * Immediate values in the assembly are preceded by "$" as in "$0x1"
72 * The final asm parameter are the operation altered non-output registers.
74 #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
76 asm("1: movl %1,%%eax;" \
81 "lock; cmpxchgl %%edx,%1;" \
85 : "=a" (Acq), "+m" (GLptr) : "i" (~1L) : "edx"); \
88 #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
90 asm("1: movl %1,%%eax;" \
93 "lock; cmpxchgl %%edx,%1;" \
96 : "=a" (Acq), "+m" (GLptr) : "i" (~3L) : "edx"); \
101 * Math helper asm macros
103 #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
105 :"=a"(q32), "=d"(r32) \
107 "0"(n_lo), "1"(n_hi))
110 #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
113 :"=r"(n_hi), "=r"(n_lo) \
114 :"0"(n_hi), "1"(n_lo))
116 /*! [End] no source code translation !*/
119 #define ACPI_MACHINE_WIDTH 32
120 #define COMPILER_DEPENDENT_INT64 long long
121 #define COMPILER_DEPENDENT_UINT64 unsigned long long
122 #define ACPI_USE_NATIVE_DIVIDE
124 void acpi_SetDefaultIntrModel(int model);
126 #endif /* _MACHINE_ACPICA_MACHDEP_H__ */