[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-merge] [PATCH 21/23] Xen subarch headers
--- linux-2.6.12-xen0/include/asm-i386/mach-xen/setup_arch_post.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.12-xen0-arch/include/asm-i386/mach-xen/setup_arch_post.h 2005-07-30 08:25:17.000000000 -0700 @@ -0,0 +1,51 @@ +/** + * machine_specific_memory_setup - Hook for machine specific memory setup. + * + * Description: + * This is included late in kernel/setup.c so that it can make + * use of all of the static functions. + **/ + +static char * __init machine_specific_memory_setup(void) +{ + char *who; + unsigned long start_pfn, max_pfn; + + who = "Xen"; + + /* In dom0, we have to start the fake e820 map above the first + * 1MB, in other domains, it can start at 0. */ + if (xen_start_info.flags & SIF_INITDOMAIN) + start_pfn = 0x100; + else + start_pfn = 0; + max_pfn = xen_start_info.nr_pages; + + e820.nr_map = 0; + add_memory_region(PFN_PHYS(start_pfn), PFN_PHYS(max_pfn) - PFN_PHYS(start_pfn), E820_RAM); + + return who; +} + +void __init machine_specific_modify_cpu_capabilities(struct cpuinfo_x86 *c) +{ + clear_bit(X86_FEATURE_VME, c->x86_capability); + clear_bit(X86_FEATURE_DE, c->x86_capability); + clear_bit(X86_FEATURE_PSE, c->x86_capability); + clear_bit(X86_FEATURE_PGE, c->x86_capability); + clear_bit(X86_FEATURE_SEP, c->x86_capability); + if (!(xen_start_info.flags & SIF_PRIVILEGED)) + clear_bit(X86_FEATURE_MTRR, c->x86_capability); +} + +extern void hypervisor_callback(void); +extern void failsafe_callback(void); + +static void __init machine_specific_arch_setup(void) +{ + HYPERVISOR_set_callbacks( + __KERNEL_CS, (unsigned long)hypervisor_callback, + __KERNEL_CS, (unsigned long)failsafe_callback); + + machine_specific_modify_cpu_capabilities(&boot_cpu_data); +} --- linux-2.6.12-xen0/include/asm-i386/mach-xen/setup_arch_pre.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.12-xen0-arch/include/asm-i386/mach-xen/setup_arch_pre.h 2005-07-30 08:25:25.000000000 -0700 @@ -0,0 +1,5 @@ +/* Hook to call BIOS initialisation function */ + +#define ARCH_SETUP machine_specific_arch_setup(); + +static void __init machine_specific_arch_setup(void); --- linux-2.6.12-xen0/include/asm-i386/mach-xen/smpboot_hooks.h 1969-12-31 16:00:00.000000000 -0800 +++ linux-2.6.12-xen0-arch/include/asm-i386/mach-xen/smpboot_hooks.h 2005-07-30 08:25:43.000000000 -0700 @@ -0,0 +1,55 @@ +/* two abstractions specific to kernel/smpboot.c, mainly to cater to visws + * which needs to alter them. */ + +static inline void smpboot_clear_io_apic_irqs(void) +{ +#ifdef CONFIG_X86_IO_APIC + io_apic_irqs = 0; +#endif +} + +static inline void smpboot_setup_warm_reset_vector(unsigned long start_eip) +{ +#if 1 + printk("smpboot_setup_warm_reset_vector\n"); +#else + CMOS_WRITE(0xa, 0xf); + local_flush_tlb(); + Dprintk("1.\n"); + *((volatile unsigned short *) TRAMPOLINE_HIGH) = start_eip >> 4; + Dprintk("2.\n"); + *((volatile unsigned short *) TRAMPOLINE_LOW) = start_eip & 0xf; + Dprintk("3.\n"); +#endif +} + +static inline void smpboot_restore_warm_reset_vector(void) +{ + /* + * Install writable page 0 entry to set BIOS data area. + */ + local_flush_tlb(); + + /* + * Paranoid: Set warm reset code and vector here back + * to default values. + */ + CMOS_WRITE(0, 0xf); + + *((volatile long *) phys_to_virt(0x467)) = 0; +} + +static inline void smpboot_setup_io_apic(void) +{ +#ifdef CONFIG_X86_IO_APIC + /* + * Here we can be sure that there is an IO-APIC in the system. Let's + * go and set it up: + */ + if (!skip_ioapic_setup && nr_ioapics) + setup_IO_APIC(); +#endif +} + + +#define smp_found_config (HYPERVISOR_shared_info->n_vcpu > 1) -- _______________________________________________ Xen-merge mailing list Xen-merge@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-merge
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |