[SeaBIOS] [PATCH v2 8/9] seabios: q35: add basic hotplug support

Paolo Bonzini pbonzini at redhat.com
Tue Oct 9 10:25:06 CEST 2012


Il 09/10/2012 05:35, Jason Baron ha scritto:
> From: Jason Baron <jbaron at redhat.com>
> 
> Add support for acpi hotplug to q35. Copied from the piix acpi table.
> 
> Signed-off-by: Jason Baron <jbaron at redhat.com>

Reviewed-by: Paolo Bonzini <pbonzini at redhat.com>

> ---
>  src/q35-acpi-dsdt.dsl |   61 +++++++++++++++++++++++++++++++++++++++++++++----
>  1 files changed, 56 insertions(+), 5 deletions(-)
> 
> diff --git a/src/q35-acpi-dsdt.dsl b/src/q35-acpi-dsdt.dsl
> index 4e16d24..fb62323 100644
> --- a/src/q35-acpi-dsdt.dsl
> +++ b/src/q35-acpi-dsdt.dsl
> @@ -83,6 +83,21 @@ DefinitionBlock (
>              Name (_ADR, 0x00)
>              Name (_UID, 1)
>  
> +
> +            OperationRegion(PCST, SystemIO, 0xae00, 0x08)
> +            Field (PCST, DWordAcc, NoLock, WriteAsZeros)
> +            {
> +                PCIU, 32,
> +                PCID, 32,
> +            }
> +
> +            OperationRegion(SEJ, SystemIO, 0xae08, 0x04)
> +            Field (SEJ, DWordAcc, NoLock, WriteAsZeros)
> +            {
> +                B0EJ, 32,
> +            }
> +
> +
>              // _OSC: based on sample of ACPI3.0b spec
>              Name(SUPP,0) // PCI _OSC Support Field value
>              Name(CTRL,0) // PCI _OSC Control Field value
> @@ -872,6 +887,41 @@ DefinitionBlock (
>          }
>      }
>  
> +/****************************************************************
> + * PCI hotplug
> + ****************************************************************/
> +
> +    Scope(\_SB.PCI0) {
> +        /* Methods called by bulk generated PCI devices below */
> +
> +        /* Methods called by hotplug devices */
> +        Method (PCEJ, 1, NotSerialized) {
> +            // _EJ0 method - eject callback
> +            Store(ShiftLeft(1, Arg0), B0EJ)
> +            Return (0x0)
> +        }
> +
> +    /* Hotplug notification method supplied by SSDT */
> +    External (\_SB.PCI0.PCNT, MethodObj)
> +
> +        /* PCI hotplug notify method */
> +        Method(PCNF, 0) {
> +            // Local0 = iterator
> +            Store (Zero, Local0)
> +            While (LLess(Local0, 31)) {
> +                Increment(Local0)
> +                If (And(PCIU, ShiftLeft(1, Local0))) {
> +                    PCNT(Local0, 1)
> +                }
> +                If (And(PCID, ShiftLeft(1, Local0))) {
> +                    PCNT(Local0, 3)
> +                }
> +            }
> +            Return(One)
> +        }
> +
> +    }
> +
>      Scope (\_GPE)
>      {
>          Name(_HID, "ACPI0006")
> @@ -879,12 +929,13 @@ DefinitionBlock (
>          Method(_L00) {
>              Return(0x01)
>          }
> -        Method(_L01) {
> -             // CPU hotplug event
> -	     Return(\_SB.PRSC())
> +        Method(_E01) {
> +            // PCI hotplug event
> +            Return(\_SB.PCI0.PCNF())
>          }
> -        Method(_L02) {
> -            Return(0x01)
> +        Method(_E02) {
> +            // CPU hotplug event
> +            Return(\_SB.PRSC())
>          }
>          Method(_L03) {
>              Return(0x01)
> 





More information about the SeaBIOS mailing list