qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCHv3] Get system state configuration from QEMU and


From: Gleb Natapov
Subject: Re: [Qemu-devel] [PATCHv3] Get system state configuration from QEMU and patch DSDT with it.
Date: Mon, 4 Jun 2012 14:31:03 +0300

Wrong patch :(

On Mon, Jun 04, 2012 at 01:17:11PM +0300, Gleb Natapov wrote:
> QEMU may want to disable guest's S3/S4 support and it wants to distinguish
> between regular powerdown and S4 powerdown. To support that new fw_cfg
> option was added that passes supported system states and what value should
> guest use to enter each state. States are passed in 6 byte array. Each
> byte represents one system state. If byte at offset X has its MSB set
> it means that system state X is supported and to enter it guest should
> use the value from lowest 7 bits. Patch also detects old QEMU and uses
> values that work in backwards compatible way there.
> 
> Signed-off-by: Gleb Natapov <address@hidden>
> ---
>  src/acpi-dsdt.dsl  |   32 ---------
>  src/acpi-dsdt.hex  |   42 +-----------
>  src/acpi.c         |   15 ++++
>  src/ssdt-pcihp.dsl |   36 ++++++++++
>  src/ssdt-pcihp.hex |  185 
> +++++++++++++++++++++++++++++++++-------------------
>  5 files changed, 172 insertions(+), 138 deletions(-)
> 
> diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl
> index 4bdc268..37899fc 100644
> --- a/src/acpi-dsdt.dsl
> +++ b/src/acpi-dsdt.dsl
> @@ -604,38 +604,6 @@ DefinitionBlock (
>          }
>      }
>  
> -
> -/****************************************************************
> - * Suspend
> - ****************************************************************/
> -
> -    /*
> -     * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type 
> codes:
> -     * must match piix4 emulation.
> -     */
> -    Name (\_S3, Package (0x04)
> -    {
> -        0x01,  /* PM1a_CNT.SLP_TYP */
> -        0x01,  /* PM1b_CNT.SLP_TYP */
> -        Zero,  /* reserved */
> -        Zero   /* reserved */
> -    })
> -    Name (\_S4, Package (0x04)
> -    {
> -        Zero,  /* PM1a_CNT.SLP_TYP */
> -        Zero,  /* PM1b_CNT.SLP_TYP */
> -        Zero,  /* reserved */
> -        Zero   /* reserved */
> -    })
> -    Name (\_S5, Package (0x04)
> -    {
> -        Zero,  /* PM1a_CNT.SLP_TYP */
> -        Zero,  /* PM1b_CNT.SLP_TYP */
> -        Zero,  /* reserved */
> -        Zero   /* reserved */
> -    })
> -
> -
>  /****************************************************************
>   * CPU hotplug
>   ****************************************************************/
> diff --git a/src/acpi-dsdt.hex b/src/acpi-dsdt.hex
> index a4af597..8678fbf 100644
> --- a/src/acpi-dsdt.hex
> +++ b/src/acpi-dsdt.hex
> @@ -3,12 +3,12 @@ static unsigned char AmlCode[] = {
>  0x53,
>  0x44,
>  0x54,
> -0x21,
> -0x11,
> +0xfd,
> +0x10,
>  0x0,
>  0x0,
>  0x1,
> -0xe8,
> +0x4a,
>  0x42,
>  0x58,
>  0x50,
> @@ -3925,42 +3925,6 @@ static unsigned char AmlCode[] = {
>  0x52,
>  0x51,
>  0x30,
> -0x8,
> -0x5f,
> -0x53,
> -0x33,
> -0x5f,
> -0x12,
> -0x6,
> -0x4,
> -0x1,
> -0x1,
> -0x0,
> -0x0,
> -0x8,
> -0x5f,
> -0x53,
> -0x34,
> -0x5f,
> -0x12,
> -0x6,
> -0x4,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
> -0x8,
> -0x5f,
> -0x53,
> -0x35,
> -0x5f,
> -0x12,
> -0x6,
> -0x4,
> -0x0,
> -0x0,
> -0x0,
> -0x0,
>  0x10,
>  0x49,
>  0xe,
> diff --git a/src/acpi.c b/src/acpi.c
> index 30888b9..06ffe0a 100644
> --- a/src/acpi.c
> +++ b/src/acpi.c
> @@ -492,6 +492,8 @@ extern void link_time_assertion(void);
>  
>  static void* build_pcihp(void)
>  {
> +    char *sys_states;
> +    int sys_state_size;
>      u32 rmvc_pcrm;
>      int i;
>  
> @@ -523,6 +525,19 @@ static void* build_pcihp(void)
>          }
>      }
>  
> +    sys_states = romfile_loadfile("etc/system-states", &sys_state_size);
> +    if (!sys_states || sys_state_size != 6)
> +        sys_states = (char[]){128, 0, 0, 129, 128, 128};
> +
> +    if (!(sys_states[3] & 128))
> +        ssdt[acpi_s3_name[0]] = 'X';
> +    if (!(sys_states[4] & 128))
> +        ssdt[acpi_s4_name[0]] = 'X';
> +    else
> +        ssdt[acpi_s4_pkg[0] + 1] = ssdt[acpi_s4_pkg[0] + 3] = sys_states[4] 
> & 127;
> +    ((struct acpi_table_header*)ssdt)->checksum = 0;
> +    ((struct acpi_table_header*)ssdt)->checksum -= checksum(ssdt, 
> sizeof(ssdp_pcihp_aml));
> +
>      return ssdt;
>  }
>  
> diff --git a/src/ssdt-pcihp.dsl b/src/ssdt-pcihp.dsl
> index 4b435b8..12555e2 100644
> --- a/src/ssdt-pcihp.dsl
> +++ b/src/ssdt-pcihp.dsl
> @@ -95,4 +95,40 @@ DefinitionBlock ("ssdt-pcihp.aml", "SSDT", 0x01, "BXPC", 
> "BXSSDTPCIHP", 0x1)
>              gen_pci_hotplug(1f)
>          }
>      }
> +
> +    Scope(\) {
> +/****************************************************************
> + * Suspend
> + ****************************************************************/
> +
> +    /*
> +     * S3 (suspend-to-ram), S4 (suspend-to-disk) and S5 (power-off) type 
> codes:
> +     * must match piix4 emulation.
> +     */
> +
> +        ACPI_EXTRACT_NAME_STRING acpi_s3_name
> +        Name (_S3, Package (0x04)
> +        {
> +            One,  /* PM1a_CNT.SLP_TYP */
> +            One,  /* PM1b_CNT.SLP_TYP */
> +            Zero,  /* reserved */
> +            Zero   /* reserved */
> +        })
> +        ACPI_EXTRACT_NAME_STRING acpi_s4_name
> +        ACPI_EXTRACT_PKG_START acpi_s4_pkg
> +        Name (_S4, Package (0x04)
> +        {
> +            0x2,  /* PM1a_CNT.SLP_TYP */
> +            0x2,  /* PM1b_CNT.SLP_TYP */
> +            Zero,  /* reserved */
> +            Zero   /* reserved */
> +        })
> +        Name (_S5, Package (0x04)
> +        {
> +            Zero,  /* PM1a_CNT.SLP_TYP */
> +            Zero,  /* PM1b_CNT.SLP_TYP */
> +            Zero,  /* reserved */
> +            Zero   /* reserved */
> +        })
> +    }
>  }
> diff --git a/src/ssdt-pcihp.hex b/src/ssdt-pcihp.hex
> index b15ad5a..f3bb3c6 100644
> --- a/src/ssdt-pcihp.hex
> +++ b/src/ssdt-pcihp.hex
> @@ -1,80 +1,20 @@
> -static unsigned short aml_adr_dword[] = {
> -0x3e,
> -0x62,
> -0x88,
> -0xae,
> -0xd4,
> -0xfa,
> -0x120,
> -0x146,
> -0x16c,
> -0x192,
> -0x1b8,
> -0x1de,
> -0x204,
> -0x22a,
> -0x250,
> -0x276,
> -0x29c,
> -0x2c2,
> -0x2e8,
> -0x30e,
> -0x334,
> -0x35a,
> -0x380,
> -0x3a6,
> -0x3cc,
> -0x3f2,
> -0x418,
> -0x43e,
> -0x464,
> -0x48a,
> -0x4b0
> +static unsigned short acpi_s4_pkg[] = {
> +0x65c
>  };
> -static unsigned short aml_ej0_name[] = {
> -0x44,
> -0x68,
> -0x8e,
> -0xb4,
> -0xda,
> -0x100,
> -0x126,
> -0x14c,
> -0x172,
> -0x198,
> -0x1be,
> -0x1e4,
> -0x20a,
> -0x230,
> -0x256,
> -0x27c,
> -0x2a2,
> -0x2c8,
> -0x2ee,
> -0x314,
> -0x33a,
> -0x360,
> -0x386,
> -0x3ac,
> -0x3d2,
> -0x3f8,
> -0x41e,
> -0x444,
> -0x46a,
> -0x490,
> -0x4b6
> +static unsigned short acpi_s3_name[] = {
> +0x649
>  };
>  static unsigned char ssdp_pcihp_aml[] = {
>  0x53,
>  0x53,
>  0x44,
>  0x54,
> -0x44,
> +0x6e,
>  0x6,
>  0x0,
>  0x0,
>  0x1,
> -0x94,
> +0x7e,
>  0x42,
>  0x58,
>  0x50,
> @@ -1668,5 +1608,116 @@ static unsigned char ssdp_pcihp_aml[] = {
>  0x31,
>  0x46,
>  0x5f,
> -0x69
> +0x69,
> +0x10,
> +0x29,
> +0x5c,
> +0x0,
> +0x8,
> +0x5f,
> +0x53,
> +0x33,
> +0x5f,
> +0x12,
> +0x6,
> +0x4,
> +0x1,
> +0x1,
> +0x0,
> +0x0,
> +0x8,
> +0x5f,
> +0x53,
> +0x34,
> +0x5f,
> +0x12,
> +0x8,
> +0x4,
> +0xa,
> +0x2,
> +0xa,
> +0x2,
> +0x0,
> +0x0,
> +0x8,
> +0x5f,
> +0x53,
> +0x35,
> +0x5f,
> +0x12,
> +0x6,
> +0x4,
> +0x0,
> +0x0,
> +0x0,
> +0x0
> +};
> +static unsigned short aml_adr_dword[] = {
> +0x3e,
> +0x62,
> +0x88,
> +0xae,
> +0xd4,
> +0xfa,
> +0x120,
> +0x146,
> +0x16c,
> +0x192,
> +0x1b8,
> +0x1de,
> +0x204,
> +0x22a,
> +0x250,
> +0x276,
> +0x29c,
> +0x2c2,
> +0x2e8,
> +0x30e,
> +0x334,
> +0x35a,
> +0x380,
> +0x3a6,
> +0x3cc,
> +0x3f2,
> +0x418,
> +0x43e,
> +0x464,
> +0x48a,
> +0x4b0
> +};
> +static unsigned short acpi_s4_name[] = {
> +0x655
> +};
> +static unsigned short aml_ej0_name[] = {
> +0x44,
> +0x68,
> +0x8e,
> +0xb4,
> +0xda,
> +0x100,
> +0x126,
> +0x14c,
> +0x172,
> +0x198,
> +0x1be,
> +0x1e4,
> +0x20a,
> +0x230,
> +0x256,
> +0x27c,
> +0x2a2,
> +0x2c8,
> +0x2ee,
> +0x314,
> +0x33a,
> +0x360,
> +0x386,
> +0x3ac,
> +0x3d2,
> +0x3f8,
> +0x41e,
> +0x444,
> +0x46a,
> +0x490,
> +0x4b6
>  };
> -- 
> 1.7.7.3
> 

--
                        Gleb.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]