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