1*57139e12SDerek J. Clark.. SPDX-License-Identifier: GPL-2.0-or-later 2*57139e12SDerek J. Clark 3*57139e12SDerek J. Clark=========================================================== 4*57139e12SDerek J. ClarkLenovo WMI Interface Other Mode Driver (lenovo-wmi-other) 5*57139e12SDerek J. Clark=========================================================== 6*57139e12SDerek J. Clark 7*57139e12SDerek J. ClarkIntroduction 8*57139e12SDerek J. Clark============ 9*57139e12SDerek J. ClarkLenovo WMI Other Mode interface is broken up into multiple GUIDs, 10*57139e12SDerek J. ClarkThe primary Other Mode interface provides advanced power tuning features 11*57139e12SDerek J. Clarksuch as Package Power Tracking (PPT). It is paired with multiple data block 12*57139e12SDerek J. ClarkGUIDs that provide context for the various methods. 13*57139e12SDerek J. Clark 14*57139e12SDerek J. Clark 15*57139e12SDerek J. ClarkOther Mode 16*57139e12SDerek J. Clark---------- 17*57139e12SDerek J. Clark 18*57139e12SDerek J. ClarkWMI GUID ``DC2A8805-3A8C-41BA-A6F7-092E0089CD3B`` 19*57139e12SDerek J. Clark 20*57139e12SDerek J. ClarkThe Other Mode WMI interface uses the firmware_attributes class to expose 21*57139e12SDerek J. Clarkvarious WMI attributes provided by the interface in the sysfs. This enables 22*57139e12SDerek J. ClarkCPU and GPU power limit tuning as well as various other attributes for 23*57139e12SDerek J. Clarkdevices that fall under the "Gaming Series" of Lenovo devices. Each 24*57139e12SDerek J. Clarkattribute exposed by the Other Mode interface has corresponding 25*57139e12SDerek J. Clarkcapability data blocks which allow the driver to probe details about the 26*57139e12SDerek J. Clarkattribute. Each attribute has multiple pages, one for each of the platform 27*57139e12SDerek J. Clarkprofiles managed by the Gamezone interface. Attributes are exposed in sysfs 28*57139e12SDerek J. Clarkunder the following path: 29*57139e12SDerek J. Clark 30*57139e12SDerek J. Clark:: 31*57139e12SDerek J. Clark 32*57139e12SDerek J. Clark /sys/class/firmware-attributes/lenovo-wmi-other/attributes/<attribute>/ 33*57139e12SDerek J. Clark 34*57139e12SDerek J. ClarkLENOVO_CAPABILITY_DATA_01 35*57139e12SDerek J. Clark------------------------- 36*57139e12SDerek J. Clark 37*57139e12SDerek J. ClarkWMI GUID ``7A8F5407-CB67-4D6E-B547-39B3BE018154`` 38*57139e12SDerek J. Clark 39*57139e12SDerek J. ClarkThe LENOVO_CAPABILITY_DATA_01 interface provides information on various 40*57139e12SDerek J. Clarkpower limits of integrated CPU and GPU components. 41*57139e12SDerek J. Clark 42*57139e12SDerek J. ClarkEach attribute has the following properties: 43*57139e12SDerek J. Clark - current_value 44*57139e12SDerek J. Clark - default_value 45*57139e12SDerek J. Clark - display_name 46*57139e12SDerek J. Clark - max_value 47*57139e12SDerek J. Clark - min_value 48*57139e12SDerek J. Clark - scalar_increment 49*57139e12SDerek J. Clark - type 50*57139e12SDerek J. Clark 51*57139e12SDerek J. ClarkThe following attributes are implemented: 52*57139e12SDerek J. Clark - ppt_pl1_spl: Platform Profile Tracking Sustained Power Limit 53*57139e12SDerek J. Clark - ppt_pl2_sppt: Platform Profile Tracking Slow Package Power Tracking 54*57139e12SDerek J. Clark - ppt_pl3_fppt: Platform Profile Tracking Fast Package Power Tracking 55*57139e12SDerek J. Clark 56*57139e12SDerek J. Clark 57*57139e12SDerek J. ClarkWMI interface description 58*57139e12SDerek J. Clark========================= 59*57139e12SDerek J. Clark 60*57139e12SDerek J. ClarkThe WMI interface description can be decoded from the embedded binary MOF (bmof) 61*57139e12SDerek J. Clarkdata using the `bmfdec <https://github.com/pali/bmfdec>`_ utility: 62*57139e12SDerek J. Clark 63*57139e12SDerek J. Clark:: 64*57139e12SDerek J. Clark 65*57139e12SDerek J. Clark [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO_OTHER_METHOD class"), guid("{dc2a8805-3a8c-41ba-a6f7-092e0089cd3b}")] 66*57139e12SDerek J. Clark class LENOVO_OTHER_METHOD { 67*57139e12SDerek J. Clark [key, read] string InstanceName; 68*57139e12SDerek J. Clark [read] boolean Active; 69*57139e12SDerek J. Clark 70*57139e12SDerek J. Clark [WmiMethodId(17), Implemented, Description("Get Feature Value ")] void GetFeatureValue([in] uint32 IDs, [out] uint32 value); 71*57139e12SDerek J. Clark [WmiMethodId(18), Implemented, Description("Set Feature Value ")] void SetFeatureValue([in] uint32 IDs, [in] uint32 value); 72*57139e12SDerek J. Clark [WmiMethodId(19), Implemented, Description("Get Data By Command ")] void GetDataByCommand([in] uint32 IDs, [in] uint32 Command, [out] uint32 DataSize, [out, WmiSizeIs("DataSize")] uint32 Data[]); 73*57139e12SDerek J. Clark [WmiMethodId(99), Implemented, Description("Get Data By Package for TAC")] void GetDataByPackage([in, Max(40)] uint8 Input[], [out] uint32 DataSize, [out, WmiSizeIs("DataSize")] uint8 Data[]); 74*57139e12SDerek J. Clark }; 75*57139e12SDerek J. Clark 76*57139e12SDerek J. Clark [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 00"), guid("{362a3afe-3d96-4665-8530-96dad5bb300e}")] 77*57139e12SDerek J. Clark class LENOVO_CAPABILITY_DATA_00 { 78*57139e12SDerek J. Clark [key, read] string InstanceName; 79*57139e12SDerek J. Clark [read] boolean Active; 80*57139e12SDerek J. Clark 81*57139e12SDerek J. Clark [WmiDataId(1), read, Description(" IDs.")] uint32 IDs; 82*57139e12SDerek J. Clark [WmiDataId(2), read, Description("Capability.")] uint32 Capability; 83*57139e12SDerek J. Clark [WmiDataId(3), read, Description("Capability Default Value.")] uint32 DefaultValue; 84*57139e12SDerek J. Clark }; 85*57139e12SDerek J. Clark 86*57139e12SDerek J. Clark [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 01"), guid("{7a8f5407-cb67-4d6e-b547-39b3be018154}")] 87*57139e12SDerek J. Clark class LENOVO_CAPABILITY_DATA_01 { 88*57139e12SDerek J. Clark [key, read] string InstanceName; 89*57139e12SDerek J. Clark [read] boolean Active; 90*57139e12SDerek J. Clark 91*57139e12SDerek J. Clark [WmiDataId(1), read, Description(" IDs.")] uint32 IDs; 92*57139e12SDerek J. Clark [WmiDataId(2), read, Description("Capability.")] uint32 Capability; 93*57139e12SDerek J. Clark [WmiDataId(3), read, Description("Default Value.")] uint32 DefaultValue; 94*57139e12SDerek J. Clark [WmiDataId(4), read, Description("Step.")] uint32 Step; 95*57139e12SDerek J. Clark [WmiDataId(5), read, Description("Minimum Value.")] uint32 MinValue; 96*57139e12SDerek J. Clark [WmiDataId(6), read, Description("Maximum Value.")] uint32 MaxValue; 97*57139e12SDerek J. Clark }; 98*57139e12SDerek J. Clark 99*57139e12SDerek J. Clark [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 02"), guid("{bbf1f790-6c2f-422b-bc8c-4e7369c7f6ab}")] 100*57139e12SDerek J. Clark class LENOVO_CAPABILITY_DATA_02 { 101*57139e12SDerek J. Clark [key, read] string InstanceName; 102*57139e12SDerek J. Clark [read] boolean Active; 103*57139e12SDerek J. Clark 104*57139e12SDerek J. Clark [WmiDataId(1), read, Description(" IDs.")] uint32 IDs; 105*57139e12SDerek J. Clark [WmiDataId(2), read, Description("Capability.")] uint32 Capability; 106*57139e12SDerek J. Clark [WmiDataId(3), read, Description("Data Size.")] uint32 DataSize; 107*57139e12SDerek J. Clark [WmiDataId(4), read, Description("Default Value"), WmiSizeIs("DataSize")] uint8 DefaultValue[]; 108*57139e12SDerek J. Clark }; 109