← Back to team overview

hybrid-graphics-linux team mailing list archive

Re: [ANNOUNCE] Build-Your-Own-Switcheroo (byo-switcheroo)

 

On Sun, May 15, 2011 at 4:47 AM, Tais Plougmann Hansen <taisph@xxxxxx> wrote:
> True, this was while X was running. Without X I get "client 1 refused
> switch". :)
> Even though I have no experience with DSDT, I've been trying to read
> thedisassembly anyway and this is what I've come up with for the ThinkPad
> W520 with Nvidia Quadro 2000M:
> _DSM
> {0xF8,0xD8,0x86,0xA4,0xDA,0x0B,0x1B,0x47,0xA7,0x2B,0x60,0x42,0xA6,0xB5,0xBE,0xE0}
> 0x100 0x1A {0x0,0x0,0x0,0x0}
> First argument seems to be a buffer compare with the 16 specified bytes.
> Second argument has to be 0x100 or what looks like an error code will be
> returned.
> The third argument seems to be either 0x00, 0x10, 0x1A or 0x1B.
> I can't figure out the fourth one.
> I don't know if I need to call any other methods before/after this.

The format of the _DSM is defined in the ACPI spec.  The first
argument is 16 byte UUID, identifying the interface the DSM provides.
The second argument is a version number.  The third argument is the
function within the DSM to invoke.  Function 0 is defined in the ACPI
spec to return a bitmap of supported functions.  This allows a way to
query the interface and see if it's available.  The fourth argument is
the parameters for the call.  Technically the fourth parameter should
be an ACPI package, but acpi_call doesn't support that.  The nouveau
switcheroo driver uses an integer, which only works on a small subset
of implementations.  Using a buffer should provide reasonable
compatibility.

As to what functions 0x10, 0x1A, and 0x1B do in your DSDT... I don't
know.  Thanks,

Alex


Follow ups

References