[SeaBIOS] [PATCH] acpi: hide 64-bit PCI hole for Windows XP

Igor Mammedov imammedo at redhat.com
Tue Jul 30 17:26:12 CEST 2013


On Tue, 30 Jul 2013 16:18:29 +0300
"Michael S. Tsirkin" <mst at redhat.com> wrote:

> On Tue, Jul 30, 2013 at 03:10:02PM +0200, Igor Mammedov wrote:
> > On Tue, 30 Jul 2013 14:35:25 +0300
> > "Michael S. Tsirkin" <mst at redhat.com> wrote:
> > 
> > > On Tue, Jul 30, 2013 at 09:00:38AM +0200, Igor Mammedov wrote:
> > > > Windows XP (32 and 64 bit) crashes if 64-bit PCI hole is present.
> > > > Use _OSI ACPI method to blacklist it and hide 64-bit PCI hole.
> > > > 
> > > > _OSI strings reported by XP are taken from here:
> > > > http://msdn.microsoft.com/library/windows/hardware/gg463275
> > > > 
> > > > Signed-off-by: Igor Mammedov <imammedo at redhat.com>
> > > 
> > > Hmm did you test this with other OS-es?
> > > OSI matches multiple strings so this will often
> > > disable the 64 bit memory for newer windows or e.g.
> > > for linux.
> > > 
> > > See e.g.
> > > ftp://ftp.suse.com/pub/people/trenn/ACPI_BIOS_on_Linux_guide/acpi_guideline_for_vendors.pdf
> > according to "3.2 How OSI is implemented on Linux" _OSI is broken on linux,
> > but I guess we should accommodate this buggy behavior for compatibility reasons.
> > 
> > _OS could be better way to do it, but I haven't found any MS document
> > specifying _OS values for Windows flavors.
> 
> Yes but we can work it out.
> 
> > So far from testing of Windows OSes only
> >  (32|64bit) Windows XP and Windows Server 2003 [R2]
> > crash when 64-bit PCI hole is present, the rest installs/boots just fine.
> 
> Right. That's why I'm thinking _OS might be better.
_OS is even worse it returns "Microsoft Windows NT" on linux, XP, WS2012R2 ...
so it's  not usable either.

> 
> 
> > >
> > > Could we use _OS instead?
> > > That's a single string, so it will only match a specific OS.
> > > 
> > > > ---
> > > >  src/acpi-dsdt.dsl |   25 +++++++++++++++++++++++++
> > > >  1 files changed, 25 insertions(+), 0 deletions(-)
> > > > 
> > > > diff --git a/src/acpi-dsdt.dsl b/src/acpi-dsdt.dsl
> > > > index 158f6b4..7b55636 100644
> > > > --- a/src/acpi-dsdt.dsl
> > > > +++ b/src/acpi-dsdt.dsl
> > > > @@ -33,6 +33,31 @@ DefinitionBlock (
> > > >  
> > > >  
> > > >  /****************************************************************
> > > > + * OS detection
> > > > + ****************************************************************/
> > > > +
> > > > +    Scope(\_SB) {
> > > > +        External(\P1V, IntObj)
> > > > +
> > > > +        Method(_INI) {
> > > > +            If (CondRefOf (\_OSI, Local0)) {
> > > > +                /* disable 64-bit PCI window for Windows XP and its variants */
> > > > +                If (\_OSI ("Windows 2001")) {
> > > > +                    Store (Zero, P1V)
> > > > +                }
> > > > +
> > > > +                If (\_OSI ("Windows 2001 SP1")) {
> > > > +                    Store (Zero, P1V)
> > > > +                }
> > > > +
> > > > +                If (\_OSI ("Windows 2001 SP2")) {
> > > > +                    Store (Zero, P1V)
> > > > +                }
> > > > +            }
> > > > +        }
> > > > +    }
> > > > +
> > > > +/****************************************************************
> > > >   * PCI Bus definition
> > > >   ****************************************************************/
> > > >  
> > > > -- 
> > > > 1.7.1




More information about the SeaBIOS mailing list