[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 07/17] libxl/arm: Construct ACPI RSDP table
On 07/04/2016 11:12 PM, Shannon Zhao wrote: > From: Shannon Zhao <shannon.zhao@xxxxxxxxxx> > > Construct ACPI RSDP table and add a helper to calculate the ACPI table > checksum. > > Signed-off-by: Shannon Zhao <shannon.zhao@xxxxxxxxxx> > --- > tools/libxl/libxl_arm_acpi.c | 35 +++++++++++++++++++++++++++++++++++ > 1 file changed, 35 insertions(+) > > diff --git a/tools/libxl/libxl_arm_acpi.c b/tools/libxl/libxl_arm_acpi.c > index 7a59126..9df1573 100644 > --- a/tools/libxl/libxl_arm_acpi.c > +++ b/tools/libxl/libxl_arm_acpi.c > @@ -33,6 +33,9 @@ extern const unsigned char dsdt_anycpu_arm[]; > _hidden > extern const int dsdt_anycpu_arm_len; > > +#define ACPI_BUILD_APPNAME6 "XenARM" > +#define ACPI_BUILD_APPNAME4 "Xen " > + > enum { > RSDP, > XSDT, > @@ -109,6 +112,36 @@ static int libxl__estimate_acpi_size(libxl__gc *gc, > return 0; > } > > +static void calculate_checksum(void *table, uint32_t checksum_offset, > + uint32_t length) > +{ > + uint8_t *p, sum = 0; > + > + p = table; > + p[checksum_offset] = 0; > + > + while ( length-- ) > + sum = sum + *p++; > + > + p = table; > + p[checksum_offset] = -sum; > +} > + > +static void make_acpi_rsdp(libxl__gc *gc, struct xc_dom_image *dom, > + struct acpitable acpitables[]) > +{ > + uint64_t offset = acpitables[RSDP].addr - GUEST_ACPI_BASE; > + struct acpi_table_rsdp *rsdp = dom->acpitable_blob + offset; > + > + memcpy(rsdp->signature, "RSD PTR ", sizeof(rsdp->signature)); > + memcpy(rsdp->oem_id, ACPI_BUILD_APPNAME6, sizeof(rsdp->oem_id)); > + rsdp->length = acpitables[RSDP].size; > + rsdp->revision = 0x02; > + rsdp->xsdt_physical_address = acpitables[XSDT].addr; > + calculate_checksum(rsdp, offsetof(struct acpi_table_rsdp, checksum), > + acpitables[RSDP].size); Should this be extended_checksum? checksum is for ACPI v1 (and thus for smaller size structure, with only RSDT pointer). -boris > +} > + > int libxl__prepare_acpi(libxl__gc *gc, libxl_domain_build_info *info, > libxl__domain_build_state *state, > struct xc_dom_image *dom) > @@ -134,6 +167,8 @@ int libxl__prepare_acpi(libxl__gc *gc, > libxl_domain_build_info *info, > if (rc) > return rc; > > + make_acpi_rsdp(gc, dom, acpitables); > + > return 0; > } > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |