← Documents Documentation/wmi/devices/lenovo-wmi-other.rst GitHub 원문 ↗

Linux 6.18.37 · WMI / Device Drivers

Lenovo WMI Interface Other Mode Driver

Lenovo Gaming Series의 PPT power limit를 firmware_attributes sysfs로 노출하는 Other Mode interface를 설명합니다.

Source pathDocumentation/wmi/devices/lenovo-wmi-other.rst
Source versionLinux v6.18.37
TranslationDUJINLABS 전문 번역 + 해설

요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.

1. 요약·해설

원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.

요약·해설

lenovo-wmi-other.rst:1-108

Lenovo Gaming Series의 PPT power limit를 firmware_attributes sysfs로 노출하는 Other Mode interface를 설명합니다.

2. 영어 원문 전체

번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.

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

3. 한국어 전문 번역

영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.

Other Mode와 power tuning

1-13

Lenovo WMI Other Mode interface는 여러 GUID로 나뉩니다. 주 interface는 Package Power Tracking(PPT) 같은 고급 power tuning 기능을 제공하고, 여러 data block GUID가 method별 context를 제공합니다.

.. SPDX-License-Identifier: GPL-2.0-or-later

===========================================================
Lenovo WMI Interface Other Mode Driver (lenovo-wmi-other)
===========================================================

Introduction
============
Lenovo WMI Other Mode interface is broken up into multiple GUIDs,
The primary Other Mode interface provides advanced power tuning features
such as Package Power Tracking (PPT). It is paired with multiple data block
GUIDs that provide context for the various methods.

firmware_attributes sysfs interface

14-33

GUID `DC2A8805-3A8C-41BA-A6F7-092E0089CD3B`의 Other Mode interface는 `firmware_attributes` class를 사용해 WMI attribute를 sysfs에 노출합니다. Lenovo Gaming Series 장치에서 CPU·GPU power limit와 기타 설정을 조정할 수 있습니다.

각 attribute에는 세부 정보를 탐색하는 capability data block이 있으며, Gamezone이 관리하는 platform profile마다 한 page씩 여러 page를 갖습니다.

attribute 경로는 `/sys/class/firmware-attributes/lenovo-wmi-other/attributes/<attribute>/`입니다.


Other Mode
----------

WMI GUID ``DC2A8805-3A8C-41BA-A6F7-092E0089CD3B``

The Other Mode WMI interface uses the firmware_attributes class to expose
various WMI attributes provided by the interface in the sysfs. This enables
CPU and GPU power limit tuning as well as various other attributes for
devices that fall under the "Gaming Series" of Lenovo devices. Each
attribute exposed by the Other Mode interface has corresponding
capability data blocks which allow the driver to probe details about the
attribute. Each attribute has multiple pages, one for each of the platform
profiles managed by the Gamezone interface. Attributes are exposed in sysfs
under the following path:

::

  /sys/class/firmware-attributes/lenovo-wmi-other/attributes/<attribute>/

LENOVO_CAPABILITY_DATA_01

34-56

GUID `7A8F5407-CB67-4D6E-B547-39B3BE018154`의 capability data는 integrated CPU와 GPU의 여러 power limit 정보를 제공합니다.

각 attribute는 현재값, 기본값, 표시 이름, 최댓값, 최솟값, 증가 step, type을 제공합니다. 구현된 PPT attribute는 sustained, slow, fast power limit 세 종류입니다.

firmware attribute 속성
속성의미
current_value현재값
default_value기본값
display_name표시 이름
max_value최댓값
min_value최솟값
scalar_increment값 증가 step
typeattribute type

각 power limit attribute가 sysfs에 제공하는 metadata입니다.

구현된 PPT attribute
Attribute의미
ppt_pl1_splPlatform Profile Tracking Sustained Power Limit
ppt_pl2_spptPlatform Profile Tracking Slow Package Power Tracking
ppt_pl3_fpptPlatform Profile Tracking Fast Package Power Tracking

Lenovo platform profile별 power limit입니다.

LENOVO_CAPABILITY_DATA_01
-------------------------

WMI GUID ``7A8F5407-CB67-4D6E-B547-39B3BE018154``

The LENOVO_CAPABILITY_DATA_01 interface provides information on various
power limits of integrated CPU and GPU components.

Each attribute has the following properties:
 - current_value
 - default_value
 - display_name
 - max_value
 - min_value
 - scalar_increment
 - type

