[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v4 1/4] x86/HVM: update the start info structure layout
Roger Pau Monne, on Tue 16 Feb 2016 18:37:46 +0100, wrote: > After some discussion around the new boot ABI consensus has been reached > about the layout and contents of the start info. The following patch updates > the layout to what has been agreed. > > Also, the new layout is described in binary terms in order to avoid issues > with alignments when using C structs. > > Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> Acked-by: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> > --- > Cc: Samuel Thibault <samuel.thibault@xxxxxxxxxxxx> > Cc: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > Cc: Ian Campbell <ian.campbell@xxxxxxxxxx> > Cc: Wei Liu <wei.liu2@xxxxxxxxxx> > Cc: Jan Beulich <jbeulich@xxxxxxxx> > Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> > --- > tools/libxc/include/xc_dom.h | 31 +++++++++++++++++++++++++ > xen/include/public/xen.h | 55 > ++++++++++++++++++++++++++++++-------------- > 2 files changed, 69 insertions(+), 17 deletions(-) > > diff --git a/tools/libxc/include/xc_dom.h b/tools/libxc/include/xc_dom.h > index cac4698..6ebe946 100644 > --- a/tools/libxc/include/xc_dom.h > +++ b/tools/libxc/include/xc_dom.h > @@ -216,6 +216,37 @@ struct xc_dom_image { > struct xc_hvm_firmware_module smbios_module; > }; > > +#if defined(__i386__) || defined(__x86_64__) > +/* C representation of the x86/HVM start info layout. > + * > + * The canonical definition of this layout resides in public/xen.h, this > + * is just a way to represent the layout described there using C types. > + * > + * NB: the packed attribute is not really needed, but it helps us enforce > + * the fact this this is just a representation, and it might indeed > + * be required in the future if there are alignment changes. > + */ > +struct hvm_start_info { > + uint32_t magic; /* Contains the magic value 0x336ec578 > */ > + /* ("xEn3" with the 0x80 bit of the "E" > set).*/ > + uint32_t version; /* Version of this structure. > */ > + uint32_t flags; /* SIF_xxx flags. > */ > + uint32_t cmdline_paddr; /* Physical address of the command line. > */ > + uint32_t nr_modules; /* Number of modules passed to the kernel. > */ > + uint32_t modlist_paddr; /* Physical address of an array of > */ > + /* hvm_modlist_entry. > */ > + uint32_t rsdp_paddr; /* Physical address of the RSDP ACPI data > */ > + /* structure. > */ > +} __attribute__((packed)); > + > +struct hvm_modlist_entry { > + uint64_t paddr; /* Physical address of the module. > */ > + uint64_t size; /* Size of the module in bytes. > */ > + uint64_t cmdline_paddr; /* Physical address of the command line. > */ > + uint64_t reserved; > +} __attribute__((packed)); > +#endif /* x86 */ > + > /* --- pluggable kernel loader ------------------------------------- */ > > struct xc_dom_loader { > diff --git a/xen/include/public/xen.h b/xen/include/public/xen.h > index 7b629b1..6ba060f 100644 > --- a/xen/include/public/xen.h > +++ b/xen/include/public/xen.h > @@ -787,25 +787,46 @@ typedef struct start_info start_info_t; > /* > * Start of day structure passed to PVH guests in %ebx. > * > - * NOTE: nothing will be loaded at physical address 0, so > - * a 0 value in any of the address fields should be treated > - * as not present. > + * NOTE: nothing will be loaded at physical address 0, so a 0 value in any > + * of the address fields should be treated as not present. > + * > + * 0 +----------------+ > + * | magic | Contains the magic value HVM_START_MAGIC_VALUE > + * | | ("xEn3" with the 0x80 bit of the "E" set). > + * 4 +----------------+ > + * | version | Version of this structure. Current version is 0. New > + * | | versions are guaranteed to be backwards-compatible. > + * 8 +----------------+ > + * | flags | SIF_xxx flags. > + * 12 +----------------+ > + * | cmdline_paddr | Physical address of the command line, > + * | | a zero-terminated ASCII string. > + * 16 +----------------+ > + * | nr_modules | Number of modules passed to the kernel. > + * 20 +----------------+ > + * | modlist_paddr | Physical address of an array of modules > + * | | (layout of the structure below). > + * 24 +----------------+ > + * | rsdp_paddr | Physical address of the RSDP ACPI data structure. > + * 28 +----------------+ > + * > + * The layout of each entry in the module structure is the following: > + * > + * 0 +----------------+ > + * | paddr | Physical address of the module. > + * 8 +----------------+ > + * | size | Size of the module in bytes. > + * 16 +----------------+ > + * | cmdline_paddr | Physical address of the command line, > + * | | a zero-terminated ASCII string. > + * 24 +----------------+ > + * | reserved | > + * 32 +----------------+ > + * > + * The address and size of the modules is a 64bit unsigned integer. However > + * Xen will always try to place all modules below the 4GiB boundary. > */ > -struct hvm_start_info { > #define HVM_START_MAGIC_VALUE 0x336ec578 > - uint32_t magic; /* Contains the magic value 0x336ec578 > */ > - /* ("xEn3" with the 0x80 bit of the "E" > set).*/ > - uint32_t flags; /* SIF_xxx flags. > */ > - uint32_t cmdline_paddr; /* Physical address of the command line. > */ > - uint32_t nr_modules; /* Number of modules passed to the kernel. > */ > - uint32_t modlist_paddr; /* Physical address of an array of > */ > - /* hvm_modlist_entry. > */ > -}; > - > -struct hvm_modlist_entry { > - uint32_t paddr; /* Physical address of the module. > */ > - uint32_t size; /* Size of the module in bytes. > */ > -}; > > /* New console union for dom0 introduced in 0x00030203. */ > #if __XEN_INTERFACE_VERSION__ < 0x00030203 > -- > 2.5.4 (Apple Git-61) > -- Samuel <N> un driver qui fait quoi, alors ? <y> ben pour les bips <s> pour passer les oops en morse -+- #ens-mim - vive les rapports de bug -+- _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |