sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}parenthsba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget-/translations/zh_CN/wmi/devices/alienware-wmimodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}hh2sbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/zh_TW/wmi/devices/alienware-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}hhFsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/it_IT/wmi/devices/alienware-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}hhZsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ja_JP/wmi/devices/alienware-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}hhnsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/ko_KR/wmi/devices/alienware-wmimodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}hhsbah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget-/translations/sp_SP/wmi/devices/alienware-wmimodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhcomment)}(h)SPDX-License-Identifier: GPL-2.0-or-laterh]h)SPDX-License-Identifier: GPL-2.0-or-later}hhsbah}(h]h ]h"]h$]h&] xml:spacepreserveuh1hhhhhhG/var/lib/git/docbuild/linux/Documentation/wmi/devices/alienware-wmi.rsthKubhsection)}(hhh](htitle)}(h.Dell AWCC WMI interface driver (alienware-wmi)h]h.Dell AWCC WMI interface driver (alienware-wmi)}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(h Introductionh]h Introduction}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhhhKubh paragraph)}(hXgThe WMI device WMAX has been implemented for many Alienware and Dell's G-Series models. Throughout these models, two implementations have been identified. The first one, used by older systems, deals with HDMI, brightness, RGB, amplifier and deep sleep control. The second one used by newer systems deals primarily with thermal, overclocking, and GPIO control.h]hXiThe WMI device WMAX has been implemented for many Alienware and Dell’s G-Series models. Throughout these models, two implementations have been identified. The first one, used by older systems, deals with HDMI, brightness, RGB, amplifier and deep sleep control. The second one used by newer systems deals primarily with thermal, overclocking, and GPIO control.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hX It is suspected that the latter is used by Alienware Command Center (AWCC) to manage manufacturer predefined thermal profiles. The alienware-wmi driver exposes Thermal_Information and Thermal_Control methods through the Platform Profile API to mimic AWCC's behavior.h]hX It is suspected that the latter is used by Alienware Command Center (AWCC) to manage manufacturer predefined thermal profiles. The alienware-wmi driver exposes Thermal_Information and Thermal_Control methods through the Platform Profile API to mimic AWCC’s behavior.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hThis newer interface, named AWCCMethodFunction has been reverse engineered, as Dell has not provided any official documentation. We will try to describe to the best of our ability its discovered inner workings.h]hThis newer interface, named AWCCMethodFunction has been reverse engineered, as Dell has not provided any official documentation. We will try to describe to the best of our ability its discovered inner workings.}(hhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubhnote)}(hvThe following method description may be incomplete and some operations have different implementations between devices.h]h)}(hvThe following method description may be incomplete and some operations have different implementations between devices.h]hvThe following method description may be incomplete and some operations have different implementations between devices.}(hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhhhhhhhNubh)}(hhh](h)}(hWMI interface descriptionh]hWMI interface description}(hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hhhhhKubh)}(hThe 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 }(hj1hhhNhNubh reference)}(h*`bmfdec `_h]hbmfdec}(hj;hhhNhNubah}(h]h ]h"]h$]h&]namebmfdecrefurihttps://github.com/pali/bmfdecuh1j9hj1ubhtarget)}(h! h]h}(h]bmfdecah ]h"]bmfdecah$]h&]refurijLuh1jM referencedKhj1ubh utility:}(hj1hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hj hhubh literal_block)}(hX[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("WMI Function"), guid("{A70591CE-A997-11DA-B012-B622A1EF5492}")] class AWCCWmiMethodFunction { [key, read] string InstanceName; [read] boolean Active; [WmiMethodId(13), Implemented, read, write, Description("Return Overclocking Report.")] void Return_OverclockingReport([out] uint32 argr); [WmiMethodId(14), Implemented, read, write, Description("Set OCUIBIOS Control.")] void Set_OCUIBIOSControl([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(15), Implemented, read, write, Description("Clear OC FailSafe Flag.")] void Clear_OCFailSafeFlag([out] uint32 argr); [WmiMethodId(19), Implemented, read, write, Description("Get Fan Sensors.")] void GetFanSensors([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(20), Implemented, read, write, Description("Thermal Information.")] void Thermal_Information([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(21), Implemented, read, write, Description("Thermal Control.")] void Thermal_Control([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(23), Implemented, read, write, Description("MemoryOCControl.")] void MemoryOCControl([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(26), Implemented, read, write, Description("System Information.")] void SystemInformation([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(28), Implemented, read, write, Description("Power Information.")] void PowerInformation([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(32), Implemented, read, write, Description("FW Update GPIO toggle.")] void FWUpdateGPIOtoggle([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(33), Implemented, read, write, Description("Read Total of GPIOs.")] void ReadTotalofGPIOs([out] uint32 argr); [WmiMethodId(34), Implemented, read, write, Description("Read GPIO pin Status.")] void ReadGPIOpPinStatus([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(35), Implemented, read, write, Description("Read Chassis Color.")] void ReadChassisColor([out] uint32 argr); [WmiMethodId(36), Implemented, read, write, Description("Read Platform Properties.")] void ReadPlatformProperties([out] uint32 argr); [WmiMethodId(37), Implemented, read, write, Description("Game Shift Status.")] void GameShiftStatus([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(128), Implemented, read, write, Description("Caldera SW installation.")] void CalderaSWInstallation([out] uint32 argr); [WmiMethodId(129), Implemented, read, write, Description("Caldera SW is released.")] void CalderaSWReleased([out] uint32 argr); [WmiMethodId(130), Implemented, read, write, Description("Caldera Connection Status.")] void CalderaConnectionStatus([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(131), Implemented, read, write, Description("Surprise Unplugged Flag Status.")] void SurpriseUnpluggedFlagStatus([out] uint32 argr); [WmiMethodId(132), Implemented, read, write, Description("Clear Surprise Unplugged Flag.")] void ClearSurpriseUnpluggedFlag([out] uint32 argr); [WmiMethodId(133), Implemented, read, write, Description("Cancel Undock Request.")] void CancelUndockRequest([out] uint32 argr); [WmiMethodId(135), Implemented, read, write, Description("Devices in Caldera.")] void DevicesInCaldera([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(136), Implemented, read, write, Description("Notify BIOS for SW ready to disconnect Caldera.")] void NotifyBIOSForSWReadyToDisconnectCaldera([out] uint32 argr); [WmiMethodId(160), Implemented, read, write, Description("Tobii SW installation.")] void TobiiSWinstallation([out] uint32 argr); [WmiMethodId(161), Implemented, read, write, Description("Tobii SW Released.")] void TobiiSWReleased([out] uint32 argr); [WmiMethodId(162), Implemented, read, write, Description("Tobii Camera Power Reset.")] void TobiiCameraPowerReset([out] uint32 argr); [WmiMethodId(163), Implemented, read, write, Description("Tobii Camera Power On.")] void TobiiCameraPowerOn([out] uint32 argr); [WmiMethodId(164), Implemented, read, write, Description("Tobii Camera Power Off.")] void TobiiCameraPowerOff([out] uint32 argr); };h]hX[WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("WMI Function"), guid("{A70591CE-A997-11DA-B012-B622A1EF5492}")] class AWCCWmiMethodFunction { [key, read] string InstanceName; [read] boolean Active; [WmiMethodId(13), Implemented, read, write, Description("Return Overclocking Report.")] void Return_OverclockingReport([out] uint32 argr); [WmiMethodId(14), Implemented, read, write, Description("Set OCUIBIOS Control.")] void Set_OCUIBIOSControl([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(15), Implemented, read, write, Description("Clear OC FailSafe Flag.")] void Clear_OCFailSafeFlag([out] uint32 argr); [WmiMethodId(19), Implemented, read, write, Description("Get Fan Sensors.")] void GetFanSensors([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(20), Implemented, read, write, Description("Thermal Information.")] void Thermal_Information([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(21), Implemented, read, write, Description("Thermal Control.")] void Thermal_Control([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(23), Implemented, read, write, Description("MemoryOCControl.")] void MemoryOCControl([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(26), Implemented, read, write, Description("System Information.")] void SystemInformation([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(28), Implemented, read, write, Description("Power Information.")] void PowerInformation([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(32), Implemented, read, write, Description("FW Update GPIO toggle.")] void FWUpdateGPIOtoggle([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(33), Implemented, read, write, Description("Read Total of GPIOs.")] void ReadTotalofGPIOs([out] uint32 argr); [WmiMethodId(34), Implemented, read, write, Description("Read GPIO pin Status.")] void ReadGPIOpPinStatus([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(35), Implemented, read, write, Description("Read Chassis Color.")] void ReadChassisColor([out] uint32 argr); [WmiMethodId(36), Implemented, read, write, Description("Read Platform Properties.")] void ReadPlatformProperties([out] uint32 argr); [WmiMethodId(37), Implemented, read, write, Description("Game Shift Status.")] void GameShiftStatus([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(128), Implemented, read, write, Description("Caldera SW installation.")] void CalderaSWInstallation([out] uint32 argr); [WmiMethodId(129), Implemented, read, write, Description("Caldera SW is released.")] void CalderaSWReleased([out] uint32 argr); [WmiMethodId(130), Implemented, read, write, Description("Caldera Connection Status.")] void CalderaConnectionStatus([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(131), Implemented, read, write, Description("Surprise Unplugged Flag Status.")] void SurpriseUnpluggedFlagStatus([out] uint32 argr); [WmiMethodId(132), Implemented, read, write, Description("Clear Surprise Unplugged Flag.")] void ClearSurpriseUnpluggedFlag([out] uint32 argr); [WmiMethodId(133), Implemented, read, write, Description("Cancel Undock Request.")] void CancelUndockRequest([out] uint32 argr); [WmiMethodId(135), Implemented, read, write, Description("Devices in Caldera.")] void DevicesInCaldera([in] uint32 arg2, [out] uint32 argr); [WmiMethodId(136), Implemented, read, write, Description("Notify BIOS for SW ready to disconnect Caldera.")] void NotifyBIOSForSWReadyToDisconnectCaldera([out] uint32 argr); [WmiMethodId(160), Implemented, read, write, Description("Tobii SW installation.")] void TobiiSWinstallation([out] uint32 argr); [WmiMethodId(161), Implemented, read, write, Description("Tobii SW Released.")] void TobiiSWReleased([out] uint32 argr); [WmiMethodId(162), Implemented, read, write, Description("Tobii Camera Power Reset.")] void TobiiCameraPowerReset([out] uint32 argr); [WmiMethodId(163), Implemented, read, write, Description("Tobii Camera Power On.")] void TobiiCameraPowerOn([out] uint32 argr); [WmiMethodId(164), Implemented, read, write, Description("Tobii Camera Power Off.")] void TobiiCameraPowerOff([out] uint32 argr); };}hjisbah}(h]h ]h"]h$]h&]hhuh1jghhhK%hj hhubh)}(hSome of these methods get quite intricate so we will describe them using pseudo-code that vaguely resembles the original ASL code.h]hSome of these methods get quite intricate so we will describe them using pseudo-code that vaguely resembles the original ASL code.}(hjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKHhj hhubh)}(hFMethods not described in the following document have unknown behavior.h]hFMethods not described in the following document have unknown behavior.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKKhj hhubeh}(h]wmi-interface-descriptionah ]h"]wmi interface descriptionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hArgument Structureh]hArgument Structure}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKNubh)}(hXxAll input arguments have type **uint32** and their structure is very similar between methods. Usually, the first byte corresponds to a specific *operation* the method performs, and the subsequent bytes correspond to *arguments* passed to this *operation*. For example, if an operation has code 0x01 and requires an ID 0xA0, the argument you would pass to the method is 0xA001.h](hAll input arguments have type }(hjhhhNhNubhstrong)}(h **uint32**h]huint32}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhh and their structure is very similar between methods. Usually, the first byte corresponds to a specific }(hjhhhNhNubhemphasis)}(h *operation*h]h operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh= the method performs, and the subsequent bytes correspond to }(hjhhhNhNubj)}(h *arguments*h]h arguments}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh passed to this }(hjhhhNhNubj)}(h *operation*h]h operation}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubhz. For example, if an operation has code 0x01 and requires an ID 0xA0, the argument you would pass to the method is 0xA001.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKPhjhhubeh}(h]argument-structureah ]h"]argument structureah$]h&]uh1hhhhhhhhKNubeh}(h] introductionah ]h"] introductionah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hThermal Methodsh]hThermal Methods}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKXubh)}(hhh](h)}(hCWMI method Thermal_Information([in] uint32 arg2, [out] uint32 argr)h]hCWMI method Thermal_Information([in] uint32 arg2, [out] uint32 argr)}(hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'hhhhhK[ubjh)}(hXif BYTE_0(arg2) == 0x01: argr = 1 if BYTE_0(arg2) == 0x02: argr = SYSTEM_DESCRIPTION if BYTE_0(arg2) == 0x03: if BYTE_1(arg2) == 0x00: argr = FAN_ID_0 if BYTE_1(arg2) == 0x01: argr = FAN_ID_1 if BYTE_1(arg2) == 0x02: argr = FAN_ID_2 if BYTE_1(arg2) == 0x03: argr = FAN_ID_3 if BYTE_1(arg2) == 0x04: argr = SENSOR_ID_CPU | 0x0100 if BYTE_1(arg2) == 0x05: argr = SENSOR_ID_GPU | 0x0100 if BYTE_1(arg2) == 0x06: argr = THERMAL_MODE_QUIET_ID if BYTE_1(arg2) == 0x07: argr = THERMAL_MODE_BALANCED_ID if BYTE_1(arg2) == 0x08: argr = THERMAL_MODE_BALANCED_PERFORMANCE_ID if BYTE_1(arg2) == 0x09: argr = THERMAL_MODE_PERFORMANCE_ID if BYTE_1(arg2) == 0x0A: argr = THERMAL_MODE_LOW_POWER_ID if BYTE_1(arg2) == 0x0B: argr = THERMAL_MODE_GMODE_ID else: argr = 0xFFFFFFFF if BYTE_0(arg2) == 0x04: if is_valid_sensor(BYTE_1(arg2)): argr = SENSOR_TEMP_C else: argr = 0xFFFFFFFF if BYTE_0(arg2) == 0x05: if is_valid_fan(BYTE_1(arg2)): argr = FAN_RPM() if BYTE_0(arg2) == 0x06: skip if BYTE_0(arg2) == 0x07: argr = 0 If BYTE_0(arg2) == 0x08: if is_valid_fan(BYTE_1(arg2)): argr = 0 else: argr = 0xFFFFFFFF if BYTE_0(arg2) == 0x09: if is_valid_fan(BYTE_1(arg2)): argr = FAN_UNKNOWN_STAT_0() else: argr = 0xFFFFFFFF if BYTE_0(arg2) == 0x0A: argr = THERMAL_MODE_BALANCED_ID if BYTE_0(arg2) == 0x0B: argr = CURRENT_THERMAL_MODE() if BYTE_0(arg2) == 0x0C: if is_valid_fan(BYTE_1(arg2)): argr = FAN_UNKNOWN_STAT_1() else: argr = 0xFFFFFFFFh]hXif BYTE_0(arg2) == 0x01: argr = 1 if BYTE_0(arg2) == 0x02: argr = SYSTEM_DESCRIPTION if BYTE_0(arg2) == 0x03: if BYTE_1(arg2) == 0x00: argr = FAN_ID_0 if BYTE_1(arg2) == 0x01: argr = FAN_ID_1 if BYTE_1(arg2) == 0x02: argr = FAN_ID_2 if BYTE_1(arg2) == 0x03: argr = FAN_ID_3 if BYTE_1(arg2) == 0x04: argr = SENSOR_ID_CPU | 0x0100 if BYTE_1(arg2) == 0x05: argr = SENSOR_ID_GPU | 0x0100 if BYTE_1(arg2) == 0x06: argr = THERMAL_MODE_QUIET_ID if BYTE_1(arg2) == 0x07: argr = THERMAL_MODE_BALANCED_ID if BYTE_1(arg2) == 0x08: argr = THERMAL_MODE_BALANCED_PERFORMANCE_ID if BYTE_1(arg2) == 0x09: argr = THERMAL_MODE_PERFORMANCE_ID if BYTE_1(arg2) == 0x0A: argr = THERMAL_MODE_LOW_POWER_ID if BYTE_1(arg2) == 0x0B: argr = THERMAL_MODE_GMODE_ID else: argr = 0xFFFFFFFF if BYTE_0(arg2) == 0x04: if is_valid_sensor(BYTE_1(arg2)): argr = SENSOR_TEMP_C else: argr = 0xFFFFFFFF if BYTE_0(arg2) == 0x05: if is_valid_fan(BYTE_1(arg2)): argr = FAN_RPM() if BYTE_0(arg2) == 0x06: skip if BYTE_0(arg2) == 0x07: argr = 0 If BYTE_0(arg2) == 0x08: if is_valid_fan(BYTE_1(arg2)): argr = 0 else: argr = 0xFFFFFFFF if BYTE_0(arg2) == 0x09: if is_valid_fan(BYTE_1(arg2)): argr = FAN_UNKNOWN_STAT_0() else: argr = 0xFFFFFFFF if BYTE_0(arg2) == 0x0A: argr = THERMAL_MODE_BALANCED_ID if BYTE_0(arg2) == 0x0B: argr = CURRENT_THERMAL_MODE() if BYTE_0(arg2) == 0x0C: if is_valid_fan(BYTE_1(arg2)): argr = FAN_UNKNOWN_STAT_1() else: argr = 0xFFFFFFFF}hj8sbah}(h]h ]h"]h$]h&]hhuh1jghhhK_hj'hhubh)}(hROperation 0x02 returns a *system description* buffer with the following structure:h](hOperation 0x02 returns a }(hjFhhhNhNubj)}(h*system description*h]hsystem description}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh% buffer with the following structure:}(hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhKhj'hhubjh)}(heout[0] -> Number of fans out[1] -> Number of sensors out[2] -> 0x00 out[3] -> Number of thermal modesh]heout[0] -> Number of fans out[1] -> Number of sensors out[2] -> 0x00 out[3] -> Number of thermal modes}hjfsbah}(h]h ]h"]h$]h&]hhuh1jghhhKhj'hhubh)}(hOperation 0x03 list all available fan IDs, sensor IDs and thermal profile codes in order, but different models may have different number of fans and thermal profiles. These are the known ranges:h]hOperation 0x03 list all available fan IDs, sensor IDs and thermal profile codes in order, but different models may have different number of fans and thermal profiles. These are the known ranges:}(hjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj'hhubh bullet_list)}(hhh](h list_item)}(hFan IDs: from 2 up to 4h]h)}(hjh]hFan IDs: from 2 up to 4}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h Sensor IDs: 2h]h)}(hjh]h Sensor IDs: 2}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubj)}(h&Thermal profile codes: from 1 up to 7 h]h)}(h%Thermal profile codes: from 1 up to 7h]h%Thermal profile codes: from 1 up to 7}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubeh}(h]h ]h"]h$]h&]bullet*uh1jhhhKhj'hhubh)}(hJIn total BYTE_1(ARG2) may range from 0x5 up to 0xD depending on the model.h]hJIn total BYTE_1(ARG2) may range from 0x5 up to 0xD depending on the model.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj'hhubeh}(h]=wmi-method-thermal-information-in-uint32-arg2-out-uint32-argrah ]h"]Cwmi method thermal_information([in] uint32 arg2, [out] uint32 argr)ah$]h&]uh1hhjhhhhhK[ubh)}(hhh](h)}(h?WMI method Thermal_Control([in] uint32 arg2, [out] uint32 argr)h]h?WMI method Thermal_Control([in] uint32 arg2, [out] uint32 argr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhKubjh)}(hXWif BYTE_0(arg2) == 0x01: if is_valid_thermal_profile(BYTE_1(arg2)): SET_THERMAL_PROFILE(BYTE_1(arg2)) argr = 0 if BYTE_0(arg2) == 0x02: if is_valid_fan(BYTE_1(arg2)): SET_FAN_SPEED_MULTIPLIER(BYTE_2(arg2)) argr = 0 else: argr = 0xFFFFFFFFh]hXWif BYTE_0(arg2) == 0x01: if is_valid_thermal_profile(BYTE_1(arg2)): SET_THERMAL_PROFILE(BYTE_1(arg2)) argr = 0 if BYTE_0(arg2) == 0x02: if is_valid_fan(BYTE_1(arg2)): SET_FAN_SPEED_MULTIPLIER(BYTE_2(arg2)) argr = 0 else: argr = 0xFFFFFFFF}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhKhjhhubj)}(h|While you can manually change the fan speed multiplier with this method, Dell's BIOS tends to overwrite this changes anyway.h]h)}(h|While you can manually change the fan speed multiplier with this method, Dell's BIOS tends to overwrite this changes anyway.h]h~While you can manually change the fan speed multiplier with this method, Dell’s BIOS tends to overwrite this changes anyway.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhj ubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(h*These are the known thermal profile codes:h]h*These are the known thermal profile codes:}(hj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubjh)}(hXCUSTOM 0x00 BALANCED_USTT 0xA0 BALANCED_PERFORMANCE_USTT 0xA1 COOL_USTT 0xA2 QUIET_USTT 0xA3 PERFORMANCE_USTT 0xA4 LOW_POWER_USTT 0xA5 QUIET 0x96 BALANCED 0x97 BALANCED_PERFORMANCE 0x98 PERFORMANCE 0x99 GMODE 0xABh]hXCUSTOM 0x00 BALANCED_USTT 0xA0 BALANCED_PERFORMANCE_USTT 0xA1 COOL_USTT 0xA2 QUIET_USTT 0xA3 PERFORMANCE_USTT 0xA4 LOW_POWER_USTT 0xA5 QUIET 0x96 BALANCED 0x97 BALANCED_PERFORMANCE 0x98 PERFORMANCE 0x99 GMODE 0xAB}hj2sbah}(h]h ]h"]h$]h&]hhuh1jghhhKhjhhubh)}(hUsually if a model doesn't support the first four profiles they will support the User Selectable Thermal Tables (USTT) profiles and vice-versa.h]hUsually if a model doesn’t support the first four profiles they will support the User Selectable Thermal Tables (USTT) profiles and vice-versa.}(hj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubh)}(h/GMODE replaces PERFORMANCE in G-Series laptops.h]h/GMODE replaces PERFORMANCE in G-Series laptops.}(hjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhjhhubeh}(h]9wmi-method-thermal-control-in-uint32-arg2-out-uint32-argrah ]h"]?wmi method thermal_control([in] uint32 arg2, [out] uint32 argr)ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h?WMI method GameShiftStatus([in] uint32 arg2, [out] uint32 argr)h]h?WMI method GameShiftStatus([in] uint32 arg2, [out] uint32 argr)}(hjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdhhhhhKubjh)}(hif BYTE_0(arg2) == 0x1: TOGGLE_GAME_SHIFT() argr = GET_GAME_SHIFT_STATUS() if BYTE_0(arg2) == 0x2: argr = GET_GAME_SHIFT_STATUS()h]hif BYTE_0(arg2) == 0x1: TOGGLE_GAME_SHIFT() argr = GET_GAME_SHIFT_STATUS() if BYTE_0(arg2) == 0x2: argr = GET_GAME_SHIFT_STATUS()}hjusbah}(h]h ]h"]h$]h&]hhuh1jghhhKhjdhhubh)}(hGame Shift Status does not change the fan speed profile but it could be some sort of CPU/GPU power profile. Benchmarks have not been done.h]hGame Shift Status does not change the fan speed profile but it could be some sort of CPU/GPU power profile. Benchmarks have not been done.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjdhhubh)}(hThis method is only present on Dell's G-Series laptops and it's implementation implies GMODE thermal profile is available, even if operation 0x03 of Thermal_Information does not list it.h]hThis method is only present on Dell’s G-Series laptops and it’s implementation implies GMODE thermal profile is available, even if operation 0x03 of Thermal_Information does not list it.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMhjdhhubh)}(h^G-key on Dell's G-Series laptops also changes Game Shift status, so both are directly related.h]h`G-key on Dell’s G-Series laptops also changes Game Shift status, so both are directly related.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM hjdhhubeh}(h]9wmi-method-gameshiftstatus-in-uint32-arg2-out-uint32-argrah ]h"]?wmi method gameshiftstatus([in] uint32 arg2, [out] uint32 argr)ah$]h&]uh1hhjhhhhhKubh)}(hhh](h)}(h=WMI method GetFanSensors([in] uint32 arg2, [out] uint32 argr)h]h=WMI method GetFanSensors([in] uint32 arg2, [out] uint32 argr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMubjh)}(hXjif BYTE_0(arg2) == 0x1: if is_valid_fan(BYTE_1(arg2)): argr = 1 else: argr = 0 if BYTE_0(arg2) == 0x2: if is_valid_fan(BYTE_1(arg2)): if BYTE_2(arg2) == 0: argr == SENSOR_ID else argr == 0xFFFFFFFF else: argr = 0h]hXjif BYTE_0(arg2) == 0x1: if is_valid_fan(BYTE_1(arg2)): argr = 1 else: argr = 0 if BYTE_0(arg2) == 0x2: if is_valid_fan(BYTE_1(arg2)): if BYTE_2(arg2) == 0: argr == SENSOR_ID else argr == 0xFFFFFFFF else: argr = 0}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhMhjhhubeh}(h]7wmi-method-getfansensors-in-uint32-arg2-out-uint32-argrah ]h"]=wmi method getfansensors([in] uint32 arg2, [out] uint32 argr)ah$]h&]uh1hhjhhhhhMubeh}(h]thermal-methodsah ]h"]thermal methodsah$]h&]uh1hhhhhhhhKXubh)}(hhh](h)}(hOverclocking Methodsh]hOverclocking Methods}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM#ubhwarning)}(hMThese methods have not been tested and are only partially reverse engineered.h]h)}(hMThese methods have not been tested and are only partially reverse engineered.h]hMThese methods have not been tested and are only partially reverse engineered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM&hjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(hhh](h)}(h7WMI method Return_OverclockingReport([out] uint32 argr)h]h7WMI method Return_OverclockingReport([out] uint32 argr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhM*ubjh)}(hCSMI (0xE3, 0x99) argr = 0h]hCSMI (0xE3, 0x99) argr = 0}hj sbah}(h]h ]h"]h$]h&]hhuh1jghhhM.hjhhubh)}(hCSMI is an unknown operation.h]hCSMI is an unknown operation.}(hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM1hjhhubeh}(h]4wmi-method-return-overclockingreport-out-uint32-argrah ]h"]7wmi method return_overclockingreport([out] uint32 argr)ah$]h&]uh1hhjhhhhhM*ubh)}(hhh](h)}(hCWMI method Set_OCUIBIOSControl([in] uint32 arg2, [out] uint32 argr)h]hCWMI method Set_OCUIBIOSControl([in] uint32 arg2, [out] uint32 argr)}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjDhhhhhM4ubjh)}(hCSMI (0xE3, 0x99) argr = 0h]hCSMI (0xE3, 0x99) argr = 0}hjUsbah}(h]h ]h"]h$]h&]hhuh1jghhhM8hjDhhubh)}(hCSMI is an unknown operation.h]hCSMI is an unknown operation.}(hjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhM;hjDhhubeh}(h]=wmi-method-set-ocuibioscontrol-in-uint32-arg2-out-uint32-argrah ]h"]Cwmi method set_ocuibioscontrol([in] uint32 arg2, [out] uint32 argr)ah$]h&]uh1hhjhhhhhM4ubh)}(hhh](h)}(h2WMI method Clear_OCFailSafeFlag([out] uint32 argr)h]h2WMI method Clear_OCFailSafeFlag([out] uint32 argr)}(hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhhhhhM>ubjh)}(hCSMI (0xE3, 0x99) argr = 0h]hCSMI (0xE3, 0x99) argr = 0}hjsbah}(h]h ]h"]h$]h&]hhuh1jghhhMBhjyhhubh)}(hCSMI is an unknown operation.h]hCSMI is an unknown operation.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMEhjyhhubeh}(h]/wmi-method-clear-ocfailsafeflag-out-uint32-argrah ]h"]2wmi method clear_ocfailsafeflag([out] uint32 argr)ah$]h&]uh1hhjhhhhhM>ubh)}(hhh](h)}(h?WMI method MemoryOCControl([in] uint32 arg2, [out] uint32 argr)h]h?WMI method MemoryOCControl([in] uint32 arg2, [out] uint32 argr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMIubh)}(heAWCC supports memory overclocking, but this method is very intricate and has not been deciphered yet.h]heAWCC supports memory overclocking, but this method is very intricate and has not been deciphered yet.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMKhjhhubeh}(h]9wmi-method-memoryoccontrol-in-uint32-arg2-out-uint32-argrah ]h"]?wmi method memoryoccontrol([in] uint32 arg2, [out] uint32 argr)ah$]h&]uh1hhjhhhhhMIubeh}(h]overclocking-methodsah ]h"]overclocking methodsah$]h&]uh1hhhhhhhhM#ubh)}(hhh](h)}(h GPIO methodsh]h GPIO methods}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMOubh)}(haThese methods are probably related to some kind of firmware update system, through a GPIO device.h]haThese methods are probably related to some kind of firmware update system, through a GPIO device.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMQhjhhubj)}(hMThese methods have not been tested and are only partially reverse engineered.h]h)}(hMThese methods have not been tested and are only partially reverse engineered.h]hMThese methods have not been tested and are only partially reverse engineered.}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhMUhjubah}(h]h ]h"]h$]h&]uh1jhjhhhhhNubh)}(hhh](h)}(hBWMI method FWUpdateGPIOtoggle([in] uint32 arg2, [out] uint32 argr)h]hBWMI method FWUpdateGPIOtoggle([in] uint32 arg2, [out] uint32 argr)}(hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhhhhMYubjh)}(hXif BYTE_0(arg2) == 0: if BYTE_1(arg2) == 1: SET_PIN_A_HIGH() else: SET_PIN_A_LOW() if BYTE_0(arg2) == 1: if BYTE_1(arg2) == 1: SET_PIN_B_HIGH() else: SET_PIN_B_LOW() else: argr = 1h]hXif BYTE_0(arg2) == 0: if BYTE_1(arg2) == 1: SET_PIN_A_HIGH() else: SET_PIN_A_LOW() if BYTE_0(arg2) == 1: if BYTE_1(arg2) == 1: SET_PIN_B_HIGH() else: SET_PIN_B_LOW() else: argr = 1}hj%sbah}(h]h ]h"]h$]h&]hhuh1jghhhM]hjhhubeh}(h]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hhhhhMnubjh)}(h argr = 0x02h]h argr = 0x02}hjLsbah}(h]h ]h"]h$]h&]hhuh1jghhhMrhj;hhubeh}(h]+wmi-method-readtotalofgpios-out-uint32-argrah ]h"].wmi method readtotalofgpios([out] uint32 argr)ah$]h&]uh1hhjhhhhhMnubh)}(hhh](h)}(hBWMI method ReadGPIOpPinStatus([in] uint32 arg2, [out] uint32 argr)h]hBWMI method ReadGPIOpPinStatus([in] uint32 arg2, [out] uint32 argr)}(hjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbhhhhhMuubjh)}(hdif BYTE_0(arg2) == 0: argr = PIN_A_STATUS if BYTE_0(arg2) == 1: argr = PIN_B_STATUSh]hdif BYTE_0(arg2) == 0: argr = PIN_A_STATUS if BYTE_0(arg2) == 1: argr = PIN_B_STATUS}hjssbah}(h]h ]h"]h$]h&]hhuh1jghhhMyhjbhhubeh}(h]`_ for documenting and testing available thermal profile codes.h](h Kudos to }(hjhhhNhNubj:)}(h/`AlexIII `_h]hAlexIII}(hjhhhNhNubah}(h]h ]h"]h$]h&]nameAlexIIIjK"https://github.com/AlexIII/tcc-g15uh1j9hjubjN)}(h% h]h}(h]alexiiiah ]h"]alexiiiah$]h&]refurijuh1jMj\Khjubh= for documenting and testing available thermal profile codes.}(hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhMhjhhubeh}(h]acknowledgementsah ]h"]acknowledgementsah$]h&]uh1hhhhhhhhMubeh}(h],dell-awcc-wmi-interface-driver-alienware-wmiah ]h"].dell awcc wmi interface driver (alienware-wmi)ah$]h&]uh1hhhhhhhhKubeh}(h]h ]h"]h$]h&]sourcehuh1hcurrent_sourceN current_lineNsettingsdocutils.frontendValues)}(hN generatorN datestampN source_linkN source_urlN toc_backlinksentryfootnote_backlinksK sectnum_xformKstrip_commentsNstrip_elements_with_classesN strip_classesN report_levelK halt_levelKexit_status_levelKdebugNwarning_streamN tracebackinput_encoding utf-8-siginput_encoding_error_handlerstrictoutput_encodingutf-8output_encoding_error_handlerjEerror_encodingutf-8error_encoding_error_handlerbackslashreplace language_codeenrecord_dependenciesNconfigN id_prefixhauto_id_prefixid dump_settingsNdump_internalsNdump_transformsNdump_pseudo_xmlNexpose_internalsNstrict_visitorN_disable_configN_sourceh _destinationN _config_files]7/var/lib/git/docbuild/linux/Documentation/docutils.confafile_insertion_enabled raw_enabledKline_length_limitM'pep_referencesN pep_base_urlhttps://peps.python.org/pep_file_url_templatepep-%04drfc_referencesN rfc_base_url&https://datatracker.ietf.org/doc/html/ tab_widthKtrim_footnote_reference_spacesyntax_highlightlong smart_quotessmartquotes_locales]character_level_inline_markupdoctitle_xform docinfo_xformKsectsubtitle_xform image_loadinglinkembed_stylesheetcloak_email_addressessection_self_linkenvNubreporterNindirect_targets]substitution_defs}substitution_names}refnames}refids}nameids}(jjjjjjjXjUj jjjjjjaj^jjjjjjjAj>jvjsjjjjjjj8j5j_j\jjjjjjjjjju nametypes}(jjjjXj jjjajjjjAjvjjjj8j_jjjjjuh}(jhjhjj jUjOjjjjjj'j^jjjdjjjjj>jjsjDjjyjjjjj5jj\j;jjbjjjjjjjju footnote_refs} citation_refs} autofootnotes]autofootnote_refs]symbol_footnotes]symbol_footnote_refs] footnotes] citations]autofootnote_startKsymbol_footnote_startK id_counter collectionsCounter}Rparse_messages]transform_messages] transformerN include_log] decorationNhhub.