Palacios Public Git Repository

To checkout Palacios execute

  git clone http://v3vee.org/palacios/palacios.web/palacios.git
This will give you the master branch. You probably want the devel branch or one of the release branches. To switch to the devel branch, simply execute
  cd palacios
  git checkout --track -b devel origin/devel
The other branches are similar.


Do not make oldconfig when building kitten
[palacios.git] / kitten / include / arch-x86_64 / acpi.h
1 /*
2  *  asm-x86_64/acpi.h
3  *
4  *  Copyright (C) 2001 Paul Diefenbaugh <paul.s.diefenbaugh@intel.com>
5  *  Copyright (C) 2001 Patrick Mochel <mochel@osdl.org>
6   *
7  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8  *
9  *  This program is free software; you can redistribute it and/or modify
10  *  it under the terms of the GNU General Public License as published by
11  *  the Free Software Foundation; either version 2 of the License, or
12  *  (at your option) any later version.
13  *
14  *  This program is distributed in the hope that it will be useful,
15  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17  *  GNU General Public License for more details.
18  *
19  *  You should have received a copy of the GNU General Public License
20  *  along with this program; if not, write to the Free Software
21  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
22  *
23  * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24  */
25
26 #ifndef _ASM_ACPI_H
27 #define _ASM_ACPI_H
28
29 #ifdef __KERNEL__
30
31 #include <acpi/pdc_intel.h>
32
33 #define COMPILER_DEPENDENT_INT64   long long
34 #define COMPILER_DEPENDENT_UINT64  unsigned long long
35
36 /*
37  * Calling conventions:
38  *
39  * ACPI_SYSTEM_XFACE        - Interfaces to host OS (handlers, threads)
40  * ACPI_EXTERNAL_XFACE      - External ACPI interfaces 
41  * ACPI_INTERNAL_XFACE      - Internal ACPI interfaces
42  * ACPI_INTERNAL_VAR_XFACE  - Internal variable-parameter list interfaces
43  */
44 #define ACPI_SYSTEM_XFACE
45 #define ACPI_EXTERNAL_XFACE
46 #define ACPI_INTERNAL_XFACE
47 #define ACPI_INTERNAL_VAR_XFACE
48
49 /* Asm macros */
50
51 #define ACPI_ASM_MACROS
52 #define BREAKPOINT3
53 #define ACPI_DISABLE_IRQS() local_irq_disable()
54 #define ACPI_ENABLE_IRQS()  local_irq_enable()
55 #define ACPI_FLUSH_CPU_CACHE()  wbinvd()
56
57
58 static inline int
59 __acpi_acquire_global_lock (unsigned int *lock)
60 {
61         unsigned int old, new, val;
62         do {
63                 old = *lock;
64                 new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1));
65                 val = cmpxchg(lock, old, new);
66         } while (unlikely (val != old));
67         return (new < 3) ? -1 : 0;
68 }
69
70 static inline int
71 __acpi_release_global_lock (unsigned int *lock)
72 {
73         unsigned int old, new, val;
74         do {
75                 old = *lock;
76                 new = old & ~0x3;
77                 val = cmpxchg(lock, old, new);
78         } while (unlikely (val != old));
79         return old & 0x1;
80 }
81
82 #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
83         ((Acq) = __acpi_acquire_global_lock((unsigned int *) GLptr))
84
85 #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
86         ((Acq) = __acpi_release_global_lock((unsigned int *) GLptr))
87
88 /*
89  * Math helper asm macros
90  */
91 #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
92         asm("divl %2;"        \
93         :"=a"(q32), "=d"(r32) \
94         :"r"(d32),            \
95         "0"(n_lo), "1"(n_hi))
96
97
98 #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
99     asm("shrl   $1,%2;"             \
100         "rcrl   $1,%3;"             \
101         :"=r"(n_hi), "=r"(n_lo)     \
102         :"0"(n_hi), "1"(n_lo))
103
104 #ifdef CONFIG_ACPI
105 extern int acpi_lapic;
106 extern int acpi_ioapic;
107 extern int acpi_noirq;
108 extern int acpi_strict;
109 extern int acpi_disabled;
110 extern int acpi_pci_disabled;
111 extern int acpi_ht;
112 static inline void disable_acpi(void) 
113
114         acpi_disabled = 1; 
115         acpi_ht = 0; 
116         acpi_pci_disabled = 1;
117         acpi_noirq = 1;
118 }
119
120 /* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */
121 #define FIX_ACPI_PAGES 4
122
123 extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
124 static inline void acpi_noirq_set(void) { acpi_noirq = 1; }
125 static inline void acpi_disable_pci(void) 
126 {
127         acpi_pci_disabled = 1; 
128         acpi_noirq_set();
129 }
130 extern int acpi_irq_balance_set(char *str);
131
132 #else   /* !CONFIG_ACPI */
133
134 #define acpi_lapic 0
135 #define acpi_ioapic 0
136 static inline void acpi_noirq_set(void) { }
137 static inline void acpi_disable_pci(void) { }
138
139 #endif /* !CONFIG_ACPI */
140
141 extern int acpi_numa;
142 extern int acpi_scan_nodes(unsigned long start, unsigned long end);
143 #define NR_NODE_MEMBLKS (MAX_NUMNODES*2)
144
145 #ifdef CONFIG_ACPI_SLEEP
146
147 /* routines for saving/restoring kernel state */
148 extern int acpi_save_state_mem(void);
149 extern void acpi_restore_state_mem(void);
150
151 extern unsigned long acpi_wakeup_address;
152
153 /* early initialization routine */
154 extern void acpi_reserve_bootmem(void);
155
156 #endif /*CONFIG_ACPI_SLEEP*/
157
158 #define boot_cpu_physical_apicid boot_cpu_id
159
160 extern int acpi_disabled;
161 extern int acpi_pci_disabled;
162
163 extern u8 x86_acpiid_to_apicid[];
164
165 extern int acpi_skip_timer_override;
166
167 #endif /*__KERNEL__*/
168
169 #endif /*_ASM_ACPI_H*/