The following attributes are implemented:
 - ppt_pl1_spl: Platform Profile Tracking Sustained Power Limit
 - ppt_pl2_sppt: Platform Profile Tracking Slow Package Power Tracking
 - ppt_pl3_fppt: Platform Profile Tracking Fast Package Power Tracking

method와 capability data class

57-108

embedded binary MOF는 `bmfdec`로 decode할 수 있습니다. `LENOVO_OTHER_METHOD`는 feature 값 조회·설정, command data 조회, TAC package data 조회의 네 method를 제공합니다.

`LENOVO_CAPABILITY_DATA_00`은 ID, capability, 기본값을, `_01`은 여기에 step·최솟값·최댓값을 더합니다. `_02`는 ID, capability, data size와 그 크기의 byte-array 기본값을 제공합니다.

LENOVO_OTHER_METHOD
IDMethod설명
17GetFeatureValueIDs로 feature 값 조회
18SetFeatureValueIDs와 value로 feature 값 설정
19GetDataByCommandIDs와 Command로 uint32 data array 조회
99GetDataByPackage최대 40바이트 입력으로 TAC byte data 조회

Other Mode의 WmiMethodId와 I/O입니다.

capability data field
ClassIDField
DATA_001IDs
DATA_002Capability
DATA_003DefaultValue
DATA_011IDs
DATA_012Capability
DATA_013DefaultValue
DATA_014Step
DATA_015MinValue
DATA_016MaxValue
DATA_021IDs
DATA_022Capability
DATA_023DataSize
DATA_024DataSize 길이의 DefaultValue byte array

세 capability class의 WmiDataId입니다.

WMI interface description
=========================

The WMI interface description can be decoded from the embedded binary MOF (bmof)
data using the `bmfdec <https://github.com/pali/bmfdec>`_ utility:

::

  [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO_OTHER_METHOD class"), guid("{dc2a8805-3a8c-41ba-a6f7-092e0089cd3b}")]
  class LENOVO_OTHER_METHOD {
    [key, read] string InstanceName;
    [read] boolean Active;

    [WmiMethodId(17), Implemented, Description("Get Feature Value ")] void GetFeatureValue([in] uint32 IDs, [out] uint32 value);
    [WmiMethodId(18), Implemented, Description("Set Feature Value ")] void SetFeatureValue([in] uint32 IDs, [in] uint32 value);
    [WmiMethodId(19), Implemented, Description("Get Data By Command ")] void GetDataByCommand([in] uint32 IDs, [in] uint32 Command, [out] uint32 DataSize, [out, WmiSizeIs("DataSize")] uint32 Data[]);
    [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[]);
  };

  [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 00"), guid("{362a3afe-3d96-4665-8530-96dad5bb300e}")]
  class LENOVO_CAPABILITY_DATA_00 {
    [key, read] string InstanceName;
    [read] boolean Active;

    [WmiDataId(1), read, Description(" IDs.")] uint32 IDs;
    [WmiDataId(2), read, Description("Capability.")] uint32 Capability;
    [WmiDataId(3), read, Description("Capability Default Value.")] uint32 DefaultValue;
  };

  [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 01"), guid("{7a8f5407-cb67-4d6e-b547-39b3be018154}")]
  class LENOVO_CAPABILITY_DATA_01 {
    [key, read] string InstanceName;
    [read] boolean Active;

    [WmiDataId(1), read, Description(" IDs.")] uint32 IDs;
    [WmiDataId(2), read, Description("Capability.")] uint32 Capability;
    [WmiDataId(3), read, Description("Default Value.")] uint32 DefaultValue;
    [WmiDataId(4), read, Description("Step.")] uint32 Step;
    [WmiDataId(5), read, Description("Minimum Value.")] uint32 MinValue;
    [WmiDataId(6), read, Description("Maximum Value.")] uint32 MaxValue;
  };

  [WMI, Dynamic, Provider("WmiProv"), Locale("MS\\0x409"), Description("LENOVO CAPABILITY DATA 02"), guid("{bbf1f790-6c2f-422b-bc8c-4e7369c7f6ab}")]
  class LENOVO_CAPABILITY_DATA_02 {
    [key, read] string InstanceName;
    [read] boolean Active;

    [WmiDataId(1), read, Description(" IDs.")] uint32 IDs;
    [WmiDataId(2), read, Description("Capability.")] uint32 Capability;
    [WmiDataId(3), read, Description("Data Size.")] uint32 DataSize;
    [WmiDataId(4), read, Description("Default Value"), WmiSizeIs("DataSize")] uint8 DefaultValue[];
  };