[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] New Xen boot infrastructure proposal
On Tue, 21 May 2013, Daniel Kiper wrote: > Hey guys, > > Here are my thoughts about current Xen boot > infrastructure and some changes proposal. > It is linked with EFI development but not only. > > Since the beginning Xen image and other needed stuff > could be loaded into memory according to multiboot > protocol. (e.g. implemented by GRUB). It means that > current implementation of Xen takes info about current > system config from multiboot_info_t structure (it is > copied from original place in assembly files and then > passed as an argument to __start_xen()) and some other > BIOS sources if needed (e.g. VGA config, EDD data). > Later when EFI come into the scene there was no significant > change in that. multiboot_info_t structure and others > are initialized artificially by Xen EFI boot stuff. > Additionally, due to that there is no place for extra boot > info in multiboot_info_t e.g. ACPI data is passed via > supplementary global variables. Now there is a requirement > for boot Xen on EFI platform via GRUB. Due to that new > boot protocol called multiboot2 should be supported. > This means that in current situation another conversion > to legacy multiboot_info_t structure and others should be > implemented. However, due to limitations of multiboot_info_t > structure not all arguments (e.g. ACPI data) could be passed > via it. That leads to further code complication. It means > that at this stage it is worth to create completely new > boot structure which is not linked so tightly with any boot > protocol. It should contain all needed stuff, be architecture > independent as much as possible and easily extensible. > In cases when architecture depended things are required > there should be special substructure which would contain > all required stuff. More or less it should look like in x86 case: > > /* Xen Boot Info (XBI) module structure. */ > typedef struct { > u64 start; > u64 end; > char *cmdline; > } xbi_mod_t; > > /* Xen Boot Info Arch (XBIA) memory map structure. */ > typedef struct { > /* > * Amount of lower memory accordingly to The Multiboot > * Specification version 0.6.96. > */ > u32 lower; > /* > * Amount of upper memory accordingly to The Multiboot > * Specification version 0.6.96. > */ > u32 upper; > u32 map_size; > struct e820entry *e820map; e820map needs to be moved to an x86 specific struct. Can we use the arch-independent memory map structs as defined in section 3.4.8 of the multiboot2 spec instead? > } xbia_mem_t; > > /* Xen Boot Info Arch (XBIA). */ > typedef struct { > EFI_SYSTEM_TABLE *efi_system_table; > u64 mps; /* Pointer to MPS. */ > u64 acpi; /* Pointer to ACPI RSDP. */ > u64 smbios; /* Pointer to SMBIOS. */ > xbia_mem_t mem; > struct xen_vga_console_info vga_console_info; > struct edd_info *edd_info; > } xbia_t; We need to add a pointer to device_tree in there. > /* Main Xen Boot Info (XBI) structure. */ > typedef struct { > char *boot_loader_name; > char *cmdline; > u32 mods_count; > xbi_mod_t *mods; > xbia_t arch; > } xbi_t; > > All data should be placed in above structures as early > as possible. Usually it will be done in some assembly > files before __start_xen() call or in efi_start() on EFI > platform and in __start_xen() itself. Additionally, it > should be mentioned that not all members are valid on > every platform and sometimes some of them would not be > initialized. Right. We need to define an unitialized value for these fields so that we can recognized what actually is availble. For example on ARM both device_tree and ACPI or only one of them could be available. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |