[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 07/17] libxl/arm: Construct ACPI GTDT table
On Thu, 23 Jun 2016, Shannon Zhao wrote: > From: Shannon Zhao <shannon.zhao@xxxxxxxxxx> > > Construct GTDT table with the interrupt information of timers. > > Signed-off-by: Shannon Zhao <shannon.zhao@xxxxxxxxxx> > --- > tools/libxl/libxl_arm_acpi.c | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/tools/libxl/libxl_arm_acpi.c b/tools/libxl/libxl_arm_acpi.c > index d5ffedf..de863f4 100644 > --- a/tools/libxl/libxl_arm_acpi.c > +++ b/tools/libxl/libxl_arm_acpi.c > @@ -39,6 +39,9 @@ typedef uint64_t u64; > #define ACPI_BUILD_APPNAME6 "XenARM" > #define ACPI_BUILD_APPNAME4 "Xen " > > +#define ACPI_LEVEL_SENSITIVE (u8) 0x00 > +#define ACPI_ACTIVE_LOW (u8) 0x01 > + > enum { > RSDP, > XSDT, > @@ -110,6 +113,30 @@ static void make_acpi_xsdt(libxl__gc *gc, struct > xc_dom_image *dom) > dom->acpitable_size += ROUNDUP(acpitables[XSDT].size, 3); > } > > +static void make_acpi_gtdt(libxl__gc *gc, struct xc_dom_image *dom) > +{ > + struct acpi_table_gtdt *gtdt; > + size_t size = sizeof(*gtdt); > + > + gtdt = libxl__zalloc(gc, size); > + > + gtdt->non_secure_el1_interrupt = GUEST_TIMER_PHYS_NS_PPI; > + gtdt->non_secure_el1_flags = > + (ACPI_LEVEL_SENSITIVE << > ACPI_GTDT_INTERRUPT_MODE) > + |(ACPI_ACTIVE_LOW << > ACPI_GTDT_INTERRUPT_POLARITY); > + gtdt->virtual_timer_interrupt = GUEST_TIMER_VIRT_PPI; > + gtdt->virtual_timer_flags = > + (ACPI_LEVEL_SENSITIVE << > ACPI_GTDT_INTERRUPT_MODE) > + |(ACPI_ACTIVE_LOW << > ACPI_GTDT_INTERRUPT_POLARITY); > + > + make_acpi_header(>dt->header, "GTDT", size, 2); > + > + acpitables[GTDT].table = gtdt; > + acpitables[GTDT].size = size; > + /* Align to 64bit. */ > + dom->acpitable_size += ROUNDUP(acpitables[GTDT].size, 3); > +} Many of this tables look pretty much static. Any reason why we can't define them and initialize them on an header somewhere like: struct acpi_gtdt xen_acpi_gtdt { .non_secure_el1_interrupt = GUEST_TIMER_PHYS_NS_PPI; .non_secure_el1_flags = (ACPI_LEVEL_SENSITIVE << ACPI_GTDT_INTERRUPT_MODE) | (ACPI_ACTIVE_LOW << ACPI_GTDT_INTERRUPT_POLARITY); .virtual_timer_interrupt = GUEST_TIMER_VIRT_PPI; .virtual_timer_flags = (ACPI_LEVEL_SENSITIVE << ACPI_GTDT_INTERRUPT_MODE)|(ACPI_ACTIVE_LOW << ACPI_GTDT_INTERRUPT_POLARITY); }; it would make the code shorter and easier to read. > int libxl__prepare_acpi(libxl__gc *gc, libxl_domain_build_info *info, > libxl__domain_build_state *state, > struct xc_dom_image *dom) > @@ -132,6 +159,7 @@ int libxl__prepare_acpi(libxl__gc *gc, > libxl_domain_build_info *info, > > make_acpi_rsdp(gc, dom); > make_acpi_xsdt(gc, dom); > + make_acpi_gtdt(gc, dom); > > return 0; > } > -- > 2.0.4 > > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |