Merge tag 'drm-next-2022-10-14' of git://anongit.freedesktop.org/drm/drm
[linux-2.6-microblaze.git] / drivers / platform / x86 / think-lmi.h
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2
3 #ifndef _THINK_LMI_H_
4 #define _THINK_LMI_H_
5
6 #include <linux/types.h>
7
8 #define TLMI_SETTINGS_COUNT  256
9 #define TLMI_SETTINGS_MAXLEN 512
10 #define TLMI_PWD_BUFSIZE     129
11 #define TLMI_LANG_MAXLEN       4
12 #define TLMI_INDEX_MAX        32
13
14 /* Possible error values */
15 struct tlmi_err_codes {
16         const char *err_str;
17         int err_code;
18 };
19
20 enum encoding_option {
21         TLMI_ENCODING_ASCII,
22         TLMI_ENCODING_SCANCODE,
23 };
24
25 enum level_option {
26         TLMI_LEVEL_USER,
27         TLMI_LEVEL_MASTER,
28 };
29
30 /* password configuration details */
31 struct tlmi_pwdcfg_core {
32         uint32_t password_mode;
33         uint32_t password_state;
34         uint32_t min_length;
35         uint32_t max_length;
36         uint32_t supported_encodings;
37         uint32_t supported_keyboard;
38 };
39
40 struct tlmi_pwdcfg_ext {
41         uint32_t hdd_user_password;
42         uint32_t hdd_master_password;
43         uint32_t nvme_user_password;
44         uint32_t nvme_master_password;
45 };
46
47 struct tlmi_pwdcfg {
48         struct tlmi_pwdcfg_core core;
49         struct tlmi_pwdcfg_ext ext;
50 };
51
52 /* password setting details */
53 struct tlmi_pwd_setting {
54         struct kobject kobj;
55         bool valid;
56         char password[TLMI_PWD_BUFSIZE];
57         const char *pwd_type;
58         const char *role;
59         int minlen;
60         int maxlen;
61         enum encoding_option encoding;
62         char kbdlang[TLMI_LANG_MAXLEN];
63         int index; /*Used for HDD and NVME auth */
64         enum level_option level;
65         bool cert_installed;
66         char *signature;
67         char *save_signature;
68 };
69
70 /* Attribute setting details */
71 struct tlmi_attr_setting {
72         struct kobject kobj;
73         int index;
74         char display_name[TLMI_SETTINGS_MAXLEN];
75         char *possible_values;
76 };
77
78 struct think_lmi {
79         struct wmi_device *wmi_device;
80
81         bool can_set_bios_settings;
82         bool can_get_bios_selections;
83         bool can_set_bios_password;
84         bool can_get_password_settings;
85         bool pending_changes;
86         bool can_debug_cmd;
87         bool opcode_support;
88         bool certificate_support;
89
90         struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT];
91         struct device *class_dev;
92         struct kset *attribute_kset;
93         struct kset *authentication_kset;
94
95         struct tlmi_pwdcfg pwdcfg;
96         struct tlmi_pwd_setting *pwd_admin;
97         struct tlmi_pwd_setting *pwd_power;
98         struct tlmi_pwd_setting *pwd_system;
99         struct tlmi_pwd_setting *pwd_hdd;
100         struct tlmi_pwd_setting *pwd_nvme;
101 };
102
103 #endif /* !_THINK_LMI_H_ */