xref: /openbmc/linux/drivers/platform/x86/think-lmi.h (revision a40cd7ef22fbb11229cf982920f4ec96c1f49282)
1*a40cd7efSMark Pearson /* SPDX-License-Identifier: GPL-2.0-or-later */
2*a40cd7efSMark Pearson 
3*a40cd7efSMark Pearson #ifndef _THINK_LMI_H_
4*a40cd7efSMark Pearson #define _THINK_LMI_H_
5*a40cd7efSMark Pearson 
6*a40cd7efSMark Pearson #include <linux/types.h>
7*a40cd7efSMark Pearson 
8*a40cd7efSMark Pearson #define TLMI_SETTINGS_COUNT  256
9*a40cd7efSMark Pearson #define TLMI_SETTINGS_MAXLEN 512
10*a40cd7efSMark Pearson #define TLMI_PWD_BUFSIZE     129
11*a40cd7efSMark Pearson #define TLMI_PWDTYPE_MAXLEN   64
12*a40cd7efSMark Pearson #define TLMI_ENC_MAXLEN       64
13*a40cd7efSMark Pearson #define TLMI_LANG_MAXLEN       4
14*a40cd7efSMark Pearson #define TLMI_PWDTYPE_LEN       4
15*a40cd7efSMark Pearson /*
16*a40cd7efSMark Pearson  * Longest string should be in the set command: allow size of BIOS
17*a40cd7efSMark Pearson  * option and choice
18*a40cd7efSMark Pearson  */
19*a40cd7efSMark Pearson #define TLMI_GETSET_MAXLEN (TLMI_SETTINGS_MAXLEN + TLMI_SETTINGS_MAXLEN)
20*a40cd7efSMark Pearson 
21*a40cd7efSMark Pearson /* Possible error values */
22*a40cd7efSMark Pearson struct tlmi_err_codes {
23*a40cd7efSMark Pearson 	const char *err_str;
24*a40cd7efSMark Pearson 	int err_code;
25*a40cd7efSMark Pearson };
26*a40cd7efSMark Pearson 
27*a40cd7efSMark Pearson enum encoding_option {
28*a40cd7efSMark Pearson 	TLMI_ENCODING_ASCII,
29*a40cd7efSMark Pearson 	TLMI_ENCODING_SCANCODE,
30*a40cd7efSMark Pearson };
31*a40cd7efSMark Pearson 
32*a40cd7efSMark Pearson /* password configuration details */
33*a40cd7efSMark Pearson struct tlmi_pwdcfg {
34*a40cd7efSMark Pearson 	uint32_t password_mode;
35*a40cd7efSMark Pearson 	uint32_t password_state;
36*a40cd7efSMark Pearson 	uint32_t min_length;
37*a40cd7efSMark Pearson 	uint32_t max_length;
38*a40cd7efSMark Pearson 	uint32_t supported_encodings;
39*a40cd7efSMark Pearson 	uint32_t supported_keyboard;
40*a40cd7efSMark Pearson };
41*a40cd7efSMark Pearson 
42*a40cd7efSMark Pearson /* password setting details */
43*a40cd7efSMark Pearson struct tlmi_pwd_setting {
44*a40cd7efSMark Pearson 	struct kobject kobj;
45*a40cd7efSMark Pearson 	bool valid;
46*a40cd7efSMark Pearson 	char display_name[TLMI_PWDTYPE_MAXLEN];
47*a40cd7efSMark Pearson 	char password[TLMI_PWD_BUFSIZE];
48*a40cd7efSMark Pearson 	const char *pwd_type;
49*a40cd7efSMark Pearson 	const char *role;
50*a40cd7efSMark Pearson 	int minlen;
51*a40cd7efSMark Pearson 	int maxlen;
52*a40cd7efSMark Pearson 	enum encoding_option encoding;
53*a40cd7efSMark Pearson 	char kbdlang[TLMI_LANG_MAXLEN];
54*a40cd7efSMark Pearson };
55*a40cd7efSMark Pearson 
56*a40cd7efSMark Pearson /* Attribute setting details */
57*a40cd7efSMark Pearson struct tlmi_attr_setting {
58*a40cd7efSMark Pearson 	struct kobject kobj;
59*a40cd7efSMark Pearson 	int index;
60*a40cd7efSMark Pearson 	char display_name[TLMI_SETTINGS_MAXLEN];
61*a40cd7efSMark Pearson 	char *possible_values;
62*a40cd7efSMark Pearson };
63*a40cd7efSMark Pearson 
64*a40cd7efSMark Pearson struct think_lmi {
65*a40cd7efSMark Pearson 	struct wmi_device *wmi_device;
66*a40cd7efSMark Pearson 
67*a40cd7efSMark Pearson 	int settings_count;
68*a40cd7efSMark Pearson 	bool can_set_bios_settings;
69*a40cd7efSMark Pearson 	bool can_get_bios_selections;
70*a40cd7efSMark Pearson 	bool can_set_bios_password;
71*a40cd7efSMark Pearson 	bool can_get_password_settings;
72*a40cd7efSMark Pearson 
73*a40cd7efSMark Pearson 	struct tlmi_attr_setting *setting[TLMI_SETTINGS_COUNT];
74*a40cd7efSMark Pearson 	struct device *class_dev;
75*a40cd7efSMark Pearson 	struct kset *attribute_kset;
76*a40cd7efSMark Pearson 	struct kset *authentication_kset;
77*a40cd7efSMark Pearson 	struct tlmi_pwd_setting *pwd_admin;
78*a40cd7efSMark Pearson 	struct tlmi_pwd_setting *pwd_power;
79*a40cd7efSMark Pearson };
80*a40cd7efSMark Pearson 
81*a40cd7efSMark Pearson #endif /* !_THINK_LMI_H_ */
82