> -----Original Message----- > From: Limonciello, Mario > Sent: Thursday, June 15, 2017 10:16 AM > To: 'Pali Rohár' <pali.rohar@xxxxxxxxx>; Darren Hart <dvhart@xxxxxxxxxxxxx> > Cc: Andy Shevchenko <andy@xxxxxxxxxxxxx>; Andy Lutomirski <luto@xxxxxxxxxx>; > platform-driver-x86@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx > Subject: RE: [PATCH] RFC: platform/x86: wmi: Fix check for method instance > number > > > -----Original Message----- > > From: Pali Rohár [mailto:pali.rohar@xxxxxxxxx] > > Sent: Thursday, June 15, 2017 8:59 AM > > To: Limonciello, Mario <Mario_Limonciello@xxxxxxxx>; Darren Hart > > <dvhart@xxxxxxxxxxxxx> > > Cc: Andy Shevchenko <andy@xxxxxxxxxxxxx>; Andy Lutomirski > <luto@xxxxxxxxxx>; > > platform-driver-x86@xxxxxxxxxxxxxxx; linux-kernel@xxxxxxxxxxxxxxx > > Subject: Re: [PATCH] RFC: platform/x86: wmi: Fix check for method instance > > number > > > > Mario, are you able to check if instance number passed to > > wmi_evaluate_method in following dell WMI drivers is correct and should > > be really 1? > > > > I suspect that it should be zero, as instance number is indexed from > > zero. > > > > There is no comment in those dell WMI drivers why it is 1, nor what 1 > > means. > > > > Ideally it needs to be checked in ACPI byte code, MOF file and WDG dump. > > > I think you're likely correct. I don't have a box that supports alienware-wmi > or dell-wmi-led.c handy at the current moment to confirm this hypothesis though. > I'll confirm this later. > > I didn't realize it was zero indexed when I wrote alienware-wmi, and I'm guessing > the author of dell-wmi-led didn't either. > > The reason it's probably working is the ACPI byte code isn't actually checking > the instance since most times _WDG will only call out one instance. I confirmed you're correct. Switching instance over to 0 works properly on an ASM200 (supported by alienware-wmi). Since only one instance is supported the ASL doesn't check Arg0 at all. snippet: Method (WMAX, 3, NotSerialized) { If ((Arg1 == One)) { CreateByteField (Arg2, Zero, SOUR) If ((SOUR == One)) { GU01 = (GU01 | 0x80) GIO1 = (GIO1 & 0x7F) GL01 = (GL01 & 0x7F) Return (Zero) } If ((SOUR == 0x02)) { GU01 = (GU01 | 0x80) GIO1 = (GIO1 & 0x7F) GL01 = (GL01 | 0x80) Return (Zero) } If ((SOUR == 0x03)) { If ((CN00 == Zero)) { CN00 = One If (((GL01 & 0x80) == 0x80)) { GL01 &= 0x7F Return (Zero) } If (((GL01 & 0x80) == Zero)) { GL01 |= 0x80 Return (Zero) } } If ((CN00 == One)) { CN00 = Zero Return (Zero) } Return (One) } Return (One) } > > > On Wednesday 14 June 2017 17:46:54 Pali Rohár wrote: > > > Function wmi_evaluate_method: > > ... > > > alienware-wmi.c: > > > instance=1 /* no comment why, guid=A70591CE-A997-11DA-B012- > > B622A1EF5492 */ > > > instance=1 /* no comment why, guid=A80593CE-A997-11DA-B012- > > B622A1EF5492 */ > > > instance=1 /* no comment why, guid=A70591CE-A997-11DA-B012- > > B622A1EF5492 */ > > ... > > > dell-wmi-led.c: > > > instance=1 /* no comment why, guid=F6E4FE6E-909D-47cb-8BAB- > > C9F6F2F8D396 */ > > > > -- > > Pali Rohár > > pali.rohar@xxxxxxxxx