€•ÆkŒsphinx.addnodes”Œdocument”“”)”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)”}”(hhh]”(hŒ pending_xref”“”)”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…””}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ0/translations/zh_CN/wmi/devices/msi-wmi-platform”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)”}”(hhh]”hŒChinese (Traditional)”…””}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/zh_TW/wmi/devices/msi-wmi-platform”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒItalian”…””}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/it_IT/wmi/devices/msi-wmi-platform”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒJapanese”…””}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ja_JP/wmi/devices/msi-wmi-platform”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒKorean”…””}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/ko_KR/wmi/devices/msi-wmi-platform”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒPortuguese (Brazilian)”…””}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/pt_BR/wmi/devices/msi-wmi-platform”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)”}”(hhh]”hŒSpanish”…””}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ0/translations/sp_SP/wmi/devices/msi-wmi-platform”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒcomment”“”)”}”(hŒ)SPDX-License-Identifier: GPL-2.0-or-later”h]”hŒ)SPDX-License-Identifier: GPL-2.0-or-later”…””}”hh·sbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1hµhhh²hh³ŒJ/var/lib/git/docbuild/linux/Documentation/wmi/devices/msi-wmi-platform.rst”h´KubhŒsection”“”)”}”(hhh]”(hŒtitle”“”)”}”(hŒ3MSI WMI Platform Features driver (msi-wmi-platform)”h]”hŒ3MSI WMI Platform Features driver (msi-wmi-platform)”…””}”(hhÏh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ Introduction”h]”hŒ Introduction”…””}”(hhàh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhhÝh²hh³hÇh´KubhŒ paragraph”“”)”}”(hŒéMany MSI notebooks support various features like reading fan sensors. This features are controlled by the embedded controller, with the ACPI firmware exposing a standard ACPI WMI interface on top of the embedded controller interface.”h]”hŒéMany MSI notebooks support various features like reading fan sensors. This features are controlled by the embedded controller, with the ACPI firmware exposing a standard ACPI WMI interface on top of the embedded controller interface.”…””}”(hhðh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K hhÝh²hubeh}”(h]”Œ introduction”ah ]”h"]”Œ introduction”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒWMI interface description”h]”hŒWMI interface description”…””}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´Kubhï)”}”(hŒ“The WMI interface description can be decoded from the embedded binary MOF (bmof) data using the `bmfdec `_ utility:”h]”(hŒ`The WMI interface description can be decoded from the embedded binary MOF (bmof) data using the ”…””}”(hjh²hh³Nh´NubhŒ reference”“”)”}”(hŒ*`bmfdec `_”h]”hŒbmfdec”…””}”(hj!h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œbmfdec”Œrefuri”Œhttps://github.com/pali/bmfdec”uh1jhjubhŒtarget”“”)”}”(hŒ! ”h]”h}”(h]”Œbmfdec”ah ]”h"]”Œbmfdec”ah$]”h&]”Œrefuri”j2uh1j3Œ referenced”KhjubhŒ utility:”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Khjh²hubhŒ literal_block”“”)”}”(hX˜[WMI, Locale("MS\0x409"), Description("This class contains the definition of the package used in other classes"), guid("{ABBC0F60-8EA1-11d1-00A0-C90629100000}")] class Package { [WmiDataId(1), read, write, Description("16 bytes of data")] uint8 Bytes[16]; }; [WMI, Locale("MS\0x409"), Description("This class contains the definition of the package used in other classes"), guid("{ABBC0F63-8EA1-11d1-00A0-C90629100000}")] class Package_32 { [WmiDataId(1), read, write, Description("32 bytes of data")] uint8 Bytes[32]; }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\0x409"), Description("Class used to operate methods on a package"), guid("{ABBC0F6E-8EA1-11d1-00A0-C90629100000}")] class MSI_ACPI { [key, read] string InstanceName; [read] boolean Active; [WmiMethodId(1), Implemented, read, write, Description("Return the contents of a package")] void GetPackage([out, id(0)] Package Data); [WmiMethodId(2), Implemented, read, write, Description("Set the contents of a package")] void SetPackage([in, id(0)] Package Data); [WmiMethodId(3), Implemented, read, write, Description("Return the contents of a package")] void Get_EC([out, id(0)] Package_32 Data); [WmiMethodId(4), Implemented, read, write, Description("Set the contents of a package")] void Set_EC([in, id(0)] Package_32 Data); [WmiMethodId(5), Implemented, read, write, Description("Return the contents of a package")] void Get_BIOS([in, out, id(0)] Package_32 Data); [WmiMethodId(6), Implemented, read, write, Description("Set the contents of a package")] void Set_BIOS([in, out, id(0)] Package_32 Data); [WmiMethodId(7), Implemented, read, write, Description("Return the contents of a package")] void Get_SMBUS([in, out, id(0)] Package_32 Data); [WmiMethodId(8), Implemented, read, write, Description("Set the contents of a package")] void Set_SMBUS([in, out, id(0)] Package_32 Data); [WmiMethodId(9), Implemented, read, write, Description("Return the contents of a package")] void Get_MasterBattery([in, out, id(0)] Package_32 Data); [WmiMethodId(10), Implemented, read, write, Description("Set the contents of a package")] void Set_MasterBattery([in, out, id(0)] Package_32 Data); [WmiMethodId(11), Implemented, read, write, Description("Return the contents of a package")] void Get_SlaveBattery([in, out, id(0)] Package_32 Data); [WmiMethodId(12), Implemented, read, write, Description("Set the contents of a package")] void Set_SlaveBattery([in, out, id(0)] Package_32 Data); [WmiMethodId(13), Implemented, read, write, Description("Return the contents of a package")] void Get_Temperature([in, out, id(0)] Package_32 Data); [WmiMethodId(14), Implemented, read, write, Description("Set the contents of a package")] void Set_Temperature([in, out, id(0)] Package_32 Data); [WmiMethodId(15), Implemented, read, write, Description("Return the contents of a package")] void Get_Thermal([in, out, id(0)] Package_32 Data); [WmiMethodId(16), Implemented, read, write, Description("Set the contents of a package")] void Set_Thermal([in, out, id(0)] Package_32 Data); [WmiMethodId(17), Implemented, read, write, Description("Return the contents of a package")] void Get_Fan([in, out, id(0)] Package_32 Data); [WmiMethodId(18), Implemented, read, write, Description("Set the contents of a package")] void Set_Fan([in, out, id(0)] Package_32 Data); [WmiMethodId(19), Implemented, read, write, Description("Return the contents of a package")] void Get_Device([in, out, id(0)] Package_32 Data); [WmiMethodId(20), Implemented, read, write, Description("Set the contents of a package")] void Set_Device([in, out, id(0)] Package_32 Data); [WmiMethodId(21), Implemented, read, write, Description("Return the contents of a package")] void Get_Power([in, out, id(0)] Package_32 Data); [WmiMethodId(22), Implemented, read, write, Description("Set the contents of a package")] void Set_Power([in, out, id(0)] Package_32 Data); [WmiMethodId(23), Implemented, read, write, Description("Return the contents of a package")] void Get_Debug([in, out, id(0)] Package_32 Data); [WmiMethodId(24), Implemented, read, write, Description("Set the contents of a package")] void Set_Debug([in, out, id(0)] Package_32 Data); [WmiMethodId(25), Implemented, read, write, Description("Return the contents of a package")] void Get_AP([in, out, id(0)] Package_32 Data); [WmiMethodId(26), Implemented, read, write, Description("Set the contents of a package")] void Set_AP([in, out, id(0)] Package_32 Data); [WmiMethodId(27), Implemented, read, write, Description("Return the contents of a package")] void Get_Data([in, out, id(0)] Package_32 Data); [WmiMethodId(28), Implemented, read, write, Description("Set the contents of a package")] void Set_Data([in, out, id(0)] Package_32 Data); [WmiMethodId(29), Implemented, read, write, Description("Return the contents of a package")] void Get_WMI([out, id(0)] Package_32 Data); };”h]”hX˜[WMI, Locale("MS\0x409"), Description("This class contains the definition of the package used in other classes"), guid("{ABBC0F60-8EA1-11d1-00A0-C90629100000}")] class Package { [WmiDataId(1), read, write, Description("16 bytes of data")] uint8 Bytes[16]; }; [WMI, Locale("MS\0x409"), Description("This class contains the definition of the package used in other classes"), guid("{ABBC0F63-8EA1-11d1-00A0-C90629100000}")] class Package_32 { [WmiDataId(1), read, write, Description("32 bytes of data")] uint8 Bytes[32]; }; [WMI, Dynamic, Provider("WmiProv"), Locale("MS\0x409"), Description("Class used to operate methods on a package"), guid("{ABBC0F6E-8EA1-11d1-00A0-C90629100000}")] class MSI_ACPI { [key, read] string InstanceName; [read] boolean Active; [WmiMethodId(1), Implemented, read, write, Description("Return the contents of a package")] void GetPackage([out, id(0)] Package Data); [WmiMethodId(2), Implemented, read, write, Description("Set the contents of a package")] void SetPackage([in, id(0)] Package Data); [WmiMethodId(3), Implemented, read, write, Description("Return the contents of a package")] void Get_EC([out, id(0)] Package_32 Data); [WmiMethodId(4), Implemented, read, write, Description("Set the contents of a package")] void Set_EC([in, id(0)] Package_32 Data); [WmiMethodId(5), Implemented, read, write, Description("Return the contents of a package")] void Get_BIOS([in, out, id(0)] Package_32 Data); [WmiMethodId(6), Implemented, read, write, Description("Set the contents of a package")] void Set_BIOS([in, out, id(0)] Package_32 Data); [WmiMethodId(7), Implemented, read, write, Description("Return the contents of a package")] void Get_SMBUS([in, out, id(0)] Package_32 Data); [WmiMethodId(8), Implemented, read, write, Description("Set the contents of a package")] void Set_SMBUS([in, out, id(0)] Package_32 Data); [WmiMethodId(9), Implemented, read, write, Description("Return the contents of a package")] void Get_MasterBattery([in, out, id(0)] Package_32 Data); [WmiMethodId(10), Implemented, read, write, Description("Set the contents of a package")] void Set_MasterBattery([in, out, id(0)] Package_32 Data); [WmiMethodId(11), Implemented, read, write, Description("Return the contents of a package")] void Get_SlaveBattery([in, out, id(0)] Package_32 Data); [WmiMethodId(12), Implemented, read, write, Description("Set the contents of a package")] void Set_SlaveBattery([in, out, id(0)] Package_32 Data); [WmiMethodId(13), Implemented, read, write, Description("Return the contents of a package")] void Get_Temperature([in, out, id(0)] Package_32 Data); [WmiMethodId(14), Implemented, read, write, Description("Set the contents of a package")] void Set_Temperature([in, out, id(0)] Package_32 Data); [WmiMethodId(15), Implemented, read, write, Description("Return the contents of a package")] void Get_Thermal([in, out, id(0)] Package_32 Data); [WmiMethodId(16), Implemented, read, write, Description("Set the contents of a package")] void Set_Thermal([in, out, id(0)] Package_32 Data); [WmiMethodId(17), Implemented, read, write, Description("Return the contents of a package")] void Get_Fan([in, out, id(0)] Package_32 Data); [WmiMethodId(18), Implemented, read, write, Description("Set the contents of a package")] void Set_Fan([in, out, id(0)] Package_32 Data); [WmiMethodId(19), Implemented, read, write, Description("Return the contents of a package")] void Get_Device([in, out, id(0)] Package_32 Data); [WmiMethodId(20), Implemented, read, write, Description("Set the contents of a package")] void Set_Device([in, out, id(0)] Package_32 Data); [WmiMethodId(21), Implemented, read, write, Description("Return the contents of a package")] void Get_Power([in, out, id(0)] Package_32 Data); [WmiMethodId(22), Implemented, read, write, Description("Set the contents of a package")] void Set_Power([in, out, id(0)] Package_32 Data); [WmiMethodId(23), Implemented, read, write, Description("Return the contents of a package")] void Get_Debug([in, out, id(0)] Package_32 Data); [WmiMethodId(24), Implemented, read, write, Description("Set the contents of a package")] void Set_Debug([in, out, id(0)] Package_32 Data); [WmiMethodId(25), Implemented, read, write, Description("Return the contents of a package")] void Get_AP([in, out, id(0)] Package_32 Data); [WmiMethodId(26), Implemented, read, write, Description("Set the contents of a package")] void Set_AP([in, out, id(0)] Package_32 Data); [WmiMethodId(27), Implemented, read, write, Description("Return the contents of a package")] void Get_Data([in, out, id(0)] Package_32 Data); [WmiMethodId(28), Implemented, read, write, Description("Set the contents of a package")] void Set_Data([in, out, id(0)] Package_32 Data); [WmiMethodId(29), Implemented, read, write, Description("Return the contents of a package")] void Get_WMI([out, id(0)] Package_32 Data); };”…””}”hjOsbah}”(h]”h ]”h"]”h$]”h&]”hÅhÆuh1jMh³hÇh´Khjh²hubhï)”}”(hŒíDue to a peculiarity in how Windows handles the ``CreateByteField()`` ACPI operator (errors only happen when a invalid byte field is ultimately accessed), all methods require a 32 byte input buffer, even if the Binary MOF says otherwise.”h]”(hŒ0Due to a peculiarity in how Windows handles the ”…””}”(hj]h²hh³Nh´NubhŒliteral”“”)”}”(hŒ``CreateByteField()``”h]”hŒCreateByteField()”…””}”(hjgh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj]ubhŒ¨ ACPI operator (errors only happen when a invalid byte field is ultimately accessed), all methods require a 32 byte input buffer, even if the Binary MOF says otherwise.”…””}”(hj]h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kƒhjh²hubhï)”}”(hŒªThe input buffer contains a single byte to select the subfeature to be accessed and 31 bytes of input data, the meaning of which depends on the subfeature being accessed.”h]”hŒªThe input buffer contains a single byte to select the subfeature to be accessed and 31 bytes of input data, the meaning of which depends on the subfeature being accessed.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K‡hjh²hubhï)”}”(hŒ»The output buffer contains a single byte which signals success or failure (``0x00`` on failure) and 31 bytes of output data, the meaning if which depends on the subfeature being accessed.”h]”(hŒKThe output buffer contains a single byte which signals success or failure (”…””}”(hjh²hh³Nh´Nubjf)”}”(hŒ``0x00``”h]”hŒ0x00”…””}”(hj•h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jehjubhŒh on failure) and 31 bytes of output data, the meaning if which depends on the subfeature being accessed.”…””}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KŠhjh²hubhŒnote”“”)”}”(hŒ£The ACPI control method responsible for handling the WMI method calls is not thread-safe. This is a firmware bug that needs to be handled inside the driver itself.”h]”hï)”}”(hŒ£The ACPI control method responsible for handling the WMI method calls is not thread-safe. This is a firmware bug that needs to be handled inside the driver itself.”h]”hŒ£The ACPI control method responsible for handling the WMI method calls is not thread-safe. This is a firmware bug that needs to be handled inside the driver itself.”…””}”(hj³h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KŽhj¯ubah}”(h]”h ]”h"]”h$]”h&]”uh1j­hjh²hh³hÇh´NubhÉ)”}”(hhh]”(hÎ)”}”(hŒWMI method Get_EC()”h]”hŒWMI method Get_EC()”…””}”(hjÊh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÇh²hh³hÇh´K’ubhï)”}”(hŒ¨Returns embedded controller information, the selected subfeature does not matter. The output data contains a flag byte and a 28 byte controller firmware version string.”h]”hŒ¨Returns embedded controller information, the selected subfeature does not matter. The output data contains a flag byte and a 28 byte controller firmware version string.”…””}”(hjØh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K”hjÇh²hubhï)”}”(hŒ¹The first 4 bits of the flag byte contain the minor version of the embedded controller interface, with the next 2 bits containing the major version of the embedded controller interface.”h]”hŒ¹The first 4 bits of the flag byte contain the minor version of the embedded controller interface, with the next 2 bits containing the major version of the embedded controller interface.”…””}”(hjæh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K—hjÇh²hubhï)”}”(hŒ™The 7th bit signals if the embedded controller page changed (exact meaning is unknown), and the last bit signals if the platform is a Tigerlake platform.”h]”hŒ™The 7th bit signals if the embedded controller page changed (exact meaning is unknown), and the last bit signals if the platform is a Tigerlake platform.”…””}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KšhjÇh²hubhï)”}”(hŒKThe MSI software seems to only use this interface when the last bit is set.”h]”hŒKThe MSI software seems to only use this interface when the last bit is set.”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KhjÇh²hubeh}”(h]”Œwmi-method-get-ec”ah ]”h"]”Œwmi method get_ec()”ah$]”h&]”uh1hÈhjh²hh³hÇh´K’ubhÉ)”}”(hhh]”(hÎ)”}”(hŒWMI method Get_Fan()”h]”hŒWMI method Get_Fan()”…””}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjh²hh³hÇh´K ubhï)”}”(hXFan speed sensors can be accessed by selecting subfeature ``0x00``. The output data contains up to four 16-bit fan speed readings in big-endian format. Most machines do not support all four fan speed sensors, so the remaining reading are hardcoded to ``0x0000``.”h]”(hŒ:Fan speed sensors can be accessed by selecting subfeature ”…””}”(hj)h²hh³Nh´Nubjf)”}”(hŒ``0x00``”h]”hŒ0x00”…””}”(hj1h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj)ubhŒ¹. The output data contains up to four 16-bit fan speed readings in big-endian format. Most machines do not support all four fan speed sensors, so the remaining reading are hardcoded to ”…””}”(hj)h²hh³Nh´Nubjf)”}”(hŒ ``0x0000``”h]”hŒ0x0000”…””}”(hjCh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jehj)ubhŒ.”…””}”(hj)h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¢hjh²hubhï)”}”(hŒBThe fan RPM readings can be calculated with the following formula:”h]”hŒBThe fan RPM readings can be calculated with the following formula:”…””}”(hj[h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¦hjh²hubhŒ block_quote”“”)”}”(hŒ#RPM = 480000 / ”h]”hï)”}”(hŒ"RPM = 480000 / ”h]”hŒ"RPM = 480000 / ”…””}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¨hjkubah}”(h]”h ]”h"]”h$]”h&]”uh1jih³hÇh´K¨hjh²hubhï)”}”(hŒ?If the fan speed reading is zero, then the fan RPM is zero too.”h]”hŒ?If the fan speed reading is zero, then the fan RPM is zero too.”…””}”(hjƒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´Kªhjh²hubeh}”(h]”Œwmi-method-get-fan”ah ]”h"]”Œwmi method get_fan()”ah$]”h&]”uh1hÈhjh²hh³hÇh´K ubhÉ)”}”(hhh]”(hÎ)”}”(hŒWMI method Get_WMI()”h]”hŒWMI method Get_WMI()”…””}”(hjœh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhj™h²hh³hÇh´K­ubhï)”}”(hŒìReturns the version of the ACPI WMI interface, the selected subfeature does not matter. The output data contains two bytes, the first one contains the major version and the last one contains the minor revision of the ACPI WMI interface.”h]”hŒìReturns the version of the ACPI WMI interface, the selected subfeature does not matter. The output data contains two bytes, the first one contains the major version and the last one contains the minor revision of the ACPI WMI interface.”…””}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¯hj™h²hubhï)”}”(hŒ]The MSI software seems to only use this interface when the major version is greater than two.”h]”hŒ]The MSI software seems to only use this interface when the major version is greater than two.”…””}”(hj¸h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K³hj™h²hubeh}”(h]”Œwmi-method-get-wmi”ah ]”h"]”Œwmi method get_wmi()”ah$]”h&]”uh1hÈhjh²hh³hÇh´K­ubeh}”(h]”Œwmi-interface-description”ah ]”h"]”Œwmi interface description”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´KubhÉ)”}”(hhh]”(hÎ)”}”(hŒ2Reverse-Engineering the MSI WMI Platform interface”h]”hŒ2Reverse-Engineering the MSI WMI Platform interface”…””}”(hjÙh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hÍhjÖh²hh³hÇh´K¶ubhŒwarning”“”)”}”(hŒ‘Randomly poking the embedded controller interface can potentially cause damage to the machine and other unwanted side effects, please be careful.”h]”hï)”}”(hŒ‘Randomly poking the embedded controller interface can potentially cause damage to the machine and other unwanted side effects, please be careful.”h]”hŒ‘Randomly poking the embedded controller interface can potentially cause damage to the machine and other unwanted side effects, please be careful.”…””}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´K¸hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1jçhjÖh²hh³hÇh´Nubhï)”}”(hŒ¸The underlying embedded controller interface is used by the ``msi-ec`` driver, and it seems that many methods just copy a part of the embedded controller memory into the output buffer.”h]”(hŒ`_.”h]”(hŒQMore information about the MSI embedded controller interface can be found at the ”…””}”(hjAh²hh³Nh´Nubj )”}”(hŒ;`msi-ec project `_”h]”hŒmsi-ec project”…””}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”Œname”Œmsi-ec project”j1Œ'https://github.com/BeardOverflow/msi-ec”uh1jhjAubj4)”}”(hŒ* ”h]”h}”(h]”Œmsi-ec-project”ah ]”h"]”Œmsi-ec project”ah$]”h&]”Œrefuri”jYuh1j3jBKhjAubhŒ.”…””}”(hjAh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÃhjÖh²hubhï)”}”(hŒZSpecial thanks go to github user `glpnk` for showing how to decode the fan speed readings.”h]”(hŒ!Special thanks go to github user ”…””}”(hjqh²hh³Nh´NubhŒtitle_reference”“”)”}”(hŒ`glpnk`”h]”hŒglpnk”…””}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jyhjqubhŒ2 for showing how to decode the fan speed readings.”…””}”(hjqh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hîh³hÇh´KÆhjÖh²hubeh}”(h]”Œ2reverse-engineering-the-msi-wmi-platform-interface”ah ]”h"]”Œ2reverse-engineering the msi wmi platform interface”ah$]”h&]”uh1hÈhhÊh²hh³hÇh´K¶ubeh}”(h]”Œ1msi-wmi-platform-features-driver-msi-wmi-platform”ah ]”h"]”Œ3msi wmi platform features driver (msi-wmi-platform)”ah$]”h&]”uh1hÈhhh²hh³hÇh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÇuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)”}”(hÍNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”Œentry”Œfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jÆŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÇŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(j jjjjÓjÐj>j;jjj–j“jËjÈj˜j•jcj`uŒ nametypes”}”(j ‰j‰jÓ‰j>ˆj‰j–‰jˉj˜‰jcˆuh}”(jhÊjhÝjÐjj;j5jjÇj“jjÈj™j•jÖj`jZuŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.