[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-3.1-testing] linux/x86: Obtain EDD info from Xen
# HG changeset patch # User Keir Fraser <keir.fraser@xxxxxxxxxx> # Date 1202132899 0 # Node ID 10014990a4863a5f98bde4b2a6d77ec8e4663f2c # Parent dbe47d8cb825f834ec64b3f83a0c198a4f8a2cde linux/x86: Obtain EDD info from Xen Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx> Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> linux-2.6.18-xen changeset: 67:706976fe8333a88c4d3482253927faa3b4714b15 linux-2.6.18-xen date: Wed Jun 20 19:09:25 2007 +0100 Fix build with CONFIG_EDD disabled. Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> linux-2.6.18-xen changeset: 76:6433fb4f88d6779073bb527e0ea13814206d3259 linux-2.6.18-xen date: Thu Jun 21 22:37:49 2007 +0100 --- buildconfigs/linux-defconfig_xen0_x86_32 | 2 buildconfigs/linux-defconfig_xenU_x86_32 | 2 buildconfigs/linux-defconfig_xen_x86_32 | 2 linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c | 3 + linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c | 3 + linux-2.6-xen-sparse/drivers/firmware/Kconfig | 1 linux-2.6-xen-sparse/drivers/xen/core/Makefile | 2 linux-2.6-xen-sparse/drivers/xen/core/firmware.c | 56 ++++++++++++++++++++ linux-2.6-xen-sparse/include/xen/firmware.h | 8 ++ 9 files changed, 77 insertions(+), 2 deletions(-) diff -r dbe47d8cb825 -r 10014990a486 buildconfigs/linux-defconfig_xen0_x86_32 --- a/buildconfigs/linux-defconfig_xen0_x86_32 Thu Jan 31 10:07:57 2008 +0000 +++ b/buildconfigs/linux-defconfig_xen0_x86_32 Mon Feb 04 13:48:19 2008 +0000 @@ -155,12 +155,14 @@ CONFIG_VM86=y # CONFIG_I8K is not set # CONFIG_X86_REBOOTFIXUPS is not set CONFIG_MICROCODE=y +CONFIG_X86_MSR=y CONFIG_X86_CPUID=y CONFIG_SWIOTLB=y # # Firmware Drivers # +CONFIG_EDD=y # CONFIG_DELL_RBU is not set # CONFIG_DCDBAS is not set # CONFIG_NOHIGHMEM is not set diff -r dbe47d8cb825 -r 10014990a486 buildconfigs/linux-defconfig_xenU_x86_32 --- a/buildconfigs/linux-defconfig_xenU_x86_32 Thu Jan 31 10:07:57 2008 +0000 +++ b/buildconfigs/linux-defconfig_xenU_x86_32 Mon Feb 04 13:48:19 2008 +0000 @@ -152,12 +152,14 @@ CONFIG_VM86=y # CONFIG_TOSHIBA is not set # CONFIG_I8K is not set # CONFIG_X86_REBOOTFIXUPS is not set +# CONFIG_X86_MSR is not set CONFIG_X86_CPUID=y CONFIG_SWIOTLB=y # # Firmware Drivers # +# CONFIG_EDD is not set # CONFIG_DELL_RBU is not set # CONFIG_DCDBAS is not set # CONFIG_NOHIGHMEM is not set diff -r dbe47d8cb825 -r 10014990a486 buildconfigs/linux-defconfig_xen_x86_32 --- a/buildconfigs/linux-defconfig_xen_x86_32 Thu Jan 31 10:07:57 2008 +0000 +++ b/buildconfigs/linux-defconfig_xen_x86_32 Mon Feb 04 13:48:19 2008 +0000 @@ -160,12 +160,14 @@ CONFIG_VM86=y # CONFIG_I8K is not set # CONFIG_X86_REBOOTFIXUPS is not set CONFIG_MICROCODE=y +CONFIG_X86_MSR=y CONFIG_X86_CPUID=m CONFIG_SWIOTLB=y # # Firmware Drivers # +CONFIG_EDD=y CONFIG_DELL_RBU=m CONFIG_DCDBAS=m # CONFIG_NOHIGHMEM is not set diff -r dbe47d8cb825 -r 10014990a486 linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c --- a/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Thu Jan 31 10:07:57 2008 +0000 +++ b/linux-2.6-xen-sparse/arch/i386/kernel/setup-xen.c Mon Feb 04 13:48:19 2008 +0000 @@ -66,6 +66,7 @@ #include <xen/interface/physdev.h> #include <xen/interface/memory.h> #include <xen/features.h> +#include <xen/firmware.h> #include <xen/xencons.h> #include <setup_arch.h> #include <bios_ebda.h> @@ -740,6 +741,7 @@ struct edd edd; #ifdef CONFIG_EDD_MODULE EXPORT_SYMBOL(edd); #endif +#ifndef CONFIG_XEN /** * copy_edd() - Copy the BIOS EDD information * from boot_params into a safe place. @@ -752,6 +754,7 @@ static inline void copy_edd(void) edd.mbr_signature_nr = EDD_MBR_SIG_NR; edd.edd_info_nr = EDD_NR; } +#endif #else static inline void copy_edd(void) { diff -r dbe47d8cb825 -r 10014990a486 linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c --- a/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c Thu Jan 31 10:07:57 2008 +0000 +++ b/linux-2.6-xen-sparse/arch/x86_64/kernel/setup-xen.c Mon Feb 04 13:48:19 2008 +0000 @@ -71,6 +71,7 @@ #include <asm/hypervisor.h> #include <xen/interface/nmi.h> #include <xen/features.h> +#include <xen/firmware.h> #include <xen/xencons.h> #define PFN_UP(x) (((x) + PAGE_SIZE-1) >> PAGE_SHIFT) #define PFN_PHYS(x) ((x) << PAGE_SHIFT) @@ -534,6 +535,7 @@ struct edd edd; #ifdef CONFIG_EDD_MODULE EXPORT_SYMBOL(edd); #endif +#ifndef CONFIG_XEN /** * copy_edd() - Copy the BIOS EDD information * from boot_params into a safe place. @@ -546,6 +548,7 @@ static inline void copy_edd(void) edd.mbr_signature_nr = EDD_MBR_SIG_NR; edd.edd_info_nr = EDD_NR; } +#endif #else static inline void copy_edd(void) { diff -r dbe47d8cb825 -r 10014990a486 linux-2.6-xen-sparse/drivers/firmware/Kconfig --- a/linux-2.6-xen-sparse/drivers/firmware/Kconfig Thu Jan 31 10:07:57 2008 +0000 +++ b/linux-2.6-xen-sparse/drivers/firmware/Kconfig Mon Feb 04 13:48:19 2008 +0000 @@ -8,7 +8,6 @@ config EDD config EDD tristate "BIOS Enhanced Disk Drive calls determine boot disk" depends on !IA64 - depends on !XEN help Say Y or M here if you want to enable BIOS Enhanced Disk Drive Services real mode BIOS calls to determine which disk diff -r dbe47d8cb825 -r 10014990a486 linux-2.6-xen-sparse/drivers/xen/core/Makefile --- a/linux-2.6-xen-sparse/drivers/xen/core/Makefile Thu Jan 31 10:07:57 2008 +0000 +++ b/linux-2.6-xen-sparse/drivers/xen/core/Makefile Mon Feb 04 13:48:19 2008 +0000 @@ -2,7 +2,7 @@ # Makefile for the linux kernel. # -obj-y := evtchn.o gnttab.o features.o reboot.o machine_reboot.o +obj-y := evtchn.o gnttab.o features.o reboot.o machine_reboot.o firmware.o obj-$(CONFIG_PROC_FS) += xen_proc.o obj-$(CONFIG_SYS_HYPERVISOR) += hypervisor_sysfs.o diff -r dbe47d8cb825 -r 10014990a486 linux-2.6-xen-sparse/drivers/xen/core/firmware.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linux-2.6-xen-sparse/drivers/xen/core/firmware.c Mon Feb 04 13:48:19 2008 +0000 @@ -0,0 +1,56 @@ +#include <linux/kernel.h> +#include <linux/errno.h> +#include <linux/init.h> +#include <linux/edd.h> +#include <xen/interface/platform.h> +#include <asm/hypervisor.h> + +#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) +void __init copy_edd(void) +{ + int ret; + xen_platform_op_t op; + + if (!is_initial_xendomain()) + return; + + op.cmd = XENPF_firmware_info; + + for (op.u.firmware_info.index = 0, ret = 0; + ret != -ESRCH && ret != -ENOSYS && edd.edd_info_nr < EDDMAXNR; + ++op.u.firmware_info.index) { + struct edd_info *info = edd.edd_info + edd.edd_info_nr; + + op.u.firmware_info.type = XEN_FW_DISK_INFO; + info->params.length = sizeof(info->params); + set_xen_guest_handle(op.u.firmware_info.u.disk_info.edd_params, + &info->params); + ret = HYPERVISOR_platform_op(&op); + if (ret) + continue; + +#define C(x) info->x = op.u.firmware_info.u.disk_info.x + C(device); + C(version); + C(interface_support); + C(legacy_max_cylinder); + C(legacy_max_head); + C(legacy_sectors_per_track); +#undef C + + ++edd.edd_info_nr; + } + + op.u.firmware_info.type = XEN_FW_DISK_MBR_SIGNATURE; + for (op.u.firmware_info.index = 0, ret = 0; + (ret != -ESRCH && ret != -ENOSYS && + edd.mbr_signature_nr < EDD_MBR_SIG_MAX); + ++op.u.firmware_info.index) { + ret = HYPERVISOR_platform_op(&op); + if (ret) + continue; + edd.mbr_signature[edd.mbr_signature_nr++] = + op.u.firmware_info.u.disk_mbr_signature.mbr_signature; + } +} +#endif diff -r dbe47d8cb825 -r 10014990a486 linux-2.6-xen-sparse/include/xen/firmware.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/linux-2.6-xen-sparse/include/xen/firmware.h Mon Feb 04 13:48:19 2008 +0000 @@ -0,0 +1,8 @@ +#ifndef __XEN_FIRMWARE_H__ +#define __XEN_FIRMWARE_H__ + +#if defined(CONFIG_EDD) || defined(CONFIG_EDD_MODULE) +void copy_edd(void); +#endif + +#endif /* __XEN_FIRMWARE_H__ */ _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |