ia64/xen-unstable

view xen/include/asm-x86/apic.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 35e38c9048c8
children 4034317507de
line source
1 #ifndef __ASM_APIC_H
2 #define __ASM_APIC_H
4 #include <xen/config.h>
5 #include <asm/fixmap.h>
6 #include <asm/apicdef.h>
7 #include <asm/processor.h>
8 #include <asm/system.h>
10 #define Dprintk(x...)
12 /*
13 * Debugging macros
14 */
15 #define APIC_QUIET 0
16 #define APIC_VERBOSE 1
17 #define APIC_DEBUG 2
19 extern int apic_verbosity;
21 /*
22 * Define the default level of output to be very little
23 * This can be turned up by using apic=verbose for more
24 * information and apic=debug for _lots_ of information.
25 * apic_verbosity is defined in apic.c
26 */
27 #define apic_printk(v, s, a...) do { \
28 if ((v) <= apic_verbosity) \
29 printk(s, ##a); \
30 } while (0)
33 #ifdef CONFIG_X86_LOCAL_APIC
35 /*
36 * Basic functions accessing APICs.
37 */
39 static __inline void apic_write(unsigned long reg, u32 v)
40 {
41 *((volatile u32 *)(APIC_BASE+reg)) = v;
42 }
44 static __inline void apic_write_atomic(unsigned long reg, u32 v)
45 {
46 (void)xchg((volatile u32 *)(APIC_BASE+reg), v);
47 }
49 static __inline u32 apic_read(unsigned long reg)
50 {
51 return *((volatile u32 *)(APIC_BASE+reg));
52 }
54 static __inline__ void apic_wait_icr_idle(void)
55 {
56 while ( apic_read( APIC_ICR ) & APIC_ICR_BUSY )
57 cpu_relax();
58 }
60 int get_physical_broadcast(void);
62 #ifdef CONFIG_X86_GOOD_APIC
63 # define FORCE_READ_AROUND_WRITE 0
64 # define apic_read_around(x)
65 # define apic_write_around(x,y) apic_write((x),(y))
66 #else
67 # define FORCE_READ_AROUND_WRITE 1
68 # define apic_read_around(x) apic_read(x)
69 # define apic_write_around(x,y) apic_write_atomic((x),(y))
70 #endif
72 static inline void ack_APIC_irq(void)
73 {
74 /*
75 * ack_APIC_irq() actually gets compiled as a single instruction:
76 * - a single rmw on Pentium/82489DX
77 * - a single write on P6+ cores (CONFIG_X86_GOOD_APIC)
78 * ... yummie.
79 */
81 /* Docs say use 0 for future compatibility */
82 apic_write_around(APIC_EOI, 0);
83 }
85 extern void (*wait_timer_tick)(void);
87 extern int get_maxlvt(void);
88 extern void clear_local_APIC(void);
89 extern void connect_bsp_APIC (void);
90 extern void disconnect_bsp_APIC (int virt_wire_setup);
91 extern void disable_local_APIC (void);
92 extern void lapic_shutdown (void);
93 extern int verify_local_APIC (void);
94 extern void cache_APIC_registers (void);
95 extern void sync_Arb_IDs (void);
96 extern void init_bsp_APIC (void);
97 extern void setup_local_APIC (void);
98 extern void init_apic_mappings (void);
99 extern void smp_local_timer_interrupt (struct cpu_user_regs *regs);
100 extern void setup_boot_APIC_clock (void);
101 extern void setup_secondary_APIC_clock (void);
102 extern void setup_apic_nmi_watchdog (void);
103 extern int reserve_lapic_nmi(void);
104 extern void release_lapic_nmi(void);
105 extern void disable_timer_nmi_watchdog(void);
106 extern void enable_timer_nmi_watchdog(void);
107 extern void nmi_watchdog_tick (struct cpu_user_regs *regs);
108 extern int APIC_init_uniprocessor (void);
109 extern void disable_APIC_timer(void);
110 extern void enable_APIC_timer(void);
111 extern int lapic_suspend(void);
112 extern int lapic_resume(void);
114 extern int check_nmi_watchdog (void);
115 extern void enable_NMI_through_LVT0 (void * dummy);
117 extern void watchdog_disable(void);
118 extern void watchdog_enable(void);
120 extern unsigned int nmi_watchdog;
121 #define NMI_NONE 0
122 #define NMI_IO_APIC 1
123 #define NMI_LOCAL_APIC 2
124 #define NMI_INVALID 3
126 #else /* !CONFIG_X86_LOCAL_APIC */
127 static inline void lapic_shutdown(void) { }
128 static inline int lapic_suspend(void) {return 0;}
129 static inline int lapic_resume(void) {return 0;}
131 #endif /* !CONFIG_X86_LOCAL_APIC */
133 #endif /* __ASM_APIC_H */