http://bugzilla.kernel.org/show_bug.cgi?id=9915





------- Comment #3 from [EMAIL PROTECTED]  2008-02-09 02:44 -------
Reviewing the DSDT for use of OSI(Linux), I don't
see that Panasonic has any specific support for Linux.
Rather, OSI(Linux)'s main effect seems to be to run
the DSDT as if Windows NT were running.  In particular,
there is a bunch of USB code that gets disabled because
OSI(Linux) disables the Vista-validated path through the BIOS.

However, I don't fully follow the save/restore to INFO mechanism --
it could possibly have some implications on SMM code.

I'll be surprised if acpi_osi=Linux behaves differently
from acpi_osi=!Linux WRT. the boot problems reported here.
However, I wouldn't be surprised to see a differences
in suspend/resume function, or USB function.

   Name (OSID, 0x00)
# OSID is not referenced, except by the CKOS method itself
    Method (CKOS, 0, NotSerialized)
    {
        If (OSID)
        {
            Return (OSID)
        }

        If (CondRefOf (\_OSI, Local0))
        {
            If (\_OSI ("Linux"))
            {
                Store (0x10, OSID)
# OSI(Linux) sets OSID to x10
            }
            Else
            {
                If (\_OSI ("Windows 2006"))
                {
                    Store (0x83, OSID)
                }
                Else
                {
                    Store (0x82, OSID)
                }
            }
        }
        Else
        {
            If (LEqual (SCMP (\_OS, "Microsoft Windows NT"), Zero))
            {
                Store (0x81, OSID)
            }
            Else
            {
                If (LEqual (SCMP (\_OS, "Microsoft Windows"), Zero))
                {
                    Store (0x01, OSID)
                }
                Else
                {
                    If (LEqual (SCMP (\_OS, "Microsoft WindowsME: Millennium
Edition"), Zero))
                    {
                        Store (0x02, OSID)
                    }
                    Else
                    {
                        Store (0xFF, OSID)
                    }
                }
            }
        }

        Return (OSID)
    }
...
   Scope (\_SB)
    {
        Method (_INI, 0, NotSerialized)
        {
            If (DTSE)
            {
                \_SB.PSRV (0xC9, 0x04, 0x00, 0x00, 0x00)
            }

            Store (0x07D0, OSYS)
            If (CondRefOf (\_OSI, Local0))
            {
                If (\_OSI ("Linux"))
                {
                    Store (0x03E8, OSYS)
                }
# OSYS is immediately over-written, so this OSI(Linux) is a NOP
                If (\_OSI ("Windows 2001"))
                {
                    Store (0x07D1, OSYS)
                }

                If (\_OSI ("Windows 2001 SP1"))
                {
                    Store (0x07D1, OSYS)
                }

                If (\_OSI ("Windows 2001 SP2"))
                {
                    Store (0x07D2, OSYS)
                }

                If (\_OSI ("Windows 2006"))
                {
                    Store (0x07D6, OSYS)
                }

                If (LAnd (MPEN, LEqual (OSYS, 0x07D1)))
                {
                    \_SB.PSRV (0xC9, 0x03, One, One, 0x00)
                }
            }

            \_SB.PCI0.GFX0.INIG ()
        }
    }

# CKOS is used in several places
    Method (_WAK, 1, NotSerialized)
    {
        \_SB.PSRV (0x92, 0x03, 0x01, \CKOS (), 0x00)
        If (LEqual (Arg0, 0x03))
        {
            \_SB.BAY3 ()
        }
...
       Method (PSRV, 5, Serialized)

        {
            Acquire (PSMX, 0xFFFF)
            If (Arg2)
            {
# Arg3 is the output from CKOS()
                Store (Arg3, INFO)
            }

            Store (Arg1, DID)
            Store (Arg0, BCMD)
            Store (0x00, SMIC)
            If (LEqual (Arg4, 0x00))
            {
                Store (Zero, Local0)
            }
            Else
            {
                If (LEqual (Arg4, 0x01))
                {
                    Store (INF, Local0)
                }
                Else
                {
                    If (LEqual (Arg4, 0x03))
                    {
                        Store (INFD, Local0)
                    }
                    Else
                    {
                        If (LEqual (Arg4, 0x04))
                        {
                            Store (INFP, Local0)
                        }
                        Else
                        {
                            Store (INFO, Local0)
                        }
                    }
                }
            }

            Release (PSMX)
            Return (Local0)
        }
        OperationRegion (SMI1, SystemMemory, 0x3F6D0D4D, 0x00000200)
        Field (SMI1, AnyAcc, NoLock, Preserve)
        {
            BCMD,   8,
            DID,    32,
            INFO,   4056
        }

# PSRV is widely called, and sometimes its return value is used.
        Device (PCI0)
        {
            Method (_INI, 0, NotSerialized)
            {
                \_SB.PSRV (0x92, 0x03, 0x01, \CKOS (), 0x00)
                GINI ()
                AINI ()
                \_SB.PSRV (0xB8, 0x01, 0x00, 0x00, 0x00)
            }
# a bunch of USB code depends on CKOS == x83 (Vista)

    If (LEqual (\CKOS (), 0x83))
    {
        Name (USP1, Zero)
        Name (USP2, Zero)
        Name (USPE, Zero)
        Name (\_SB.PCI0.USB1._PRW, Package (0x02)
        {
            0x03,
            0x03
        })
        Method (\_SB.PCI0.USB1._PSW, 1, NotSerialized)
        {
            Store (Arg0, USP1)
            \_SB.ECPF (0x021A, 0x03, LOr (USPE, USP1))
            If (Arg0)
            {
                Store (0x03, \_SB.PCI0.USB1.RSEN)
            }
            Else
            {
                Store (Zero, \_SB.PCI0.USB1.RSEN)
            }
        }

        Name (\_SB.PCI0.USB2._PRW, Package (0x02)
        {
            0x04,
            0x03
        })
        Method (\_SB.PCI0.USB2._PSW, 1, NotSerialized)
        {
            Store (Arg0, USP2)
            \_SB.ECPF (0x021A, 0x0C, LOr (USPE, USP2))
            If (Arg0)
            {
                Store (0x03, \_SB.PCI0.USB2.RSEN)
            }
            Else
            {
                Store (Zero, \_SB.PCI0.USB2.RSEN)
            }
        }

        Name (\_SB.PCI0.EHCI._PRW, Package (0x02)
        {
            0x0D,
            0x03
        })
        Method (\_SB.PCI0.EHCI._PSW, 1, NotSerialized)
        {
            Store (Arg0, USPE)
            \_SB.ECPF (0x021A, 0x03, LOr (USPE, USP1))
            \_SB.ECPF (0x021A, 0x0C, LOr (USPE, USP2))
        }

        Scope (\_GPE)
       {
            Method (_L03, 0, NotSerialized)
            {
                Notify (\_SB.PCI0.USB1, 0x02)
            }

            Method (_L04, 0, NotSerialized)
            {
                Notify (\_SB.PCI0.USB2, 0x02)
            }
        }
    }


-- 
Configure bugmail: http://bugzilla.kernel.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug, or are watching someone who is.

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
acpi-bugzilla mailing list
acpi-bugzilla@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/acpi-bugzilla

Reply via email to