> > > 
> > 
> >                     If (\_OSI ("Windows 2006"))
> >                     {
> >                         Store (0x40, ^OSTB)
> >                         Store (0x40, ^TPOS)
> >                     }
> > 
> >                     If (\_OSI ("Linux"))
> >                     {
> >                         Store (0x01, LINX)
> >                         Store (0x80, ^OSTB)
> >                         Store (0x80, ^TPOS)
> >                     }
> > 
> > Like other Acers...
> > LINX is written but never read, a NOP
> > OSTB is compared to >=4 only, so the Linux branch above is a NOP
> > OSTP return value is never referneced, a NOP
> > 
> > However, TPOS is referenced in the ATA _STM and _PS0 method,
> > wher it is compared equal to 0x40.  OSI(Linux) will disable
> > that code (whatever it does).
> > 
> > So unless you find the power management of your HDD to be better
> > with acpi_osi=Linux at suspend/resume time,
> > we'll stick with the default of acpi_osi=!Linux for all Acer.
> > 

> 
> Hmmmm what do you mean by "power management of your HDD". I got no
> problem with suspend/resume and I never use power management of HDD (as
> it seems that it is not really something that can help to enhance the
> lifetime of the harddisk).

In this case, it is invoked for you during suspend/resume.

> Is there a way to know what does this condition branch ?

The big picture is that if the box has a Vista sticker on it,
then it was validated with Vista, and why would Linux want to
run the BIOS through a (different) code path that was not validated?

But yes, one can read the code below and notice there is a hook in
SAT0.PRID._STM that only executes on Vista
(though curiously, _STM for the other 3 targets doesn't have this).
This hook does something to the PCI config space of the device.

and for all 4 targets, there is code under _PS0 - which is
what would be invoked on resume.

There is also some sort of spin on a busy-bit in the method
that restores power to the 4 SATA targets that executes
only if Vista compatible.

-Len


            Device (SAT0)
                Device (PRID)
                {
                    Name (_ADR, 0x00)
                    Name (SPTM, Buffer (0x14)
                    {
                        /* 0000 */    0x78, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 
0x00,
                        /* 0008 */    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF,
                        /* 0010 */    0x13, 0x00, 0x00, 0x00
                    })
                    Method (_GTM, 0, NotSerialized)
                    {
                        Return (SPTM)
                    }

                    Method (_STM, 3, NotSerialized)
                    {
                        Store (Arg0, SPTM)
                        If (LEqual (TPOS, 0x40))
                        {
# Vista compatible path

                            \_SB.PCI0.SMB.SAPW ()
                        }
                    }

                    Name (S12P, 0x00)
                    Method (_PS0, 0, NotSerialized)
                    {
                        If (LEqual (TPOS, 0x40))
                        {
# Vista compatible path
# looks like it spins on a busy bit in _PS0,
# the method used to bring the device back to powered-on
# non-vista will not spin on this bit
                            Store (0x28, Local0)
                            OperationRegion (SAI1, SystemIO, P3F4, 0x04)
                            Field (SAI1, ByteAcc, NoLock, Preserve)
                            {
                                        Offset (0x01),
                                    ,   7,
                                BSY0,   1
                            }

                            While (LAnd (LEqual (BSY0, 0x01), Local0))
                            {
                                Store (Local0, DBGP)
                                Sleep (0xFA)
                                Decrement (Local0)
                            }
                        }

                        Store (0x00, S12P)
                    }
...
                Device (SECD)
                {
                    Name (_ADR, 0x01)
                    Name (SPTM, Buffer (0x14)
                    {
                        /* 0000 */    0x78, 0x00, 0x00, 0x00, 0x0F, 0x00, 0x00, 
0x00,
                        /* 0008 */    0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 
0xFF,
                        /* 0010 */    0x13, 0x00, 0x00, 0x00
                    })
                    Method (_GTM, 0, NotSerialized)
                    {
                        Return (SPTM)
                    }

                    Method (_STM, 3, NotSerialized)
                    {
                        Store (Arg0, SPTM)
# note unconditional SAPW here, no check for Vista
                        \_SB.PCI0.SMB.SAPW ()
                    }

                    Name (S12S, 0x00)
                    Method (_PS0, 0, NotSerialized)
                    {
                        If (LEqual (TPOS, 0x40))
                        {
# Vista path, like pri target above
                            Store (0x28, Local2)
                            OperationRegion (SAI2, SystemIO, P1F4, 0x04)
                            Field (SAI2, ByteAcc, NoLock, Preserve)
                            {
                                        Offset (0x01),
                                    ,   7,
                                BSY1,   1
                            }

                            While (LAnd (LEqual (BSY1, 0x01), Local2))
                            {
                                Sleep (0xFA)
                                Store (Local2, DBGP)
                                Decrement (Local2)
                            }
                        }

                        Store (0x00, S12S)
                    }
            Device (SAT1)
                Device (PRID)
# same SECD above
                Device (SECD)
# same as SECD above


So what does SAPW() do?

                Method (SAPW, 0, NotSerialized)
                {
                    Acquire (SAPM, 0xFFFF)
                    Store (Z00W, Local0)
                    And (Local0, 0x01, Local1)
                    If (Local1)
                    {
                        \_SB.PCI0.SAT0.FBWK ()
                        Or (Z00W, 0x20, Z00W)
                    }

                    And (Local0, 0x10, Local1)
                    If (Local1)
                    {
                        \_SB.PCI0.SAT1.FBWK ()
                        Or (Z00W, 0x40, Z00W)
                    }

                    Release (SAPM)
                }
...
            Device (SMB)
            {
                Name (_ADR, 0x00140000)
                OperationRegion (Z00V, PCI_Config, 0x08, 0x0100)
                Field (Z00V, ByteAcc, NoLock, Preserve)
                {
                    RVID,   8,
                            Offset (0xA5),
                    Z00W,   8,
# Z00W lives in PCI configuratioon space - no idea what it does
                            Offset (0xF0),
                    EIDX,   8,
                            Offset (0xF4),
                    EDAT,   32
                }
...
            Device (SAT0)
            {
                Name (_ADR, 0x00120000)
                OperationRegion (SAP1, PCI_Config, 0x00, 0x44)
                Field (SAP1, WordAcc, NoLock, Preserve)
                {
                            Offset (0x08),
                    CLCD,   32,
                            Offset (0x10),
                    P1F0,   16,
                            Offset (0x14),
                    P3F4,   16,
                            Offset (0x18),
                    P170,   16,
                            Offset (0x1C),
                    P1F4,   16,
                            Offset (0x40),
                    CNFG,   8
# CNFG lives in PCI configuration space for the device
                }

                Method (FBWK, 0, NotSerialized)
                {
                    And (CNFG, 0xF7, CNFG)
                    Sleep (0x0A)
                    And (CNFG, 0xEF, CNFG)
                }

# presumably x1080 is a debug port

    OperationRegion (\DEBG, SystemIO, 0x1080, 0x01)
    Field (\DEBG, ByteAcc, NoLock, Preserve)
    {
        DBGP,   8
    }
-
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to