ia64/xen-unstable

view xen/include/asm-x86/acpi.h @ 15812:86a154e1ef5d

[HVM] Shadow: don't shadow the p2m table.
For HVM vcpus with paging disabled, we used to shadow the p2m table,
and skip the p2m lookup to go from gfn to mfn. Instead, we now
provide a simple pagetable that gives a one-to-one mapping of 4GB, and
shadow that, making the translations from gfn to mfn via the p2m.
This removes the paging-disabled special-case code from the shadow
fault handler, and allows us to expand the p2m interface, since all HVM
translations now go through the same p2m lookups.
Signed-off-by: Tim Deegan <Tim.Deegan@xensource.com>
author Tim Deegan <Tim.Deegan@xensource.com>
date Fri Aug 31 11:06:22 2007 +0100 (2007-08-31)
parents 0d291a7c8c1f
children ca495837a722
line source
1 /*
2 * asm-i386/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 */
26 #ifndef _ASM_ACPI_H
27 #define _ASM_ACPI_H
29 #include <xen/config.h>
30 #include <asm/system.h> /* defines cmpxchg */
32 #define COMPILER_DEPENDENT_INT64 long long
33 #define COMPILER_DEPENDENT_UINT64 unsigned long long
35 /*
36 * Calling conventions:
37 *
38 * ACPI_SYSTEM_XFACE - Interfaces to host OS (handlers, threads)
39 * ACPI_EXTERNAL_XFACE - External ACPI interfaces
40 * ACPI_INTERNAL_XFACE - Internal ACPI interfaces
41 * ACPI_INTERNAL_VAR_XFACE - Internal variable-parameter list interfaces
42 */
43 #define ACPI_SYSTEM_XFACE
44 #define ACPI_EXTERNAL_XFACE
45 #define ACPI_INTERNAL_XFACE
46 #define ACPI_INTERNAL_VAR_XFACE
48 /* Asm macros */
50 #define ACPI_ASM_MACROS
51 #define BREAKPOINT3
52 #define ACPI_DISABLE_IRQS() local_irq_disable()
53 #define ACPI_ENABLE_IRQS() local_irq_enable()
54 #define ACPI_FLUSH_CPU_CACHE() wbinvd()
57 static inline int
58 __acpi_acquire_global_lock (unsigned int *lock)
59 {
60 unsigned int old, new, val;
61 do {
62 old = *lock;
63 new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1));
64 val = cmpxchg(lock, old, new);
65 } while (unlikely (val != old));
66 return (new < 3) ? -1 : 0;
67 }
69 static inline int
70 __acpi_release_global_lock (unsigned int *lock)
71 {
72 unsigned int old, new, val;
73 do {
74 old = *lock;
75 new = old & ~0x3;
76 val = cmpxchg(lock, old, new);
77 } while (unlikely (val != old));
78 return old & 0x1;
79 }
81 #define ACPI_ACQUIRE_GLOBAL_LOCK(GLptr, Acq) \
82 ((Acq) = __acpi_acquire_global_lock((unsigned int *) GLptr))
84 #define ACPI_RELEASE_GLOBAL_LOCK(GLptr, Acq) \
85 ((Acq) = __acpi_release_global_lock((unsigned int *) GLptr))
87 /*
88 * Math helper asm macros
89 */
90 #define ACPI_DIV_64_BY_32(n_hi, n_lo, d32, q32, r32) \
91 asm("divl %2;" \
92 :"=a"(q32), "=d"(r32) \
93 :"r"(d32), \
94 "0"(n_lo), "1"(n_hi))
97 #define ACPI_SHIFT_RIGHT_64(n_hi, n_lo) \
98 asm("shrl $1,%2;" \
99 "rcrl $1,%3;" \
100 :"=r"(n_hi), "=r"(n_lo) \
101 :"0"(n_hi), "1"(n_lo))
103 /*
104 * Refer Intel ACPI _PDC support document for bit definitions
105 */
106 #define ACPI_PDC_EST_CAPABILITY_SMP 0xa
107 #define ACPI_PDC_EST_CAPABILITY_MSR 0x1
109 #ifdef CONFIG_ACPI_BOOT
110 extern int acpi_lapic;
111 extern int acpi_ioapic;
112 extern int acpi_noirq;
113 extern int acpi_strict;
114 extern int acpi_disabled;
115 extern int acpi_ht;
116 extern int acpi_pci_disabled;
117 static inline void disable_acpi(void)
118 {
119 acpi_disabled = 1;
120 acpi_ht = 0;
121 acpi_pci_disabled = 1;
122 acpi_noirq = 1;
123 }
125 /* Fixmap pages to reserve for ACPI boot-time tables (see fixmap.h) */
126 #define FIX_ACPI_PAGES 4
128 extern int acpi_gsi_to_irq(u32 gsi, unsigned int *irq);
130 #ifdef CONFIG_X86_IO_APIC
131 extern int skip_ioapic_setup;
132 extern int acpi_skip_timer_override;
134 extern void check_acpi_pci(void);
136 static inline void disable_ioapic_setup(void)
137 {
138 skip_ioapic_setup = 1;
139 }
141 static inline int ioapic_setup_disabled(void)
142 {
143 return skip_ioapic_setup;
144 }
146 #else
147 static inline void disable_ioapic_setup(void) { }
148 static inline void check_acpi_pci(void) { }
150 #endif
152 #else /* CONFIG_ACPI_BOOT */
153 # define acpi_lapic 0
154 # define acpi_ioapic 0
156 #endif
158 static inline void acpi_noirq_set(void) { acpi_noirq = 1; }
159 static inline int acpi_irq_balance_set(char *str) { return 0; }
160 extern int acpi_scan_nodes(u64 start, u64 end);
161 extern int acpi_numa;
162 #define NR_NODE_MEMBLKS (MAX_NUMNODES*2)
164 #ifdef CONFIG_ACPI_SLEEP
166 /* routines for saving/restoring kernel state */
167 extern int acpi_save_state_mem(void);
168 extern int acpi_save_state_disk(void);
169 extern void acpi_restore_state_mem(void);
171 extern unsigned long acpi_wakeup_address;
173 /* early initialization routine */
174 extern void acpi_reserve_bootmem(void);
176 extern struct acpi_sleep_info acpi_sinfo;
177 #define acpi_video_flags bootsym(video_flags)
178 struct xenpf_enter_acpi_sleep;
179 extern int acpi_enter_sleep(struct xenpf_enter_acpi_sleep *sleep);
180 extern int acpi_enter_state(u32 state);
182 struct acpi_sleep_info {
183 uint16_t pm1a_cnt;
184 uint16_t pm1b_cnt;
185 uint16_t pm1a_evt;
186 uint16_t pm1b_evt;
187 uint16_t pm1a_cnt_val;
188 uint16_t pm1b_cnt_val;
189 uint32_t sleep_state;
190 uint64_t wakeup_vector;
191 uint32_t vector_width;
192 };
194 #endif /* CONFIG_ACPI_SLEEP */
196 extern u8 x86_acpiid_to_apicid[];
197 #define MAX_LOCAL_APIC 256
199 #endif /*_ASM_ACPI_H*/