// // Sample ASL code to demonstrate WMI query, set, method and event operations // // Insert this code at an appropriate place in the bios ASL source, rebuild // the DSDT and replace the original DSDT via the registry or reflashing. // NT should recognize the pnp0c14 device and by the magic of pnp install // wmiacpi.sys and bind it to this ASL. Note that you can have as many // devices as needed, however each device must have a unique _UID. // Device(AMW0) { // pnp0c14 is pnp id assigned to WMI mapper Name(_HID, "*pnp0c14") Name(_UID, 0x0) // // Description of data, events and methods supported by this ASL device. Name(_WDG, Buffer() { // // Query - Set Guids. // // {ABBC0F6a-8EA1-11d1-00A0-C90629100000} // Query - Set Package Guid 0x6a, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 65, 65, // Object Id (AA) 4, // Instance Count 0x01, // Flags (WMIACPI_REGFLAG_EXPENSIVE) // {ABBC0F6b-8EA1-11d1-00A0-C90629100000} // Query - Set String Guid 0x6b, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 65, 66, // Object Id (AB) 4, // Instance Count 0x05, // Flags (WMIACPI_REGFLAG_EXPENSIVE | // WMIACPI_REGFLAG_STRING) // Query - Set ULONG Guid // {ABBC0F6c-8EA1-11d1-00A0-C90629100000} 0x6c, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 65, 67, // Object Id (AC) 4, // Instance Count 0x01, // Flags (WMIACPI_REGFLAG_EXPENSIVE) // // Method Guids // Method Id 1 is get with no input // Method Id 2 is set with no output // Method Id 3 is fire event // Package // {ABBC0F6d-8EA1-11d1-00A0-C90629100000} 0x6d, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 66, 65, // Object Id (BA) 4, // Instance Count 0x02, // Flags (WMIACPI_REGFLAG_METHOD) // String // {ABBC0F6e-8EA1-11d1-00A0-C90629100000} 0x6e, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 66, 66, // Object Id (BB) 4, // Instance Count 0x06, // Flags (WMIACPI_REGFLAG_METHOD) // WMIACPI_REGFLAG_STRING) // ULONG // {ABBC0F6f-8EA1-11d1-00A0-C90629100000} 0x6f, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 66, 67, // Object Id (BC) 4, // Instance Count 0x02, // Flags (WMIACPI_REGFLAG_METHOD) // // Event Guids // Package // {ABBC0F70-8EA1-11d1-00A0-C90629100000} 0x70, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 0xd0, 0, // Notification Id 1, // Instance Count 0x08, // Flags (WMIACPI_REGFLAG_EVENT) // String // {ABBC0F71-8EA1-11d1-00A0-C90629100000} 0x71, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 0xd1, 0, // Notification Id 1, // Instance Count 0x0c, // Flags (WMIACPI_REGFLAG_EVENT) // WMIACPI_REGFLAG_STRING) // ULONG // {ABBC0F72-8EA1-11d1-00A0-C90629100000} 0x72, 0x0f, 0xBC, 0xAB, 0xa1, 0x8e, 0xd1, 0x11, 0x00, 0xa0, 0xc9, 0x06, 0x29, 0x10, 0, 0, 0xd2, 0, // Notification Id 1, // Instance Count 0x08 // Flags (WMIACPI_REGFLAG_EVENT) }) // Storage for 4 instances of Package Name(SAA0, Buffer(0x10) { 1,0,0,0, 2,0,0,0, 3,0,0,0, 4,0,0,0 }) Name(SAA1, Buffer(0x10) { 1,0,0,0, 2,0,0,0, 3,0,0,0, 4,0,0,0 }) Name(SAA2, Buffer(0x10) { 1,0,0,0, 2,0,0,0, 3,0,0,0, 4,0,0,0 }) Name(SAA3, Buffer(0x10) { 1,0,0,0, 2,0,0,0, 3,0,0,0, 4,0,0,0 }) // Storage for 4 instances of string // Maximum length for string is 80 chars Name(SAB0, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()1234567890-_=+[]{}") Name(SAB1, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()1234567890-_=+[]{}") Name(SAB2, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()1234567890-_=+[]{}") Name(SAB3, "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz!@#$%^&*()1234567890-_=+[]{}") // Storage for 4 instances of ULONG Name(SAC0, 0) Name(SAC1, 1) Name(SAC2, 2) Name(SAC3, 3) // Collection Control flags Name(CCAA, 0) Name(CCAB, 0) Name(CCAC, 0) // Event Control flags Name(ECD0, 0) Name(ECD1, 0) Name(ECD2, 0) // Collection control for AA // Arg0 has 0 for disable, non 0 for enable Method(WCAA, 1) { if (LEqual(Arg0, Zero)) { // We are disabling if (LEqual(CCAA, Zero)) { // ERROR - Collection Control was already disabled Name(Foo, "WMIACPI: ASL: WCAA called, but CCAA is 0\n") Store(Foo, Debug) Fatal(0xa0, 14, 0) } } else { // We are enabling if (LNotEqual(CCAA, Zero)) { // ERROR - Collection Control was already enabled Name(Foo1, "WMIACPI: ASL: WCAA called, but CCAA is 1\n") Store(Foo1, Debug) Fatal(0xa0, 13, 0) } } Store(Arg0, CCAA) } // Collection control for AB // Arg0 has 0 for disable, non 0 for enable Method(WCAB, 1) { if (LEqual(Arg0, Zero)) { // We are disabling if (LEqual(CCAB, Zero)) { // ERROR - Collection Control was already disabled Name(Foo, "WMIACPI: ASL: WCAB called, but CCAB is 0\n") Store(Foo, Debug) Fatal(0xa0, 16, 0) } } else { // We are enabling if (LNotEqual(CCAB, Zero)) { // ERROR - Collection Control was already enabled Name(Foo1, "WMIACPI: ASL: WCAB called, but CCAB is 1\n") Store(Foo1, Debug) Fatal(0xa0, 15, 0) } } Store(Arg0, CCAB) } // Collection control for AC // Arg0 has 0 for disable, non 0 for enable Method(WCAC, 1) { if (LEqual(Arg0, Zero)) { // We are disabling if (LEqual(CCAC, Zero)) { // ERROR - Collection Control was already disabled Name(Foo, "WMIACPI: ASL: WCAC called, but CCAC is 0\n") Store(Foo, Debug) Fatal(0xa0, 18, 0) } } else { // We are enabling if (LNotEqual(CCAC, Zero)) { // ERROR - Collection Control was already enabled Name(Foo1, "WMIACPI: ASL: WCAC called, but CCAC is 1\n") Store(Foo1, Debug) Fatal(0xa0, 17, 0) } } Store(Arg0, CCAC) } // Event control for D0 // Arg0 has 0 for disable, non 0 for enable Method(WED0, 1) { if (LEqual(Arg0, Zero)) { // We are disabling if (LEqual(ECD0, Zero)) { // ERROR - Event Control was already disabled Name(Foo, "WMIACPI: ASL: WED0 called, but ECD0 is 0\n") Store(Foo, Debug) Fatal(0xa0, 20, 0) } } else { // We are enabling if (LNotEqual(ECD0, Zero)) { // ERROR - Event Control was already enabled Name(Foo1, "WMIACPI: ASL: WED0 called, but WED0 is 1\n") Store(Foo1, Debug) Fatal(0xa0, 19, 0) } } Store(Arg0, ECD0) } // Event control for D1 // Arg0 has 0 for disable, non 0 for enable Method(WED1, 1) { if (LEqual(Arg0, Zero)) { // We are disabling if (LEqual(ECD1, Zero)) { // ERROR - Event Control was already disabled Name(Foo, "WMIACPI: ASL: WED1 called, but ECD1 is 0\n") Store(Foo, Debug) Fatal(0xa0, 22, 0) } } else { // We are enabling if (LNotEqual(ECD1, Zero)) { // ERROR - Event Control was already enabled Name(Foo1, "WMIACPI: ASL: WED1 called, but WED1 is 1\n") Store(Foo1, Debug) Fatal(0xa0, 21, 0) } } Store(Arg0, ECD1) } // Event control for D2 // Arg0 has 0 for disable, non 0 for enable Method(WED2, 1) { if (LEqual(Arg0, Zero)) { // We are disabling if (LEqual(ECD2, Zero)) { // ERROR - Event Control was already disabled Name(Foo, "WMIACPI: ASL: WED2 called, but ECD2 is 0\n") Store(Foo, Debug) Fatal(0xa0, 24, 0) } } else { // We are enabling if (LNotEqual(ECD2, Zero)) { // ERROR - Event Control was already enabled Name(Foo1, "WMIACPI: ASL: WED2 called, but WED2 is 1\n") Store(Foo1, Debug) Fatal(0xa0, 23, 0) } } Store(Arg0, ECD2) } // Get value for package A Method(GETA, 1) { // // Return data corresponding to instance specified if (LEqual(Arg0, Zero)) { Return(SAA0) } if (LEqual(Arg0, 1)) { Return(SAA1) } if (LEqual(Arg0, 2)) { Return(SAA2) } if (LEqual(Arg0, 3)) { Return(SAA3) } Name(Foo, "WMIACPI: ASL: GETA called with InstanceIndex = ") Store(Foo, Debug) Store(Arg0, Debug) Fatal(0xa0, 2, 0) } // Get value for package A Method(GETB, 1) { // // Return data corresponding to instance specified if (LEqual(Arg0, Zero)) { Return(SAB0) } if (LEqual(Arg0, 1)) { Return(SAB1) } if (LEqual(Arg0, 2)) { Return(SAB2) } if (LEqual(Arg0, 3)) { Return(SAB3) } Name(Foo, "WMIACPI: ASL: GETB called with InstanceIndex = ") Store(Foo, Debug) Store(Arg0, Debug) Fatal(0xa0, 4, 0) } Method(GETC, 1) { // // Return data corresponding to instance specified if (LEqual(Arg0, Zero)) { Return(SAC0) } if (LEqual(Arg0, 1)) { Return(SAC1) } if (LEqual(Arg0, 2)) { Return(SAC2) } if (LEqual(Arg0, 3)) { Return(SAC3) } Name(Foo, "WMIACPI: ASL: GETC called with InstanceIndex = ") Store(Foo, Debug) Store(Arg0, Debug) Fatal(0xa0, 6, 0) } // // Package Query data block // Arg0 has the instance being queried Method(WQAA, 1) { if (LEqual(CCAA, Zero)) { // ERROR - Collection Control was not enabled Name(Foo, "WMIACPI: ASL: WQAA called, but CCAA is 0\n") Store(Foo, Debug) Name(Foo1, "aa") Store(Debug, Foo1) Fatal(0xa0, 1, 0) } Return(GETA(Arg0)) } // // String Query data block // Arg0 has the instance being queried Method(WQAB, 1) { if (LEqual(CCAB, Zero)) { // ERROR - Collection Control was not enabled Name(Foo, "WMIACPI: ASL: WQAB called, but CCAB is 0\n") Store(Foo, Debug) Fatal(0xa0, 3, 0) } Return(GETB(Arg0)) } // // ULONG Query data block // Arg0 has the instance being queried Method(WQAC, 1) { if (LEqual(CCAC, Zero)) { // ERROR - Collection Control was not enabled Name(Foo, "WMIACPI: ASL: WQAC called, but CCAC is 0\n") Store(Foo, Debug) Fatal(0xa0, 5, 0) } Return(GETC(Arg0)) } Method(SETA, 2) { // // Return data corresponding to instance specified if (LEqual(Arg0, Zero)) { Store(Arg1, SAA0) Return(SAA0) } if (LEqual(Arg0, 1)) { Store(Arg1, SAA1) Return(SAA1) } if (LEqual(Arg0, 2)) { Store(Arg1, SAA2) Return(SAA2) } if (LEqual(Arg0, 3)) { Store(Arg1, SAA3) Return(SAA3) } Name(Foo, "WMIACPI: ASL: SETA called with InstanceIndex = ") Store(Foo, Debug) Store(Arg0, Debug) Fatal(0xa0, 8, 0) } Method(SETB, 2) { // // Return data corresponding to instance specified if (LEqual(Arg0, Zero)) { Store(Arg1, SAB0) Return(SAB0) } if (LEqual(Arg0, 1)) { Store(Arg1, SAB1) Return(SAB1) } if (LEqual(Arg0, 2)) { Store(Arg1, SAB2) Return(SAB2) } if (LEqual(Arg0, 3)) { Store(Arg1, SAB3) Return(SAB3) } Name(Foo, "WMIACPI: ASL: SETB called with InstanceIndex = ") Store(Foo, Debug) Store(Arg0, Debug) Fatal(0xa0, 10, 0) } Method(SETC, 2) { // // Return data corresponding to instance specified if (LEqual(Arg0, Zero)) { Store(Arg1, SAC0) Return(SAC0) } if (LEqual(Arg0, 1)) { Store(Arg1, SAC1) Return(SAC1) } if (LEqual(Arg0, 2)) { Store(Arg1, SAC2) Return(SAC2) } if (LEqual(Arg0, 3)) { Store(Arg1, SAC3) Return(SAC3) } Name(Foo, "WMIACPI: ASL: SETC called with InstanceIndex = ") Store(Foo, Debug) Store(Arg0, Debug) Fatal(0xa0, 12, 0) } // // Set Data Block - Package // Arg0 has the instance being queried // Arg1 has the new value for the data block instance Method(WSAA, 2) { if (LEqual(CCAA, Zero)) { // ERROR - Collection Control was not enabled Name(Foo, "WMIACPI: ASL: WSAA called, but CCAA is 0\n") Store(Foo, Debug) Fatal(0xa0, 7, 0) } Return(SETA(Arg0, Arg1)) } // // Set Data Block - String // Arg0 has the instance being queried // Arg1 has the new value for the data block instance Method(WSAB, 2) { if (LEqual(CCAB, Zero)) { // ERROR - Collection Control was not enabled Name(Foo, "WMIACPI: ASL: WSAB called, but CCAB is 0\n") Store(Foo, Debug) Fatal(0xa0, 9, 0) } Return(SETB(Arg0, Arg1)) } // // Set Data Block - ULONG // Arg0 has the instance being queried // Arg1 has the new value for the data block instance Method(WSAC, 2) { if (LEqual(CCAC, Zero)) { // ERROR - Collection Control was not enACled Name(Foo, "WMIACPI: ASL: WSAC called, but CCAC is 0\n") Store(Foo, Debug) Fatal(0xa0, 11, 0) } Return(SETC(Arg0, Arg1)) } // // Validate that instance index is between 0 and 3 Method(VINS, 1) { if (LLess(Arg0, Zero)) { Name(Foo, "WMIACPI: ASL: VINS called with InstanceIndex = ") Store(Foo, Debug) Store(Arg0, Debug) Fatal(0xa0, 27, 0) } if (LGreater(Arg0, 3)) { Name(Foo1, "WMIACPI: ASL: VINS called with InstanceIndex = ") Store(Foo1, Debug) Store(Arg0, Debug) Fatal(0xa0, 28, 0) } } // // Package Method data block // Arg0 has the instance being queried // Arg1 has the method id // Arg2 has the data passed Method(WMBA, 3) { // MethodId 1 - Get if (LEqual(Arg1, 1)) { Return(GETA(Arg0)) } // MethodId 2 - Set if (LEqual(Arg1, 2)) { SETA(Arg0, Arg2) Return(0) } // MethodId 3 - Event Generate if (LEqual(Arg1, 3)) { VINS(Arg0) if (LEqual(ECD0, Zero)) { // ERROR - Event Control was not enabled Name(Foo, "WMIACPI: ASL: WMBA called, but ECD0 is 0\n") Store(Foo, Debug) Fatal(0xa0, 25, 0) } Notify(AMW0, 0xd0) Return(0) } Name(Foo1, "WMIACPI: ASL: WMBA passed method id ") Store(Foo1, Debug) Store(Arg1, Debug) Fatal(0xa0, 26, 0) } // // String Method data block // Arg0 has the instance being queried // Arg1 has the method id // Arg2 has the data passed Method(WMBB, 3) { // MethodId 1 - Get if (LEqual(Arg1, 1)) { Return(GETB(Arg0)) } // MethodId 2 - Set if (LEqual(Arg1, 2)) { SETB(Arg0, Arg2) Return(0) } // MethodId 3 - Event Generate if (LEqual(Arg1, 3)) { VINS(Arg0) if (LEqual(ECD1, Zero)) { // ERROR - Event Control was not enabled Name(Foo, "WMIACPI: ASL: WMBB called, but ECD1 is 0\n") Store(Foo, Debug) Fatal(0xa0, 29, 0) } Notify(AMW0, 0xd1) Return(0) } Name(Foo1, "WMIACPI: ASL: WMBB passed method id ") Store(Foo1, Debug) Store(Arg1, Debug) Fatal(0xa0, 30, 0) } // // ULONG Method data block // Arg0 has the instance being queried // Arg1 has the method id // Arg2 has the data passed Method(WMBC, 3) { // MethodId 1 - Get if (LEqual(Arg1, 1)) { Return(GETC(Arg0)) } // MethodId 2 - Set if (LEqual(Arg1, 2)) { SETC(Arg0, Arg2) Return(0) } // MethodId 3 - Event Generate if (LEqual(Arg1, 3)) { VINS(Arg0) if (LEqual(ECD2, Zero)) { // ERROR - Event Control was not enabled Name(Foo, "WMIACPI: ASL: WMBC called, but ECD2 is 0\n") Store(Foo, Debug) Fatal(0xa0, 31, 0) } Notify(AMW0, 0xd2) Return(0) } Name(Foo1, "WMIACPI: ASL: WMBC passed method id ") Store(Foo1, Debug) Store(Arg1, Debug) Fatal(0xa0, 32, 0) } // // More info about an event // Arg0 is the event id that was fired Method(_WED, 1) { if (LEqual(Arg0, 0xd0)) { Return(GETA(0)) } if (LEqual(Arg0, 0xd1)) { Return(GETB(0)) } if (LEqual(Arg0, 0xd2)) { Return(GETC(0)) } Name(Foo, "WMIACPI: ASL: _WED passed event code ") Store(Foo, Debug) Store(Arg0, Debug) Fatal(0xa0, 33, 0) } }