|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH for-xen-4.5 v3 14/16] x86: Move HDD data to boot_info
Signed-off-by: Daniel Kiper <daniel.kiper@xxxxxxxxxx>
---
xen/arch/x86/boot_info.c | 16 ++++++++++++++++
xen/arch/x86/efi/efi-boot.h | 28 ++++++++++++++--------------
xen/arch/x86/platform_hypercall.c | 8 ++++----
xen/arch/x86/setup.c | 4 ++--
xen/common/efi/runtime.c | 7 +++++++
xen/include/asm-x86/boot_info.h | 13 +++++++++++++
xen/include/asm-x86/edd.h | 6 ------
7 files changed, 56 insertions(+), 26 deletions(-)
diff --git a/xen/arch/x86/boot_info.c b/xen/arch/x86/boot_info.c
index 48d5274..4f38edf 100644
--- a/xen/arch/x86/boot_info.c
+++ b/xen/arch/x86/boot_info.c
@@ -71,6 +71,12 @@ extern struct boot_video_info boot_vid_info;
extern unsigned short boot_edid_caps;
extern unsigned char boot_edid_info[128];
+extern struct edd_info boot_edd_info[];
+extern u8 boot_edd_info_nr;
+
+extern struct mbr_signature boot_mbr_signature[];
+extern u8 boot_mbr_signature_nr;
+
static boot_info_t __read_mostly boot_info_mb = {
.boot_loader_name = "UNKNOWN",
.cmdline = NULL,
@@ -88,6 +94,10 @@ static boot_info_t __read_mostly boot_info_mb = {
.vga_console_info = {},
.edid_caps = 0,
.edid_info = NULL,
+ .edd_info_nr = 0,
+ .edd_info = NULL,
+ .mbr_signature_nr = 0,
+ .mbr_signature = NULL,
.mods_nr = 0,
.mods = NULL,
.warn_msg = NULL,
@@ -233,6 +243,12 @@ paddr_t __init __init_boot_info(u32 mbd_pa)
init_video_info(&boot_info_mb);
+ boot_info_mb.edd_info_nr = bootsym(boot_edd_info_nr);
+ boot_info_mb.edd_info = bootsym(boot_edd_info);
+
+ boot_info_mb.mbr_signature_nr = bootsym(boot_mbr_signature_nr);
+ boot_info_mb.mbr_signature = bootsym(boot_mbr_signature);
+
boot_info_mb.mods_nr = mbd->mods_nr;
boot_info_mb.mods = __va(mbd->mods);
diff --git a/xen/arch/x86/efi/efi-boot.h b/xen/arch/x86/efi/efi-boot.h
index ee5b54b..b5ff624 100644
--- a/xen/arch/x86/efi/efi-boot.h
+++ b/xen/arch/x86/efi/efi-boot.h
@@ -325,7 +325,7 @@ static void __init efi_arch_edd(void)
{
EFI_BLOCK_IO *bio;
EFI_DEV_PATH_PTR devp;
- struct edd_info *info = boot_edd_info + boot_edd_info_nr;
+ struct edd_info *info = boot_info_efi.edd_info +
boot_info_efi.edd_info_nr;
struct edd_device_params *params = &info->edd_device_params;
enum { root, acpi, pci, ctrlr } state = root;
@@ -334,16 +334,16 @@ static void __init efi_arch_edd(void)
bio->Media->RemovableMedia ||
bio->Media->LogicalPartition )
continue;
- if ( boot_edd_info_nr < EDD_INFO_MAX )
+ if ( boot_info_efi.edd_info_nr < EDD_INFO_MAX )
{
- info->device = 0x80 + boot_edd_info_nr; /* fake */
+ info->device = 0x80 + boot_info_efi.edd_info_nr; /* fake */
info->version = 0x11;
params->length = offsetof(struct edd_device_params, dpte_ptr);
params->number_of_sectors = bio->Media->LastBlock + 1;
params->bytes_per_sector = bio->Media->BlockSize;
params->dpte_ptr = ~0;
}
- ++boot_edd_info_nr;
+ ++boot_info_efi.edd_info_nr;
status = efi_bs->HandleProtocol(handles[i], &devp_guid,
(void **)&devp);
if ( EFI_ERROR(status) )
@@ -356,7 +356,7 @@ static void __init efi_arch_edd(void)
const u8 *p;
case ACPI_DEVICE_PATH:
- if ( state != root || boot_edd_info_nr > EDD_INFO_MAX )
+ if ( state != root || boot_info_efi.edd_info_nr > EDD_INFO_MAX
)
break;
switch ( DevicePathSubType(devp.DevPath) )
{
@@ -375,7 +375,7 @@ static void __init efi_arch_edd(void)
case HARDWARE_DEVICE_PATH:
if ( state != acpi ||
DevicePathSubType(devp.DevPath) != HW_PCI_DP ||
- boot_edd_info_nr > EDD_INFO_MAX )
+ boot_info_efi.edd_info_nr > EDD_INFO_MAX )
break;
state = pci;
edd_put_string(params->host_bus_type, "PCI");
@@ -383,7 +383,7 @@ static void __init efi_arch_edd(void)
params->interface_path.pci.function = devp.Pci->Function;
break;
case MESSAGING_DEVICE_PATH:
- if ( state != pci || boot_edd_info_nr > EDD_INFO_MAX )
+ if ( state != pci || boot_info_efi.edd_info_nr > EDD_INFO_MAX )
break;
state = ctrlr;
switch ( DevicePathSubType(devp.DevPath) )
@@ -432,15 +432,15 @@ static void __init efi_arch_edd(void)
case MEDIA_DEVICE_PATH:
if ( DevicePathSubType(devp.DevPath) == MEDIA_HARDDRIVE_DP &&
devp.HardDrive->MBRType == MBR_TYPE_PCAT &&
- boot_mbr_signature_nr < EDD_MBR_SIG_MAX )
+ boot_info_efi.mbr_signature_nr < EDD_MBR_SIG_MAX )
{
- struct mbr_signature *sig = boot_mbr_signature +
- boot_mbr_signature_nr;
+ struct mbr_signature *sig = boot_info_efi.mbr_signature +
+ boot_info_efi.mbr_signature_nr;
- sig->device = 0x80 + boot_edd_info_nr; /* fake */
+ sig->device = 0x80 + boot_info_efi.edd_info_nr; /* fake */
memcpy(&sig->signature, devp.HardDrive->Signature,
sizeof(sig->signature));
- ++boot_mbr_signature_nr;
+ ++boot_info_efi.mbr_signature_nr;
}
break;
}
@@ -448,8 +448,8 @@ static void __init efi_arch_edd(void)
}
if ( handles )
efi_bs->FreePool(handles);
- if ( boot_edd_info_nr > EDD_INFO_MAX )
- boot_edd_info_nr = EDD_INFO_MAX;
+ if ( boot_info_efi.edd_info_nr > EDD_INFO_MAX )
+ boot_info_efi.edd_info_nr = EDD_INFO_MAX;
}
static void __init efi_arch_console_init(UINTN cols, UINTN rows)
diff --git a/xen/arch/x86/platform_hypercall.c
b/xen/arch/x86/platform_hypercall.c
index 7687dd1..2bcee57 100644
--- a/xen/arch/x86/platform_hypercall.c
+++ b/xen/arch/x86/platform_hypercall.c
@@ -301,10 +301,10 @@ ret_t
do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
u16 length;
ret = -ESRCH;
- if ( op->u.firmware_info.index >= bootsym(boot_edd_info_nr) )
+ if ( op->u.firmware_info.index >= boot_info->edd_info_nr )
break;
- info = bootsym(boot_edd_info) + op->u.firmware_info.index;
+ info = boot_info->edd_info + op->u.firmware_info.index;
/* Transfer the EDD info block. */
ret = -EFAULT;
@@ -340,10 +340,10 @@ ret_t
do_platform_op(XEN_GUEST_HANDLE_PARAM(xen_platform_op_t) u_xenpf_op)
const struct mbr_signature *sig;
ret = -ESRCH;
- if ( op->u.firmware_info.index >= bootsym(boot_mbr_signature_nr) )
+ if ( op->u.firmware_info.index >= boot_info->mbr_signature_nr )
break;
- sig = bootsym(boot_mbr_signature) + op->u.firmware_info.index;
+ sig = boot_info->mbr_signature + op->u.firmware_info.index;
op->u.firmware_info.u.disk_mbr_signature.device = sig->device;
op->u.firmware_info.u.disk_mbr_signature.mbr_signature =
diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c
index 9b41172..a257fe9 100644
--- a/xen/arch/x86/setup.c
+++ b/xen/arch/x86/setup.c
@@ -593,9 +593,9 @@ void __init noreturn __start_xen(paddr_t boot_info_pa)
printk("Disc information:\n");
printk(" Found %d MBR signatures\n",
- bootsym(boot_mbr_signature_nr));
+ boot_info->mbr_signature_nr);
printk(" Found %d EDD information structures\n",
- bootsym(boot_edd_info_nr));
+ boot_info->edd_info_nr);
/* Check that we have at least one Multiboot module. */
if ( !boot_info->mods_nr )
diff --git a/xen/common/efi/runtime.c b/xen/common/efi/runtime.c
index 988464f..3416fd3 100644
--- a/xen/common/efi/runtime.c
+++ b/xen/common/efi/runtime.c
@@ -48,6 +48,9 @@ extern struct e820entry e820map[];
extern unsigned char boot_edid_info[128];
+extern struct edd_info boot_edd_info[];
+extern struct mbr_signature boot_mbr_signature[];
+
static boot_module_t __read_mostly boot_info_mods[3] = {};
boot_info_t __read_mostly boot_info_efi = {
@@ -67,6 +70,10 @@ boot_info_t __read_mostly boot_info_efi = {
.vga_console_info = {},
.edid_caps = 0,
.edid_info = boot_edid_info,
+ .edd_info_nr = 0,
+ .edd_info = boot_edd_info,
+ .mbr_signature_nr = 0,
+ .mbr_signature = boot_mbr_signature,
.mods_nr = 0,
.mods = boot_info_mods,
.warn_msg = NULL,
diff --git a/xen/include/asm-x86/boot_info.h b/xen/include/asm-x86/boot_info.h
index df31627..ff3a310 100644
--- a/xen/include/asm-x86/boot_info.h
+++ b/xen/include/asm-x86/boot_info.h
@@ -22,6 +22,7 @@
#include <xen/video.h>
#include <asm/e820.h>
+#include <asm/edd.h>
#include <asm/mbd.h>
/*
@@ -87,6 +88,18 @@ typedef struct {
unsigned short edid_caps;
unsigned char *edid_info;
+ /* Number of EDD entries provided by Xen preloader. */
+ u8 edd_info_nr;
+
+ /* Pointer to EDD info. */
+ struct edd_info *edd_info;
+
+ /* Number of MBR entries provided by Xen preloader. */
+ u8 mbr_signature_nr;
+
+ /* Pointer to MBR info. */
+ struct mbr_signature *mbr_signature;
+
/* Number of modules. */
unsigned int mods_nr;
diff --git a/xen/include/asm-x86/edd.h b/xen/include/asm-x86/edd.h
index afaa237..e8361a5 100644
--- a/xen/include/asm-x86/edd.h
+++ b/xen/include/asm-x86/edd.h
@@ -143,12 +143,6 @@ struct __packed mbr_signature {
u32 signature;
};
-/* These all reside in the boot trampoline. Access via bootsym(). */
-extern struct mbr_signature boot_mbr_signature[];
-extern u8 boot_mbr_signature_nr;
-extern struct edd_info boot_edd_info[];
-extern u8 boot_edd_info_nr;
-
#endif /* __ASSEMBLY__ */
/* Maximum number of EDD information structures at boot_edd_info. */
--
1.7.10.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |