Sorry, this has one line of extraneous noise in. I will resend.
Paul
> -----Original Message-----
> From: Paul Durrant [mailto:paul.durrant@xxxxxxxxxx]
> Sent: 18 November 2011 10:29
> To: xen-devel@xxxxxxxxxxxxxxxxxxx
> Cc: Paul Durrant
> Subject: [PATCH 2 of 2] Add configuration options to selectively
> disable S3 and S4 ACPI power states
>
> # HG changeset patch
> # User Paul Durrant <paul.durrant@xxxxxxxxxx> # Date 1321612133 0 #
> Node ID 66bdcb90560f1b996fa34c549834b479a5157cd3
> # Parent d22ef0f60497772ac17b086e7f589434a2344fe8
> Add configuration options to selectively disable S3 and S4 ACPI
> power states.
>
> Introduce acpi_s3 and acpi_s4 configuration options (default=1). The
> S3 and S4 packages are moved into separate SSDTs and their inclusion
> is controlled by the new configuration options.
>
> Signed-off-by: Paul Durrant <paul.durrant@xxxxxxxxxx>
>
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/Makefile
> --- a/tools/firmware/hvmloader/acpi/Makefile Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/acpi/Makefile Fri Nov 18 10:28:53
> 2011 +0000
> @@ -26,7 +26,7 @@ CFLAGS += $(CFLAGS_xeninclude) vpath iasl $(PATH)
> all: acpi.a
>
> -ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
> +ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h: %.h: %.asl iasl
> iasl -vs -p $* -tc $<
> sed -e 's/AmlCode/$*/g' $*.hex >$@
> rm -f $*.hex $*.aml
> @@ -57,7 +57,7 @@ iasl:
> @echo
> @exit 1
>
> -build.o: ssdt_pm.h ssdt_tpm.h
> +build.o: ssdt_s3.h ssdt_s4.h ssdt_pm.h ssdt_tpm.h
>
> acpi.a: $(OBJS)
> $(AR) rc $@ $(OBJS)
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/acpi2_0.h
> --- a/tools/firmware/hvmloader/acpi/acpi2_0.h Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/acpi/acpi2_0.h Fri Nov 18 10:28:53
> 2011 +0000
> @@ -396,6 +396,8 @@ struct acpi_config {
> int dsdt_anycpu_len;
> unsigned char *dsdt_15cpu;
> int dsdt_15cpu_len;
> + int ssdt_s3_enabled;
> + int ssdt_s4_enabled;
> };
>
> void acpi_build_tables(struct acpi_config *config, unsigned int
> physical); diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/build.c
> --- a/tools/firmware/hvmloader/acpi/build.c Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/acpi/build.c Fri Nov 18 10:28:53
> 2011 +0000
> @@ -17,6 +17,9 @@
> */
>
> #include "acpi2_0.h"
> +#include "ssdt_s3.h"
> +#include "ssdt_s4.h"
> +#include "ssdt_s5.h"
> #include "ssdt_tpm.h"
> #include "ssdt_pm.h"
> #include "../config.h"
> @@ -196,7 +199,8 @@ static struct acpi_20_waet *construct_wa }
>
> static int construct_secondary_tables(unsigned long *table_ptrs,
> - struct acpi_info *info)
> + struct acpi_info *info,
> + struct acpi_config *config)
> {
> int nr_tables = 0;
> struct acpi_20_madt *madt;
> @@ -235,6 +239,22 @@ static int construct_secondary_tables(un
> table_ptrs[nr_tables++] = (unsigned long)ssdt;
> }
>
> + if ( config->ssdt_s3_enabled )
> + {
> + ssdt = mem_alloc(sizeof(ssdt_s3), 16);
> + if (!ssdt) return -1;
> + memcpy(ssdt, ssdt_s3, sizeof(ssdt_s3));
> + table_ptrs[nr_tables++] = (unsigned long)ssdt;
> + }
> +
> + if ( config->ssdt_s4_enabled )
> + {
> + ssdt = mem_alloc(sizeof(ssdt_s4), 16);
> + if (!ssdt) return -1;
> + memcpy(ssdt, ssdt_s4, sizeof(ssdt_s4));
> + table_ptrs[nr_tables++] = (unsigned long)ssdt;
> + }
> +
> /* TPM TCPA and SSDT. */
> tis_hdr = (uint16_t *)0xFED40F00;
> if ( (tis_hdr[0] == tis_signature[0]) && @@ -353,7 +373,8 @@
> void acpi_build_tables(struct acpi_confi
> offsetof(struct acpi_header, checksum),
> sizeof(struct acpi_20_fadt));
>
> - nr_secondaries = construct_secondary_tables(secondary_tables,
> acpi_info);
> + nr_secondaries = construct_secondary_tables(secondary_tables,
> acpi_info,
> + config);
> if ( nr_secondaries < 0 )
> goto oom;
>
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/dsdt.asl
> --- a/tools/firmware/hvmloader/acpi/dsdt.asl Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/acpi/dsdt.asl Fri Nov 18 10:28:53
> 2011 +0000
> @@ -27,24 +27,7 @@ DefinitionBlock ("DSDT.aml", "DSDT", 2,
> Name (\APCL, 0x00010000)
> Name (\PUID, 0x00)
>
> - /*
> - * S3 (suspend-to-ram), S4 (suspend-to-disc) and S5 (power-off)
> type codes:
> - * must match piix4 emulation.
> - */
> - Name (\_S3, Package (0x04)
> - {
> - 0x01, /* PM1a_CNT.SLP_TYP */
> - 0x01, /* PM1b_CNT.SLP_TYP */
> - 0x0, /* reserved */
> - 0x0 /* reserved */
> - })
> - Name (\_S4, Package (0x04)
> - {
> - 0x00, /* PM1a_CNT.SLP_TYP */
> - 0x00, /* PM1b_CNT.SLP_TYP */
> - 0x00, /* reserved */
> - 0x00 /* reserved */
> - })
> + /* _S3 and _S4 are in separate SSDTs */
> Name (\_S5, Package (0x04)
> {
> 0x00, /* PM1a_CNT.SLP_TYP */
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/ssdt_s3.asl
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/tools/firmware/hvmloader/acpi/ssdt_s3.asl Fri Nov 18 10:28:53
> 2011 +0000
> @@ -0,0 +1,32 @@
> +/*
> + * ssdt_s3.asl
> + *
> + * Copyright (c) 2011 Citrix Systems, Inc.
> + *
> + * This program is free software; you can redistribute it and/or
> modify
> + * it under the terms of the GNU General Public License as
> published by
> + * the Free Software Foundation; either version 2 of the License,
> or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public
> License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-
> 1307
> +USA */
> +
> +DefinitionBlock ("SSDT_S3.aml", "SSDT", 2, "Xen", "HVM", 0) {
> + /* Must match piix emulation */
> + Name (\_S3, Package (0x04)
> + {
> + 0x01, /* PM1a_CNT.SLP_TYP */
> + 0x01, /* PM1b_CNT.SLP_TYP */
> + 0x0, /* reserved */
> + 0x0 /* reserved */
> + })
> +}
> +
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/acpi/ssdt_s4.asl
> --- /dev/null Thu Jan 01 00:00:00 1970 +0000
> +++ b/tools/firmware/hvmloader/acpi/ssdt_s4.asl Fri Nov 18 10:28:53
> 2011 +0000
> @@ -0,0 +1,32 @@
> +/*
> + * ssdt_s4.asl
> + *
> + * Copyright (c) 2011 Citrix Systems, Inc.
> + *
> + * This program is free software; you can redistribute it and/or
> modify
> + * it under the terms of the GNU General Public License as
> published by
> + * the Free Software Foundation; either version 2 of the License,
> or
> + * (at your option) any later version.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public
> License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-
> 1307
> +USA */
> +
> +DefinitionBlock ("SSDT_S4.aml", "SSDT", 2, "Xen", "HVM", 0) {
> + /* Must match piix emulation */
> + Name (\_S4, Package (0x04)
> + {
> + 0x00, /* PM1a_CNT.SLP_TYP */
> + 0x00, /* PM1b_CNT.SLP_TYP */
> + 0x00, /* reserved */
> + 0x00 /* reserved */
> + })
> +}
> +
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/config.h
> --- a/tools/firmware/hvmloader/config.h Fri Nov 18 10:28:52 2011
> +0000
> +++ b/tools/firmware/hvmloader/config.h Fri Nov 18 10:28:53 2011
> +0000
> @@ -27,7 +27,7 @@ struct bios_config {
>
> void (*e820_setup)(void);
>
> - void (*acpi_build_tables)(void);
> + void (*acpi_build_tables)(int, int);
> void (*create_mp_tables)(void);
> void (*create_smbios_tables)(void);
> void (*create_pir_tables)(void);
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/hvmloader.c
> --- a/tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:52
> 2011 +0000
> +++ b/tools/firmware/hvmloader/hvmloader.c Fri Nov 18 10:28:53
> 2011 +0000
> @@ -516,11 +516,17 @@ int main(void)
> .index = HVM_PARAM_ACPI_IOPORTS_LOCATION,
> .value = 1,
> };
> + int s3_enabled, s4_enabled;
> +
> + s3_enabled = !strncmp(xenstore_read("platform/acpi_s3",
> "1"), "1", 1);
> + s4_enabled = !strncmp(xenstore_read("platform/acpi_s4",
> "1"),
> + "1", 1);
>
> if ( bios->acpi_build_tables )
> {
> - printf("Loading ACPI ...\n");
> - bios->acpi_build_tables();
> + printf("Loading ACPI (S3=%s S4=%s) ...\n",
> + (s3_enabled) ? "ON" : "OFF",
> + (s4_enabled) ? "ON" : "OFF");
> + bios->acpi_build_tables(s3_enabled, s4_enabled);
> }
>
> acpi_enable_sci();
> diff -r d22ef0f60497 -r 66bdcb90560f
> tools/firmware/hvmloader/rombios.c
> --- a/tools/firmware/hvmloader/rombios.c Fri Nov 18 10:28:52 2011
> +0000
> +++ b/tools/firmware/hvmloader/rombios.c Fri Nov 18 10:28:53 2011
> +0000
> @@ -112,13 +112,15 @@ static void reset_bios_checksum(void)
> *((uint8_t *)(ROMBIOS_BEGIN + ROMBIOS_MAXOFFSET)) = -checksum;
> }
>
> -static void rombios_acpi_build_tables(void)
> +static void rombios_acpi_build_tables(int s3_enabled, int
> s4_enabled)
> {
> struct acpi_config config = {
> .dsdt_anycpu = dsdt_anycpu,
> .dsdt_anycpu_len = dsdt_anycpu_len,
> .dsdt_15cpu = dsdt_15cpu,
> .dsdt_15cpu_len = dsdt_15cpu_len,
> + .ssdt_s3_enabled = s3_enabled,
> + .ssdt_s4_enabled = s4_enabled,
> };
>
> acpi_build_tables(&config, ACPI_PHYSICAL_ADDRESS); diff -r
> d22ef0f60497 -r 66bdcb90560f tools/firmware/hvmloader/seabios.c
> --- a/tools/firmware/hvmloader/seabios.c Fri Nov 18 10:28:52 2011
> +0000
> +++ b/tools/firmware/hvmloader/seabios.c Fri Nov 18 10:28:53 2011
> +0000
> @@ -91,7 +91,7 @@ static void add_table(uint32_t t)
> info->tables_nr++;
> }
>
> -static void seabios_acpi_build_tables(void)
> +static void seabios_acpi_build_tables(int s3_enabled, int
> s4_enabled)
> {
> uint32_t rsdp = (uint32_t)scratch_alloc(sizeof(struct
> acpi_20_rsdp), 0);
> struct acpi_config config = {
> @@ -99,6 +99,8 @@ static void seabios_acpi_build_tables(vo
> .dsdt_anycpu_len = dsdt_anycpu_qemu_xen_len,
> .dsdt_15cpu = NULL,
> .dsdt_15cpu_len = 0,
> + .ssdt_s3_enabled = s3_enabled,
> + .ssdt_s4_enabled = s4_enabled,
> };
>
> acpi_build_tables(&config, rsdp);
> diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/libxl_create.c
> --- a/tools/libxl/libxl_create.c Fri Nov 18 10:28:52 2011 +0000
> +++ b/tools/libxl/libxl_create.c Fri Nov 18 10:28:53 2011 +0000
> @@ -93,6 +93,8 @@ int libxl_init_build_info(libxl_ctx *ctx
> b_info->u.hvm.pae = 1;
> b_info->u.hvm.apic = 1;
> b_info->u.hvm.acpi = 1;
> + b_info->u.hvm.acpi_s3 = 1;
> + b_info->u.hvm.acpi_s4 = 1;
> b_info->u.hvm.nx = 1;
> b_info->u.hvm.viridian = 0;
> b_info->u.hvm.hpet = 1;
> @@ -189,9 +191,13 @@ int libxl__domain_build(libxl__gc *gc,
> vments[4] = "start_time";
> vments[5] = libxl__sprintf(gc, "%lu.%02d",
> start_time.tv_sec,(int)start_time.tv_usec/10000);
>
> - localents = libxl__calloc(gc, 3, sizeof(char *));
> + localents = libxl__calloc(gc, 7, sizeof(char *));
> localents[0] = "platform/acpi";
> localents[1] = (info->u.hvm.acpi) ? "1" : "0";
> + localents[2] = "platform/acpi_s3";
> + localents[3] = (info->u.hvm.acpi_s3) ? "1" : "0";
> + localents[4] = "platform/acpi_s4";
> + localents[5] = (info->u.hvm.acpi_s4) ? "1" : "0";
>
> break;
> case LIBXL_DOMAIN_TYPE_PV:
> diff -r d22ef0f60497 -r 66bdcb90560f tools/libxl/libxl_types.idl
> --- a/tools/libxl/libxl_types.idl Fri Nov 18 10:28:52 2011 +0000
> +++ b/tools/libxl/libxl_types.idl Fri Nov 18 10:28:53 2011 +0000
> @@ -167,6 +167,8 @@ libxl_domain_build_info = Struct("domain
> ("pae", bool),
> ("apic", bool),
> ("acpi", bool),
> + ("acpi_s3", bool),
> + ("acpi_s4", bool),
> ("nx", bool),
> ("viridian", bool),
> ("timeoffset", string), diff
> -r d22ef0f60497 -r 66bdcb90560f tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c Fri Nov 18 10:28:52 2011 +0000
> +++ b/tools/libxl/xl_cmdimpl.c Fri Nov 18 10:28:53 2011 +0000
> @@ -683,6 +683,10 @@ static void parse_config_data(const char
> b_info->u.hvm.apic = l;
> if (!xlu_cfg_get_long (config, "acpi", &l))
> b_info->u.hvm.acpi = l;
> + if (!xlu_cfg_get_long (config, "acpi_s3", &l))
> + b_info->u.hvm.acpi_s3 = l;
> + if (!xlu_cfg_get_long (config, "acpi_s4", &l))
> + b_info->u.hvm.acpi_s4 = l;
> if (!xlu_cfg_get_long (config, "nx", &l))
> b_info->u.hvm.nx = l;
> if (!xlu_cfg_get_long (config, "viridian", &l))
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel
|