xref: /openbmc/linux/drivers/platform/x86/think-lmi.h (revision f5bc0157be9baf1e2f12fb53f1e392b955e1c57f)
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
12a40cd7efSMark Pearson 
13a40cd7efSMark Pearson /* Possible error values */
14a40cd7efSMark Pearson struct tlmi_err_codes {
15a40cd7efSMark Pearson 	const char *err_str;
16a40cd7efSMark Pearson 	int err_code;
17a40cd7efSMark Pearson };
18a40cd7efSMark Pearson 
19a40cd7efSMark Pearson enum encoding_option {
20a40cd7efSMark Pearson 	TLMI_ENCODING_ASCII,
21a40cd7efSMark Pearson 	TLMI_ENCODING_SCANCODE,
22a40cd7efSMark Pearson };
23a40cd7efSMark Pearson 
24a40cd7efSMark Pearson /* password configuration details */
25a40cd7efSMark Pearson struct tlmi_pwdcfg {
26a40cd7efSMark Pearson 	uint32_t password_mode;
27a40cd7efSMark Pearson 	uint32_t password_state;
28a40cd7efSMark Pearson 	uint32_t min_length;
29a40cd7efSMark Pearson 	uint32_t max_length;
30a40cd7efSMark Pearson 	uint32_t supported_encodings;
31a40cd7efSMark Pearson 	uint32_t supported_keyboard;
32a40cd7efSMark Pearson };
33a40cd7efSMark Pearson 
34a40cd7efSMark Pearson /* password setting details */
35a40cd7efSMark Pearson struct tlmi_pwd_setting {
36a40cd7efSMark Pearson 	struct kobject kobj;
37a40cd7efSMark Pearson 	bool valid;
38a40cd7efSMark Pearson 	char password[TLMI_PWD_BUFSIZE];
39a40cd7efSMark Pearson 	const char *pwd_type;
40a40cd7efSMark Pearson 	const char *role;
41a40cd7efSMark Pearson 	int minlen;
42a40cd7efSMark Pearson 	int maxlen;
43a40cd7efSMark Pearson 	enum encoding_option encoding;
44a40cd7efSMark Pearson 	char kbdlang[TLMI_LANG_MAXLEN];
45a40cd7efSMark Pearson };
46a40cd7efSMark Pearson 
47a40cd7efSMark Pearson /* Attribute setting details */
48a40cd7efSMark Pearson struct tlmi_attr_setting {
49a40cd7efSMark Pearson 	struct kobject kobj;
50a40cd7efSMark Pearson 	int index;
51a40cd7efSMark Pearson 	char display_name[TLMI_SETTINGS_MAXLEN];
52a40cd7efSMark Pearson 	char *possible_values;
53a40cd7efSMark Pearson };
54a40cd7efSMark Pearson 
55a40cd7efSMark Pearson struct think_lmi {
56a40cd7efSMark Pearson 	struct wmi_device *wmi_device;
57a40cd7efSMark Pearson 
58a40cd7efSMark Pearson 	int settings_count;
59a40cd7efSMark Pearson 	bool can_set_bios_settings;
60a40cd7efSMark Pearson 	bool can_get_bios_selections;
61a40cd7efSMark Pearson 	bool can_set_bios_password;
62a40cd7efSMark Pearson 	bool can_get_password_settings;
6395d42920SMark Pearson 	bool pending_changes;
64*f5bc0157SMark Pearson 	bool can_debug_cmd;
65a40cd7efSMark Pearson 
66a40cd7efSMark Pearson 	struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT];
67a40cd7efSMark Pearson 	struct device *class_dev;
68a40cd7efSMark Pearson 	struct kset *attribute_kset;
69a40cd7efSMark Pearson 	struct kset *authentication_kset;
70a40cd7efSMark Pearson 	struct tlmi_pwd_setting *pwd_admin;
71a40cd7efSMark Pearson 	struct tlmi_pwd_setting *pwd_power;
72a40cd7efSMark Pearson };
73a40cd7efSMark Pearson 
74a40cd7efSMark Pearson #endif /* !_THINK_LMI_H_ */
75